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:
parent
acec5e3199
commit
0a95536b85
@ -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");
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
2195
drivers/usbhost/usbhost_xboxcontroller.c
Normal file
2195
drivers/usbhost/usbhost_xboxcontroller.c
Normal file
File diff suppressed because it is too large
Load Diff
88
include/nuttx/input/xbox-controller.h
Normal file
88
include/nuttx/input/xbox-controller.h
Normal 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 */
|
||||
|
@ -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
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user