From 0ba00212799755e13cda939250fe51d7926799f7 Mon Sep 17 00:00:00 2001 From: h2zero Date: Wed, 10 Sep 2025 13:57:54 -0600 Subject: [PATCH 1/4] Update bootloader options --- .github/workflows/examples.yml | 10 ++++-- boards/BT5032A_TB.json | 29 +++++++++++++--- boards/adafruit_clue_nrf52840.json | 32 ++++++++++++++++-- boards/adafruit_cplaynrf52840.json | 32 ++++++++++++++++-- boards/adafruit_feather_nrf52832.json | 29 +++++++++++++--- boards/adafruit_feather_nrf52840.json | 32 ++++++++++++++++-- boards/adafruit_feather_nrf52840_sense.json | 32 ++++++++++++++++-- boards/adafruit_itsybitsy_nrf52840.json | 32 ++++++++++++++++-- boards/bluey.json | 27 ++++++++++++++- boards/generic_nrf52832.json | 27 ++++++++++++++- boards/generic_nrf52833.json | 27 ++++++++++++++- boards/generic_nrf52840.json | 35 ++++++++++++++++++- boards/hackaBLE.json | 26 ++++++++++++++- boards/hackaBLE_v2.json | 27 ++++++++++++++- boards/nrf52832_dk.json | 27 ++++++++++++++- boards/nrf52833_dk.json | 27 ++++++++++++++- boards/nrf52840_dk.json | 35 ++++++++++++++++++- boards/redbear_blenano2.json | 27 ++++++++++++++- boards/redbear_blend2.json | 27 ++++++++++++++- boards/seeed_xiao_nrf52840_sense.json | 37 +++++++++++++-------- builder/frameworks/arduino/nrf5.py | 31 +++++++++-------- examples/BLE-client-test/platformio.ini | 12 +++---- examples/BLE-server-test/platformio.ini | 12 +++---- 23 files changed, 556 insertions(+), 76 deletions(-) diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index a565a77..ea44cff 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -1,6 +1,12 @@ name: Examples -on: [push, pull_request] +on: + push: + branches: + - master + pull_request: + branches: + - master jobs: build: @@ -14,7 +20,7 @@ jobs: - "examples/BLE-server-test" runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: submodules: "recursive" - name: Set up Python ${{ matrix.python-version }} diff --git a/boards/BT5032A_TB.json b/boards/BT5032A_TB.json index 126c8ee..48a3a63 100644 --- a/boards/BT5032A_TB.json +++ b/boards/BT5032A_TB.json @@ -10,9 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "BT5032A_TB" }, - "bootloaders": { - "adafruit": "0x7F000" - }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -36,7 +54,10 @@ "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://www.ebyte.com/en/product-view-news.html?id=956", "vendor": "Ebyte" diff --git a/boards/adafruit_clue_nrf52840.json b/boards/adafruit_clue_nrf52840.json index 3d32a1c..789b012 100644 --- a/boards/adafruit_clue_nrf52840.json +++ b/boards/adafruit_clue_nrf52840.json @@ -25,9 +25,35 @@ "mcu": "nrf52840_xxaa", "variant": "clue_nrf52840" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v6", + "connectivity": [ "bluetooth" ], diff --git a/boards/adafruit_cplaynrf52840.json b/boards/adafruit_cplaynrf52840.json index 8aed876..28577d6 100644 --- a/boards/adafruit_cplaynrf52840.json +++ b/boards/adafruit_cplaynrf52840.json @@ -25,9 +25,35 @@ "mcu": "nrf52840_xxaa", "variant": "circuitplayground_nrf52840" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v6", + "connectivity": [ "bluetooth" ], diff --git a/boards/adafruit_feather_nrf52832.json b/boards/adafruit_feather_nrf52832.json index 6ad2992..e308c54 100644 --- a/boards/adafruit_feather_nrf52832.json +++ b/boards/adafruit_feather_nrf52832.json @@ -10,9 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "feather_nrf52832" }, - "bootloaders": { - "adafruit": "0x7F000" - }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "adafruit_s132_v6", + "connectivity": [ "bluetooth" ], @@ -36,7 +54,10 @@ "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": true, + "require_upload_port": true, + "wait_for_upload_port": true }, "url": "https://www.adafruit.com/product/3406", "vendor": "Adafruit" diff --git a/boards/adafruit_feather_nrf52840.json b/boards/adafruit_feather_nrf52840.json index e60aa92..3f723df 100644 --- a/boards/adafruit_feather_nrf52840.json +++ b/boards/adafruit_feather_nrf52840.json @@ -29,9 +29,35 @@ "mcu": "nrf52840_xxaa", "variant": "feather_nrf52840_express" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v6", + "connectivity": [ "bluetooth" ], diff --git a/boards/adafruit_feather_nrf52840_sense.json b/boards/adafruit_feather_nrf52840_sense.json index c5d9191..30a927e 100644 --- a/boards/adafruit_feather_nrf52840_sense.json +++ b/boards/adafruit_feather_nrf52840_sense.json @@ -29,9 +29,35 @@ "mcu": "nrf52840_xxaa", "variant": "feather_nrf52840_sense" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v6", + "connectivity": [ "bluetooth" ], diff --git a/boards/adafruit_itsybitsy_nrf52840.json b/boards/adafruit_itsybitsy_nrf52840.json index e509cca..f15084f 100644 --- a/boards/adafruit_itsybitsy_nrf52840.json +++ b/boards/adafruit_itsybitsy_nrf52840.json @@ -29,9 +29,35 @@ "mcu": "nrf52840_xxaa", "variant": "itsybitsy_nrf52840_express" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v6", + "connectivity": [ "bluetooth" ], diff --git a/boards/bluey.json b/boards/bluey.json index a813f2c..3e42d53 100644 --- a/boards/bluey.json +++ b/boards/bluey.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "bluey" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -28,10 +49,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://electronut.in/portfolio/bluey/", "vendor": "Electronut Labs" diff --git a/boards/generic_nrf52832.json b/boards/generic_nrf52832.json index 49e1880..4732404 100644 --- a/boards/generic_nrf52832.json +++ b/boards/generic_nrf52832.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "Generic" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -28,10 +49,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://www.nordicsemi.com/Products/Bluetooth-Low-Energy", "vendor": "Generic" diff --git a/boards/generic_nrf52833.json b/boards/generic_nrf52833.json index 7975487..e98529e 100644 --- a/boards/generic_nrf52833.json +++ b/boards/generic_nrf52833.json @@ -10,6 +10,27 @@ "mcu": "nrf52833_xxaa", "variant": "Generic" }, + "bootloaders": [ + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52833_s140_v7_adabl.hex", + "linker_script": "nrf52833_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 262144, + "max_ram_size": 106496 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52833_serial_adabl.hex", + "linker_script": "nrf52833_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 131064 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -28,10 +49,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": true, + "require_upload_port": true, + "wait_for_upload_port": true }, "url": "https://www.nordicsemi.com/Products/Bluetooth-Low-Energy", "vendor": "Generic" diff --git a/boards/generic_nrf52840.json b/boards/generic_nrf52840.json index 4dc7bbd..c9f5977 100644 --- a/boards/generic_nrf52840.json +++ b/boards/generic_nrf52840.json @@ -10,6 +10,35 @@ "mcu": "nrf52840_xxaa", "variant": "Generic" }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -28,10 +57,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": true, + "require_upload_port": true, + "wait_for_upload_port": true }, "url": "https://www.nordicsemi.com/Products/Bluetooth-Low-Energy", "vendor": "Generic" diff --git a/boards/hackaBLE.json b/boards/hackaBLE.json index 41a2f9f..6642e29 100644 --- a/boards/hackaBLE.json +++ b/boards/hackaBLE.json @@ -10,6 +10,26 @@ "mcu": "nrf52832_xxaa", "variant": "hackaBLE" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", "connectivity": [ "bluetooth" ], @@ -28,10 +48,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://electronut.in/portfolio/hackaBLE/", "vendor": "Electronut Labs" diff --git a/boards/hackaBLE_v2.json b/boards/hackaBLE_v2.json index 17e3c50..31bddd9 100644 --- a/boards/hackaBLE_v2.json +++ b/boards/hackaBLE_v2.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "hackaBLE_v2" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -28,10 +49,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "cmsis-dap", "blackmagic" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://electronut.in/portfolio/hackaBLE/", "vendor": "Electronut Labs" diff --git a/boards/nrf52832_dk.json b/boards/nrf52832_dk.json index 0ecc2b5..8f388cd 100644 --- a/boards/nrf52832_dk.json +++ b/boards/nrf52832_dk.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "nRF52832_DK" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -35,10 +56,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "blackmagic", "cmsis-dap" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://www.nordicsemi.com/Products/Development-hardware/nRF52-DK/", "vendor": "Nordic" diff --git a/boards/nrf52833_dk.json b/boards/nrf52833_dk.json index b29ddad..6db40b8 100644 --- a/boards/nrf52833_dk.json +++ b/boards/nrf52833_dk.json @@ -10,6 +10,27 @@ "mcu": "nrf52833_xxaa", "variant": "nRF52833_DK" }, + "bootloaders": [ + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52833_s140_v7_adabl.hex", + "linker_script": "nrf52833_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 262144, + "max_ram_size": 106496 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52833_serial_adabl.hex", + "linker_script": "nrf52833_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 131064 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -35,10 +56,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "blackmagic", "cmsis-dap" - ] + ], + "use_1200bps_touch": true, + "require_upload_port": true, + "wait_for_upload_port": true }, "url": "https://www.nordicsemi.com/Products/Development-hardware/nrf52833-dk/", "vendor": "Nordic" diff --git a/boards/nrf52840_dk.json b/boards/nrf52840_dk.json index dc5859d..69c1f40 100644 --- a/boards/nrf52840_dk.json +++ b/boards/nrf52840_dk.json @@ -10,6 +10,35 @@ "mcu": "nrf52840_xxaa", "variant": "nRF52840_DK" }, + "bootloaders": [ + { + "name": "adafruit_s140_v6", + "bootloader_file": "nrf52840_s140_v6_adabl.hex", + "linker_script": "nrf52840_s140_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 827392, + "max_ram_size": 237568 + }, + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -35,10 +64,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "blackmagic", "cmsis-dap" - ] + ], + "use_1200bps_touch": true, + "require_upload_port": true, + "wait_for_upload_port": true }, "url": "https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK", "vendor": "Nordic" diff --git a/boards/redbear_blenano2.json b/boards/redbear_blenano2.json index dd5b6e4..5f5517a 100644 --- a/boards/redbear_blenano2.json +++ b/boards/redbear_blenano2.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "RedBear_BLENano2" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -31,10 +52,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "blackmagic", "cmsis-dap" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://redbear.cc/product/ble-nano-2-soldered.html", "vendor": "RedBearLab" diff --git a/boards/redbear_blend2.json b/boards/redbear_blend2.json index c4aa223..5633ad4 100644 --- a/boards/redbear_blend2.json +++ b/boards/redbear_blend2.json @@ -10,6 +10,27 @@ "mcu": "nrf52832_xxaa", "variant": "RedBear_Blend2" }, + "bootloaders": [ + { + "name": "adafruit_s132_v6", + "bootloader_file": "nrf52832_s132_v6_adabl.hex", + "linker_script": "nrf52832_s132_v6_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 303104, + "max_ram_size": 51712 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52832_serial_adabl.hex", + "linker_script": "nrf52832_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 454656, + "max_ram_size": 65528 + } + ], + + "default_bootloader": "none", + "connectivity": [ "bluetooth" ], @@ -31,10 +52,14 @@ "protocols": [ "jlink", "nrfjprog", + "adafruit-nrfutil", "stlink", "blackmagic", "cmsis-dap" - ] + ], + "use_1200bps_touch": false, + "require_upload_port": false, + "wait_for_upload_port": false }, "url": "https://redbear.cc/product/ble/blend-2.html", "vendor": "RedBearLab" diff --git a/boards/seeed_xiao_nrf52840_sense.json b/boards/seeed_xiao_nrf52840_sense.json index 6e67e56..7b77a28 100644 --- a/boards/seeed_xiao_nrf52840_sense.json +++ b/boards/seeed_xiao_nrf52840_sense.json @@ -1,7 +1,7 @@ { "build": { "arduino": { - "ldscript": "nrf52840_s140_v7_seeed.ld" + "ldscript": "nrf52840_xxaa.ld" }, "core": "nRF5", "cpu": "cortex-m4", @@ -19,23 +19,34 @@ ], "mcu": "nrf52840", "variant": "Seeed_XIAO_nRF52840_Sense", - "softdevice": { - "sd_flags": "-DS140", - "sd_name": "s140", - "sd_version": "7.3.0", - "sd_fwid": "0x0123" - }, "usb_product": "XIAO nRF52840 Sense" }, - "bootloaders": { - "adafruit": "0xFF000" - }, + "bootloaders": [ + { + "name": "adafruit_s140_v7", + "bootloader_file": "nrf52840_s140_v7_adabl.hex", + "linker_script": "nrf52840_s140_v7_adabl.ld", + "flags": ["USE_ADA_BL", "ADA_SD_BL"], + "max_size": 823296, + "max_ram_size": 237568 + }, + { + "name": "adafruit_serial", + "bootloader_file": "nrf52840_serial_adabl.hex", + "linker_script": "nrf52840_serial_adabl.ld", + "flags": ["USE_ADA_BL"], + "max_size": 978944, + "max_ram_size": 262136 + } + ], + + "default_bootloader": "adafruit_s140_v7", + "connectivity": [ "bluetooth" ], "debug": { "jlink_device": "nRF52840_xxAA", - "openocd_target": "nrf52.cfg", "svd_path": "nrf52840.svd" }, "frameworks": [ @@ -43,8 +54,8 @@ ], "name": "Seeed XIAO BLE Sense", "upload": { - "maximum_ram_size": 237568, - "maximum_size": 823296, + "maximum_ram_size": 262144, + "maximum_size": 1032192, "protocol": "adafruit-nrfutil", "speed": 115200, "protocols": [ diff --git a/builder/frameworks/arduino/nrf5.py b/builder/frameworks/arduino/nrf5.py index 73b74db..56af0bf 100644 --- a/builder/frameworks/arduino/nrf5.py +++ b/builder/frameworks/arduino/nrf5.py @@ -162,28 +162,33 @@ if not board.get("build.ldscript", ""): env.Replace(LDSCRIPT_PATH=board.get("build.arduino.ldscript", "")) -bootloader_opts = board.get("bootloaders", "") +bootloader_opts = board.get("bootloaders", []) bootloader_sel = env.GetProjectOption("board_bootloader", "") -ldscript = board.get("build.arduino.ldscript", "") if bootloader_opts: if not bootloader_sel: - sys.stderr.write("Error. Board type requires board_bootloader to be specified\n") - env.Exit(1) + bootloader_sel = board.get("default_bootloader", "none") + + selected_bl = None + for bl in bootloader_opts: + if bl.get("name") == bootloader_sel: + selected_bl = bl + break - if bootloader_sel not in bootloader_opts and bootloader_sel != "none": + if not selected_bl and bootloader_sel != "none": sys.stderr.write( "Error. Invalid board_bootloader selection. Options are: %s or none\n" % - " ".join(k for k in bootloader_opts.keys())) + " ".join(bl.get("name", "") for bl in bootloader_opts)) env.Exit(1) - if bootloader_sel == "adafruit": - env.Replace(BOOTLOADERHEX=join(FRAMEWORK_DIR, "variants", board.get("build.variant", ""), "ada_bootloader.hex")) - # Update the linker file for bootloader use and set a flag for the build. - env.Append(CPPDEFINES=["USE_ADA_BL"]) - env.Replace(LDSCRIPT_PATH=ldscript[:-3] + "_adabl" + ldscript[-3:]) - board.update("upload.maximum_size", board.get("upload.maximum_size") - 53248) - board.update("upload.maximum_ram_size", board.get("upload.maximum_ram_size") - 8) + if selected_bl: + # Use bootloader_file, linker_script, max_size, max_ram_size from selected_bl + env.Replace(BOOTLOADERHEX=join(FRAMEWORK_DIR, "variants", board.get("build.variant", ""), selected_bl["bootloader_file"])) + if "flags" in selected_bl: + env.Append(CPPDEFINES=selected_bl["flags"]) + env.Replace(LDSCRIPT_PATH=selected_bl["linker_script"]) + board.update("upload.maximum_size", selected_bl["max_size"]) + board.update("upload.maximum_ram_size", selected_bl["max_ram_size"]) cpp_defines = env.Flatten(env.get("CPPDEFINES", [])) diff --git a/examples/BLE-client-test/platformio.ini b/examples/BLE-client-test/platformio.ini index d9974f2..0e782b1 100644 --- a/examples/BLE-client-test/platformio.ini +++ b/examples/BLE-client-test/platformio.ini @@ -52,37 +52,31 @@ build_flags = ${common.build_flags} [env:adafruit_clue_nrf52840] board = adafruit_clue_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_cplaynrf52840] board = adafruit_cplaynrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52832] board = adafruit_feather_nrf52832 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840_sense] board = adafruit_feather_nrf52840_sense -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840] board = adafruit_feather_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_itsybitsy_nrf52840] board = adafruit_itsybitsy_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} @@ -108,7 +102,6 @@ build_flags = ${common.build_flags} [env:BT5032A_TB] board = BT5032A_TB -board_bootloader = none lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} @@ -197,6 +190,11 @@ board = seeedTinyBLE lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} +[env:seeed_xiao_nrf52840_sense] +board = seeed_xiao_nrf52840_sense +lib_deps = ${common.lib_deps} +build_flags = ${common.build_flags} + [env:Sinobit] board = Sinobit lib_deps = ${common.lib_deps} diff --git a/examples/BLE-server-test/platformio.ini b/examples/BLE-server-test/platformio.ini index 420bd26..6033df3 100644 --- a/examples/BLE-server-test/platformio.ini +++ b/examples/BLE-server-test/platformio.ini @@ -52,37 +52,31 @@ build_flags = ${common.build_flags} [env:adafruit_clue_nrf52840] board = adafruit_clue_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_cplaynrf52840] board = adafruit_cplaynrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52832] board = adafruit_feather_nrf52832 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840_sense] board = adafruit_feather_nrf52840_sense -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840] board = adafruit_feather_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} [env:adafruit_itsybitsy_nrf52840] board = adafruit_itsybitsy_nrf52840 -board_bootloader = adafruit lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} @@ -108,7 +102,6 @@ build_flags = ${common.build_flags} [env:BT5032A_TB] board = BT5032A_TB -board_bootloader = none lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} @@ -197,6 +190,11 @@ board = seeedTinyBLE lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} +[env:seeed_xiao_nrf52840_sense] +board = seeed_xiao_nrf52840_sense +lib_deps = ${common.lib_deps} +build_flags = ${common.build_flags} + [env:Sinobit] board = Sinobit lib_deps = ${common.lib_deps} From 7cc00d257475b3cd23096841ba7bd466652bee2e Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:04:19 -0700 Subject: [PATCH 2/4] Add validation for required bootloader fields --- builder/frameworks/arduino/nrf5.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/builder/frameworks/arduino/nrf5.py b/builder/frameworks/arduino/nrf5.py index 56af0bf..60a540b 100644 --- a/builder/frameworks/arduino/nrf5.py +++ b/builder/frameworks/arduino/nrf5.py @@ -182,6 +182,15 @@ env.Exit(1) if selected_bl: + # Validate required bootloader fields + required_fields = ["bootloader_file", "linker_script", "max_size", "max_ram_size"] + missing_fields = [field for field in required_fields if field not in selected_bl] + if missing_fields: + sys.stderr.write( + "Error. Bootloader '%s' is missing required fields: %s\n" % + (selected_bl.get("name", "unknown"), ", ".join(missing_fields))) + env.Exit(1) + # Use bootloader_file, linker_script, max_size, max_ram_size from selected_bl env.Replace(BOOTLOADERHEX=join(FRAMEWORK_DIR, "variants", board.get("build.variant", ""), selected_bl["bootloader_file"])) if "flags" in selected_bl: From 874eb78fdcbb40eb8571c88718c5d08505fb100f Mon Sep 17 00:00:00 2001 From: h2zero Date: Sat, 24 Jan 2026 09:01:51 -0700 Subject: [PATCH 3/4] Update example builds --- examples/BLE-client-test/platformio.ini | 77 ------------------------- examples/BLE-server-test/platformio.ini | 77 ------------------------- 2 files changed, 154 deletions(-) diff --git a/examples/BLE-client-test/platformio.ini b/examples/BLE-client-test/platformio.ini index 0e782b1..66c14b0 100644 --- a/examples/BLE-client-test/platformio.ini +++ b/examples/BLE-client-test/platformio.ini @@ -12,8 +12,6 @@ platform = n-able framework = arduino monitor_speed=115200 - -[common] lib_deps = h2zero/NimBLE-Arduino build_flags = '-DCONFIG_NIMBLE_CPP_LOG_LEVEL=0' @@ -22,186 +20,111 @@ build_flags = [env:generic_nrf51822_xxaa] board = generic_nrf51822_xxaa -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf51822_xxac] board = generic_nrf51822_xxac -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52810] board = generic_nrf52810 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52832] board = generic_nrf52832 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52833] board = generic_nrf52833 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52840] board = generic_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_clue_nrf52840] board = adafruit_clue_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_cplaynrf52840] board = adafruit_cplaynrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52832] board = adafruit_feather_nrf52832 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840_sense] board = adafruit_feather_nrf52840_sense -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840] board = adafruit_feather_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_itsybitsy_nrf52840] board = adafruit_itsybitsy_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bbcmicrobit] board = bbcmicrobit -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bbcmicrobitv2] board = bbcmicrobitv2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bluey] board = bluey -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bluz_dk] board = bluz_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:BT5032A_TB] board = BT5032A_TB -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:BT5040] board = BT5040 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:calliope_mini] board = calliope_mini -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:hackaBLE] board = hackaBLE -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:hackaBLE_v2] board = hackaBLE_v2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:ng_beacon] board = ng_beacon -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf51_dk] board = nrf51_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf51_dongle] board = nrf51_dongle -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52832_dk] board = nrf52832_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52833_dk] board = nrf52833_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52840_dongle] board = nrf52840_dongle -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52840_dk] board = nrf52840_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:oshchip] board = oshchip -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_nRF51822] board = redbear_nRF51822 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blenano] board = redbear_blenano -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blenano2] board = redbear_blenano2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blend2] board = redbear_blend2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:seeedTinyBLE] board = seeedTinyBLE -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:seeed_xiao_nrf52840_sense] board = seeed_xiao_nrf52840_sense -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:Sinobit] board = Sinobit -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:waveshare_ble400] board = waveshare_ble400 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} - diff --git a/examples/BLE-server-test/platformio.ini b/examples/BLE-server-test/platformio.ini index 6033df3..04b1d91 100644 --- a/examples/BLE-server-test/platformio.ini +++ b/examples/BLE-server-test/platformio.ini @@ -12,8 +12,6 @@ platform = n-able framework = arduino monitor_speed=115200 - -[common] lib_deps = h2zero/NimBLE-Arduino build_flags = '-DCONFIG_NIMBLE_CPP_LOG_LEVEL=0' @@ -22,186 +20,111 @@ build_flags = [env:generic_nrf51822_xxaa] board = generic_nrf51822_xxaa -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf51822_xxac] board = generic_nrf51822_xxac -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52810] board = generic_nrf52810 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52832] board = generic_nrf52832 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52833] board = generic_nrf52833 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:generic_nrf52840] board = generic_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_clue_nrf52840] board = adafruit_clue_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_cplaynrf52840] board = adafruit_cplaynrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52832] board = adafruit_feather_nrf52832 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840_sense] board = adafruit_feather_nrf52840_sense -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_feather_nrf52840] board = adafruit_feather_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:adafruit_itsybitsy_nrf52840] board = adafruit_itsybitsy_nrf52840 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bbcmicrobit] board = bbcmicrobit -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bbcmicrobitv2] board = bbcmicrobitv2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bluey] board = bluey -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:bluz_dk] board = bluz_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:BT5032A_TB] board = BT5032A_TB -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:BT5040] board = BT5040 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:calliope_mini] board = calliope_mini -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:hackaBLE] board = hackaBLE -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:hackaBLE_v2] board = hackaBLE_v2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:ng_beacon] board = ng_beacon -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf51_dk] board = nrf51_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf51_dongle] board = nrf51_dongle -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52832_dk] board = nrf52832_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52833_dk] board = nrf52833_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52840_dongle] board = nrf52840_dongle -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:nrf52840_dk] board = nrf52840_dk -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:oshchip] board = oshchip -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_nRF51822] board = redbear_nRF51822 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blenano] board = redbear_blenano -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blenano2] board = redbear_blenano2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:redbear_blend2] board = redbear_blend2 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:seeedTinyBLE] board = seeedTinyBLE -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:seeed_xiao_nrf52840_sense] board = seeed_xiao_nrf52840_sense -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:Sinobit] board = Sinobit -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} [env:waveshare_ble400] board = waveshare_ble400 -lib_deps = ${common.lib_deps} -build_flags = ${common.build_flags} - From 4b7172445111da11badd76069eb875c39eeccf14 Mon Sep 17 00:00:00 2001 From: h2zero Date: Sat, 24 Jan 2026 15:05:33 -0700 Subject: [PATCH 4/4] test