Skip to main content
对 Box 上的某个串口打开一个流式会话,并从测试中驱动被测设备的控制台。

启用该 feature

UART 会话基于 Socket.IO,因此它位于一个 cargo feature 之后:
uart feature 隐含启用 blocking。它没有异步版本。

句柄

uart() 是唯一返回 Result 的句柄构造方法。其他每个 Net 句柄在您调用方法之前都是静止的,而 uart() 会连接会话并立即开始流式传输,因此它在这一步就可能失败。

方法

方法参考

read(timeout: Duration) -> Result<Vec<u8>>

timeout 时间内到达的字节。该调用可能返回空 vector。
设备空闲时,read() 会把整个超时时间等满。在轮询循环里请用 try_read(),否则每一轮迭代都要花掉整个超时时长。

try_read() -> Result<Vec<u8>>

已经收到的字节,不等待。

wait_for(needle: &[u8], timeout: Duration) -> Result<Vec<u8>>

一直累积,直到出现 needle 返回: 直到该标记为止、并且包含该标记的全部内容;剩余部分继续留在缓冲区里。空标记会立即返回;没找到则是 Error::Timeout

write(data: &[u8]) -> Result<()>write_str(s: &str) -> Result<()>

向设备写入。

last_status() -> Option<&str>

最近一次会话状态通知,在读取过程中更新。当一个 USB 串口适配器正在重新枚举时 —— 因为某个集线器端口被断电重启,或者被测设备被重新烧录 —— 它读到的是 "reconnecting",然后是 "reconnected"。检查它可以区分”被测设备很安静”和”适配器不见了”。

stop() -> Result<()>

干净地停止,并关闭 Box 上的该端口。它会消耗掉该会话。把会话 drop 掉同样会停止它,但 stop() 会把错误暴露出来。

示例

等待启动横幅,然后驱动控制台

在重新烧录过程中保住会话

受支持的硬件

说明

  • Box 独占该端口,并且每个 Net 或设备只允许一个会话。 第二个打开者会得到 Error::Stream,说明该端口已被占用。这也包括您自己上一个测试泄漏下来的会话 —— 请调用 stop()
  • 连接确认的超时是 15 秒;超过它是 Error::Timeout
  • 字节是原始的。没有行规程、不处理回显、也不做编码转换;wait_for 是按字节工作的。
  • 会话会在 Socket.IO 握手时带上网关 bearer 令牌,因此受网关保护的 Box 无需额外配置。
  • 在 FTDI 多通道芯片上,UART 四个通道都能用,这与只限于通道 A 和 B 的 MPSSE 协议(debug、spi、i2c)不同。在单通道的 FT232H 上,占用 UART 会让 MPSSE 类角色不可用,反之亦然。