Add support for extended Sunshine button flags

This commit is contained in:
Cameron Gutman 2023-08-29 20:47:31 -05:00
parent c158833258
commit 0deeb94655
4 changed files with 52 additions and 1 deletions

View File

@ -346,7 +346,7 @@ static bool evdev_handle_event(struct input_event *ev, struct input_device *dev)
LiSendKeyboardEvent(code, ev->value?KEY_ACTION_DOWN:KEY_ACTION_UP, dev->modifiers);
} else {
int mouseCode = 0;
short gamepadCode = 0;
int gamepadCode = 0;
int index = dev->key_map[ev->code];
switch (ev->code) {
@ -420,6 +420,18 @@ static bool evdev_handle_event(struct input_event *ev, struct input_device *dev)
gamepadCode = BACK_FLAG;
else if (index == dev->map->btn_guide)
gamepadCode = SPECIAL_FLAG;
else if (index == dev->map->btn_misc1)
gamepadCode = MISC_FLAG;
else if (index == dev->map->btn_paddle1)
gamepadCode = PADDLE1_FLAG;
else if (index == dev->map->btn_paddle2)
gamepadCode = PADDLE2_FLAG;
else if (index == dev->map->btn_paddle3)
gamepadCode = PADDLE3_FLAG;
else if (index == dev->map->btn_paddle4)
gamepadCode = PADDLE4_FLAG;
else if (index == dev->map->btn_touchpad)
gamepadCode = TOUCHPAD_FLAG;
}
if (mouseCode != 0) {

View File

@ -94,6 +94,18 @@ struct mapping* mapping_parse(char* mapping) {
map->btn_lefttrigger = int_value;
else if (strcmp("righttrigger", key) == 0)
map->btn_righttrigger = int_value;
else if (strcmp("misc1", key) == 0)
map->btn_misc1 = int_value;
else if (strcmp("paddle1", key) == 0)
map->btn_paddle1 = int_value;
else if (strcmp("paddle2", key) == 0)
map->btn_paddle2 = int_value;
else if (strcmp("paddle3", key) == 0)
map->btn_paddle3 = int_value;
else if (strcmp("paddle4", key) == 0)
map->btn_paddle4 = int_value;
else if (strcmp("touchpad", key) == 0)
map->btn_touchpad = int_value;
} else if (sscanf(value, "a%d%c", &int_value, &flag) >= 1) {
if (strcmp("leftx", key) == 0) {
map->abs_leftx = int_value;
@ -213,5 +225,11 @@ void mapping_print(struct mapping* map) {
print_abs("righttrigger", map->abs_righttrigger);
print_btn("lefttrigger", map->btn_lefttrigger);
print_btn("righttrigger", map->btn_righttrigger);
print_btn("misc1", map->btn_misc1);
print_btn("paddle1", map->btn_paddle1);
print_btn("paddle2", map->btn_paddle2);
print_btn("paddle3", map->btn_paddle3);
print_btn("paddle4", map->btn_paddle4);
print_btn("touchpad", map->btn_touchpad);
printf("platform:Linux\n");
}

View File

@ -45,6 +45,9 @@ struct mapping {
short btn_back, btn_start, btn_guide;
short btn_leftstick, btn_rightstick;
short btn_leftshoulder, btn_rightshoulder;
short btn_misc1;
short btn_paddle1, btn_paddle2, btn_paddle3, btn_paddle4;
short btn_touchpad;
short abs_lefttrigger, abs_righttrigger;
short btn_lefttrigger, btn_righttrigger;

View File

@ -332,6 +332,24 @@ int sdlinput_handle_event(SDL_Window* window, SDL_Event* event) {
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
button = RB_FLAG;
break;
case SDL_CONTROLLER_BUTTON_MISC1:
button = MISC_FLAG;
break;
case SDL_CONTROLLER_BUTTON_PADDLE1:
button = PADDLE1_FLAG;
break;
case SDL_CONTROLLER_BUTTON_PADDLE2:
button = PADDLE2_FLAG;
break;
case SDL_CONTROLLER_BUTTON_PADDLE3:
button = PADDLE3_FLAG;
break;
case SDL_CONTROLLER_BUTTON_PADDLE4:
button = PADDLE4_FLAG;
break;
case SDL_CONTROLLER_BUTTON_TOUCHPAD:
button = TOUCHPAD_FLAG;
break;
default:
return SDL_NOTHING;
}