Fix bugs in IMU calibration loading for Nintendo Controllers

This commit is contained in:
happyharryh 2022-10-16 00:23:25 +08:00 committed by Sam Lantinga
parent 6204768653
commit a6573f94ab
1 changed files with 12 additions and 12 deletions

View File

@ -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 */ /* IMU scale gives us multipliers for converting raw values to real world values */
pIMUScale = reply->spiReadData.rgucReadData; pIMUScale = reply->spiReadData.rgucReadData;
sAccelRawX = ((pIMUScale[1] << 8) & 0xF00) | pIMUScale[0]; sAccelRawX = ((pIMUScale[1] << 8) & 0xFF00) | pIMUScale[0];
sAccelRawY = ((pIMUScale[3] << 8) & 0xF00) | pIMUScale[2]; sAccelRawY = ((pIMUScale[3] << 8) & 0xFF00) | pIMUScale[2];
sAccelRawZ = ((pIMUScale[5] << 8) & 0xF00) | pIMUScale[4]; sAccelRawZ = ((pIMUScale[5] << 8) & 0xFF00) | pIMUScale[4];
sGyroRawX = ((pIMUScale[13] << 8) & 0xF00) | pIMUScale[12]; sGyroRawX = ((pIMUScale[13] << 8) & 0xFF00) | pIMUScale[12];
sGyroRawY = ((pIMUScale[15] << 8) & 0xF00) | pIMUScale[14]; sGyroRawY = ((pIMUScale[15] << 8) & 0xFF00) | pIMUScale[14];
sGyroRawZ = ((pIMUScale[17] << 8) & 0xF00) | pIMUScale[16]; sGyroRawZ = ((pIMUScale[17] << 8) & 0xFF00) | pIMUScale[16];
/* Check for user calibration data. If it's present and set, it'll override the factory settings */ /* Check for user calibration data. If it's present and set, it'll override the factory settings */
readParams.unAddress = k_unSPIIMUUserScaleStartOffset; 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) { if (WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t*)&readParams, sizeof(readParams), &reply) && (pIMUScale[0] | pIMUScale[1] << 8) == 0xA1B2) {
pIMUScale = reply->spiReadData.rgucReadData; pIMUScale = reply->spiReadData.rgucReadData;
sAccelRawX = ((pIMUScale[3] << 8) & 0xF00) | pIMUScale[2]; sAccelRawX = ((pIMUScale[3] << 8) & 0xFF00) | pIMUScale[2];
sAccelRawY = ((pIMUScale[5] << 8) & 0xF00) | pIMUScale[4]; sAccelRawY = ((pIMUScale[5] << 8) & 0xFF00) | pIMUScale[4];
sAccelRawZ = ((pIMUScale[7] << 8) & 0xF00) | pIMUScale[6]; sAccelRawZ = ((pIMUScale[7] << 8) & 0xFF00) | pIMUScale[6];
sGyroRawX = ((pIMUScale[15] << 8) & 0xF00) | pIMUScale[14]; sGyroRawX = ((pIMUScale[15] << 8) & 0xFF00) | pIMUScale[14];
sGyroRawY = ((pIMUScale[17] << 8) & 0xF00) | pIMUScale[16]; sGyroRawY = ((pIMUScale[17] << 8) & 0xFF00) | pIMUScale[16];
sGyroRawZ = ((pIMUScale[19] << 8) & 0xF00) | pIMUScale[18]; sGyroRawZ = ((pIMUScale[19] << 8) & 0xFF00) | pIMUScale[18];
} }
/* Accelerometer scale */ /* Accelerometer scale */