Просмотр исходного кода

Fixed pressing back paddles and D-pad simultaneously on the GameSir-G7 Pro 8K controller

Sam Lantinga 6 часов назад
Родитель
Сommit
bd55a6d67d
1 измененных файлов с 20 добавлено и 11 удалено
  1. 20 11
      src/joystick/hidapi/SDL_hidapi_gamesir.c

+ 20 - 11
src/joystick/hidapi/SDL_hidapi_gamesir.c

@@ -38,7 +38,7 @@
 #define GAMESIR_IMU_RATE_HZ_WIRED 1000
 #define GAMESIR_IMU_RATE_HZ_WIRED 1000
 #define GAMESIR_IMU_RATE_HZ_WIRELESS 250
 #define GAMESIR_IMU_RATE_HZ_WIRELESS 250
 // We can't tell whether it's connected via dongle or not...
 // We can't tell whether it's connected via dongle or not...
-#define GAMESIR_IMU_RATE_HZ	GAMESIR_IMU_RATE_HZ_WIRED
+#define GAMESIR_IMU_RATE_HZ    GAMESIR_IMU_RATE_HZ_WIRED
 
 
 #define BTN_A        0x01
 #define BTN_A        0x01
 #define BTN_B        0x02
 #define BTN_B        0x02
@@ -599,26 +599,35 @@ static void HIDAPI_DriverGameSir_HandleStatePacket(SDL_Joystick *joystick, SDL_D
         // Handle the directional pad (D-pad)
         // Handle the directional pad (D-pad)
         Uint8 hat = SDL_HAT_CENTERED;
         Uint8 hat = SDL_HAT_CENTERED;
 
 
-        if (buttons == BTN_UP_R) {
+        switch (buttons & 0x0F) {
+        case BTN_UP_R:
             hat = SDL_HAT_RIGHTUP;
             hat = SDL_HAT_RIGHTUP;
-        } else if (buttons == BTN_UP_L) {
+            break;
+        case BTN_UP_L:
             hat = SDL_HAT_LEFTUP;
             hat = SDL_HAT_LEFTUP;
-        } else if (buttons == BTN_DOWN_R) {
+            break;
+        case BTN_DOWN_R:
             hat = SDL_HAT_RIGHTDOWN;
             hat = SDL_HAT_RIGHTDOWN;
-        } else if (buttons == BTN_DOWN_L) {
+            break;
+        case BTN_DOWN_L:
             hat = SDL_HAT_LEFTDOWN;
             hat = SDL_HAT_LEFTDOWN;
-        } else if (buttons == BTN_UP) {
+            break;
+        case BTN_UP:
             hat = SDL_HAT_UP;
             hat = SDL_HAT_UP;
-        } else if (buttons == BTN_DOWN) {
+            break;
+        case BTN_DOWN:
             hat = SDL_HAT_DOWN;
             hat = SDL_HAT_DOWN;
-        } else if (buttons == BTN_LEFT) {
+            break;
+        case BTN_LEFT:
             hat = SDL_HAT_LEFT;
             hat = SDL_HAT_LEFT;
-        } else if (buttons == BTN_RIGHT) {
+            break;
+        case BTN_RIGHT:
             hat = SDL_HAT_RIGHT;
             hat = SDL_HAT_RIGHT;
-        } else {
+            break;
+        default:
             hat = SDL_HAT_CENTERED;
             hat = SDL_HAT_CENTERED;
+            break;
         }
         }
-
         SDL_SendJoystickHat(timestamp, joystick, 0, hat);
         SDL_SendJoystickHat(timestamp, joystick, 0, hat);
 
 
         // Handle other buttons
         // Handle other buttons