我有一个boost :: asio和boost :: asio :: serial_port设备的特殊问题。这段代码最终在异步读取和东西上运行得非常好,但我无法弄清楚如何即时更改串口的速度。如何使用boost :: asio(或者如何确定硬件缓冲区是否为空)更改串口速度?
我现在想要做的只是告诉我的串行端口连接的设备改变串口速度说38400波特,然后我通过设置我的电脑串口到相同的速度:
port_.set_option(boost::asio::serial_port_base::baud_rate(rate));
但真正的情况是,如果我做的set_option一部分,设备永远不会接收命令来改变速度。如果我不执行set_option部分,则设备正确更改速度。从我收集的情况来看,(阻塞,同步)写入将东西放入计算机的硬件缓冲区中并返回,然后执行放弃缓冲区的set_option(在它有时间将数据发送到设备之前)。所以我需要考虑一些方法来检查硬件缓冲区是否为空,并且在重新配置计算机串行端口之前,设备确实已收到命令以更改速度。如果必须在端口上执行close()和open()以使速度更改生效,我也找不到任何信息。我也想知道close()是否放弃缓冲区中的东西......我使用的是USB->串口适配器,如果它有任何区别,我的平台是Ubuntu 10.10。
那么我基本上有一个boost :: asio:io_service和一个boost :: asio :: serial_port,io_service被初始化,serial_port在构造函数中被io_service初始化,然后serial_port被配置为set_options。我不能说我可以在serial_port或io_service中看到任何flush()方法。我的代码中没有任何一个asio :: iostream。 – Dago 2010-12-17 07:43:18
当我想连接到以不同速度运行的不同设备时,我总是关闭串口。这是一个有趣的问题 - 抱歉,我无法提供更多帮助。 – Kieveli 2010-12-17 14:38:40
-1 OP不使用Asio流 – 2010-12-23 16:22:45