RC_Simulator.....By Jafar Qutteineh with mods to connect my Futaba 9C to \'RC Helicopter\' by http://www.alphamacsoftware.com/

Dependencies:   mbed

Committer:
cbayley
Date:
Thu Dec 15 03:24:33 2011 +0000
Revision:
0:65b9d8f621d2
Initial

Who changed what in which revision?

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