Record SolarXiao Advanced build and host validation [skip ci]

This commit is contained in:
mikecarper committed 2026-10-21 16:21:08 -07:00
1 parent e6b08cafab
commit 0f7b898bcb
4 files changed
+184

No files matched your search

+4
View File
@@ -67,6 +67,10 @@ 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 [Advanced profile build/host validation](test-results/solarxiao_advanced_2026-10-21.md).
This adds no measurements beyond existing self voltage/MCU temperature and has
not been installed on the remote Advanced board.
## MPPT carrier commands
Start with:
+1
View File
@@ -11,6 +11,7 @@ Completed validation reports, experiments, and test guides are collected here. O
## Radio and RF
- [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)
- [SolarXiao INA260 battery telemetry and carrier I2C fix, 2026-10-21](solarxiao_ina260_2026-10-21.md)
@@ -0,0 +1,105 @@
# SolarXiao Advanced carrier profile, 2026-10-21
The older SolarXiao 2W Advanced already supplies battery voltage and processor
temperature through XIAO self telemetry on channel 1. This change adds no new
physical measurements. It adds an explicit saved carrier selection, capability
reporting, live self-reading CLI aliases and guidance to existing history.
The published [Advanced Standard schematic](https://github.com/wehooper4/Meshtastic-Hardware/blob/main/XaioSeries/SolarXaio/Advanced/Standard/Schematic_SolarXaio_ADV_2025-10-23.pdf)
uses a BQ24650 analog charger. It has no INA monitor or digital charger
interface; status LEDs, charger NTC and analog setpoints are not connected to
XIAO measurement/control inputs. Firmware cannot recover panel V/I, battery
current/power, battery temperature or charger flags from that design.
Both existing `solarxiao_33S_repeater` Full and Reduced packages built and
passed package, capability and runtime memory checks. Native host fault tests
passed under ASan/UBSan. These are build/host results, not hardware acceptance.
No firmware was installed on SEA Sherwood, which the user confirmed is
unreachable. Its exact installed target, bootloader and physical revision were
not verified. The earlier Mercerwood MPPT bench report does not qualify this
new image on physical hardware.
See the [controls guide](../solarxiao_power.md) and
[machine-readable validation record](solarxiao_advanced_2026-10-21.safe.json).
## Qualified source and packages
| Item | Result |
| --- | --- |
| Application source | [`de1bb0f2e6a37b02f1a9f0995ea539c818c3abe9`](https://github.com/mikecarper/MeshCore/commit/de1bb0f2e6a37b02f1a9f0995ea539c818c3abe9) |
| Version | `v1.18.0.1-halo-keymind-cascade-dev-de1bb0f2` |
| Target / hardware ID | `solarxiao_33S_repeater` / `solarxiao_33S`, unchanged |
| EndF OTA target | `0x3caf966e`, unchanged |
| Full application | 597,816 bytes; body hash `C5339ADF076AEC89` |
| Reduced application | 567,756 bytes; body hash `68D86AA255060031` |
| Full memory check | PASS: 150,584 internal bytes available; 76,960 required |
| Reduced memory check | PASS: 152,232 internal bytes available; 76,960 required |
| DFU ZIP, UF2, linked capabilities | PASS for both profiles |
| Linked carrier commands and history | PASS for both profiles |
| Source changes to RF/PA, bootloader, flash layout or battery protection | None |
Both packaged applications retain the native MPPT marker and contain the
Advanced selector, BQ24650 capability text, live XIAO-reading response, history
guidance and unavailable-measurement explanation. Application body hashes and
EndF identity fields were checked independently. The build's artifact manifest
hashes matched every published local package, UF2 and capability file.
These packages contain compiled LoRa/Bluetooth update support. No LoRa OTA,
boot, radio forwarding, charging or electrical test was performed for this
image. Future deployment requires checking the destination's installed target
and matching board/storage-aware bootloader; no remote update was attempted.
## Host coverage
The following checks passed:
- 11 new carrier test methods, including the actual adapter, checked atomic
writer and filesystem presence boundary: explicit/default selection, restart,
corrupt/wrong-size/unreadable records, metadata errors, short writes, failed
rename, corrupt publication, ambiguous public readback and explicit recovery.
- Every Advanced/unconfirmed native service, read, write, action, telemetry and
voltage-history path produced zero native bus calls. Live XIAO ADC/MCU reads
remained available. Switching back to MPPT reloaded retained charger overrides
and restored native readings/telemetry.
- CLI parser boundaries, reply canaries for capacities 1..157, nonfinite/missing
readings and history-included/omitted builds. The role passes its actual
compiled history capability to the adapter.
- Three existing MPPT test methods, covering eight core scenarios, real
transport/atomic settings boundaries and telemetry permissions/channel order.
- Six existing XIAO battery/startup/GPIO safety checks, including negative
controls for unsafe historical GPIO sequences.
Reproduction:
```sh
python3 -m unittest discover -s test -p 'test_solarxiao*.py' -v
python3 -m unittest discover -s test -p test_xiao_battery_safety.py -v
bash build.sh build-firmware solarxiao_33S_repeater \
--firmware-version v1.18.0.1-halo-keymind-cascade-dev \
--radio-preset usa-cascadia --profile cascade
```
PlatformIO ran once at a time; the build entry point produced Full and Reduced
sequentially. Local packages and logs are retained under
`/home/mesh/hwtest/solarxiao-advanced-20261021/`.
## Using the profile after a compatible update
```text
set solar.board advanced
get solar.board
get solar capabilities
get solar readings
get solar history
```
The operator selects the board. A missing/unpowered I2C device never identifies
Advanced automatically. The absent-record default remains MPPT for existing
installations; a failed presence query must yield a complete valid record or
block native access. The separately stored selection does not alter existing
charger overrides. Selecting MPPT again re-enables and reloads those overrides.
Channel-1 voltage and MCU temperature are unchanged. Voltage/temperature history
remains the existing 30-minute, seven-day RAM history and resets on reboot.
The MCU temperature is not battery temperature, and a voltage trend does not
measure charge current, solar power or charger state.
@@ -0,0 +1,74 @@
{
"passed": true,
"scope": "host and build validation only; no device deployment or new hardware measurements",
"source_commit": "de1bb0f2e6a37b02f1a9f0995ea539c818c3abe9",
"target": "solarxiao_33S_repeater",
"version": "v1.18.0.1-halo-keymind-cascade-dev-de1bb0f2",
"new_physical_measurements": [],
"installed_on_sea_sherwood": false,
"tests": {
"solarxiao_carrier": 11,
"solarxiao_power": 3,
"xiao_battery_safety": 6,
"native_sanitizers": [
"ASan",
"UBSan"
]
},
"builds": {
"full": {
"package": "solarxiao_33S_repeater-full-ota-v1.18.0.1-halo-keymind-cascade-dev-de1bb0f2.zip",
"package_sha256": "90cf046d798897623fbc29edca8b401f4821fd1ef8678fedc675ffb50b387277",
"application_bytes": 597816,
"application_sha256": "7267fe420457c75cc4089f2709bc05683a2f73300275f8b086d8d061a5576f9a",
"body_bytes": 597760,
"body_hash": "C5339ADF076AEC89",
"ota_target": "0x3caf966e",
"hardware_id": "solarxiao_33S",
"firmware_markers": {
"native_power": true,
"explicit_carrier_selector": true,
"advanced_analog_charger": true,
"live_self_readings": true,
"history_guidance": true,
"unsupported_measurements": true
},
"memory_passed": true,
"available_internal_bytes": 150584,
"required_heap_bytes": 76960,
"capabilities_verified": true,
"update_methods": [
"bluetooth",
"lora"
],
"uf2_sha256": "f9579f2baa72bed4e01cb452946a8c80e3cf75e48b83ab3e4f2b5dff0874137e"
},
"reduced": {
"package": "solarxiao_33S_repeater-reduced-ota-v1.18.0.1-halo-keymind-cascade-dev-de1bb0f2.zip",
"package_sha256": "9eafcb7f88bd9683b064fe6bd79a6fe7ac75430b9ec06209743c2f2b66c99af6",
"application_bytes": 567756,
"application_sha256": "b314bf2a940f0dbe9dde23fcaacc44b20470cd10ffe98de0e5a9fc24dad7d709",
"body_bytes": 567700,
"body_hash": "68D86AA255060031",
"ota_target": "0x3caf966e",
"hardware_id": "solarxiao_33S",
"firmware_markers": {
"native_power": true,
"explicit_carrier_selector": true,
"advanced_analog_charger": true,
"live_self_readings": true,
"history_guidance": true,
"unsupported_measurements": true
},
"memory_passed": true,
"available_internal_bytes": 152232,
"required_heap_bytes": 76960,
"capabilities_verified": true,
"update_methods": [
"bluetooth",
"lora"
],
"uf2_sha256": "282f87c85935030ad03432d17f4201ed903d54d310dfd14981df9fb0ac35be00"
}
}
}