1 #ifndef __USBH_MSC_BOT_H__
2 #define __USBH_MSC_BOT_H__
3 
4 #include <stdint.h>
5 
6 
7 typedef enum {
8     USBH_MSC_BOT_CBW = 0,
9     USBH_MSC_BOT_CBW_WAIT,
10     USBH_MSC_BOT_DIN,
11     USBH_MSC_BOT_DIN_WAIT,
12     USBH_MSC_BOT_DOUT,
13     USBH_MSC_BOT_DOUT_WAIT,
14     USBH_MSC_BOT_CSW,
15     USBH_MSC_BOT_CSW_WAIT,
16     USBH_MSC_BOT_HANDLE_ERROR,
17     USBH_MSC_BOT_HANDLE_STALL_IN,
18     USBH_MSC_BOT_HANDLE_STALL_OUT,
19 } USBH_MSC_BOT_State;
20 
21 
22 typedef struct __attribute__((packed)) {
23     uint32_t CBWSignature;
24     uint32_t CBWTag;
25     uint32_t CBWTransferLength;
26     uint8_t  CBWFlags;
27     uint8_t  CBWLUN;
28     uint8_t  CBWCBLength;
29     uint8_t  CBWCB[16];
30 } USBH_CBWPkt_t;
31 
32 
33 typedef struct __attribute__((packed)) {
34     uint32_t CSWSignature;
35     uint32_t CSWTag;
36     uint32_t CSWDataResidue;
37     uint8_t  CSWStatus;
38 } USBH_CSWPkt_t;
39 
40 
41 extern USBH_CBWPkt_t USBH_CBWData;
42 extern USBH_CSWPkt_t USBH_CSWData;
43 
44 
45 void USBH_MSC_BOT_Init(void);
46 void USBH_MSC_BOT_Process(USBH_Info_t *phost);
47 uint8_t USBH_MSC_BOT_DecodeCSW(USBH_Info_t *phost);
48 
49 
50 #endif // __USBH_MSC_BOT_H__
51 
52