|
|
- bool _rtcmem_status = false;
-
- void _rtcmemInit() {
- memset((uint32_t*)RTCMEM_ADDR, 0, sizeof(uint32_t) * RTCMEM_BLOCKS);
- Rtcmem->magic = RTCMEM_MAGIC;
- }
-
- // Treat memory as dirty on cold boot, hardware wdt reset and rst pin
- bool _rtcmemStatus() {
- bool readable;
-
- switch (systemResetReason()) {
- case REASON_EXT_SYS_RST:
- case REASON_WDT_RST:
- case REASON_DEFAULT_RST:
- readable = false;
- break;
- default:
- readable = true;
- }
-
- readable = readable and (RTCMEM_MAGIC == Rtcmem->magic);
-
- return readable;
- }
-
- #if TERMINAL_SUPPORT
-
- void _rtcmemInitCommands() {
- terminalRegisterCommand(F("RTCMEM.REINIT"), [](Embedis* e) {
- _rtcmemInit();
- });
-
- terminalRegisterCommand(F("RTCMEM.TEST"), [](Embedis* e) {
- });
-
- terminalRegisterCommand(F("RTCMEM.DUMP"), [](Embedis* e) {
- DEBUG_MSG_P(PSTR("[RTCMEM] status:%u blocks:%u addr:0x%p\n"),
- _rtcmemStatus(), RtcmemSize, Rtcmem);
-
- for (uint8_t block=0; block<RtcmemSize; ++block) {
- DEBUG_MSG_P(PSTR("[RTCMEM] %02u: %u\n"),
- block, reinterpret_cast<volatile uint32_t*>(RTCMEM_ADDR)[block]);
- }
- });
- }
-
- #endif
-
- bool rtcmemStatus() {
- return _rtcmem_status;
- }
-
- void rtcmemSetup() {
- _rtcmem_status = _rtcmemStatus();
- if (!_rtcmem_status) {
- _rtcmemInit();
- }
-
- #if TERMINAL_SUPPORT
- _rtcmemInitCommands();
- #endif
- }
|