#串口 #串行 #串行通信 #测试 #模拟 #波特率

virtual-serialport

模拟串口以供测试。设计用于与 serialport crate 一起工作,实现虚拟串行通信。

2个版本

0.1.1 2024年8月10日
0.1.0 2024年8月10日

#501硬件支持

Download history 150/week @ 2024-08-05 49/week @ 2024-08-12

199 每月下载量

MIT 许可证

29KB
464 代码行

虚拟串口

串口模拟器(虚拟端口)设计用于与 serialport crate 一起工作。它支持使用内部缓冲区从端口读取和写入,具有可选的超时功能。

模拟器还允许配置标准串口参数,例如

  • 波特率
  • 数据位
  • 奇偶校验
  • 停止位
  • 流控制

其他功能包括

  • 控制信号模拟:模拟控制信号(RTS/CTS,DTR/DSR/CD)。注意,基于这些信号的实际流控制尚未实现。

  • 传输延迟模拟:启用时,根据波特率模拟传输延迟。这是通过为每个读取的符号添加固定延迟(延迟根据波特率计算)来简化的。

  • 噪声模拟:如果启用,在配对端口的物理设置(波特率、数据位、奇偶校验和停止位)不匹配时模拟噪声。这有助于测试系统在配置不匹配的情况下如何处理损坏或无效的数据。

示例用法

环回示例

use std::io::{Read, Write};

use virtual_serialport::VirtualPort;

let mut port = VirtualPort::open_loopback(9600, 1024).unwrap();
let write_data = b"hello";
let mut read_data = [0u8; 5];

port.write_all(write_data).unwrap();
port.read_exact(&mut read_data).unwrap();
assert_eq!(&read_data, write_data);

配对示例

use std::io::{Read, Write};

use virtual_serialport::VirtualPort;

let (mut port1, mut port2) = VirtualPort::open_pair(9600, 1024).unwrap();
let write_data = b"hello";
let mut read_data = [0u8; 5];

port1.write_all(write_data).unwrap();
port2.read_exact(&mut read_data).unwrap();
assert_eq!(&read_data, write_data);

更多示例可以在本仓库根目录下的 examples 文件夹中找到。

依赖项

~2.5MB
~48K SLoC