From 990090a4cc9070837d31e66b58d40f0c3d038741 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Sun, 16 Mar 2014 14:41:11 +0200 Subject: Add usblib and utils --- usblib/device/usbdhidgamepad.h | 274 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 usblib/device/usbdhidgamepad.h (limited to 'usblib/device/usbdhidgamepad.h') diff --git a/usblib/device/usbdhidgamepad.h b/usblib/device/usbdhidgamepad.h new file mode 100644 index 0000000..3610680 --- /dev/null +++ b/usblib/device/usbdhidgamepad.h @@ -0,0 +1,274 @@ +//***************************************************************************** +// +// usbdhidgame.h - The header information for using the USB libraries game pad +// device class. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva USB Library. +// +//***************************************************************************** + +#ifndef __USBDHIDGAME_H__ +#define __USBDHIDGAME_H__ + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +//! \addtogroup hid_gamepad_device_class_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// PRIVATE +// +// This enumeration holds the various states that the game pad can be in during +// normal operation. This should not be used by applications and is only +// here for memory allocation purposes. +// +//***************************************************************************** +typedef enum +{ + // + // Not yet configured. + // + eHIDGamepadStateNotConnected, + + // + // Nothing to transmit and not waiting on data to be sent. + // + eHIDGamepadStateIdle, + + // + // Waiting on data to be sent. + // + eHIDGamepadStateSending +} +tGamepadState; + +//***************************************************************************** +// +// PRIVATE +// +// This is the structure for an instance of a USB game pad device. This should +// not be used by applications and is only here for memory allocation purposes. +// +//***************************************************************************** +typedef struct +{ + // + // This is needed for the lower level HID driver. + // + tUSBDHIDDevice sHIDDevice; + + // + // The current state of the game pad device. + // + tGamepadState iState; + + // + // The idle timeout control structure for our input report. This is + // required by the lower level HID driver. + // + tHIDReportIdle sReportIdle; +} tUSBDGamepadInstance; + +//***************************************************************************** +// +//! This structure is used by the application to define operating parameters +//! for the HID game device. +// +//***************************************************************************** +typedef struct +{ + // + //! The vendor ID that this device is to present in the device descriptor. + // + const uint16_t ui16VID; + + // + //! The product ID that this device is to present in the device descriptor. + // + const uint16_t ui16PID; + + // + //! The maximum power consumption of the device, expressed in milliamps. + // + const uint16_t ui16MaxPowermA; + + // + //! Indicates whether the device is self- or bus-powered and whether or not + //! it supports remote wake up. Valid values are \b USB_CONF_ATTR_SELF_PWR + //! or \b USB_CONF_ATTR_BUS_PWR, optionally ORed with + //! \b USB_CONF_ATTR_RWAKE. + // + const uint8_t ui8PwrAttributes; + + // + //! A pointer to the callback function that is called to notify + //! the application of general events. This pointer must point to a valid + //! function. + // + const tUSBCallback pfnCallback; + + // + //! A client-supplied pointer that is sent as the first parameter in all + //! calls made to the pfnCallback gamedevice callback function. + // + void *pvCBData; + + // + //! A pointer to the string descriptor array for this device. This array + //! must contain the following string descriptor pointers in this order: + //! Language descriptor, Manufacturer name string (language 1), Product + //! name string (language 1), Serial number string (language 1),HID + //! Interface description string (language 1), Configuration description + //! string (language 1). + //! + //! If supporting more than 1 language, the descriptor block (except for + //! string descriptor 0) must be repeated for each language defined in the + //! language descriptor. + // + const uint8_t * const *ppui8StringDescriptors; + + // + //! The number of descriptors provided in the \e ppStringDescriptors + //! array, which must be (1 + (5 * (number of languages))). + // + const uint32_t ui32NumStringDescriptors; + + // + //! Optional report descriptor if the application wants to use a custom + //! descriptor. + // + const uint8_t *pui8ReportDescriptor; + + // + //! The size of the optional report descriptor define in + //! pui8ReportDescriptor. + // + const uint32_t ui32ReportSize; + + // + //! The private instance data for this device. This memory must + //! remain accessible for as long as the game device is in use and + //! must not be modified by any code outside the HID game device driver. + // + tUSBDGamepadInstance sPrivateData; +} +tUSBDHIDGamepadDevice; + +//***************************************************************************** +// +//! The USBDHIDGamepadSendReport() call successfully scheduled the report. +// +//***************************************************************************** +#define USBDGAMEPAD_SUCCESS 0 + +//***************************************************************************** +// +//! The USBDHIDGamepadSendReport() function could not send the report at this +//! time. +// +//***************************************************************************** +#define USBDGAMEPAD_TX_ERROR 1 + +//***************************************************************************** +// +//! The device is not currently configured and cannot perform any operations. +// +//***************************************************************************** +#define USBDGAMEPAD_NOT_CONFIGURED \ + 2 + +//***************************************************************************** +// +//! This structure is the default packed report structure that is sent to the +//! host. The application can provide its own structure if the default report +//! descriptor is overridden by the application. This structure or an +//! application-defined structure is passed to the USBDHIDGamepadSendReport +//! function to send gamepad updates to the host. +// +//***************************************************************************** +typedef struct +{ + // + //! Signed 8-bit value (-128 to 127). + // + int8_t i8XPos; + + // + //! Signed 8-bit value (-128 to 127). + // + int8_t i8YPos; + + // + //! Signed 8-bit value (-128 to 127). + // + int8_t i8ZPos; + + // + //! 8-bit button mapping with button 1 in the LSB. + // + uint8_t ui8Buttons; +} +PACKED tGamepadReport; + +//***************************************************************************** +// +// API Function Prototypes +// +//***************************************************************************** +extern tUSBDHIDGamepadDevice *USBDHIDGamepadInit(uint32_t ui32Index, + tUSBDHIDGamepadDevice *psHIDGamepad); +extern tUSBDHIDGamepadDevice *USBDHIDGamepadCompositeInit(uint32_t ui32Index, + tUSBDHIDGamepadDevice *psHIDGamepad, + tCompositeEntry *psCompEntry); +extern void USBDHIDGamepadTerm(tUSBDHIDGamepadDevice *psCompEntry); + +extern uint32_t USBDHIDGamepadSendReport(tUSBDHIDGamepadDevice *psHIDGamepad, + void *pvReport, uint32_t ui32Size); + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +#endif -- cgit v1.3.1