diff --git a/app/Kconfig b/app/Kconfig index bb6997a4..7427bfc8 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -402,6 +402,10 @@ config ZMK_IDLE_SLEEP_TIMEOUT int "Milliseconds of inactivity before entering deep sleep" default 900000 +config ZMK_AWAKE_WHILE_BLE_CONNECTED + bool "Whether to stay awake while BLE is connected" + depends on ZMK_BLE + #ZMK_SLEEP endif diff --git a/app/src/activity.c b/app/src/activity.c index 8f421f85..7c9ab04d 100644 --- a/app/src/activity.c +++ b/app/src/activity.c @@ -26,6 +26,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #endif +#if IS_ENABLED(CONFIG_ZMK_AWAKE_WHILE_BLE_CONNECTED) +#include +#endif + // Reimplement some of the device work from Zephyr PM to work with the new `sys_poweroff` API. // TODO: Tweak this to smarter runtime PM of subsystems on sleep. @@ -126,7 +130,14 @@ void activity_work_handler(struct k_work *work) { int32_t current = k_uptime_get(); int32_t inactive_time = current - activity_last_uptime; #if IS_ENABLED(CONFIG_ZMK_SLEEP) - if (inactive_time > MAX_SLEEP_MS && !is_usb_power_present()) { + if (inactive_time > MAX_SLEEP_MS && + !is_usb_power_present() +#if IS_ENABLED(CONFIG_ZMK_AWAKE_WHILE_BLE_CONNECTED) + // if user inactive and no USB + // keyboard will sleep as soon as BLE is disconnected + && !zmk_ble_active_profile_is_connected() +#endif + ) { // Put devices in suspend power mode before sleeping set_state(ZMK_ACTIVITY_SLEEP); diff --git a/docs/docs/config/power.md b/docs/docs/config/power.md index 75e1b26a..06107621 100644 --- a/docs/docs/config/power.md +++ b/docs/docs/config/power.md @@ -18,11 +18,12 @@ In the deep sleep state, the keyboard additionally disconnects from Bluetooth an Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/Kconfig) -| Config | Type | Description | Default | -| ------------------------------- | ---- | ----------------------------------------------------- | ------- | -| `CONFIG_ZMK_IDLE_TIMEOUT` | int | Milliseconds of inactivity before entering idle state | 30000 | -| `CONFIG_ZMK_SLEEP` | bool | Enable deep sleep support | n | -| `CONFIG_ZMK_IDLE_SLEEP_TIMEOUT` | int | Milliseconds of inactivity before entering deep sleep | 900000 | +| Config | Type | Description | Default | +| -------------------------------------- | ---- | ----------------------------------------------------- | ------- | +| `CONFIG_ZMK_IDLE_TIMEOUT` | int | Milliseconds of inactivity before entering idle state | 30000 | +| `CONFIG_ZMK_SLEEP` | bool | Enable deep sleep support | n | +| `CONFIG_ZMK_IDLE_SLEEP_TIMEOUT` | int | Milliseconds of inactivity before entering deep sleep | 900000 | +| `CONFIG_ZMK_AWAKE_WHILE_BLE_CONNECTED` | bool | Whether to stay awake while BLE is connected | n | ## External Power Control