Fix bugs in IMU calibration loading for Nintendo Controllers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c
index 1970a9d..e4df02a 100644
--- a/src/joystick/hidapi/SDL_hidapi_switch.c
+++ b/src/joystick/hidapi/SDL_hidapi_switch.c
@@ -821,13 +821,13 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context* ctx)
/* IMU scale gives us multipliers for converting raw values to real world values */
pIMUScale = reply->spiReadData.rgucReadData;
- sAccelRawX = ((pIMUScale[1] << 8) & 0xF00) | pIMUScale[0];
- sAccelRawY = ((pIMUScale[3] << 8) & 0xF00) | pIMUScale[2];
- sAccelRawZ = ((pIMUScale[5] << 8) & 0xF00) | pIMUScale[4];
+ sAccelRawX = ((pIMUScale[1] << 8) & 0xFF00) | pIMUScale[0];
+ sAccelRawY = ((pIMUScale[3] << 8) & 0xFF00) | pIMUScale[2];
+ sAccelRawZ = ((pIMUScale[5] << 8) & 0xFF00) | pIMUScale[4];
- sGyroRawX = ((pIMUScale[13] << 8) & 0xF00) | pIMUScale[12];
- sGyroRawY = ((pIMUScale[15] << 8) & 0xF00) | pIMUScale[14];
- sGyroRawZ = ((pIMUScale[17] << 8) & 0xF00) | pIMUScale[16];
+ sGyroRawX = ((pIMUScale[13] << 8) & 0xFF00) | pIMUScale[12];
+ sGyroRawY = ((pIMUScale[15] << 8) & 0xFF00) | pIMUScale[14];
+ sGyroRawZ = ((pIMUScale[17] << 8) & 0xFF00) | pIMUScale[16];
/* Check for user calibration data. If it's present and set, it'll override the factory settings */
readParams.unAddress = k_unSPIIMUUserScaleStartOffset;
@@ -835,13 +835,13 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context* ctx)
if (WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t*)&readParams, sizeof(readParams), &reply) && (pIMUScale[0] | pIMUScale[1] << 8) == 0xA1B2) {
pIMUScale = reply->spiReadData.rgucReadData;
- sAccelRawX = ((pIMUScale[3] << 8) & 0xF00) | pIMUScale[2];
- sAccelRawY = ((pIMUScale[5] << 8) & 0xF00) | pIMUScale[4];
- sAccelRawZ = ((pIMUScale[7] << 8) & 0xF00) | pIMUScale[6];
+ sAccelRawX = ((pIMUScale[3] << 8) & 0xFF00) | pIMUScale[2];
+ sAccelRawY = ((pIMUScale[5] << 8) & 0xFF00) | pIMUScale[4];
+ sAccelRawZ = ((pIMUScale[7] << 8) & 0xFF00) | pIMUScale[6];
- sGyroRawX = ((pIMUScale[15] << 8) & 0xF00) | pIMUScale[14];
- sGyroRawY = ((pIMUScale[17] << 8) & 0xF00) | pIMUScale[16];
- sGyroRawZ = ((pIMUScale[19] << 8) & 0xF00) | pIMUScale[18];
+ sGyroRawX = ((pIMUScale[15] << 8) & 0xFF00) | pIMUScale[14];
+ sGyroRawY = ((pIMUScale[17] << 8) & 0xFF00) | pIMUScale[16];
+ sGyroRawZ = ((pIMUScale[19] << 8) & 0xFF00) | pIMUScale[18];
}
/* Accelerometer scale */