#ads-b #deku #雷达 #协议 #aerorust #飞机

无std adsb_deku

ADS-B(自动相关监视广播)解码器 - 使用deku编写

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 解析器实现

Download history 202/week @ 2024-04-22 14/week @ 2024-04-29 13/week @ 2024-05-06 74/week @ 2024-05-13 83/week @ 2024-05-20 8/week @ 2024-05-27 20/week @ 2024-06-03 19/week @ 2024-06-10 29/week @ 2024-06-17 29/week @ 2024-06-24 79/week @ 2024-07-01 118/week @ 2024-07-08 74/week @ 2024-07-15 32/week @ 2024-07-22 127/week @ 2024-07-29 41/week @ 2024-08-05

每月274次下载
rsadsb_common中使用

MIT许可证

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