From a6573f94abd0a74cefca600c770f525180a76534 Mon Sep 17 00:00:00 2001
From: happyharryh <[EMAIL REDACTED]>
Date: Sun, 16 Oct 2022 00:23:25 +0800
Subject: [PATCH] Fix bugs in IMU calibration loading for Nintendo Controllers
---
src/joystick/hidapi/SDL_hidapi_switch.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c
index 1970a9d43cb8..e4df02a41a39 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 */