From 472f86588e097516ef96c558c22e41801067e9d3 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sat, 17 Apr 2021 14:36:42 +0100 Subject: [PATCH] OpenDingux: Update RG350 package to OD Beta Unfortunately, OD Beta has a major regression with SDL joystick support, as it always reports buttons as keyboard keys instead of actual buttons. This partially breaks external keyboard support, where e.g. space no longer acts as expected. However, on balance, OD Beta is better than the 2014 firmware at this point. --- CMake/rg350_defs.cmake | 28 ++++++++++++++++++++++-- CMakeLists.txt | 2 ++ Packaging/OpenDingux/build.sh | 10 ++++----- Source/controls/devices/kbcontroller.cpp | 18 +++++++++++++-- docs/manual/platforms/rg350.md | 2 +- 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/CMake/rg350_defs.cmake b/CMake/rg350_defs.cmake index f121b47be..51d5a449d 100644 --- a/CMake/rg350_defs.cmake +++ b/CMake/rg350_defs.cmake @@ -3,10 +3,34 @@ set(NONET ON) set(USE_SDL1 ON) set(SDL1_VIDEO_MODE_BPP 16) set(PREFILL_PLAYER_NAME ON) + set(JOY_AXIS_LEFTX 0) set(JOY_AXIS_LEFTY 1) set(JOY_AXIS_RIGHTX 2) set(JOY_AXIS_RIGHTY 3) + +# OpenDingux Beta does not currently support X-OD-NeedsJoystick, +# so we use KBCTRL instead. Unfortunately, this partially breaks +# external mouse and keyboard support. +set(HAS_KBCTRL 1) +set(KBCTRL_BUTTON_DPAD_LEFT SDLK_LEFT) +set(KBCTRL_BUTTON_DPAD_RIGHT SDLK_RIGHT) +set(KBCTRL_BUTTON_DPAD_UP SDLK_UP) +set(KBCTRL_BUTTON_DPAD_DOWN SDLK_DOWN) +set(KBCTRL_BUTTON_B SDLK_LCTRL) +set(KBCTRL_BUTTON_A SDLK_LALT) +set(KBCTRL_BUTTON_Y SDLK_SPACE) +set(KBCTRL_BUTTON_X SDLK_LSHIFT) +set(KBCTRL_BUTTON_RIGHTSHOULDER SDLK_BACKSPACE) +set(KBCTRL_BUTTON_LEFTSHOULDER SDLK_TAB) +set(KBCTRL_BUTTON_START SDLK_RETURN) +set(KBCTRL_BUTTON_BACK SDLK_ESCAPE) # Select +set(KBCTRL_BUTTON_TRIGGERLEFT SDLK_PAGEUP) +set(KBCTRL_BUTTON_TRIGGERRIGHT SDLK_PAGEDOWN) +set(KBCTRL_BUTTON_LEFTSTICK SDLK_KP_DIVIDE) +set(KBCTRL_BUTTON_RIGHTSTICK SDLK_KP_PERIOD) + +# Joystick mappings that have no effect on OpenDingux Beta: set(JOY_HAT_DPAD_UP_HAT 0) set(JOY_HAT_DPAD_UP 1) set(JOY_HAT_DPAD_DOWN_HAT 0) @@ -19,14 +43,14 @@ set(JOY_BUTTON_A 0) set(JOY_BUTTON_B 1) set(JOY_BUTTON_Y 2) set(JOY_BUTTON_X 3) -set(JOY_BUTTON_LEFTSTICK 10) -set(JOY_BUTTON_RIGHTSTICK 11) set(JOY_BUTTON_RIGHTSHOULDER 5) set(JOY_BUTTON_LEFTSHOULDER 4) set(JOY_BUTTON_TRIGGERLEFT 6) set(JOY_BUTTON_TRIGGERRIGHT 7) set(JOY_BUTTON_START 9) set(JOY_BUTTON_BACK 8) +set(JOY_BUTTON_LEFTSTICK 10) +set(JOY_BUTTON_RIGHTSTICK 11) # Map Power button to Esc (Menu in-game / Exit in-menu). set(REMAP_KEYBOARD_KEYS "{SDLK_HOME,SDLK_ESCAPE}") diff --git a/CMakeLists.txt b/CMakeLists.txt index 8787199cb..2a1468dae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -505,6 +505,8 @@ foreach( KBCTRL_BUTTON_RIGHTSTICK KBCTRL_BUTTON_RIGHTSHOULDER KBCTRL_BUTTON_LEFTSHOULDER + KBCTRL_BUTTON_TRIGGERLEFT + KBCTRL_BUTTON_TRIGGERRIGHT KBCTRL_BUTTON_START KBCTRL_BUTTON_BACK KBCTRL_IGNORE_1 diff --git a/Packaging/OpenDingux/build.sh b/Packaging/OpenDingux/build.sh index 4195e06e2..cfc0afda8 100755 --- a/Packaging/OpenDingux/build.sh +++ b/Packaging/OpenDingux/build.sh @@ -21,18 +21,16 @@ declare -r TARGET="$1" declare -r BUILD_DIR="build-${TARGET}" declare -rA BUILDROOT_REPOS=( [retrofw]=https://github.com/retrofw/buildroot.git - [rg350]=https://github.com/tonyjih/RG350_buildroot.git + [rg350]=https://github.com/OpenDingux/buildroot.git + [gkd350h]=https://github.com/tonyjih/RG350_buildroot.git ) declare -rA BUILDROOT_DEFCONFIGS=( [retrofw]='RetroFW_defconfig BR2_EXTERNAL=retrofw' - [rg350]='rg350_defconfig BR2_EXTERNAL=board/opendingux' + [rg350]='od_gcw0_defconfig BR2_EXTERNAL=board/opendingux' + [gkd350h]='rg350_defconfig BR2_EXTERNAL=board/opendingux' ) declare BUILDROOT_TARGET="$TARGET" -if [[ $TARGET == gkd350h ]]; then - # Use the rg350 buildroot for gkd350h because gkd350h buildroot is not open-source. - BUILDROOT_TARGET=rg350 -fi # If a TOOLCHAIN environment variable is set, just use that. if [[ -z ${TOOLCHAIN:-} ]]; then diff --git a/Source/controls/devices/kbcontroller.cpp b/Source/controls/devices/kbcontroller.cpp index 415328003..b4bb06e95 100644 --- a/Source/controls/devices/kbcontroller.cpp +++ b/Source/controls/devices/kbcontroller.cpp @@ -50,6 +50,14 @@ ControllerButton KbCtrlToControllerButton(const SDL_Event &event) case KBCTRL_BUTTON_RIGHTSHOULDER: return ControllerButton_BUTTON_RIGHTSHOULDER; #endif +#ifdef KBCTRL_BUTTON_TRIGGERLEFT + case KBCTRL_BUTTON_TRIGGERLEFT: + return ControllerButton_AXIS_TRIGGERLEFT; +#endif +#ifdef KBCTRL_BUTTON_TRIGGERRIGHT + case KBCTRL_BUTTON_TRIGGERRIGHT: + return ControllerButton_AXIS_TRIGGERRIGHT; +#endif #ifdef KBCTRL_BUTTON_START case KBCTRL_BUTTON_START: return ControllerButton_BUTTON_START; @@ -86,8 +94,6 @@ namespace { int ControllerButtonToKbCtrlKeyCode(ControllerButton button) { - if (button == ControllerButton_AXIS_TRIGGERLEFT || button == ControllerButton_AXIS_TRIGGERRIGHT) - UNIMPLEMENTED(); switch (button) { #ifdef KBCTRL_BUTTON_A case ControllerButton_BUTTON_A: @@ -129,6 +135,14 @@ int ControllerButtonToKbCtrlKeyCode(ControllerButton button) case ControllerButton_BUTTON_RIGHTSHOULDER: return KBCTRL_BUTTON_RIGHTSHOULDER; #endif +#ifdef KBCTRL_BUTTON_TRIGGERLEFT + case ControllerButton_AXIS_TRIGGERLEFT: + return KBCTRL_BUTTON_TRIGGERLEFT; +#endif +#ifdef KBCTRL_BUTTON_TRIGGERRIGHT + case ControllerButton_AXIS_TRIGGERRIGHT: + return KBCTRL_BUTTON_TRIGGERRIGHT; +#endif #ifdef KBCTRL_BUTTON_DPAD_UP case ControllerButton_BUTTON_DPAD_UP: return KBCTRL_BUTTON_DPAD_UP; diff --git a/docs/manual/platforms/rg350.md b/docs/manual/platforms/rg350.md index 615650600..5dc9c0ddf 100644 --- a/docs/manual/platforms/rg350.md +++ b/docs/manual/platforms/rg350.md @@ -6,7 +6,7 @@ Demo video: ## Installation -**Requires firmware v1.5+** +**Requires OpenDingux Beta** 1. Copy [devilutionx-rg350.opk](https://github.com/diasurgical/devilutionX/releases/latest/download/devilutionx-rg350.opk) to `/media/sdcard/APPS/`.