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
145 uint8_t dev_addr : 8;
146 uint8_t dev_speed : 8;
147 uint8_t hub_addr : 8;
148 uint8_t hub_port : 8;
157 typedef struct _USBH_HC_t {
162 typedef struct _USBH_OHCI_t {
175 typedef struct _USBH_EHCI_t {
196 uint32_t port_state[2];
202 uint32_t dev_addr_mask[4];
219 uint8_t configured : 1;
220 uint8_t initialized : 1;
247 uint8_t report_in_data_buf[8];
262 int8_t (*Configure ) (uint8_t ctrl, uint8_t port, uint8_t speed, int8_t address, USB_CONFIGURATION_DESCRIPTOR *ptr_cfg_desc);
269 #if defined(__CC_ARM)
271 #elif defined(__ICCARM__)
273 #elif defined(__GNUC__)
275 #elif defined(__TMS470__)
277 #elif defined(__TASKING__)
278 #pragma warning restore
280 #warning Not supported compiler type
298 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);
313 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);
318 extern usbStatus USBH_DriverEndpointDelete (uint8_t ctrl, ARM_USBH_EP_HANDLE ep_hndl);
323 extern usbStatus USBH_DriverEndpointReset (uint8_t ctrl, ARM_USBH_EP_HANDLE ep_hndl);
330 extern usbStatus USBH_SendSetup (uint8_t ctrl,
USBH_EP *ptr_ep, uint8_t *data);
338 extern usbStatus USBH_SendData (uint8_t ctrl,
USBH_EP *ptr_ep, uint8_t *data, uint32_t num);
346 extern usbStatus USBH_ReceiveData (uint8_t ctrl,
USBH_EP *ptr_ep, uint8_t *data, uint32_t num);
352 extern usbStatus USBH_AbortData (uint8_t ctrl,
USBH_EP *ptr_ep);
360 extern usbStatus
USBH_GetStatus (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t *ptr_stat_dat);
368 extern usbStatus
USBH_ClearFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
376 extern usbStatus
USBH_SetFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
382 extern usbStatus
USBH_SetAddress (uint8_t ctrl, uint8_t device_address);
393 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);
404 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);
423 extern usbStatus
USBH_GetInterface (uint8_t ctrl, uint8_t index, uint8_t *ptr_alternate);
430 extern usbStatus
USBH_SetInterface (uint8_t ctrl, uint8_t index, uint8_t alternate);
437 extern usbStatus
USBH_SyncFrame (uint8_t ctrl, uint8_t index, uint8_t *ptr_frame_number);
456 extern void USBH_HID_ParseReportDescriptor (int8_t instance, uint8_t *ptr_hid_report_desc);