mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-10-29 20:52:39 +00:00
Record SolarXiao Advanced build and host validation [skip ci]
This commit is contained in:
1 parent
e6b08cafab
commit
0f7b898bcb
4 files changed
+184
No files matched your search
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user