From 4f6aae122d518afd4f620043a6a86d4c2bd30108 Mon Sep 17 00:00:00 2001 From: Kamil Piszczek Date: Tue, 11 Feb 2025 15:16:28 +0100 Subject: [PATCH] [nrf fromtree] bluetooth: dis: add Kconfig for disabling optional characteristics Added new Kconfig option set that allows the user to control the presence of the following optional characteristics: - Manufacturer Name String - Model Number String Depreacted the old configuration that can be deleted in the future Zephyr releases. Signed-off-by: Kamil Piszczek (cherry picked from commit 7c828bd232a1645f5edd17939db04c591877dea4) --- drivers/bluetooth/hci/Kconfig.nxp | 5 ++- samples/bluetooth/peripheral_dis/prj.conf | 6 ++- subsys/bluetooth/services/Kconfig.dis | 46 +++++++++++++++++++++-- subsys/bluetooth/services/dis.c | 40 +++++++++++++++++++- 4 files changed, 90 insertions(+), 7 deletions(-) diff --git a/drivers/bluetooth/hci/Kconfig.nxp b/drivers/bluetooth/hci/Kconfig.nxp index b91dfbbe488..28b9baa2064 100644 --- a/drivers/bluetooth/hci/Kconfig.nxp +++ b/drivers/bluetooth/hci/Kconfig.nxp @@ -48,7 +48,10 @@ endif if BT_NXP -config BT_DIS_MANUF +config BT_DIS_MANUF_NAME + default y + +config BT_DIS_MANUF_NAME_STR default "NXP" config BT_HCI_ACL_FLOW_CONTROL diff --git a/samples/bluetooth/peripheral_dis/prj.conf b/samples/bluetooth/peripheral_dis/prj.conf index 4fed0a4e66f..cc58337db9c 100644 --- a/samples/bluetooth/peripheral_dis/prj.conf +++ b/samples/bluetooth/peripheral_dis/prj.conf @@ -3,12 +3,14 @@ CONFIG_BT_PERIPHERAL=y CONFIG_BT_DIS=y CONFIG_BT_DIS_PNP=n -CONFIG_BT_DIS_MODEL="Zephyr Model" -CONFIG_BT_DIS_MANUF="Zephyr" +CONFIG_BT_DIS_MODEL_NUMBER=y +CONFIG_BT_DIS_MANUF_NAME=y CONFIG_BT_DIS_SERIAL_NUMBER=y CONFIG_BT_DIS_FW_REV=y CONFIG_BT_DIS_HW_REV=y CONFIG_BT_DIS_SW_REV=y +CONFIG_BT_DIS_MODEL_NUMBER_STR="Zephyr Model" +CONFIG_BT_DIS_MANUF_NAME_STR="Zephyr" CONFIG_BT_DIS_SERIAL_NUMBER_STR="Zephyr Serial" CONFIG_BT_DIS_FW_REV_STR="Zephyr Firmware" CONFIG_BT_DIS_HW_REV_STR="Zephyr Hardware" diff --git a/subsys/bluetooth/services/Kconfig.dis b/subsys/bluetooth/services/Kconfig.dis index e1056a250d1..6a15853903d 100644 --- a/subsys/bluetooth/services/Kconfig.dis +++ b/subsys/bluetooth/services/Kconfig.dis @@ -23,17 +23,57 @@ config BT_DIS_STR_MAX Bluetooth DIS string storage size. Storage can be up to 248 bytes long (excluding NULL termination). -config BT_DIS_MODEL - string "Model name" +config BT_DIS_MODEL_NUMBER + bool "Model number characteristic" + depends on !BT_DIS_MODEL_DEPRECATED_USED + default y + help + Enable model number characteristic in Device Information Service. + +config BT_DIS_MODEL_NUMBER_STR + string "Model number" + depends on BT_DIS_MODEL_NUMBER default SOC + help + Configure model number string that can be read with the model number characteristic + in Device Information Service. + +config BT_DIS_MODEL + string "Model name [DEPRECATED]" help The device model inside Device Information Service. + This option is deprecated. Use BT_DIS_MODEL_NUMBER and BT_DIS_MODEL_NUMBER_STR instead. -config BT_DIS_MANUF +config BT_DIS_MODEL_DEPRECATED_USED + bool + default y if BT_DIS_MODEL != "" + select DEPRECATED + +config BT_DIS_MANUF_NAME + bool "Manufacturer name characteristic" + depends on !BT_DIS_MANUF_DEPRECATED_USED + default y + help + Enable manufacturer name characteristic in Device Information Service. + +config BT_DIS_MANUF_NAME_STR string "Manufacturer name" + depends on BT_DIS_MANUF_NAME default "Manufacturer" + help + Configure manufacturer name string that can be read with the manufacturer name + characteristic in Device Information Service. + +config BT_DIS_MANUF + string "Manufacturer name [DEPRECATED]" help The device manufacturer inside Device Information Service. + This option is deprecated. Use BT_DIS_MANUF_NAME and BT_DIS_MANUF_NAME_STR instead. + +config BT_DIS_MANUF_DEPRECATED_USED + bool + default y if BT_DIS_MANUF != "" + select DEPRECATED config BT_DIS_PNP bool "PnP_ID characteristic" diff --git a/subsys/bluetooth/services/dis.c b/subsys/bluetooth/services/dis.c index 27676600b17..c9f429560c3 100644 --- a/subsys/bluetooth/services/dis.c +++ b/subsys/bluetooth/services/dis.c @@ -58,10 +58,20 @@ static uint8_t dis_system_id[8] = {BT_BYTES_LIST_LE40((uint64_t)CONFIG_BT_DIS_SY #endif #if defined(CONFIG_BT_DIS_SETTINGS) +#if defined(CONFIG_BT_DIS_MODEL_NUMBER) +BUILD_ASSERT(sizeof(CONFIG_BT_DIS_MODEL_NUMBER_STR) <= CONFIG_BT_DIS_STR_MAX + 1); +static uint8_t dis_model[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_MODEL_NUMBER_STR; +#elif defined(CONFIG_BT_DIS_MODEL_DEPRECATED_USED) BUILD_ASSERT(sizeof(CONFIG_BT_DIS_MODEL) <= CONFIG_BT_DIS_STR_MAX + 1); -BUILD_ASSERT(sizeof(CONFIG_BT_DIS_MANUF) <= CONFIG_BT_DIS_STR_MAX + 1); static uint8_t dis_model[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_MODEL; +#endif +#if defined(CONFIG_BT_DIS_MANUF_NAME) +BUILD_ASSERT(sizeof(CONFIG_BT_DIS_MANUF_NAME_STR) <= CONFIG_BT_DIS_STR_MAX + 1); +static uint8_t dis_manuf[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_MANUF_NAME_STR; +#elif defined(CONFIG_BT_DIS_MANUF_DEPRECATED_USED) +BUILD_ASSERT(sizeof(CONFIG_BT_DIS_MANUF) <= CONFIG_BT_DIS_STR_MAX + 1); static uint8_t dis_manuf[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_MANUF; +#endif #if defined(CONFIG_BT_DIS_SERIAL_NUMBER) BUILD_ASSERT(sizeof(CONFIG_BT_DIS_SERIAL_NUMBER_STR) <= CONFIG_BT_DIS_STR_MAX + 1); static uint8_t dis_serial_number[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_SERIAL_NUMBER_STR; @@ -114,8 +124,16 @@ static uint8_t dis_ieee_rcdl[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_IEEE_RCD #else /* CONFIG_BT_DIS_SETTINGS */ +#if defined(CONFIG_BT_DIS_MODEL_NUMBER) +#define BT_DIS_MODEL_REF CONFIG_BT_DIS_MODEL_NUMBER_STR +#elif defined(CONFIG_BT_DIS_MODEL_DEPRECATED_USED) #define BT_DIS_MODEL_REF CONFIG_BT_DIS_MODEL +#endif +#if defined(CONFIG_BT_DIS_MANUF_NAME) +#define BT_DIS_MANUF_REF CONFIG_BT_DIS_MANUF_NAME_STR +#elif defined(CONFIG_BT_DIS_MANUF_DEPRECATED_USED) #define BT_DIS_MANUF_REF CONFIG_BT_DIS_MANUF +#endif #define BT_DIS_SERIAL_NUMBER_STR_REF CONFIG_BT_DIS_SERIAL_NUMBER_STR #define BT_DIS_FW_REV_STR_REF CONFIG_BT_DIS_FW_REV_STR #define BT_DIS_HW_REV_STR_REF CONFIG_BT_DIS_HW_REV_STR @@ -128,12 +146,20 @@ static uint8_t dis_ieee_rcdl[CONFIG_BT_DIS_STR_MAX + 1] = CONFIG_BT_DIS_IEEE_RCD #endif /* CONFIG_BT_DIS_SETTINGS */ +#define BT_DIS_READ_STR_USED \ + (CONFIG_BT_DIS_MODEL_NUMBER || CONFIG_BT_DIS_MODEL_DEPRECATED_USED || \ + CONFIG_BT_DIS_MANUF_NAME || CONFIG_BT_DIS_MANUF_DEPRECATED_USED || \ + CONFIG_BT_DIS_SERIAL_NUMBER || CONFIG_BT_DIS_FW_REV || CONFIG_BT_DIS_HW_REV || \ + CONFIG_BT_DIS_SW_REV || CONFIG_BT_DIS_IEEE_RCDL) + +#if BT_DIS_READ_STR_USED static ssize_t read_str(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) { return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, strlen(attr->user_data)); } +#endif #if CONFIG_BT_DIS_PNP static ssize_t read_pnp_id(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, @@ -226,10 +252,16 @@ static ssize_t read_udi(struct bt_conn *conn, const struct bt_gatt_attr *attr, v BT_GATT_SERVICE_DEFINE( dis_svc, BT_GATT_PRIMARY_SERVICE(BT_UUID_DIS), +#if defined(CONFIG_BT_DIS_MODEL_NUMBER) || defined(CONFIG_BT_DIS_MODEL_DEPRECATED_USED) BT_GATT_CHARACTERISTIC(BT_UUID_DIS_MODEL_NUMBER, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_DIS_MODEL_REF), +#endif + +#if defined(CONFIG_BT_DIS_MANUF_NAME) || defined(CONFIG_BT_DIS_MANUF_DEPRECATED_USED) BT_GATT_CHARACTERISTIC(BT_UUID_DIS_MANUFACTURER_NAME, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_DIS_MANUF_REF), +#endif + #if CONFIG_BT_DIS_PNP BT_GATT_CHARACTERISTIC(BT_UUID_DIS_PNP_ID, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_pnp_id, NULL, &dis_pnp_id), @@ -309,7 +341,10 @@ static int dis_set(const char *name, size_t len_rd, settings_read_cb read_cb, vo int nlen; const char *next; + ARG_UNUSED(len); + nlen = settings_name_next(name, &next); +#if defined(CONFIG_BT_DIS_MANUF_NAME) || defined(CONFIG_BT_DIS_MANUF_DEPRECATED_USED) if (!strncmp(name, "manuf", nlen)) { len = read_cb(store, &dis_manuf, sizeof(dis_manuf) - 1); if (len < 0) { @@ -321,6 +356,8 @@ static int dis_set(const char *name, size_t len_rd, settings_read_cb read_cb, vo } return 0; } +#endif +#if defined(CONFIG_BT_DIS_MODEL_NUMBER) || defined(CONFIG_BT_DIS_MODEL_DEPRECATED_USED) if (!strncmp(name, "model", nlen)) { len = read_cb(store, &dis_model, sizeof(dis_model) - 1); if (len < 0) { @@ -332,6 +369,7 @@ static int dis_set(const char *name, size_t len_rd, settings_read_cb read_cb, vo } return 0; } +#endif #if defined(CONFIG_BT_DIS_SERIAL_NUMBER) if (!strncmp(name, "serial", nlen)) { len = read_cb(store, &dis_serial_number, sizeof(dis_serial_number) - 1);