diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h index c44c5e16869..826e064de4c 100644 --- a/app/include/zmk/ble.h +++ b/app/include/zmk/ble.h @@ -43,4 +43,5 @@ int zmk_ble_set_device_name(char *name); #if IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr); +bt_addr_le_t *zmk_ble_get_peripheral_addr(uint8_t index); #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ diff --git a/app/include/zmk/split/bluetooth/central.h b/app/include/zmk/split/bluetooth/central.h index 5e9e09ff6a1..7c2c3f9499a 100644 --- a/app/include/zmk/split/bluetooth/central.h +++ b/app/include/zmk/split/bluetooth/central.h @@ -21,4 +21,6 @@ int zmk_split_bt_update_hid_indicator(zmk_hid_indicators_t indicators); int zmk_split_get_peripheral_battery_level(uint8_t source, uint8_t *level); -#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) \ No newline at end of file +#endif // IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING) +bool zmk_split_bt_central_peripheral_is_connected(uint8_t index); +bool zmk_split_bt_central_peripheral_is_bonded(uint8_t index); diff --git a/app/src/ble.c b/app/src/ble.c index e63c63b0cca..153e1e78453 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -392,6 +392,14 @@ int zmk_ble_put_peripheral_addr(const bt_addr_le_t *addr) { return -ENOMEM; } +bt_addr_le_t *zmk_ble_get_peripheral_addr(uint8_t index) { + if (index < ZMK_SPLIT_BLE_PERIPHERAL_COUNT) { + return &peripheral_addrs[index]; + } + // Peripheral index out of range + return (bt_addr_le_t *)BT_ADDR_LE_NONE; +} + #endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL) */ #if IS_ENABLED(CONFIG_SETTINGS) diff --git a/app/src/split/bluetooth/central.c b/app/src/split/bluetooth/central.c index 21ff611f568..c4e9e8efa6f 100644 --- a/app/src/split/bluetooth/central.c +++ b/app/src/split/bluetooth/central.c @@ -814,6 +814,22 @@ static struct bt_conn_cb conn_callbacks = { .security_changed = split_central_security_changed, }; +bool zmk_split_bt_central_peripheral_is_connected(uint8_t index) { + // If index is out of range always not connected + if (index >= ZMK_SPLIT_BLE_PERIPHERAL_COUNT) + return false; + else + return (peripherals[index].state == PERIPHERAL_SLOT_STATE_CONNECTED); +} + +bool zmk_split_bt_central_peripheral_is_bonded(uint8_t index) { + // If index is out of range always not bonded + if (index >= ZMK_SPLIT_BLE_PERIPHERAL_COUNT) + return false; + else + return (bt_addr_le_cmp(zmk_ble_get_peripheral_addr(index), BT_ADDR_LE_ANY) == 0); +} + K_THREAD_STACK_DEFINE(split_central_split_run_q_stack, CONFIG_ZMK_SPLIT_BLE_CENTRAL_SPLIT_RUN_STACK_SIZE);