summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/Watchdog.cpp20
-rw-r--r--src/drivers/Watchdog.h14
2 files changed, 23 insertions, 11 deletions
diff --git a/src/drivers/Watchdog.cpp b/src/drivers/Watchdog.cpp
index b0dc12e5..55b6de73 100644
--- a/src/drivers/Watchdog.cpp
+++ b/src/drivers/Watchdog.cpp
@@ -19,6 +19,8 @@ void Watchdog::Setup(uint8_t timeoutSeconds) {
/* Enable reload requests */
NRF_WDT->RREN = (WDT_RREN_RR0_Enabled << WDT_RREN_RR0_Pos);
+
+ resetReason = ActualResetReason();
}
void Watchdog::Start() {
@@ -29,18 +31,18 @@ void Watchdog::Kick() {
NRF_WDT->RR[0] = WDT_RR_RR_Reload;
}
-Watchdog::ResetReasons Watchdog::ResetReason() {
+Watchdog::ResetReasons Watchdog::ActualResetReason() const {
uint32_t resetReason;
sd_power_reset_reason_get(&resetReason);
sd_power_reset_reason_clr(0xFFFFFFFF);
- if(resetReason & 0x01) return ResetReasons::ResetPin;
- if((resetReason >> 1) & 0x01) return ResetReasons::Watchdog;
- if((resetReason >> 2) & 0x01) return ResetReasons::SoftReset;
- if((resetReason >> 3) & 0x01) return ResetReasons::CpuLockup;
- if((resetReason >> 16) & 0x01) return ResetReasons::SystemOff;
- if((resetReason >> 17) & 0x01) return ResetReasons::LpComp;
- if((resetReason >> 18) & 0x01) return ResetReasons::DebugInterface;
- if((resetReason >> 19) & 0x01) return ResetReasons::NFC;
+ if(resetReason & 0x01u) return ResetReasons::ResetPin;
+ if((resetReason >> 1u) & 0x01u) return ResetReasons::Watchdog;
+ if((resetReason >> 2u) & 0x01u) return ResetReasons::SoftReset;
+ if((resetReason >> 3u) & 0x01u) return ResetReasons::CpuLockup;
+ if((resetReason >> 16u) & 0x01u) return ResetReasons::SystemOff;
+ if((resetReason >> 17u) & 0x01u) return ResetReasons::LpComp;
+ if((resetReason >> 18u) & 0x01u) return ResetReasons::DebugInterface;
+ if((resetReason >> 19u) & 0x01u) return ResetReasons::NFC;
return ResetReasons::HardReset;
}
diff --git a/src/drivers/Watchdog.h b/src/drivers/Watchdog.h
index da192d9e..73f99ea1 100644
--- a/src/drivers/Watchdog.h
+++ b/src/drivers/Watchdog.h
@@ -8,10 +8,20 @@ namespace Pinetime {
void Setup(uint8_t timeoutSeconds);
void Start();
void Kick();
-
- ResetReasons ResetReason();
+ ResetReasons ResetReason() const { return resetReason; }
static const char* ResetReasonToString(ResetReasons reason);
+ private:
+ ResetReasons resetReason;
+ ResetReasons ActualResetReason() const;
+ };
+
+ class WatchdogView {
+ public:
+ WatchdogView(const Watchdog& watchdog) : watchdog{watchdog} { }
+ Watchdog::ResetReasons ResetReason() const { return watchdog.ResetReason();}
+ private:
+ const Watchdog& watchdog;
};
}
}