Browse Source

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.
pull/1585/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
472f86588e
  1. 28
      CMake/rg350_defs.cmake
  2. 2
      CMakeLists.txt
  3. 10
      Packaging/OpenDingux/build.sh
  4. 18
      Source/controls/devices/kbcontroller.cpp
  5. 2
      docs/manual/platforms/rg350.md

28
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}")

2
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

10
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

18
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;

2
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/`.

Loading…
Cancel
Save