Browse Source

Fixed Nintendo Switch Pro controllers that don't have readable user calibration

(cherry picked from commit 9ee1200e6f8fecd394d9355781af40ac90851546)
(cherry picked from commit 170428b107bdc004eb44fa9818eb14c2aa8798d1)
Sam Lantinga 1 year ago
parent
commit
7fa2ddb0de
1 changed files with 4 additions and 5 deletions
  1. 4 5
      src/joystick/hidapi/SDL_hidapi_switch.c

+ 4 - 5
src/joystick/hidapi/SDL_hidapi_switch.c

@@ -761,9 +761,8 @@ static SDL_bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx)
     readUserParams.unAddress = k_unSPIStickUserCalibrationStartOffset;
     readUserParams.ucLength = k_unSPIStickUserCalibrationLength;
 
-    if (!WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readUserParams, sizeof(readUserParams), &user_reply)) {
-        return SDL_FALSE;
-    }
+    /* This isn't readable on all controllers, so ignore failure */
+    WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readUserParams, sizeof(readUserParams), &user_reply);
 
     /* Read Factory Calibration Info */
     readFactoryParams.unAddress = k_unSPIStickFactoryCalibrationStartOffset;
@@ -774,13 +773,13 @@ static SDL_bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx)
     }
 
     /* Automatically select the user calibration if magic bytes are set */
-    if (user_reply->stickUserCalibration.rgucLeftMagic[0] == 0xB2 && user_reply->stickUserCalibration.rgucLeftMagic[1] == 0xA1) {
+    if (user_reply && user_reply->stickUserCalibration.rgucLeftMagic[0] == 0xB2 && user_reply->stickUserCalibration.rgucLeftMagic[1] == 0xA1) {
         pLeftStickCal = user_reply->stickUserCalibration.rgucLeftCalibration;
     } else {
         pLeftStickCal = factory_reply->stickFactoryCalibration.rgucLeftCalibration;
     }
 
-    if (user_reply->stickUserCalibration.rgucRightMagic[0] == 0xB2 && user_reply->stickUserCalibration.rgucRightMagic[1] == 0xA1) {
+    if (user_reply && user_reply->stickUserCalibration.rgucRightMagic[0] == 0xB2 && user_reply->stickUserCalibration.rgucRightMagic[1] == 0xA1) {
         pRightStickCal = user_reply->stickUserCalibration.rgucRightCalibration;
     } else {
         pRightStickCal = factory_reply->stickFactoryCalibration.rgucRightCalibration;