mirror of https://github.com/encounter/SDL.git
Restart the IMU if the controller stops sending gyro/accel data
This commit is contained in:
parent
56c1481cab
commit
6204ae5002
|
@ -2897,6 +2897,7 @@ int SDL_PrivateJoystickSensor(SDL_Joystick *joystick, SDL_SensorType type, const
|
||||||
|
|
||||||
/* Update internal sensor state */
|
/* Update internal sensor state */
|
||||||
SDL_memcpy(sensor->data, data, num_values*sizeof(*data));
|
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 */
|
/* Post the event, if desired */
|
||||||
#if !SDL_EVENTS_DISABLED
|
#if !SDL_EVENTS_DISABLED
|
||||||
|
|
|
@ -269,6 +269,7 @@ typedef struct {
|
||||||
Uint32 m_unRumblePending;
|
Uint32 m_unRumblePending;
|
||||||
SDL_bool m_bHasSensors;
|
SDL_bool m_bHasSensors;
|
||||||
SDL_bool m_bReportSensors;
|
SDL_bool m_bReportSensors;
|
||||||
|
SDL_bool m_bHasSensorData;
|
||||||
Uint32 m_unLastInput;
|
Uint32 m_unLastInput;
|
||||||
|
|
||||||
SwitchInputOnlyControllerStatePacket_t m_lastInputOnlyState;
|
SwitchInputOnlyControllerStatePacket_t m_lastInputOnlyState;
|
||||||
|
@ -1977,6 +1978,11 @@ static void HandleFullControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_C
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctx->m_bReportSensors) {
|
if (ctx->m_bReportSensors) {
|
||||||
|
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_GYRO, &packet->imuState[2].sGyroX);
|
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[1].sGyroX);
|
||||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[0].sGyroX);
|
SendSensorUpdate(joystick, ctx, SDL_SENSOR_GYRO, &packet->imuState[0].sGyroX);
|
||||||
|
@ -1984,6 +1990,16 @@ static void HandleFullControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_C
|
||||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[2].sAccelX);
|
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[1].sAccelX);
|
||||||
SendSensorUpdate(joystick, ctx, SDL_SENSOR_ACCEL, &packet->imuState[0].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;
|
ctx->m_lastFullState = *packet;
|
||||||
|
|
Loading…
Reference in New Issue