changing circuitry to disable RTC, update initialization to match
[fw/openalt] / usb / usbapi.h
1 #include "usbstruct.h"    // for TSetupPacket
2
3 /*************************************************************************
4   USB configuration
5 **************************************************************************/
6
7 #define MAX_PACKET_SIZE0  64    /**< maximum packet size for EP 0 */
8
9 /*************************************************************************
10   USB hardware interface
11 **************************************************************************/
12
13 // endpoint status sent through callback
14 #define EP_STATUS_DATA    (1<<0)    /**< EP has data */
15 #define EP_STATUS_STALLED (1<<1)    /**< EP is stalled */
16 #define EP_STATUS_SETUP   (1<<2)    /**< EP received setup packet */
17 #define EP_STATUS_ERROR   (1<<3)    /**< EP data was overwritten by setup packet */
18 #define EP_STATUS_NACKED  (1<<4)    /**< EP sent NAK */
19
20 // device status sent through callback
21 #define DEV_STATUS_CONNECT    (1<<0)  /**< device just got connected */
22 #define DEV_STATUS_SUSPEND    (1<<2)  /**< device entered suspend state */
23 #define DEV_STATUS_RESET    (1<<4)  /**< device just got reset */
24
25 // interrupt bits for NACK events in usbHardwareNakIntEnable
26 // (these bits conveniently coincide with the LPC214x USB controller bit)
27 #define INACK_CI    (1<<1)      /**< interrupt on NACK for control in */
28 #define INACK_CO    (1<<2)      /**< interrupt on NACK for control out */
29 #define INACK_II    (1<<3)      /**< interrupt on NACK for interrupt in */
30 #define INACK_IO    (1<<4)      /**< interrupt on NACK for interrupt out */
31 #define INACK_BI    (1<<5)      /**< interrupt on NACK for bulk in */
32 #define INACK_BO    (1<<6)      /**< interrupt on NACK for bulk out */
33
34 BOOL usbHardwareInit (void);
35 void usbSetupInterruptHandler (void);
36 void usbHardwareNakIntEnable (U8 bIntBits);
37 void usbHardwareConnect (BOOL fConnect);
38 void usbHardwareSetAddress (U8 bAddr);
39 void usbHardwareConfigDevice (BOOL fConfigured);
40
41 //
42 //  Endpoint operations
43 //
44 void usbHardwareEndpointConfig    (U8 bEP, U16 wMaxPacketSize);
45 int  usbHardwareEndpointRead      (U8 bEP, U8 *pbBuf, int iMaxLen);
46 int  usbHardwareEndpointWrite     (U8 bEP, U8 *pbBuf, int iLen);
47 void usbHardwareEndpointStall     (U8 bEP, BOOL fStall);
48 BOOL usbHardwareEndpointIsStalled (U8 bEP);
49
50 //
51 //  Endpoint interrupt handler callback
52 //
53 typedef int (TFnEPIntHandler) (U8 bEP, U8 bEPStatus);
54 void usbHardwareRegisterEPIntHandler  (U8 bEP, TFnEPIntHandler *pfnHandler);
55
56 //
57 //  Device status handler callback
58 //
59 typedef void (TFnDevIntHandler)  (U8 bDevStatus);
60 void usbHardwareRegisterDevIntHandler (TFnDevIntHandler *pfnHandler);
61
62 //
63 //  Frame event handler callback
64 //
65 typedef void (TFnFrameHandler)(U16 wFrame);
66 void usbHardwareRegisterFrameHandler(TFnFrameHandler *pfnHandler);
67
68
69 /*************************************************************************
70   USB application interface
71 **************************************************************************/
72
73 // initialise the complete stack, including HW
74 BOOL usbRegisterHandlers (void);
75
76 /** Request handler callback (standard, vendor, class) */
77 typedef BOOL (TFnHandleRequest)(TSetupPacket *pSetup, int *piLen, U8 **ppbData);
78 void usbRegisterRequestHandler (int iType, TFnHandleRequest *pfnHandler, U8 *pbDataStore);
79 void usbRegisterCustomReqHandler (TFnHandleRequest *pfnHandler);
80
81 /** Descriptor handler callback */
82 typedef BOOL (TFnGetDescriptor)(U16 wTypeIndex, U16 wLangID, int *piLen, U8 **ppbData);
83
84 /** Default standard request handler */
85 BOOL usbHandleStandardRequest (TSetupPacket *pSetup, int *piLen, U8 **ppbData);
86
87 /** Default EP0 handler */
88 int usbHandleControlTransfer (U8 bEP, U8 bEPStat);
89
90 /** Descriptor handling */
91 void usbRegisterDescriptors (const U8 *pabDescriptors);
92 BOOL usbGetDescriptor (U16 wTypeIndex, U16 wLangID, int *piLen, U8 **ppbData);