mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 08:22:32 +00:00
Fix sensor handling if they are enabled but an error was thrown regardless
This commit is contained in:
parent
76b4da6212
commit
b884ae62d5
@ -316,11 +316,11 @@ int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) {
|
|||||||
pData[i].angularVelocity.y = states[i].angularVelocity.y;
|
pData[i].angularVelocity.y = states[i].angularVelocity.y;
|
||||||
pData[i].angularVelocity.z = states[i].angularVelocity.z;
|
pData[i].angularVelocity.z = states[i].angularVelocity.z;
|
||||||
if (engine) {
|
if (engine) {
|
||||||
const auto accel_poll_rate = engine->GetAccelPollRate();
|
const auto gyro_poll_rate = engine->GetAccelPollRate();
|
||||||
if (accel_poll_rate != 0.0f) {
|
if (gyro_poll_rate != 0.0f) {
|
||||||
GameController::CalculateOrientation(pData[i].acceleration,
|
GameController::CalculateOrientation(pData[i].acceleration,
|
||||||
pData[i].angularVelocity,
|
pData[i].angularVelocity,
|
||||||
1.0f / accel_poll_rate, pData[i].orientation);
|
1.0f / gyro_poll_rate, pData[i].orientation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pData[i].touchData.touchNum =
|
pData[i].touchData.touchNum =
|
||||||
@ -385,10 +385,10 @@ int PS4_SYSV_ABI scePadReadState(s32 handle, OrbisPadData* pData) {
|
|||||||
pData->angularVelocity.y = state.angularVelocity.y;
|
pData->angularVelocity.y = state.angularVelocity.y;
|
||||||
pData->angularVelocity.z = state.angularVelocity.z;
|
pData->angularVelocity.z = state.angularVelocity.z;
|
||||||
if (engine) {
|
if (engine) {
|
||||||
const auto accel_poll_rate = engine->GetAccelPollRate();
|
const auto gyro_poll_rate = engine->GetAccelPollRate();
|
||||||
if (accel_poll_rate != 0.0f) {
|
if (gyro_poll_rate != 0.0f) {
|
||||||
GameController::CalculateOrientation(pData->acceleration, pData->angularVelocity,
|
GameController::CalculateOrientation(pData->acceleration, pData->angularVelocity,
|
||||||
1.0f / accel_poll_rate, pData->orientation);
|
1.0f / gyro_poll_rate, pData->orientation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pData->touchData.touchNum =
|
pData->touchData.touchNum =
|
||||||
|
@ -182,7 +182,7 @@ void GameController::CalculateOrientation(Libraries::Pad::OrbisFVector3& acceler
|
|||||||
|
|
||||||
// Normalize accelerometer measurement
|
// Normalize accelerometer measurement
|
||||||
float norm = std::sqrt(ax * ax + ay * ay + az * az);
|
float norm = std::sqrt(ax * ax + ay * ay + az * az);
|
||||||
if (norm == 0.0f)
|
if (norm == 0.0f || deltaTime == 0.0f)
|
||||||
return; // Handle NaN
|
return; // Handle NaN
|
||||||
norm = 1.0f / norm;
|
norm = 1.0f / norm;
|
||||||
ax *= norm;
|
ax *= norm;
|
||||||
|
@ -134,13 +134,15 @@ void SDLInputEngine::Init() {
|
|||||||
m_gyro_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_GYRO);
|
m_gyro_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_GYRO);
|
||||||
LOG_INFO(Input, "Gyro initialized, poll rate: {}", m_gyro_poll_rate);
|
LOG_INFO(Input, "Gyro initialized, poll rate: {}", m_gyro_poll_rate);
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad");
|
LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad, error: {}", SDL_GetError());
|
||||||
|
SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_GYRO, false);
|
||||||
}
|
}
|
||||||
if (SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_ACCEL, true)) {
|
if (SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_ACCEL, true)) {
|
||||||
m_accel_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_ACCEL);
|
m_accel_poll_rate = SDL_GetGamepadSensorDataRate(m_gamepad, SDL_SENSOR_ACCEL);
|
||||||
LOG_INFO(Input, "Accel initialized, poll rate: {}", m_accel_poll_rate);
|
LOG_INFO(Input, "Accel initialized, poll rate: {}", m_accel_poll_rate);
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR(Input, "Failed to initialize accel controls for gamepad");
|
LOG_ERROR(Input, "Failed to initialize accel controls for gamepad, error: {}", SDL_GetError());
|
||||||
|
SDL_SetGamepadSensorEnabled(m_gamepad, SDL_SENSOR_ACCEL, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
SDL_Gamepad* m_gamepad = nullptr;
|
SDL_Gamepad* m_gamepad = nullptr;
|
||||||
|
|
||||||
float m_gyro_poll_rate{};
|
float m_gyro_poll_rate = 0.0f;
|
||||||
float m_accel_poll_rate{};
|
float m_accel_poll_rate = 0.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Input
|
} // namespace Input
|
||||||
|
Loading…
Reference in New Issue
Block a user