RadAirFIELD NOTE
Field note

A USB Wi-Fi card on a Mac, with no driver.

RadAir now drives an ALFA AWUS036AXML — a MediaTek MT7921AU Wi-Fi and Bluetooth card — directly from its own process. The card listens in monitor mode and never transmits. This note says what that took, what it changes for the console, what it heard in one office test, and what has not been verified.

4 October 2026 · tested on one adapter and one Apple Silicon Mac

What was done

macOS has no driver for this chip, and RadAir does not need one. A helper bundled with the application claims the card as a plain USB device over libusb, uploads the chip's firmware, and talks to it directly. No kernel extension, no DriverKit, no virtual machine, no root. The control sequences are ported from the Linux mt76 and btmtk drivers. The firmware is MediaTek's and is fetched separately; RadAir does not ship it.

The card has two halves, and both are driven. The WLAN half runs in monitor mode, receive only. The Bluetooth half is brought up the same way — firmware download, enable, then ordinary HCI — and reports itself as Bluetooth 5.3 with LE Coded PHY.

Signal path: the USB card's Wi-Fi and Bluetooth halves feed a userspace helper, which feeds RadAir's Wi-Fi observations and its Remote ID decoderUSB CARD · MT7921AU · 0e8d:7961WLAN HALFmonitor mode, receive only2.4 GHz · 5 GHz · 20 MHzBLUETOOTH HALFpassive extended LE scan1M + Coded (Long Range)USBUSBUSERSPACE HELPERbundled helper · libusbfirmware upload, HCIno kext · no DriverKitno VM · no rootWI-FI OBSERVATIONSaccess points, own channelSSID · BSSID · RSSI · PHYREMOTE ID · 3 OF 4 PATHSWi-Fi Beacon · Wi-Fi NANBLE Long Range4TH PATH: BLE LEGACY, THE MAC'S OWN BLUETOOTH · ONE DECODER, ONE TRACKERSignal path: the USB card's Wi-Fi and Bluetooth halves feed a userspace helper, which feeds RadAir's Wi-Fi observations and its Remote ID decoderUSB CARD · MT7921AU · 0e8d:7961WLAN HALFmonitor mode, receive only2.4 GHz · 5 GHz · 20 MHzBLUETOOTH HALFpassive extended LE scan1M + Coded (Long Range)USBUSERSPACE HELPERbundled helper · libusbfirmware upload, HCIno kext · no DriverKitno VM · no rootWI-FI OBSERVATIONSaccess points, own channelSSID · BSSID · RSSI · PHYREMOTE ID · 3 OF 4 PATHSWi-Fi Beacon · Wi-Fi NANBLE Long Range4TH PATH: BLE LEGACY, THE MAC'S OWNBLUETOOTH · ONE DECODER, ONE TRACKER
What talks to what. The card's two halves share one USB connection to a helper in user space, which hands RadAir access points and Remote ID frames. Schematic.

What the card hears

The Wi-Fi half sweeps all 13 channels of 2.4 GHz and 24 channels of 5 GHz at 20 MHz, 250 ms on each. One full pass takes about 20 s, and roughly half of that is the chip switching channels rather than listening. Each access point is reported from its own channel, as announced in its beacon, with its SSID — hidden networks are kept, as hidden — BSSID, a level from the chip's RCPI, security and PHY generation. The observations land in the same session journal, map and tables as the built-in card's, marked with the receiver that heard them.

The Bluetooth half runs a passive extended LE scan on the 1M and Coded (Long Range) PHYs, alongside the Wi-Fi sweep without slowing it. In the office it collected 273 advertising reports from 17 devices in 15 s, none of them on Coded PHY. Ordinary BLE devices from the card are deliberately not added as observations — the Mac's own Bluetooth already lists them. The card's Bluetooth is there for Remote ID and Long Range.

One sweep pass: 13 channels of 2.4 GHz and 24 of 5 GHz at 250 ms each, plus three extra visits to channel 6 for NAN discovery — 40 dwells, about 22 seconds including channel switchingONE PASS · 40 DWELLS × 250 MS · ≈22 S WITH SWITCHING2.4 GHZ · 13 CH5 GHZ · 24 CHCH 6 AGAIN · NAN · ×3One sweep pass: 13 channels of 2.4 GHz and 24 of 5 GHz at 250 ms each, plus three extra visits to channel 6 for NAN discovery — 40 dwells, about 22 seconds including channel switchingONE PASS · 40 DWELLS × 250 MS · ≈22 S WITH SWITCHING2.4 GHZ · 13 CH5 GHZ · 24 CHCH 6 AGAIN · NAN · ×3
One pass with Remote ID over NAN enabled: 37 channels plus three extra visits to channel 6, 40 dwells, about 22 s. The position of the revisits within the pass is drawn schematically. A given network is heard once per pass, so a beacon that comes and goes between visits can be missed.

Why it matters for RadAir

The console can now listen without transmitting on Wi-Fi. The built-in card scans through CoreWLAN, and every such scan sends probe requests and briefly interrupts the Mac's own Wi-Fi link. With the USB card running, RadAir pauses the built-in scan by default — always, only when the card is not running, or never, as the operator chooses — and the pause is written into the journal as a stop, not a gap.

It also reaches more of the 2.4 and 5 GHz layer. This is protocol-level reception — decoded frames, not spectrum energy — so it complements the RTL-SDR, whose tuner stops at 1.766 GHz, without replacing what a wideband receiver would do there. An analogue video link or a non-Wi-Fi control link on 2.4 or 5.8 GHz is still out of reach.

And Remote ID now arrives on four transports instead of one: BLE legacy advertising through the Mac's Bluetooth as before, and through the card Wi-Fi Beacon, Wi-Fi NAN service discovery and Bluetooth 5 Long Range advertising. NAN discovery lives on channel 6, which is why the sweep goes back there three extra times per pass. All four paths feed one decoder and one tracker. None of them has yet received a real Remote ID transmitter — they are exercised against synthetic frames in the test suite, and no drone broadcasting Remote ID has been in range.

Measured in the office

Same place, same two minutes, the USB card with a small stock antenna — the two-lead dual-band antenna that ships with desktop motherboards, on both of the card's connectors — against the MacBook's built-in Wi-Fi through CoreWLAN. An earlier version of this note said the card had no antenna; it had this one. Levels are as each chip reports them, uncalibrated.

USB card, small stock antennaBuilt-in Wi-Fi
BSSIDs heard2416
Heard by both16 — every BSSID the built-in card heard
Heard only by this receiver8 — among them 4 hidden BSSIDs of a mesh at −37 to −75 dBm and 4 networks at −98 to −100 dBm0
Median level, card − built-in−1.5 dB on 2.4 GHz · −0.5 dB on 5 GHz, over the shared BSSIDs
Transmits while scanningNothingProbe requests on every scan

One built-in reading was excluded: −47 dBm for a BSSID whose sibling BSSIDs read −74, which is the Mac reporting its own association link rather than a beacon. One room and one pair of receivers is a comparison, not a characterisation.

Comparing antennas

A small stock antenna is a floor, not a configuration. A first try with a better antenna on a single lead showed why the comparison has to be like for like: the card has two receive chains, and an antenna on one of them gives up the second chain. RadAir now has a built-in antenna test: N full sweeps per antenna set while parked, compared network by network on the networks both runs heard, as a median of B − A per band. An optional repeat of the first set measures how much the same set drifts on its own; a difference within that drift, or within 1 dB, is reported as no difference. Under five shared networks there is no verdict, and a run that moved more than 30 m is flagged. It has not yet been used in the field.

What is not verified yet

← Capability sheet