mirror of
https://github.com/apache/nuttx.git
synced 2026-05-23 14:58:13 +08:00
drivers/input/nunchuck.c: Add Nintendo Wii Nunchuck driver
This commit is contained in:
committed by
Gregory Nutt
parent
da7f0542f0
commit
5a814a773d
@@ -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
|
||||
|
||||
@@ -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
@@ -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 **********************************/
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
#include <nuttx/fs/ioctl.h>
|
||||
#include <nuttx/input/ioctl.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user