5个版本

0.1.5 2024年1月13日
0.1.4 2023年7月14日
0.1.2 2023年1月23日

923 in 编码

MIT许可证

50KB
1K SLoC

nom-teltonika,轻松解析teltonika协议

crates.io version crates.io recent downloads docs.rs build

build status clippy

license badge repo stars

此包使用nom crate来解析二进制数据包。

功能

它解析编解码器8、8-扩展和16(即TCP/UDP协议)。

它目前**不**解析编解码器12、13和14(即GPRS协议),它**可能**在未来这样做。

如果以下任何检查失败,则解析失败

  • 前缀**必须**是0x00000000
  • CRC**不**匹配
  • 记录计数**不**匹配
  • UDP不可用字节**必须**是0x01

特性

提供了TeltonikaStream包装器,以便轻松解析传入的数据包。

以下为可选择的特性

[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