32 __packed uint8_t bmRequestType;
33 __packed uint8_t bRequest;
34 __packed uint16_t wValue;
35 __packed uint16_t wIndex;
36 __packed uint16_t wLength;
41 uint8_t bmRequestType;
53 #define REQ_TYPE_OUT 0x00 54 #define REQ_TYPE_IN 0x80 58 #define REQ_TYPE_STD_DEV 0x00 59 #define REQ_TYPE_CLASS_DEV 0x20 60 #define REQ_TYPE_VENDOR_DEV 0x40 64 #define REQ_TYPE_TO_DEV 0x00 65 #define REQ_TYPE_TO_IFACE 0x01 66 #define REQ_TYPE_TO_EP 0x02 67 #define REQ_TYPE_TO_OTHER 0x03 71 #define USB_REQ_GET_STATUS 0x00 72 #define USB_REQ_CLEAR_FEATURE 0x01 73 #define USB_REQ_SET_FEATURE 0x03 74 #define USB_REQ_SET_ADDRESS 0x05 75 #define USB_REQ_GET_DESCRIPTOR 0x06 76 #define USB_REQ_SET_CONFIGURATION 0x09 77 #define USB_REQ_SET_INTERFACE 0x0B 81 #define USB_DT_STANDARD 0x00 82 #define USB_DT_CLASS 0x20 83 #define USB_DT_VENDOR 0x40 85 #define USB_DT_DEVICE 0x01 86 #define USB_DT_CONFIGURATION 0x02 87 #define USB_DT_STRING 0x03 88 #define USB_DT_INTERFACE 0x04 89 #define USB_DT_ENDPOINT 0x05 90 #define USB_DT_DEVICE_QUALIFIER 0x06 91 #define USB_DT_OTHER_SPEED_CONF 0x07 92 #define USB_DT_IFACE_POWER 0x08 104 __packed uint8_t bLength;
105 __packed uint8_t bDescriptorType;
111 uint8_t bDescriptorType;
122 __packed uint8_t bLength;
123 __packed uint8_t bDescriptorType;
124 __packed uint16_t bcdUSB;
125 __packed uint8_t bDeviceClass;
126 __packed uint8_t bDeviceSubClass;
127 __packed uint8_t bDeviceProtocol;
128 __packed uint8_t bMaxPacketSize0;
129 __packed uint16_t idVendor;
130 __packed uint16_t idProduct;
131 __packed uint16_t bcdDevice;
132 __packed uint8_t iManufacturer;
133 __packed uint8_t iProduct;
134 __packed uint8_t iSerialNumber;
135 __packed uint8_t bNumConfigurations;
144 uint8_t bDescriptorType;
146 uint8_t bDeviceClass;
147 uint8_t bDeviceSubClass;
148 uint8_t bDeviceProtocol;
149 uint8_t bMaxPacketSize0;
153 uint8_t iManufacturer;
155 uint8_t iSerialNumber;
156 uint8_t bNumConfigurations;
165 typedef struct usb_config_descriptor
167 __packed uint8_t bLength;
168 __packed uint8_t bDescriptorType;
169 __packed uint16_t wTotalLength;
170 __packed uint8_t bNumInterfaces;
171 __packed uint8_t bConfigurationValue;
172 __packed uint8_t iConfiguration;
173 __packed uint8_t bmAttributes;
174 __packed uint8_t MaxPower;
177 typedef struct __attribute__((__packed__)) usb_config_descriptor
180 uint8_t bDescriptorType;
181 uint16_t wTotalLength;
182 uint8_t bNumInterfaces;
183 uint8_t bConfigurationValue;
184 uint8_t iConfiguration;
185 uint8_t bmAttributes;
194 typedef struct usb_interface_descriptor
196 __packed uint8_t bLength;
197 __packed uint8_t bDescriptorType;
198 __packed uint8_t bInterfaceNumber;
199 __packed uint8_t bAlternateSetting;
200 __packed uint8_t bNumEndpoints;
201 __packed uint8_t bInterfaceClass;
202 __packed uint8_t bInterfaceSubClass;
203 __packed uint8_t bInterfaceProtocol;
204 __packed uint8_t iInterface;
207 typedef struct __attribute__((__packed__)) usb_interface_descriptor
210 uint8_t bDescriptorType;
211 uint8_t bInterfaceNumber;
212 uint8_t bAlternateSetting;
213 uint8_t bNumEndpoints;
214 uint8_t bInterfaceClass;
215 uint8_t bInterfaceSubClass;
216 uint8_t bInterfaceProtocol;
224 #define USB_CLASS_AUDIO 0x01 225 #define USB_CLASS_COMM 0x02 226 #define USB_CLASS_HID 0x03 227 #define USB_CLASS_PRINTER 0x07 228 #define USB_CLASS_MASS_STORAGE 0x08 229 #define USB_CLASS_HUB 0x09 230 #define USB_CLASS_DATA 0x0A 231 #define USB_CLASS_VIDEO 0x0E 237 typedef struct usb_endpoint_descriptor
239 __packed uint8_t bLength;
240 __packed uint8_t bDescriptorType;
241 __packed uint8_t bEndpointAddress;
242 __packed uint8_t bmAttributes;
243 __packed uint16_t wMaxPacketSize;
244 __packed uint8_t bInterval;
245 __packed uint8_t bRefresh;
246 __packed uint8_t bSynchAddress;
249 typedef struct __attribute__((__packed__)) usb_endpoint_descriptor
252 uint8_t bDescriptorType;
253 uint8_t bEndpointAddress;
254 uint8_t bmAttributes;
255 uint16_t wMaxPacketSize;
258 uint8_t bSynchAddress;
265 #define EP_ADDR_DIR_MASK 0x80 266 #define EP_ADDR_DIR_IN 0x80 267 #define EP_ADDR_DIR_OUT 0x00 272 #define EP_ATTR_TT_MASK 0x03 273 #define EP_ATTR_TT_CTRL 0x00 274 #define EP_ATTR_TT_ISO 0x01 275 #define EP_ATTR_TT_BULK 0x02 276 #define EP_ATTR_TT_INT 0x03 285 void (*shutdown) (void);
286 void (*suspend) (void);
287 void (*resume) (void);
288 int (*ctrl_xfer)(
struct utr_t *utr);
289 int (*bulk_xfer)(
struct utr_t *utr);
290 int (*int_xfer)(
struct utr_t *utr);
291 int (*iso_xfer)(
struct utr_t *utr);
292 int (*quit_xfer)(
struct utr_t *utr,
struct ep_info_t *ep);
295 int (*rthub_port_reset)(
int port);
296 int (*rthub_polling) (void);
305 int (*probe) (
struct iface_t *iface);
306 void (*disconnect) (
struct iface_t *iface);
307 void (*suspend) (
struct iface_t *iface);
308 void (*resume) (
struct iface_t *iface);
323 typedef struct ep_info_t
325 uint8_t bEndpointAddress;
326 uint8_t bmAttributes;
329 uint16_t wMaxPacketSize;
333 typedef struct udev_t
335 DESC_DEV_T descriptor;
336 struct hub_dev_t *parent;
347 struct iface_t *iface_list;
351 typedef struct alt_iface_t
354 EP_INFO_T ep[MAX_EP_PER_IFACE];
357 typedef struct iface_t
363 ALT_IFACE_T alt[MAX_ALT_PER_IFACE];
366 struct iface_t *next;
376 typedef void (*FUNC_UTR_T)(
struct utr_t *);
384 uint8_t bIsTransferDone;
387 uint8_t bIsoNewSched;
389 uint16_t iso_xlen[IF_PER_UTR];
390 uint8_t * iso_buff[IF_PER_UTR];
391 int iso_status[IF_PER_UTR];
407 extern HC_DRV_T ohci_driver;
408 extern HC_DRV_T ehci_driver;
410 extern UDEV_T * g_udev_list;
415 extern void delay_us(
int usec);
417 extern void dump_ohci_regs(
void);
418 extern void dump_ohci_ports(
void);
419 extern void dump_ohci_int_table(
void);
420 extern void dump_ehci_regs(
void);
421 extern void dump_ehci_qtd(qTD_T *qtd);
422 extern void dump_ehci_asynclist(
void);
423 extern void dump_ehci_period_frame_list_simple(
void);
424 extern void usbh_dump_buff_bytes(uint8_t *buff,
int nSize);
425 extern void usbh_dump_interface_descriptor(DESC_IF_T *if_desc);
426 extern void usbh_dump_endpoint_descriptor(DESC_EP_T *ep_desc);
427 extern void usbh_dump_iface(IFACE_T *iface);
428 extern void usbh_dump_ep_info(EP_INFO_T *ep);
433 extern void usbh_memory_init(
void);
434 extern uint32_t usbh_memory_used(
void);
435 extern void * usbh_alloc_mem(
int size);
436 extern void usbh_free_mem(
void *p,
int size);
437 extern int alloc_dev_address(
void);
438 extern void free_dev_address(
int dev_addr);
439 extern UDEV_T * alloc_device(
void);
440 extern void free_device(UDEV_T *udev);
441 extern UTR_T * alloc_utr(UDEV_T *udev);
442 extern void free_utr(UTR_T *utr);
443 extern ED_T * alloc_ohci_ED(
void);
444 extern void free_ohci_ED(ED_T *ed);
445 extern TD_T * alloc_ohci_TD(UTR_T *utr);
446 extern void free_ohci_TD(TD_T *td);
447 extern QH_T * alloc_ehci_QH(
void);
448 extern void free_ehci_QH(QH_T *qh);
449 extern qTD_T * alloc_ehci_qTD(UTR_T *utr);
450 extern void free_ehci_qTD(qTD_T *qtd);
451 extern iTD_T * alloc_ehci_iTD(
void);
452 extern void free_ehci_iTD(iTD_T *itd);
453 extern siTD_T * alloc_ehci_siTD(
void);
454 extern void free_ehci_siTD(siTD_T *sitd);
457 extern void usbh_hub_init(
void);
458 extern int connect_device(UDEV_T *);
459 extern void disconnect_device(UDEV_T *);
460 extern int usbh_register_driver(UDEV_DRV_T *driver);
461 extern EP_INFO_T * usbh_iface_find_ep(IFACE_T *iface, uint8_t ep_addr, uint8_t dir_type);
462 extern int usbh_reset_device(UDEV_T *);
467 extern int usbh_get_device_descriptor(UDEV_T *udev, DESC_DEV_T *desc_buff);
468 extern int usbh_get_config_descriptor(UDEV_T *udev, uint8_t *desc_buff,
int buff_len);
469 extern int usbh_set_configuration(UDEV_T *udev, uint8_t conf_val);
470 extern int usbh_set_interface(IFACE_T *iface, uint16_t alt_setting);
471 extern int usbh_clear_halt(UDEV_T *udev, uint16_t ep_addr);
473 extern int usbh_ctrl_xfer(UDEV_T *udev, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, uint8_t *buff, uint32_t *xfer_len, uint32_t timeout);
474 extern int usbh_bulk_xfer(UTR_T *utr);
475 extern int usbh_int_xfer(UTR_T *utr);
476 extern int usbh_iso_xfer(UTR_T *utr);
477 extern int usbh_quit_utr(UTR_T *utr);
478 extern int usbh_quit_xfer(UDEV_T *udev, EP_INFO_T *ep);
This header file defines the configuration of USB Host library.
void *__dso_handle __attribute__((weak))
USB Host library exported header file.
USB EHCI host controller driver header file.
USB OHCI host controller driver header file.