Food for thought, for the ADS-L registry
What the air carries, a display could read as it is.
A display reads ADS-L traffic today through FLARM’s
$PFLAA, a sentence designed for another protocol. This page
sketches three NMEA 0183 sentences that carry the Traffic payload of
ADS-L.4.SRD860.G.1 field for field instead:
$PADSL for traffic,
$PADSI for identity and
$PADSO for ownship.
It is not part of the application for an address range,
and it asks for nothing. skyBlip would send these sentences beside
$PFLAA, never instead of it, to a display that asks for them.
We publish the sketch because a display format is only worth having if it
is the same for every ADS-L device, and that is a question for the
specification’s owners rather than for one of its implementers.
Why not $PFLAA
Most of the Traffic payload has no field to go in.
skyBlip sends $PFLAA, as every FLARM-compatible device does,
and it is the traffic sentence an EFB with an NMEA input reads. This is what the Traffic
payload loses on the way:
| On the air | In $PFLAA |
|---|---|
| 64 AMT entries (F.2.2) | an ID type of 1 (ICAO) or 2 (FLARM), so entry 7 and entry 58 both read as FLARM |
| 18 aircraft categories (G.1.3) | 16 FLARM types, some ADS-L categories merged |
| Flight state, emergency status (G.1.2, G.1.4) | no field |
| SIL, DA, NIC, HPA, VPA, VA (G.1.11 to G.1.16) | no field |
| Absolute position, altitude above the ellipsoid (G.1.5, G.1.7) | metres north, east and up from the receiving aircraft |
The three sentences
One for what moves, one for what does not, one for ourselves.
| Sentence | Carries | Sent |
|---|---|---|
$PADSL |
a target’s Traffic payload: address, state, position and motion | every second for each target |
$PADSI |
an address’s quality indicators and callsign, for traffic and for ownship alike | every few seconds for each address |
$PADSO |
which address is ownship, its aircraft category and its emergency status | when a display subscribes, then every minute; every second while an emergency is declared |
Ownship’s position already reaches the display in
$GPRMC and $GPGGA, so $PADSO carries
none. What it adds is the address, so a display can tell its own
$PADSI from a neighbour’s, and the two fields a pilot
sets rather than flies. Emergency status is the one of them a display must
show at once, which is why a declared emergency (G.1.4 values 2 to 6)
brings $PADSO to the rate of a target.
Collision alerting stays in $PFLAU. ADS-L defines none, so
there is nothing on the air for a sentence of this family to mirror, and
FLARM’s ICD already tells every display to take its alarms from
$PFLAU. A display that reads $PADSL finds the
threat by its address.
The fields
The order of G.1, decoded into plain units.
The decimals are chosen so that every value converts back to the exact bits it was decoded from. Rounding to five places of a degree moves a position by less than half a step of G.1.5, and rounding to one place moves a speed, a vertical rate or a track by less than half the smallest step of G.1.8 to G.1.10. A table field keeps the specification’s own value for “undefined”. A number with no valid value is left empty, as NMEA does.
$PADSL | Field | Clause | Written as |
|---|---|---|---|
| 1 | Address Mapping Table | F.2.2 | 0 to 63 |
| 2 | Address | F.2.2 | 6 hex digits |
| 3 | Relay/forward | F.2 | 0 or 1 |
| 4 | Timestamp | G.1.1 | seconds, 0.00 to 14.75 in quarters |
| 5 | Flight state | G.1.2 | table value |
| 6 | Aircraft category | G.1.3 | table value |
| 7 | Emergency status | G.1.4 | table value |
| 8 | Latitude | G.1.5 | degrees, 5 places, north positive |
| 9 | Longitude | G.1.5 | degrees, 5 places, east positive |
| 10 | Ground speed | G.1.8 | m/s, 1 place |
| 11 | Altitude above WGS-84 ellipsoid | G.1.7 | m |
| 12 | Vertical rate | G.1.9 | m/s, 1 place, climb positive |
| 13 | Ground track | G.1.10 | degrees true, 1 place |
$PADSI | Field | Clause | Written as |
|---|---|---|---|
| 1, 2 | AMT and address | F.2.2 | as in $PADSL |
| 3 to 8 | SIL, DA, NIC, HPA, VPA, VA | G.1.11 to G.1.16 | table values |
| 9 | Callsign | none | up to 14 characters: blank, dash, A to Z, 0 to 9 |
$PADSO | Field | Clause | Written as |
|---|---|---|---|
| 1, 2 | AMT and address | F.2.2 | as in $PADSL |
| 3 | Aircraft category | G.1.3 | table value |
| 4 | Emergency status | G.1.4 | table value |
The callsign is the one field with no clause behind it, which is the question the application asks seen from the display’s side. Today skyBlip fills it from the OGN-Tracker record of payload type 66 when one is heard, and it would fill it from whichever answer the registry settles on.
Examples
Three aircraft, and ourselves.
| Example | Sentence |
|---|---|
| skyBlip glider, climbing | $PADSL,58,3A0012,0,7.25,2,4,1,45.21468,5.84731,31.5,1842,2.4,273.5*24 |
| its identity | $PADSI,58,3A0012,0,0,0,6,2,2,F-CGXY*77 |
| OGN paraglider | $PADSL,7,DD4F21,0,7.50,2,7,0,45.19832,5.80115,9.8,1523,-1.1,118.1*0F |
| its identity, nothing known | $PADSI,7,DD4F21,0,0,0,0,0,0,*25 |
| ICAO aircraft on the ground, relayed | $PADSL,5,3C6589,1,14.75,1,1,1,45.36294,5.32906,0.0,402,0.0,211.6*24 |
| its identity | $PADSI,5,3C6589,3,2,9,5,2,2,D-EABC*45 |
| ownship, a glider | $PADSO,58,3A0012,4,1*30 |
| ownship, emergency declared | $PADSO,58,3A0012,4,2*33 |
Length and growth
Inside NMEA’s 82 characters, with room where it is needed.
| Sentence | Typical | Widest the field ranges permit |
|---|---|---|
$PADSL | about 70 | 82 |
$PADSI | about 40 | 49, with a 14-character callsign |
$PADSO | 25 | 26 |
NMEA 0183 allows a sentence 82 characters, CR and LF included, and all
three fit. $PADSL fits exactly: the widest one the field
ranges permit is 82, so its next version would be a new sentence rather
than a new field.
$PADSI and $PADSO would grow the way
$PFLAA grew, which gained its NoTrack, Source and RSSI fields
at the end, one data port version at a time, without breaking a display
that stopped reading before them. The Status payload of G.2 is the obvious
next set: appended to $PADSI after the callsign, its ten fields
bring the widest sentence to 72.
A stretch goal
An NMEA code that belongs to ADS-L.
A proprietary NMEA sentence is $P followed by a three-letter
manufacturer code, and NMEA assigns the codes. FLARM holds FLA, which is
where $PFLAA comes from. OGN-Tracker’s
$POGNT and SoftRF’s $PSRFC were never
registered, and SRF is SiRF’s. ADS was not a manufacturer code in
the 2013 list we could read, only the name of a standard sentence, and the
live register sits behind a login.
NMEA issues codes to companies only, for a $200 fee and the purchase of the NMEA 0183 standard, which a non-marine company pays $7,500 or $10,000 for. That is a cost for whoever holds the specification rather than for one of its implementers. If the registry, or the working group behind Issue 2, ever held ADS, these sentences would belong to ADS-L instead of to us, and we would hand them over unchanged.
We are not asking for that. The names are a suggestion of where the sentences could end up, and skyBlip would ship them as described here either way.
References
- EASA · ADS-L 4 SRD-860, ED Decision 2022/024/R, Issue 2. F.2 header and sender address, G.1 Traffic, G.2 Status.
-
FLARM ·
Data Port Interface Control Document,
FTD-012, version 7.19.
$PFLAA,$PFLAU, and the FLA manufacturer code. - NMEA · NMEA 0183. The 82-character sentence, proprietary sentences, and how manufacturer codes are assigned.