From 5c602a7ec750ccb6eafc23f0abacd227d4c76d8e Mon Sep 17 00:00:00 2001 From: Percentnineteen Date: Tue, 15 Mar 2022 00:50:22 -0500 Subject: [PATCH 1/5] feat: append the current profile number to the advertised name --- app/src/ble.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index afc2e47f..5037caf3 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -78,11 +78,13 @@ static uint8_t active_profile; #define DEVICE_NAME CONFIG_BT_DEVICE_NAME #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) +static uint8_t device_name[17] = DEVICE_NAME; + BUILD_ASSERT(DEVICE_NAME_LEN <= 16, "ERROR: BLE device name is too long. Max length: 16"); -static const struct bt_data zmk_ble_ad[] = { +static struct bt_data zmk_ble_ad[] = { #if IS_HOST_PERIPHERAL - BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), + BT_DATA(BT_DATA_NAME_COMPLETE, device_name, 16), BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xC1, 0x03), #endif BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), @@ -183,6 +185,12 @@ int update_advertising() { struct bt_conn *conn; enum advertising_type desired_adv = ZMK_ADV_NONE; + uint8_t max_device_name_length = (active_profile > 9) ? 13 : 14; + // need to store the temporary device name because Zephyr *printf doesn't support string precision + char temp_device_name[14]; + snprintf(temp_device_name, max_device_name_length, "%s", DEVICE_NAME); + snprintf(device_name, 16, "%s~%d", temp_device_name, active_profile); + if (zmk_ble_active_profile_is_open()) { desired_adv = ZMK_ADV_CONN; } else if (!zmk_ble_active_profile_is_connected()) { From fa2c76b3f1ce6b22884e26e65ddb851a08cc13db Mon Sep 17 00:00:00 2001 From: Percentnineteen Date: Tue, 15 Mar 2022 11:29:36 -0500 Subject: [PATCH 2/5] * removed magic number * removed temporary string --- app/src/ble.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index 5037caf3..a63b0769 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -77,8 +77,9 @@ static uint8_t active_profile; #define DEVICE_NAME CONFIG_BT_DEVICE_NAME #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) +#define DEVICE_NAME_ARRAY_MAX_SIZE 17 -static uint8_t device_name[17] = DEVICE_NAME; +static uint8_t device_name[DEVICE_NAME_ARRAY_MAX_SIZE] = DEVICE_NAME; BUILD_ASSERT(DEVICE_NAME_LEN <= 16, "ERROR: BLE device name is too long. Max length: 16"); @@ -186,10 +187,11 @@ int update_advertising() { enum advertising_type desired_adv = ZMK_ADV_NONE; uint8_t max_device_name_length = (active_profile > 9) ? 13 : 14; - // need to store the temporary device name because Zephyr *printf doesn't support string precision - char temp_device_name[14]; - snprintf(temp_device_name, max_device_name_length, "%s", DEVICE_NAME); - snprintf(device_name, 16, "%s~%d", temp_device_name, active_profile); + if (max_device_name_length > strlen(DEVICE_NAME)) { + max_device_name_length = DEVICE_NAME_LEN; + } + snprintf(device_name, max_device_name_length + 1, "%s", DEVICE_NAME); + sprintf(device_name + max_device_name_length, "~%d", active_profile); if (zmk_ble_active_profile_is_open()) { desired_adv = ZMK_ADV_CONN; From cc6ab5d52c344ddbf3fb6993813a6c17baec4bf4 Mon Sep 17 00:00:00 2001 From: KN Date: Tue, 15 Mar 2022 12:44:35 -0500 Subject: [PATCH 3/5] Update app/src/ble.c Co-authored-by: Pete Johanson --- app/src/ble.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index a63b0769..61fe07cd 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -85,7 +85,7 @@ BUILD_ASSERT(DEVICE_NAME_LEN <= 16, "ERROR: BLE device name is too long. Max len static struct bt_data zmk_ble_ad[] = { #if IS_HOST_PERIPHERAL - BT_DATA(BT_DATA_NAME_COMPLETE, device_name, 16), + BT_DATA(BT_DATA_NAME_COMPLETE, device_name, DEVICE_NAME_ARRAY_MAX_SIZE-1), BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xC1, 0x03), #endif BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), From c6a3f988337e9b98dbe96a3c2fa277547696c2f9 Mon Sep 17 00:00:00 2001 From: KN Date: Tue, 15 Mar 2022 12:46:31 -0500 Subject: [PATCH 4/5] Update app/src/ble.c Co-authored-by: Pete Johanson --- app/src/ble.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/ble.c b/app/src/ble.c index 61fe07cd..69dfa279 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -186,7 +186,7 @@ int update_advertising() { struct bt_conn *conn; enum advertising_type desired_adv = ZMK_ADV_NONE; - uint8_t max_device_name_length = (active_profile > 9) ? 13 : 14; + uint8_t max_device_name_length = DEVICE_NAME_ARRAY_MAX_SIZE - ((active_profile > 9) ? 4 : 3); if (max_device_name_length > strlen(DEVICE_NAME)) { max_device_name_length = DEVICE_NAME_LEN; } From c28e068f34bb674e3ad233026135bc841a271edb Mon Sep 17 00:00:00 2001 From: Percentnineteen Date: Mon, 21 Mar 2022 16:50:10 -0500 Subject: [PATCH 5/5] clang-format cleanup --- app/src/ble.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/ble.c b/app/src/ble.c index 69dfa279..dbac46b4 100644 --- a/app/src/ble.c +++ b/app/src/ble.c @@ -85,7 +85,7 @@ BUILD_ASSERT(DEVICE_NAME_LEN <= 16, "ERROR: BLE device name is too long. Max len static struct bt_data zmk_ble_ad[] = { #if IS_HOST_PERIPHERAL - BT_DATA(BT_DATA_NAME_COMPLETE, device_name, DEVICE_NAME_ARRAY_MAX_SIZE-1), + BT_DATA(BT_DATA_NAME_COMPLETE, device_name, DEVICE_NAME_ARRAY_MAX_SIZE - 1), BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xC1, 0x03), #endif BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), @@ -188,7 +188,7 @@ int update_advertising() { uint8_t max_device_name_length = DEVICE_NAME_ARRAY_MAX_SIZE - ((active_profile > 9) ? 4 : 3); if (max_device_name_length > strlen(DEVICE_NAME)) { - max_device_name_length = DEVICE_NAME_LEN; + max_device_name_length = DEVICE_NAME_LEN; } snprintf(device_name, max_device_name_length + 1, "%s", DEVICE_NAME); sprintf(device_name + max_device_name_length, "~%d", active_profile);