|
36 | 36 | #include "components/datetime/DateTimeController.h" |
37 | 37 | #include "components/heartrate/HeartRateController.h" |
38 | 38 | #include "components/stopwatch/StopWatchController.h" |
| 39 | +#include "components/persistence/RebootPersist.h" |
39 | 40 | #include "components/fs/FS.h" |
40 | 41 | #include "drivers/Spi.h" |
41 | 42 | #include "drivers/SpiMaster.h" |
@@ -161,14 +162,10 @@ void vApplicationStackOverflowHook(TaskHandle_t /*xTask*/, char* /*pcTaskName*/) |
161 | 162 | stackOverflowCount++; |
162 | 163 | } |
163 | 164 | } |
164 | | -/* Variable Declarations for variables in noinit SRAM |
165 | | - Increment NoInit_MagicValue upon adding variables to this area |
166 | | -*/ |
| 165 | +// Variable Declarations for variables in noinit SRAM |
167 | 166 | extern uint32_t __start_noinit_data; |
168 | 167 | extern uint32_t __stop_noinit_data; |
169 | | -static constexpr uint32_t NoInit_MagicValue = 0xDEAD0000; |
170 | | -uint32_t NoInit_MagicWord __attribute__((section(".noinit"))); |
171 | | -std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime __attribute__((section(".noinit"))); |
| 168 | +volatile Pinetime::Components::RebootPersist NoInit_Persistence __attribute__((section(".noinit"))); |
172 | 169 |
|
173 | 170 | void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { |
174 | 171 | if (pin == Pinetime::PinMap::Cst816sIrq) { |
@@ -352,12 +349,14 @@ int main() { |
352 | 349 | // retrieve version stored by bootloader |
353 | 350 | Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); |
354 | 351 |
|
355 | | - if (NoInit_MagicWord == NoInit_MagicValue) { |
356 | | - dateTimeController.SetCurrentTime(NoInit_BackUpTime); |
| 352 | + if (NoInit_Persistence.IsValid()) { |
| 353 | + dateTimeController.SetCurrentTime( |
| 354 | + std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(NoInit_Persistence.timeMillis))); |
| 355 | + motionController.Restore(NoInit_Persistence.steps, NoInit_Persistence.tripSteps); |
357 | 356 | } else { |
358 | 357 | // Clear Memory to known state |
359 | 358 | memset(&__start_noinit_data, 0, (uintptr_t) &__stop_noinit_data - (uintptr_t) &__start_noinit_data); |
360 | | - NoInit_MagicWord = NoInit_MagicValue; |
| 359 | + NoInit_Persistence.SetValid(); |
361 | 360 | } |
362 | 361 |
|
363 | 362 | systemTask.Start(); |
|
0 commit comments