diff --git a/pre_build.py b/pre_build.py index 2a8e9b6..e87fadf 100644 --- a/pre_build.py +++ b/pre_build.py @@ -70,6 +70,7 @@ def patch_sdkconfig_bt(): content = f.read() defines = { + "CONFIG_BT_ENABLED": 1, "CONFIG_BTDM_CTRL_MODE_BLE_ONLY": 1, "CONFIG_BT_NIMBLE_MAX_CONNECTIONS": 1, "CONFIG_BT_NIMBLE_TASK_STACK_SIZE": 6144, @@ -158,6 +159,54 @@ def patch_nimconfig(): print("nimconfig.h patched successfully") +def patch_nimble_device(): + search_dirs = [ + os.path.join(os.getcwd(), ".pio", "libdeps"), + os.path.expanduser("~/.platformio/lib"), + ] + dev_path = None + for base in search_dirs: + if not os.path.exists(base): + continue + for root, _dirs, files in os.walk(base): + if "NimBLEDevice.cpp" in files: + dev_path = os.path.join(root, "NimBLEDevice.cpp") + break + if dev_path: + break + + if not dev_path: + print("WARNING: NimBLEDevice.cpp not found, skipping controller init patch") + return + + print(f"Patching {dev_path} to handle double BT controller init") + + with open(dev_path, 'r') as f: + content = f.read() + + # v1.4.3 code has ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg)); + old_block = ( + 'ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg));\n' + ' ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));\n' + ' ESP_ERROR_CHECK(esp_nimble_hci_init());' + ) + new_block = ( + 'if (esp_bt_controller_init(&bt_cfg) == ESP_OK) {\n' + ' ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));\n' + ' }\n' + ' ESP_ERROR_CHECK(esp_nimble_hci_init());' + ) + + if old_block in content: + content = content.replace(old_block, new_block) + with open(dev_path, 'w') as f: + f.write(content) + print(" Patched esp_bt_controller_init to skip if already initialized") + else: + print(" WARNING: Could not find init pattern in NimBLEDevice.cpp (may already be patched)") + + patch_usb_ids() patch_sdkconfig_bt() -patch_nimconfig() \ No newline at end of file +patch_nimconfig() +patch_nimble_device() \ No newline at end of file