summaryrefslogtreecommitdiff
path: root/src/SystemTask/SystemTask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/SystemTask/SystemTask.cpp')
-rw-r--r--src/SystemTask/SystemTask.cpp34
1 files changed, 7 insertions, 27 deletions
diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp
index 84392c7d..3a85ba76 100644
--- a/src/SystemTask/SystemTask.cpp
+++ b/src/SystemTask/SystemTask.cpp
@@ -10,6 +10,7 @@
#include <nimble/hci_common.h>
#include <host/ble_gap.h>
#include <host/util/util.h>
+#include <drivers/InternalFlash.h>
#include "../main.h"
using namespace Pinetime::System;
@@ -38,27 +39,6 @@ void SystemTask::Process(void *instance) {
app->Work();
}
-static inline void nrf52_wait_for_flash_ready(void)
-{
- while (NRF_NVMC->READY == NVMC_READY_READY_Busy) {;}
-}
-
-void nrf52_nvmc_write_word(uint32_t address, uint32_t value) {
- // Enable write.
- NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
- __ISB();
- __DSB();
-
- // Write word
- *(uint32_t*)address = value;
- nrf52_wait_for_flash_ready();
-
- // Disable write
- NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
- __ISB();
- __DSB();
-}
-
void SystemTask::Work() {
watchdog.Setup(7);
watchdog.Start();
@@ -68,12 +48,12 @@ void SystemTask::Work() {
spi.Init();
spiNorFlash.Init();
- uint32_t* magicptr = reinterpret_cast<uint32_t *>(0x7BFE8);
- uint32_t magic = *magicptr;
- if(magic != 1)
- nrf52_nvmc_write_word(0x7BFE8, 1);
-
- NRF_LOG_INFO("MAGIC : %d", magic);
+ // Write the 'image OK' flag if it's not already done
+ // TODO implement a better verification mecanism for the image (ask for user confirmation via UI/BLE ?)
+ uint32_t* imageOkPtr = reinterpret_cast<uint32_t *>(0x7BFE8);
+ uint32_t imageOk = *imageOkPtr;
+ if(imageOk != 1)
+ Pinetime::Drivers::InternalFlash::WriteWord(0x7BFE8, 1);
nimbleController.Init();
nimbleController.StartAdvertising();