From ae58b5aafe2f808968a05a5efb97e7e5f5c89bc4 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Mon, 28 Sep 2020 15:03:21 -0400 Subject: [PATCH] xduoox20: UI Simulator support Change-Id: I2a03cea07fbad9fb5862ca69e4cfca2e8ca6b17f --- firmware/export/powermgmt.h | 2 +- firmware/powermgmt.c | 13 +++- firmware/target/hosted/sdl/sim-ui-defines.h | 8 +- uisimulator/bitmaps/UI-xduoox20.bmp | Bin 0 -> 722538 bytes uisimulator/buttonmap/SOURCES | 2 + uisimulator/buttonmap/xduoo-x20.c | 80 ++++++++++++++++++++ 6 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 uisimulator/bitmaps/UI-xduoox20.bmp create mode 100644 uisimulator/buttonmap/xduoo-x20.c diff --git a/firmware/export/powermgmt.h b/firmware/export/powermgmt.h index f6b71a864e..235f5302f9 100644 --- a/firmware/export/powermgmt.h +++ b/firmware/export/powermgmt.h @@ -80,7 +80,7 @@ void powermgmt_init(void) INIT_ATTR; /* Generic current values that are intentionally meaningless - config header * should define proper numbers.*/ - + #ifndef CURRENT_BACKLIGHT #define CURRENT_BACKLIGHT 5 /* additional current when backlight always on */ diff --git a/firmware/powermgmt.c b/firmware/powermgmt.c index b55690be96..0e4a7df57b 100644 --- a/firmware/powermgmt.c +++ b/firmware/powermgmt.c @@ -86,11 +86,16 @@ static int poweroff_timeout = 0; static long last_event_tick = 0; #if (CONFIG_BATTERY_MEASURE & PERCENTAGE_MEASURE) == PERCENTAGE_MEASURE +int _battery_level(void) { return -1; } +#ifdef SIMULATOR +int _battery_voltage(void); +extern const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; +extern const unsigned short percent_to_volt_charge[11]; +#else int _battery_voltage(void) { return -1; } - const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11]; const unsigned short percent_to_volt_charge[11]; - +#endif #elif (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) == VOLTAGE_MEASURE int _battery_level(void) { return -1; } /* @@ -363,7 +368,7 @@ static int runcurrent(void) #endif #endif /* BOOTLOADER */ - + return current; } @@ -659,7 +664,7 @@ static inline void power_thread_step(void) average_step_low(); /* update battery status every time an update is available */ battery_status_update(); - + /* * If battery is low, observe voltage during disk activity. * Shut down if voltage drops below shutoff level and we are not diff --git a/firmware/target/hosted/sdl/sim-ui-defines.h b/firmware/target/hosted/sdl/sim-ui-defines.h index 808804c01f..31c95b0e13 100644 --- a/firmware/target/hosted/sdl/sim-ui-defines.h +++ b/firmware/target/hosted/sdl/sim-ui-defines.h @@ -502,10 +502,10 @@ #elif defined(XDUOO_X20) #define UI_TITLE "xDuoo X20" -#define UI_WIDTH 322 /* width of GUI window */ -#define UI_HEIGHT 609 /* height of GUI window */ -#define UI_LCD_POSX 43 -#define UI_LCD_POSY 62 +#define UI_WIDTH 299 /* width of GUI window */ +#define UI_HEIGHT 602 /* height of GUI window */ +#define UI_LCD_POSX 32 +#define UI_LCD_POSY 60 #elif defined(IHIFI770) #define UI_TITLE "iHiFi 770" diff --git a/uisimulator/bitmaps/UI-xduoox20.bmp b/uisimulator/bitmaps/UI-xduoox20.bmp new file mode 100644 index 0000000000000000000000000000000000000000..158b3e4018b5c9b63c85d330ab0e325539124677 GIT binary patch literal 722538 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 literal 0 HcmV?d00001 diff --git a/uisimulator/buttonmap/SOURCES b/uisimulator/buttonmap/SOURCES index 1e882e3ca4..f7f85c057c 100644 --- a/uisimulator/buttonmap/SOURCES +++ b/uisimulator/buttonmap/SOURCES @@ -81,6 +81,8 @@ agptek-rocker.c xduoo-x3.c #elif CONFIG_KEYPAD == XDUOO_X3II_PAD xduoo-x3ii.c +#elif CONFIG_KEYPAD == XDUOO_X20_PAD +xduoo-x20.c #elif (CONFIG_KEYPAD == IHIFI_770_PAD) || (CONFIG_KEYPAD == IHIFI_800_PAD) ihifi2.c #endif diff --git a/uisimulator/buttonmap/xduoo-x20.c b/uisimulator/buttonmap/xduoo-x20.c new file mode 100644 index 0000000000..aa20d8203e --- /dev/null +++ b/uisimulator/buttonmap/xduoo-x20.c @@ -0,0 +1,80 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2020 by Solomon Peachy + * + * 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 +#include "button.h" +#include "buttonmap.h" + +int key_to_button(int keyboard_button) +{ + int new_btn = BUTTON_NONE; + switch (keyboard_button) + { + case SDLK_KP4: + case SDLK_UP: + new_btn = BUTTON_PREV; + break; + case SDLK_KP1: + case SDLK_DOWN: + new_btn = BUTTON_NEXT; + break; + case SDLK_KP3: + case SDLK_KP_ENTER: + case SDLK_SPACE: + case SDLK_RETURN: + new_btn = BUTTON_PLAY; + break; + case SDLK_KP5: + case SDLK_END: + case SDLK_BACKSPACE: + new_btn = BUTTON_OPTION; + break; + case SDLK_KP7: + case SDLK_ESCAPE: + new_btn = BUTTON_POWER; + break; + case SDLK_KP9: + case SDLK_HOME: + new_btn = BUTTON_HOME; + break; + case SDLK_KP_MINUS: + case SDLK_PAGEUP: + new_btn = BUTTON_VOL_UP; + break; + case SDLK_KP_PLUS: + case SDLK_PAGEDOWN: + new_btn = BUTTON_VOL_DOWN; + break; + } + return new_btn; +} + +struct button_map bm[] = { + { SDLK_KP4, 299, 335, 20, "Prev" }, + { SDLK_KP1, 299, 215, 20, "Next" }, + { SDLK_KP3, 299, 275, 20, "Play" }, + { SDLK_KP5, 299, 80, 20, "Option" }, + { SDLK_KP7, 0, 80, 20, "Power" }, + { SDLK_KP9, 299, 145, 20, "Home" }, + { SDLK_KP_MINUS, 0, 145, 20, "Vol Up" }, + { SDLK_KP_PLUS, 0, 215, 20, "Vol Dn" }, + { 0, 0, 0, 0, "None" } +};