1 #include "usbstruct.h" // for TSetupPacket
3 /*************************************************************************
5 **************************************************************************/
7 #define MAX_PACKET_SIZE0 64 /**< maximum packet size for EP 0 */
9 /*************************************************************************
10 USB hardware interface
11 **************************************************************************/
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 */
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 */
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 */
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);
42 // Endpoint operations
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);
51 // Endpoint interrupt handler callback
53 typedef int (TFnEPIntHandler) (U8 bEP, U8 bEPStatus);
54 void usbHardwareRegisterEPIntHandler (U8 bEP, TFnEPIntHandler *pfnHandler);
57 // Device status handler callback
59 typedef void (TFnDevIntHandler) (U8 bDevStatus);
60 void usbHardwareRegisterDevIntHandler (TFnDevIntHandler *pfnHandler);
63 // Frame event handler callback
65 typedef void (TFnFrameHandler)(U16 wFrame);
66 void usbHardwareRegisterFrameHandler(TFnFrameHandler *pfnHandler);
69 /*************************************************************************
70 USB application interface
71 **************************************************************************/
73 // initialise the complete stack, including HW
74 BOOL usbRegisterHandlers (void);
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);
81 /** Descriptor handler callback */
82 typedef BOOL (TFnGetDescriptor)(U16 wTypeIndex, U16 wLangID, int *piLen, U8 **ppbData);
84 /** Default standard request handler */
85 BOOL usbHandleStandardRequest (TSetupPacket *pSetup, int *piLen, U8 **ppbData);
87 /** Default EP0 handler */
88 int usbHandleControlTransfer (U8 bEP, U8 bEPStat);
90 /** Descriptor handling */
91 void usbRegisterDescriptors (const U8 *pabDescriptors);
92 BOOL usbGetDescriptor (U16 wTypeIndex, U16 wLangID, int *piLen, U8 **ppbData);