Module radio_mux

Module radio_mux 

Source
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_done result is routed to the granting client’s own tx_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 Channels bundle.