gpt4 book ai didi

c++ - 使用 C++ 动态分配/dev/ttyUSB*

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:28 25 4
gpt4 key购买 nike

我在 Raspbian 上运行一个自定义 C++ 程序,它会每隔一段时间重新启动它的 USB 端口。但是,我注意到/dev/USB* 枚举在电源循环之间不一致,需要能够处理这个问题。

是否有任何优雅的方法可以根据当前/dev/中的内容获取诸如“/dev/ttyUSB0”或“/dev/ttyUSB1”之类的字符串?假设只会连接一个设备是公平的,但假设除了通信所需的设备之外还有什么设备是不公平的。

到目前为止我尝试过的事情:

  1. dirent.h - 抓取所有“/dev/”并搜索“ttyUSB”似乎很笨重
  2. 强制 USB 设备名称为静态 - 我需要我的程序不依赖于串行端口上使用的设备

我并不完全反对使用系统调用,但希望尽可能避免使用“ls -l/dev/ttyUSB*”。

最佳答案

执行此操作的最佳方法是创建一个 udev 规则,该规则将在插入设备时创建一个符号链接(symbolic link)。您的 udev 规则将如下所示:

ATTRS{interface}="usb_converter", SYMLINK+="custom_link"

请注意,ATTRS 下还有更多选项可用于匹配特定 USB 设备。您可以获得诸如PID/VID、设备序列号、制造商等信息。如果您的USB转串口转换器是FTDI制造的,通常我所做的是使用FTPROG对设备重新编程并赋予其唯一性接口(interface)名称(在本例中为 usb_converter),然后匹配该名称以确保它始终相同。

参见 this answer了解更多信息,以及 this guide用于编写 udev 规则。

关于c++ - 使用 C++ 动态分配/dev/ttyUSB*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com