From 6fb1b8b3421cd73657ac2a84b0b13b975926746f Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Fri, 4 Mar 2022 18:48:51 +0000 Subject: x1000: bootloader: split off GUI code Change-Id: If716cfd117c48da2cff221b8854630022bb0fe48 --- bootloader/x1000/gui.c | 113 +++++++++++++++++++++++++++++++++++++ bootloader/x1000/x1000bootloader.h | 15 +++++ 2 files changed, 128 insertions(+) create mode 100644 bootloader/x1000/gui.c (limited to 'bootloader/x1000') diff --git a/bootloader/x1000/gui.c b/bootloader/x1000/gui.c new file mode 100644 index 0000000000..da20a9b128 --- /dev/null +++ b/bootloader/x1000/gui.c @@ -0,0 +1,113 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2021-2022 Aidan MacDonald + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "x1000bootloader.h" +#include "system.h" +#include "kernel.h" +#include "lcd.h" +#include "backlight.h" +#include "backlight-target.h" +#include "font.h" +#include "button.h" +#include "version.h" +#include + +static bool lcd_inited = false; +extern bool is_usb_connected; + +void clearscreen(void) +{ + init_lcd(); + lcd_clear_display(); + putversion(); +} + +void putversion(void) +{ + int x = (LCD_WIDTH - SYSFONT_WIDTH*strlen(rbversion)) / 2; + int y = LCD_HEIGHT - SYSFONT_HEIGHT; + lcd_putsxy(x, y, rbversion); +} + +void putcenter_y(int y, const char* msg) +{ + int x = (LCD_WIDTH - SYSFONT_WIDTH*strlen(msg)) / 2; + lcd_putsxy(x, y, msg); +} + +void putcenter_line(int line, const char* msg) +{ + int y = LCD_HEIGHT/2 + (line - 1)*SYSFONT_HEIGHT; + putcenter_y(y, msg); +} + +void splash2(long delay, const char* msg, const char* msg2) +{ + clearscreen(); + putcenter_line(0, msg); + if(msg2) + putcenter_line(1, msg2); + lcd_update(); + sleep(delay); +} + +void splash(long delay, const char* msg) +{ + splash2(delay, msg, NULL); +} + +int get_button(int timeout) +{ + int btn = button_get_w_tmo(timeout); + if(btn == SYS_USB_CONNECTED) + is_usb_connected = true; + else if(btn == SYS_USB_DISCONNECTED) + is_usb_connected = false; + + return btn; +} + +void init_lcd(void) +{ + if(lcd_inited) + return; + + lcd_init(); + font_init(); + lcd_setfont(FONT_SYSFIXED); + + /* Clear screen before turning backlight on, otherwise we might + * display random garbage on the screen */ + lcd_clear_display(); + lcd_update(); + + backlight_init(); + + lcd_inited = true; +} + +void gui_shutdown(void) +{ + if(!lcd_inited) + return; + + backlight_hw_off(); +} diff --git a/bootloader/x1000/x1000bootloader.h b/bootloader/x1000/x1000bootloader.h index 75303c3717..df891e54bb 100644 --- a/bootloader/x1000/x1000bootloader.h +++ b/bootloader/x1000/x1000bootloader.h @@ -61,4 +61,19 @@ # error "Missing keymap!" #endif +/* + * GUI stuff + */ + +void clearscreen(void); +void putversion(void); +void putcenter_y(int y, const char* msg); +void putcenter_line(int line, const char* msg); +void splash2(long delay, const char* msg, const char* msg2); +void splash(long delay, const char* msg); +int get_button(int timeout); +void init_lcd(void); + +void gui_shutdown(void); + #endif /* __X1000BOOTLOADER_H__ */ -- cgit v1.2.3