diff options
author | JF <jf@codingfield.com> | 2020-04-05 19:59:22 +0200 |
---|---|---|
committer | Gitea <gitea@fake.local> | 2020-04-05 19:59:22 +0200 |
commit | 86d5732b960fbe7f81ed711b2de7e6b79293c96a (patch) | |
tree | 8447f6b7bbff0f423e9cf5d15ed709c630bed25e /src/drivers | |
parent | a91c68c931cc8308e87acd796afb46ba70ae3dc2 (diff) | |
parent | 6e1bd118c5ecc53016548072501591b329500870 (diff) |
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/drivers')
-rw-r--r-- | src/drivers/Watchdog.cpp | 20 | ||||
-rw-r--r-- | src/drivers/Watchdog.h | 14 |
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; }; } } |