Restart the IMU if the controller stops sending gyro/accel data
parent
56c1481cab
commit
6204ae5002
|
@ -2897,6 +2897,7 @@ int SDL_PrivateJoystickSensor(SDL_Joystick *joystick, SDL_SensorType type, const
|
|||
|
||||
/* Update internal sensor state */
|
||||
SDL_memcpy(sensor->data, data, num_values*sizeof(*data));
|
||||
SDL_Log("Sensor %d data: %.2f,%.2f,%.2f\n", sensor->type, data[0], data[1], data[2]);
|
||||
|
||||
/* Post the event, if desired */
|
||||
#if !SDL_EVENTS_DISABLED
|
||||
|
|
|
@ -269,6 +269,7 @@ typedef struct {
|
|||
Uint32 m_unRumblePending;
|
||||
SDL_bool m_bHasSensors;
|
||||
SDL_bool m_bReportSensors;
|
||||
SDL_bool m_bHasSensorData;
|
||||
Uint32 m_unLastInput;
|
||||
|
||||
SwitchInputOnlyControllerStatePacket_t m_lastInputOnlyState;
|
||||
|
@ -1977,13 +1978,28 @@ static void HandleFullControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_C
|
|||
}
|
||||
|
||||
if (ctx->m_bReportSensors) {
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[2].sGyroX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[1].sGyroX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[0].sGyroX);
|
||||
SDL_bool bHasSensorData = (packet->imuState[0].sAccelX != 0 ||
|
||||
packet->imuState[0].sGyroX != 0);
|
||||
if (bHasSensorData) {
|
||||
ctx->m_bHasSensorData = SDL_TRUE;
|
||||
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[2].sAccelX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[1].sAccelX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[0].sAccelX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[2].sGyroX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[1].sGyroX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[0].sGyroX);
|
||||
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[2].sAccelX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[1].sAccelX);
|
||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[0].sAccelX);
|
||||
|
||||
} else if (ctx->m_bHasSensorData) {
|
||||
/* Uh oh, someone turned off the IMU? */
|
||||
SDL_UnlockMutex(ctx->device->dev_lock);
|
||||
SetIMUEnabled(ctx, SDL_TRUE);
|
||||
SDL_LockMutex(ctx->device->dev_lock);
|
||||
|
||||
} else {
|
||||
/* We have never gotten IMU data, probably not supported on this device */
|
||||
}
|
||||
}
|
||||
|
||||
ctx->m_lastFullState = *packet;
|
||||
|
|
Loading…
Reference in New Issue