[英]Discovering and communicating with USB devices in C++
简而言之,在USB通信方面,我是个新手。 虽然我在微控制器方面处理过较低级别的串行通信(SPI,UART,I2C),但我从未处理过USB或串行通信的OS端。 所以,请忍受我。
我有一个RFID读/写器,它具有自己的协议,可用于发出各种命令。 我正在研究使用Boost:ASIO库执行所需的读/写操作。
但是,图书馆有点麻烦,我正在寻找一些指导。 此外,当我在Windows环境中工作时,我想使我的硬件抽象层尽可能地可移植。 同样,我过去(和其他程序员)对COM端口进行硬编码时遇到了不好的经验,我宁愿我的程序在插入时发现我的阅读器,也许是基于阅读器ID。
我建议您研究libusb( http://www.libusb.org/ ),它具有对USB接口的跨平台支持,并且如果您了解USB的工作原理,它并不复杂。
设备检测是特定于平台的,因此您应该在特定于OS的部分和数据处理之间定义跨平台API。
对于Windows上的设备枚举,有SetupDi
* API。 设备到达事件可以通过RegisterDeviceNotification
获得。 您可以检查包含VID和PID的“兼容ID”,以及报告USB字符串描述符的总线相关设备描述,以识别您自己的设备。
在Linux上,有udev
,它可以在VID,PID和字符串描述符上进行匹配,并为匹配的设备提供枚举和到达事件。
使用这些特定于OS的方式查找串行端口名称后,您将具有各种跨平台的串行端口库来打开连接并与设备交换数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.