|
|
@ -139,7 +139,7 @@ void JoyconDriver::InputThread(std::stop_token stop_token) {
|
|
|
|
input_thread_running = true;
|
|
|
|
input_thread_running = true;
|
|
|
|
|
|
|
|
|
|
|
|
// Max update rate is 5ms, ensure we are always able to read a bit faster
|
|
|
|
// Max update rate is 5ms, ensure we are always able to read a bit faster
|
|
|
|
constexpr int ThreadDelay = 2;
|
|
|
|
constexpr int ThreadDelay = 3;
|
|
|
|
std::vector<u8> buffer(MaxBufferSize);
|
|
|
|
std::vector<u8> buffer(MaxBufferSize);
|
|
|
|
|
|
|
|
|
|
|
|
while (!stop_token.stop_requested()) {
|
|
|
|
while (!stop_token.stop_requested()) {
|
|
|
@ -163,6 +163,17 @@ void JoyconDriver::InputThread(std::stop_token stop_token) {
|
|
|
|
OnNewData(buffer);
|
|
|
|
OnNewData(buffer);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!vibration_queue.Empty()) {
|
|
|
|
|
|
|
|
VibrationValue vibration_value;
|
|
|
|
|
|
|
|
vibration_queue.Pop(vibration_value);
|
|
|
|
|
|
|
|
last_vibration_result = rumble_protocol->SendVibration(vibration_value);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We can't keep up with vibrations. Start skipping.
|
|
|
|
|
|
|
|
while (vibration_queue.Size() > 6) {
|
|
|
|
|
|
|
|
vibration_queue.Pop();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::this_thread::yield();
|
|
|
|
std::this_thread::yield();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -402,7 +413,8 @@ Common::Input::DriverResult JoyconDriver::SetVibration(const VibrationValue& vib
|
|
|
|
if (disable_input_thread) {
|
|
|
|
if (disable_input_thread) {
|
|
|
|
return Common::Input::DriverResult::HandleInUse;
|
|
|
|
return Common::Input::DriverResult::HandleInUse;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return rumble_protocol->SendVibration(vibration);
|
|
|
|
vibration_queue.Push(vibration);
|
|
|
|
|
|
|
|
return last_vibration_result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Common::Input::DriverResult JoyconDriver::SetLedConfig(u8 led_pattern) {
|
|
|
|
Common::Input::DriverResult JoyconDriver::SetLedConfig(u8 led_pattern) {
|
|
|
|