rmk-config 0.7.0

Config crate of RMK
Documentation
# Feature-based event subscriber declarations.
#
# When all `features` listed in an entry are enabled (checked via
# CARGO_FEATURE_* env vars at build time), each event's `subs` is
# bumped by the specified amount.
#
# This keeps event_default.toml at base counts and avoids wasting
# static memory when a feature is disabled.
#
# Format per event: { name = "event_name", count = N }
# `count` defaults to 1 if omitted.

# --- Display-gated internal subscribers ---

[[subscriber]]
features = ["display"]
events = [
    # display/mod.rs: DisplayProcessor subscribes to these events
    { name = "wpm_update" },
    { name = "modifier" },
    { name = "sleep_state" },
    { name = "layer_change" },
    { name = "battery_status" },
    { name = "led_indicator" },
]

[[subscriber]]
features = ["display", "_ble"]
events = [
    # display/mod.rs: DisplayProcessor subscribes when _ble is enabled
    { name = "connection_status_change" },
]

[[subscriber]]
features = ["display", "split"]
events = [
    # split/driver.rs: each PeripheralManager subscribes when display is enabled
    # (gated on #[cfg(feature = "display")] in driver.rs)
    # Covers up to 2 peripherals; for 3+ peripherals override subs in keyboard.toml
    { name = "wpm_update", count = 2 },
    { name = "sleep_state", count = 2 },
]

# --- BLE-gated internal subscribers ---

[[subscriber]]
features = ["_ble"]
events = [
    # ble/battery_service.rs: BatteryStatusEvent::subscriber()
    # processor/builtin/battery_led.rs: subscribe = [BatteryStatusEvent] (user-optional but _ble-gated)
    { name = "battery_status", count = 2 },
    # ble/mod.rs: KeyboardEvent/PointingEvent wake subscribers, created when
    # advertising times out. Without a reserved slot they panic on boards whose
    # permanent subscribers already fill the base count.
    { name = "keyboard" },
    { name = "pointing" },
]

# Rynk sessions subscribe to these topics; USB+BLE boards need two slots.

[[subscriber]]
features = ["rynk"]
events = [
    { name = "layer_change" },
    { name = "wpm_update" },
    { name = "connection_status_change" },
    { name = "sleep_state" },
    { name = "led_indicator" },
]

[[subscriber]]
features = ["rynk", "_ble"]
events = [
    # battery_status is only subscribed under `_ble`; needs one slot per
    # concurrent session (USB + BLE = 2).
    { name = "battery_status", count = 2 },
    # Second session slot for the always-on topics on dual-transport boards.
    { name = "layer_change" },
    { name = "wpm_update" },
    { name = "connection_status_change" },
    { name = "sleep_state" },
    { name = "led_indicator" },
]

# --- Dongle firmware internal subscribers ---

[[subscriber]]
features = ["dongle"]
events = [
    # dongle/link.rs: LedIndicatorEvent::subscriber() on the one keyboard link.
    { name = "led_indicator" },
]

# --- Split-gated internal subscribers ---

[[subscriber]]
features = ["split"]
events = [
    # split/peripheral.rs: KeyboardEvent::subscriber()
    { name = "keyboard" },
    # split/peripheral.rs: PointingEvent::subscriber()
    { name = "pointing" },
    # split/driver.rs: LedIndicatorEvent::subscriber()
    # Covers up to 2 peripherals; for 3+ peripherals override subs in keyboard.toml
    { name = "led_indicator", count = 2 },
    # split/driver.rs: LayerChangeEvent::subscriber()
    { name = "layer_change" },
    # split/driver.rs: ConnectionStatusChangeEvent::subscriber()
    # Covers up to 2 peripherals; for 3+ peripherals override subs in keyboard.toml
    { name = "connection_status_change", count = 2 },
]

# --- Split + BLE-gated internal subscribers ---

[[subscriber]]
features = ["split", "_ble"]
events = [
    # split/ble/peripheral.rs: KeyboardEvent::subscriber() (temporary, on timeout)
    { name = "keyboard" },
    # split/peripheral.rs: ChargingStateEvent::subscriber() (cfg _ble)
    { name = "charging_state" },
    # split/peripheral.rs: BatteryStatusEvent::subscriber() (cfg _ble)
    { name = "battery_status" },
    # split/driver.rs: ClearPeerEvent::subscriber() (cfg _ble)
    # Covers up to 2 peripherals; for 3+ peripherals override subs in keyboard.toml
    { name = "clear_peer", count = 2 },
    # split/ble/central.rs: SleepStateEvent::subscriber() per connected link
    # Covers up to 2 peripherals; for 3+ peripherals override subs in keyboard.toml
    { name = "sleep_state", count = 2 },
]