diff --git a/src/helpers/esp32/SerialNimBLEInterface.cpp b/src/helpers/esp32/SerialNimBLEInterface.cpp index 8d95fc88..c527087f 100644 --- a/src/helpers/esp32/SerialNimBLEInterface.cpp +++ b/src/helpers/esp32/SerialNimBLEInterface.cpp @@ -9,11 +9,21 @@ #define ADVERT_RESTART_DELAY 1000 // millis -void SerialNimBLEInterface::begin(const char* device_name, uint32_t pin_code) { +void SerialNimBLEInterface::begin(const char* prefix, char* name, uint32_t pin_code) { _pin_code = pin_code; + if (strcmp(name, "@@MAC") == 0) { + uint8_t addr[8]; + memset(addr, 0, sizeof(addr)); + esp_efuse_mac_get_default(addr); + sprintf(name, "%02X%02X%02X%02X%02X%02X", // modify (IN-OUT param) + addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]); + } + char dev_name[32+16]; + sprintf(dev_name, "%s%s", prefix, name); + // Create the BLE Device - NimBLEDevice::init(device_name); + NimBLEDevice::init(dev_name); NimBLEDevice::setMTU(MAX_FRAME_SIZE); NimBLEDevice::setSecurityIOCap(BLE_HS_IO_DISPLAY_ONLY); NimBLEDevice::setSecurityAuth(BLE_SM_PAIR_AUTHREQ_BOND | BLE_SM_PAIR_AUTHREQ_MITM | BLE_SM_PAIR_AUTHREQ_SC); @@ -39,7 +49,7 @@ void SerialNimBLEInterface::begin(const char* device_name, uint32_t pin_code) { pService->start(); NimBLEAdvertising* pAdvertising = NimBLEDevice::getAdvertising(); - pAdvertising->setName(device_name); + pAdvertising->setName(dev_name); pAdvertising->addServiceUUID(pService->getUUID()); pAdvertising->enableScanResponse(true); pAdvertising->start(); diff --git a/src/helpers/esp32/SerialNimBLEInterface.h b/src/helpers/esp32/SerialNimBLEInterface.h index 35f2cbc2..64117674 100644 --- a/src/helpers/esp32/SerialNimBLEInterface.h +++ b/src/helpers/esp32/SerialNimBLEInterface.h @@ -55,7 +55,13 @@ public: send_queue_len = recv_queue_len = 0; } - void begin(const char* device_name, uint32_t pin_code); + /** + * init the BLE interface. + * @param prefix a prefix for the device name + * @param name IN/OUT - a name for the device (combined with prefix). If "@@MAC", is modified and returned + * @param pin_code the BLE security pin + */ + void begin(const char* prefix, char* name, uint32_t pin_code); // BaseSerialInterface methods void enable() override;