Button upper half driver: Add definitions needed for compilation with the poll() interface is not disabled.

This commit is contained in:
Gregory Nutt 2016-06-11 07:22:31 -06:00
parent e891a33c2e
commit 9c4b604074
4 changed files with 40 additions and 14 deletions

View File

@ -331,7 +331,7 @@ config BUTTONS
if BUTTONS if BUTTONS
config BUTTONS_LOWER config BUTTONS_LOWER
bool "Generic Lower Half Button Dirver" bool "Generic Lower Half Button Driver"
default n default n
depends on ARCH_BUTTONS && ARCH_IRQBUTTONS depends on ARCH_BUTTONS && ARCH_IRQBUTTONS
---help--- ---help---

View File

@ -1,7 +1,7 @@
/**************************************************************************** /****************************************************************************
* drivers/input/button_upper.c * drivers/input/button_upper.c
* *
* Copyright (C) 2015 Gregory Nutt. All rights reserved. * Copyright (C) 2015-2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -230,8 +230,8 @@ static void btn_enable(FAR struct btn_upperhalf_s *priv)
{ {
/* Yes.. OR in the poll event buttons */ /* Yes.. OR in the poll event buttons */
press |= opriv->bo_pollevents.ap_press; press |= opriv->bo_pollevents.bp_press;
release |= opriv->bo_pollevents.ap_release; release |= opriv->bo_pollevents.bp_release;
break; break;
} }
} }
@ -322,8 +322,8 @@ static void btn_sample(FAR struct btn_upperhalf_s *priv)
* newly released. * newly released.
*/ */
change = sample ^ priv->bu_sample; change = sample ^ priv->bu_sample;
press = change & sample; press = change & sample;
DEBUGASSERT(lower->bl_supported); DEBUGASSERT(lower->bl_supported);
release = change & (lower->bl_supported(lower) & ~sample); release = change & (lower->bl_supported(lower) & ~sample);
@ -335,8 +335,8 @@ static void btn_sample(FAR struct btn_upperhalf_s *priv)
#ifndef CONFIG_DISABLE_POLL #ifndef CONFIG_DISABLE_POLL
/* Have any poll events occurred? */ /* Have any poll events occurred? */
if ((press & opriv->bo_pollevents.ap_press) != 0 || if ((press & opriv->bo_pollevents.bp_press) != 0 ||
(release & opriv->bo_pollevents.ap_release) != 0) (release & opriv->bo_pollevents.bp_release) != 0)
{ {
/* Yes.. Notify all waiters */ /* Yes.. Notify all waiters */
@ -431,8 +431,8 @@ static int btn_open(FAR struct file *filep)
DEBUGASSERT(lower && lower->bl_supported); DEBUGASSERT(lower && lower->bl_supported);
supported = lower->bl_supported(lower); supported = lower->bl_supported(lower);
opriv->bo_pollevents.ap_press = supported; opriv->bo_pollevents.bp_press = supported;
opriv->bo_pollevents.ap_release = supported; opriv->bo_pollevents.bp_release = supported;
#endif #endif
/* Attach the open structure to the device */ /* Attach the open structure to the device */
@ -664,8 +664,8 @@ static int btn_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
{ {
/* Save the poll events */ /* Save the poll events */
opriv->bo_pollevents.ap_press = pollevents->ap_press; opriv->bo_pollevents.bp_press = pollevents->bp_press;
opriv->bo_pollevents.ap_release = pollevents->ap_release; opriv->bo_pollevents.bp_release = pollevents->bp_release;
/* Enable/disable interrupt handling */ /* Enable/disable interrupt handling */

View File

@ -61,6 +61,7 @@
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
/* Configuration ************************************************************/ /* Configuration ************************************************************/
#ifndef CONFIG_AJOYSTICK_NPOLLWAITERS #ifndef CONFIG_AJOYSTICK_NPOLLWAITERS
@ -159,6 +160,7 @@
/**************************************************************************** /****************************************************************************
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/
/* This type is a bit set that contains the state of all analog joystick /* This type is a bit set that contains the state of all analog joystick
* buttons. * buttons.
*/ */

View File

@ -1,7 +1,7 @@
/************************************************************************************ /************************************************************************************
* include/nuttx/input/buttons.h * include/nuttx/input/buttons.h
* *
* Copyright (C) 2015 Gregory Nutt. All rights reserved. * Copyright (C) 2015-2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -46,6 +46,7 @@
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
/* Configuration ************************************************************/ /* Configuration ************************************************************/
#ifndef CONFIG_BUTTONS_NPOLLWAITERS #ifndef CONFIG_BUTTONS_NPOLLWAITERS
@ -64,6 +65,17 @@
#define BTNIOC_SUPPORTED _BTNIOC(0x0001) #define BTNIOC_SUPPORTED _BTNIOC(0x0001)
/* Command: BTNIOC_POLLEVENTS
* Description: Specify the set of button events that can cause a poll()
* to awaken. The default is all button depressions and all
* button releases (all supported buttons);
* Argument: A read-only pointer to an instance of struct ajoy_pollevents_s
* Return: Zero (OK) on success. Minus one will be returned on failure
* with the errno value set appropriately.
*/
#define BTNIOC_POLLEVENTS _BTNIOC(0x0002)
/* Command: BTNIOC_REGISTER /* Command: BTNIOC_REGISTER
* Description: Register to receive a signal whenever there is a change in * Description: Register to receive a signal whenever there is a change in
* the state of button inputs. This feature, of course, depends * the state of button inputs. This feature, of course, depends
@ -73,11 +85,12 @@
* with the errno value set appropriately. * with the errno value set appropriately.
*/ */
#define BTNIOC_REGISTER _BTNIOC(0x0002) #define BTNIOC_REGISTER _BTNIOC(0x0003)
/**************************************************************************** /****************************************************************************
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/
/* This type is a bit set that contains the state of all buttons as defined /* This type is a bit set that contains the state of all buttons as defined
* in arch/board/board.h. This is the value that is returned when reading * in arch/board/board.h. This is the value that is returned when reading
* from the button driver. * from the button driver.
@ -85,6 +98,17 @@
typedef uint8_t btn_buttonset_t; typedef uint8_t btn_buttonset_t;
/* A reference to this structure is provided with the BTNIOC_POLLEVENTS IOCTL
* command and describes the conditions under which the client would like
* to receive notification.
*/
struct btn_pollevents_s
{
btn_buttonset_t bp_press; /* Set of button depressions to wake up the poll */
btn_buttonset_t bp_release; /* Set of button releases to wake up the poll */
};
/* A reference to this structure is provided with the BTNIOC_REGISTER IOCTL /* A reference to this structure is provided with the BTNIOC_REGISTER IOCTL
* command and describes the conditions under which the client would like * command and describes the conditions under which the client would like
* to receive notification. * to receive notification.