Record three-profile SolarXiao compatibility and build validation [skip ci]

This commit is contained in:
mikecarper committed 2026-10-21 16:49:16 -07:00
1 parent c6f1300af8
commit ad15f2ea08
4 files changed
+225 -2

No files matched your search

+1 -2
View File
@@ -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.
+1
View File
@@ -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)
@@ -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/`.
@@ -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"
}
}
}
}