diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 518c94d92..48a94444b 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -172,7 +172,13 @@ static void powerEnter() } else { screen->setOn(true); setBluetoothEnable(true); - screen->print("Powered...\n"); + // within enter() the function getState() returns the state we came from + if (strcmp(powerFSM.getState()->name, "BOOT") != 0 && + strcmp(powerFSM.getState()->name, "POWER") != 0 && + strcmp(powerFSM.getState()->name, "DARK") != 0) + { + screen->print("Powered...\n"); + } } } @@ -189,7 +195,8 @@ static void powerExit() { screen->setOn(true); setBluetoothEnable(true); - screen->print("Unpowered...\n"); + if (!isPowered()) + screen->print("Unpowered...\n"); } static void onEnter() @@ -249,7 +256,7 @@ void PowerFSM_setup() // Handle press events - note: we ignore button presses when in API mode powerFSM.add_transition(&stateLS, &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&stateNB, &stateON, EVENT_PRESS, NULL, "Press"); - powerFSM.add_transition(&stateDARK, &stateON, EVENT_PRESS, NULL, "Press"); + powerFSM.add_transition(&stateDARK, isPowered() ? &statePOWER : &stateON, EVENT_PRESS, NULL, "Press"); powerFSM.add_transition(&statePOWER, &statePOWER, EVENT_PRESS, screenPress, "Press"); powerFSM.add_transition(&stateON, &stateON, EVENT_PRESS, screenPress, "Press"); // reenter On to restart our timers powerFSM.add_transition(&stateSERIAL, &stateSERIAL, EVENT_PRESS, screenPress, @@ -322,6 +329,12 @@ void PowerFSM_setup() powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout"); + powerFSM.add_timed_transition(&statePOWER, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); + powerFSM.add_timed_transition(&stateDARK, &stateDARK, + getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, + "Screen-on timeout"); #ifdef ARCH_ESP32 State *lowPowerState = &stateLS; diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index b5a74b386..482e76450 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1206,7 +1206,7 @@ void Screen::setFrames() LOG_DEBUG("Total frame count: %d\n", totalFrameCount); // We don't show the node info our our node (if we have it yet - we should) - size_t numnodes = nodeStatus->getNumTotal(); + size_t numnodes = nodeDB.getNumNodes(); if (numnodes > 0) numnodes--;