USB HID Joystick Example (modified USBMouse)

Dependencies:   mbed

Committer:
bricklife
Date:
Wed Jan 19 11:27:13 2011 +0000
Revision:
1:ec6deffecbd3
Parent:
0:d450e82033a1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bricklife 0:d450e82033a1 1 /* usbdevice.h */
bricklife 0:d450e82033a1 2 /* Generic USB device */
bricklife 0:d450e82033a1 3 /* Copyright (c) Phil Wright 2008 */
bricklife 0:d450e82033a1 4
bricklife 0:d450e82033a1 5 #ifndef USBDEVICE_H
bricklife 0:d450e82033a1 6 #define USBDEVICE_H
bricklife 0:d450e82033a1 7
bricklife 0:d450e82033a1 8 #include "usbdc.h"
bricklife 0:d450e82033a1 9
bricklife 0:d450e82033a1 10 /* Endpoint packet sizes */
bricklife 0:d450e82033a1 11 #define MAX_PACKET_SIZE_EP0 (64)
bricklife 0:d450e82033a1 12
bricklife 0:d450e82033a1 13 /* bmRequestType.dataTransferDirection */
bricklife 0:d450e82033a1 14 #define HOST_TO_DEVICE (0)
bricklife 0:d450e82033a1 15 #define DEVICE_TO_HOST (1)
bricklife 0:d450e82033a1 16
bricklife 0:d450e82033a1 17 /* bmRequestType.Type*/
bricklife 0:d450e82033a1 18 #define STANDARD_TYPE (0)
bricklife 0:d450e82033a1 19 #define CLASS_TYPE (1)
bricklife 0:d450e82033a1 20 #define VENDOR_TYPE (2)
bricklife 0:d450e82033a1 21 #define RESERVED_TYPE (3)
bricklife 0:d450e82033a1 22
bricklife 0:d450e82033a1 23 /* bmRequestType.Recipient */
bricklife 0:d450e82033a1 24 #define DEVICE_RECIPIENT (0)
bricklife 0:d450e82033a1 25 #define INTERFACE_RECIPIENT (1)
bricklife 0:d450e82033a1 26 #define ENDPOINT_RECIPIENT (2)
bricklife 0:d450e82033a1 27 #define OTHER_RECIPIENT (3)
bricklife 0:d450e82033a1 28
bricklife 0:d450e82033a1 29 /* Descriptors */
bricklife 0:d450e82033a1 30 #define DESCRIPTOR_TYPE(wValue) (wValue >> 8)
bricklife 0:d450e82033a1 31 #define DESCRIPTOR_INDEX(wValue) (wValue & 0xf)
bricklife 0:d450e82033a1 32
bricklife 0:d450e82033a1 33 /* Descriptor type */
bricklife 0:d450e82033a1 34 #define DEVICE_DESCRIPTOR (1)
bricklife 0:d450e82033a1 35 #define CONFIGURATION_DESCRIPTOR (2)
bricklife 0:d450e82033a1 36 #define STRING_DESCRIPTOR (3)
bricklife 0:d450e82033a1 37 #define INTERFACE_DESCRIPTOR (4)
bricklife 0:d450e82033a1 38 #define ENDPOINT_DESCRIPTOR (5)
bricklife 0:d450e82033a1 39
bricklife 0:d450e82033a1 40 typedef struct {
bricklife 0:d450e82033a1 41 struct {
bricklife 0:d450e82033a1 42 unsigned char dataTransferDirection;
bricklife 0:d450e82033a1 43 unsigned char Type;
bricklife 0:d450e82033a1 44 unsigned char Recipient;
bricklife 0:d450e82033a1 45 } bmRequestType;
bricklife 0:d450e82033a1 46 unsigned char bRequest;
bricklife 0:d450e82033a1 47 unsigned short wValue;
bricklife 0:d450e82033a1 48 unsigned short wIndex;
bricklife 0:d450e82033a1 49 unsigned short wLength;
bricklife 0:d450e82033a1 50 } SETUP_PACKET;
bricklife 0:d450e82033a1 51
bricklife 0:d450e82033a1 52 typedef struct {
bricklife 0:d450e82033a1 53 SETUP_PACKET setup;
bricklife 0:d450e82033a1 54 unsigned char *ptr;
bricklife 0:d450e82033a1 55 unsigned long remaining;
bricklife 0:d450e82033a1 56 unsigned char direction;
bricklife 0:d450e82033a1 57 bool zlp;
bricklife 0:d450e82033a1 58 } CONTROL_TRANSFER;
bricklife 0:d450e82033a1 59
bricklife 0:d450e82033a1 60 typedef enum {ATTACHED, POWERED, DEFAULT, ADDRESS, CONFIGURED} DEVICE_STATE;
bricklife 0:d450e82033a1 61
bricklife 0:d450e82033a1 62 typedef struct {
bricklife 0:d450e82033a1 63 DEVICE_STATE state;
bricklife 0:d450e82033a1 64 unsigned char configuration;
bricklife 0:d450e82033a1 65 bool suspended;
bricklife 0:d450e82033a1 66 } USB_DEVICE;
bricklife 0:d450e82033a1 67
bricklife 0:d450e82033a1 68 class usbdevice : public usbdc
bricklife 0:d450e82033a1 69 {
bricklife 0:d450e82033a1 70 public:
bricklife 0:d450e82033a1 71 usbdevice();
bricklife 0:d450e82033a1 72 protected:
bricklife 0:d450e82033a1 73 virtual void endpointEventEP0Setup(void);
bricklife 0:d450e82033a1 74 virtual void endpointEventEP0In(void);
bricklife 0:d450e82033a1 75 virtual void endpointEventEP0Out(void);
bricklife 0:d450e82033a1 76 virtual bool requestSetup(void);
bricklife 0:d450e82033a1 77 virtual bool requestOut(void);
bricklife 0:d450e82033a1 78 virtual void deviceEventReset(void);
bricklife 0:d450e82033a1 79 virtual bool requestGetDescriptor(void);
bricklife 0:d450e82033a1 80 bool requestSetAddress(void);
bricklife 0:d450e82033a1 81 virtual bool requestSetConfiguration(void);
bricklife 0:d450e82033a1 82 virtual bool requestGetConfiguration(void);
bricklife 0:d450e82033a1 83 bool requestGetStatus(void);
bricklife 0:d450e82033a1 84 virtual bool requestSetInterface(void);
bricklife 0:d450e82033a1 85 virtual bool requestGetInterface(void);
bricklife 0:d450e82033a1 86 bool requestSetFeature(void);
bricklife 0:d450e82033a1 87 bool requestClearFeature(void);
bricklife 0:d450e82033a1 88 CONTROL_TRANSFER transfer;
bricklife 0:d450e82033a1 89 USB_DEVICE device;
bricklife 0:d450e82033a1 90 private:
bricklife 0:d450e82033a1 91 bool controlIn(void);
bricklife 0:d450e82033a1 92 bool controlOut(void);
bricklife 0:d450e82033a1 93 bool controlSetup(void);
bricklife 0:d450e82033a1 94 void decodeSetupPacket(unsigned char *data, SETUP_PACKET *packet);
bricklife 0:d450e82033a1 95 };
bricklife 0:d450e82033a1 96
bricklife 0:d450e82033a1 97 #endif