drivers/input/nunchuck.c: Add Nintendo Wii Nunchuck driver

This commit is contained in:
Alan Carvalho de Assis
2017-11-28 12:10:06 -06:00
committed by Gregory Nutt
parent da7f0542f0
commit 5a814a773d
9 changed files with 845 additions and 33 deletions
+19
View File
@@ -426,3 +426,22 @@ config AJOYSTICK_NPOLLWAITERS
depends on !DISABLE_POLL
endif # AJOYSTICK
config INPUT_NUNCHUCK
bool "Nintendo Wii Nunchuck Joystick (White Model)"
default n
select I2C
---help---
Enable a Nintendo Wii Nunchuck joystick upper half driver. The
nunchuck joystick provides position data as an integer value.The
analog positional data may also be accompanied by discrete
button data.
if INPUT_NUNCHUCK
config NUNCHUCK_NPOLLWAITERS
int "Max Number of Poll Waiters"
default 2
depends on !DISABLE_POLL
endif # INPUT_NUNCHUCK
+4
View File
@@ -91,6 +91,10 @@ ifeq ($(CONFIG_AJOYSTICK),y)
CSRCS += ajoystick.c
endif
ifeq ($(CONFIG_INPUT_NUNCHUCK),y)
CSRCS += nunchuck.c
endif
# Include input device driver build support
DEPPATH += --dep-path input
File diff suppressed because it is too large Load Diff
+26 -30
View File
@@ -72,31 +72,33 @@
#define _WLCIOCBASE (0x1300) /* Wireless modules ioctl character driver commands */
#define _CFGDIOCBASE (0x1400) /* Config Data device (app config) ioctl commands */
#define _TCIOCBASE (0x1500) /* Timer ioctl commands */
#define _DJOYBASE (0x1600) /* Discrete joystick ioctl commands */
#define _AJOYBASE (0x1700) /* Analog joystick ioctl commands */
#define _PIPEBASE (0x1800) /* FIFO/pipe ioctl commands */
#define _RTCBASE (0x1900) /* RTC ioctl commands */
#define _RELAYBASE (0x1a00) /* Relay devices ioctl commands */
#define _CANBASE (0x1b00) /* CAN ioctl commands */
#define _BTNBASE (0x1c00) /* Button ioctl commands */
#define _ULEDBASE (0x1d00) /* User LED ioctl commands */
#define _ZCBASE (0x1e00) /* Zero Cross ioctl commands */
#define _LOOPBASE (0x1f00) /* Loop device commands */
#define _MODEMBASE (0x2000) /* Modem ioctl commands */
#define _I2CBASE (0x2100) /* I2C driver commands */
#define _SPIBASE (0x2200) /* SPI driver commands */
#define _GPIOBASE (0x2300) /* GPIO driver commands */
#define _CLIOCBASE (0x2400) /* Contactless modules ioctl commands */
#define _USBCBASE (0x2500) /* USB-C controller ioctl commands */
#define _MAC802154BASE (0x2600) /* 802.15.4 MAC ioctl commands */
#define _PWRBASE (0x2700) /* Power-related ioctl commands */
#define _FBIOCBASE (0x2800) /* Frame buffer character driver ioctl commands */
#define _JOYBASE (0x1600) /* Joystick ioctl commands */
#define _PIPEBASE (0x1700) /* FIFO/pipe ioctl commands */
#define _RTCBASE (0x1800) /* RTC ioctl commands */
#define _RELAYBASE (0x1900) /* Relay devices ioctl commands */
#define _CANBASE (0x1a00) /* CAN ioctl commands */
#define _BTNBASE (0x1b00) /* Button ioctl commands */
#define _ULEDBASE (0x1c00) /* User LED ioctl commands */
#define _ZCBASE (0x1d00) /* Zero Cross ioctl commands */
#define _LOOPBASE (0x1e00) /* Loop device commands */
#define _MODEMBASE (0x1f00) /* Modem ioctl commands */
#define _I2CBASE (0x2000) /* I2C driver commands */
#define _SPIBASE (0x2100) /* SPI driver commands */
#define _GPIOBASE (0x2200) /* GPIO driver commands */
#define _CLIOCBASE (0x2300) /* Contactless modules ioctl commands */
#define _USBCBASE (0x2400) /* USB-C controller ioctl commands */
#define _MAC802154BASE (0x2500) /* 802.15.4 MAC ioctl commands */
#define _PWRBASE (0x2600) /* Power-related ioctl commands */
#define _FBIOCBASE (0x2700) /* Frame buffer character driver ioctl commands */
/* boardctl() commands share the same number space */
#define _BOARDBASE (0xff00) /* boardctl commands */
/* Macros used to manage ioctl commands */
/* Macros used to manage ioctl commands. IOCTL commands are divided into
* groups of 256 commands for major, broad functional areas. That makes
* them a limited resource.
*/
#define _IOC_MASK (0x00ff)
#define _IOC_TYPE(cmd) ((cmd) & ~_IOC_MASK)
@@ -335,17 +337,11 @@
#define _TCIOCVALID(c) (_IOC_TYPE(c)==_TCIOCBASE)
#define _TCIOC(nr) _IOC(_TCIOCBASE,nr)
/* Discrete joystick driver ioctl definitions *******************************/
/* (see nuttx/include/input/djoystick.h */
/* Joystick driver ioctl definitions ***************************************/
/* Discrete Joystick (see nuttx/include/input/djoystick.h */
#define _DJOYIOCVALID(c) (_IOC_TYPE(c)==_DJOYBASE)
#define _DJOYIOC(nr) _IOC(_DJOYBASE,nr)
/* Analog joystick driver ioctl definitions *********************************/
/* (see nuttx/include/input/ajoystick.h */
#define _AJOYIOCVALID(c) (_IOC_TYPE(c)==_AJOYBASE)
#define _AJOYIOC(nr) _IOC(_AJOYBASE,nr)
#define _JOYIOCVALID(c) (_IOC_SMASK(c)==_JOYBASE)
#define _JOYIOC(nr) _IOC(_JOYBASE,nr)
/* FIFOs and pipe driver ioctl definitions **********************************/
+2 -2
View File
@@ -1,7 +1,7 @@
/****************************************************************************
* include/nuttx/input/ajoystick.h
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Copyright (C) 2014, 2017 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@@ -56,7 +56,7 @@
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/fs/ioctl.h>
#include <nuttx/input/ioctl.h>
/****************************************************************************
* Pre-processor Definitions
+1 -1
View File
@@ -56,7 +56,7 @@
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/fs/ioctl.h>
#include <nuttx/input/ioctl.h>
/****************************************************************************
* Pre-processor Definitions
+76
View File
@@ -0,0 +1,76 @@
/************************************************************************************
* include/nuttx/input/ioctl.h
*
* 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
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************************************/
#ifndef __INCLUDE_NUTTX_INPUT_IOCTL_H
#define __INCLUDE_NUTTX_INPUT_IOCTL_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/fs/ioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define _JOYIOC_MASK (0x001f)
#define _JOYIOC_TYPE(cmd) ((cmd) & ~_JOYIOC_MASK)
#define _JOYIOC_NBR(cmd) ((cmd) & _JOYIOC_MASK)
/* Discrete Joystick (see nuttx/include/input/djoystick.h */
#define _DJOYBASE (_JOYBASE | 0x0000)
#define _DJOYIOCVALID(c) (_JOYIOC_MASK(c)==_DJOYBASE)
#define _DJOYIOC(nr) _IOC(_DJOYBASE,nr)
/* Analog Joystick (see nuttx/include/input/ajoystick.h */
#define _AJOYBASE (_JOYBASE | 0x0020)
#define _AJOYIOCVALID(c) (_JOYIOC_MASK(c)==_AJOYBASE)
#define _AJOYIOC(nr) _IOC(_AJOYBASE,nr)
/* Nunchuck Wii controller */
#define _NUNCKIOCBASE (_JOYBASE | 0x0040)
#define _NUNCHUCKIOCVALID(c) (_IOC_TYPE(c)==_NUNCKIOCBASE)
#define _NUNCHUCKIOC(nr) _IOC(_NUNCKIOCBASE,nr)
#endif /* __INCLUDE_NUTTX_INPUT_IOCTL_H */
+92
View File
@@ -0,0 +1,92 @@
/************************************************************************************
* include/nuttx/input/nunchuck.h
*
* 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
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************************************/
#ifndef __INCLUDE_NUTTX_INPUT_NUNCHUCK_H
#define __INCLUDE_NUTTX_INPUT_NUNCHUCK_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/input/ioctl.h>
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/* These definitions provide the meaning of all of the bits that may be
* reported in the djoy_buttonset_t bitset.
*/
#define NUNCHUCK_BUTTON_Z_BIT (0)
#define NUNCHUCK_BUTTON_C_BIT (1)
/* Command: NUNCHUCKIOC_SUPPORTED
* Description: Report the set of button events supported by the hardware;
* Argument: A pointer to writeable integer value in which to return the
* set of supported buttons.
* Return: Zero (OK) on success. Minus one will be returned on failure
* with the errno value set appropriately.
*/
#define AJOYIOC_SUPPORTED _NUNCHUCKIOC(0x0000)
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: nunchuck_register
*
* Description:
* Register the composite character driver as the specific device.
*
* Input Parameters:
* devname - The name of the analog joystick device to be registers.
* This should be a string of the form "/priv/nunchuckN" where N is the
* minor device number.
* i2c - An instance of the platform-specific I2C connected to Nunchuck.
*
* Returned Values:
* Zero (OK) is returned on success. Otherwise a negated errno value is
* returned to indicate the nature of the failure.
*
****************************************************************************/
struct i2c_master_s;
int nunchuck_register(FAR const char *devname, FAR struct i2c_master_s *i2c);
#endif /* __INCLUDE_NUTTX_INPUT_NUNCHUCK_H */
+6
View File
@@ -58,6 +58,12 @@
#endif
#endif /* CONFIG_NET */
#ifdef CONFIG_INPUT
/* Include input driver IOCTL definitions */
# include <nuttx/input/ioctl.h>
#endif
#ifdef CONFIG_DRIVERS_WIRELESS
/* Include wireless character driver IOCTL definitions */