Supervises the Improv provisioning processes as a :one_for_all group.
The children are mutually dependent — the Improv manager registers and drives
the GattServer + Advert D-Bus exporters (off-loop via the Task.Supervisor)
— so a crash of any one must restart all of them together. Under the parent
Bluez supervisor's :rest_for_one, the manager (started last)
crashing would otherwise leave GattServer/Advert running: the cleartext GATT
app + advertisement would stay exported with no session timers or disarm logic.
Restarting the whole group instead drops the exporters' own rebus connections,
which makes bluetoothd auto-unregister the GATT application + advertisement,
and the manager re-evaluates connectivity from a clean slate.
Mounting contract
Improv is a consumer of the Bluez subtree, not part of it: mount this
supervisor in Bluez's extra_children: slot, appended last. Under the
Bluez parent's :rest_for_one strategy that position means a
bluetoothd/Bluez.Client restart rebuilds the whole Improv group (whose
exporters hold now-stale D-Bus registrations), while an Improv fault never
disturbs anything before it — the host's scanning/GATT or audio stacks.
The child spec's opts are also where the host passes the manager's options
(pubsub:, network_type:, ifname:, identify_fun:, device_info:, …)
and the advert branding (name_prefix: / local_name:):
{Bluez,
client: [...],
extra_children: [
{Improv.Supervisor,
[
pubsub: MyApp.PubSub,
network_type: &MyApp.Network.type/0,
name_prefix: "My Device",
identify_fun: &MyApp.Identify.blink/0,
device_info: [
firmware_name: "My Firmware",
firmware_version: "1.2.3",
hardware: "Raspberry Pi 3 Model B Plus",
device_name: "My Device 507f"
]
]}
]}
Summary
Functions
Returns a specification to start this module under a supervisor.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.