Code to control a Traxster robot using a Wimote and Android app
Fork of BlueUSB by
Diff: USBHost.h
- Revision:
- 1:accdaa84fe8d
- Parent:
- 0:606b230e5b4a
diff -r 606b230e5b4a -r accdaa84fe8d USBHost.h --- a/USBHost.h Sat Apr 10 00:30:24 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,200 +0,0 @@ - -/* -Copyright (c) 2010 Peter Barrett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#ifndef USBHOST_H -#define USBHOST_H - -#ifndef u8 -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; - -typedef char s8; -typedef short s16; -typedef char s32; -#endif - -#define ENDPOINT_CONTROL 0 -#define ENDPOINT_ISOCRONOUS 1 -#define ENDPOINT_BULK 2 -#define ENDPOINT_INTERRUPT 3 - -#define DESCRIPTOR_TYPE_DEVICE 1 -#define DESCRIPTOR_TYPE_CONFIGURATION 2 -#define DESCRIPTOR_TYPE_STRING 3 -#define DESCRIPTOR_TYPE_INTERFACE 4 -#define DESCRIPTOR_TYPE_ENDPOINT 5 - -#define DESCRIPTOR_TYPE_HID 0x21 -#define DESCRIPTOR_TYPE_REPORT 0x22 -#define DESCRIPTOR_TYPE_PHYSICAL 0x23 -#define DESCRIPTOR_TYPE_HUB 0x29 - -enum USB_CLASS_CODE -{ - CLASS_DEVICE, - CLASS_AUDIO, - CLASS_COMM_AND_CDC_CONTROL, - CLASS_HID, - CLASS_PHYSICAL = 0x05, - CLASS_STILL_IMAGING, - CLASS_PRINTER, - CLASS_MASS_STORAGE, - CLASS_HUB, - CLASS_CDC_DATA, - CLASS_SMART_CARD, - CLASS_CONTENT_SECURITY = 0x0D, - CLASS_VIDEO = 0x0E, - CLASS_DIAGNOSTIC_DEVICE = 0xDC, - CLASS_WIRELESS_CONTROLLER = 0xE0, - CLASS_MISCELLANEOUS = 0xEF, - CLASS_APP_SPECIFIC = 0xFE, - CLASS_VENDOR_SPECIFIC = 0xFF -}; - -#define DEVICE_TO_HOST 0x80 -#define HOST_TO_DEVICE 0x00 -#define REQUEST_TYPE_CLASS 0x20 -#define RECIPIENT_DEVICE 0x00 -#define RECIPIENT_INTERFACE 0x01 -#define RECIPIENT_ENDPOINT 0x02 -#define RECIPIENT_OTHER 0x03 - -#define GET_STATUS 0 -#define CLEAR_FEATURE 1 -#define SET_FEATURE 3 -#define SET_ADDRESS 5 -#define GET_DESCRIPTOR 6 -#define SET_DESCRIPTOR 7 -#define GET_CONFIGURATION 8 -#define SET_CONFIGURATION 9 -#define GET_INTERFACE 10 -#define SET_INTERFACE 11 -#define SYNCH_FRAME 11 - -// -5 is nak -/* -0010 ACK Handshake -1010 NAK Handshake -1110 STALL Handshake -0110 NYET (No Response Yet) -*/ - -#define IO_PENDING -100 -#define ERR_ENDPOINT_NONE_LEFT -101 -#define ERR_ENDPOINT_NOT_FOUND -102 -#define ERR_DEVICE_NOT_FOUND -103 -#define ERR_DEVICE_NONE_LEFT -104 -#define ERR_HUB_INIT_FAILED -105 -#define ERR_INTERFACE_NOT_FOUND -106 - -typedef struct -{ - u8 bLength; - u8 bDescriptorType; - u16 bcdUSB; - u8 bDeviceClass; - u8 bDeviceSubClass; - u8 bDeviceProtocol; - u8 bMaxPacketSize; - u16 idVendor; - u16 idProduct; - u16 bcdDevice; // version - u8 iManufacturer; - u8 iProduct; - u8 iSerialNumber; - u8 bNumConfigurations; -} DeviceDescriptor; // 16 bytes - -typedef struct -{ - u8 bLength; - u8 bDescriptorType; - u16 wTotalLength; - u8 bNumInterfaces; - u8 bConfigurationValue; // Value to use as an argument to select this configuration - u8 iConfiguration; // Index of String Descriptor describing this configuration - u8 bmAttributes; // Bitmap D7 Reserved, set to 1. (USB 1.0 Bus Powered),D6 Self Powered,D5 Remote Wakeup,D4..0 = 0 - u8 bMaxPower; // Maximum Power Consumption in 2mA units -} ConfigurationDescriptor; - -typedef struct -{ - u8 bLength; - u8 bDescriptorType; - u8 bInterfaceNumber; - u8 bAlternateSetting; - u8 bNumEndpoints; - u8 bInterfaceClass; - u8 bInterfaceSubClass; - u8 bInterfaceProtocol; - u8 iInterface; // Index of String Descriptor Describing this interface -} InterfaceDescriptor; - -typedef struct -{ - u8 bLength; - u8 bDescriptorType; - u8 bEndpointAddress; // Bits 0:3 endpoint, Bits 7 Direction 0 = Out, 1 = In (Ignored for Control Endpoints) - u8 bmAttributes; // Bits 0:1 00 = Control, 01 = Isochronous, 10 = Bulk, 11 = Interrupt - u16 wMaxPacketSize; - u8 bInterval; // Interval for polling endpoint data transfers. -} EndpointDescriptor; - -typedef struct { - u8 bLength; - u8 bDescriptorType; - u16 bcdHID; - u8 bCountryCode; - u8 bNumDescriptors; - u8 bDescriptorType2; - u16 wDescriptorLength; -} HIDDescriptor; - -//============================================================================ -//============================================================================ - - -void USBInit(); -void USBLoop(); -u8* USBGetBuffer(u32* len); - -// Optional callback for transfers, called at interrupt time -typedef void (*USBCallback)(int device, int endpoint, int status, u8* data, int len, void* userData); - -// Transfers -int USBControlTransfer(int device, int request_type, int request, int value, int index, u8* data, int length, USBCallback callback = 0, void* userData = 0); -int USBInterruptTransfer(int device, int ep, u8* data, int length, USBCallback callback = 0, void* userData = 0); -int USBBulkTransfer(int device, int ep, u8* data, int length, USBCallback callback = 0, void* userData = 0); - -// Standard Device methods -int GetDescriptor(int device, int descType, int descIndex, u8* data, int length); -int GetString(int device, int index, char* dst, int length); -int SetAddress(int device, int new_addr); -int SetConfiguration(int device, int configNum); -int SetInterface(int device, int ifNum, int altNum); - -// Implemented to notify app of the arrival of a device -void OnLoadDevice(int device, DeviceDescriptor* deviceDesc, InterfaceDescriptor* interfaceDesc); - -#endif \ No newline at end of file