分类: LINUX
2015-03-25 20:06:50
原文地址:usb hub请求 作者:steven_miao
谨以此文纪念过往的岁月
一. 前言
在前文中,我们看过hub的处理并没有对hub的请求命令做个详细的讲解,在本文中,我们会针对这些hub的请求来看hub的处理,也可以说是从另一个方面来看hub,主要是结合usb2.0协议来看。
二. hub请求命令
1. Get Hub Status
|
bRequest |
wValue |
wIndex |
wLength |
Data |
10100000B |
GET_ STATUS |
0 |
0 |
4 |
Hub status and Change Status |
struct usb_hub_status {
__le16 wHubStatus; --hub状态
__le16 ; --hub改变
} __attribute__ ((packed));
下面来说明这两个成员各个bit位的含义
:
该成员表明hub的电源状态
bit 0 : 该位表明hub的电源是依靠本地供电还是外部电源。0表明本地供电良好,1表明本地供电不良。
Bit1 : 该位表明是否有过流存在 0 表明无过流存在 1表明有过流存在。如果所有的端口电流总和超过了hub支持电流的最大值则会设置该位,同时所有的端口都将处于断电状态。
Bit2~bit15 : 保留
wHubChange:
而该成员则用于表示电源状态是否改变
Bit 0 : 本地电源改变。0 本地电源状态没有改变 1 改变。其实该域的变化与否跟上面的wHubStatus的值息息相关,如果wHubStatus的bit0从0->1或从1->0,那该位会设置。clear_feature时其对应的是C_HUB_LOCAL_POWER
Bit1 :过流状态是否改变。该bit的设定与上面相同。在clear_feature时其对应的是C_HUB_OVER_CURRENT
2. Get Port Status
bRequestType |
bRequest |
wValue |
wIndex |
wLength |
Data |
10100011B |
GET_ STATUS |
0 |
Port |
4 |
Port status and Change Status |
struct usb_port_status {
__le16 ;
__le16 wPortChange;
} __attribute__ ((packed));
wPortStatus:
Bit0:当前连接状态(PORT_CONNECTION) 0 无设备连接 1 有设备连接
Bit1:端口使能与否(PORT_ENABLE) 0 禁止端口 1 使能端口 该位仅能有usb系统软件设定。
Bit2:挂起(PORT_SUSPEND) 0 未挂起 1 挂起或恢复
Bit3:过流(PORT_OVER_CURRENT) 0 无过流 1 存在过流
Bit4:复位(PORT_RESET) 0 无复位信号 1 复位信号 如果主机想复位该端口连接的设备则设置该位,该位会一直保留设置直到hub不鸟复位信号。
Bit5~bit7:保留
Bit8:端口电源(PORT_POWER) 0 该端口处于断电 1 该端口供电正常
Bit9:连接设备为低速设备(PORT_LOW_SPEED) 0 全速或高速设备链接在该端口 1 该端口链接的设备为低速设备
Bit10:连接设备为高速设备(PORT_HIGH_SPEED) 0 全速设备连接在该端口 1 高速设备链接在该端口
Bit11:端口测试模式(PORT_TEST) 0 端口未处在端口测试模式 1 处于端口测试模式
Bit12:端口指示灯控制(PORT_INDICATOR) 0 端口指示灯为默认颜色 1 端口指示灯软件控制颜色
Bit13~bit15:保留
wPortChange:
bit0:链接状态改变(C_PORT_CONNECTION) 0 没有改变 1 改变
bit1:端口禁止/使能改变(C_PORT_ENABLE) 该bit位会由于Port_Error条件导致端口禁止时设置1
bit2:挂起改变(C_PORT_SUSPEND) 0 没有改变 1 恢复结束
bit3:过流指示改变(C_PORT_OVER_CURRENT) 0 无过流 1 过流指示改变
bit4:复位改变(C_PORT_RESET) 0 无改变 1 复位结束
bit5~bit15:保留