incubator-nuttx/include/nuttx/input/nunchuck.h

173 lines
6.5 KiB
C

/****************************************************************************
* include/nuttx/input/nunchuck.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/* This header file provides definition for Nintendo Wii Nunchuck joystick
* interface. The Nunchuck joystick provides X/Y positional data as
* integer values. The analog positional data may also be accompanied by
* discrete button data.
*
* The nunchuck joystick driver exports a standard character driver
* interface. By convention, the nunchuck joystick is registered as an input
* device at /dev/nunchuckN where N uniquely identifies the driver instance.
*/
#ifndef __INCLUDE_NUTTX_INPUT_NUNCHUCK_H
#define __INCLUDE_NUTTX_INPUT_NUNCHUCK_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/input/ioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define NUNCHUCK_ADDR 0x52 /* Nunchuck at address 0x52 */
#define NUNCHUCK_I2C_FREQ 100000 /* 100Khz */
/* Joystick Interface *******************************************************/
/* These definitions provide the meaning of all of the bits that may be
* reported in the nunchuck_buttonset_t bitset.
*/
#define NUNCHUCK_BUTTON(n) ((n)-1) /* Bit n-1: Button n, n=1..2 */
#define NUNCHUCK_BUTTON_Z (0) /* Bit 0: Button Z */
#define NUNCHUCK_BUTTON_C (1) /* Bit 1: Button C */
#define NUNCHUCK_NBUTTONS (2) /* Total number of buttons */
#define NUNCHUCK_BUTTON_Z_BIT (1 << NUNCHUCK_BUTTON_Z) /* 1:Button C pressed */
#define NUNCHUCK_BUTTON_C_BIT (1 << NUNCHUCK_BUTTON_C) /* 1:Button Z pressed */
#define NUNCHUCK_BUTTONS_ALL 0x3 /* Set of all buttons */
/* Typical usage */
#define NUNCHUCK_BUTTON_SELECT NUNCHUCK_BUTTON_C
#define NUNCHUCK_BUTTON_FIRE NUNCHUCK_BUTTON_Z
#define NUNCHUCK_BUTTON_JUMP 0
#define NUNCHUCK_BUTTON_SELECT_BIT NUNCHUCK_BUTTON_C_BIT
#define NUNCHUCK_BUTTON_FIRE_BIT NUNCHUCK_BUTTON_Z_BIT
#define NUNCHUCK_BUTTON_JUMP_BIT 0
/* IOCTL commands
*
* Nunchuck joystick drivers do not support the character driver write() or
* seek() methods. The remaining driver methods behave as follows:
*
* 1) The read() method will always return a single value of size
* struct nunchuck_sample_s represent the current joystick positional and
* the state of all joystick buttons. read() never blocks. X an Y
* position data is raw converted data.
* Zeroing and scaling must be performed by the application.
* 2) The ioctl() method supports the commands documented below:
*/
/* 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 NUNCHUCKIOC_SUPPORTED _NUNCHUCKIOC(0x0001)
/****************************************************************************
* Public Types
****************************************************************************/
/* This type is a bit set that contains the state of all analog joystick
* buttons.
*/
typedef uint8_t nunchuck_buttonset_t;
/* This structure is returned by read() and provides the sample state of the
* nunchuck joystick.
*
* NOTE: that this structure is equivalent to the struct mouse_report_s
* structure (with no wheel) defined in include/nuttx/input/mouse.h and can
* be used interchangeably in certain contexts.
*/
struct nunchuck_sample_s
{
/* Compatible with analog joystick */
nunchuck_buttonset_t nck_buttons; /* State of all buttons */
/* Possibly padded with 1 byte here */
int16_t js_x; /* X/horizontal position */
int16_t js_y; /* Y/vertical position */
/* Specific of the Nunchuck */
int8_t acc_x; /* Accelerometer X */
int8_t acc_y; /* Accelerometer Y */
int8_t acc_z; /* Accelerometer Z */
};
/****************************************************************************
* Public Data
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: nunchuck_register
*
* Description:
* Register the Nunchuck character driver as the specified device.
*
* Input Parameters:
* devname - The name of the Nunchuck joystick device to be registered.
* This should be a string of the form "/dev/nunchuckN" where N is the
* minor device number.
* i2c - An instance of the platform-specific I2C connected to Nunchuck.
*
* Returned Value:
* 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);
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __INCLUDE_NUTTX_INPUT_NUNCHUCK_H */