Expand description
Radio multiplexer: shares the one physical radio among multiple clients.
Today the clients are the ULCP session and the device node. The
physical radio’s [Channels] bundle has a single tx_done signal, so
completion attribution breaks the moment two clients transmit. The mux
owns the real bundle and gives every client a private virtual
[Channels] of the same type:
- TX: requests are granted one at a time (round-robin under
contention) and forwarded to the real TX queue; the real
tx_doneresult is routed to the granting client’s owntx_done, so each client sees exactly the completions for its own requests. - RX: every received frame is fanned out to every client. Dual delivery is what the ULCP spec requires — frames addressed to the device identity are processed by the device itself and independently offered to host receive filtering. A client whose RX queue is full loses that frame (the same drop policy the radio runner applies to the real queue) without stalling the others.
RX fan-out continues while a transmit is in flight; only the grant of
the next TX waits for the previous completion. The runner-side
controls (DeviceControl: settings, RSSI sampling) are single-owner
device-domain state and bypass the mux entirely.
Functions§
- radio_
mux - Run the multiplexer over the real radio
Channelsbundle.