#串口 #串行 #TTY #UART

程序+库 serial_enumerator

使用 Rust 编写的串口枚举库

6 个版本

0.2.12 2023年3月24日
0.2.10 2023年3月24日
0.2.5 2022年6月1日
0.2.4 2022年1月5日

#316硬件支持

Download history 323/week @ 2024-04-01 255/week @ 2024-04-08 2/week @ 2024-06-03 1/week @ 2024-06-10

每月 359 次下载
用于 2 crates

MIT 许可证

33KB
670

serial_enumerator

一个使用 Rust 编写的串口枚举库,可以帮助您获取设备和串口信息。

  • 支持 Linux、Windows、MacOS
  • 支持 Linux 的 arm 和 x86 设备

简单用法

  • 以表格形式打印所有串口
  • 列出串口的示例 CLI 工具: lser
use cli_table::{format::Justify, print_stdout, Table, WithTitle};
use serial_enumerator::{get_serial_list, SerialInfo};

#[derive(Table)]
struct SerialItem {
    #[table(title = "Name")]
    name: String,
    #[table(title = "Vendor", justify = "Justify::Center")]
    vendor: String,
    #[table(title = "Product", justify = "Justify::Center")]
    product: String,
    #[table(title = "USB", justify = "Justify::Center")]
    usb: String,
}

impl SerialItem {
    pub fn from_serial_info(serial_info: SerialInfo) -> SerialItem {
        let field_or_else = || Some(String::from("--"));
        return SerialItem {
            name: serial_info.name,
            vendor: serial_info.vendor.or_else(field_or_else).unwrap(),
            product: serial_info.product.or_else(field_or_else).unwrap(),
            usb: serial_info
                .usb_info
                .and_then(|usbinfo| Some(format!("{}:{}", usbinfo.vid, usbinfo.pid)))
                .or_else(field_or_else)
                .unwrap(),
        };
    }
}

fn main() {
    let serials_info = get_serial_list();
    let mut serials_table = Vec::new();
    for serial_info in serials_info {
        serials_table.push(SerialItem::from_serial_info(serial_info));
    }
    print_stdout(serials_table.with_title()).unwrap();
}

  • Debian 上的输出
+--------------+------------+------------------+-----------+
| Name         | Vendor     | Product          | USB       |
+--------------+------------+------------------+-----------+
| /dev/ttyS0   |    pnp     |     PNP0501      |    --     |
+--------------+------------+------------------+-----------+
| /dev/ttyUSB0 |    FTDI    | Dual RS232-HS:00 | 0403:6010 |
+--------------+------------+------------------+-----------+
| /dev/ttyUSB1 |    FTDI    | Dual RS232-HS:01 | 0403:6010 |
+--------------+------------+------------------+-----------+
| /dev/ttyUSB2 | ch341-uart | USB2.0-Serial:00 | 1a86:7523 |
+--------------+------------+------------------+-----------+

依赖关系

~0.8–38MB
~545K SLoC