Add low battery warning screen
Basic UI composition functions have been moved to the main to accomodate for pre-boot warning screens.
This commit is contained in:
parent
2c1fa7376a
commit
20667c87c4
|
|
@ -18,17 +18,88 @@
|
|||
* along with this program; if not, see <http://www.gnu.org/licenses/> *
|
||||
***************************************************************************/
|
||||
|
||||
#include <os.h>
|
||||
#include <ui.h>
|
||||
#include <stdlib.h>
|
||||
#include "threads.h"
|
||||
#include "platform.h"
|
||||
#include <inttypes.h>
|
||||
#include <threads.h>
|
||||
#include <platform.h>
|
||||
#include <battery.h>
|
||||
#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) {
|
||||
gfx_clearScreen();
|
||||
uint16_t bat_width = SCREEN_WIDTH / 2;
|
||||
uint16_t bat_height = SCREEN_HEIGHT / 3;
|
||||
point_t bat_pos = {SCREEN_WIDTH / 4, SCREEN_HEIGHT / 6};
|
||||
gfx_drawBattery(bat_pos, bat_width, bat_height, 0.1f);
|
||||
point_t text_pos_1 = {0, SCREEN_HEIGHT * 3 / 4};
|
||||
point_t text_pos_2 = {0, SCREEN_HEIGHT * 3 / 4 + 16};
|
||||
const color_t color_white = {255, 255, 255};
|
||||
|
||||
gfx_print(text_pos_1,
|
||||
"For emergency operation",
|
||||
FONT_SIZE_6PT,
|
||||
TEXT_ALIGN_CENTER,
|
||||
color_white);
|
||||
gfx_print(text_pos_2,
|
||||
"press any button.",
|
||||
FONT_SIZE_6PT,
|
||||
TEXT_ALIGN_CENTER,
|
||||
color_white);
|
||||
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;
|
||||
|
||||
// Initialize platform drivers
|
||||
platform_init();
|
||||
|
||||
// Initialize graphics driver
|
||||
gfx_init();
|
||||
|
||||
// Initialize user interface
|
||||
ui_init();
|
||||
|
||||
// Check if battery has enough charge to operate
|
||||
check_battery();
|
||||
|
||||
// Display splash screen
|
||||
ui_drawSplashScreen();
|
||||
gfx_render();
|
||||
while(gfx_renderingInProgress());
|
||||
|
||||
// Wait 30ms before turning on backlight to hide random pixels on screen
|
||||
OSTimeDlyHMSM(0u, 0u, 0u, 30u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||
platform_setBacklightLevel(255);
|
||||
|
||||
// Keep the splash screen for 1 second
|
||||
OSTimeDlyHMSM(0u, 0u, 1u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||
|
||||
// Create OpenRTX threads
|
||||
create_threads();
|
||||
|
||||
return 0;
|
||||
// Auxiliary functions loop
|
||||
while(true) {
|
||||
check_battery();
|
||||
OSTimeDlyHMSM(0u, 1u, 0u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,23 +79,6 @@ static void ui_task(void *arg)
|
|||
OS_ERR os_err;
|
||||
OS_MSG_SIZE msg_size = 0;
|
||||
|
||||
// Initialize graphics driver
|
||||
gfx_init();
|
||||
// Initialize user interface
|
||||
ui_init();
|
||||
|
||||
// Display splash screen
|
||||
ui_drawSplashScreen();
|
||||
gfx_render();
|
||||
while(gfx_renderingInProgress());
|
||||
|
||||
// Wait 30ms before turning on backlight to hide random pixels on screen
|
||||
OSTimeDlyHMSM(0u, 0u, 0u, 30u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||
platform_setBacklightLevel(255);
|
||||
|
||||
// Keep the splash screen for 1 second
|
||||
OSTimeDlyHMSM(0u, 0u, 1u, 0u, OS_OPT_TIME_HMSM_STRICT, &os_err);
|
||||
|
||||
// Get initial state local copy
|
||||
OSMutexPend(&state_mutex, 0u, OS_OPT_PEND_BLOCKING, 0u, &os_err);
|
||||
state_t last_state = state;
|
||||
|
|
|
|||
Loading…
Reference in New Issue