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

Make sure we always zero the buffer sent to Steam Controllers

This fixes bad initialization for Steam Controllers with the original firmware
Sam Lantinga 11 месяцев назад
Родитель
Сommit
df0cc6e98b
1 измененных файлов с 14 добавлено и 11 удалено
  1. 14 11
      src/joystick/hidapi/SDL_hidapi_steam.c

+ 14 - 11
src/joystick/hidapi/SDL_hidapi_steam.c

@@ -457,6 +457,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
 
 
     DPRINTF("ResetSteamController hid=%p\n", dev);
     DPRINTF("ResetSteamController hid=%p\n", dev);
 
 
+    SDL_zero(buf);
     buf[0] = 0;
     buf[0] = 0;
     buf[1] = ID_GET_ATTRIBUTES_VALUES;
     buf[1] = ID_GET_ATTRIBUTES_VALUES;
     res = SetFeatureReport(dev, buf, 2);
     res = SetFeatureReport(dev, buf, 2);
@@ -510,6 +511,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
     }
     }
 
 
     // Clear digital button mappings
     // Clear digital button mappings
+    SDL_zero(buf);
     buf[0] = 0;
     buf[0] = 0;
     buf[1] = ID_CLEAR_DIGITAL_MAPPINGS;
     buf[1] = ID_CLEAR_DIGITAL_MAPPINGS;
     res = SetFeatureReport(dev, buf, 2);
     res = SetFeatureReport(dev, buf, 2);
@@ -521,7 +523,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
     }
     }
 
 
     // Reset the default settings
     // Reset the default settings
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_LOAD_DEFAULT_SETTINGS;
     buf[1] = ID_LOAD_DEFAULT_SETTINGS;
     buf[2] = 0;
     buf[2] = 0;
     res = SetFeatureReport(dev, buf, 3);
     res = SetFeatureReport(dev, buf, 3);
@@ -539,7 +541,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
     buf[3 + nSettings * 3 + 2] = ((uint16_t)VALUE) >> 8;   \
     buf[3 + nSettings * 3 + 2] = ((uint16_t)VALUE) >> 8;   \
     ++nSettings;
     ++nSettings;
 
 
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_SETTINGS_VALUES;
     buf[1] = ID_SET_SETTINGS_VALUES;
     ADD_SETTING(SETTING_WIRELESS_PACKET_VERSION, 2);
     ADD_SETTING(SETTING_WIRELESS_PACKET_VERSION, 2);
     ADD_SETTING(SETTING_LEFT_TRACKPAD_MODE, TRACKPAD_NONE);
     ADD_SETTING(SETTING_LEFT_TRACKPAD_MODE, TRACKPAD_NONE);
@@ -567,7 +569,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
     bool bMappingsCleared = false;
     bool bMappingsCleared = false;
     int iRetry;
     int iRetry;
     for (iRetry = 0; iRetry < 2; ++iRetry) {
     for (iRetry = 0; iRetry < 2; ++iRetry) {
-        SDL_memset(buf, 0, 65);
+        SDL_zero(buf);
         buf[1] = ID_GET_DIGITAL_MAPPINGS;
         buf[1] = ID_GET_DIGITAL_MAPPINGS;
         buf[2] = 1; // one byte - requesting from index 0
         buf[2] = 1; // one byte - requesting from index 0
         buf[3] = 0;
         buf[3] = 0;
@@ -596,7 +598,7 @@ static bool ResetSteamController(SDL_HIDAPI_Device *dev, bool bSuppressErrorSpew
     }
     }
 
 
     // Set our new mappings
     // Set our new mappings
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_DIGITAL_MAPPINGS;
     buf[1] = ID_SET_DIGITAL_MAPPINGS;
     buf[2] = 6; // 2 settings x 3 bytes
     buf[2] = 6; // 2 settings x 3 bytes
     buf[3] = IO_DIGITAL_BUTTON_RIGHT_TRIGGER;
     buf[3] = IO_DIGITAL_BUTTON_RIGHT_TRIGGER;
@@ -634,7 +636,7 @@ static int ReadSteamController(SDL_hid_device *dev, uint8_t *pData, int nDataSiz
 static void SetPairingState(SDL_HIDAPI_Device *dev, bool bEnablePairing)
 static void SetPairingState(SDL_HIDAPI_Device *dev, bool bEnablePairing)
 {
 {
     unsigned char buf[65];
     unsigned char buf[65];
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_ENABLE_PAIRING;
     buf[1] = ID_ENABLE_PAIRING;
     buf[2] = 2; // 2 payload bytes: bool + timeout
     buf[2] = 2; // 2 payload bytes: bool + timeout
     buf[3] = bEnablePairing ? 1 : 0;
     buf[3] = bEnablePairing ? 1 : 0;
@@ -648,7 +650,7 @@ static void SetPairingState(SDL_HIDAPI_Device *dev, bool bEnablePairing)
 static void CommitPairing(SDL_HIDAPI_Device *dev)
 static void CommitPairing(SDL_HIDAPI_Device *dev)
 {
 {
     unsigned char buf[65];
     unsigned char buf[65];
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_DONGLE_COMMIT_DEVICE;
     buf[1] = ID_DONGLE_COMMIT_DEVICE;
     SetFeatureReport(dev, buf, 2);
     SetFeatureReport(dev, buf, 2);
 }
 }
@@ -663,18 +665,18 @@ static void CloseSteamController(SDL_HIDAPI_Device *dev)
     int nSettings = 0;
     int nSettings = 0;
 
 
     // Reset digital button mappings
     // Reset digital button mappings
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_DEFAULT_DIGITAL_MAPPINGS;
     buf[1] = ID_SET_DEFAULT_DIGITAL_MAPPINGS;
     SetFeatureReport(dev, buf, 2);
     SetFeatureReport(dev, buf, 2);
 
 
     // Reset the default settings
     // Reset the default settings
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_LOAD_DEFAULT_SETTINGS;
     buf[1] = ID_LOAD_DEFAULT_SETTINGS;
     buf[2] = 0;
     buf[2] = 0;
     SetFeatureReport(dev, buf, 3);
     SetFeatureReport(dev, buf, 3);
 
 
     // Reset mouse mode for lizard mode
     // Reset mouse mode for lizard mode
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_SETTINGS_VALUES;
     buf[1] = ID_SET_SETTINGS_VALUES;
     ADD_SETTING(SETTING_RIGHT_TRACKPAD_MODE, TRACKPAD_ABSOLUTE_MOUSE);
     ADD_SETTING(SETTING_RIGHT_TRACKPAD_MODE, TRACKPAD_ABSOLUTE_MOUSE);
     buf[2] = (unsigned char)(nSettings * 3);
     buf[2] = (unsigned char)(nSettings * 3);
@@ -1138,6 +1140,7 @@ static bool HIDAPI_DriverSteam_InitDevice(SDL_HIDAPI_Device *device)
         unsigned char buf[65];
         unsigned char buf[65];
         int res;
         int res;
 
 
+        SDL_zero(buf);
         buf[0] = 0;
         buf[0] = 0;
         buf[1] = ID_DONGLE_GET_WIRELESS_STATE;
         buf[1] = ID_DONGLE_GET_WIRELESS_STATE;
         res = SetFeatureReport(device, buf, 2);
         res = SetFeatureReport(device, buf, 2);
@@ -1199,7 +1202,7 @@ static bool SetHomeLED(SDL_HIDAPI_Device *device, Uint8 value)
     unsigned char buf[65];
     unsigned char buf[65];
     int nSettings = 0;
     int nSettings = 0;
 
 
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_SETTINGS_VALUES;
     buf[1] = ID_SET_SETTINGS_VALUES;
     ADD_SETTING(SETTING_LED_USER_BRIGHTNESS, value);
     ADD_SETTING(SETTING_LED_USER_BRIGHTNESS, value);
     buf[2] = (unsigned char)(nSettings * 3);
     buf[2] = (unsigned char)(nSettings * 3);
@@ -1310,7 +1313,7 @@ static bool HIDAPI_DriverSteam_SetSensorsEnabled(SDL_HIDAPI_Device *device, SDL_
     unsigned char buf[65];
     unsigned char buf[65];
     int nSettings = 0;
     int nSettings = 0;
 
 
-    SDL_memset(buf, 0, 65);
+    SDL_zero(buf);
     buf[1] = ID_SET_SETTINGS_VALUES;
     buf[1] = ID_SET_SETTINGS_VALUES;
     if (enabled) {
     if (enabled) {
         ADD_SETTING(SETTING_IMU_MODE, SETTING_GYRO_MODE_SEND_RAW_ACCEL | SETTING_GYRO_MODE_SEND_RAW_GYRO);
         ADD_SETTING(SETTING_IMU_MODE, SETTING_GYRO_MODE_SEND_RAW_ACCEL | SETTING_GYRO_MODE_SEND_RAW_GYRO);