mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-03-20 15:51:07 +01:00
Fixed the GameSir-G7 Pro 8K button mapping
This commit is contained in:
@@ -1268,7 +1268,8 @@ static GamepadMapping_t *SDL_CreateMappingForHIDAPIGamepad(SDL_GUID guid)
|
||||
SDL_strlcat(mapping_string, "misc2:b15,misc3:b16,", sizeof(mapping_string));
|
||||
}
|
||||
} else if (SDL_IsJoystickGameSirController(vendor, product)) {
|
||||
SDL_strlcat(mapping_string, "paddle1:b11,paddle2:b12,paddle3:b13,paddle4:b14,misc2:b15,misc3:b16,", sizeof(mapping_string));
|
||||
// The GameSir-G7 Pro 8K has a set of paddles and shoulder macro buttons
|
||||
SDL_strlcat(mapping_string, "misc1:b11,paddle1:b13,paddle2:b12,misc2:b14,misc3:b15,", sizeof(mapping_string));
|
||||
} else if (vendor == USB_VENDOR_8BITDO && product == USB_PRODUCT_8BITDO_ULTIMATE2_WIRELESS) {
|
||||
SDL_strlcat(mapping_string, "paddle1:b12,paddle2:b11,paddle3:b14,paddle4:b13,", sizeof(mapping_string));
|
||||
} else {
|
||||
|
||||
@@ -78,6 +78,24 @@
|
||||
#define BTN_L8 0x40
|
||||
#define BTN_R8 0x80
|
||||
|
||||
enum
|
||||
{
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_SHARE = 11,
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_L4,
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_R4,
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_L5,
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_R5,
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_L6, // This button doesn't exist?
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_R6, // This button doesn't exist?
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_L7, // This button doesn't exist?
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_R7, // This button doesn't exist?
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_L8, // This button doesn't exist?
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_R8, // This button doesn't exist?
|
||||
SDL_GAMEPAD_BUTTON_GAMESIR_MUTE, // This button controls the audio mute LED
|
||||
//SDL_GAMEPAD_BUTTON_GAMESIR_M // This button is for internal use by the firmware
|
||||
SDL_GAMEPAD_NUM_GAMESIR_BUTTONS
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
Uint8 cmd;
|
||||
Uint8 mode;
|
||||
@@ -382,7 +400,7 @@ static bool HIDAPI_DriverGameSir_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joy
|
||||
SDL_LogDebug(SDL_LOG_CATEGORY_INPUT, "GameSir: failed to send SDL mode switch command (0xA2, 0x01)");
|
||||
}
|
||||
|
||||
joystick->nbuttons = 35;
|
||||
joystick->nbuttons = SDL_GAMEPAD_NUM_GAMESIR_BUTTONS;
|
||||
joystick->naxes = SDL_GAMEPAD_AXIS_COUNT;
|
||||
joystick->nhats = 1;
|
||||
|
||||
@@ -560,7 +578,7 @@ static void HIDAPI_DriverGameSir_HandleStatePacket(SDL_Joystick *joystick, SDL_D
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GUIDE, buttons & BTN_HOME);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_LEFT_STICK, buttons & BTN_L3);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_RIGHT_STICK, buttons & BTN_R3);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC1, buttons & BTN_CAPTURE);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_SHARE, buttons & BTN_CAPTURE);
|
||||
}
|
||||
|
||||
if (last[2] != data[2]) {
|
||||
@@ -592,20 +610,23 @@ static void HIDAPI_DriverGameSir_HandleStatePacket(SDL_Joystick *joystick, SDL_D
|
||||
SDL_SendJoystickHat(timestamp, joystick, 0, hat);
|
||||
|
||||
// Handle other buttons
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1, buttons & BTN_L4);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_LEFT_PADDLE1, buttons & BTN_R4);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC2, buttons & BTN_MUTE);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_M, buttons & BTN_M);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_L4, buttons & BTN_L4);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_R4, buttons & BTN_R4);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_MUTE, buttons & BTN_MUTE);
|
||||
}
|
||||
|
||||
if (last[3] != data[3]) {
|
||||
Uint8 buttons = data[3];
|
||||
// BTN4: L5 R5 L6 R6 L7 R7 L8 R8
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_LEFT_PADDLE2, buttons & BTN_L5);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2, buttons & BTN_R5);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC3, buttons & BTN_L6);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC4, buttons & BTN_R6);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC5, buttons & BTN_L7);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_MISC6, buttons & BTN_R7);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_L5, buttons & BTN_L5);
|
||||
SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_R5, buttons & BTN_R5);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_L6, buttons & BTN_L6);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_R6, buttons & BTN_R6);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_L7, buttons & BTN_L7);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_R7, buttons & BTN_R7);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_L8, buttons & BTN_L8);
|
||||
//SDL_SendJoystickButton(timestamp, joystick, SDL_GAMEPAD_BUTTON_GAMESIR_R8, buttons & BTN_R8);
|
||||
}
|
||||
|
||||
if (is_initial_packet) {
|
||||
|
||||
Reference in New Issue
Block a user