Enter deep sleep mode
| 235 | |
| 236 | // Enter deep sleep mode |
| 237 | void enterDeepSleep(bool fromTimeout = false) { |
| 238 | HalPowerManager::Lock powerLock; // Ensure we are at normal CPU frequency for sleep preparation |
| 239 | APP_STATE.lastSleepFromReader = activityManager.isReaderActivity(); |
| 240 | |
| 241 | const bool isQuickResumeSleep = |
| 242 | SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::QUICK_RESUME || |
| 243 | (fromTimeout && |
| 244 | SETTINGS.quickResumeSleepScreen == CrossPointSettings::QUICK_RESUME_SLEEP_SCREEN::QUICK_RESUME_AFTER_TIMEOUT); |
| 245 | APP_STATE.showBootScreen = !isQuickResumeSleep; |
| 246 | |
| 247 | APP_STATE.saveToFile(); |
| 248 | |
| 249 | // Commit to sleeping before goToSleep() runs the outgoing activity's onExit(): |
| 250 | // a WiFi activity would otherwise silentRestart() here and reboot instead. |
| 251 | deepSleepInProgress = true; |
| 252 | activityManager.goToSleep(fromTimeout); |
| 253 | |
| 254 | if (isQuickResumeSleep) { |
| 255 | saveSleepFrameBuffer(); |
| 256 | } |
| 257 | |
| 258 | // Tear down WiFi so the modem power domain isn't held alive across deep sleep. |
| 259 | // Wake from deep sleep is effectively a chip reset, so no state needs to survive. |
| 260 | if (WiFi.getMode() != WIFI_MODE_NULL) { |
| 261 | WiFi.disconnect(true); |
| 262 | WiFi.mode(WIFI_OFF); |
| 263 | } |
| 264 | |
| 265 | halTiltSensor.deepSleep(); |
| 266 | display.deepSleep(); |
| 267 | LOG_DBG("MAIN", "Entering deep sleep"); |
| 268 | |
| 269 | powerManager.startDeepSleep(gpio); |
| 270 | } |
| 271 | |
| 272 | void setupDisplayAndFonts(bool seamless = false) { |
| 273 | display.begin(seamless); |
no test coverage detected