From 7b0f408c7133217fbfa779cb9252f09a0e3cc498 Mon Sep 17 00:00:00 2001 From: "Hairo R. Carela" Date: Mon, 4 Aug 2025 19:52:01 -0400 Subject: [PATCH] rgnano: UI simulator support Change-Id: Id488d16e01ef49a9d1b57641bc1c22ed2fef4931 --- firmware/SOURCES | 4 +- firmware/export/config/rgnano.h | 5 ++ firmware/target/hosted/sdl/sim-ui-defines.h | 7 ++ tools/configure | 6 +- uisimulator/bitmaps/UI-rgnano.bmp | Bin 0 -> 894058 bytes uisimulator/buttonmap/SOURCES | 2 + uisimulator/buttonmap/rg-nano.c | 81 ++++++++++++++++++++ 7 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 uisimulator/bitmaps/UI-rgnano.bmp create mode 100644 uisimulator/buttonmap/rg-nano.c diff --git a/firmware/SOURCES b/firmware/SOURCES index 0806666915..eb8ff78900 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -74,7 +74,7 @@ target/hosted/sdl/lcd-bitmap.c target/hosted/sdl/lcd-remote-bitmap.c #endif target/hosted/sdl/lcd-sdl.c -#ifndef RG_NANO +#if !defined(RG_NANO) || defined(SIMULATOR) target/hosted/sdl/window-sdl.c #endif target/hosted/sdl/system-sdl.c @@ -226,7 +226,7 @@ target/hosted/samsungypr/ypr1/wmcodec-ypr1.c target/hosted/maemo/maemo-thread.c #endif -#ifdef RG_NANO +#if defined(RG_NANO) && !defined(SIMULATOR) target/hosted/sysfs.c target/hosted/power-linux.c target/hosted/backlight-unix.c diff --git a/firmware/export/config/rgnano.h b/firmware/export/config/rgnano.h index 0d743107c4..40c3621f83 100644 --- a/firmware/export/config/rgnano.h +++ b/firmware/export/config/rgnano.h @@ -3,8 +3,11 @@ */ /* We don't run on hardware directly */ +#ifndef SIMULATOR #define CONFIG_PLATFORM (PLATFORM_HOSTED) #define PIVOT_ROOT "/mnt" +#endif + #define HAVE_FPU /* For Rolo and boot loader */ @@ -12,7 +15,9 @@ #define MODEL_NAME "RG Nano" +#ifndef SIMULATOR #define USB_NONE +#endif /* define this if you have a colour LCD */ #define HAVE_LCD_COLOR diff --git a/firmware/target/hosted/sdl/sim-ui-defines.h b/firmware/target/hosted/sdl/sim-ui-defines.h index b8a97411ce..3148abec67 100644 --- a/firmware/target/hosted/sdl/sim-ui-defines.h +++ b/firmware/target/hosted/sdl/sim-ui-defines.h @@ -536,6 +536,13 @@ #define UI_LCD_POSX 46 #define UI_LCD_POSY 61 +#elif defined(RG_NANO) +#define UI_TITLE "Anbernic RG Nano" +#define UI_WIDTH 370 +#define UI_HEIGHT 604 +#define UI_LCD_POSX 64 +#define UI_LCD_POSY 78 + #elif defined(SIMULATOR) #error no UI defines diff --git a/tools/configure b/tools/configure index b66a015564..3fbceb7dd1 100755 --- a/tools/configure +++ b/tools/configure @@ -283,6 +283,11 @@ simcc () { LDOPTS="$LDOPTS -fsanitize=undefined" fi + # Clear FUNKEY_SDK SDL1.2 path from LDOPTS + if [ "$modelname" = "rgnano" ]; then + LDOPTS="" + fi + # Some linux setups like to warn about unused results. They are correct, # but cleaning this up is a lot of work. GCCOPTS="$GCCOPTS -Wno-unused-result" @@ -3667,7 +3672,6 @@ fi t_cpu="hosted" t_manufacturer="anbernic" t_model="rgnano" - extradefines="$extradefines -DOS_USE_BYTESWAP_H" ;; 210|hifietma9) diff --git a/uisimulator/bitmaps/UI-rgnano.bmp b/uisimulator/bitmaps/UI-rgnano.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c53c207fa89f401f4ca028684b2eb490afcd8ada GIT binary patch literal 894058 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 ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Szymon Dziok + * + * 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_KP_4: + case SDLK_LEFT: + new_btn = BUTTON_LEFT; + break; + case SDLK_KP_6: + case SDLK_RIGHT: + new_btn = BUTTON_RIGHT; + break; + case SDLK_KP_8: + case SDLK_UP: + new_btn = BUTTON_UP; + break; + case SDLK_KP_2: + case SDLK_DOWN: + new_btn = BUTTON_DOWN; + break; + case SDLK_KP_5: + case SDLK_RETURN: + case SDLK_x: + new_btn = BUTTON_A; + break; + case SDLK_ESCAPE: + case SDLK_z: + new_btn = BUTTON_B; + break; + case SDLK_s: + new_btn = BUTTON_X; + break; + case SDLK_a: + new_btn = BUTTON_Y; + break; + case SDLK_q: + new_btn = BUTTON_L; + break; + case SDLK_w: + new_btn = BUTTON_R; + break; + case SDLK_n: + new_btn = BUTTON_FN; + break; + case SDLK_m: + new_btn = BUTTON_START; + break; + } + return new_btn; +} + +struct button_map bm[] = { + { 0, 0, 0, 0, "None" } +};