Move low battery screen into main FSM

replace/64761ee9dd92eea75945623da864e44f64666f4e
Niccolò Izzo 2020-12-18 19:03:34 +01:00
rodzic 2c792c13a2
commit c7e928666c
5 zmienionych plików z 26 dodań i 29 usunięć

Wyświetl plik

@ -52,6 +52,8 @@ typedef struct
uint8_t rtxStatus;
uint8_t sqlLevel;
uint8_t voxLevel;
bool emergency;
}
state_t;

Wyświetl plik

@ -39,7 +39,8 @@ enum uiScreen
MENU_CONTACTS,
MENU_SMS,
MENU_GPS,
MENU_SETTINGS
MENU_SETTINGS,
LOW_BAT
};
/**

Wyświetl plik

@ -28,28 +28,6 @@
#include <graphics.h>
#include <hwconfig.h>
/* If battery level is below 0% draw low battery screen, wait and shutdown */
void check_battery()
{
OS_ERR os_err;
// Check battery percentage
float vbat = platform_getVbat();
float charge = battery_getCharge(vbat);
// Draw low battery screen
if (charge <= 0)
{
ui_drawLowBatteryScreen();
gfx_render();
// Wait 5 seconds
OSTimeDlyHMSM(0u, 0u, 5u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err);
// TODO: Shut down radio unless a button is pressed
}
}
int main(void)
{
OS_ERR os_err;
@ -63,9 +41,6 @@ int main(void)
// Initialize user interface
ui_init();
// Check if battery has enough charge to operate
check_battery();
// Display splash screen
ui_drawSplashScreen();
gfx_render();
@ -83,7 +58,7 @@ int main(void)
// Auxiliary functions loop
while(true)
{
check_battery();
OSTimeDlyHMSM(0u, 1u, 0u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err);
// No low-frequency function at the moment
OSTaskSuspend(NULL, &os_err);
}
}

Wyświetl plik

@ -44,4 +44,6 @@ void state_init()
state.rtxStatus = RTX_OFF;
state.sqlLevel = 0;
state.voxLevel = 0;
state.emergency = false;
}

Wyświetl plik

@ -354,7 +354,7 @@ void ui_drawSplashScreen()
#endif
}
void ui_drawLowBatteryScreen()
bool _ui_drawLowBatteryScreen()
{
gfx_clearScreen();
uint16_t bat_width = SCREEN_WIDTH / 2;
@ -375,10 +375,23 @@ void ui_drawLowBatteryScreen()
FONT_SIZE_6PT,
TEXT_ALIGN_CENTER,
color_white);
return true;
}
void ui_updateFSM(event_t event)
{
// Check if battery has enough charge to operate
float charge = battery_getCharge(state.v_bat);
if (!state.emergency && charge <= 0)
{
state.ui_screen = LOW_BAT;
if(event.type == EVENT_KBD && event.payload) {
state.ui_screen = MAIN_VFO;
state.emergency = true;
}
return;
}
// Process pressed keys
if(event.type == EVENT_KBD)
{
@ -440,6 +453,10 @@ bool ui_updateGUI(state_t last_state)
case MENU_TOP:
screen_update = _ui_drawMenuTop();
break;
// Low battery screen
case LOW_BAT:
screen_update = _ui_drawLowBatteryScreen();
break;
}
return screen_update;
}