【问题标题】:Converting System.IO.Ports.SerialPort code to boost::asio将 System.IO.Ports.SerialPort 代码转换为 boost::asio
【发布时间】:2013-06-17 15:43:42
【问题描述】:
我正在尝试将与 USB 通信的 .Net 代码转换为 TTL 设备以 boost::asio::serial_port 代码以便能够在 Linux 下运行。我已经完成了所有操作,但有一行我无法转换:
port.Handshake = Handshake.RequestToSendXOnXOff;
我发现我们应该使用asio::serial_port_base::flow_control,但它的模式只有none、software和hardware。我应该怎么做才能使我的代码与 .Net 代码相同?
谢谢
【问题讨论】:
标签:
c++
serial-port
boost-asio
【解决方案1】:
您希望软件和硬件都与现有的相匹配。我会假设这些值可以组合在一起来激活这两种控制。
串行端口可以发生两种握手。第一种使用一对物理信号线,称为 RTS(请求发送)和 CTS(清除发送)。您应该能够在 RS232 连接器和电缆引出线中看到这些线。由于这些是必须连接的物理线路,因此这种握手将是“硬件”。另一种方法涉及发送特定字节(XOn 和 XOff)以指示缓冲区何时已满或设备何时准备好再次接收。大多数设备或驱动程序现在自动提供此功能,但由于它是使用标准发送/接收线路完成的,因此它是“软件”。
随着 USB“串行端口”的兴起,这种区别变得不那么有意义了,因为它在 USB 层丢失了。我在一些设备上使用的 USB 转串行芯片确实为终端设备重新创建了实际信号,但鉴于 USB 连接中固定数量的引脚,我假设所有握手都是通过 USB 层数据包完成的。