IOCTL_INTERNAL_USB_GET_PORT_STATUS I/O 请求查询 PDO 的状态。IOCTL_INTERNAL_USB_GET_PORT_STATUS 是内核模式 I/O 控制请求。 此请求面向 USB 集线器 PDO。 必须在 IRQL = PASSIVE_LEVEL 发送此 IOCTL。主要代码IRP_MJ_INTERNAL_DEVICE_CONTROL输入...
2、主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。返回的消息告诉主机该设备是什么时候连接的。集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。 3、主机发送Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口,请求集线器来重新设置端口。集线器使...
2、主机发送Get_Port_Status(读端口状态)请求,以获取更多的设备信息。返回的消息告诉主机该设备是什么时候连接的。集线器检测设备是低速运行还是高速运行,并将此信息送给主机,这是对Get_Port_Status请求的响应。 3、主机发送Set_Port_Feature(写端口状态)请求给集线器,要求它复位端口,请求集线器来重新设置端口。集线器使...
hub通过检测USB总线空闲时的差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,hub就可以将此设备的速度类型信息回复给host。USB 2.0规范要求速度检测要先于复位(Reset)操作。根据是D+还是D-被拉高来判断到底是什么设备(全速/低速)插入端口。如下图。
USB 中心驱动程序使用IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO。 请勿使用。 IOCTL_INTERNAL_USB_GET_PORT_STATUS IOCTL_INTERNAL_USB_GET_PORT_STATUS I/O 请求查询 PDO 的状态。 IOCTL_INTERNAL_USB_GET_PORT_STATUS是内核模式 I/O 控制请求。 此请求面向 USB 中心 PDO。 必须在 IRQL = PASSIVE_LEVEL 发送...
如果有连接/断开事件发生,那么主机会发送一个 Get_Port_Status请求给hub以了解此次状态改变的确切含义。Get_Port_Status等请求属于所有hub都要求支持的hub类标准请求,hub相关的标准我们暂时不研究,大家知道这一点就好。 4.主机检测所插入的设备是全速还是低速 ...
4) hub_port_init() 端口初始化,实质就是获取设备描述符device deor。 5) usb_get_status() 这个有点特殊,它是专门给Hub又外接Hub而准备的。 6)usb_new_device() 这时USB设备已经进入了Configured状态,调用device_add()在USB总线上寻找驱动,若匹配成功,则加载对应的驱动程序。
5、主机发送另一个Get_Port_Status请求,确定设备是否已经从复位状态退出。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备此时处于缺省状态,且已准备好在零端点通过缺省通道响应主机控制传输。缺省地址为00h,设备能从总线获取高达100mA的电流。
USB_REQ_GET_STATUS, USB_DIR_IN | type, 0, target, status, sizeof(*status), USB_CTRL_GET_TIMEOUT); 接着:定义每一个port的电流 -> hub_hub_status(hub, &hubstatus, &hubchange); 这个请求是hub自己定义的(spec P425),将当前hub状态保存在hubstatus,已经改变的 ...
连接设备后,Hub 会检测到设备连接事件,并在 Status Change 端点上报告。主机将接受状态更改报告,并可能在端口上请求 SetPortFeature(PORT_RESET)。如果面向下游的端口连接了增强型 SuperSpeed 设备,则主机调用的 GetPortStatus 请求将返回 PORT_CONNECTION 指示以及 PORT_SPEED 字段设置为零。