mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 03:45:50 +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
|
depends on !DISABLE_POLL
|
||||||
|
|
||||||
endif # AJOYSTICK
|
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
|
CSRCS += ajoystick.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_INPUT_NUNCHUCK),y)
|
||||||
|
CSRCS += nunchuck.c
|
||||||
|
endif
|
||||||
|
|
||||||
# Include input device driver build support
|
# Include input device driver build support
|
||||||
|
|
||||||
DEPPATH += --dep-path input
|
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 _WLCIOCBASE (0x1300) /* Wireless modules ioctl character driver commands */
|
||||||
#define _CFGDIOCBASE (0x1400) /* Config Data device (app config) ioctl commands */
|
#define _CFGDIOCBASE (0x1400) /* Config Data device (app config) ioctl commands */
|
||||||
#define _TCIOCBASE (0x1500) /* Timer ioctl commands */
|
#define _TCIOCBASE (0x1500) /* Timer ioctl commands */
|
||||||
#define _DJOYBASE (0x1600) /* Discrete joystick ioctl commands */
|
#define _JOYBASE (0x1600) /* Joystick ioctl commands */
|
||||||
#define _AJOYBASE (0x1700) /* Analog joystick ioctl commands */
|
#define _PIPEBASE (0x1700) /* FIFO/pipe ioctl commands */
|
||||||
#define _PIPEBASE (0x1800) /* FIFO/pipe ioctl commands */
|
#define _RTCBASE (0x1800) /* RTC ioctl commands */
|
||||||
#define _RTCBASE (0x1900) /* RTC ioctl commands */
|
#define _RELAYBASE (0x1900) /* Relay devices ioctl commands */
|
||||||
#define _RELAYBASE (0x1a00) /* Relay devices ioctl commands */
|
#define _CANBASE (0x1a00) /* CAN ioctl commands */
|
||||||
#define _CANBASE (0x1b00) /* CAN ioctl commands */
|
#define _BTNBASE (0x1b00) /* Button ioctl commands */
|
||||||
#define _BTNBASE (0x1c00) /* Button ioctl commands */
|
#define _ULEDBASE (0x1c00) /* User LED ioctl commands */
|
||||||
#define _ULEDBASE (0x1d00) /* User LED ioctl commands */
|
#define _ZCBASE (0x1d00) /* Zero Cross ioctl commands */
|
||||||
#define _ZCBASE (0x1e00) /* Zero Cross ioctl commands */
|
#define _LOOPBASE (0x1e00) /* Loop device commands */
|
||||||
#define _LOOPBASE (0x1f00) /* Loop device commands */
|
#define _MODEMBASE (0x1f00) /* Modem ioctl commands */
|
||||||
#define _MODEMBASE (0x2000) /* Modem ioctl commands */
|
#define _I2CBASE (0x2000) /* I2C driver commands */
|
||||||
#define _I2CBASE (0x2100) /* I2C driver commands */
|
#define _SPIBASE (0x2100) /* SPI driver commands */
|
||||||
#define _SPIBASE (0x2200) /* SPI driver commands */
|
#define _GPIOBASE (0x2200) /* GPIO driver commands */
|
||||||
#define _GPIOBASE (0x2300) /* GPIO driver commands */
|
#define _CLIOCBASE (0x2300) /* Contactless modules ioctl commands */
|
||||||
#define _CLIOCBASE (0x2400) /* Contactless modules ioctl commands */
|
#define _USBCBASE (0x2400) /* USB-C controller ioctl commands */
|
||||||
#define _USBCBASE (0x2500) /* USB-C controller ioctl commands */
|
#define _MAC802154BASE (0x2500) /* 802.15.4 MAC ioctl commands */
|
||||||
#define _MAC802154BASE (0x2600) /* 802.15.4 MAC ioctl commands */
|
#define _PWRBASE (0x2600) /* Power-related ioctl commands */
|
||||||
#define _PWRBASE (0x2700) /* Power-related ioctl commands */
|
#define _FBIOCBASE (0x2700) /* Frame buffer character driver ioctl commands */
|
||||||
#define _FBIOCBASE (0x2800) /* Frame buffer character driver ioctl commands */
|
|
||||||
|
|
||||||
/* boardctl() commands share the same number space */
|
/* boardctl() commands share the same number space */
|
||||||
|
|
||||||
#define _BOARDBASE (0xff00) /* boardctl commands */
|
#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_MASK (0x00ff)
|
||||||
#define _IOC_TYPE(cmd) ((cmd) & ~_IOC_MASK)
|
#define _IOC_TYPE(cmd) ((cmd) & ~_IOC_MASK)
|
||||||
@@ -335,17 +337,11 @@
|
|||||||
#define _TCIOCVALID(c) (_IOC_TYPE(c)==_TCIOCBASE)
|
#define _TCIOCVALID(c) (_IOC_TYPE(c)==_TCIOCBASE)
|
||||||
#define _TCIOC(nr) _IOC(_TCIOCBASE,nr)
|
#define _TCIOC(nr) _IOC(_TCIOCBASE,nr)
|
||||||
|
|
||||||
/* Discrete joystick driver ioctl definitions *******************************/
|
/* Joystick driver ioctl definitions ***************************************/
|
||||||
/* (see nuttx/include/input/djoystick.h */
|
/* Discrete Joystick (see nuttx/include/input/djoystick.h */
|
||||||
|
|
||||||
#define _DJOYIOCVALID(c) (_IOC_TYPE(c)==_DJOYBASE)
|
#define _JOYIOCVALID(c) (_IOC_SMASK(c)==_JOYBASE)
|
||||||
#define _DJOYIOC(nr) _IOC(_DJOYBASE,nr)
|
#define _JOYIOC(nr) _IOC(_JOYBASE,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)
|
|
||||||
|
|
||||||
/* FIFOs and pipe driver ioctl definitions **********************************/
|
/* FIFOs and pipe driver ioctl definitions **********************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* include/nuttx/input/ajoystick.h
|
* 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>
|
* 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
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <nuttx/fs/ioctl.h>
|
#include <nuttx/input/ioctl.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <nuttx/fs/ioctl.h>
|
#include <nuttx/input/ioctl.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* 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
|
||||||
#endif /* CONFIG_NET */
|
#endif /* CONFIG_NET */
|
||||||
|
|
||||||
|
#ifdef CONFIG_INPUT
|
||||||
|
/* Include input driver IOCTL definitions */
|
||||||
|
|
||||||
|
# include <nuttx/input/ioctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DRIVERS_WIRELESS
|
#ifdef CONFIG_DRIVERS_WIRELESS
|
||||||
/* Include wireless character driver IOCTL definitions */
|
/* Include wireless character driver IOCTL definitions */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user