From f461ae574f7080b2c6ea1e69029f2aaadc5f4403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Battrel?= Date: Fri, 19 Apr 2024 12:28:01 +0200 Subject: [PATCH] Bluetooth: Mesh: Remove usage of auto name in AD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The advertiser options to automatically add the name in the scan response and the advertising data will be deprecated. The Mesh files `proxy_srv.c` and `pb_gatt_srv.c` were using BT_LE_ADV_OPT_USE_NAME. Add the device name in the advertising data directly. Signed-off-by: Théo Battrel --- subsys/bluetooth/mesh/pb_gatt_srv.c | 27 ++++++++++++++++----------- subsys/bluetooth/mesh/proxy_srv.c | 18 +++++++++--------- 2 files changed, 25 insertions(+), 20 deletions(-) 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;