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 rtxStatus;
uint8_t sqlLevel; uint8_t sqlLevel;
uint8_t voxLevel; uint8_t voxLevel;
bool emergency;
} }
state_t; state_t;

Wyświetl plik

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

Wyświetl plik

@ -28,28 +28,6 @@
#include <graphics.h> #include <graphics.h>
#include <hwconfig.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) int main(void)
{ {
OS_ERR os_err; OS_ERR os_err;
@ -63,9 +41,6 @@ int main(void)
// Initialize user interface // Initialize user interface
ui_init(); ui_init();
// Check if battery has enough charge to operate
check_battery();
// Display splash screen // Display splash screen
ui_drawSplashScreen(); ui_drawSplashScreen();
gfx_render(); gfx_render();
@ -83,7 +58,7 @@ int main(void)
// Auxiliary functions loop // Auxiliary functions loop
while(true) while(true)
{ {
check_battery(); // No low-frequency function at the moment
OSTimeDlyHMSM(0u, 1u, 0u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err); OSTaskSuspend(NULL, &os_err);
} }
} }

Wyświetl plik

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

Wyświetl plik

@ -354,7 +354,7 @@ void ui_drawSplashScreen()
#endif #endif
} }
void ui_drawLowBatteryScreen() bool _ui_drawLowBatteryScreen()
{ {
gfx_clearScreen(); gfx_clearScreen();
uint16_t bat_width = SCREEN_WIDTH / 2; uint16_t bat_width = SCREEN_WIDTH / 2;
@ -375,10 +375,23 @@ void ui_drawLowBatteryScreen()
FONT_SIZE_6PT, FONT_SIZE_6PT,
TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER,
color_white); color_white);
return true;
} }
void ui_updateFSM(event_t event) 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 // Process pressed keys
if(event.type == EVENT_KBD) if(event.type == EVENT_KBD)
{ {
@ -440,6 +453,10 @@ bool ui_updateGUI(state_t last_state)
case MENU_TOP: case MENU_TOP:
screen_update = _ui_drawMenuTop(); screen_update = _ui_drawMenuTop();
break; break;
// Low battery screen
case LOW_BAT:
screen_update = _ui_drawLowBatteryScreen();
break;
} }
return screen_update; return screen_update;
} }