Skip to content

Commit

Permalink
Fix bugs in IMU calibration loading for Nintendo Controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
happyharryh authored and slouken committed Oct 15, 2022
1 parent 6204768 commit a6573f9
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions src/joystick/hidapi/SDL_hidapi_switch.c
Original file line number Diff line number Diff line change
Expand Up @@ -821,27 +821,27 @@ 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;
readParams.ucLength = k_unSPIIMUUserScaleLength;
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 */
Expand Down

0 comments on commit a6573f9

Please sign in to comment.