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
config BUTTONS_LOWER
bool "Generic Lower Half Button Dirver"
bool "Generic Lower Half Button Driver"
default n
depends on ARCH_BUTTONS && ARCH_IRQBUTTONS
---help---

View File

@ -1,7 +1,7 @@
/****************************************************************************
* 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>
*
* 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 */
press |= opriv->bo_pollevents.ap_press;
release |= opriv->bo_pollevents.ap_release;
press |= opriv->bo_pollevents.bp_press;
release |= opriv->bo_pollevents.bp_release;
break;
}
}
@ -322,8 +322,8 @@ static void btn_sample(FAR struct btn_upperhalf_s *priv)
* newly released.
*/
change = sample ^ priv->bu_sample;
press = change & sample;
change = sample ^ priv->bu_sample;
press = change & sample;
DEBUGASSERT(lower->bl_supported);
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
/* Have any poll events occurred? */
if ((press & opriv->bo_pollevents.ap_press) != 0 ||
(release & opriv->bo_pollevents.ap_release) != 0)
if ((press & opriv->bo_pollevents.bp_press) != 0 ||
(release & opriv->bo_pollevents.bp_release) != 0)
{
/* Yes.. Notify all waiters */
@ -431,8 +431,8 @@ static int btn_open(FAR struct file *filep)
DEBUGASSERT(lower && lower->bl_supported);
supported = lower->bl_supported(lower);
opriv->bo_pollevents.ap_press = supported;
opriv->bo_pollevents.ap_release = supported;
opriv->bo_pollevents.bp_press = supported;
opriv->bo_pollevents.bp_release = supported;
#endif
/* 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 */
opriv->bo_pollevents.ap_press = pollevents->ap_press;
opriv->bo_pollevents.ap_release = pollevents->ap_release;
opriv->bo_pollevents.bp_press = pollevents->bp_press;
opriv->bo_pollevents.bp_release = pollevents->bp_release;
/* Enable/disable interrupt handling */

View File

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

View File

@ -1,7 +1,7 @@
/************************************************************************************
* 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>
*
* Redistribution and use in source and binary forms, with or without
@ -46,6 +46,7 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
#ifndef CONFIG_BUTTONS_NPOLLWAITERS
@ -64,6 +65,17 @@
#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
* Description: Register to receive a signal whenever there is a change in
* the state of button inputs. This feature, of course, depends
@ -73,11 +85,12 @@
* with the errno value set appropriately.
*/
#define BTNIOC_REGISTER _BTNIOC(0x0002)
#define BTNIOC_REGISTER _BTNIOC(0x0003)
/****************************************************************************
* Public Types
****************************************************************************/
/* 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
* from the button driver.
@ -85,6 +98,17 @@
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
* command and describes the conditions under which the client would like
* to receive notification.