diff --git a/docs/companion_cli.md b/docs/companion_cli.md index 31a055847b..0dec6a27a0 100644 --- a/docs/companion_cli.md +++ b/docs/companion_cli.md @@ -320,6 +320,19 @@ Radio parameters are common to all roles and handled by `CommonRadioPrefs`. --- +#### Change BLE name +**Usage:** +- `get ble_name` +- `set ble_name ` +- `set ble_name_default` + +**Parameters:** +- `name`: New BLE name + +**Note:** By default the node name will be used as the BLE name. These commands require a reboot to take effect. + +--- + ### Wifi #### Get status diff --git a/examples/companion_radio/MyMesh.cpp b/examples/companion_radio/MyMesh.cpp index 755c56d14c..a18d0062e3 100644 --- a/examples/companion_radio/MyMesh.cpp +++ b/examples/companion_radio/MyMesh.cpp @@ -2147,6 +2147,26 @@ bool MyMesh::handleCommand(const char* command, uint32_t sender_timestamp, char* sprintf(reply, "> pin is now %06d", _prefs.ble_pin); return true; } + if (memcmp(command, "set ble_name ", 13) == 0) { + if (AdvertDataParser::isValidName(&command[13])) { + StrHelper::strncpy(_prefs.ble_name, &command[13], sizeof(_prefs.ble_name)); + savePrefs(); + sprintf(reply, "> BLE name is now %s (reboot to apply)", _prefs.ble_name); + } else { + strcpy(reply, "Error, bad chars"); + } + return true; + } + if (strcmp(command, "get ble_name") == 0) { + sprintf(reply, "> %s", _prefs.ble_name[0] ? _prefs.ble_name : _prefs.node_name); + return true; + } + if (strcmp(command, "set ble_name_default") == 0) { + _prefs.ble_name[0] = 0; + savePrefs(); + sprintf(reply, "> BLE name reset to %s (reboot to apply)", _prefs.node_name); + return true; + } #ifdef ENABLE_WIFI_INTERFACE if (memcmp(command, "set wifi.ssid ", 14) == 0) { diff --git a/examples/companion_radio/NodePrefs.h b/examples/companion_radio/NodePrefs.h index c5d1df04a4..8a7bc482fc 100644 --- a/examples/companion_radio/NodePrefs.h +++ b/examples/companion_radio/NodePrefs.h @@ -30,6 +30,7 @@ class NodePrefs : public ConfigSerializer { // persisted to file float tx_delay_factor = 0; float direct_tx_delay_factor = 0; uint32_t ble_pin = 0; + char ble_name[32] = {0}; uint8_t advert_loc_policy = 0; uint8_t buzzer_quiet = 0; uint8_t vibe_quiet = 0; @@ -186,6 +187,7 @@ class NodePrefs : public ConfigSerializer { // persisted to file def("defs_nm", _parent->default_scope_name, sizeof(_parent->default_scope_name)); def("defs_key", (void *) _parent->default_scope_key, sizeof(_parent->default_scope_key)); def("pin", _parent->ble_pin); + def("ble_name", _parent->ble_name, sizeof(_parent->ble_name)); def("buzz_q", _parent->buzzer_quiet); def("vibe_q", _parent->vibe_quiet); def("auto_add", _parent->autoadd_config); // bitmask for auto-add contacts config diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 839d495833..167f6a799b 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -206,7 +206,7 @@ void setup() { // add bluetooth interface #if defined(BLE_PIN_CODE) - bluetooth_interface.begin(BLE_NAME_PREFIX, the_mesh.getNodePrefs()->node_name, the_mesh.getBLEPin()); + bluetooth_interface.begin(BLE_NAME_PREFIX, the_mesh.getNodePrefs()->ble_name[0] ? the_mesh.getNodePrefs()->ble_name : the_mesh.getNodePrefs()->node_name, the_mesh.getBLEPin()); interface_manager.addInterface(InterfaceType::Bluetooth, &bluetooth_interface); #endif