Commit Graph
3 Commits
Author SHA1 Message Date
liquidraver 187a44060d close out the restructure's open items
- boot_info: label the ESP32 reset reasons Zephyr's hwinfo driver maps to 0
  (USB-Serial-JTAG/JTAG reset -> DEBUG, power glitch -> BROWNOUT, CPU lockup,
  eFuse -> HARDWARE); get pwrmgt.bootreason no longer says Unknown after a flash
- mqtt: the uplink credentials struct moves to adapters/mqtt/uplink_creds.h,
  so the adapter no longer includes an app header (layout unchanged: the
  struct is persisted raw)
- gps: one off-levels routine for standby/off and System OFF; the sleep line
  stays asserted in standby and drops at System OFF, as upstream's
  sleep_gps/stop_gps/powerOff; System OFF now asserts reset before cutting
  GPS_EN
- doom: sprites solid with a one-pixel black halo, boss drawn 1.5x on the
  floor; the L2 boss was invisible from the spawn on 1-bit panels
2026-09-26 08:50:30 +02:00
liquidraver 946b871d46 boot reset cause: plain-English hints in the restart notice, fix nrf52840 vbus wake docs 2026-09-19 21:35:22 +02:00
Pieter ViljoenandClaude Opus 5 6ec31e7b7f capture the reset cause at boot instead of consuming it in main()
hwinfo_get_reset_cause() reads a latched register. It was read inline in
main_companion.cpp and cleared there, so the repeater, room server and
observer never read it and never cleared it: their flags carried into the next
boot, and whichever role read first defined what any later reader would see.

helpers/boot_info.c reads it once in a SYS_INIT at POST_KERNEL, logs it,
stores it and clears the register. That runs before main() on every role.
zephcore_boot_reset_cause() hands out the stored copy and reports false where
the platform has no support, which a caller can distinguish from a cause of 0.

The clear's return is discarded deliberately: ESP32 has no
hwinfo_clear_reset_cause() implementation, so the weak stub returns -ENOSYS.
The capture is still correct there; only the next boot's reading is not.

Logging in boot_info_init() rather than only in the consuming role matters
because the clear now happens everywhere. Without it a repeater that rebooted
on WATCHDOG or LOCKUP would have the evidence cleared and recorded nowhere,
where before it survived in the register for whoever read it over SWD.

main_companion.cpp reads the stored copy and renders through a table with one
row per RESET_* bit, so a cause with no label is no longer logged as bare hex.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-19 11:58:01 -07:00