c++ - 将 System.IO.Ports.SerialPort 代码转换为 boost::asio

标签 c++ serial-port boost-asio

我正在尝试将与 USB 到 TTL 设备通信的 .Net 代码转换为 boost::asio::serial_port 代码,以便能够在 Linux 下运行。我已完成所有操作,但有一行我无法转换:

   port.Handshake = Handshake.RequestToSendXOnXOff;

我发现我们应该使用asio::serial_port_base::flow_control,但它的模式只有nonesoftware硬件。我应该怎么做才能使我的代码与 .Net 代码相同?

谢谢

最佳答案

您希望软件和硬件都与现有的相匹配。我假设这些值可以通过或组合在一起来激活这两种控制。

串口有两种握手方式。第一个使用一对称为 RTS(请求发送)和 CTS(清除发送)的物理信号线。您应该能够在 RS232 连接器和电缆引出线中看到这些线。由于这些是必须连接的物理线路,因此这种握手将是“硬件”。另一种方法涉及发送特定字节(XOn 和 XOff)以指示缓冲区何时变满或设备何时准备好再次接收。大多数设备或驱动程序现在自动提供此功能,但由于它是使用标准传输/接收线路完成的,因此它是“软件”。

随着 USB“串行端口”的兴起,这种区别变得不那么有意义了,因为它在 USB 层消失了。我在我的一些设备上使用的 USB 转串行芯片确实会为终端设备重新创建实际信号,但考虑到 USB 连接中的固定引脚数量,我假设所有握手都是通过 USB 层数据包完成的。

关于c++ - 将 System.IO.Ports.SerialPort 代码转换为 boost::asio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151560/

相关文章:

c - RS-232 for Linux和WIN32在Linux上收不到数据

c - 在 Raspberry PI 3 上的 C++ 中达到超时后如何清除 select() 状态

c++ - boost 截止时间计时器在 iOS 中过期不准确

C++继承问题错误C2084函数已经有一个主体

c++ - 如何将文本文件的一部分分配给数组的索引?

c++ - 找出哪些函数被内联

c++ - 默认构造函数是否总是初始化所有成员?

linux - “启用控制台 [ttyS0]”是什么意思?

c++ - 单元测试和 boost::asio

c++ - Boost Asio SSL Stream lowest_layer() 和 next_layer() 之间的区别