Joystick enabled version of USBHID -library. Has full Playstation 3 functionality including button pressures and a working home-button implementation, while maintaining full PC/MAC/linux -compatibility. basic operation of the lib: #include "mbed.h" #include "usbhid.h" USBJoystick joystick; int main() { while(1) { char dpad = 0xf; /*only the rightmost 4 bits matter*/ short button = 0xff; /*only the rightmost 13 bits matter*/ /*buttons are square, cross, circle, triangle, l1, r1, l2, r2, l3, r3, home.*/ char stick1x = 0; char stick1y = 0; char stick2x = 0; char stick2y = 0; joystick.joystick(dpad, buttons, stick1x, stick1y, stick2x, stick2y); wait_ms(5); } }
usbdevice.h
- Committer:
- innocopter
- Date:
- 2012-05-11
- Revision:
- 0:237d5ef643e9
File content as of revision 0:237d5ef643e9:
/* usbdevice.h */ /* Generic USB device */ /* Copyright (c) Phil Wright 2008 */ #ifndef USBDEVICE_H #define USBDEVICE_H #include "usbdc.h" /* Endpoint packet sizes */ #define MAX_PACKET_SIZE_EP0 (64) /* bmRequestType.dataTransferDirection */ #define HOST_TO_DEVICE (0) #define DEVICE_TO_HOST (1) /* bmRequestType.Type*/ #define STANDARD_TYPE (0) #define CLASS_TYPE (1) #define VENDOR_TYPE (2) #define RESERVED_TYPE (3) /* bmRequestType.Recipient */ #define DEVICE_RECIPIENT (0) #define INTERFACE_RECIPIENT (1) #define ENDPOINT_RECIPIENT (2) #define OTHER_RECIPIENT (3) /* Descriptors */ #define DESCRIPTOR_TYPE(wValue) (wValue >> 8) #define DESCRIPTOR_INDEX(wValue) (wValue & 0xf) /* Descriptor type */ #define DEVICE_DESCRIPTOR (1) #define CONFIGURATION_DESCRIPTOR (2) #define STRING_DESCRIPTOR (3) #define INTERFACE_DESCRIPTOR (4) #define ENDPOINT_DESCRIPTOR (5) typedef struct { struct { unsigned char dataTransferDirection; unsigned char Type; unsigned char Recipient; } bmRequestType; unsigned char bRequest; unsigned short wValue; unsigned short wIndex; unsigned short wLength; } SETUP_PACKET; typedef struct { SETUP_PACKET setup; unsigned char *ptr; unsigned long remaining; unsigned char direction; bool zlp; } CONTROL_TRANSFER; typedef enum {ATTACHED, POWERED, DEFAULT, ADDRESS, CONFIGURED} DEVICE_STATE; typedef struct { DEVICE_STATE state; unsigned char configuration; bool suspended; } USB_DEVICE; class usbdevice : public usbdc { public: usbdevice(); protected: virtual void endpointEventEP0Setup(void); virtual void endpointEventEP0In(void); virtual void endpointEventEP0Out(void); virtual bool requestSetup(void); virtual bool requestOut(void); virtual void deviceEventReset(void); virtual bool requestGetDescriptor(void); bool requestSetAddress(void); virtual bool requestSetConfiguration(void); virtual bool requestGetConfiguration(void); bool requestGetStatus(void); virtual bool requestSetInterface(void); virtual bool requestGetInterface(void); bool requestSetFeature(void); bool requestClearFeature(void); CONTROL_TRANSFER transfer; USB_DEVICE device; private: bool controlIn(void); bool controlOut(void); bool controlSetup(void); void decodeSetupPacket(unsigned char *data, SETUP_PACKET *packet); }; #endif