diff --git a/android/app/src/main/assets/firmware/firmware.bin b/android/app/src/main/assets/firmware/firmware.bin index e5bf28e..644d9cc 100644 Binary files a/android/app/src/main/assets/firmware/firmware.bin and b/android/app/src/main/assets/firmware/firmware.bin differ diff --git a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt index 08321f0..b6cb3a8 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/MainActivity.kt @@ -213,7 +213,7 @@ class MainActivity : AppCompatActivity() { @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode == REQUEST_SETTINGS && resultCode == SettingsActivity.RESULT_SCAN) { + if (requestCode == REQUEST_SETTINGS && resultCode == Activity.RESULT_OK) { stopScan() bluetoothGatt?.close() bluetoothGatt = null @@ -260,7 +260,7 @@ class MainActivity : AppCompatActivity() { private fun hexStringToBytes(hex: String): ByteArray? { val cleaned = hex.uppercase().filter { it in "0123456789ABCDEF" } - if (cleaned.isEmpty() || cleaned.length % 2 != 0) return null + if (cleaned.length != 64) return null return cleaned.chunked(2).map { it.toInt(16).toByte() }.toByteArray() } diff --git a/platformio.ini b/platformio.ini index f9a9638..708d9b8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,8 +10,6 @@ build_flags = -DCORE_DEBUG_LEVEL=5 -DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_MODE=1 - -DCONFIG_BT_NIMBLE_ENABLED lib_deps = - h2zero/NimBLE-Arduino@^2 upload_port = /dev/ttyACM0 upload_speed = 115200 \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index ffb428c..56f377d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,8 @@ #include -#include -#include +#include +#include +#include +#include #include #include @@ -23,7 +25,7 @@ #define NVS_KEY_NAME "key" #define NVS_UUID_NAME "uuid" -NimBLECharacteristic *pCharacteristic; +BLECharacteristic *pCharacteristic; bool deviceConnected = false; bool bleRelay1 = false; bool bleRelay2 = false; @@ -37,19 +39,19 @@ bool keyProvisioned = false; bool uuidProvisioned = false; Preferences preferences; -class MyServerCallbacks : public NimBLEServerCallbacks { - void onConnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo) override { +class MyServerCallbacks : public BLEServerCallbacks { + void onConnect(BLEServer *pServer) override { deviceConnected = true; lastSeq = 0; Serial.println("BLE: device connected"); } - void onDisconnect(NimBLEServer *pServer, NimBLEConnInfo &connInfo, int reason) override { + void onDisconnect(BLEServer *pServer) override { deviceConnected = false; bleRelay1 = false; bleRelay2 = false; lastSeq = 0; Serial.println("BLE: device disconnected"); - NimBLEDevice::startAdvertising(); + BLEDevice::startAdvertising(); } }; @@ -99,8 +101,8 @@ static void parseHexKey(const String &hex, uint8_t *out) { } } -class MyCharacteristicCallbacks : public NimBLECharacteristicCallbacks { - void onWrite(NimBLECharacteristic *pChar, NimBLEConnInfo &connInfo) override { +class MyCharacteristicCallbacks : public BLECharacteristicCallbacks { + void onWrite(BLECharacteristic *pChar) override { std::string value = pChar->getValue(); if (value.length() != HMAC_PKT_SIZE) { Serial.printf("BLE: bad packet length %d (expected %d)\n", @@ -183,39 +185,36 @@ void setup() { } Serial.println("LED blink done, starting BLE..."); - NimBLEDevice::init("SylDa_Server"); + BLEDevice::init("SylDa_Server"); - NimBLEServer *pServer = NimBLEDevice::createServer(); + BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); - NimBLEService *pService = pServer->createService(SERVICE_UUID); + BLEService *pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, - NIMBLE_PROPERTY::WRITE_NR | NIMBLE_PROPERTY::NOTIFY + BLECharacteristic::PROPERTY_WRITE_NR | BLECharacteristic::PROPERTY_NOTIFY ); + pCharacteristic->setAccessPermissions(ESP_GATT_PERM_WRITE); + pCharacteristic->addDescriptor(new BLE2902()); pCharacteristic->setCallbacks(new MyCharacteristicCallbacks()); pCharacteristic->setValue("0"); + pService->start(); - NimBLECharacteristic *pUuidChar = pService->createCharacteristic( + BLECharacteristic *pUuidChar = pService->createCharacteristic( UUID_CHAR_UUID, - NIMBLE_PROPERTY::READ + BLECharacteristic::PROPERTY_READ ); pUuidChar->setValue(deviceUuid, ESP_UUID_LEN); - NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising(); - pAdvertising->setName("SylDa_Server"); + BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); + pAdvertising->setScanResponse(true); + pAdvertising->setMinPreferred(0x06); + pAdvertising->setMinPreferred(0x12); + BLEDevice::startAdvertising(); - NimBLEAdvertisementData scanResp; - scanResp.setCompleteServices(NimBLEUUID(SERVICE_UUID)); - pAdvertising->setScanResponseData(scanResp); - pAdvertising->enableScanResponse(true); - - pAdvertising->setMinInterval(32); - pAdvertising->setMaxInterval(64); - bool advOk = pAdvertising->start(); - Serial.printf("BLE: advertising started as 'SylDa_Server' (start=%d, isAdv=%d)\n", - advOk, pAdvertising->isAdvertising()); + Serial.println("BLE: advertising started as 'SylDa_Server'"); if (keyProvisioned) { Serial.print("HMAC Key: ");