#read-write #tokio #serial-port #timing #async-io #operations #wrapper

tokio_serial_pacing

SerialStream 的节流包装器,确保读/写操作之间的静默

2 个版本

0.1.1 2024 年 3 月 27 日
0.1.0 2024 年 3 月 26 日

#526硬件支持

每月下载量:31

MIT 许可证

23KB
330

围绕 tokio_serial::SerialStream 的串行节流包装器

可用于实现 AsyncRead + AsyncWrite 的任何东西,但目前已仅针对串行端口进行测试。

我构建这个库是因为 Modbus RTU 规范要求在读取和写入之间保持一定时间的静默才能符合规范。(它还要求具有特定的字符间时间,我将忽略它)

此代码对定时器超时的具体要求并不充分,因为 tokio 超时并不足够精确以保证任何事情。然而,它足以确保读/写操作之间至少有一定的时间间隔。

由于某些原因 (...) 我还实现了相反的操作,即写入后等待再读取,尽管我不知道这为什么是必要的。

示例

use std::time::Duration;
use tokio_serial::{SerialPort, SerialStream};
use tokio_serial_pacing::{SerialPacing, SerialWritePacing};

#[tokio::main(flavor="current_thread")]
async fn main() -> std::io::Result<()> {
  let (tx, mut rx) = SerialStream::pair().expect("Failed to open PTY");
  let mut rx: SerialWritePacing<SerialStream> = rx.into();
  rx.set_delay(Duration::from_millis(3));
  Ok(())
}

依赖项

~5–17MB
~174K SLoC