- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
USB无线网络适配器在嵌入式系统中的应用
2.3 USB HCD的实现
如前所述,USB HCD是USB系统控制主机控制器的工具,它的实现依赖于具体的硬件。因此,除了硬件系统的搭建以外,USB主控制器的实现大部分是HCD的实现。篇幅所限,这里仅给出主要的数据结构和函数调用。
usb_bus结构描述了usb核心层里的USB总线结构,下面列出了usb_bus结构里的主要成员。
struct usb_bus {
int busnum; /* USB总线号*/
char *bus_name; /* USB总线名称 */
struct usb_devmap devmap; /* 设备 */
struct usb_operations *op; /* 对应于特定HCI的操作 */
struct usb_device *root_hub; /*根hub */
void *hcpriv; /* Host Controller private data */
……
};
op指向一个usb_operations型数据结构,该数据结构用来给USB核心层指定hci操作的函数指针:
static struct usb_operations hci_device_operations = {
allocate: hci_alloc_dev,
deallocate: hci_free_dev,
get_frame_number: hci_get_current_frame_number,
submit_urb: hci_submit_urb,
unlink_urb: hci_unlink_urb,
};
void *hcpriv是一个无类型指针,指向一个HCI数据结构,可以是UHCI,OHCI,或其他HCI。在这里,它指向SL811HC的hci_t数据结构。下面给出了SL811HC的hci_t数据结构的主要成员。
typedef struct hci {
struct virt_root_hub rh; /* 主机控制器的虚拟根hub的私有成员 */
struct list_head ctrl_list; /* 控制端点的列表 */
struct list_head bulk_list; /* 批量传输端点的列表*/
struct list_head iso_list; /* 同步传输端点的列表*/
struct list_head intr_list; /* 中断传输端点的列表*/
td_array_t *td_array; /* 事务描述符队列 */
td_array_t a_td_array;
td_array_t i_td_array[2];
struct usb_bus *bus; /* 指向usb_bus的指针 */
……
} hci_t;
在hci_t数据结构中,有一个指向usb_bus的指针。可见,hci_t数据结构和usb_bus数据结构互相有一个指针指向对方,它们一起完整的描述了USB的总线行为。
1 2 3 4
上一篇:未来iPad 3D技术让你将物体“拉出”屏幕
下一篇:NFC的危险 你意识到了吗


