From 554fd646452757ac0497feb3ecc02ab0d8493070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Narajowski?= Date: Thu, 15 Feb 2018 16:47:33 +0100 Subject: [PATCH] mesh: shell: Use random addr when public is unassigned X-Original-Commit: 8d0155cfbc024386a09106cba8f584a0a897144f --- nimble/host/mesh/src/shell.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/nimble/host/mesh/src/shell.c b/nimble/host/mesh/src/shell.c index ed34965f8..686c12ac2 100644 --- a/nimble/host/mesh/src/shell.c +++ b/nimble/host/mesh/src/shell.c @@ -564,18 +564,30 @@ struct shell_cmd_help cmd_lpn_help = { #endif /* MESH_LOW_POWER */ +static int check_addr_unassigned(uint8_t addr[BLE_DEV_ADDR_LEN]) +{ + return memcmp(addr, (uint8_t[BLE_DEV_ADDR_LEN]){0, 0, 0, 0, 0, 0}, + BLE_DEV_ADDR_LEN) == 0; +} + static int cmd_init(int argc, char *argv[]) { int err; ble_addr_t addr; - /* Use NRPA */ - err = ble_hs_id_gen_rnd(1, &addr); - assert(err == 0); - err = ble_hs_id_set_rnd(addr.val); - assert(err == 0); + if (check_addr_unassigned(MYNEWT_VAL(BLE_PUBLIC_DEV_ADDR))) { + /* Use NRPA */ + err = ble_hs_id_gen_rnd(1, &addr); + assert(err == 0); + err = ble_hs_id_set_rnd(addr.val); + assert(err == 0); + + err = bt_mesh_init(addr.type, &prov, &comp); + } + else { + err = bt_mesh_init(0, &prov, &comp); + } - err = bt_mesh_init(addr.type, &prov, &comp); if (err) { printk("Mesh initialization failed (err %d)\n", err); }