This program allows to transform analog signal from rotary dial phone to numeric keys.

Dependencies:   mbed

Committer:
amigainc
Date:
Sun Aug 07 09:10:18 2011 +0000
Revision:
0:2c8568cec97f

        

Who changed what in which revision?

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