18 #include "Driver_USBH.h"
25 #define U32_LE(v) (uint32_t)(__rev(v))
26 #define U16_LE(v) (uint16_t)(__rev(v) >> 16)
27 #define U32_BE(v) (uint32_t)(v)
28 #define U16_BE(v) (uint16_t)(v)
30 #define U32_BE(v) (uint32_t)(__rev(v))
31 #define U16_BE(v) (uint16_t)(__rev(v) >> 16)
32 #define U32_LE(v) (uint32_t)(v)
33 #define U16_LE(v) (uint16_t)(v)
37 #define PREPARE_SETUP_PACKET(ptr_urb, ptr_data) \
38 ptr_urb->buf = ptr_data; \
40 ptr_urb->packet_type = USB_PID_SETUP; \
41 ptr_urb->toggle_bit = 0; \
42 ptr_urb->toggle_force = 1;
45 #define PREPARE_SETUP_PACKET_DATA(ptr_sp, dir, typ, rcpnt, req, val, idx, len) \
46 ptr_sp->bmRequestType.Dir = dir; \
47 ptr_sp->bmRequestType.Type = typ; \
48 ptr_sp->bmRequestType.Recipient = rcpnt; \
49 ptr_sp->bRequest = req; \
50 ptr_sp->wValue = U16_LE(val); \
51 ptr_sp->wIndex = U16_LE(idx); \
52 ptr_sp->wLength = U16_LE(len);
55 #define PREPARE_IN_DATA1_PACKET(ptr_urb, ptr_data, data_len) \
56 ptr_urb->buf = ptr_data; \
57 ptr_urb->len = data_len; \
58 ptr_urb->packet_type = USB_PID_IN; \
59 ptr_urb->toggle_bit = 1; \
60 ptr_urb->toggle_force = 1;
63 #define PREPARE_IN_DATAx_PACKET(ptr_urb, ptr_data, data_len) \
64 ptr_urb->buf = ptr_data; \
65 ptr_urb->len = data_len; \
66 ptr_urb->packet_type = USB_PID_IN; \
67 ptr_urb->toggle_force = 0;
70 #define PREPARE_OUT_DATA1_PACKET(ptr_urb, ptr_data, data_len) \
71 ptr_urb->buf = ptr_data; \
72 ptr_urb->len = data_len; \
73 ptr_urb->packet_type = USB_PID_OUT; \
74 ptr_urb->toggle_bit = 1; \
75 ptr_urb->toggle_force = 1;
78 #define PREPARE_OUT_DATAx_PACKET(ptr_urb, ptr_data, data_len) \
79 ptr_urb->buf = ptr_data; \
80 ptr_urb->len = data_len; \
81 ptr_urb->packet_type = USB_PID_OUT; \
82 ptr_urb->toggle_force = 0;
85 #define PREPARE_PING_PACKET(ptr_urb) \
87 ptr_urb->packet_type = USB_PID_PING; \
88 ptr_urb->toggle_force = 0;
91 #define PREPARE_MSC_CBW(ptr_cbw, sig, tag, len, flg, lun, cb_len, cb0, cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, cb11, cb12, cb13, cb14, cb15)\
92 ptr_cbw->dSignature = U32_LE(sig); \
93 ptr_cbw->dTag = U32_LE(++tag); \
94 ptr_cbw->dDataLength = len; \
95 ptr_cbw->bmFlags = flg; \
96 ptr_cbw->bLUN = lun; \
97 ptr_cbw->bCBLength = cb_len; \
98 ptr_cbw->CB[0] = cb0; \
99 ptr_cbw->CB[1] = cb1; \
100 ptr_cbw->CB[2] = cb2; \
101 ptr_cbw->CB[3] = cb3; \
102 ptr_cbw->CB[4] = cb4; \
103 ptr_cbw->CB[5] = cb5; \
104 ptr_cbw->CB[6] = cb6; \
105 ptr_cbw->CB[7] = cb7; \
106 ptr_cbw->CB[8] = cb8; \
107 ptr_cbw->CB[9] = cb9; \
108 ptr_cbw->CB[10] = cb10; \
109 ptr_cbw->CB[11] = cb11; \
110 ptr_cbw->CB[12] = cb12; \
111 ptr_cbw->CB[13] = cb13; \
112 ptr_cbw->CB[14] = cb14; \
113 ptr_cbw->CB[15] = cb15;
119 #if defined(__CC_ARM)
122 #elif defined(__ICCARM__)
123 #pragma language=extended
124 #elif defined(__GNUC__)
126 #elif defined(__TMS470__)
128 #elif defined(__TASKING__)
131 #warning Not supported compiler type
144 uint8_t dev_addr : 8;
145 uint8_t dev_speed : 8;
146 uint8_t hub_addr : 8;
147 uint8_t hub_port : 8;
156 typedef struct _USBH_HC_t {
161 typedef struct _USBH_OHCI_t {
173 typedef struct _USBH_EHCI_t {
194 uint32_t port_state[2];
199 uint32_t dev_addr_mask[4];
214 uint8_t dev_addr : 8;
215 uint8_t dev_speed : 8;
216 uint8_t hub_addr : 8;
217 uint8_t hub_port : 8;
220 uint8_t configured : 1;
221 uint8_t initialized : 1;
246 uint8_t keyboard_in_data_buf[8];
247 uint8_t keyboard_in_data_buf_ex[8];
253 extern const uint8_t usbh_cls_num;
256 #if defined(__CC_ARM)
258 #elif defined(__ICCARM__)
260 #elif defined(__GNUC__)
262 #elif defined(__TMS470__)
264 #elif defined(__TASKING__)
265 #pragma warning restore
267 #warning Not supported compiler type
285 extern ARM_USBH_EP_HANDLE USBH_DriverEndpointCreate (uint8_t ctrl, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_max_packet_size, uint8_t ep_interval);
300 extern usbStatus USBH_DriverEndpointModify (uint8_t ctrl, ARM_USBH_EP_HANDLE ep_hndl, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint16_t ep_max_packet_size);
305 extern usbStatus USBH_DriverEndpointDelete (uint8_t ctrl, ARM_USBH_EP_HANDLE ep_hndl);
310 extern usbStatus USBH_DriverEndpointReset (uint8_t ctrl, ARM_USBH_EP_HANDLE ep_hndl);
345 extern usbStatus USBH_EP0_SendSetup (uint8_t ctrl, uint8_t *data);
352 extern usbStatus USBH_EP0_SendData (uint8_t ctrl, uint8_t *data, uint32_t num);
359 extern usbStatus USBH_EP0_ReceiveData (uint8_t ctrl, uint8_t *data, uint32_t num);
364 extern usbStatus USBH_EP0_AbortData (uint8_t ctrl);
372 extern usbStatus
USBH_GetStatus (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t *ptr_stat_dat);
380 extern usbStatus
USBH_ClearFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
388 extern usbStatus
USBH_SetFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
394 extern usbStatus
USBH_SetAddress (uint8_t ctrl, uint8_t device_address);
405 extern usbStatus
USBH_GetDescriptor (uint8_t ctrl, uint8_t recipient, uint8_t descriptor_type, uint8_t descriptor_index, uint8_t language_id, uint8_t *descriptor_data, uint16_t descriptor_length);
416 extern usbStatus
USBH_SetDescriptor (uint8_t ctrl, uint8_t recipient, uint8_t descriptor_type, uint8_t descriptor_index, uint8_t language_id, uint8_t *descriptor_data, uint16_t descriptor_length);
435 extern usbStatus
USBH_GetInterface (uint8_t ctrl, uint8_t index, uint8_t *ptr_alternate);
442 extern usbStatus
USBH_SetInterface (uint8_t ctrl, uint8_t index, uint8_t alternate);
449 extern usbStatus
USBH_SyncFrame (uint8_t ctrl, uint8_t index, uint8_t *ptr_frame_number);