mX mbed BaseBoard USB HID

Dependencies:   mbed

Committer:
ashwin_athani
Date:
Wed Dec 08 06:30:25 2010 +0000
Revision:
0:093612081f64

        

Who changed what in which revision?

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