mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-12 16:50:21 +00:00
Add OTA rollback for Pico boards
This commit is contained in:
1 parent
cabab3d6e6
commit
2b2f85781a
5 files changed
+154
-236
No files matched your search
@@ -19,7 +19,44 @@ int mkdir(const char *, mode_t);
|
||||
|
||||
#if MG_OTA == MG_OTA_PICOSDK
|
||||
#include <hardware/flash.h>
|
||||
#include <hardware/watchdog.h>
|
||||
#include <hardware/structs/watchdog.h>
|
||||
#include <pico/bootrom.h>
|
||||
|
||||
#ifndef MG_OTA_WATCHDOG_MS
|
||||
#if PICO_RP2040
|
||||
#define MG_OTA_WATCHDOG_MS 8000U // max delay on RP2040 is 8.3 seconds
|
||||
#else
|
||||
#define MG_OTA_WATCHDOG_MS 10000U // max delay on RP2350 is 16 seconds
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MG_OTA_ROLLBACK_TIMER_START
|
||||
#define MG_OTA_ROLLBACK_TIMER_START() watchdog_enable(MG_OTA_WATCHDOG_MS, false)
|
||||
#endif
|
||||
|
||||
#ifndef MG_OTA_ROLLBACK_TIMER_FEED
|
||||
#define MG_OTA_ROLLBACK_TIMER_FEED() watchdog_update()
|
||||
#endif
|
||||
|
||||
#define MG_OTA_STATE_GET() ((uint32_t) watchdog_hw->scratch[0])
|
||||
#define MG_OTA_STATE_SET(v) \
|
||||
(watchdog_hw->scratch[0] = (uint32_t) (v), (uint32_t) watchdog_hw->scratch[0])
|
||||
|
||||
#if PICO_RP2040
|
||||
#define MG_OTA_ROLLBACK() \
|
||||
do { \
|
||||
mg_flash->swap_fn(); \
|
||||
*(volatile unsigned long *) 0xe000ed0c = 0x5fa0004; \
|
||||
} while (0)
|
||||
#else
|
||||
#define MG_OTA_ROLLBACK() \
|
||||
do { \
|
||||
mg_flash->swap_fn(); \
|
||||
((rom_reboot_fn) rom_func_lookup(ROM_FUNC_REBOOT))( \
|
||||
BOOT_TYPE_NORMAL | 0x100, 1, 0, 0); \
|
||||
} while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user