Skip to content

imx93-jaguar-eink: BLE advertising 'ghost/on-air starvation' after long Wi-Fi uptime (BlueZ reports active but undiscoverable) #42

Description

@ajlennon

Summary

On eink-0167 (eink factory target 25 + PR #38 watchdog), after ~3h of Wi-Fi-connected uptime the board became undiscoverable over BLE from the lab host, while BlueZ still reported ActiveInstances=1. A systemctl restart improv immediately restored a fresh, discoverable advertisement.

This is an on-air / "ghost advertising" state: the advertisement is registered (so is_advertising() looks healthy) but nothing is actually radiating. The current watchdog (PR #38) only recovers from registration drops / stack wedges (ActiveInstances==0 or unresponsive D-Bus), so it cannot detect or recover this case.

Evidence

  • Reproduced once at ~3h uptime, Wi-Fi connected. ActiveInstances=1, improv.service healthy, no errors in journal; XPS scanner saw nothing until a service restart.
  • Earlier 48-min soak (Wi-Fi on, idle + saturated, both bands, serial-driven) was 24/24 discoverable, 0 misses — so this is a long-uptime effect, not reproducible in short runs.
  • With Wi-Fi OFF, advertising has been 100% reliable over long soaks (primary fresh-onboarding path is unaffected). Points at Wi-Fi/BT coexistence on the shared IW612 radio (shared-antenna topology) as a contributing factor, though the ghost state has also been seen around aborted BLE connects / fresh boot with Wi-Fi off.

Impact

Affects re-onboarding an already-provisioned board (Wi-Fi up). Fresh factory onboarding (Wi-Fi off) is unaffected. Onboarding must never depend on a manual restart, so this needs a self-healing fix.

Mitigation in progress

A parallel "ghost-advertising bounce" (ADVERT_BOUNCE_SECS, default 60s) is WIP on the chore/layer-tidy branch: it periodically re-asserts (unregister + re-register) the advertisement even while BlueZ reports it active, since ActiveInstances can't tell us whether the advert is truly radiating. A bounce is a sub-second re-register gap, skipped whenever a central is mid-session. This needs to be reconciled with PR #38's Bugbot-fixed watchdog (the two watchdog lines have diverged) and then soak-tested at multi-hour uptime.

Follow-ups

Related: meta-dynamicdevices PR #38 (watchdog), PR #41 (Device-Status superset).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions