Crates.io | adsb_deku |
lib.rs | adsb_deku |
version | 0.7.1 |
source | src |
created_at | 2021-09-21 22:05:21.549902 |
updated_at | 2024-09-02 22:41:06.490971 |
description | Decoder for ADS-B(Automatic Depedent Surveillance-Broadcast) - written with deku |
homepage | |
repository | https://github.com/wcampbel0x2a/adsb_deku |
max_upload_size | |
id | 454635 |
size | 4,831,210 |
Minimum required rust version: 1.64
.
Add the following lines to your Cargo.toml file:
adsb_deku = "0.7.0"
DF | Name | Section |
---|---|---|
0 | Short Air-Air Surveillance | 3.1.2.8.2 |
4 | Surveillance Altitude Reply | 3.1.2.6.5 |
5 | Surveillance Identity Reply | 3.1.2.6.7 |
11 | All Call Reply | 2.1.2.5.2.2 |
16 | Long Air-Air Surveillance | 3.1.2.8.3 |
17 | Extended Squitter(ADS-B) | 3.1.2.8.6 |
18 | Extended Squitter(TIS-B) | 3.1.2.8.7 |
19 | Extended Squitter(Military) | 3.1.2.8.8 |
20 | Comm-B Altitude Reply | 3.1.2.6.6 |
21 | Comm-B Identity Reply | 3.1.2.6.8 |
24 | Comm-D | 3.1.2.7.3 |
BDS | Name | Table |
---|---|---|
(0,0) | Empty | |
(1,0) | Data Link Capability | A-2-16 |
(2,0) | Aircraft Identification | A-2-32 |
ME(Type Code) | Name |
---|---|
0 | NoPosition |
1..=4 | AircraftIdentification |
5..=8 | SurfacePosition |
9..=18 | AirbornePositionBaroAltitude |
19 | AirborneVelocity |
20..=22 | AirbornePositionGNSSAltitude |
23 | Reserved0 |
24 | SurfaceSystemStatus |
25..=27 | Reserved1 |
28 | AircraftStatus |
29 | TargetStateAndStatusInformation |
30 | AircraftOperationalCoordination |
31 | AircraftOperationStatus |
The following example shows off reading from ADS-B bytes from a demodulation server into our Frame
struct and then executing the fmt::Display
Trait for display of information.
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()
);
Build the docs(> cargo doc
), or see docs.rs for complete public API documentation.
Test data was generated using a rtl-sdr with dump1090-fa
.
> cargo test
For testing this library, you can run our app 1090
with the following options for exiting program
on missing fmt::Display
or bytes protocol decode.
> cd ../apps
> cargo r --release --bin 1090 -- --debug --disable-airplanes --panic-decode --panic-display
This library is also fuzzed, ensuring no panic when parsing from demodulated bytes.
> cargo fuzz run fuzz_target_1
> cargo +nightly fmt
Benchmarking is done against a file containing 215606
ADS-B messages: lax-messages.txt.
Quick math (215606 / 692.80)
says the average speed of decoding is ~311.21 ms
a message.
A ~3%
speedup can be gained on some systems by using RUSTFLAGS="-C target-cpu=native"
> cargo bench
lax_messsages time: [680.70 ms 692.82 ms 704.99 ms]
Derived from Aeronautical Telecommunications Volume IV: Surveillance and Collision Avoidance Systems, Fifth Edition and ICAO 9871.
no_std
supportAdd the following to your Cargo.toml
file to enable no_std
code only:
default-features = false
features = ["alloc"]