6 个版本
0.2.12 | 2023年3月24日 |
---|---|
0.2.10 |
|
0.2.5 | 2022年6月1日 |
0.2.4 | 2022年1月5日 |
#316 在 硬件支持
每月 359 次下载
用于 2 crates
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