兰州网站哪里做电脑平面设计软件

当前位置: 首页 > news >正文

兰州网站哪里做,电脑平面设计软件,搜索风云榜,个人适合做什么网站USB的描述符是USB设备向主机报告状态的重要数据结构#xff0c;在USB通电后#xff0c;端点(也称为终结点)0始终处于可用状态#xff0c;这个默认的端点就是用于主机从设备中读取描述符的。 讨论USB通讯#xff0c;需要从软件和硬件两方面说起#xff0c;在软件上#x…USB的描述符是USB设备向主机报告状态的重要数据结构在USB通电后端点(也称为终结点)0始终处于可用状态这个默认的端点就是用于主机从设备中读取描述符的。 讨论USB通讯需要从软件和硬件两方面说起在软件上USB有设备、端点、管道、接口、配置、轮询这些概念了解这些概念会帮助我们更好的熟悉USB通讯在讨论它们之前需要了解描述符的概念USB IF规定一共有五种描述符分别是设备描述符、配置描述符、接口描述符、端点描述符、字符串描述它们之间存在一定的关联性同时这些描述符也从侧面勾勒出整个USB规范的设计思想。 每个USB设备都会有设备属性设备属性对应设备描述符它会告诉主机自己是什么设备由于存在复合型设备所以会有不同的配置例如一个USB设备可以将两个不同的USB设备集合在一个USB物理接口上例如鼠标键盘都可以结合在一个物理接口上此时只需占用一个USB物理端口即可于是每个USB设备可以用不同的配置每种配置能暴露不同的接口每个接口表示一种逻辑上的功能在每个接口上至少有一个端点用来和设备通讯端点是在USB设备在总线上的物理地址当端点实际建立的使用就是一个具体的管道。 需要指出的是USB设备可以通过切换工作模式来修改几乎所有的描述符这并不意外在许多外设的开发过程中模组厂家通常会给出一个用于烧录的端口(通常是串口)这个端口在特殊的模式下有效当模组启动时检测到自身处于未烧录状态或者收到烧录指令时都会将该端口切换出来主机可以通过这个端口将映像文件写入模组下一次模组将进入正常的工作状态。 主机通过向默认端点发送各种标准控制请求 (GET_DESCRIPTOR 请求) 从附加设备获取描述符。 这些请求指定要检索的描述符的类型。 为了响应此类请求设备发送描述符其中包含有关设备、其配置、接口和相关端点的信息。 设备描述符 包含有关整个设备的信息。 配置描述符 包含有关每个设备配置的信息。 字符串描述符 包含 Unicode 文本字符串。 每个 USB 设备都会公开一个设备描述符该描述符指示设备的类信息、供应商和产品标识符以及配置数。 每个配置都会公开其配置描述符指示接口数和电源特征。 每个接口都为其每个备用设置公开一个接口描述符其中包含有关 类和端点数的信息。 每个接口中的每个端点都会公开端点描述符这些描述符指示端点类型和最大数据包大小。 例如请考虑 USB 设备布局中所述的 OSR FX2 板 设备布局。 在设备级别设备公开默认端点的设备描述符和端点描述符。 在配置级别设备公开配置 0 的配置描述符。 在接口级别它公开了备用设置 0 的一个接口描述符。 在端点级别它公开了三个端点描述符。 USB 设备描述符 设备描述符包含有关 USB 设备整体的信息它定义为 USB_DEVICE_DESCRIPTOR 结构客户端驱动程序可以发送 get-描述符请求以获取设备描述符的信息。 每个通用串行总线 (USB) 设备都必须能够提供包含设备相关信息的单个设备描述符。 USB_DEVICE_DESCRIPTOR 结构描述设备描述符。 Windows 使用该信息来派生各种信息集。 例如 idVendor 和 idProduct 字段分别指定供应商和产品标识符。 Windows 使用这些字段值来构造设备 的硬件 ID 。 若要查看特定设备的硬件 ID请打开设备管理器并查看设备属性。 在“ 详细信息 ”选项卡中 “硬件 ID ”属性值指示 Windows 生成的硬件 ID (“USB\XXX”) 。 bcdUSB 字段指示设备符合的 USB 规范的版本。 例如0x0200指示设备按照 USB 2.0 规范设计。 bcdDevice 值指示设备定义的修订号。 USB 驱动程序堆栈使用 bcdDevice 以及 idVendor 和 idProduct 为设备生成硬件和兼容 ID。 可以在 设备管理器 中查看这些标识符。 设备描述符还指示设备支持的配置总数。 当设备以高速容量连接到主计算机时设备在其设备描述符中报告的信息可能与以全速容量连接时不同。 设备不得在连接的生存期内包括电源状态更改期间更改设备描述符中包含的信息。 主机通过控件传输获取设备描述符。 在传输中请求类型为 GET DESCRIPTOR接收方为设备。 客户端驱动程序可以通过以下两种方式之一启动该传输使用框架 USB 目标设备对象或通过发送包含请求信息的 URB。 获取设备描述符 Windows 驱动程序框架 (WDF) 客户端驱动程序只能在创建框架 USB 目标设备对象后获取设备描述符。 KMDF 驱动程序必须通过调用 WdfUsbTargetDeviceCreate 获取 USB 目标设备对象的 WDFUSBDEVICE 句柄。 通常客户端驱动程序在驱动程序的 EvtDevicePrepareHardware 回调实现中调用 WdfUsbTargetDeviceCreate。 之后客户端驱动程序必须调用 WdfUsbTargetDeviceGetDeviceDescriptor 方法。 调用完成后设备描述符在调用方分配 的USB_DEVICE_DESCRIPTOR 结构中接收。 UMDF 驱动程序必须查询 IWDFUsbTargetDevice 指针的框架设备对象然后调用 IWDFUsbTargetDevice::RetrieveDescriptor 方法并将 USB_DEVICE_DESCRIPTOR_TYPE 指定为描述符类型。 主机还可以通过发送 URB 来获取设备描述符。 此方法仅适用于内核模式驱动程序。 但是除非驱动程序基于 Windows 驱动程序模型 (WDM) 否则客户端驱动程序应永远不必为此类请求发送 URB。 此类驱动程序必须分配 URB 结构然后调用 UsbBuildGetDescriptorRequest 宏以指定请求的 URB 格式。 然后驱动程序可以通过将 URB 提交到 USB 驱动程序堆栈来发送请求。 此代码示例演示 UsbBuildGetDescriptorRequest 调用该调用使用相应的 URB 设置 pURB 指向的缓冲区的格式 UsbBuildGetDescriptorRequest(pURB, // Points to the URB to be formattedsizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST),USB_DEVICE_DESCRIPTOR_TYPE,0, // Not used for device descriptors0, // Not used for device descriptorspDescriptor, // Points to a USB_DEVICE_DESCRIPTOR structureNULL,sizeof(USB_DEVICE_DESCRIPTOR),NULL ); 获取设备描述符的例子 下面的代码演示 USB 网络摄像头设备的设备描述符 Device Descriptor: bcdUSB: 0x0200 bDeviceClass: 0xEF bDeviceSubClass: 0x02 bDeviceProtocol: 0x01 bMaxPacketSize0: 0x40 (64) idVendor: 0x045E (Microsoft Corporation) idProduct: 0x0728 bcdDevice: 0x0100 iManufacturer: 0x01 0x0409: Microsoft iProduct: 0x02 0x0409: Microsoft LifeCam VX-5000 0x0409: Microsoft LifeCam VX-5000 iSerialNumber: 0x00 bNumConfigurations: 0x01 在前面的示例中你将看到设备已根据 USB 规范版本 2.0 进行了开发。 请注意 bDeviceClass、 bDeviceSubClass 和 bDeviceProtocol 值。 这些值指示设备包含一个或多个 USB 接口关联描述符可用于对每个函数的多个接口进行分组。  接下来请关注 bMaxPacketSize0 的值。 此值指示默认端点的最大数据包大小。 此示例设备可以通过其默认端点传输最多 64 字节的数据。 通常若要配置设备客户端驱动程序会在获取设备描述符后获取有关设备中支持的配置的信息。 若要确定设备支持的配置数请检查返回结构的 bNumConfigurations 成员。 此设备支持一种配置。 若要获取有关 USB 配置的信息驱动程序必须获取 USB 配置描述符。