From 8739069e6b96e9e7c069dc97792024765a389c76 Mon Sep 17 00:00:00 2001 From: cathery Date: Sat, 9 Nov 2019 23:36:52 +0300 Subject: [PATCH] Add d-pad and left stick swap option --- ControllerUSB/include/ControllerConfig.h | 1 + .../source/SwitchAbstractedPadHandler.cpp | 36 +++++++++++++++---- SwitchUSB/source/SwitchHDLHandler.cpp | 36 +++++++++++++++---- source/configFile.cpp | 5 +++ 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/ControllerUSB/include/ControllerConfig.h b/ControllerUSB/include/ControllerConfig.h index ef87d57..d347575 100644 --- a/ControllerUSB/include/ControllerConfig.h +++ b/ControllerUSB/include/ControllerConfig.h @@ -40,4 +40,5 @@ struct ControllerConfig ControllerButton buttons[NUM_CONTROLLERBUTTONS]; float triggers[2]; NormalizedStick sticks[2]; + bool swapDPADandLSTICK; }; \ No newline at end of file diff --git a/SwitchUSB/source/SwitchAbstractedPadHandler.cpp b/SwitchUSB/source/SwitchAbstractedPadHandler.cpp index cea55e9..153729b 100644 --- a/SwitchUSB/source/SwitchAbstractedPadHandler.cpp +++ b/SwitchUSB/source/SwitchAbstractedPadHandler.cpp @@ -118,16 +118,38 @@ void SwitchAbstractedPadHandler::FillAbstractedState(const NormalizedButtonData m_state.state.buttons |= (data.buttons[10] ? KEY_MINUS : 0); m_state.state.buttons |= (data.buttons[11] ? KEY_PLUS : 0); - m_state.state.buttons |= (data.buttons[12] ? KEY_DUP : 0); - m_state.state.buttons |= (data.buttons[13] ? KEY_DRIGHT : 0); - m_state.state.buttons |= (data.buttons[14] ? KEY_DDOWN : 0); - m_state.state.buttons |= (data.buttons[15] ? KEY_DLEFT : 0); + ControllerConfig *config = GetController()->GetConfig(); + + if (config && config->swapDPADandLSTICK) + { + m_state.state.buttons |= ((data.sticks[0].axis_y > 0.5f) ? KEY_DUP : 0); + m_state.state.buttons |= ((data.sticks[0].axis_x > 0.5f) ? KEY_DRIGHT : 0); + m_state.state.buttons |= ((data.sticks[0].axis_y < -0.5f) ? KEY_DDOWN : 0); + m_state.state.buttons |= ((data.sticks[0].axis_x < -0.5f) ? KEY_DLEFT : 0); + + float daxis_x{}, daxis_y{}; + + daxis_y += data.buttons[12] ? 1.0f : 0.0f; //DUP + daxis_x += data.buttons[13] ? 1.0f : 0.0f; //DRIGHT + daxis_y += data.buttons[14] ? -1.0f : 0.0f; //DDOWN + daxis_x += data.buttons[15] ? -1.0f : 0.0f; //DLEFT + + m_controllerHandler.ConvertAxisToSwitchAxis(daxis_x, daxis_y, 0, &m_state.state.joysticks[JOYSTICK_LEFT].dx, &m_state.state.joysticks[JOYSTICK_LEFT].dy); + } + else + { + m_state.state.buttons |= (data.buttons[12] ? KEY_DUP : 0); + m_state.state.buttons |= (data.buttons[13] ? KEY_DRIGHT : 0); + m_state.state.buttons |= (data.buttons[14] ? KEY_DDOWN : 0); + m_state.state.buttons |= (data.buttons[15] ? KEY_DLEFT : 0); + + m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[0].axis_x, data.sticks[0].axis_y, 0, &m_state.state.joysticks[JOYSTICK_LEFT].dx, &m_state.state.joysticks[JOYSTICK_LEFT].dy); + } + + m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[1].axis_x, data.sticks[1].axis_y, 0, &m_state.state.joysticks[JOYSTICK_RIGHT].dx, &m_state.state.joysticks[JOYSTICK_RIGHT].dy); m_state.state.buttons |= (data.buttons[16] ? KEY_CAPTURE : 0); m_state.state.buttons |= (data.buttons[17] ? KEY_HOME : 0); - - m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[0].axis_x, data.sticks[0].axis_y, 0, &m_state.state.joysticks[JOYSTICK_LEFT].dx, &m_state.state.joysticks[JOYSTICK_LEFT].dy); - m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[1].axis_x, data.sticks[1].axis_y, 0, &m_state.state.joysticks[JOYSTICK_RIGHT].dx, &m_state.state.joysticks[JOYSTICK_RIGHT].dy); } Result SwitchAbstractedPadHandler::UpdateAbstractedState() diff --git a/SwitchUSB/source/SwitchHDLHandler.cpp b/SwitchUSB/source/SwitchHDLHandler.cpp index da1eb8e..085a285 100644 --- a/SwitchUSB/source/SwitchHDLHandler.cpp +++ b/SwitchUSB/source/SwitchHDLHandler.cpp @@ -118,16 +118,38 @@ void SwitchHDLHandler::FillHdlState(const NormalizedButtonData &data) m_hdlState.buttons |= (data.buttons[10] ? KEY_MINUS : 0); m_hdlState.buttons |= (data.buttons[11] ? KEY_PLUS : 0); - m_hdlState.buttons |= (data.buttons[12] ? KEY_DUP : 0); - m_hdlState.buttons |= (data.buttons[13] ? KEY_DRIGHT : 0); - m_hdlState.buttons |= (data.buttons[14] ? KEY_DDOWN : 0); - m_hdlState.buttons |= (data.buttons[15] ? KEY_DLEFT : 0); + ControllerConfig *config = GetController()->GetConfig(); + + if (config && config->swapDPADandLSTICK) + { + m_hdlState.buttons |= ((data.sticks[0].axis_y > 0.5f) ? KEY_DUP : 0); + m_hdlState.buttons |= ((data.sticks[0].axis_x > 0.5f) ? KEY_DRIGHT : 0); + m_hdlState.buttons |= ((data.sticks[0].axis_y < -0.5f) ? KEY_DDOWN : 0); + m_hdlState.buttons |= ((data.sticks[0].axis_x < -0.5f) ? KEY_DLEFT : 0); + + float daxis_x{}, daxis_y{}; + + daxis_y += data.buttons[12] ? 1.0f : 0.0f; //DUP + daxis_x += data.buttons[13] ? 1.0f : 0.0f; //DRIGHT + daxis_y += data.buttons[14] ? -1.0f : 0.0f; //DDOWN + daxis_x += data.buttons[15] ? -1.0f : 0.0f; //DLEFT + + m_controllerHandler.ConvertAxisToSwitchAxis(daxis_x, daxis_y, 0, &m_hdlState.joysticks[JOYSTICK_LEFT].dx, &m_hdlState.joysticks[JOYSTICK_LEFT].dy); + } + else + { + m_hdlState.buttons |= (data.buttons[12] ? KEY_DUP : 0); + m_hdlState.buttons |= (data.buttons[13] ? KEY_DRIGHT : 0); + m_hdlState.buttons |= (data.buttons[14] ? KEY_DDOWN : 0); + m_hdlState.buttons |= (data.buttons[15] ? KEY_DLEFT : 0); + + m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[0].axis_x, data.sticks[0].axis_y, 0, &m_hdlState.joysticks[JOYSTICK_LEFT].dx, &m_hdlState.joysticks[JOYSTICK_LEFT].dy); + } + + m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[1].axis_x, data.sticks[1].axis_y, 0, &m_hdlState.joysticks[JOYSTICK_RIGHT].dx, &m_hdlState.joysticks[JOYSTICK_RIGHT].dy); m_hdlState.buttons |= (data.buttons[16] ? KEY_CAPTURE : 0); m_hdlState.buttons |= (data.buttons[17] ? KEY_HOME : 0); - - m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[0].axis_x, data.sticks[0].axis_y, 0, &m_hdlState.joysticks[JOYSTICK_LEFT].dx, &m_hdlState.joysticks[JOYSTICK_LEFT].dy); - m_controllerHandler.ConvertAxisToSwitchAxis(data.sticks[1].axis_x, data.sticks[1].axis_y, 0, &m_hdlState.joysticks[JOYSTICK_RIGHT].dx, &m_hdlState.joysticks[JOYSTICK_RIGHT].dy); } void SwitchHDLHandler::UpdateInput() diff --git a/source/configFile.cpp b/source/configFile.cpp index e7149a3..0e7be37 100644 --- a/source/configFile.cpp +++ b/source/configFile.cpp @@ -87,6 +87,11 @@ static int _ParseConfigLine(void *dummy, const char *section, const char *name, temp_config.triggerDeadzonePercent = atoi(value); return 1; } + else if (strcmp(name, "swap_dpad_and_lstick") == 0) + { + temp_config.swapDPADandLSTICK = (strcmp(value, "true") ? false : true); + return 1; + } return 0; }