diff --git a/apps/SOURCES b/apps/SOURCES index bfad649847..6fc8a276c8 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -303,4 +303,6 @@ keymaps/keymap-shanlingq1.c keymaps/keymap-echor1.c #elif CONFIG_KEYPAD == SURFANS_F28_PAD keymaps/keymap-surfansf28.c +#elif CONFIG_KEYPAD == RG_NANO_PAD +keymaps/keymap-rgnano.c #endif diff --git a/apps/keymaps/keymap-rgnano.c b/apps/keymaps/keymap-rgnano.c new file mode 100644 index 0000000000..9fff239d56 --- /dev/null +++ b/apps/keymaps/keymap-rgnano.c @@ -0,0 +1,260 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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. + * + ****************************************************************************/ + +/* Button Code Definitions for Android targets */ + +#include +#include +#include + +#include "config.h" +#include "action.h" +#include "button.h" +#include "settings.h" + +/* + * The format of the list is as follows + * { Action Code, Button code, Prereq button code } + * if there's no need to check the previous button's value, use BUTTON_NONE + * Insert LAST_ITEM_IN_LIST at the end of each mapping + */ + +static const struct button_mapping button_context_standard[] = { + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_CANCEL, BUTTON_B, BUTTON_NONE }, + { ACTION_STD_OK, BUTTON_A, BUTTON_NONE }, + { ACTION_STD_MENU, BUTTON_Y|BUTTON_REL, BUTTON_Y }, + { ACTION_STD_CONTEXT, BUTTON_START|BUTTON_REL, BUTTON_START }, + { ACTION_STD_QUICKSCREEN, BUTTON_R|BUTTON_REL, BUTTON_R }, + + LAST_ITEM_IN_LIST +}; /* button_context_standard */ + +static const struct button_mapping button_context_wps[] = { + { ACTION_WPS_PLAY, BUTTON_A|BUTTON_REL, BUTTON_A }, + { ACTION_WPS_STOP, BUTTON_A|BUTTON_REPEAT, BUTTON_A }, + { ACTION_WPS_STOP, BUTTON_L|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, + { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, + { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, + { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, + { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_MENU, BUTTON_B|BUTTON_REL, BUTTON_B }, + { ACTION_WPS_CONTEXT, BUTTON_START|BUTTON_REL, BUTTON_START }, + { ACTION_WPS_HOTKEY, BUTTON_L|BUTTON_REL, BUTTON_L }, + { ACTION_WPS_QUICKSCREEN, BUTTON_R|BUTTON_REL, BUTTON_R }, + { ACTION_WPS_BROWSE, BUTTON_Y|BUTTON_REL, BUTTON_Y }, + { ACTION_WPS_ABSETA_PREVDIR, BUTTON_A|BUTTON_LEFT, BUTTON_NONE }, + { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_A|BUTTON_RIGHT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_wps */ + +static const struct button_mapping button_context_list[] = { + { ACTION_LIST_VOLUP, BUTTON_FN|BUTTON_A, BUTTON_NONE }, + { ACTION_LIST_VOLUP, BUTTON_FN|BUTTON_A|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_FN|BUTTON_Y, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_FN|BUTTON_Y|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_list */ + +static const struct button_mapping button_context_tree[] = { + { ACTION_TREE_WPS, BUTTON_X|BUTTON_REL, BUTTON_X }, + { ACTION_TREE_HOTKEY, BUTTON_L|BUTTON_REL, BUTTON_L }, + { ACTION_TREE_STOP, BUTTON_L|BUTTON_REPEAT, BUTTON_NONE}, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) +}; /* button_context_tree */ + +static const struct button_mapping button_context_listtree_scroll_with_combo[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), +}; + +static const struct button_mapping button_context_listtree_scroll_without_combo[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), +}; + +static const struct button_mapping button_context_settings[] = { + { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settings */ + +static const struct button_mapping button_context_settings_right_is_inc[] = { + { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settingsgraphical */ + +static const struct button_mapping button_context_yesno[] = { + { ACTION_YESNO_ACCEPT, BUTTON_A, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settings_yesno */ + +static const struct button_mapping button_context_colorchooser[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), +}; /* button_context_colorchooser */ + +static const struct button_mapping button_context_eq[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), +}; /* button_context_eq */ + +/** Bookmark Screen **/ +static const struct button_mapping button_context_bmark[] = { + { ACTION_BMS_DELETE, BUTTON_Y, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), +}; /* button_context_bmark */ + +static const struct button_mapping button_context_time[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), +}; /* button_context_time */ + +static const struct button_mapping button_context_quickscreen[] = { + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_quickscreen */ + +static const struct button_mapping button_context_pitchscreen[] = { + { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, + { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, + { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, + { ACTION_PS_TOGGLE_MODE, BUTTON_A, BUTTON_NONE }, + { ACTION_PS_RESET, BUTTON_Y, BUTTON_NONE }, + { ACTION_PS_EXIT, BUTTON_B, BUTTON_NONE }, + { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_pitchcreen */ + +static const struct button_mapping button_context_keyboard[] = { + { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, + { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_L, BUTTON_NONE }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_L|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_R, BUTTON_NONE }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_R|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_SELECT, BUTTON_A, BUTTON_NONE }, + { ACTION_KBD_BACKSPACE, BUTTON_Y|BUTTON_REL, BUTTON_Y }, + { ACTION_KBD_PAGE_FLIP, BUTTON_X, BUTTON_NONE }, + { ACTION_KBD_DONE, BUTTON_START|BUTTON_REL, BUTTON_START }, + { ACTION_KBD_ABORT, BUTTON_B|BUTTON_REL, BUTTON_B }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_keyboard */ + +static const struct button_mapping button_context_radio[] = { + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) +}; /* button_context_radio */ + +const struct button_mapping* get_context_mapping(int context) +{ + switch (context) + { + case CONTEXT_STD: + return button_context_standard; + case CONTEXT_WPS: + return button_context_wps; + + case CONTEXT_LIST: + return button_context_list; + case CONTEXT_MAINMENU: + case CONTEXT_TREE: + if (global_settings.hold_lr_for_scroll_in_list) + return button_context_listtree_scroll_without_combo; + else + return button_context_listtree_scroll_with_combo; + case CONTEXT_CUSTOM|CONTEXT_TREE: + return button_context_tree; + + case CONTEXT_SETTINGS: + return button_context_settings; + case CONTEXT_CUSTOM|CONTEXT_SETTINGS: + case CONTEXT_SETTINGS_RECTRIGGER: + return button_context_settings_right_is_inc; + + case CONTEXT_SETTINGS_COLOURCHOOSER: + return button_context_colorchooser; + case CONTEXT_SETTINGS_EQ: + return button_context_eq; + + case CONTEXT_SETTINGS_TIME: + return button_context_time; + + case CONTEXT_YESNOSCREEN: + return button_context_yesno; + case CONTEXT_FM: + return button_context_radio; + case CONTEXT_BOOKMARKSCREEN: + return button_context_bmark; + case CONTEXT_QUICKSCREEN: + return button_context_quickscreen; + case CONTEXT_PITCHSCREEN: + return button_context_pitchscreen; + case CONTEXT_KEYBOARD: + return button_context_keyboard; + } + return button_context_standard; +} diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 8e263b3ac9..ead79a2e3b 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -26,7 +26,6 @@ playing_time.c properties.c random_folder_advance_config.c rb_info.c -rockblox.c search.c settings_dumper.c snow.c @@ -89,7 +88,7 @@ crypt_firmware.c /* Overlays loaders */ -#if defined(HAVE_LCD_COLOR) && (LCD_STRIDEFORMAT == HORIZONTAL_STRIDE) +#if defined(HAVE_LCD_COLOR) && (LCD_STRIDEFORMAT == HORIZONTAL_STRIDE) && !defined(RG_NANO) /* Build issues */ #if (PLUGIN_BUFFER_SIZE > 0x14000) && (CONFIG_PLATFORM & (PLATFORM_NATIVE |PLATFORM_HOSTED)) && (defined(CPU_ARM) || defined(CPU_MIPS)) duke3d.c quake.c @@ -140,9 +139,15 @@ robotfindskitten.c xobox.c spacerocks.c +#if (LCD_WIDTH != 240) && (LCD_HEIGHT != 240) +/* No 240x240 support */ +rockblox.c +bubbles.c +wormlet.c +#endif + blackjack.c bounce.c -bubbles.c calculator.c chip8.c chopper.c @@ -162,7 +167,6 @@ sokoban.c star.c starfield.c vu_meter.c -wormlet.c #ifdef HAVE_HOTKEY announce_status.c @@ -199,7 +203,7 @@ rocklife.c matrix.c speedread.c -#if (LCD_WIDTH > 138) +#if (LCD_WIDTH > 138) && ((LCD_WIDTH != 240) && (LCD_HEIGHT != 240)) invadrox.c superdom.c #endif diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index b1f19d2eac..549858fd0f 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS @@ -13,7 +13,7 @@ clock xworld /* for duke3d, wolf3d and quake */ -#if (PLUGIN_BUFFER_SIZE > 0x14000) && (CONFIG_PLATFORM & (PLATFORM_NATIVE|PLATFORM_HOSTED)) && (defined(CPU_ARM) || defined(CPU_MIPS)) +#if (PLUGIN_BUFFER_SIZE > 0x14000) && (CONFIG_PLATFORM & (PLATFORM_NATIVE|PLATFORM_HOSTED)) && (defined(CPU_ARM) || defined(CPU_MIPS)) && !defined(RG_NANO) sdl #endif @@ -41,7 +41,10 @@ fft chessbox fractals imageviewer +#if (LCD_WIDTH != 240) && (LCD_HEIGHT != 240) +/* No 240x240 support */ sudoku +#endif reversi goban frotz diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index 925653842f..c9462f79ee 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c @@ -259,6 +259,12 @@ struct battery_tables_t { #define BATTERY_ON_TXT "Play" #define BATTERY_OFF_TXT "Back" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define BATTERY_ON BUTTON_A +#define BATTERY_OFF BUTTON_X +#define BATTERY_ON_TXT "A" +#define BATTERY_OFF_TXT "X" + #else #error "No keymap defined!" #endif diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index cfc9ebcf6a..caa7396018 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -500,6 +500,8 @@ jewels.160x128x16.bmp jewels.220x176x16.bmp #elif (LCD_WIDTH == 176) && (LCD_HEIGHT == 220) jewels.220x176x16.bmp +#elif (LCD_WIDTH == 240) && (LCD_HEIGHT >= 240) +jewels.240x240x16.bmp #elif (LCD_WIDTH == 240) && (LCD_HEIGHT >= 320) jewels.320x240x16.bmp #elif (LCD_WIDTH == 320) && (LCD_HEIGHT == 240) diff --git a/apps/plugins/bitmaps/native/jewels.240x240x16.bmp b/apps/plugins/bitmaps/native/jewels.240x240x16.bmp new file mode 100644 index 0000000000..706e574f5d Binary files /dev/null and b/apps/plugins/bitmaps/native/jewels.240x240x16.bmp differ diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c index 761cc6a882..8480adf3cb 100644 --- a/apps/plugins/blackjack.c +++ b/apps/plugins/blackjack.c @@ -612,6 +612,22 @@ enum { #define BJACK_QUIT BUTTON_POWER #define BJACK_QUIT_NAME "QUIT" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define BJACK_SELECT_NAME "A" +#define BJACK_STAY_NAME "Y" +#define BJACK_QUIT_NAME "START" +#define BJACK_DOUBLE_NAME "R" +#define BJACK_SELECT BUTTON_A +#define BJACK_QUIT BUTTON_START +#define BJACK_MAX BUTTON_X +#define BJACK_MIN BUTTON_B +#define BJACK_STAY BUTTON_Y +#define BJACK_DOUBLEDOWN BUTTON_R +#define BJACK_UP BUTTON_UP +#define BJACK_DOWN BUTTON_DOWN +#define BJACK_RIGHT BUTTON_RIGHT +#define BJACK_LEFT BUTTON_LEFT + #else #error No keymap defined! #endif diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index d3a262ed22..ff7c717f42 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -373,6 +373,15 @@ CONFIG_KEYPAD == SANSA_M200_PAD #define UP BUTTON_UP #define DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CONTINUE_TEXT "A To Continue" +#define QUIT BUTTON_START +#define LEFT BUTTON_LEFT +#define RIGHT BUTTON_RIGHT +#define SELECT BUTTON_A +#define UP BUTTON_UP +#define DOWN BUTTON_DOWN + #else #error No keymap defined! #endif diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c index f754cf6339..c38de5ffdf 100644 --- a/apps/plugins/calculator.c +++ b/apps/plugins/calculator.c @@ -546,6 +546,17 @@ F3: equal to "=" #define CALCULATOR_CALC BUTTON_MENU #define CALCULATOR_CLEAR BUTTON_BACK +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define CALCULATOR_LEFT BUTTON_LEFT +#define CALCULATOR_RIGHT BUTTON_RIGHT +#define CALCULATOR_UP BUTTON_UP +#define CALCULATOR_DOWN BUTTON_DOWN +#define CALCULATOR_QUIT BUTTON_START +#define CALCULATOR_INPUT BUTTON_A +#define CALCULATOR_CALC BUTTON_X +#define CALCULATOR_CLEAR BUTTON_B + #else #error No keymap defined! #endif diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index 1a72d3d990..858e3dfac8 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -432,6 +432,17 @@ #define CALENDAR_NEXT_MONTH BUTTON_MENU #define CALENDAR_PREV_MONTH BUTTON_BACK +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CALENDAR_QUIT BUTTON_START +#define CALENDAR_SELECT BUTTON_A +#define CALENDAR_NEXT_WEEK BUTTON_DOWN +#define CALENDAR_PREV_WEEK BUTTON_UP +#define CALENDAR_NEXT_DAY BUTTON_RIGHT +#define CALENDAR_PREV_DAY BUTTON_LEFT +#define CALENDAR_NEXT_MONTH BUTTON_R +#define CALENDAR_PREV_MONTH BUTTON_L +#define CALENDAR_EVENT_MENU_NAME "A" + #else #error "No keypad setting." #endif diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h index e25394b4fb..f8baf47faf 100644 --- a/apps/plugins/chessbox/chessbox_pgn.h +++ b/apps/plugins/chessbox/chessbox_pgn.h @@ -598,6 +598,21 @@ #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CB_SELECT BUTTON_A +#define CB_UP BUTTON_UP +#define CB_DOWN BUTTON_DOWN +#define CB_LEFT BUTTON_LEFT +#define CB_RIGHT BUTTON_RIGHT +#define CB_PLAY BUTTON_X +#define CB_LEVEL BUTTON_Y +#define CB_MENU BUTTON_B +#define CB_RESTART BUTTON_R +#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) +#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) +#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) +#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) +#define CB_RC_QUIT BUTTON_START #else #error No keymap defined! diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c index cf6796b572..746d061e66 100644 --- a/apps/plugins/chessclock.c +++ b/apps/plugins/chessclock.c @@ -408,6 +408,16 @@ #define CHC_SETTINGS_OK BUTTON_PLAY #define CHC_SETTINGS_CANCEL BUTTON_BACK +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CHC_QUIT BUTTON_START +#define CHC_STARTSTOP BUTTON_A +#define CHC_RESET BUTTON_X +#define CHC_MENU BUTTON_B +#define CHC_SETTINGS_INC BUTTON_UP +#define CHC_SETTINGS_DEC BUTTON_DOWN +#define CHC_SETTINGS_OK BUTTON_A +#define CHC_SETTINGS_CANCEL BUTTON_B + #else #error No keymap defined! #endif diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c index 47d76aab55..d07781c2f0 100644 --- a/apps/plugins/chip8.c +++ b/apps/plugins/chip8.c @@ -1299,6 +1299,18 @@ CONFIG_KEYPAD == MROBE500_PAD #define CHIP8_KEY6 BUTTON_RIGHT #define CHIP8_KEY8 BUTTON_LEFT +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CHIP8_OFF BUTTON_START +#define CHIP8_KEY1 BUTTON_Y +#define CHIP8_KEY2 BUTTON_A +#define CHIP8_KEY3 BUTTON_X +#define CHIP8_KEY4 BUTTON_LEFT +#define CHIP8_KEY5 BUTTON_UP +#define CHIP8_KEY6 BUTTON_RIGHT +#define CHIP8_KEY7 BUTTON_B +#define CHIP8_KEY8 BUTTON_DOWN +#define CHIP8_KEY9 BUTTON_R +#define CHIP8_KEY0 BUTTON_L #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c index d36d955552..a3071adfb2 100644 --- a/apps/plugins/chopper.c +++ b/apps/plugins/chopper.c @@ -207,6 +207,12 @@ CONFIG_KEYPAD == MROBE500_PAD #define ACTION BUTTON_PLAY #define ACTIONTEXT "PLAY" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define QUIT BUTTON_START +#define ACTION BUTTON_A +#define ACTION2 BUTTON_B +#define ACTIONTEXT "A" + #elif !defined(HAVE_TOUCHSCREEN) #error No keymap defined! #endif diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c index 325a39685e..08c77b4a01 100644 --- a/apps/plugins/clix.c +++ b/apps/plugins/clix.c @@ -325,6 +325,14 @@ #define CLIX_BUTTON_RIGHT BUTTON_RIGHT #define CLIX_BUTTON_CLICK BUTTON_PLAY +#elif (CONFIG_KEYPAD == RG_NANO_PAD) +#define CLIX_BUTTON_QUIT BUTTON_START +#define CLIX_BUTTON_LEFT BUTTON_LEFT +#define CLIX_BUTTON_RIGHT BUTTON_RIGHT +#define CLIX_BUTTON_CLICK BUTTON_A +#define CLIX_BUTTON_UP BUTTON_UP +#define CLIX_BUTTON_DOWN BUTTON_DOWN + #else #error "no keymap" #endif diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index f67d8e8198..6469ce8eee 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c @@ -415,6 +415,16 @@ #define CUBE_PAUSE BUTTON_PLAY #define CUBE_HIGHSPEED (BUTTON_PLAY|BUTTON_REPEAT) +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define CUBE_QUIT BUTTON_START +#define CUBE_NEXT BUTTON_RIGHT +#define CUBE_PREV BUTTON_LEFT +#define CUBE_INC BUTTON_UP +#define CUBE_DEC BUTTON_DOWN +#define CUBE_MODE BUTTON_X +#define CUBE_PAUSE BUTTON_A +#define CUBE_HIGHSPEED BUTTON_Y + #else #error No keymap defined! #endif diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c index 71220580d5..acbe83066b 100644 --- a/apps/plugins/doom/i_video.c +++ b/apps/plugins/doom/i_video.c @@ -633,6 +633,18 @@ void I_ShutdownGraphics(void) #define DOOMBUTTON_ESC BUTTON_POWER #define DOOMBUTTON_MAP BUTTON_PREV +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define DOOMBUTTON_UP BUTTON_UP +#define DOOMBUTTON_DOWN BUTTON_DOWN +#define DOOMBUTTON_LEFT BUTTON_LEFT +#define DOOMBUTTON_RIGHT BUTTON_RIGHT +#define DOOMBUTTON_SHOOT BUTTON_R +#define DOOMBUTTON_OPEN BUTTON_B +#define DOOMBUTTON_ESC BUTTON_START +#define DOOMBUTTON_ENTER BUTTON_A +#define DOOMBUTTON_WEAPON BUTTON_X +#define DOOMBUTTON_MAP BUTTON_Y + #else #error Keymap not defined! #endif diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c index ec004f6614..c881f2b391 100644 --- a/apps/plugins/doom/rockdoom.c +++ b/apps/plugins/doom/rockdoom.c @@ -202,7 +202,11 @@ const unsigned char versions_builtin[7][20] = "TNT" }; +#ifdef RG_NANO /* Path is a bit longer */ +const unsigned char wads_builtin[7][34] = +#else const unsigned char wads_builtin[7][30] = +#endif { GAMEBASE"doom1.wad", GAMEBASE"doom.wad", diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c index 89e80f842f..b65e7a59ca 100644 --- a/apps/plugins/flipit.c +++ b/apps/plugins/flipit.c @@ -509,6 +509,20 @@ #define FLIPIT_STEP_BY_STEP (BUTTON_PLAY|BUTTON_REPEAT) #define FLIPIT_TOGGLE BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define FLIPIT_LEFT BUTTON_LEFT +#define FLIPIT_RIGHT BUTTON_RIGHT +#define FLIPIT_UP BUTTON_UP +#define FLIPIT_DOWN BUTTON_DOWN +#define FLIPIT_NEXT BUTTON_R +#define FLIPIT_PREV BUTTON_L +#define FLIPIT_QUIT BUTTON_START +#define FLIPIT_SHUFFLE BUTTON_B +#define FLIPIT_SOLVE BUTTON_X +#define FLIPIT_STEP_BY_STEP BUTTON_Y +#define FLIPIT_TOGGLE BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h index d5c928c92b..2ed4938b0a 100644 --- a/apps/plugins/fractals/fractal.h +++ b/apps/plugins/fractals/fractal.h @@ -519,6 +519,18 @@ #define FRACTAL_PRECISION_DEC (BUTTON_BACK | BUTTON_DOWN) #define FRACTAL_RESET BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define FRACTAL_QUIT BUTTON_START +#define FRACTAL_UP BUTTON_UP +#define FRACTAL_DOWN BUTTON_DOWN +#define FRACTAL_LEFT BUTTON_LEFT +#define FRACTAL_RIGHT BUTTON_RIGHT +#define FRACTAL_ZOOM_IN BUTTON_X +#define FRACTAL_ZOOM_OUT BUTTON_B +#define FRACTAL_PRECISION_INC BUTTON_R +#define FRACTAL_PRECISION_DEC BUTTON_L +#define FRACTAL_RESET BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h index 67a07b4972..d084a598f6 100644 --- a/apps/plugins/goban/goban.h +++ b/apps/plugins/goban/goban.h @@ -512,6 +512,18 @@ #define GBN_BUTTON_MENU BUTTON_MENU #define GBN_BUTTON_PLAY BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define GBN_BUTTON_UP BUTTON_UP +#define GBN_BUTTON_DOWN BUTTON_DOWN +#define GBN_BUTTON_LEFT BUTTON_LEFT +#define GBN_BUTTON_RIGHT BUTTON_RIGHT +#define GBN_BUTTON_RETREAT BUTTON_L +#define GBN_BUTTON_ADVANCE BUTTON_R +#define GBN_BUTTON_MENU BUTTON_B +#define GBN_BUTTON_PLAY BUTTON_A +#define GBN_BUTTON_CONTEXT BUTTON_X +#define GBN_BUTTON_NEXT_VAR BUTTON_Y + #else #error Unsupported keypad #endif diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h index ce359f3b25..95c9e79a69 100644 --- a/apps/plugins/imageviewer/imageviewer_button.h +++ b/apps/plugins/imageviewer/imageviewer_button.h @@ -557,11 +557,21 @@ #define IMGVIEW_MENU (BUTTON_PLAY|BUTTON_REPEAT) #define IMGVIEW_SLIDE_SHOW BUTTON_PLAY - - #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define IMGVIEW_ZOOM_IN BUTTON_X +#define IMGVIEW_ZOOM_OUT BUTTON_Y +#define IMGVIEW_UP BUTTON_UP +#define IMGVIEW_DOWN BUTTON_DOWN +#define IMGVIEW_LEFT BUTTON_LEFT +#define IMGVIEW_RIGHT BUTTON_RIGHT +#define IMGVIEW_NEXT BUTTON_R +#define IMGVIEW_PREVIOUS BUTTON_L +#define IMGVIEW_MENU BUTTON_B +#define IMGVIEW_QUIT BUTTON_START + #else #error No keymap defined! #endif diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index ab8e9ad588..66da8bc96a 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -390,6 +390,16 @@ CONFIG_KEYPAD == MROBE500_PAD #define HK_SELECT "PLAY" #define HK_CANCEL "BACK" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define JEWELS_UP BUTTON_UP +#define JEWELS_DOWN BUTTON_DOWN +#define JEWELS_LEFT BUTTON_LEFT +#define JEWELS_RIGHT BUTTON_RIGHT +#define JEWELS_SELECT BUTTON_A +#define JEWELS_CANCEL BUTTON_START +#define HK_SELECT "A" +#define HK_CANCEL "START" + #else #error No keymap defined! #endif diff --git a/apps/plugins/lib/keymaps.h b/apps/plugins/lib/keymaps.h index 86ced8c26c..c3f9399cc6 100644 --- a/apps/plugins/lib/keymaps.h +++ b/apps/plugins/lib/keymaps.h @@ -272,6 +272,14 @@ #define BTN_FIRE BUTTON_PLAY #define BTN_PAUSE BUTTON_MENU +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define BTN_UP BUTTON_UP +#define BTN_DOWN BUTTON_DOWN +#define BTN_LEFT BUTTON_LEFT +#define BTN_RIGHT BUTTON_RIGHT +#define BTN_FIRE BUTTON_A +#define BTN_PAUSE BUTTON_START + #else #error Unsupported keypad #endif diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c index 1a94f0d5fe..ccbeec3acd 100644 --- a/apps/plugins/lib/pluginlib_actions.c +++ b/apps/plugins/lib/pluginlib_actions.c @@ -277,6 +277,15 @@ const struct button_mapping pla_main_ctx[] = { PLA_DOWN_REPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, +#elif (CONFIG_KEYPAD == RG_NANO_PAD) + { PLA_UP, BUTTON_UP, BUTTON_NONE }, + { PLA_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { PLA_UP_REPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { PLA_DOWN_REPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, #else # ifndef HAVE_TOUCHSCREEN # error pluginlib_actions: No directions defined @@ -516,6 +525,12 @@ const struct button_mapping pla_main_ctx[] = {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, +#elif (CONFIG_KEYPAD == RG_NANO_PAD) + {PLA_EXIT, BUTTON_START, BUTTON_NONE}, + {PLA_CANCEL, BUTTON_B, BUTTON_NONE}, + {PLA_SELECT, BUTTON_A, BUTTON_NONE}, + {PLA_SELECT_REL, BUTTON_A|BUTTON_REL, BUTTON_A}, + {PLA_SELECT_REPEAT, BUTTON_A|BUTTON_REPEAT, BUTTON_NONE}, #else # ifndef HAVE_TOUCHSCREEN # error pluginlib_actions: No actions defined diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c index bf79b5038b..67a789977a 100644 --- a/apps/plugins/midi/midiplay.c +++ b/apps/plugins/midi/midiplay.c @@ -336,6 +336,14 @@ #define MIDI_VOL_DOWN BUTTON_DOWN #define MIDI_PLAYPAUSE BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define MIDI_QUIT BUTTON_START +#define MIDI_FFWD BUTTON_RIGHT +#define MIDI_REWIND BUTTON_LEFT +#define MIDI_VOL_UP BUTTON_UP +#define MIDI_VOL_DOWN BUTTON_DOWN +#define MIDI_PLAYPAUSE BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c index 78e37161ea..6ba31598ed 100644 --- a/apps/plugins/minesweeper.c +++ b/apps/plugins/minesweeper.c @@ -455,6 +455,16 @@ CONFIG_KEYPAD == MROBE500_PAD #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD +# define MINESWP_LEFT BUTTON_LEFT +# define MINESWP_RIGHT BUTTON_RIGHT +# define MINESWP_UP BUTTON_UP +# define MINESWP_DOWN BUTTON_DOWN +# define MINESWP_QUIT BUTTON_START +# define MINESWP_TOGGLE BUTTON_X +# define MINESWP_DISCOVER BUTTON_A +# define MINESWP_INFO BUTTON_Y + #else #error No keymap defined! #endif diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c index a9f5fa2c0b..21a0f8c5ff 100644 --- a/apps/plugins/mp3_encoder.c +++ b/apps/plugins/mp3_encoder.c @@ -2592,6 +2592,12 @@ CONFIG_KEYPAD == MROBE500_PAD #define MP3ENC_DONE BUTTON_BACK #define MP3ENC_SELECT BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define MP3ENC_PREV BUTTON_UP +#define MP3ENC_NEXT BUTTON_DOWN +#define MP3ENC_DONE BUTTON_START +#define MP3ENC_SELECT BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c index e0a71c8f33..e9b14a946a 100644 --- a/apps/plugins/mpegplayer/mpeg_settings.c +++ b/apps/plugins/mpegplayer/mpeg_settings.c @@ -365,6 +365,16 @@ struct mpeg_settings settings; #elif CONFIG_KEYPAD == SHANLING_Q1_PAD #define MPEG_START_TIME_EXIT BUTTON_POWER +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define MPEG_START_TIME_SELECT BUTTON_A +#define MPEG_START_TIME_LEFT BUTTON_LEFT +#define MPEG_START_TIME_RIGHT BUTTON_RIGHT +#define MPEG_START_TIME_LEFT2 BUTTON_L +#define MPEG_START_TIME_RIGHT2 BUTTON_R +#define MPEG_START_TIME_UP BUTTON_UP +#define MPEG_START_TIME_DOWN BUTTON_DOWN +#define MPEG_START_TIME_EXIT BUTTON_START + #else #error No keymap defined! #endif diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c index 677e19e17c..96645d48ea 100644 --- a/apps/plugins/mpegplayer/mpegplayer.c +++ b/apps/plugins/mpegplayer/mpegplayer.c @@ -498,6 +498,15 @@ CONFIG_KEYPAD == SANSA_M200_PAD #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define MPEG_MENU BUTTON_START +#define MPEG_STOP BUTTON_X +#define MPEG_PAUSE BUTTON_A +#define MPEG_VOLDOWN BUTTON_DOWN +#define MPEG_VOLUP BUTTON_UP +#define MPEG_RW BUTTON_LEFT +#define MPEG_FF BUTTON_RIGHT + #else #error No keymap defined! #endif diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index 822466656b..576d92f64e 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -564,6 +564,18 @@ #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define OSCILLOSCOPE_QUIT BUTTON_START +#define OSCILLOSCOPE_DRAWMODE BUTTON_X +#define OSCILLOSCOPE_ADVMODE BUTTON_Y +#define OSCILLOSCOPE_ORIENTATION BUTTON_R +#define OSCILLOSCOPE_GRAPHMODE BUTTON_B +#define OSCILLOSCOPE_PAUSE BUTTON_A +#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT +#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT +#define OSCILLOSCOPE_VOL_UP BUTTON_UP +#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN + #else #error No keymap defined! #endif diff --git a/apps/plugins/pacbox/pacbox.h b/apps/plugins/pacbox/pacbox.h index f01dcc9cea..4e6e2704dc 100644 --- a/apps/plugins/pacbox/pacbox.h +++ b/apps/plugins/pacbox/pacbox.h @@ -418,6 +418,17 @@ #define PACMAN_COIN BUTTON_PLAY #define PACMAN_MENU BUTTON_MENU +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define PACMAN_UP BUTTON_UP +#define PACMAN_DOWN BUTTON_DOWN +#define PACMAN_LEFT BUTTON_LEFT +#define PACMAN_RIGHT BUTTON_RIGHT +#define PACMAN_1UP BUTTON_L +#define PACMAN_2UP BUTTON_R +#define PACMAN_COIN BUTTON_A +#define PACMAN_MENU BUTTON_START + #else #error Keymap not defined! diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c index f5d0abbf15..72e9ba06bf 100644 --- a/apps/plugins/pegbox.c +++ b/apps/plugins/pegbox.c @@ -731,6 +731,23 @@ CONFIG_KEYPAD == MROBE500_PAD #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define PEGBOX_SELECT BUTTON_A +#define PEGBOX_QUIT BUTTON_START +#define PEGBOX_RESTART BUTTON_B +#define PEGBOX_LVL_UP BUTTON_R +#define PEGBOX_LVL_DOWN BUTTON_L +#define PEGBOX_UP BUTTON_UP +#define PEGBOX_DOWN BUTTON_DOWN +#define PEGBOX_RIGHT BUTTON_RIGHT +#define PEGBOX_LEFT BUTTON_LEFT + +#define SELECT_TEXT "A" +#define QUIT_TEXT "START" +#define RESTART_TEXT "B" +#define LVL_UP_TEXT "R" +#define LVL_DOWN_TEXT "L" + #else #error "Unsupported keymap!" #endif diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c index 7b935aa140..b00e837b62 100644 --- a/apps/plugins/pong.c +++ b/apps/plugins/pong.c @@ -336,6 +336,14 @@ CONFIG_KEYPAD == MROBE500_PAD #define PONG_RIGHT_UP BUTTON_BACK #define PONG_RIGHT_DOWN BUTTON_RIGHT +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define PONG_QUIT BUTTON_START +#define PONG_PAUSE BUTTON_A +#define PONG_LEFT_UP BUTTON_UP +#define PONG_LEFT_DOWN BUTTON_DOWN +#define PONG_RIGHT_UP BUTTON_X +#define PONG_RIGHT_DOWN BUTTON_Y + #else #error No keymap defined! #endif diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h index 25da80a145..4269f7b004 100644 --- a/apps/plugins/reversi/reversi-gui.h +++ b/apps/plugins/reversi/reversi-gui.h @@ -373,6 +373,15 @@ #define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY #define REVERSI_BUTTON_MENU BUTTON_MENU +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define REVERSI_BUTTON_QUIT BUTTON_START +#define REVERSI_BUTTON_UP BUTTON_UP +#define REVERSI_BUTTON_DOWN BUTTON_DOWN +#define REVERSI_BUTTON_LEFT BUTTON_LEFT +#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT +#define REVERSI_BUTTON_MAKE_MOVE BUTTON_A +#define REVERSI_BUTTON_MENU BUTTON_B + #else #error No keymap defined! #endif diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index 8f28cfbf2f..3d30524a89 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c @@ -484,6 +484,14 @@ static void setoptions (void) options.SELECT = (BUTTON_PLAY|BUTTON_MENU); options.MENU = BUTTON_MENU; +#elif CONFIG_KEYPAD == RG_NANO_PAD + options.UP = BUTTON_UP; + options.DOWN = BUTTON_DOWN; + options.A = BUTTON_A; + options.B = BUTTON_B; + options.START = BUTTON_START; + options.SELECT = BUTTON_FN; + options.MENU = BUTTON_X; #else #error No Keymap Defined! diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index bf532f7b51..01fe84f1b4 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c @@ -369,6 +369,15 @@ CONFIG_KEYPAD == MROBE500_PAD #define PUZZLE_SHUFFLE BUTTON_MENU #define PUZZLE_PICTURE BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define PUZZLE_QUIT BUTTON_START +#define PUZZLE_LEFT BUTTON_LEFT +#define PUZZLE_RIGHT BUTTON_RIGHT +#define PUZZLE_UP BUTTON_UP +#define PUZZLE_DOWN BUTTON_DOWN +#define PUZZLE_SHUFFLE BUTTON_B +#define PUZZLE_PICTURE BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index a4f79d924f..03b8d75d99 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c @@ -324,6 +324,14 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; #define SNAKE_DOWN BUTTON_DOWN #define SNAKE_PLAYPAUSE BUTTON_PLAY +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define SNAKE_QUIT BUTTON_START +#define SNAKE_LEFT BUTTON_LEFT +#define SNAKE_RIGHT BUTTON_RIGHT +#define SNAKE_UP BUTTON_UP +#define SNAKE_DOWN BUTTON_DOWN +#define SNAKE_PLAYPAUSE BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c index b6c3fc07e6..3f0434c2cf 100644 --- a/apps/plugins/snake2.c +++ b/apps/plugins/snake2.c @@ -470,6 +470,15 @@ CONFIG_KEYPAD == MROBE500_PAD #define SNAKE2_PLAYPAUSE BUTTON_PLAY #define SNAKE2_PLAYPAUSE_TEXT "PLAY" +#elif (CONFIG_KEYPAD == RG_NANO_PAD) +#define SNAKE2_LEFT BUTTON_LEFT +#define SNAKE2_RIGHT BUTTON_RIGHT +#define SNAKE2_UP BUTTON_UP +#define SNAKE2_DOWN BUTTON_DOWN +#define SNAKE2_QUIT BUTTON_START +#define SNAKE2_PLAYPAUSE BUTTON_A +#define SNAKE2_PLAYPAUSE_TEXT "A" + #else #error No keymap defined! #endif diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c index b6b370f39c..f52ade7b71 100644 --- a/apps/plugins/sokoban.c +++ b/apps/plugins/sokoban.c @@ -714,6 +714,20 @@ #define BUTTON_SAVE (BUTTON_MENU|BUTTON_BACK) #define BUTTON_SAVE_NAME "BACK" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define SOKOBAN_LEFT BUTTON_LEFT +#define SOKOBAN_RIGHT BUTTON_RIGHT +#define SOKOBAN_UP BUTTON_UP +#define SOKOBAN_DOWN BUTTON_DOWN +#define SOKOBAN_MENU BUTTON_START +#define SOKOBAN_UNDO BUTTON_B +#define SOKOBAN_REDO BUTTON_Y +#define SOKOBAN_LEVEL_REPEAT BUTTON_R +#define SOKOBAN_QUIT_REPLAY BUTTON_X +#define SOKOBAN_PAUSE BUTTON_L +#define BUTTON_SAVE BUTTON_A +#define BUTTON_SAVE_NAME "A" + #else #error No keymap defined! #endif diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index 314610da8d..388a01abd2 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -744,6 +744,23 @@ CONFIG_KEYPAD == MROBE500_PAD #elif CONFIG_KEYPAD == SHANLING_Q1_PAD # define SOL_QUIT BUTTON_POWER +#elif CONFIG_KEYPAD == RG_NANO_PAD +# define SOL_QUIT BUTTON_START +# define SOL_UP BUTTON_UP +# define SOL_DOWN BUTTON_DOWN +# define SOL_LEFT BUTTON_LEFT +# define SOL_RIGHT BUTTON_RIGHT +# define SOL_MOVE BUTTON_A +# define SOL_DRAW BUTTON_X +# define SOL_REM2CUR BUTTON_L +# define SOL_CUR2STACK BUTTON_B +# define SOL_REM2STACK BUTTON_R +# define HK_MOVE "A" +# define HK_DRAW "X" +# define HK_REM2CUR "L" +# define HK_CUR2STACK "B" +# define HK_REM2STACK "R" + #elif CONFIG_KEYPAD == MA_PAD # define SOL_QUIT (BUTTON_LEFT|BUTTON_REPEAT) # define SOL_UP BUTTON_UP diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c index 3cbfd13dd9..b5b382b4dc 100644 --- a/apps/plugins/spacerocks.c +++ b/apps/plugins/spacerocks.c @@ -384,6 +384,15 @@ #define AST_RIGHT BUTTON_RIGHT #define AST_FIRE BUTTON_DOWN +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define AST_PAUSE BUTTON_X +#define AST_QUIT BUTTON_START +#define AST_THRUST BUTTON_UP +#define AST_HYPERSPACE BUTTON_DOWN +#define AST_LEFT BUTTON_LEFT +#define AST_RIGHT BUTTON_RIGHT +#define AST_FIRE BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/star.c b/apps/plugins/star.c index bee24fca53..fe4b763bc0 100644 --- a/apps/plugins/star.c +++ b/apps/plugins/star.c @@ -688,6 +688,22 @@ #define STAR_LEVEL_DOWN_NAME "MENU+DOWN" #define STAR_LEVEL_REPEAT_NAME "MENU" +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define STAR_QUIT BUTTON_START +#define STAR_LEFT BUTTON_LEFT +#define STAR_RIGHT BUTTON_RIGHT +#define STAR_UP BUTTON_UP +#define STAR_DOWN BUTTON_DOWN +#define STAR_TOGGLE_CONTROL BUTTON_A +#define STAR_LEVEL_UP BUTTON_R +#define STAR_LEVEL_DOWN BUTTON_L +#define STAR_LEVEL_REPEAT BUTTON_B +#define STAR_TOGGLE_CONTROL_NAME "A" +#define STAR_QUIT_NAME "START" +#define STAR_LEVEL_UP_NAME "R" +#define STAR_LEVEL_DOWN_NAME "L" +#define STAR_LEVEL_REPEAT_NAME "B" #else #error No keymap defined! diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c index c760569c6c..26d4aeb6ea 100644 --- a/apps/plugins/stopwatch.c +++ b/apps/plugins/stopwatch.c @@ -306,6 +306,14 @@ #define STOPWATCH_SCROLL_UP BUTTON_UP #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define STOPWATCH_QUIT BUTTON_START +#define STOPWATCH_START_STOP BUTTON_A +#define STOPWATCH_RESET_TIMER BUTTON_X +#define STOPWATCH_LAP_TIMER BUTTON_Y +#define STOPWATCH_SCROLL_UP BUTTON_UP +#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN + #else #error No keymap defined! #endif diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h index f21faa0a41..f77b8b2fcc 100644 --- a/apps/plugins/text_viewer/tv_button.h +++ b/apps/plugins/text_viewer/tv_button.h @@ -587,6 +587,18 @@ #define TV_LINE_DOWN BUTTON_DOWN #define TV_BOOKMARK (BUTTON_MENU|BUTTON_PLAY) +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define TV_QUIT BUTTON_START +#define TV_SCROLL_UP BUTTON_UP +#define TV_SCROLL_DOWN BUTTON_DOWN +#define TV_SCREEN_LEFT BUTTON_LEFT +#define TV_SCREEN_RIGHT BUTTON_RIGHT +#define TV_MENU BUTTON_B +#define TV_AUTOSCROLL BUTTON_X +#define TV_LINE_UP BUTTON_R +#define TV_LINE_DOWN BUTTON_L +#define TV_BOOKMARK BUTTON_A + #else #error No keymap defined! #endif diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index 3c8b9a4dd5..3f759db513 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -468,6 +468,17 @@ #define LABEL_MENU "MENU" #define LABEL_VOLUME "UP/DOWN" +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define VUMETER_QUIT BUTTON_START +#define VUMETER_HELP BUTTON_A +#define VUMETER_MENU BUTTON_B +#define VUMETER_UP BUTTON_UP +#define VUMETER_DOWN BUTTON_DOWN +#define LABEL_HELP "A" +#define LABEL_QUIT "START" +#define LABEL_MENU "B" +#define LABEL_VOLUME "UP/DOWN" + #else #error No keymap defined! #endif diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c index 5e4bc2bfaf..632d32385a 100644 --- a/apps/plugins/xobox.c +++ b/apps/plugins/xobox.c @@ -363,6 +363,15 @@ CONFIG_KEYPAD == MROBE500_PAD #elif CONFIG_KEYPAD == SHANLING_Q1_PAD /* use touchscreen */ +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define QUIT BUTTON_START +#define LEFT BUTTON_LEFT +#define RIGHT BUTTON_RIGHT +#define UP BUTTON_UP +#define DOWN BUTTON_DOWN +#define PAUSE BUTTON_A + #else #error "No keymap defined!" #endif diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h index 1279e53931..9f82e29beb 100644 --- a/apps/plugins/zxbox/keymaps.h +++ b/apps/plugins/zxbox/keymaps.h @@ -301,6 +301,14 @@ #define ZX_UP BUTTON_UP #define ZX_DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == RG_NANO_PAD +#define ZX_UP BUTTON_UP +#define ZX_DOWN BUTTON_DOWN +#define ZX_LEFT BUTTON_LEFT +#define ZX_RIGHT BUTTON_RIGHT +#define ZX_SELECT BUTTON_A +#define ZX_MENU BUTTON_START + #else #error Keymap not defined! diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c index bafd45981a..6ec04ec04b 100644 --- a/apps/plugins/zxbox/zxbox_keyb.c +++ b/apps/plugins/zxbox/zxbox_keyb.c @@ -291,6 +291,15 @@ #define KBD_UP BUTTON_UP #define KBD_DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == RG_NANO_PAD + +#define KBD_SELECT BUTTON_A +#define KBD_ABORT BUTTON_B +#define KBD_LEFT BUTTON_LEFT +#define KBD_RIGHT BUTTON_RIGHT +#define KBD_UP BUTTON_UP +#define KBD_DOWN BUTTON_DOWN + #endif #ifdef HAVE_TOUCHSCREEN diff --git a/backdrops/cabbiev2.240x240x16.bmp b/backdrops/cabbiev2.240x240x16.bmp new file mode 100644 index 0000000000..56892b9559 Binary files /dev/null and b/backdrops/cabbiev2.240x240x16.bmp differ diff --git a/docs/CREDITS b/docs/CREDITS index 83581a68dd..61e3b07393 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -741,6 +741,7 @@ Mihai Alexandru Vasiliu Wilton Millfjord Pavlo Rudy Yannic Schmidt +Hairo R. Carela The libmad team The wavpack team diff --git a/firmware/SOURCES b/firmware/SOURCES index 3573331db9..b4008b832e 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -74,7 +74,9 @@ target/hosted/sdl/lcd-bitmap.c target/hosted/sdl/lcd-remote-bitmap.c #endif target/hosted/sdl/lcd-sdl.c +#if SDL_MAJOR_VERSION > 1 target/hosted/sdl/window-sdl.c +#endif target/hosted/sdl/system-sdl.c #ifdef HAVE_SDL_THREADS target/hosted/sdl/filesystem-sdl.c @@ -86,7 +88,9 @@ target/hosted/sdl/key_to_touch-sdl.c #endif #ifdef APPLICATION target/hosted/sdl/app/load_code-sdl-app.c +#ifndef RG_NANO target/hosted/sdl/app/button-application.c +#endif #ifdef WIN32 target/hosted/filesystem-win32.c #else /* !WIN32 */ @@ -222,6 +226,15 @@ target/hosted/samsungypr/ypr1/wmcodec-ypr1.c target/hosted/maemo/maemo-thread.c #endif +#ifdef RG_NANO +target/hosted/sysfs.c +target/hosted/power-linux.c +target/hosted/backlight-unix.c +target/hosted/anbernic/power-rgnano.c +target/hosted/anbernic/button-rgnano.c +target/hosted/anbernic/powermgmt-rgnano.c +#endif /* RG_NANO */ + /* Common */ #ifndef BOOTLOADER chunk_alloc.c diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index beb2709624..d6cf5ef62a 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -33,7 +33,7 @@ #include "serial.h" #include "power.h" #include "powermgmt.h" -#ifdef HAVE_SDL +#if defined(HAVE_SDL) && (SDL_MAJOR_VERSION > 1) #include "button-sdl.h" #else #include "button-target.h" diff --git a/firmware/drivers/button_queue.c b/firmware/drivers/button_queue.c index 9767a1a08b..fc87732cef 100644 --- a/firmware/drivers/button_queue.c +++ b/firmware/drivers/button_queue.c @@ -24,8 +24,10 @@ #include "button.h" #ifdef HAVE_SDL #include "SDL.h" +#if SDL_MAJOR_VERSION > 1 #include "window-sdl.h" #endif +#endif static struct event_queue button_queue SHAREDBSS_ATTR; static intptr_t button_data; /* data value from last message dequeued */ @@ -118,7 +120,7 @@ static inline void button_queue_wait(struct queue_event *evp, int timeout) } #else queue_wait_w_tmo(&button_queue, evp, timeout); -#ifdef HAVE_SDL +#if defined(HAVE_SDL) && (SDL_MAJOR_VERSION > 1) sdl_window_adjust(); /* Window may have been resized */ #endif #endif diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index cbe6c3ee5a..7fc6d39468 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h @@ -223,8 +223,8 @@ struct sound_settings_info #include "es9018.h" #elif defined(HAVE_ES9218) #include "es9218.h" -#elif (CONFIG_PLATFORM & (PLATFORM_ANDROID | PLATFORM_MAEMO \ - | PLATFORM_PANDORA | PLATFORM_SDL)) +#elif ((CONFIG_PLATFORM & (PLATFORM_ANDROID | PLATFORM_MAEMO \ + | PLATFORM_PANDORA | PLATFORM_SDL )) | defined(RG_NANO)) #include "hosted_codec.h" #elif defined(DX50) #include "codec-dx50.h" diff --git a/firmware/export/config.h b/firmware/export/config.h index 182aced416..54107d5a31 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -166,6 +166,7 @@ #define SHANLING_Q1_PAD 74 #define ECHO_R1_PAD 75 #define SURFANS_F28_PAD 76 +#define RG_NANO_PAD 77 /* CONFIG_REMOTE_KEYPAD */ #define H100_REMOTE 1 @@ -619,6 +620,8 @@ Lyre prototype 1 */ #include "config/echor1.h" #elif defined(SURFANS_F28) #include "config/surfansf28.h" +#elif defined(RG_NANO) +#include "config/rgnano.h" #else //#error "unknown hwardware platform!" #endif diff --git a/firmware/export/config/rgnano.h b/firmware/export/config/rgnano.h new file mode 100644 index 0000000000..0d743107c4 --- /dev/null +++ b/firmware/export/config/rgnano.h @@ -0,0 +1,97 @@ +/* + * This config file is for the Anbernic RG Nano + */ + +/* We don't run on hardware directly */ +#define CONFIG_PLATFORM (PLATFORM_HOSTED) +#define PIVOT_ROOT "/mnt" +#define HAVE_FPU + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 100 + +#define MODEL_NAME "RG Nano" + +#define USB_NONE + +/* define this if you have a colour LCD */ +#define HAVE_LCD_COLOR + +/* define this if you want album art for this target */ +#define HAVE_ALBUMART + +/* define this to enable bitmap scaling */ +#define HAVE_BMP_SCALING + +/* define this to enable JPEG decoding */ +#define HAVE_JPEG + +/* define this if you have access to the quickscreen */ +#define HAVE_QUICKSCREEN + +/* define this if you would like tagcache to build on this target */ +#define HAVE_TAGCACHE + +/* LCD dimensions */ +#define LCD_WIDTH 240 +#define LCD_HEIGHT 240 +#define LCD_DEPTH 24 +#define LCD_PIXELFORMAT RGB888 + +/* define this to indicate your device's keypad */ +#define HAVE_BUTTON_DATA +#define HAS_BUTTON_HOLD +#define HAVE_VOLUME_IN_LIST + +/* define this if you have a real-time clock */ +#define CONFIG_RTC APPLICATION + +/* The number of bytes reserved for loadable codecs */ +#define CODEC_SIZE 0x400000 + +/* The number of bytes reserved for loadable plugins */ +#define PLUGIN_BUFFER_SIZE 0x800000 + +#define AB_REPEAT_ENABLE + +/* Battery stuff */ +#define CONFIG_BATTERY_MEASURE PERCENTAGE_MEASURE +#define CONFIG_CHARGING CHARGING_MONITOR +#define HAVE_POWEROFF_WHILE_CHARGING +#define BATTERY_DEV_NAME "axp20x-battery" +#define POWER_DEV_NAME "axp20x-usb" + +/* Define this for LCD backlight available */ +#define BACKLIGHT_RG_NANO +#define HAVE_BACKLIGHT +#define HAVE_BACKLIGHT_BRIGHTNESS +#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING + +/* Main LCD backlight brightness range and defaults */ +#define MIN_BRIGHTNESS_SETTING 0 +#define MAX_BRIGHTNESS_SETTING 11 +#define DEFAULT_BRIGHTNESS_SETTING 4 + +#define CONFIG_KEYPAD RG_NANO_PAD + +/* Use SDL audio/pcm in a SDL app build */ +#define HAVE_SDL +#define HAVE_SDL_AUDIO + +#define HAVE_SW_TONE_CONTROLS + +/* Define this to the CPU frequency */ +/* +#define CPU_FREQ 48000000 +*/ + +#define CONFIG_LCD LCD_COWOND2 + +/* Define this if a programmable hotkey is mapped */ +#define HAVE_HOTKEY + +#define BOOTDIR "/.rockbox" + +/* No special storage */ +#define CONFIG_STORAGE STORAGE_HOSTFS +#define HAVE_STORAGE_FLUSH diff --git a/firmware/export/rbpaths.h b/firmware/export/rbpaths.h index 73c62486f1..728f33ede8 100644 --- a/firmware/export/rbpaths.h +++ b/firmware/export/rbpaths.h @@ -57,6 +57,12 @@ #define REC_BASE_DIR HOME_DIR "Recordings" #define PLAYLIST_CATALOG_DEFAULT_DIR HOME_DIR "Playlists" +#elif RG_NANO +#define HOME_DIR ROCKBOX_DIR +#define PLUGIN_DIR ROCKBOX_DIR "/rocks" +#define CODECS_DIR ROCKBOX_DIR "/codecs" +#define REC_BASE_DIR ROCKBOX_DIR "/Recordings" +#define PLAYLIST_CATALOG_DEFAULT_DIR ROCKBOX_DIR "/Playlists" #else /* APPLICATION */ #define HOME_DIR "" /* replaced at runtime */ diff --git a/firmware/target/hosted/anbernic/adc-target.h b/firmware/target/hosted/anbernic/adc-target.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/firmware/target/hosted/anbernic/backlight-target.h b/firmware/target/hosted/anbernic/backlight-target.h new file mode 100644 index 0000000000..aa8fafab04 --- /dev/null +++ b/firmware/target/hosted/anbernic/backlight-target.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * __________ __ ___ + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2014 by Ilia Sergachev: Initial Rockbox port to iBasso DX50 + * Copyright (C) 2014 by Mario Basister: iBasso DX90 port + * Copyright (C) 2014 by Simon Rothen: Initial Rockbox repository submission, additional features + * Copyright (C) 2014 by Udo Schläpfer: Code clean up, additional features + * + * 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. + * + ****************************************************************************/ + + +#ifndef _BACKLIGHT_TARGET_H_ +#define _BACKLIGHT_TARGET_H_ + + +#include + + +/* See backlight.c */ +bool backlight_hw_init(void); +void backlight_hw_on(void); +void backlight_hw_off(void); +void backlight_hw_brightness(int brightness); + + +#endif diff --git a/firmware/target/hosted/anbernic/button-rgnano.c b/firmware/target/hosted/anbernic/button-rgnano.c new file mode 100644 index 0000000000..a76a3f830a --- /dev/null +++ b/firmware/target/hosted/anbernic/button-rgnano.c @@ -0,0 +1,73 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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. + * + ***************************************************9*************************/ + + +#include +#include +#include "button.h" +#include "button-target.h" + +int key_to_button(int keyboard_key) +{ + int new_btn = BUTTON_NONE; + switch (keyboard_key) + { + case SDLK_s: + new_btn = BUTTON_START; + break; + case SDLK_k: + new_btn = BUTTON_FN; + break; + case SDLK_a: + new_btn = BUTTON_A; + break; + case SDLK_b: + new_btn = BUTTON_B; + break; + case SDLK_x: + new_btn = BUTTON_X; + break; + case SDLK_y: + new_btn = BUTTON_Y; + break; + case SDLK_m: + new_btn = BUTTON_L; + break; + case SDLK_n: + new_btn = BUTTON_R; + break; + case SDLK_u: + new_btn = BUTTON_UP; + break; + case SDLK_d: + new_btn = BUTTON_DOWN; + break; + case SDLK_l: + new_btn = BUTTON_LEFT; + break; + case SDLK_r: + new_btn = BUTTON_RIGHT; + break; + default: + break; + } + return new_btn; +} diff --git a/firmware/target/hosted/anbernic/button-target.h b/firmware/target/hosted/anbernic/button-target.h new file mode 100644 index 0000000000..fc56ac11af --- /dev/null +++ b/firmware/target/hosted/anbernic/button-target.h @@ -0,0 +1,47 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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. + * + ****************************************************************************/ + +#ifndef _BUTTON_TARGET_H_ +#define _BUTTON_TARGET_H_ + +/* Main unit's buttons */ +#define BUTTON_START 0x00000001 +#define BUTTON_FN 0x00000002 +#define BUTTON_A 0x00000004 +#define BUTTON_B 0x00000008 +#define BUTTON_X 0x00000010 +#define BUTTON_Y 0x00000020 +#define BUTTON_L 0x00000040 +#define BUTTON_R 0x00000080 +#define BUTTON_UP 0x00000100 +#define BUTTON_DOWN 0x00000200 +#define BUTTON_LEFT 0x00000400 +#define BUTTON_RIGHT 0x00000800 + +#define BUTTON_MAIN 0x1FFF + +/* Software power-off */ +#define POWEROFF_BUTTON BUTTON_POWER +#define POWEROFF_COUNT 10 + +int key_to_button(int keyboard_key); + +#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/hosted/anbernic/power-rgnano.c b/firmware/target/hosted/anbernic/power-rgnano.c new file mode 100644 index 0000000000..bd7832ef93 --- /dev/null +++ b/firmware/target/hosted/anbernic/power-rgnano.c @@ -0,0 +1,41 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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 +#include +#include +#include + +#include "system.h" +#include "power-rgnano.h" +#include "power.h" +#include "panic.h" +#include "sysfs.h" + +const char * const sysfs_bat_level = + "/sys/class/power_supply/axp20x-battery/capacity"; + +unsigned int rgnano_power_get_battery_capacity(void) +{ + int battery_level; + sysfs_get_int(sysfs_bat_level, &battery_level); + + return battery_level; +} diff --git a/firmware/target/hosted/anbernic/power-rgnano.h b/firmware/target/hosted/anbernic/power-rgnano.h new file mode 100644 index 0000000000..21fc7da9dd --- /dev/null +++ b/firmware/target/hosted/anbernic/power-rgnano.h @@ -0,0 +1,27 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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. + * + ****************************************************************************/ +#ifndef _POWER_RGNANO_H_ +#define _POWER_RGNANO_H_ + +#include +#include "config.h" + +unsigned int rgnano_power_get_battery_capacity(void); +#endif /* _POWER_RGNANO_H_ */ diff --git a/firmware/target/hosted/anbernic/powermgmt-rgnano.c b/firmware/target/hosted/anbernic/powermgmt-rgnano.c new file mode 100644 index 0000000000..a6a8b34a52 --- /dev/null +++ b/firmware/target/hosted/anbernic/powermgmt-rgnano.c @@ -0,0 +1,28 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2025 Hairo R. Carela + * + * 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 "powermgmt.h" +#include "power.h" +#include "power-rgnano.h" + +int _battery_level(void) +{ + return rgnano_power_get_battery_capacity(); +} diff --git a/firmware/target/hosted/anbernic/system-target.h b/firmware/target/hosted/anbernic/system-target.h new file mode 100644 index 0000000000..fa7854c0c8 --- /dev/null +++ b/firmware/target/hosted/anbernic/system-target.h @@ -0,0 +1,7 @@ +#ifndef __SYSTEM_TARGET_H__ +#define __SYSTEM_TARGET_H__ + +#include "../sdl/system-sdl.h" + +#define NEED_GENERIC_BYTESWAPS +#endif /* __SYSTEM_TARGET_H__ */ diff --git a/firmware/target/hosted/backlight-unix.c b/firmware/target/hosted/backlight-unix.c index 3a0b301e2c..fb9fc18c06 100644 --- a/firmware/target/hosted/backlight-unix.c +++ b/firmware/target/hosted/backlight-unix.c @@ -31,11 +31,19 @@ #include "panic.h" #include "lcd.h" +#ifdef BACKLIGHT_RG_NANO +static const char * const sysfs_bl_brightness = + "/sys/class/backlight/backlight/brightness"; + +static const char * const sysfs_bl_power = + "/sys/class/backlight/backlight/bl_power"; +#else static const char * const sysfs_bl_brightness = "/sys/class/backlight/pwm-backlight.0/brightness"; static const char * const sysfs_bl_power = "/sys/class/backlight/pwm-backlight.0/bl_power"; +#endif bool backlight_hw_init(void) { diff --git a/firmware/target/hosted/filesystem-app.h b/firmware/target/hosted/filesystem-app.h index b35b63e95f..2d907b98fa 100644 --- a/firmware/target/hosted/filesystem-app.h +++ b/firmware/target/hosted/filesystem-app.h @@ -49,7 +49,11 @@ const char * handle_special_dirs(const char *dir, unsigned flags, #endif /* _FILESYSTEM_APP_H_ */ #ifdef HAVE_SDL +#ifdef RG_NANO +#include "../sdl/filesystem-sdl.h" +#else #include "filesystem-sdl.h" +#endif /* RG_NANO */ #endif /* HAVE_SDL */ #ifdef WIN32 #include "filesystem-win32.h" diff --git a/firmware/target/hosted/sdl/button-sdl.c b/firmware/target/hosted/sdl/button-sdl.c index e1a5947d54..74019f9970 100644 --- a/firmware/target/hosted/sdl/button-sdl.c +++ b/firmware/target/hosted/sdl/button-sdl.c @@ -32,7 +32,9 @@ #include "backlight.h" #include "system.h" #include "button-sdl.h" +#if SDL_MAJOR_VERSION > 1 #include "window-sdl.h" +#endif #include "sim_tasks.h" #include "buttonmap.h" #include "debug.h" @@ -241,10 +243,15 @@ static void mouse_event(SDL_MouseButtonEvent *event, bool button_up) static bool event_handler(SDL_Event *event) { +#if SDL_MAJOR_VERSION > 1 SDL_Keycode ev_key; +#else + SDLKey ev_key; +#endif switch(event->type) { +#if SDL_MAJOR_VERSION > 1 case SDL_WINDOWEVENT: if (event->window.event == SDL_WINDOWEVENT_FOCUS_GAINED) sdl_app_has_input_focus = 1; @@ -263,6 +270,7 @@ static bool event_handler(SDL_Event *event) last_tick = current_tick; #endif } +#endif /* SDL_MAJOR_VERSION */ #ifdef SIMULATOR if (event->window.event == SDL_WINDOWEVENT_FOCUS_LOST || event->window.event == SDL_WINDOWEVENT_LEAVE @@ -578,8 +586,12 @@ static void button_event(int key, bool pressed) return; #endif #endif -#if (CONFIG_PLATFORM & PLATFORM_PANDORA) +#if (CONFIG_PLATFORM & PLATFORM_PANDORA) || defined(RG_NANO) +#ifdef RG_NANO + case SDLK_q: +#else case SDLK_LCTRL: +#endif /* Will post SDL_USEREVENT in shutdown_hw() if successful. */ sys_poweroff(); break; diff --git a/firmware/target/hosted/sdl/lcd-bitmap.c b/firmware/target/hosted/sdl/lcd-bitmap.c index 22d48fd2b1..c50d5fdb00 100644 --- a/firmware/target/hosted/sdl/lcd-bitmap.c +++ b/firmware/target/hosted/sdl/lcd-bitmap.c @@ -142,7 +142,7 @@ void lcd_update_rect(int x_start, int y_start, int width, int height) background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0); } -#ifdef HAVE_BACKLIGHT +#if defined(HAVE_BACKLIGHT) && (SDL_MAJOR_VERSION > 1) void sim_backlight(int value) { #if LCD_DEPTH <= 8 @@ -185,7 +185,9 @@ void lcd_init_device(void) #if LCD_DEPTH >= 16 lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, LCD_DEPTH, 0, 0, 0, 0); +#if SDL_MAJOR_VERSION > 1 SDL_SetSurfaceBlendMode(lcd_surface, SDL_BLENDMODE_BLEND); +#endif #elif LCD_DEPTH <= 8 lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, SIM_LCD_WIDTH, SIM_LCD_HEIGHT, 8, 0, 0, 0, 0); diff --git a/firmware/target/hosted/sdl/lcd-sdl.c b/firmware/target/hosted/sdl/lcd-sdl.c index 0731403f87..641fc3f1c3 100644 --- a/firmware/target/hosted/sdl/lcd-sdl.c +++ b/firmware/target/hosted/sdl/lcd-sdl.c @@ -23,7 +23,9 @@ #include "lcd-sdl.h" #include "sim-ui-defines.h" #include "system.h" /* for MIN() and MAX() */ +#if SDL_MAJOR_VERSION > 1 #include "window-sdl.h" +#endif void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width, int height, int max_x, int max_y, @@ -101,6 +103,8 @@ void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width, SDL_Rect src = {x_start, y_start, width, height}; SDL_Rect dest= {ui_x + x_start, ui_y + y_start, width, height}; + +#if SDL_MAJOR_VERSION > 1 uint8_t alpha; SDL_LockMutex(window_mutex); @@ -115,6 +119,14 @@ void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width, if (!sdl_window_adjust()) /* already calls sdl_window_render itself */ sdl_window_render(); SDL_UnlockMutex(window_mutex); +#else + if (surface->flags & SDL_SRCALPHA) /* alpha needs a black background */ + SDL_FillRect(gui_surface, &dest, 0); + + SDL_BlitSurface(surface, &src, gui_surface, &dest); + + SDL_Flip(gui_surface); +#endif } /* set a range of bitmap indices to a gradient from startcolour to endcolour */ @@ -130,7 +142,11 @@ void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end, palette[i].b = start->b + (end->b - start->b) * i / (steps - 1); } +#if SDL_MAJOR_VERSION > 1 SDL_SetPaletteColors(surface->format->palette, palette, first , steps); +#else + SDL_SetPalette(surface, SDL_LOGPAL|SDL_PHYSPAL, palette, first, steps); +#endif } int lcd_get_dpi(void) diff --git a/firmware/target/hosted/sdl/lcd-sdl.h b/firmware/target/hosted/sdl/lcd-sdl.h index fd1a0b9513..a4c57d1b3a 100644 --- a/firmware/target/hosted/sdl/lcd-sdl.h +++ b/firmware/target/hosted/sdl/lcd-sdl.h @@ -25,6 +25,10 @@ #include "lcd.h" #include "SDL.h" +#if SDL_MAJOR_VERSION == 1 +extern SDL_Surface *gui_surface; +#endif + void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width, int height, int max_x, int max_y, unsigned long (*getpixel)(int, int)); diff --git a/firmware/target/hosted/sdl/pcm-sdl.c b/firmware/target/hosted/sdl/pcm-sdl.c index 1bd50ebbd5..2b96c6a252 100644 --- a/firmware/target/hosted/sdl/pcm-sdl.c +++ b/firmware/target/hosted/sdl/pcm-sdl.c @@ -61,7 +61,9 @@ static const void *pcm_data; static size_t pcm_data_size; static size_t pcm_sample_bytes; static size_t pcm_channel_bytes; +#if SDL_MAJOR_VERSION > 1 static SDL_AudioDeviceID pcm_devid = 0; +#endif static struct pcm_udata { @@ -104,18 +106,26 @@ static void pcm_dma_apply_settings_nolock(void) wanted_spec.samples = MIX_FRAME_SAMPLES * 2; /* Should be 2048, ie ~5ms @44KHz */ wanted_spec.callback = sdl_audio_callback; wanted_spec.userdata = &udata; + +#if SDL_MAJOR_VERSION > 1 if (pcm_devid) SDL_CloseAudioDevice(pcm_devid); /* pulseaudio seems to be happier with smaller buffers */ if (!strcmp("pulseaudio", SDL_GetCurrentAudioDriver())) wanted_spec.samples = MIX_FRAME_SAMPLES; +#endif /* Open the audio device and start playing sound! */ +#if SDL_MAJOR_VERSION > 1 if((pcm_devid = SDL_OpenAudioDevice(audiodev, 0, &wanted_spec, &obtained, SDL_AUDIO_ALLOW_SAMPLES_CHANGE)) == 0) { +#else + if(SDL_OpenAudio(&wanted_spec, &obtained) < 0) { +#endif panicf("Unable to open audio: %s", SDL_GetError()); return; } + switch (obtained.format) { case AUDIO_U8: @@ -128,12 +138,14 @@ static void pcm_dma_apply_settings_nolock(void) case AUDIO_S16MSB: pcm_channel_bytes = 2; break; +#if SDL_MAJOR_VERSION > 1 /* Not supported by SDL 1.2 */ case AUDIO_S32MSB: case AUDIO_S32LSB: case AUDIO_F32MSB: case AUDIO_F32LSB: pcm_channel_bytes = 4; break; +#endif default: panicf("Unknown sample format obtained: %u", (unsigned)obtained.format); @@ -161,12 +173,21 @@ void pcm_play_dma_start(const void *addr, size_t size) pcm_data = addr; pcm_data_size = size; +#if SDL_MAJOR_VERSION > 1 SDL_PauseAudioDevice(pcm_devid, 0); +#else + SDL_PauseAudio(0); +#endif } void pcm_play_dma_stop(void) { +#if SDL_MAJOR_VERSION > 1 SDL_PauseAudioDevice(pcm_devid, 1); +#else + SDL_PauseAudio(1); +#endif + #ifdef DEBUG if (udata.debug != NULL) { fclose(udata.debug); diff --git a/firmware/target/hosted/sdl/system-sdl.c b/firmware/target/hosted/sdl/system-sdl.c index b0a5ef8b4c..56e797ac5b 100644 --- a/firmware/target/hosted/sdl/system-sdl.c +++ b/firmware/target/hosted/sdl/system-sdl.c @@ -33,7 +33,9 @@ #include "thread-sdl.h" #include "system-sdl.h" #include "sim-ui-defines.h" +#if SDL_MAJOR_VERSION > 1 #include "window-sdl.h" +#endif #include "button-sdl.h" #include "lcd-bitmap.h" #ifdef HAVE_REMOTE_LCD @@ -50,6 +52,10 @@ #define SIMULATOR_DEFAULT_ROOT "simdisk" +#if SDL_MAJOR_VERSION == 1 +SDL_Surface *gui_surface; +#endif + bool background = true; /* use backgrounds by default */ #ifdef HAVE_REMOTE_LCD bool showremote = true; /* include remote by default */ @@ -92,7 +98,7 @@ static int sdl_event_thread(void * param) SDL_sem *wait_for_maemo_startup; #endif -#if (CONFIG_PLATFORM & (PLATFORM_MAEMO|PLATFORM_PANDORA)) +#if (CONFIG_PLATFORM & (PLATFORM_MAEMO|PLATFORM_PANDORA)) || defined(RG_NANO) /* SDL touch screen fix: Work around a SDL assumption that returns relative mouse coordinates when you get to the screen edges using the touchscreen and a disabled mouse cursor. @@ -112,6 +118,27 @@ static int sdl_event_thread(void * param) SDL_DestroySemaphore(wait_for_maemo_startup); #endif +#if SDL_MAJOR_VERSION == 1 + SDL_InitSubSystem(SDL_INIT_VIDEO); + + SDL_Surface *picture_surface = NULL; + int depth; + Uint32 flags; + + depth = LCD_DEPTH; + if (depth < 8) + depth = 16; + + flags = SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN; + + if ((gui_surface = SDL_SetVideoMode(LCD_WIDTH, LCD_HEIGHT, depth, flags)) == NULL) { + panicf("%s", SDL_GetError()); + } + + if (background && picture_surface != NULL) + SDL_BlitSurface(picture_surface, NULL, gui_surface, NULL); +#endif + /* let system_init proceed */ SDL_SemPost((SDL_sem *)param); @@ -189,8 +216,11 @@ void sim_do_exit() #endif sim_kernel_shutdown(); + +#if SDL_MAJOR_VERSION > 1 SDL_UnlockMutex(window_mutex); SDL_DestroyMutex(window_mutex); +#endif SDL_Quit(); exit(EXIT_SUCCESS); @@ -228,12 +258,21 @@ void system_init(void) #ifndef __WIN32 /* Fails on Windows */ SDL_InitSubSystem(SDL_INIT_VIDEO); + +#if SDL_MAJOR_VERSION > 1 sdl_window_setup(); #endif +#endif #ifndef __APPLE__ /* MacOS requires events to be handled on main thread */ s = SDL_CreateSemaphore(0); /* 0-count so it blocks */ - evt_thread = SDL_CreateThread(sdl_event_thread, NULL, s); + + #if SDL_MAJOR_VERSION > 1 + evt_thread = SDL_CreateThread(sdl_event_thread, NULL, s); + #else + evt_thread = SDL_CreateThread(sdl_event_thread, s); + #endif /* SDL_MAJOR_VERSION */ + SDL_SemWait(s); /* cleanup */ SDL_DestroySemaphore(s); @@ -311,6 +350,7 @@ void sys_handle_argv(int argc, char *argv[]) printf("Disabling remote image.\n"); } #endif +#if SDL_MAJOR_VERSION > 1 else if (!strcmp("--zoom", argv[x])) { x++; @@ -320,6 +360,7 @@ void sys_handle_argv(int argc, char *argv[]) display_zoom = 2; printf("Window zoom is %f\n", display_zoom); } +#endif else if (!strcmp("--alarm", argv[x])) { sim_alarm_wakeup = true; @@ -374,7 +415,9 @@ void sys_handle_argv(int argc, char *argv[]) } } } +#if SDL_MAJOR_VERSION > 1 if (display_zoom != 1) { background = false; } +#endif } diff --git a/firmware/target/hosted/sdl/thread-sdl.c b/firmware/target/hosted/sdl/thread-sdl.c index abd6339cee..0858d11a87 100644 --- a/firmware/target/hosted/sdl/thread-sdl.c +++ b/firmware/target/hosted/sdl/thread-sdl.c @@ -340,7 +340,12 @@ unsigned int create_thread(void (*function)(void), return 0; } +#if SDL_MAJOR_VERSION > 1 SDL_Thread *t = SDL_CreateThread(runthread, NULL, thread); +#else + SDL_Thread *t = SDL_CreateThread(runthread, thread); +#endif + if (t == NULL) { DEBUGF("Failed to create SDL thread\n"); diff --git a/packaging/rgnano/config.cfg b/packaging/rgnano/config.cfg new file mode 100644 index 0000000000..36ccc7389b --- /dev/null +++ b/packaging/rgnano/config.cfg @@ -0,0 +1,7 @@ +# .cfg file created by rockbox c145f41658-250621 - http://www.rockbox.org + +idle poweroff: 0 +font: /FunKey/rockbox/fonts/16-WenQangYi-Unibit.fnt +database scan paths: /Music +qs top: brightness +qs bottom: brightness diff --git a/packaging/rgnano/icon.png b/packaging/rgnano/icon.png new file mode 100644 index 0000000000..f24807e438 Binary files /dev/null and b/packaging/rgnano/icon.png differ diff --git a/packaging/rgnano/mapping.key b/packaging/rgnano/mapping.key new file mode 100644 index 0000000000..75d1b39fd3 --- /dev/null +++ b/packaging/rgnano/mapping.key @@ -0,0 +1,5 @@ +UNMAP FN+Y +UNMAP FN+A +UNMAP FN+B +UNMAP FN+X +MAP START+FN TO KEY KEY_H diff --git a/packaging/rgnano/rgnano.make b/packaging/rgnano/rgnano.make new file mode 100644 index 0000000000..fb3e67abbf --- /dev/null +++ b/packaging/rgnano/rgnano.make @@ -0,0 +1,40 @@ +RG_NANO_DIR=$(ROOTDIR)/packaging/rgnano +MKSQUASHFS=$(dir $(CPP))mksquashfs +INSTALL_DIR=$(OPK_BUILD_DIR)/install +OPK_BUILD_DIR=opkdir + +opkdir: + mkdir $(OPK_BUILD_DIR) + +opkclean: + rm -rf $(OPK_BUILD_DIR) + +opk: opkclean opkdir $(MKSQUASHFS) build + make PREFIX=$(OPK_BUILD_DIR)/rockbox fullinstall + + # Install opk files + cp $(RG_NANO_DIR)/icon.png $(OPK_BUILD_DIR) + cp $(RG_NANO_DIR)/mapping.key $(OPK_BUILD_DIR) + cp $(RG_NANO_DIR)/rockbox.funkey-s.desktop $(OPK_BUILD_DIR) + cp $(RG_NANO_DIR)/config.cfg $(OPK_BUILD_DIR) + cp $(RG_NANO_DIR)/run.sh $(OPK_BUILD_DIR) + + # Organize files + mkdir $(INSTALL_DIR) + mv $(OPK_BUILD_DIR)/rockbox/bin/rockbox $(INSTALL_DIR) + mv $(OPK_BUILD_DIR)/rockbox/lib/rockbox/* $(INSTALL_DIR) + mv $(OPK_BUILD_DIR)/rockbox/share/rockbox/* $(INSTALL_DIR) + + rm -rf $(OPK_BUILD_DIR)/rockbox + mv $(INSTALL_DIR)/rockbox $(OPK_BUILD_DIR) + + # Plugin workarounds + mkdir $(INSTALL_DIR)/rocks.data + mv $(INSTALL_DIR)/rocks/games/.picross $(INSTALL_DIR)/rocks.data/.picross + + # Permissions + chmod +x $(OPK_BUILD_DIR)/rockbox + chmod +x $(OPK_BUILD_DIR)/run.sh + + # Make opk + $(MKSQUASHFS) $(OPK_BUILD_DIR) rockbox_funkey-s.opk -all-root -noappend -no-exports -no-xattrs diff --git a/packaging/rgnano/rockbox.funkey-s.desktop b/packaging/rgnano/rockbox.funkey-s.desktop new file mode 100644 index 0000000000..cc63041770 --- /dev/null +++ b/packaging/rgnano/rockbox.funkey-s.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Rockbox +Comment=Open source jukebox firmware +Terminal=false +Type=Application +Exec=run.sh +Icon=icon +Categories=applications +FK-Keymap=mapping.key diff --git a/packaging/rgnano/run.sh b/packaging/rgnano/run.sh new file mode 100755 index 0000000000..194631d0df --- /dev/null +++ b/packaging/rgnano/run.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +RBDIR=/mnt/FunKey/rockbox +CFGFILE=$RBDIR/config.cfg +BLPATH=/sys/class/backlight/backlight/brightness + +# Install the rockbox folder +if [ ! -d $RBDIR ]; then + notif set 0 " Installing rockbox..." + mkdir -p $RBDIR + cp -r ./install/* $RBDIR + notif clear +else + OPKV=$(cat ./install/rockbox-info.txt | grep Version: | cut -d'-' -f2) + SDV=$(cat $RBDIR/rockbox-info.txt | grep Version: | cut -d'-' -f2) + + if [[ $OPKV -gt $SDV ]]; then + notif set 0 " Updating rockbox..." + cp -r -f -u ./install/* $RBDIR + notif clear + fi +fi + +# Copy default config +if [ ! -f $CFGFILE ]; then + mkdir -p $(dirname $CFGFILE) + cp ./config.cfg $CFGFILE +fi + +# Get current volume/brightness -> launch rockbox -> restore previous values +CUR_VOL=$(volume get) +CUR_BL=$(cat $BLPATH) +volume set 100 + +./rockbox + +volume set $CUR_VOL +echo $CUR_BL > $BLPATH diff --git a/tools/configure b/tools/configure index 95e7b88d64..dadd423e03 100755 --- a/tools/configure +++ b/tools/configure @@ -964,6 +964,53 @@ mipsellinuxcc () { prefixtools "mipsel-rockbox-linux-gnu-" } +rgnanocc () { + if [ -z "$FUNKEY_SDK_PATH" ]; then + echo "ERROR: You need the FunKey-SDK installed and have the FUNKEY_SDK_PATH" + echo "environment variable point to the root directory of the FunKey-SDK." + echo "More info at https://wiki.funkey-project.com/wiki/Setting_up_the_SDK" + exit + fi + + $FUNKEY_SDK_PATH/relocate-sdk.sh + + arch="arm" + arch_version="7" + arch_profile="classic" + + CC=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-gcc + CPP=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-cpp + LD=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-ld + AR=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-gcc-ar + AS=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-as + OC=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-objcopy + WINDRES=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-windres + DLLTOOL=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-dlltool + DLLWRAP=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-dllwrap + RANLIB=$FUNKEY_SDK_PATH/bin/arm-funkey-linux-musleabihf-gcc-ranlib + + GCCOPTS=`echo $CCOPTS | sed -e s/\ -ffreestanding// -e s/\ -nostdlib// -e s/\ -Wundef//` + + if [ "yes" = "$use_debug" ]; then + GCCOPTS=`echo $GCCOPTS | sed -e s/\ -Os/\ -Og/` + fi + + GCCOPTS="$GCCOPTS -fno-builtin -g -Wno-unused-result" + GCCOPTS="$GCCOPTS -I$FUNKEY_SDK_PATH/arm-funkey-linux-musleabihf/sysroot/usr/include/SDL" + GCCOPTS="$GCCOPTS -D_GNU_SOURCE=1 -D_REENTRANT -masm-syntax-unified" + + SHARED_LDFLAGS="-shared" + SHARED_CFLAGS="-fPIC -fvisibility=hidden" + + LDOPTS="-lm -ldl $LDOPTS -L$FUNKEY_SDK_PATH/arm-funkey-linux-musleabihf/sysroot/usr/lib -lSDL -lpthread" + GLOBAL_LDOPTS="$GLOBAL_LDOPTS -Wl,-z,defs" + + thread_support="HAVE_SDL_THREADS" + sdl="$FUNKEY_SDK_PATH/arm-funkey-linux-musleabihf/sysroot/usr/bin/sdl-config" + rbdir="/FunKey/rockbox" +} + + do_bootloader() { appsdir='$(ROOTDIR)/bootloader' apps="bootloader" @@ -1720,19 +1767,19 @@ cat < +# +# Progress Bar +%V(10,162,220,15,-) +%pb(0,0,220,15,pb-240x240x16.bmp) +# +# Hold +%V(10,207,30,23,-) +%?mh<%xd(Aa)|%xd(Ab)> +# +# Battery +%V(47,207,44,23,-) +%?bp<%?bc<%xd(Ba)|%xd(Bb)>|%?bl<|%xd(Bc)|%xd(Bd)|%xd(Be)|%xd(Bf)|%xd(Bg)|%xd(Bh)|%xd(Bi)|%xd(Bj)>> +# +# Volume +%V(96,207,34,23,-) +%?pv<%xd(Ca)|%xd(Cb)|%xd(Cc)|%xd(Cd)|%xd(Ce)|%xd(Cf)|%xd(Cg)|%xd(Ch)|%xd(Ci)|%xd(Cj)> +# +# Shuffle +%V(137,211,37,16,-) +%?ps<%xd(D)> +# +# Repeat +%V(181,207,18,23,-) +%?mm<|%xd(Ea)|%xd(Eb)|%xd(Ec)|%xd(Ed)> +# +# Playmode +%V(206,207,24,23,-) +%?mp<%xd(Fa)|%xd(Fb)|%xd(Fc)|%xd(Fd)|%xd(Fe)> +# +# Time Elapsed/Remaining +%V(10,180,220,20,3) +%al%pc%ac%?Sr<%pe %Sx(of) %pp|%pp %Sx(of) %pe>%ar%pr +# +# Album Art +%ax%Vl(a,10,42,100,100,-) +%Cl(0,0,100,100,c,c) +%Cd +# +# Track Info - Album Art +%ax%Vl(a,113,40,-,130,3) +%s%al%?id<%id|%?d(1)<%d(1)|%(root%)>> +%s%al%?it<%it|%fn> +%s%al%?ia<%ia|%?iA<%iA|%?d(2)<%d(2)|%(root%)>>> +%s%al%?iy<%iy> + +%s%al%Sx(Next Track:) +%s%al%?It<%It|%Fn> +%s%al%?Ia<%Ia|%?IA<%IA>> +# +# Track Info - No Album Art +%ax%Vl(b,0,30,-,130,3) +%s%ac%?id<%id|%?d(1)<%d(1)|%(root%)>> +%s%ac%?it<%it|%fn> +%s%ac%?ia<%ia|%?iA<%iA|%?d(2)<%d(2)|%(root%)>>> +%s%ac%?iy<%iy> + +%ac%Sx(Next Track:) +%s%ac%?It<%It|%Fn> +%s%ac%?Ia<%Ia|%?IA<%IA>> diff --git a/wps/cabbiev2/battery-240x240x16.bmp b/wps/cabbiev2/battery-240x240x16.bmp new file mode 100644 index 0000000000..afd7a248c2 Binary files /dev/null and b/wps/cabbiev2/battery-240x240x16.bmp differ diff --git a/wps/cabbiev2/lock-240x240x16.bmp b/wps/cabbiev2/lock-240x240x16.bmp new file mode 100644 index 0000000000..0fa2c74eb7 Binary files /dev/null and b/wps/cabbiev2/lock-240x240x16.bmp differ diff --git a/wps/cabbiev2/pb-240x240x16.bmp b/wps/cabbiev2/pb-240x240x16.bmp new file mode 100644 index 0000000000..0097feb49f Binary files /dev/null and b/wps/cabbiev2/pb-240x240x16.bmp differ diff --git a/wps/cabbiev2/playmode-240x240x16.bmp b/wps/cabbiev2/playmode-240x240x16.bmp new file mode 100644 index 0000000000..9bc41f67be Binary files /dev/null and b/wps/cabbiev2/playmode-240x240x16.bmp differ diff --git a/wps/cabbiev2/repeat-240x240x16.bmp b/wps/cabbiev2/repeat-240x240x16.bmp new file mode 100644 index 0000000000..0fafa8b795 Binary files /dev/null and b/wps/cabbiev2/repeat-240x240x16.bmp differ diff --git a/wps/cabbiev2/shuffle-240x240x16.bmp b/wps/cabbiev2/shuffle-240x240x16.bmp new file mode 100644 index 0000000000..40edff2397 Binary files /dev/null and b/wps/cabbiev2/shuffle-240x240x16.bmp differ diff --git a/wps/cabbiev2/volume-240x240x16.bmp b/wps/cabbiev2/volume-240x240x16.bmp new file mode 100644 index 0000000000..5120ce88bf Binary files /dev/null and b/wps/cabbiev2/volume-240x240x16.bmp differ diff --git a/wps/cabbiev2/wpsbackdrop-240x240x16.bmp b/wps/cabbiev2/wpsbackdrop-240x240x16.bmp new file mode 100644 index 0000000000..2eff65809a Binary files /dev/null and b/wps/cabbiev2/wpsbackdrop-240x240x16.bmp differ