2个不稳定版本
0.2.0 | 2024年3月29日 |
---|---|
0.1.1 | 2022年10月14日 |
0.1.0 |
|
#475 in 编码
每月 98 次下载
130KB
252 代码行
serialmessage
serialmessage
允许您将串行数据打包成快速、可靠、分组的格式,以与微控制器等设备进行通信。它与 Arduino SerialTransfer 和 Python pySerialTransfer 库兼容,由 PowerBroker2 提供。该软件包旨在与任何您希望使用的串行软件包一起使用,因此它本身不实现任何串行通信。此软件包是可选的完全 no_std 兼容的,可以在您选择的任何微控制器上使用。
消息格式
- 使用起始和停止字节
- 使用数据包标识符
- 使用一致的冗余字节填充
- 使用 CRC-8(多项式 0x9B,使用查找表)
- 允许使用动态大小的数据包(数据包的有效负载长度可以从 0 到 254 字节)
- 可以传输字节、整数、浮点数、结构体、数组、向量
数据包结构
01111110 00000000 11111111 00000000 00000000 00000000 ... 00000000 10000001
| | | | | | | | | | | | | | | | |______|__Stop byte (constant)
| | | | | | | | | | | | | | |______|___________8-bit CRC
| | | | | | | | | | | | |_|____________________Rest of payload
| | | | | | | | | | |______|________________________2nd payload byte
| | | | | | | | |______|_________________________________1st payload byte
| | | | | | |______|__________________________________________# of payload bytes
| | | | |______|___________________________________________________COBS Overhead byte
| | |______|____________________________________________________________Packet ID
|______|_____________________________________________________________________Start byte (constant)
示例
基本示例
use serialmessage::{SerMsg, ParseState};
let send_data_vec: Vec<u8> = vec![1, 2, 3, 4];
let send_msg = SerMsg::create_msg_vec(&send_data_vec, 1).unwrap();
// Send the message bytes with a serial crate of your choice
//Parsing received bytes
let mut ser_msg = SerMsg::new();
let (parse_state, _parsed_bytes) = ser_msg.parse_read_bytes(&send_msg);
match parse_state {
ParseState::DataReady => {
let rcvd_data = ser_msg.return_read_data();
assert_eq!(&send_data_vec, rcvd_data);
}
_ => {
println!("Parsestate: {:?}", parse_state);
}
}
使用软件包提供的示例
如果您将微控制器闪存中提供的 /examples/arduino_code/ 文件夹中的代码刷入,您就可以尝试提供的示例。
cargo run --example echo your_port
该软件包的状态
当前状态
该软件包功能齐全且经过测试,我在工作中大量使用此软件包,至今没有遇到任何问题。如果您遇到问题或有疑问,请告诉我。
未来目标
- 添加 no_std 微控制器示例
- 添加超时解析错误
no_std 使用
禁用此软件包的默认功能即可。