12个版本 (6个破坏性版本)
0.7.0 | 2023年11月23日 |
---|---|
0.6.3 | 2023年2月4日 |
0.6.2 | 2022年12月30日 |
0.6.1 | 2022年9月11日 |
0.3.0 | 2021年10月31日 |
#536 in 解析器实现
每月274次下载
在rsadsb_common中使用
1MB
2K SLoC
adsb_deku库
最低要求的rust版本:1.64
。
将以下行添加到您的Cargo.toml文件中
adsb_deku = "0.7.0"
支持
下链格式支持
DF | 名称 | 部分 |
---|---|---|
0 | 短程空对空监视 | 3.1.2.8.2 |
4 | 监视高度应答 | 3.1.2.6.5 |
5 | 监视身份应答 | 3.1.2.6.7 |
11 | 所有呼叫应答 | 2.1.2.5.2.2 |
16 | 长程空对空监视 | 3.1.2.8.3 |
17 | 扩展squitter(ADS-B) | 3.1.2.8.6 |
18 | 扩展squitter(TIS-B) | 3.1.2.8.7 |
19 | 扩展squitter(军事) | 3.1.2.8.8 |
20 | Comm-B高度应答 | 3.1.2.6.6 |
21 | Comm-B身份应答 | 3.1.2.6.8 |
24 | Comm-D | 3.1.2.7.3 |
Comm-B支持
BDS | 名称 | 表格 |
---|---|---|
(0,0) | 空 | |
(1,0) | 数据链路能力 | A-2-16 |
(2,0) | 飞机识别 | A-2-32 |
ADS-B消息的ME支持
ME(类型代码) | 名称 |
---|---|
0 | 无位置 |
1..=4 | 飞机识别 |
5..=8 | 表面位置 |
9..=18 | 机载位置巴洛高度 |
19 | 机载速度 |
20..=22 | 机载位置GNSS高度 |
23 | 保留0 |
24 | 表面系统状态 |
25..=27 | 保留1 |
28 | 飞机状态 |
29 | 目标状态和状态信息 |
30 | 飞机操作协调 |
31 | 飞机操作状态 |
示例
以下示例展示了从解调服务器读取ADS-B字节到我们的Frame
结构体,然后执行fmt::Display
特性以显示信息。
use hexlit::hex;
use adsb_deku::Frame;
use adsb_deku::deku::DekuContainerRead;
let bytes = hex!("8da2c1bd587ba2adb31799cb802b");
let frame = Frame::from_bytes((&bytes, 0)).unwrap().1;
assert_eq!(
r#" Extended Squitter Airborne position (barometric altitude)
Address: a2c1bd (Mode S / ADS-B)
Air/Ground: airborne
Altitude: 23650 ft barometric
CPR type: Airborne
CPR odd flag: even
CPR latitude: (87769)
CPR longitude: (71577)
"#,
frame.to_string()
);
构建文档(> cargo doc
),或查看docs.rs以获取完整的公共API文档。
贡献
测试
测试数据使用具有dump1090-fa
的rtl-sdr生成。
> cargo test
为了测试此库,您可以使用以下选项运行我们的应用程序1090
以退出程序:在缺少fmt::Display
或字节协议解码时。
> cd ../apps
> cargo r --release --bin 1090 -- --debug --disable-airplanes --panic-decode --panic-display
此库也已进行模糊测试,确保在解析解调字节时不会崩溃。
> cargo fuzz run fuzz_target_1
fmt
> cargo +nightly fmt
基准
基准测试是针对包含 215606
条 ADS-B 消息的文件进行的: lax-messages.txt。快速计算 (215606 / 692.80)
得出平均解码速度为每条消息 ~311.21 毫秒
。通过使用 RUSTFLAGS="-C target-cpu=native"
,某些系统可以提升约 ~3%
的速度。
> cargo bench
lax_messsages time: [680.70 ms 692.82 ms 704.99 ms]
推导
源自第五版《航空电信卷 IV:监视与避碰系统》和 ICAO 9871。
no_std
支持
要将以下内容添加到您的 Cargo.toml
文件中,以仅启用 no_std
代码
default-features = false
features = ["alloc"]
依赖项
~3.5MB
~84K SLoC