Atmo's results do not stay inside one instrument. The Era that runs Atmo shares its wind and smart vario over the CAN bus with a second-seat instrument, and sends them in two LX NMEA sentences to whatever is connected to its user port or Bluetooth. This article is for pilots setting up a two-seater and for anyone writing software that wants Atmo's numbers. For the protocol in general, start with LX NMEA sentences: a reference for developers and integrators.
Second seat: one licence, two cockpits
Atmo runs on the Era that carries the licence. That instrument publishes Atmo's current and average wind, its smart vario and its netto on the CAN bus.
A second-seat instrument on the same bus with current firmware picks them up: its own Wind page, the cyan smart-vario needle and, if ticked, the Smart vario sound all work from the front instrument's values. The SVAR navbox does not — on a second seat it reads 0.0. The second seat needs no licence of its own; it simply listens.
If the front instrument stops publishing — on the ground, before Atmo has settled after takeoff, or when the bus is disconnected — the second seat's values go blank after about three seconds rather than freeze on an old number.
On the wire: two sentences
Atmo's values travel in two sentences of the $LXBC broadcast family. Both are LX-specific: an app that does not know them ignores them and keeps working from the standard sentences, which are unchanged.
| Sentence | Carries | Rate | Switched on by |
|---|---|---|---|
$LXBC,FUSION | Netto, smart vario, current and average wind, confidence, status | About once a second, with each LXWP block — not configurable | LXWPx output under Setup › NMEA, on an instrument running Atmo |
$LXBC,FAST | IAS, TAS, altitude, vario, netto, smart vario, SC/vario mode | Up to 10 Hz | LXBC output under Setup › NMEA, plus your software on every connection — off by default |
$LXBC,FUSION
$LXBC,FUSION,<netto>,<smart_vario>,<wind_dir>,<wind_speed>,<avg_dir>,<avg_speed>,<confidence>,<status>*CS
$LXBC,FUSION,0.42,0.55,245,3.4,251,2.9,0.87,18103*14
$LXBC,FUSION,,,,,,,0.00,434002*2E| Field | Unit | Notes |
|---|---|---|
netto | m/s | Vertical motion of the airmass, up positive |
smart_vario | m/s | The smart vario — the same value as the cyan needle |
wind_dir, avg_dir | degrees | Direction the wind blows from, current and average |
wind_speed, avg_speed | m/s | Current and average wind speed |
confidence | 0.0–1.0 | How sure Atmo is of its wind solution; 0.00 whenever it is not flying |
status | hex word | The low byte is the solution state: 0 not started, 1 initial alignment, 2 converging, 3 locked, 4 degraded (a key sensor missing). The bits above it are flags, so a locked instrument sends something like 18103, never a bare 3 |
The value fields are empty unless the low byte of status is 3. The second example is a valid sentence from an instrument on the ground: state 02, confidence 0.00, no values. Mask the low byte of status before comparing it, and treat empty fields as no value, never as zero.
There is no request for this sentence: it simply arrives with the LXWP block.
$LXBC,FAST
$LXBC,FAST,<ias_kmh>,<tas_kmh>,<alt_m>,<vario>,<netto>,<smart_vario>,<sc_mode>*CS
$LXBC,FAST,102.4,108.9,1043.2,-0.45,0.82,0.31,0*02FAST is the instrument's high-rate flight-data sentence, not an Atmo sentence as such: IAS and TAS in km/h, altitude in metres, and the classic vario and netto in m/s. Its smart_vario field is Atmo's smart vario and is empty unless Atmo is locked. FAST needs the LXBC output enabled, is off by default, and its interval is forgotten at every power cycle, so your software enables it on each connection:
$LXDT,SET,BC_INT,FAST,0.1*640.1 seconds is the 10 Hz ceiling. Firmware without FAST accepts the request but never sends the sentence; detect support by reading the intervals back with $LXDT,GET,BC_INT and looking for the FAST pair in the answer.
What a standard app sees
XCSoar, SeeYou Navigator and other flight apps that read the standard LX sentences keep receiving the instrument's classic vario and wind exactly as before. They show Atmo's values only if they read $LXBC,FUSION or $LXBC,FAST. If you maintain such an app and want to add them, the tables above are all you need — and we are glad to help: talk to us.
Checklist for integrators
- Parse
statusfirst: mask its low byte for the solution state, and accept empty value fields. - Expect
FUSIONabout once a second; useFASTfor anything that needs the vario at a high rate. - Re-send
SET,BC_INTforFASTafter every reconnect and every power cycle. - Units differ between the sentences:
FUSIONwind speeds are m/s,FASTairspeeds km/h; varios are m/s, up positive; directions are from. Convert for display, never in the parser. - Accept upper- and lower-case hex in checksums.
- Locked means Atmo's solution has converged, not that it is exact. Use the confidence field, and remember that its straight-flight wind can drift on long, smooth glides.