renderbug/src/BootOptions.cpp

70 lines
1.9 KiB
C++
Raw Normal View History

2021-03-29 08:10:55 +00:00
#include "BootOptions.h"
2021-04-10 18:10:25 +00:00
#ifdef BOARD_ESP8266
#include <ESP8266WiFi.h>
#endif
#include <EEPROM.h>
#include "Config.h"
2021-03-29 08:10:55 +00:00
#ifdef PLATFORM_PHOTON
LEDStatus serialStatus = LEDStatus(RGB_COLOR_ORANGE, LED_PATTERN_FADE, LED_SPEED_FAST, LED_PRIORITY_BACKGROUND);
LEDStatus configStatus = LEDStatus(RGB_COLOR_YELLOW, LED_PATTERN_FADE, LED_SPEED_NORMAL, LED_PRIORITY_IMPORTANT);
retained bool LAST_BOOT_WAS_FLASH;
retained bool LAST_BOOT_WAS_SERIAL;
#endif
void
BootOptions::initPins()
{
#ifdef PLATFORM_PHOTON
pinMode(2, INPUT_PULLDOWN);
pinMode(3, INPUT_PULLDOWN);
pinMode(4, INPUT_PULLDOWN);
#endif
}
BootOptions::BootOptions()
{
#ifdef PLATFORM_PHOTON
isSetup = digitalRead(2) == HIGH;
isSerial = digitalRead(3) == HIGH || LAST_BOOT_WAS_SERIAL;
isFlash = digitalRead(4) == HIGH;
LAST_BOOT_WAS_FLASH = isFlash;
LAST_BOOT_WAS_SERIAL |= isSerial;
lastBootWasFlash = LAST_BOOT_WAS_FLASH;
configStatus.setActive(isSetup);
serialStatus.setActive(isSerial);
#endif
2021-04-10 18:10:25 +00:00
#ifdef BOARD_ESP8266
struct rst_info resetInfo = *ESP.getResetInfoPtr();
uint8_t crashCount;
EEPROM.begin(sizeof(crashCount));
EEPROM.get(sizeof(HardwareConfig) + 32, crashCount);
EEPROM.end();
if (resetInfo.reason == REASON_WDT_RST || resetInfo.reason == REASON_EXCEPTION_RST) {
2021-04-10 18:10:25 +00:00
if (crashCount++ >= 3) {
// Boot into safe mode if the watchdog reset us three times in a row.
isSafeMode = true;
} else {
EEPROM.begin(sizeof(crashCount));
EEPROM.put(sizeof(HardwareConfig) + 32, crashCount);
EEPROM.end();
}
} else if (crashCount != 0) {
crashCount = 0;
EEPROM.begin(sizeof(crashCount));
EEPROM.put(sizeof(HardwareConfig) + 32, crashCount);
EEPROM.end();
}
#endif
2021-03-29 08:10:55 +00:00
}
void
BootOptions::waitForRelease()
{
#ifdef PLATFORM_PHOTON
while(digitalRead(2) == HIGH || digitalRead(3) == HIGH) {};
#endif
}