Adds driver support for the XBox One controller. Currently only the latest version (XBox One X) controller works. The older XBox One controllers do not enumerate correctly.

This commit is contained in:
Brian Webb 2017-03-17 20:35:49 -07:00
parent acec5e3199
commit 0a95536b85
6 changed files with 2352 additions and 1 deletions

View File

@ -167,7 +167,8 @@ int stm32_usbhost_initialize(void)
{
int pid;
#if defined(CONFIG_USBHOST_HUB) || defined(CONFIG_USBHOST_MSC) || \
defined(CONFIG_USBHOST_HIDKBD) || defined(CONFIG_USBHOST_HIDMOUSE)
defined(CONFIG_USBHOST_HIDKBD) || defined(CONFIG_USBHOST_HIDMOUSE) || \
defined(CONFIG_USBHOST_XBOXCONTROLLER)
int ret;
#endif
@ -227,6 +228,16 @@ int stm32_usbhost_initialize(void)
}
#endif
#ifdef CONFIG_USBHOST_XBOXCONTROLLER
/* Initialize the HID mouse class */
ret = usbhost_xboxcontroller_init();
if (ret != OK)
{
uerr("ERROR: Failed to register the XBox Controller class\n");
}
#endif
/* Then get an instance of the USB host interface */
uinfo("Initialize USB host\n");

View File

@ -521,6 +521,38 @@ config RTL8187_PID
endif # USBHOST_RTL8187
config USBHOST_XBOXCONTROLLER
bool "Xbox Controller Support"
default n
depends on !INT_DISABLE
select INPUT
---help---
Enable support for the Xbox Controller driver.
if USBHOST_XBOXCONTROLLER
config XBOXCONTROLLER_DEFPRIO
int "Polling Thread Priority"
default 50
---help---
Priority of the polling thread. Default: 50.
config XBOXCONTROLLER_STACKSIZE
int "Polling thread stack size"
default 1024
---help---
Stack size for polling thread. Default: 1024
config XBOXCONTROLLER_NPOLLWAITERS
int "Max Number of Waiters for Poll Event"
default 2
depends on !DISABLE_POLL
---help---
If the poll() method is enabled, this defines the maximum number
of threads that can be waiting for mouse events. Default: 2.
endif # USBHOST_XBOXCONTROLLER
config USBHOST_TRACE
bool "Enable USB HCD tracing for debug"
default n

View File

@ -66,6 +66,10 @@ ifeq ($(CONFIG_USBHOST_HIDMOUSE),y)
CSRCS += usbhost_hidmouse.c
endif
ifeq ($(CONFIG_USBHOST_XBOXCONTROLLER),y)
CSRCS += usbhost_xboxcontroller.c
endif
# HCD debug/trace logic
ifeq ($(CONFIG_USBHOST_TRACE),y)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,88 @@
/************************************************************************************
* include/nuttx/input/xbox-controller.h
*
* Copyright (C) 2016 Brian Webb.
* Author: Brian Webb <webbbn@gmail.com>
*
* 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_XBOX_CONTROLLER_H
#define __INCLUDE_NUTTX_INPUT_XBOX_CONTROLLER_H
#ifdef __cplusplus
extern "C"
{
#endif
/****************************************************************************
* Public Types
****************************************************************************/
/* This type defines the button data report from the controller. */
struct xbox_controller_buttonstate_s
{
bool guide : 1;
bool sync : 1;
bool start : 1;
bool back : 1;
bool a : 1;
bool b : 1;
bool x : 1;
bool y : 1;
bool dpad_up : 1;
bool dpad_down : 1;
bool dpad_left : 1;
bool dpad_right : 1;
bool bumper_left : 1;
bool bumper_right : 1;
bool stick_click_left : 1;
bool stick_click_right : 1;
int16_t stick_left_x;
int16_t stick_left_y;
int16_t stick_right_x;
int16_t stick_right_y;
int16_t trigger_left;
int16_t trigger_right;
};
/* The supported IOCTL commands. */
enum
{
XBOX_CONTROLLER_IOCTL_RUMBLE
} xbox_controller_iotcl_cmds;
#ifdef __cplusplus
}
#endif
#endif /* __INCLUDE_NUTTX_INPUT_XBOX_CONTROLLER_H */

View File

@ -1084,6 +1084,27 @@ int usbhost_kbdinit(void);
int usbhost_mouse_init(void);
#endif
#ifdef CONFIG_USBHOST_XBOXCONTROLLER
/****************************************************************************
* Name: usbhost_xboxcontroller_init
*
* Description:
* Initialize the USB XBox controller driver. This function
* should be called be platform-specific code in order to initialize and
* register support for the USB XBox controller.
*
* Input Parameters:
* None
*
* Returned Values:
* On success this function will return zero (OK); A negated errno value
* will be returned on failure.
*
****************************************************************************/
int usbhost_xboxcontroller_init(void);
#endif
/****************************************************************************
* Name: usbhost_wlaninit
*