8个版本
0.4.0 | 2024年1月28日 |
---|---|
0.3.1 | 2023年8月14日 |
0.3.0 | 2021年8月11日 |
0.2.3 | 2020年4月3日 |
0.1.0 | 2019年8月20日 |
#229 in 嵌入式开发
每月60次下载
在 嵌入式传感器 中使用
67KB
1.5K SLoC
NMEA 0183 解析器。
实现了最常见的语句,如RMC、VTG、GGA、GLL、GSV、GSA。解析器不使用堆内存,只依赖于 core
。
您应使用 Parser 的 new 方法实例化,然后使用 parse_from_byte 或 parse_from_bytes 等方法。如果解析器累积了足够的数据,它将返回 ParseResult 成功或描述错误的 &str
。
您不需要进行任何预处理,例如将数据拆分为字符串或NMEA语句。
可选功能
解析器支持与Mediatek相关的PMTKSPF非标准语句。默认情况下是禁用的。如果需要,请使用“mtk”功能。
示例
如果您可以从接收器一次读取一个字节,您可以使用 parse_from_byte
use nmea0183::{Parser, ParseResult};
let nmea = b"$GPGGA,145659.00,5956.695396,N,03022.454999,E,2,07,0.6,9.0,M,18.0,M,,*62\r\n$GPGGA,,,,,,,,,,,,,,*00\r\n";
let mut parser = Parser::new();
for b in &nmea[..] {
if let Some(result) = parser.parse_from_byte(*b) {
match result {
Ok(ParseResult::GGA(Some(gga))) => { }, // Got GGA sentence
Ok(ParseResult::GGA(None)) => { }, // Got GGA sentence without valid data, receiver ok but has no solution
Ok(_) => {}, // Some other sentences..
Err(e) => { } // Got parse error
}
}
}
如果您一次从接收器读取许多字节或想要从文本文件中解析NMEA日志,您可以使用迭代器风格
use nmea0183::{Parser, ParseResult};
let nmea = b"$GPGGA,,,,,,,,,,,,,,*00\r\n$GPRMC,125504.049,A,5542.2389,N,03741.6063,E,0.06,25.82,200906,,,A*56\r\n";
let mut parser = Parser::new();
for result in parser.parse_from_bytes(&nmea[..]) {
match result {
Ok(ParseResult::RMC(Some(rmc))) => { }, // Got RMC sentence
Ok(ParseResult::GGA(None)) => { }, // Got GGA sentence without valid data, receiver ok but has no solution
Ok(_) => {}, // Some other sentences..
Err(e) => { } // Got parse error
}
}
您可以选择忽略某些语句或来源。您可以在 Parser 上设置过滤器,如下所示
use nmea0183::{Parser, ParseResult, Sentence, Source};
let parser_only_gps_gallileo = Parser::new()
.source_filter(Source::GPS | Source::Gallileo);
let parser_only_rmc_gga_gps = Parser::new()
.source_only(Source::GPS)
.sentence_filter(Sentence::RMC | Sentence::GGA);
恐慌
不应恐慌。如果是这样,请在该项目的页面上报告问题。
错误
不支持的语句 类型.
- 获取当前不支持语句。
校验和错误!
- 语句有错误的校验和,可能数据损坏。
不支持的来源!
- 未知来源,新的卫星系统启动了吗? :)
NMEA 格式错误!
- 可能数据损坏。解析器将丢弃所有累积的数据并开始寻找新的语句。
可能出现与其他协议错误相关的非常罕见的错误信息。现在的接收器大多不违反NMEA规范。