diff --git a/.gitmodules b/.gitmodules index aa6ce05..baccdef 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "firmware/rc52-headless-companion"] path = firmware/rc52-headless-companion url = https://github.com/n30nex/NeonPocketMC-RC52-Headless.git +[submodule "firmware/rcc6-headless-companion"] + path = firmware/rcc6-headless-companion + url = https://github.com/n30nex/NeonPocketMC-RCC6-Headless.git diff --git a/README.md b/README.md index 421e8ad..682e592 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ Each product release is pinned to an exact source commit and artifact checksum i | RC52-L62 | Headless Room Server | [v1.1.0-rc.2](https://github.com/n30nex/NeonPocketMC-RC52-Repeater/releases/tag/v1.1.0-rc.2) | Copy the headless Room Server `.uf2` | | RC52-L62 + NV3001B TFT | Room Server with local dashboard | [v1.1.0-rc.2](https://github.com/n30nex/NeonPocketMC-RC52-Repeater/releases/tag/v1.1.0-rc.2) | Copy the TFT Room Server `.uf2` | | RCC6 + NV3001B TFT | Ultimate BLE, native-USB, or Wi-Fi Web companion | [v2.3.0-rc.3](https://github.com/n30nex/NeonPocketMC-RCC6/releases/tag/v2.3.0-rc.3) | Flash the selected app `.bin` at `0x10000` | +| RCC6 without TFT | Screenless BLE, native-USB, or Wi-Fi Web/TCP companion | [v1.0.0-rc.1](https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/tag/v1.0.0-rc.1) | Flash the selected app `.bin` at `0x10000` | | RCC6 | Ultimate MQTT observer/repeater with setup WebUI | [v1.3.0-rc.1](https://github.com/n30nex/NeonPocketMC-RCC6-Repeater/releases/tag/v1.3.0-rc.1) | Flash the observer app at `0x10000`, then run the configurator | | RCC6, TFT optional | Ultimate minimal or full Room Server | [v1.3.0-rc.1](https://github.com/n30nex/NeonPocketMC-RCC6-Repeater/releases/tag/v1.3.0-rc.1) | Pick minimal/full and headless/TFT, then flash its app at `0x10000` | | SenseCAP Indicator D1L | DeskOS touch companion with repeater and room management | [v1.7.9](https://github.com/n30nex/DeskOS-MeshCore/releases/tag/v1.7.9) | Existing DeskOS: app at `0x20000`; fresh install: full 8 MB image at `0x0` | @@ -162,7 +163,7 @@ Exact install filenames, sizes, SHA-256 values, release links, and source commit ## Source layout -The eight firmware histories intentionally remain separate because they target different chips, bootloaders, transports, displays, and deployment roles. This repository indexes them as pinned Git submodules: +The nine firmware histories intentionally remain separate because they target different chips, bootloaders, transports, displays, and deployment roles. This repository indexes them as pinned Git submodules: ```text firmware/ @@ -172,6 +173,7 @@ firmware/ rc52-headless-companion/ rc52-repeater/ rcc6-companion/ + rcc6-headless-companion/ rcc6-mqtt-repeater/ deskos-meshcore/ ``` @@ -206,4 +208,4 @@ Room Server profiles, animated companion startup, RCC6 Diagnostics, and one-butt [`scripts/verify_catalog.py`](scripts/verify_catalog.py) confirms each Git submodule pin, release URL, digest, and catalog invariant. Product repositories retain their own exact-target build workflows and hardware-specific release evidence. -Root documentation and catalog code are MIT licensed. Each of the eight firmware submodules retains its own upstream and third-party licenses. +Root documentation and catalog code are MIT licensed. Each of the nine firmware submodules retains its own upstream and third-party licenses. diff --git a/catalog.json b/catalog.json index daf0e2d..d8012be 100644 --- a/catalog.json +++ b/catalog.json @@ -1,6 +1,6 @@ { "schema": 1, - "suite_version": "1.7.0-rc.1", + "suite_version": "1.8.0-rc.1", "products": [ { "id": "heltec-v3-companion", @@ -108,6 +108,25 @@ {"name": "NeonPocketMC-RCC6-Ultimate-Web-v2.3.0-rc.3.npu", "size": 1486269, "sha256": "37d444530d52162d710e7fb0bd305d4a68d209233c566c71de3c511b1600cffc", "url": "https://github.com/n30nex/NeonPocketMC-RCC6/releases/download/v2.3.0-rc.3/NeonPocketMC-RCC6-Ultimate-Web-v2.3.0-rc.3.npu"} ] }, + { + "id": "rcc6-headless-companion", + "hardware": "Heltec RadioCore RCC6-L62 without TFT", + "role": "Screenless BLE, native-USB, or Wi-Fi Web/TCP companion", + "repository": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless", + "release": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/tag/v1.0.0-rc.1", + "tag": "v1.0.0-rc.1", + "commit": "4c91a5e25f24f483fa206acc4125404dfef3b9f3", + "submodule": "firmware/rcc6-headless-companion", + "profiles": ["ble-companion-headless", "usb-companion-headless", "web-ap-companion-headless"], + "artifacts": [ + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-BLE-app.bin", "size": 1475632, "sha256": "94891209e1b9636793d640803f7fdad342d34dcf0c7efe4a621095eddefb9c45", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-BLE-app.bin"}, + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-BLE-recovery-resets-nvs-preserves-meshcore-storage.bin", "size": 1541168, "sha256": "e147ca0b4fe9e45cad904477ce1f86c527d732f7347334bb5aadddac20e0f8d5", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-BLE-recovery-resets-nvs-preserves-meshcore-storage.bin"}, + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-USB-app.bin", "size": 562624, "sha256": "69ab501a221f0765e5175d93eba2e3f9e938bf017ee618c4c3893225c19469ae", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-USB-app.bin"}, + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-USB-recovery-resets-nvs-preserves-meshcore-storage.bin", "size": 628160, "sha256": "414dee406aed8e2cda881328145baa2da6d2e9b1f45b02b3928ca6cb72362396", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-USB-recovery-resets-nvs-preserves-meshcore-storage.bin"}, + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-Web-app.bin", "size": 1377568, "sha256": "3cf0551afd948c310c79ba9b69b1e9e32eaf4a93ef4f296bf6252bc5ec811d58", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-Web-app.bin"}, + {"name": "NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-Web-recovery-resets-nvs-preserves-meshcore-storage.bin", "size": 1443104, "sha256": "4806348e6fe00d88af584bd820f54655afe0f7c0d4905aff42c802c435adea9b", "url": "https://github.com/n30nex/NeonPocketMC-RCC6-Headless/releases/download/v1.0.0-rc.1/NeonPocketMC-RCC6-Headless-v1.0.0-rc.1-Web-recovery-resets-nvs-preserves-meshcore-storage.bin"} + ] + }, { "id": "rcc6-server", "hardware": "Heltec RadioCore RCC6", diff --git a/docs/releases/1.8-RC1.md b/docs/releases/1.8-RC1.md new file mode 100644 index 0000000..45802b8 --- /dev/null +++ b/docs/releases/1.8-RC1.md @@ -0,0 +1,22 @@ +# NeonPocketMC suite v1.8.0 RC1 + +Suite 1.8 RC1 adds the dedicated screenless RCC6 companion family without duplicating product-owned firmware binaries. + +## RCC6 headless companion + +- Hardware: Heltec RadioCore RCC6-L62/SX1262 without the NV3001B TFT. +- Transports: standard MeshCore BLE, native USB, or Wi-Fi WebUI plus TCP/5000. +- BLE default pairing PIN: `123456`; a previously saved nonzero PIN still takes precedence. +- Normal installation: flash the selected application image at `0x10000`. +- Recovery images reset NVS-backed BLE/Wi-Fi state but end before SPIFFS, preserving MeshCore identity, contacts, channels, and preferences. +- Wi-Fi setup credentials and the resulting LAN IP are printed on the 115200-baud USB console. + +The trusted-LAN warning matters: raw TCP/5000 exposes the full companion and administrative protocol to every client that can reach it. + +The existing RC52 and RCC6 repeater/Room Server repositories already provide their screenless service profiles, so this suite release does not create duplicate repeater products. + +## Suite assets + +- `catalog.json` records every product release URL, exact source commit, install filename, size, and SHA-256 digest. +- `SHA256SUMS.txt` authenticates the catalog and exact suite source bundle. +- Product repositories remain the single owners of firmware binaries and setup packages. diff --git a/firmware/rcc6-headless-companion b/firmware/rcc6-headless-companion new file mode 160000 index 0000000..4c91a5e --- /dev/null +++ b/firmware/rcc6-headless-companion @@ -0,0 +1 @@ +Subproject commit 4c91a5e25f24f483fa206acc4125404dfef3b9f3 diff --git a/scripts/verify_catalog.py b/scripts/verify_catalog.py index b95c21f..d2e6c74 100644 --- a/scripts/verify_catalog.py +++ b/scripts/verify_catalog.py @@ -26,7 +26,7 @@ def main() -> None: data = json.loads(CATALOG.read_text(encoding="utf-8")) assert data["schema"] == 1 products = data["products"] - assert len(products) == 8 + assert len(products) == 9 ids: set[str] = set() names: set[str] = set()