- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试设置一个 USB 设备,使其在连接到 Windows 8 机器时自动使用 WinUSB 作为驱动程序,如所述 here .
它说:
In order for the USB driver stack to know that the device supports extended feature descriptors, the device must define an OS string descriptor that is stored at string index 0xEE.
我的意思是我需要在内存位置 0xEE 处创建一个包含描述符的结构。我将如何在 C 中解决这个问题?
这是我尝试过的:
// The struct definition
typedef struct {
uint8_t bLength;
uint8_t bDescriptorType;
uint8_t qwSignature[14];
uint8_t bMS_VendorCode;
uint8_t bPad;
} usb_os_str_desc_t;
// Create a pointer to a struct located at 0xEE
volatile usb_os_str_desc_t* const extended_feature_support = (usb_os_str_desc_t*) 0xEE;
// Create a new struct at the location specified in "extended_feature_support"
(*extended_feature_support) = {
.bLength = 0x12,
.bDescriptorType = 0x03,
.qwSignature = "MSFT100",
.bMS_VendorCode = 0x04,
.bPad = 0x00
};
但是编译器不喜欢这样,提示数据定义没有类型。有没有办法在 C 中做到这一点?我对这篇文章的理解正确吗?
如有任何帮助,我们将不胜感激。
最佳答案
这根本不是它在说什么。您必须响应 USB 请求,而不是将结构放置在嵌入式系统内存的特定位置。
Windows 将在第一次看到 VID:PID:Serial 时请求索引 0xee 处的操作系统字符串描述符。设备必须响应与您显示的结构格式匹配的数据包。如果返回的描述符中的所有内容都是正确的(您的示例看起来不错),Windows 将发出设备供应商请求,并将 bReq 设置为您在字符串描述符响应中提供的 MS_VendorCode(您的示例中为 0x04)。
如果您的设备使用正确的操作系统功能描述符进行响应,那么奇迹就会发生。人们通常想要的魔法是让他们的设备在不提供 .inf 文件的情况下使用 winusb 驱动程序。
请注意,此请求只会发生一次。如果你正在开发一个设备,你通常会想做很多很多次。为此,您必须从设备管理器中卸载设备,然后在注册表编辑器中,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
下查找您的 VIDPIDRELEASE 并将其删除。现在,当您再次插入设备时,它将再次执行此操作系统字符串描述符请求。
请引用https://github.com/pbatard/libwdi/wiki/WCID-Devices有关更多信息,它比 MS 提供的文档更清晰。
关于c - 在设备固件中支持 WinUSB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666006/
我正在尝试设置一个 USB 设备,使其在连接到 Windows 8 机器时自动使用 WinUSB 作为驱动程序,如所述 here . 它说: In order for the USB driver s
下午好 WinUSB 在我使用的开发计算机 (Win XP SP3) 上运行良好。我能够将新固件下载到 Cypress FX2,然后在它“重新枚举”后连接到新的 USB 设备。但是,如果我在其他几台计
我想在 C++ 上试验 USB 驱动程序。我正在使用 visual studio express 2013,但找不到 WinUSB 模板。我看过这个guide .但是它适用于 visual studi
我正在编写一个使用 WinUsb.dll 与 USB 设备通信的应用程序。这是一个用户模式库,允许通过在内核中作为其驱动程序安装的 winusb.sys 与设备进行通信。 我正在使用 C++ 和 Vi
我正在使用 Arduino 从网络读取数据并显示它。我可以使用提供的驱动程序轻松地将数据作为串行数据传递,因为它们可以识别 COM 端口,因此我可以将串行数据发送到 COM 端口。 但是,我想使用“真
您能否安装使用 WinUSB 构建的硬件驱动程序以及使用 Click-once 部署的 C# 应用程序? 最佳答案 ClickOnce 无法安装驱动程序。 ClickOnce 只是将文件从服务器位置复
我在 Windows 主机端使用 WinUSB 与我的 WINUSB USB 设备进行通信。我的 USB 设备是全速设备。我能够获取设备句柄并执行 OUT 和 IN 数据传输。 我在 FS WinUS
我正在尝试在我的项目中使用 WinUSB。我关注的指南是 http://msdn.microsoft.com/en-us/library/ff540174.aspx .这篇文章告诉我要包含以下文件:
我正在为包含 WinUSB 设备驱动程序的应用程序创建安装程序。我正在使用带有 difx 扩展名的 WiX 3.5。根据WinUSB how-to我可以创建适用于 x86、ia64 和 amd 架构的
我正在使用 Pi Zero 制作键盘原型(prototype),我计划设置 Pi Zero,使其模拟符合 HID 标准的 USB 键盘(适用于 Windows)。有很多关于如何执行此操作的指南,所以我
我正在尝试使用 LIBUSING 和 C# 通过 USB 与诺基亚 Lumia 手机 (RM-917) 进行通信。 LIBUSB 能够查看设备的信息(pid、vid 等)。但是,我无法成功写入任何端点
我正在尝试使用 CloseHandle 释放 USB 接口(interface)的句柄。我得到的异常(exception)是: System.Runtime.InteropServices.SEHEx
我有一个由 VS2010 生成的通用 SDI 应用程序,我想用它来测试 WinUsb API。我安装了当前版本的 WDK。根据我在其他地方阅读的帖子,我应该能够设置 VS2010 项目包含路径以指向
从 VS12 (update4) 平台工具集 v110 上的工作 C++\CLI 项目切换到 v110_xp 后,我的构建因找不到 winusb.h 而失败。 我可以在工作项目中看到由编译器创建的文件
可能是一些广泛使用 WinUSB API 或用户模式 USB 驱动程序的人的一个问题 - WinUSB API 或用户模式驱动程序是否可以用作 USB 连接的被动观察者,捕获中断通知、控制请求、数
我在遵循 Write a Windows desktop app based on the WinUSB template 的教程时遇到了问题来自微软的MSDN。按照说明,在我们需要创建 WinUSB
我正在尝试从 Winusb 设备获取供应商和产品 ID,并在尝试使用 winusb_GetDesicriptor() 时遇到 accessviolationexception,但无法弄清楚为什么我会收
我需要在 Linux 上实现一个驱动 USB 连接设备(医疗仪器)的应用程序。该应用程序将使用 C++(2011 标准)编写。 当前应用程序是用 C# 为 Windows 10 编写的,并使用为设备枚
我在 Windows XP(x86,服务包 3)上安装 WinUSB 驱动程序时遇到困难。我已按照 Microsoft WinUSB 指南使用 inf 文件、已签名的 cat 文件(使用 Inf2ca
我需要直接通过 USB 与简单的自定义设备通信。我有完整的通信协议(protocol)规范。遗憾的是,设备供应商没有为该设备提供 WinUSB 驱动程序。 根据 https://msdn.micros
我是一名优秀的程序员,十分优秀!