For the ADS-L registry

skyBlip applies for AMT entry 58, and for the exception OGN-Tracker has.

skyBlip builds open-source electronic conspicuity equipment for general aviation. The devices transmit and receive ADS-L 4 SRD-860 air-to-air, receive the ADS-L traffic uplink from ground stations, and receive FLARM-generation traffic. Under ADS-L.4.SRD860.F.2.2 we apply for entry 58 of the Address Mapping Table, manufacturers page 49, and we ask that it carry the whole 24-bit address with no manufacturer prefix, exactly as entry 7 carries OGN-Tracker addresses. A skyBlip would then mint its address inside a space that is ours, whether it was shipped by us or built by its owner.

This page is what accompanies the application to registry@ads-l.aero: who is applying, what the equipment does on the air, why the manufacturer prefix of F.2.2 does not fit this fleet, and one question we would like the registry’s view on.

Where it stands

Manufacturer page 49, AMT entry 58, prefix 0, assigned on 5 October 2026.

The registry gave skyBlip manufacturer page 49, which is AMT entry 58, and manufacturer prefix 0 inside it. The assignment carries a prefix, so it is the structured scheme of F.2.2 rather than the flat 24-bit space we applied for: the 16 bits below the prefix are ours to fill densely, one per unit. The application below is as we sent it on 20 September 2026.

Who we dealt with

ContactRole
ADS-L registry, registry@ads-l.aeroreceives applications, run by FLARM’s helpdesk, ticket #228794
FLARManswered for the registry, took the application to EASA, issued the assignment
EASAdecided on the application, sets the requirements on manufacturers

Log

DateWithEvent
20 Sep 2026 ADS-L registry Application sent: one AMT entry, 58, flat over 24 bits.
2 Oct 2026 FLARM, EASA Meeting on the application. A manufacturer issues a declaration of conformity for its equipment.
5 Oct 2026 FLARM AMT entry 58 assigned: manufacturer page 49, manufacturer prefix 0.

Who is applying

An open-source project, built against the published specification.

ApplicantFrançois Catuhe, France — skyBlip
Siteskyblip.eu
Sourcesgithub.com/fcatuhe/skyblip — firmware GPL-3.0-only
Specification implementedADS-L 4 SRD-860 Issue 2, ED Decision 2022/024/R

The firmware is public, so every claim below can be read rather than trusted: the address logic is one file, core/settings/address.cpp, and the wire format another, core/protocol/adsl.cpp. The host test suite generates a behavior index, docs/BEHAVIOR.md, which lists what the firmware is checked to do and is regenerated from the tests themselves. Conformance has a suite of its own, below.

The equipment

Two airborne devices, two ground stations, one radio design.

DeviceTransmitsReceivesStatus
skyBlip Go ADS-L Traffic, M-band ADS-L Traffic, ADS-L Traffic Uplink, FLARM-generation traffic flying, firmware published
skyBlip Panel ADS-L Traffic, M-band as above, output to the panel display over RS-232, Bluetooth and WiFi in development
skyPost Helio ADS-L Traffic Uplink, O-band HDR ADS-L, FLARM-generation traffic, ADS-B 1090 in development
skyPost Bridge ADS-L Traffic Uplink, O-band HDR from an existing receiving station (OGN, PiAware) in development

FLARM-generation traffic is decoded and shown to the pilot. It is never re-transmitted: an airborne skyBlip transmits its own position and nothing else, and the uplink is a ground station function.

On the air

M-band channels868.2 and 868.4 MHz, alternating by UTC second (§C.2, §C.2.5)
O-band HDR869.525 MHz, uplink slot (§C.4, §C.5)
Transmit power+14 dBm e.r.p., the ERC 70-03 band h1.4 and EN 300 220 ceiling
Duty cycle1 % of any hour, metered on the device; one 5 ms burst per second is about half of it
Transmitted payloadTraffic (type 2), 1 Hz airborne, 0.1 Hz on the ground (§G.1.16)
Receive dwells400 ms on each M-band channel and 190 ms on the uplink slot, one SX1262; M-band receive is declared Partial under §G.2.2, a single radio cannot hold both channels at once
Design assurancenone claimed: the payload carries DAL 0

Conformance

The specification is a test suite here, read clause by clause.

Issue 2 has 80 numbered clauses. firmware/test/adsl/ holds at least one case for each of them, named after the clause it reads, and scripts/check_adsl_clauses.py fails the build if a clause has no case or if a case names a clause the document does not contain. Where the specification prints an algorithm or a worked example, the case carries the document’s own version of it rather than restating ours: E.2’s XXTEA, E.3.1’s CRC-24, G.1.6’s exponential encoder and the example tables of G.1.7 to G.1.9.

104 cases, of which 64 run and pass and 40 are skipped. A skipped case is written as the clause requires it and skipped over a one-line note saying why, so what this device does not do is a list rather than a silence. Fourteen of the skips are clauses with nothing executable in them, such as the block diagram and the OSI table, and two are duties of the manufacturer rather than of the device. The rest is the honest part:

ClauseWhat is missing, and why
G.2, G.2.1 to G.2.11 — Status payload not transmitted. It is the next protocol work, and soft versioning (B.5) waits on it.
C.3 to C.3.2 — O-band LDR not received. One radio, and the second is already spent on the two M-band channels and the O-band HDR uplink slot.
E.4 to E.4.2 — secure signature no Ed25519 key is held, generated or transmitted.
G.4, G.5 — FIS-B and Remote Identification neither received nor sent. RID is a UAV payload this aircraft device has no use for.
D.3 — media access a deliberate deviation, not an omission: no listen-before-talk. The burst instant is drawn at random inside the slot and re-keyed every second, and the 1 % hourly duty cycle is the channel-access route. The argument is written out in core/timing/README.md, and none of the reference implementations cancels a burst either.
G.1.17 — quality indicators this firmware transmits SIL 1 and a DOP-derived NIC, which was the Issue 1 reading. Issue 2 asks an uncertified device with no protection bound for 0 in both. Being aligned.

The whole list, with the note on every skip, is the suite’s own output: build/skyblip_tests --no-skip --test-case="ADS-L*".

The address

What we do today, and what an entry would change.

Today a skyBlip has no range to draw from, so it mints its own: the 24-bit address is derived from the MCU serial number and transmitted under an AMT entry in the self-minted group, 0 to 4. Because that space is shared with every other tracker that derives its identity the same way, the device moves off the prefixes known to be crowded — 0xD0, 0xDD to 0xDF and 0x11 — and refuses the two addresses that mean “none” and “dead SPI read”, 0x000000 and 0xFFFFFF.

F.2.2 offers a manufacturer a page of the AMT and an 8-bit prefix inside it, and asks that the remaining 16 bits be filled densely. That shape assumes a production line: someone issues address n+1 to the next unit and writes it down. This firmware is GPL-3.0 and builds from source, so a share of the fleet is assembled by its owner, flashed at a kitchen table, and passes through no counter we could run. Such a device mints its address the only way an offline device can, from the MCU serial number, and 16 bits are too few to absorb that: derived addresses collide at even odds by about 300 devices.

So the application is for one AMT entry with the structuring of F.2.2 waived: 6 bits of AMT and 24 bits of address, no 8-bit prefix in between. We are asking for a deviation and say so plainly, but it is one the table already grants three times over. Entries 6, 7 and 8 are flat 24-bit spaces, and OGN-Tracker at entry 7 is a fleet of exactly this shape: devices built rather than bought, each deriving its identity locally, with a public database resolving who is who. Assigned that way, the entry costs the table one page out of 55 and ends the guesswork for every skyBlip ever built, not only for the ones we ship.

The entry we ask for is 58, manufacturers page 49, for one reason only: 58 reads as SB. It is the single piece of vanity in this application and the registry should overrule it without hesitation, since a page issued out of order is a favour and the exception above is the part that matters. Any entry in 9 to 63 works for us.

A 24-bit space does not make collisions impossible either. It makes them rare enough to settle one at a time: about 4,800 derived addresses before even odds of a single colliding pair. What settles them is a register, which is the first of the two answers in the question below.

One question

Where does an aircraft’s callsign go?

In VFR the identity everyone uses — the pilot on the radio, the club, the EFB, the field — is the registration: F-GXXX on a certified aircraft, an F-J callsign on a French microlight. It belongs to the aircraft for its life. It is not a per-flight item like an airline flight number, and a receiver that could show it would be showing the traffic the way a pilot already thinks about it.

We think this matters in the air rather than on paper. A pilot hears “F-JABC, joining downwind for 25” on the frequency, and what turns that call into an aircraft he can look for is a display showing the same callsign on the target: the radio tells him who, the screen tells him where, and only the callsign joins the two. Without it he has a call on one side and an anonymous return on the other, and traffic a pilot cannot correlate is traffic he ends up looking for in the wrong part of the sky.

Issue 2 carries no field for it. The Traffic payload (G.1) has none, the Status payload (G.2) has none, and the only identity on the air is the 30-bit sender address of F.2.2: 6 bits of AMT and 24 bits of address. That address is ours rather than the aircraft’s, and nothing in the frame ties it to the registration on the fuselage. The aircraft this equipment addresses are the ones carrying no other identity on the air: a French microlight, a paraglider, a paramotor.

So we would like the registry’s view on which of the two answers it intends, because we would rather implement the one that becomes the standard:

AnswerWhat it would take
A published address-to-registration database the way the OGN device database resolves FLARM and OGN addresses today. We would publish our assigned range, let owners bind their address to their registration, and expose the mapping under an open license.
A callsign payload a low-rate broadcast payload carrying the registration, transmitted every few seconds rather than every second. A new payload type has to be approved by the governing body (F.2.5), which is why this is a question to the registry and not a proposal we would ship on our own.

Either is a small amount of work here. Neither is worth doing twice, and a manufacturer that invents its own answer is how a standard stops being one.

References

skyBlip  ·  Food for thought