如何使用asio库打开usb端口并接收它的数据?

时间:2012-02-20 16:56:11

标签: c++ linux boost boost-asio

我有一个设备与另一个应用程序(不是我写的)通信,我希望使用我的应用程序获得它的价值。谷歌搜索我找到了ansio库,我安装了它并找到了this入门教程。

问题:如何在端口名称中设置设备名称? 使用lsusb,我得到:

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 Webcam
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

我想处理网络摄像头设备:

Bus 001 Device 004: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 Webcam
然后我写道:

try {
    SimpleSerial serial("/dev/ttyUSB4",115200); // get SimpleSerial class on link above
    cout<<serial.readLine()<<endl;
    return 0;

} catch(boost::system::system_error& e)
{
    cout<<"Error: "<<e.what()<<endl;
    return 1;
}

但它给出了:Error: open: No such file or directory 怎么解决这个问题?提前谢谢。

2 个答案:

答案 0 :(得分:1)

在shell中键入ls /dev/tty*,然后选择一个生成的端口。不幸的是,不能确定哪一个是正确的。否则,您可以通过处理dmesg的输出来尝试提取正确的端口。

答案 1 :(得分:0)

通常,当设备连接到USB端口时,它会在内核环形缓冲区中记录一条消息。该日志将经常为您提供所需的信息。要找到它,

  1. 连接设备
  2. 运行dmesgdmesg | tail -20以查看缓冲区的最后20行。

dmesg命令的输出应类似于以下内容。

.
.
.
[ 1562.334350] usb 2-1: USB disconnect, device number 2
[ 1566.526225] usb 1-1: new full-speed USB device number 7 using xhci_hcd
[ 1566.652880] usb 1-1: New USB device found, idVendor=067b, idProduct=2303, bcdDevice= 4.00
[ 1566.652885] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1566.652888] usb 1-1: Product: USB-Serial Controller D
[ 1566.652891] usb 1-1: Manufacturer: Prolific Technology Inc. 
[ 1566.655451] pl2303 1-1:1.0: pl2303 converter detected
[ 1566.656634] usb 1-1: pl2303 converter now attached to ttyUSB1

注意:

  • 最后一行告诉您适当的ttyUSB设备编号。这是特定于驱动程序的。无法通过/ dev / ttyUSB#访问许多USB设备。