diff --git a/subsys/bluetooth/mesh/pb_gatt_srv.c b/subsys/bluetooth/mesh/pb_gatt_srv.c index f4fdac53570..62436a3c8d0 100644 --- a/subsys/bluetooth/mesh/pb_gatt_srv.c +++ b/subsys/bluetooth/mesh/pb_gatt_srv.c @@ -33,16 +33,9 @@ #include LOG_MODULE_REGISTER(bt_mesh_pb_gatt_srv); -#if defined(CONFIG_BT_MESH_PB_GATT_USE_DEVICE_NAME) -#define ADV_OPT_USE_NAME BT_LE_ADV_OPT_USE_NAME -#else -#define ADV_OPT_USE_NAME 0 -#endif - #define ADV_OPT_PROV \ (BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_SCANNABLE | \ - BT_LE_ADV_OPT_ONE_TIME | ADV_OPT_USE_IDENTITY | \ - ADV_OPT_USE_NAME) + BT_LE_ADV_OPT_ONE_TIME | ADV_OPT_USE_IDENTITY) #define FAST_ADV_TIME (60LL * MSEC_PER_SEC) @@ -222,8 +215,10 @@ static const struct bt_data prov_ad[] = { BT_DATA(BT_DATA_SVC_DATA16, prov_svc_data, sizeof(prov_svc_data)), }; -static size_t gatt_prov_adv_create(struct bt_data prov_sd[1]) +static size_t gatt_prov_adv_create(struct bt_data prov_sd[2]) { + size_t prov_sd_len = 0; + const struct bt_mesh_prov *prov = bt_mesh_prov_get(); size_t uri_len; @@ -245,7 +240,17 @@ static size_t gatt_prov_adv_create(struct bt_data prov_sd[1]) prov_sd[0].data_len = uri_len; prov_sd[0].data = (const uint8_t *)prov->uri; - return 1; + prov_sd_len += 1; + +#if defined(CONFIG_BT_MESH_PB_GATT_USE_DEVICE_NAME) + prov_sd[1].type = BT_DATA_NAME_COMPLETE; + prov_sd[1].data_len = sizeof(CONFIG_BT_DEVICE_NAME) - 1; + prov_sd[1].data = CONFIG_BT_DEVICE_NAME; + + prov_sd_len += 1; +#endif + + return prov_sd_len; } static int gatt_send(struct bt_conn *conn, @@ -279,7 +284,7 @@ int bt_mesh_pb_gatt_srv_adv_start(void) .options = ADV_OPT_PROV, ADV_FAST_INT, }; - struct bt_data prov_sd[1]; + struct bt_data prov_sd[2]; size_t prov_sd_len; int64_t timestamp = fast_adv_timestamp; int64_t elapsed_time = k_uptime_delta(×tamp); diff --git a/subsys/bluetooth/mesh/proxy_srv.c b/subsys/bluetooth/mesh/proxy_srv.c index a903d94ffa9..ca5e8bb76d1 100644 --- a/subsys/bluetooth/mesh/proxy_srv.c +++ b/subsys/bluetooth/mesh/proxy_srv.c @@ -44,18 +44,12 @@ LOG_MODULE_REGISTER(bt_mesh_gatt); */ #define PROXY_RANDOM_UPDATE_INTERVAL (10 * 60 * MSEC_PER_SEC) -#if defined(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) -#define ADV_OPT_USE_NAME BT_LE_ADV_OPT_USE_NAME -#else -#define ADV_OPT_USE_NAME 0 -#endif - #define ADV_OPT_ADDR(private) (IS_ENABLED(CONFIG_BT_MESH_DEBUG_USE_ID_ADDR) ? \ BT_LE_ADV_OPT_USE_IDENTITY : (private) ? BT_LE_ADV_OPT_USE_NRPA : 0) #define ADV_OPT_PROXY(private) \ (BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_SCANNABLE | ADV_OPT_ADDR(private) | \ - BT_LE_ADV_OPT_ONE_TIME | ADV_OPT_USE_NAME) + BT_LE_ADV_OPT_ONE_TIME) static void proxy_send_beacons(struct k_work *work); static int proxy_send(struct bt_conn *conn, @@ -489,6 +483,12 @@ static const struct bt_data net_id_ad[] = { BT_DATA(BT_DATA_SVC_DATA16, proxy_svc_data, NET_ID_LEN), }; +static const struct bt_data sd[] = { +#if defined(CONFIG_BT_MESH_PROXY_USE_DEVICE_NAME) + BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1), +#endif +}; + static int randomize_bt_addr(void) { /* TODO: There appears to be no way to force an RPA/NRPA refresh. */ @@ -531,7 +531,7 @@ static int enc_id_adv(struct bt_mesh_subnet *sub, uint8_t type, err = bt_mesh_adv_gatt_start( type == BT_MESH_ID_TYPE_PRIV_NET ? &slow_adv_param : &fast_adv_param, - duration, enc_id_ad, ARRAY_SIZE(enc_id_ad), NULL, 0); + duration, enc_id_ad, ARRAY_SIZE(enc_id_ad), sd, ARRAY_SIZE(sd)); if (err) { LOG_WRN("Failed to advertise using type 0x%02x (err %d)", type, err); return err; @@ -616,7 +616,7 @@ static int net_id_adv(struct bt_mesh_subnet *sub, int32_t duration) memcpy(proxy_svc_data + 3, sub->keys[SUBNET_KEY_TX_IDX(sub)].net_id, 8); err = bt_mesh_adv_gatt_start(&slow_adv_param, duration, net_id_ad, - ARRAY_SIZE(net_id_ad), NULL, 0); + ARRAY_SIZE(net_id_ad), sd, ARRAY_SIZE(sd)); if (err) { LOG_WRN("Failed to advertise using Network ID (err %d)", err); return err;