diff --git a/docs/solarxiao_power.md b/docs/solarxiao_power.md index c61203b18..ae0b0f9c1 100644 --- a/docs/solarxiao_power.md +++ b/docs/solarxiao_power.md @@ -121,8 +121,7 @@ A remotely deployed node must first receive compatible firmware before these commands can be used. Deployment still requires its installed target and bootloader compatibility to be checked when it is reachable. -See the [automatic detection/Base build and host validation](test-results/solarxiao_auto_2026-10-21.md) -and [earlier manual Advanced profile validation](test-results/solarxiao_advanced_2026-10-21.md). +See the [three-profile build and host validation](test-results/solarxiao_basic_2026-10-21.md). This adds no measurements beyond existing self voltage/MCU temperature and has not been installed on the remote Advanced board. diff --git a/docs/test-results/index.md b/docs/test-results/index.md index 7915a46d6..5d8dc297e 100644 --- a/docs/test-results/index.md +++ b/docs/test-results/index.md @@ -11,6 +11,7 @@ Completed validation reports, experiments, and test guides are collected here. O ## Radio and RF +- [SolarXiao three power profiles build/host validation, 2026-10-21](solarxiao_basic_2026-10-21.md) - [SolarXiao automatic detection and Base support build/host validation, 2026-10-21](solarxiao_auto_2026-10-21.md) - [SolarXiao Advanced carrier profile build/host validation, 2026-10-21](solarxiao_advanced_2026-10-21.md) - [SolarXiao native MPPT and battery controls, 2026-10-21](solarxiao_power_2026-10-21.md) diff --git a/docs/test-results/solarxiao_basic_2026-10-21.md b/docs/test-results/solarxiao_basic_2026-10-21.md new file mode 100644 index 000000000..74d4ad15a --- /dev/null +++ b/docs/test-results/solarxiao_basic_2026-10-21.md @@ -0,0 +1,66 @@ +# SolarXiao three power profiles, 2026-10-21 + +Base and Advanced share the same onboard power telemetry: XIAO battery voltage +and MCU temperature. Their analog charger designs differ, but the published +layouts expose no additional digital charger measurements or controls. The +firmware now combines them into one Basic power profile without claiming which +charger is fitted. Additional power measurements require added hardware/wiring. + +There are three canonical choices: + +- `auto`: verify INA260 to enable MPPT; otherwise self-only, retrying. +- `basic`: Base/Advanced self readings with native power-chip access disabled. +- `mppt`: manual MPPT override, retaining independent charger write checks. + +Auto remains the default without a saved selection. Old `base` and `advanced` +command values remain compatibility aliases for `basic`, not separate modes. +Readbacks and help show only the three canonical choices. Existing Advanced +record value 1 and Base value 3 both load as Basic without a startup write. +New Basic/alias saves use value 1. MPPT and Auto retain values 0 and 2. + +Radio target choice remains independent: select the existing 30S/33S target for +the fitted E22 module. No RF settings, PA limits, OTA identities, bootloader, +flash layout, battery protection or automatic detection behavior changed. + +## Qualified source and packages + +Application source: +[`aa91fffae41465ba932f069f2a45e2a3ae1c7ad4`](https://github.com/mikecarper/MeshCore/commit/aa91fffae41465ba932f069f2a45e2a3ae1c7ad4). +Version: `v1.18.0.1-halo-keymind-cascade-dev-aa91fffa`. + +| Target | Profile | Application bytes | EndF body hash | +| --- | --- | --- | --- | +| `solarxiao_33S_repeater` | Full | 598,824 | `37EE3060D73CAB2E` | +| `solarxiao_33S_repeater` | Reduced | 568,828 | `2174A0D9CB1EA7B9` | +| `solarxiao_30S_repeater` | Full | 598,824 | `3525D6629B234891` | +| `solarxiao_30S_repeater` | Reduced | 568,828 | `8037A8127A7D324A` | + +All four DFU/UF2 builds passed linked capability, packaging and runtime memory +checks. Full has 150,576 internal bytes available; Reduced has 152,224, against +76,960 required. Independent package checks verified version, EndF body length, +body hash, unchanged target/hardware IDs, artifact hashes and linked Basic +capabilities. Every application contains the three-option help and omits the +old four-option help. PlatformIO ran one process at a time. + +## Host acceptance and scope + +All 28 checks passed: 19 carrier methods, 3 existing power methods and 6 XIAO +startup/battery safety checks. Native harnesses use ASan/UBSan. Compatibility +tests cover every old record value 0..3, both aliases, canonical Basic saves, +identical actual-adapter gating and no startup rewrite. Every out-of-range +record value 4..255 fails closed with no native bus access. + +The actual adapter retains live self readings in Basic mode while native +commands, periodic access, telemetry and voltage-history calls make no native +bus calls. Existing detection/retry, timer-wrap/long-uptime replay, persistence +fault, identity, permission, parser-boundary, canary and history checks pass. + +These are host/build results only. No device was flashed and no physical Auto, +radio, charger, boot/soak or LoRa OTA test was performed for this image. SEA +Sherwood remains unreachable and unchanged. Earlier hardware reports apply +only to their named firmware revisions. + +See the [validation record](solarxiao_basic_2026-10-21.safe.json) for package +hashes and the [controls guide](../solarxiao_power.md) for hardware sources and +commands. Packages and logs are retained under +`/home/mesh/hwtest/solarxiao-basic-20261021/`. diff --git a/docs/test-results/solarxiao_basic_2026-10-21.safe.json b/docs/test-results/solarxiao_basic_2026-10-21.safe.json new file mode 100644 index 000000000..3e5e9bada --- /dev/null +++ b/docs/test-results/solarxiao_basic_2026-10-21.safe.json @@ -0,0 +1,157 @@ +{ + "passed": true, + "scope": "build and host validation only; no hardware deployment or new physical measurements", + "source_commit": "aa91fffae41465ba932f069f2a45e2a3ae1c7ad4", + "version": "v1.18.0.1-halo-keymind-cascade-dev-aa91fffa", + "canonical_modes": [ + "auto", + "basic", + "mppt" + ], + "default_mode": "auto when no saved selection exists", + "basic_hardware": "Base and Advanced share existing XIAO battery voltage and MCU temperature; no digital onboard charger interface", + "compatibility": { + "legacy_base_alias": "basic", + "legacy_advanced_alias": "basic", + "stored_values": { + "0": "mppt", + "1": "basic (legacy Advanced)", + "2": "auto", + "3": "basic (legacy Base)" + }, + "basic_write_value": 1, + "startup_migration_writes": false, + "other_record_values": "4..255 fail closed" + }, + "automatic_detection_changed": false, + "rf_and_ota_identities_changed": false, + "installed_on_any_device": false, + "new_physical_measurements": [], + "tests": { + "carrier": 19, + "existing_native_power": 3, + "xiao_battery_safety": 6, + "total": 28, + "native_sanitizers": [ + "ASan", + "UBSan" + ], + "native-tests.log_sha256": "5abf6b2b2665575c1ae54c1816edf29d20c6e1a41c343e03a8a61831c37e4c3e", + "xiao-startup-tests.log_sha256": "cdf94fd55b36bcd5a79b86f1d200a2b0c5f6933e3b8c293d6161f6910ee4ab95" + }, + "platformio_concurrency": 1, + "builds": { + "solarxiao_33S_repeater": { + "full": { + "package": "solarxiao_33S_repeater-full-ota-v1.18.0.1-halo-keymind-cascade-dev-aa91fffa.zip", + "package_sha256": "ada220a19cc2999ddc90cc1a41735540b31672f9a890c68586fa35dd6c411431", + "application_bytes": 598824, + "application_sha256": "eec6006c4f7c920e327be7db56397c03dbe41ccc28ec6ca0b17e218efbb57529", + "body_bytes": 598768, + "body_hash": "37EE3060D73CAB2E", + "ota_target": "0x3caf966e", + "hardware_id": "solarxiao_33S", + "firmware_markers": { + "native_power": true, + "auto_verified_identity": true, + "three_canonical_options": true, + "common_basic_capabilities": true, + "live_self_readings": true, + "history_guidance": true + }, + "memory_passed": true, + "available_internal_bytes": 150576, + "required_heap_bytes": 76960, + "capabilities_verified": true, + "update_methods": [ + "bluetooth", + "lora" + ], + "uf2_sha256": "11fde81f1428243d7753f8caecb72e6f309b0a0d1312c7193d7084df260b41a5" + }, + "reduced": { + "package": "solarxiao_33S_repeater-reduced-ota-v1.18.0.1-halo-keymind-cascade-dev-aa91fffa.zip", + "package_sha256": "8e0859c8fb785203f1b618340f61f27928fa3632c4e88e8dc0b135c98ce48321", + "application_bytes": 568828, + "application_sha256": "cf96d6231a4f2d477cb8e8f2adf4bd85181bc37ebf569c0f8a1b60d1051204e3", + "body_bytes": 568772, + "body_hash": "2174A0D9CB1EA7B9", + "ota_target": "0x3caf966e", + "hardware_id": "solarxiao_33S", + "firmware_markers": { + "native_power": true, + "auto_verified_identity": true, + "three_canonical_options": true, + "common_basic_capabilities": true, + "live_self_readings": true, + "history_guidance": true + }, + "memory_passed": true, + "available_internal_bytes": 152224, + "required_heap_bytes": 76960, + "capabilities_verified": true, + "update_methods": [ + "bluetooth", + "lora" + ], + "uf2_sha256": "7e4a90de5d950b5db5cc956ac3ee4226e9aeb5dfeb3dd06b8bc6985b6eddcedb" + } + }, + "solarxiao_30S_repeater": { + "full": { + "package": "solarxiao_30S_repeater-full-ota-v1.18.0.1-halo-keymind-cascade-dev-aa91fffa.zip", + "package_sha256": "beed4c6c5e42437d8a430c03f4a648d50fc16e250a5eaece8a2c6eefaa6f5cd3", + "application_bytes": 598824, + "application_sha256": "d1546cd1fd2efdb919091807930370bde13ec731fb20f57137718ef1556b56f0", + "body_bytes": 598768, + "body_hash": "3525D6629B234891", + "ota_target": "0xb38ebf22", + "hardware_id": "solarxiao_30S", + "firmware_markers": { + "native_power": true, + "auto_verified_identity": true, + "three_canonical_options": true, + "common_basic_capabilities": true, + "live_self_readings": true, + "history_guidance": true + }, + "memory_passed": true, + "available_internal_bytes": 150576, + "required_heap_bytes": 76960, + "capabilities_verified": true, + "update_methods": [ + "bluetooth", + "lora" + ], + "uf2_sha256": "6361cbf15dd789b9c8beff61c0ca011ed716263877fc5169889957a2fefd979c" + }, + "reduced": { + "package": "solarxiao_30S_repeater-reduced-ota-v1.18.0.1-halo-keymind-cascade-dev-aa91fffa.zip", + "package_sha256": "dfecb300f88c8304468aa5930e3b45c1a632ede974fc3276bc12cfae8c343549", + "application_bytes": 568828, + "application_sha256": "f5cf0c3f34dfec07519d63c51b23b3995dc5b3f187a254a85f6fcf4113d2c7ae", + "body_bytes": 568772, + "body_hash": "8037A8127A7D324A", + "ota_target": "0xb38ebf22", + "hardware_id": "solarxiao_30S", + "firmware_markers": { + "native_power": true, + "auto_verified_identity": true, + "three_canonical_options": true, + "common_basic_capabilities": true, + "live_self_readings": true, + "history_guidance": true + }, + "memory_passed": true, + "available_internal_bytes": 152224, + "required_heap_bytes": 76960, + "capabilities_verified": true, + "update_methods": [ + "bluetooth", + "lora" + ], + "uf2_sha256": "9ddd3ad99bd5e5ad84794727db587ba39dc55ce985003125a266e3bad5e4658b" + } + } + } +}