Skip to content

Commit

Permalink
[nrf fromtree] bluetooth: dis: add Kconfig for disabling optional cha…
Browse files Browse the repository at this point in the history
…racteristics

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 <[email protected]>
(cherry picked from commit 7c828bd232a1645f5edd17939db04c591877dea4)
  • Loading branch information
kapi-no committed Feb 14, 2025
1 parent 8a64a2e commit 4f6aae1
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 7 deletions.
5 changes: 4 additions & 1 deletion drivers/bluetooth/hci/Kconfig.nxp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions samples/bluetooth/peripheral_dis/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
46 changes: 43 additions & 3 deletions subsys/bluetooth/services/Kconfig.dis
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
40 changes: 39 additions & 1 deletion subsys/bluetooth/services/dis.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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);
Expand Down

0 comments on commit 4f6aae1

Please sign in to comment.