mirror of
https://github.com/cathery/sys-con.git
synced 2024-11-05 08:26:32 +00:00
Finalize 0.5.0
This commit is contained in:
parent
9be2b8cf40
commit
781129b467
@ -21,6 +21,7 @@ enum ControllerButton
|
||||
DPAD_LEFT,
|
||||
SYNC,
|
||||
GUIDE,
|
||||
TOUCHPAD,
|
||||
NUM_CONTROLLERBUTTONS,
|
||||
};
|
||||
|
||||
|
@ -17,8 +17,8 @@ Result Dualshock4Controller::SendInitBytes()
|
||||
{
|
||||
constexpr uint8_t init_bytes[32] = {
|
||||
0x05, 0x07, 0x00, 0x00,
|
||||
0x7f, 0x7f,
|
||||
0x00, 0x00, 0x40,
|
||||
0x00, 0x00, //initial strong and weak rumble
|
||||
0x00, 0x00, 0x40, //LED color
|
||||
0x00, 0x00};
|
||||
|
||||
return m_outPipe->Write(init_bytes, sizeof(init_bytes));
|
||||
@ -57,6 +57,12 @@ Result Dualshock4Controller::OpenInterfaces()
|
||||
if (R_FAILED(rc))
|
||||
return rc;
|
||||
|
||||
if (interface->GetDescriptor()->bInterfaceClass != 3)
|
||||
continue;
|
||||
|
||||
if (interface->GetDescriptor()->bInterfaceProtocol != 0)
|
||||
continue;
|
||||
|
||||
if (interface->GetDescriptor()->bNumEndpoints < 2)
|
||||
continue;
|
||||
|
||||
@ -203,6 +209,7 @@ NormalizedButtonData Dualshock4Controller::GetNormalizedButtonData()
|
||||
(m_buttonData.dpad == DS4_LEFT) || (m_buttonData.dpad == DS4_UPLEFT) || (m_buttonData.dpad == DS4_DOWNLEFT),
|
||||
m_buttonData.touchpad_press,
|
||||
m_buttonData.psbutton,
|
||||
m_buttonData.touchpad_finger1_unpressed == false,
|
||||
};
|
||||
|
||||
for (int i = 0; i != NUM_CONTROLLERBUTTONS; ++i)
|
||||
|
@ -151,6 +151,7 @@ void SwitchHDLHandler::FillHdlState(const NormalizedButtonData &data)
|
||||
|
||||
m_hdlState.buttons |= (data.buttons[16] ? KEY_CAPTURE : 0);
|
||||
m_hdlState.buttons |= (data.buttons[17] ? KEY_HOME : 0);
|
||||
m_hdlState.buttons |= (data.buttons[18] ? KEY_TOUCH : 0);
|
||||
}
|
||||
|
||||
void SwitchHDLHandler::UpdateInput()
|
||||
|
@ -3,6 +3,13 @@ left_stick_deadzone = 10 ; from 0 to 100
|
||||
right_stick_deadzone = 10 ; from 0 to 100
|
||||
trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
color_body = 48,71,105
|
||||
color_buttons = 22,22,22
|
||||
|
||||
; [9.0.0+]
|
||||
color_leftGrip = 22,33,49
|
||||
color_rightGrip = 22,33,49
|
||||
|
||||
swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
|
@ -3,7 +3,15 @@ left_stick_deadzone = 10 ; from 0 to 100
|
||||
right_stick_deadzone = 10 ; from 0 to 100
|
||||
trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
color_body = 77,77,77
|
||||
color_buttons = 0,0,0
|
||||
|
||||
; [9.0.0+]
|
||||
color_leftGrip = 33,33,33
|
||||
color_rightGrip = 33,33,33
|
||||
|
||||
swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
;key_SYNC = LSTICK_CLICK ; Remove the semicolon at the start to take effect
|
||||
;key_SYNC = LSTICK_CLICK ; Remove the semicolon at the start to take effect
|
||||
|
||||
|
@ -1,11 +1,2 @@
|
||||
; Global overwrite config. Controller configs take priority. Doesn't work also
|
||||
;left_stick_deadzone = 0 ; from 0 to 100
|
||||
;right_stick_deadzone = 0 ; from 0 to 100
|
||||
;trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
;swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
; Remove the semicolons below to take effect
|
||||
;key_FACE_DOWN = FACE_RIGHT
|
||||
;key_FACE_LEFT = FACE_UP
|
||||
[global]
|
||||
use_dualshock_2nd_generation = false
|
@ -3,6 +3,13 @@ left_stick_deadzone = 21 ; from 0 to 100
|
||||
right_stick_deadzone = 25 ; from 0 to 100
|
||||
trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
color_body = 77,77,77
|
||||
color_buttons = 69,121,22
|
||||
|
||||
; [9.0.0+]
|
||||
color_leftGrip = 100,100,100
|
||||
color_rightGrip = 100,100,100
|
||||
|
||||
swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
|
@ -3,6 +3,13 @@ left_stick_deadzone = 10 ; from 0 to 100
|
||||
right_stick_deadzone = 17 ; from 0 to 100
|
||||
trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
color_body = 107,107,107
|
||||
color_buttons = 0,0,0
|
||||
|
||||
; [9.0.0+]
|
||||
color_leftGrip = 77,77,77
|
||||
color_rightGrip = 77,77,77
|
||||
|
||||
swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
|
@ -1 +1,2 @@
|
||||
; Doesn't work properly yet, disabled
|
||||
firmware_path = /config/sys-con/firmware/XboxOneAdapter.bin
|
@ -3,6 +3,13 @@ left_stick_deadzone = 21 ; from 0 to 100
|
||||
right_stick_deadzone = 25 ; from 0 to 100
|
||||
trigger_deadzone = 0 ; from 0 to 100
|
||||
|
||||
color_body = 77,77,77
|
||||
color_buttons = 69,121,22
|
||||
|
||||
; [9.0.0+]
|
||||
color_leftGrip = 100,100,100
|
||||
color_rightGrip = 100,100,100
|
||||
|
||||
swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
|
||||
; For information on input mapping, see "example.ini"
|
||||
|
@ -30,6 +30,7 @@ swap_dpad_and_lstick = false ; set this to true to swap the d-pad and left stick
|
||||
; DPAD_LEFT D-pad LEFT
|
||||
; SYNC Capture on joycons
|
||||
; GUIDE Home on joycons
|
||||
; TOUCHPAD Simulate at least one finger on the touch screen (doesn't work?)
|
||||
|
||||
; example: this will swap the X and Y, A and B buttons to match the names on Xbox controllers
|
||||
key_FACE_DOWN = FACE_RIGHT
|
||||
@ -37,3 +38,11 @@ key_FACE_LEFT = FACE_UP
|
||||
|
||||
; example: this will press the Capture button on Left stick press
|
||||
key_LSTICK_CLICK = SYNC
|
||||
|
||||
; these are RGB color values for the controller icon represented in the controller screens
|
||||
color_body = 107,107,107
|
||||
color_buttons = 0,0,0
|
||||
|
||||
; these two will only work on firmware [9.0.0+]. They are supposed to change the color of your controller grips
|
||||
color_leftGrip = 77,77,77
|
||||
color_rightGrip = 77,77,77
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include "mainLoop.h"
|
||||
#include "configFile.h"
|
||||
#include "Controllers.h"
|
||||
#include "ControllerConfig.h"
|
||||
@ -36,6 +37,7 @@ std::array<const char *, NUM_CONTROLLERBUTTONS> keyNames{
|
||||
"DPAD_LEFT",
|
||||
"SYNC",
|
||||
"GUIDE",
|
||||
"TOUCHPAD",
|
||||
};
|
||||
|
||||
static ControllerButton _StringToKey(const char *text)
|
||||
@ -70,75 +72,87 @@ static RGBAColor _DecodeColorValue(const char *value)
|
||||
}
|
||||
|
||||
static ControllerConfig temp_config;
|
||||
static GlobalConfig global_config;
|
||||
static char firmwarePath[100];
|
||||
|
||||
static int _ParseConfigLine(void *dummy, const char *section, const char *name, const char *value)
|
||||
{
|
||||
if (strncmp(name, "key_", 4) == 0)
|
||||
if (strcmp(section, "global") == 0)
|
||||
{
|
||||
ControllerButton button = _StringToKey(name + 4);
|
||||
ControllerButton buttonValue = _StringToKey(value);
|
||||
temp_config.buttons[button] = buttonValue;
|
||||
temp_config.buttons[buttonValue] = button;
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "left_stick_deadzone") == 0)
|
||||
{
|
||||
temp_config.leftStickDeadzonePercent = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "right_stick_deadzone") == 0)
|
||||
{
|
||||
temp_config.rightStickDeadzonePercent = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "left_stick_rotation") == 0)
|
||||
{
|
||||
temp_config.leftStickRotationDegrees = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "right_stick_rotation") == 0)
|
||||
{
|
||||
temp_config.rightStickRotationDegrees = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "trigger_deadzone") == 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
else if (strcmp(name, "firmware_path") == 0)
|
||||
{
|
||||
strcpy(firmwarePath, value);
|
||||
return 1;
|
||||
}
|
||||
else if (strncmp(name, "color_", 6) == 0)
|
||||
{
|
||||
if (strcmp(name + 6, "body") == 0)
|
||||
if (strcmp(name, "use_dualshock_2nd_generation") == 0)
|
||||
{
|
||||
temp_config.bodyColor = _DecodeColorValue(value);
|
||||
global_config.dualshock4_productID = (strcmp(value, "true") ? PRODUCT_DUALSHOCK4_1X : PRODUCT_DUALSHOCK4_2X);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "buttons") == 0)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strncmp(name, "key_", 4) == 0)
|
||||
{
|
||||
temp_config.buttonsColor = _DecodeColorValue(value);
|
||||
ControllerButton button = _StringToKey(name + 4);
|
||||
ControllerButton buttonValue = _StringToKey(value);
|
||||
temp_config.buttons[button] = buttonValue;
|
||||
temp_config.buttons[buttonValue] = button;
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "leftGrip") == 0)
|
||||
else if (strcmp(name, "left_stick_deadzone") == 0)
|
||||
{
|
||||
temp_config.leftGripColor = _DecodeColorValue(value);
|
||||
temp_config.leftStickDeadzonePercent = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "rightGrip") == 0)
|
||||
else if (strcmp(name, "right_stick_deadzone") == 0)
|
||||
{
|
||||
temp_config.rightGripColor = _DecodeColorValue(value);
|
||||
temp_config.rightStickDeadzonePercent = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "left_stick_rotation") == 0)
|
||||
{
|
||||
temp_config.leftStickRotationDegrees = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "right_stick_rotation") == 0)
|
||||
{
|
||||
temp_config.rightStickRotationDegrees = atoi(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name, "trigger_deadzone") == 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
else if (strcmp(name, "firmware_path") == 0)
|
||||
{
|
||||
strcpy(firmwarePath, value);
|
||||
return 1;
|
||||
}
|
||||
else if (strncmp(name, "color_", 6) == 0)
|
||||
{
|
||||
if (strcmp(name + 6, "body") == 0)
|
||||
{
|
||||
temp_config.bodyColor = _DecodeColorValue(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "buttons") == 0)
|
||||
{
|
||||
temp_config.buttonsColor = _DecodeColorValue(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "leftGrip") == 0)
|
||||
{
|
||||
temp_config.leftGripColor = _DecodeColorValue(value);
|
||||
return 1;
|
||||
}
|
||||
else if (strcmp(name + 6, "rightGrip") == 0)
|
||||
{
|
||||
temp_config.rightGripColor = _DecodeColorValue(value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -156,6 +170,13 @@ static Result _ReadFromConfig(const char *path)
|
||||
|
||||
void LoadAllConfigs()
|
||||
{
|
||||
if (R_SUCCEEDED(_ReadFromConfig(CONFIG_PATH GLOBALCONFIG)))
|
||||
{
|
||||
LoadGlobalConfig(&global_config);
|
||||
}
|
||||
else
|
||||
WriteToLog("Failed to read from global config!");
|
||||
|
||||
if (R_SUCCEEDED(_ReadFromConfig(CONFIG_PATH XBOXCONFIG)))
|
||||
{
|
||||
XboxController::LoadConfig(&temp_config);
|
||||
|
@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#define CONFIG_PATH "/config/sys-con/"
|
||||
|
||||
void LoadAllConfigs();
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include <switch.h>
|
||||
#include "mainLoop.h"
|
||||
#include <variant>
|
||||
#include "log.h"
|
||||
|
||||
@ -8,7 +9,7 @@
|
||||
#include "SwitchAbstractedPadHandler.h"
|
||||
#include "configFile.h"
|
||||
|
||||
#define APP_VERSION "0.4.3"
|
||||
#define APP_VERSION "0.5.0"
|
||||
|
||||
struct VendorEvent
|
||||
{
|
||||
@ -48,6 +49,27 @@ std::unique_ptr<IController> controllerPtr;
|
||||
bool useAbstractedPad = hosversionBetween(5, 7);
|
||||
std::vector<std::unique_ptr<SwitchVirtualGamepadHandler>> controllerInterfaces;
|
||||
|
||||
static GlobalConfig _globalConfig{};
|
||||
|
||||
void LoadGlobalConfig(const GlobalConfig *config)
|
||||
{
|
||||
_globalConfig = *config;
|
||||
}
|
||||
|
||||
Result CreateDualshock4AvailableEvent(Event &event)
|
||||
{
|
||||
UsbHsInterfaceFilter filter;
|
||||
filter.Flags = UsbHsInterfaceFilterFlags_idVendor | UsbHsInterfaceFilterFlags_idProduct;
|
||||
filter.idVendor = VENDOR_SONY;
|
||||
filter.idProduct = _globalConfig.dualshock4_productID;
|
||||
Result rc = usbHsCreateInterfaceAvailableEvent(&event, true, 2, &filter);
|
||||
if (R_FAILED(rc))
|
||||
WriteToLog("Failed to open event for Dualshock 4 0x", std::hex, _globalConfig.dualshock4_productID);
|
||||
else
|
||||
WriteToLog("Successfully created event for Dualshock 4 0x", std::hex, _globalConfig.dualshock4_productID);
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result CallInitHandler()
|
||||
{
|
||||
if (controllerPtr)
|
||||
@ -112,7 +134,7 @@ Result mainLoop()
|
||||
WriteToLog("Failed to open catch-all event");
|
||||
else
|
||||
WriteToLog("Successfully created catch-all event");
|
||||
|
||||
/*
|
||||
filter.Flags = UsbHsInterfaceFilterFlags_idVendor | UsbHsInterfaceFilterFlags_idProduct;
|
||||
filter.idVendor = VENDOR_SONY;
|
||||
filter.idProduct = PRODUCT_DUALSHOCK4_2X;
|
||||
@ -121,16 +143,9 @@ Result mainLoop()
|
||||
WriteToLog("Failed to open event for Dualshock 4 2x");
|
||||
else
|
||||
WriteToLog("Successfully created event for Dualshock 4 2x");
|
||||
/*
|
||||
filter.Flags = UsbHsInterfaceFilterFlags_idVendor | UsbHsInterfaceFilterFlags_idProduct;
|
||||
filter.idVendor = VENDOR_SONY;
|
||||
filter.idProduct = PRODUCT_DUALSHOCK4_1X;
|
||||
rc = usbHsCreateInterfaceAvailableEvent(&ds4Event, true, 2, &filter);
|
||||
if (R_FAILED(rc))
|
||||
WriteToLog("Failed to open event for Dualshock 4 1x");
|
||||
else
|
||||
WriteToLog("Successfully created event for Dualshock 4 1x");
|
||||
*/
|
||||
|
||||
CreateDualshock4AvailableEvent(ds4Event);
|
||||
}
|
||||
|
||||
controllerInterfaces.reserve(10);
|
||||
@ -203,12 +218,14 @@ Result mainLoop()
|
||||
devicePtr = std::make_unique<SwitchUSBDevice>(interfaces, total_entries);
|
||||
controllerPtr = std::make_unique<XboxOneController>(std::move(devicePtr));
|
||||
}
|
||||
/*
|
||||
else if (R_SUCCEEDED(QueryInterfaces(interfaces, sizeof(interfaces), &total_entries, USB_CLASS_VENDOR_SPEC, 255, 255)))
|
||||
{
|
||||
WriteToLog("Registering Xbox One adapter");
|
||||
devicePtr = std::make_unique<SwitchUSBDevice>(interfaces, total_entries);
|
||||
controllerPtr = std::make_unique<XboxOneAdapter>(std::move(devicePtr));
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
rc = eventWait(&ds3Event, 0);
|
||||
@ -289,6 +306,8 @@ Result mainLoop()
|
||||
{
|
||||
WriteToLog("File check succeeded! Loading configs...");
|
||||
LoadAllConfigs();
|
||||
usbHsDestroyInterfaceAvailableEvent(&ds4Event, 2);
|
||||
CreateDualshock4AvailableEvent(ds4Event);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,11 @@
|
||||
#pragma once
|
||||
#include "switch/result.h"
|
||||
|
||||
Result mainLoop();
|
||||
struct GlobalConfig
|
||||
{
|
||||
uint16_t dualshock4_productID;
|
||||
};
|
||||
|
||||
Result mainLoop();
|
||||
|
||||
void LoadGlobalConfig(const GlobalConfig *config);
|
Loading…
Reference in New Issue
Block a user