Public Access
37 lines
800 B
C++
37 lines
800 B
C++
#include "logic/boot_policy.h"
|
|||
|
|
|
||
|
|
#include "config.h"
|
||
|
|
|
||
|
|
BootDecision decideBoot(ResetKind reset, uint8_t crash_count)
|
||
|
|
{
|
||
|
|
switch (reset)
|
||
|
|
{
|
||
|
|
case ResetKind::PowerOn:
|
||
|
|
return {BootMode::Normal, 0};
|
||
|
|
case ResetKind::Crash:
|
||
|
|
if (crash_count < 255)
|
||
|
|
crash_count++;
|
||
|
|
if (crash_count >= SAFE_MODE_CRASHES)
|
||
|
|
return {BootMode::SafeMode, crash_count};
|
||
|
|
return {BootMode::PanicWindow, crash_count};
|
||
|
|
case ResetKind::Software:
|
||
|
|
case ResetKind::Other:
|
||
|
|
default:
|
||
|
|
return {BootMode::Normal, crash_count};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
uint8_t crashCountAfterSafeMode()
|
||
|
|
{
|
||
|
|
return SAFE_MODE_CRASHES - 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool shouldMarkFirmwareValid(uint32_t running_ms, bool wifi_connected)
|
||
|
|
{
|
||
|
|
return running_ms >= FIRMWARE_VALID_TIME && wifi_connected;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool shouldClearCrashCount(uint32_t running_ms)
|
||
|
|
{
|
||
|
|
return running_ms >= CRASH_FREE_TIME;
|
||
|
|
}
|