Skip to content

Commit 453a680

Browse files
PavelVPVjukkar
authored andcommitted
[nrf fromtree] bluetooth: mesh: Use bt_get_name to get device name
By default if CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME or CONFIG_BT_MESH_PB_GATT_USE_DEVICE_NAME is enabled, the mesh stack will add BT_DATA_NAME_COMPLETE AD Type along with the Mesh Proxy Service or Mesh Provisioning Service advertisements accordingly. When BT_LE_ADV_OPT_USE_NAME was present and CONFIG_BT_DEVICE_NAME_DYNAMIC is enabled, the advertised name was automatically updated by the host. This turned out to be a side-effect rather than expected behavior and after #71700 this behavior waa changed. But customers use dynamic name feature. This commit makes the mesh stack use bt_get_name to get the device name, which returns runtime name if CONFIG_BT_DEVICE_NAME_DYNAMIC is enabled. Signed-off-by: Pavel Vasilyev <[email protected]> (cherry picked from commit ab346a1) Signed-off-by: Håvard Reierstad <[email protected]> (cherry picked from commit f98c140)
1 parent 2a2d2fb commit 453a680

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

subsys/bluetooth/mesh/pb_gatt_srv.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,12 @@ static size_t gatt_prov_adv_create(struct bt_data prov_sd[2])
243243
prov_sd_len += 1;
244244

245245
dev_name:
246-
#if defined(CONFIG_BT_MESH_PB_GATT_USE_DEVICE_NAME)
247-
prov_sd[prov_sd_len].type = BT_DATA_NAME_COMPLETE;
248-
prov_sd[prov_sd_len].data_len = sizeof(CONFIG_BT_DEVICE_NAME) - 1;
249-
prov_sd[prov_sd_len].data = CONFIG_BT_DEVICE_NAME;
250-
251-
prov_sd_len += 1;
252-
#endif
246+
if (IS_ENABLED(CONFIG_BT_MESH_PB_GATT_USE_DEVICE_NAME)) {
247+
prov_sd[prov_sd_len].type = BT_DATA_NAME_COMPLETE;
248+
prov_sd[prov_sd_len].data_len = BT_DEVICE_NAME_LEN;
249+
prov_sd[prov_sd_len].data = BT_DEVICE_NAME;
250+
prov_sd_len += 1;
251+
}
253252

254253
return prov_sd_len;
255254
}

subsys/bluetooth/mesh/proxy.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@
1818
.interval_min = BT_GAP_ADV_FAST_INT_MIN_2, \
1919
.interval_max = BT_GAP_ADV_FAST_INT_MAX_2
2020

21+
#define BT_DEVICE_NAME (IS_ENABLED(CONFIG_BT_DEVICE_NAME_DYNAMIC) ? \
22+
(const uint8_t *)bt_get_name() : \
23+
(const uint8_t *)CONFIG_BT_DEVICE_NAME)
24+
#define BT_DEVICE_NAME_LEN (IS_ENABLED(CONFIG_BT_DEVICE_NAME_DYNAMIC) ? strlen(bt_get_name()) : \
25+
(sizeof(CONFIG_BT_DEVICE_NAME) - 1))
26+
2127
#define BT_MESH_ID_TYPE_NET 0x00
2228
#define BT_MESH_ID_TYPE_NODE 0x01
2329
#define BT_MESH_ID_TYPE_PRIV_NET 0x02

subsys/bluetooth/mesh/proxy_srv.c

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -483,12 +483,6 @@ static const struct bt_data net_id_ad[] = {
483483
BT_DATA(BT_DATA_SVC_DATA16, proxy_svc_data, NET_ID_LEN),
484484
};
485485

486-
static const struct bt_data sd[] = {
487-
#if defined(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME)
488-
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
489-
#endif
490-
};
491-
492486
static int randomize_bt_addr(void)
493487
{
494488
/* TODO: There appears to be no way to force an RPA/NRPA refresh. */
@@ -510,6 +504,7 @@ static int enc_id_adv(struct bt_mesh_subnet *sub, uint8_t type,
510504
type == BT_MESH_ID_TYPE_PRIV_NODE),
511505
ADV_FAST_INT,
512506
};
507+
struct bt_data sd[1];
513508
int err;
514509

515510
err = bt_mesh_encrypt(&sub->keys[SUBNET_KEY_TX_IDX(sub)].identity, hash, hash);
@@ -529,9 +524,17 @@ static int enc_id_adv(struct bt_mesh_subnet *sub, uint8_t type,
529524
proxy_svc_data[2] = type;
530525
memcpy(&proxy_svc_data[3], &hash[8], 8);
531526

527+
if (IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME)) {
528+
sd[0].type = BT_DATA_NAME_COMPLETE;
529+
sd[0].data_len = BT_DEVICE_NAME_LEN;
530+
sd[0].data = BT_DEVICE_NAME;
531+
}
532+
532533
err = bt_mesh_adv_gatt_start(
533534
type == BT_MESH_ID_TYPE_PRIV_NET ? &slow_adv_param : &fast_adv_param,
534-
duration, enc_id_ad, ARRAY_SIZE(enc_id_ad), sd, ARRAY_SIZE(sd));
535+
duration, enc_id_ad, ARRAY_SIZE(enc_id_ad),
536+
IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) ? sd : NULL,
537+
IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) ? ARRAY_SIZE(sd) : 0);
535538
if (err) {
536539
LOG_WRN("Failed to advertise using type 0x%02x (err %d)", type, err);
537540
return err;
@@ -607,6 +610,7 @@ static int net_id_adv(struct bt_mesh_subnet *sub, int32_t duration)
607610
.options = ADV_OPT_PROXY(false),
608611
ADV_SLOW_INT,
609612
};
613+
struct bt_data sd[1];
610614
int err;
611615

612616
proxy_svc_data[2] = BT_MESH_ID_TYPE_NET;
@@ -615,8 +619,17 @@ static int net_id_adv(struct bt_mesh_subnet *sub, int32_t duration)
615619

616620
memcpy(proxy_svc_data + 3, sub->keys[SUBNET_KEY_TX_IDX(sub)].net_id, 8);
617621

622+
if (IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME)) {
623+
sd[0].type = BT_DATA_NAME_COMPLETE;
624+
sd[0].data_len = BT_DEVICE_NAME_LEN;
625+
sd[0].data = BT_DEVICE_NAME;
626+
}
627+
618628
err = bt_mesh_adv_gatt_start(&slow_adv_param, duration, net_id_ad,
619-
ARRAY_SIZE(net_id_ad), sd, ARRAY_SIZE(sd));
629+
ARRAY_SIZE(net_id_ad),
630+
IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) ? sd : NULL,
631+
IS_ENABLED(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) ?
632+
ARRAY_SIZE(sd) : 0);
620633
if (err) {
621634
LOG_WRN("Failed to advertise using Network ID (err %d)", err);
622635
return err;

0 commit comments

Comments
 (0)