struct--
usb_hub.usb_hub_descriptor struct usb_hub_descriptor |--------------------------| |__u8 bDescLength | |__u8 bDescriptorType | |__u8 bNbrPorts | |__le16 wHubCharacteristics| |__u8 bPwrOn2PwrGood | |__u8 bHubContrCurrent | |__u8 DeviceRemovable[i] | |__u8 PortPwrCtrlMask[i] | |--------------------------| bLength 集线器类描述符的字节数长度 bDescriptorType 描述符类型; 集线器描述符: 0X29 bNbrPorts 集线器支持的下游端口数目 wHubCharacteristics 集线器特征描述 D1~0: 逻辑电源切换模式; 00: 所有端口同时切换; 01: 个别端口切换; 1x: 保留 D2 : 组合设备指示; 0: 一个独立的集线器设备; 1: 该集线器为一组合设备的一部分 D3~4: 电流过载保护模式 00: 全体电流过载保护,集线器通过综合所有端口的电流来判断是否有电流过载现象 01: 个体电流过载保护,集线器分别判断各个端口是否有电流过载现象 1x: 没有电流过载保护 D15~5:保留 bPwrOn2PwrGood 从端口加电到端口正常工作的时间间隔(以2ms为单位),USB系统根据该值来判断端口加电后的等待时间 bHubContrCurrent 该集线器设备本身(USB控制器)所需的最大电流 DeviceRemovable (大小不定) 用来指示连接在集线器端口的设备是否可移走,该域长度在以字节对齐为前提的基础上,随集线器的端口数变化而变化。从低位到高位,每一位表示一个集线器端口的状态,当值为0时,表示连接相应端口的USB设备可移走;为1时,表示端口上设备不可移走 集线器端口与数据位的映射如下: 位0 <--> 保留 位1 <--> 端口1 位2 <--> 端口2 ...... 位n <--> 端口n PortPwrCtrlMask 长度与DeviceRemovable域相同,每个数据位都必须设置为1,无实际意义,仅为了版本兼容 实验数据: ------------------------------------------------- [10628.299000] buffer[0] = B [10628.299000] buffer[1] = 29 [10628.299000] buffer[2] = 8 [10628.299000] buffer[3] = 2 低位 [10628.299000] buffer[4] = 0 高位 [10628.299000] buffer[5] = 1 2ms [10628.299000] buffer[6] = 0 [10628.299000] buffer[7] = 0 [10628.299000] buffer[8] = 0 [10628.299000] buffer[9] = FF [10628.299000] buffer[10] = FF |