mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-05 09:26:25 +00:00
Use default sensor calibration if we can't read it from the Nintendo Switch controller
Fixes https://github.com/libsdl-org/SDL/issues/7830
This commit is contained in:
@@ -835,29 +835,16 @@ static SDL_bool LoadStickCalibration(SDL_DriverSwitch_Context *ctx)
|
|||||||
|
|
||||||
static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx)
|
static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx)
|
||||||
{
|
{
|
||||||
Uint8 *pIMUScale;
|
|
||||||
SwitchSubcommandInputPacket_t *reply = NULL;
|
SwitchSubcommandInputPacket_t *reply = NULL;
|
||||||
Sint16 sAccelRawX, sAccelRawY, sAccelRawZ, sGyroRawX, sGyroRawY, sGyroRawZ;
|
|
||||||
|
|
||||||
/* Read Calibration Info */
|
/* Read Calibration Info */
|
||||||
SwitchSPIOpData_t readParams;
|
SwitchSPIOpData_t readParams;
|
||||||
readParams.unAddress = k_unSPIIMUScaleStartOffset;
|
readParams.unAddress = k_unSPIIMUScaleStartOffset;
|
||||||
readParams.ucLength = k_unSPIIMUScaleLength;
|
readParams.ucLength = k_unSPIIMUScaleLength;
|
||||||
|
|
||||||
if (!WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readParams, sizeof(readParams), &reply)) {
|
if (WriteSubcommand(ctx, k_eSwitchSubcommandIDs_SPIFlashRead, (uint8_t *)&readParams, sizeof(readParams), &reply)) {
|
||||||
const float accelScale = SDL_STANDARD_GRAVITY / SWITCH_ACCEL_SCALE;
|
Uint8 *pIMUScale;
|
||||||
const float gyroScale = SDL_PI_F / 180.0f / SWITCH_GYRO_SCALE;
|
Sint16 sAccelRawX, sAccelRawY, sAccelRawZ, sGyroRawX, sGyroRawY, sGyroRawZ;
|
||||||
|
|
||||||
ctx->m_IMUScaleData.fAccelScaleX = accelScale;
|
|
||||||
ctx->m_IMUScaleData.fAccelScaleY = accelScale;
|
|
||||||
ctx->m_IMUScaleData.fAccelScaleZ = accelScale;
|
|
||||||
|
|
||||||
ctx->m_IMUScaleData.fGyroScaleX = gyroScale;
|
|
||||||
ctx->m_IMUScaleData.fGyroScaleY = gyroScale;
|
|
||||||
ctx->m_IMUScaleData.fGyroScaleZ = gyroScale;
|
|
||||||
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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;
|
||||||
@@ -895,6 +882,19 @@ static SDL_bool LoadIMUCalibration(SDL_DriverSwitch_Context *ctx)
|
|||||||
ctx->m_IMUScaleData.fGyroScaleY = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawY) * SDL_PI_F / 180.0f;
|
ctx->m_IMUScaleData.fGyroScaleY = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawY) * SDL_PI_F / 180.0f;
|
||||||
ctx->m_IMUScaleData.fGyroScaleZ = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawZ) * SDL_PI_F / 180.0f;
|
ctx->m_IMUScaleData.fGyroScaleZ = SWITCH_GYRO_SCALE_MULT / (SWITCH_GYRO_SCALE_OFFSET - (float)sGyroRawZ) * SDL_PI_F / 180.0f;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Use default values */
|
||||||
|
const float accelScale = SDL_STANDARD_GRAVITY / SWITCH_ACCEL_SCALE;
|
||||||
|
const float gyroScale = SDL_PI_F / 180.0f / SWITCH_GYRO_SCALE;
|
||||||
|
|
||||||
|
ctx->m_IMUScaleData.fAccelScaleX = accelScale;
|
||||||
|
ctx->m_IMUScaleData.fAccelScaleY = accelScale;
|
||||||
|
ctx->m_IMUScaleData.fAccelScaleZ = accelScale;
|
||||||
|
|
||||||
|
ctx->m_IMUScaleData.fGyroScaleX = gyroScale;
|
||||||
|
ctx->m_IMUScaleData.fGyroScaleY = gyroScale;
|
||||||
|
ctx->m_IMUScaleData.fGyroScaleZ = gyroScale;
|
||||||
|
}
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user