5个版本
0.1.5 | 2024年1月13日 |
---|---|
0.1.4 | 2023年7月14日 |
0.1.2 | 2023年1月23日 |
923 in 编码
50KB
1K SLoC
nom-teltonika,轻松解析teltonika协议
此包使用nom crate来解析二进制数据包。
功能
它解析编解码器8、8-扩展和16(即TCP/UDP协议)。
它目前**不**解析编解码器12、13和14(即GPRS协议),它**可能**在未来这样做。
如果以下任何检查失败,则解析失败
- 前缀**必须**是0x00000000
- CRC**不**匹配
- 记录计数**不**匹配
- UDP不可用字节**必须**是0x01
特性
提供了TeltonikaStream包装器,以便轻松解析传入的数据包。
以下为可选择的特性
- serde(使用serde crate进行序列化和反序列化)
- tokio(使用tokio crate的异步框架)
[dependencies]
nom-teltonika = { version = "*", features = ["serde", "tokio"] }
示例
IMEI解析
let imei_buffer = [0x00, 0x0F, 0x33, 0x35,
0x36, 0x33, 0x30, 0x37,
0x30, 0x34, 0x32, 0x34,
0x34, 0x31, 0x30, 0x31,
0x33
];
let (rest, imei) = nom_teltonika::parser::imei(&imei_buffer).unwrap();
assert_eq!(rest, &[]);
assert_eq!(imei, String::from("356307042441013"));
TCP帧解析
let buffer = [0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x36,
0x08, 0x01, 0x00, 0x00,
0x01, 0x6B, 0x40, 0xD8,
0xEA, 0x30, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x05,
0x02, 0x15, 0x03, 0x01,
0x01, 0x01, 0x42, 0x5E,
0x0F, 0x01, 0xF1, 0x00,
0x00, 0x60, 0x1A, 0x01,
0x4E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00,
0xC7, 0xCF
];
let (rest, frame) = nom_teltonika::parser::tcp_frame(&buffer).unwrap();
assert_eq!(rest, &[]);
println!("{frame:#?}");
或通过使用TeltonikaStream包装器
let mut file = std::fs::File::open("tests/test.bin").unwrap();
let mut stream = nom_teltonika::TeltonikaStream::new(file);
let frame = stream.read_frame().unwrap();
println!("{frame:#?}");
更多示例可以在示例文件夹中找到。
依赖项
~2–9MB
~68K SLoC