Skip to content

OTAmpy v4.9.0

Choose a tag to compare

@simonl65 simonl65 released this 13 Sep 14:15
· 17 commits to main since this release
Immutable release. Only release title and notes can be modified.

OTAmpy 4.9.0 — 2026-09-13

Major (breaking changes)

  • None.

Minor (functionality added in a backward compatible manner)

  • Added OTA.mark_application_alive(), which clears the boot marker without polling the transport. An application that only calls poll() when frame_ready() is true (because poll() can block for up to ACK_TIMEOUT_MS on an idle link) never cleared the marker in a boot where no OTA command arrived. The next boot then paid the wide OTA_BOOT_RECOVERY_LISTEN_MS window, which does not answer PING, and otampy rollback could miss its post-commit-ready-timeout. Call it once, immediately before the main loop. It never touches the transport, never raises, and a second call does nothing. Applications that poll unconditionally, including both shipped scaffolds, need no change.

Patch (backward compatible bug fixes)

  • docs/protocol.md §2.4 and docs/architecture.md no longer say that reaching poll() is the only proof the application is alive. Both now describe mark_application_alive() and the frame_ready() case that needs it.
  • The examples/shared-uart/main.py scaffold has a new comment pointing real-time loops at frame_ready() plus mark_application_alive(). The scaffold code is unchanged.
  • Updated the README with trial-boot updates, rollback and recovery details.
  • CHANGELOG.md now has separate, dated 4.7.0 and 4.8.0 sections instead of an Unreleased block. It also adds the missing 4.8.0 entries for otampy cp device:<path> (device-to-host copy) and otampy upd --all-files skipping __pycache__ and *.example.*.