为 Pro Micro 编写 Windows 驱动程序

Writing a Windows driver for Pro Micro

首先,我对 USB 的功能知之甚少,更不用说编写驱动程序了;本质上是试图让这个项目成为一种学习体验。

我的设置包括 SparkFun Pro Micro 板和一台 Windows 机器。我有一个连接到 Pro Micro 的电位器,我的最终目标是将电位器的值发送到主机并使用该值来改变系统音量等...

Arduino 库附带了一个 Serial 库,我可以使用它通过 USB 发送内容。我目前有一个工作的 Arduino 程序,每 1 秒发送 1 个字节,windows 机器上的一个 C 程序 "connects" 到 COM 端口并读取通过的字节(这部分我工作正常).

问题是,当 Pro Micro 连接到计算机时,它出现在随机选择的 COM 端口上,我认为您无法分辨哪个 COM 端口连接哪个设备(不确定这一点)。

我的最终目标是当 Pro Micro 连接到 PC 时,主机程序应该自动识别 Pro Micro 并开始处理来自它的数据。将其设置为 HID 设备并使其作为我自己的自定义设备出现在设备管理器中是我感兴趣的事情,尤其是对于学习体验而言,但我觉得这可能会使事情过于复杂。

任何人都可以指出我应该 do/look 进入的正确方向吗?

可以使用 windows 内部工具,例如 COM 端口数据库 (https://msdn.microsoft.com/en-us/library/ff546481.aspx) 或 re-assign COM 端口 使用 windows 注册表 ,参见

如果你想了解背景:arduino 在加载新的驱动程序时实现 USB CDC ACM class(通信设备 Class - 抽象控制模型 https://en.wikipedia.org/wiki/USB_communications_device_class) and emulates a COM port. Windows recognizes this class and loads the apropriate driver which is usbser.sys (https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx) (虚拟)COM 端口可访问

最好的来源是 How does windows map the virtual com port to a devicehttps://superuser.com/questions/851192/change-com-port-number-programmaticallyhttp://www.ftdichip.com/Support/Documents/AppNotes/AN_132_Re-Assigning_COM_Port_Numbers_Using_Registry.pdf

我建议使用 libusbp,这是一个 C 库,可用于在给定 USB 供应商 ID 和产品 ID 的情况下查找 COM 端口的名称。 "examples" 文件夹中甚至有一个示例可以做到这一点:

https://github.com/pololu/libusbp