diff options
| author | 2024-01-31 18:46:06 -0600 | |
|---|---|---|
| committer | 2024-02-01 10:37:44 -0600 | |
| commit | 818721d12d04f3a9cdf98e9cc31deae171ce6f7e (patch) | |
| tree | 562a15e9da80eb96d5935d962820c0c9b116ac08 /src/hid_core/resource_manager.cpp | |
| parent | Merge pull request #12878 from zhaobot/tx-update-20240201020554 (diff) | |
| download | yuzu-818721d12d04f3a9cdf98e9cc31deae171ce6f7e.tar.gz yuzu-818721d12d04f3a9cdf98e9cc31deae171ce6f7e.tar.xz yuzu-818721d12d04f3a9cdf98e9cc31deae171ce6f7e.zip | |
service: hid: Multiple fixes
Diffstat (limited to 'src/hid_core/resource_manager.cpp')
| -rw-r--r-- | src/hid_core/resource_manager.cpp | 88 |
1 files changed, 42 insertions, 46 deletions
diff --git a/src/hid_core/resource_manager.cpp b/src/hid_core/resource_manager.cpp index 68ce2c7ae..245da582e 100644 --- a/src/hid_core/resource_manager.cpp +++ b/src/hid_core/resource_manager.cpp | |||
| @@ -52,9 +52,42 @@ ResourceManager::ResourceManager(Core::System& system_, | |||
| 52 | std::shared_ptr<HidFirmwareSettings> settings) | 52 | std::shared_ptr<HidFirmwareSettings> settings) |
| 53 | : firmware_settings{settings}, system{system_}, service_context{system_, "hid"} { | 53 | : firmware_settings{settings}, system{system_}, service_context{system_, "hid"} { |
| 54 | applet_resource = std::make_shared<AppletResource>(system); | 54 | applet_resource = std::make_shared<AppletResource>(system); |
| 55 | |||
| 56 | // Register update callbacks | ||
| 57 | npad_update_event = Core::Timing::CreateEvent("HID::UpdatePadCallback", | ||
| 58 | [this](s64 time, std::chrono::nanoseconds ns_late) | ||
| 59 | -> std::optional<std::chrono::nanoseconds> { | ||
| 60 | UpdateNpad(ns_late); | ||
| 61 | return std::nullopt; | ||
| 62 | }); | ||
| 63 | default_update_event = Core::Timing::CreateEvent( | ||
| 64 | "HID::UpdateDefaultCallback", | ||
| 65 | [this](s64 time, | ||
| 66 | std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 67 | UpdateControllers(ns_late); | ||
| 68 | return std::nullopt; | ||
| 69 | }); | ||
| 70 | mouse_keyboard_update_event = Core::Timing::CreateEvent( | ||
| 71 | "HID::UpdateMouseKeyboardCallback", | ||
| 72 | [this](s64 time, | ||
| 73 | std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 74 | UpdateMouseKeyboard(ns_late); | ||
| 75 | return std::nullopt; | ||
| 76 | }); | ||
| 77 | motion_update_event = Core::Timing::CreateEvent( | ||
| 78 | "HID::UpdateMotionCallback", | ||
| 79 | [this](s64 time, | ||
| 80 | std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 81 | UpdateMotion(ns_late); | ||
| 82 | return std::nullopt; | ||
| 83 | }); | ||
| 55 | } | 84 | } |
| 56 | 85 | ||
| 57 | ResourceManager::~ResourceManager() { | 86 | ResourceManager::~ResourceManager() { |
| 87 | system.CoreTiming().UnscheduleEvent(npad_update_event); | ||
| 88 | system.CoreTiming().UnscheduleEvent(default_update_event); | ||
| 89 | system.CoreTiming().UnscheduleEvent(mouse_keyboard_update_event); | ||
| 90 | system.CoreTiming().UnscheduleEvent(motion_update_event); | ||
| 58 | system.CoreTiming().UnscheduleEvent(touch_update_event); | 91 | system.CoreTiming().UnscheduleEvent(touch_update_event); |
| 59 | input_event->Finalize(); | 92 | input_event->Finalize(); |
| 60 | }; | 93 | }; |
| @@ -201,6 +234,7 @@ void ResourceManager::InitializeHidCommonSampler() { | |||
| 201 | 234 | ||
| 202 | debug_pad->SetAppletResource(applet_resource, &shared_mutex); | 235 | debug_pad->SetAppletResource(applet_resource, &shared_mutex); |
| 203 | digitizer->SetAppletResource(applet_resource, &shared_mutex); | 236 | digitizer->SetAppletResource(applet_resource, &shared_mutex); |
| 237 | unique_pad->SetAppletResource(applet_resource, &shared_mutex); | ||
| 204 | keyboard->SetAppletResource(applet_resource, &shared_mutex); | 238 | keyboard->SetAppletResource(applet_resource, &shared_mutex); |
| 205 | 239 | ||
| 206 | const auto settings = | 240 | const auto settings = |
| @@ -214,6 +248,14 @@ void ResourceManager::InitializeHidCommonSampler() { | |||
| 214 | home_button->SetAppletResource(applet_resource, &shared_mutex); | 248 | home_button->SetAppletResource(applet_resource, &shared_mutex); |
| 215 | sleep_button->SetAppletResource(applet_resource, &shared_mutex); | 249 | sleep_button->SetAppletResource(applet_resource, &shared_mutex); |
| 216 | capture_button->SetAppletResource(applet_resource, &shared_mutex); | 250 | capture_button->SetAppletResource(applet_resource, &shared_mutex); |
| 251 | |||
| 252 | system.CoreTiming().ScheduleLoopingEvent(npad_update_ns, npad_update_ns, npad_update_event); | ||
| 253 | system.CoreTiming().ScheduleLoopingEvent(default_update_ns, default_update_ns, | ||
| 254 | default_update_event); | ||
| 255 | system.CoreTiming().ScheduleLoopingEvent(mouse_keyboard_update_ns, mouse_keyboard_update_ns, | ||
| 256 | mouse_keyboard_update_event); | ||
| 257 | system.CoreTiming().ScheduleLoopingEvent(motion_update_ns, motion_update_ns, | ||
| 258 | motion_update_event); | ||
| 217 | } | 259 | } |
| 218 | 260 | ||
| 219 | void ResourceManager::InitializeTouchScreenSampler() { | 261 | void ResourceManager::InitializeTouchScreenSampler() { |
| @@ -465,55 +507,9 @@ IAppletResource::IAppletResource(Core::System& system_, std::shared_ptr<Resource | |||
| 465 | {0, &IAppletResource::GetSharedMemoryHandle, "GetSharedMemoryHandle"}, | 507 | {0, &IAppletResource::GetSharedMemoryHandle, "GetSharedMemoryHandle"}, |
| 466 | }; | 508 | }; |
| 467 | RegisterHandlers(functions); | 509 | RegisterHandlers(functions); |
| 468 | |||
| 469 | // Register update callbacks | ||
| 470 | npad_update_event = Core::Timing::CreateEvent( | ||
| 471 | "HID::UpdatePadCallback", | ||
| 472 | [this, resource]( | ||
| 473 | s64 time, std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 474 | const auto guard = LockService(); | ||
| 475 | resource->UpdateNpad(ns_late); | ||
| 476 | return std::nullopt; | ||
| 477 | }); | ||
| 478 | default_update_event = Core::Timing::CreateEvent( | ||
| 479 | "HID::UpdateDefaultCallback", | ||
| 480 | [this, resource]( | ||
| 481 | s64 time, std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 482 | const auto guard = LockService(); | ||
| 483 | resource->UpdateControllers(ns_late); | ||
| 484 | return std::nullopt; | ||
| 485 | }); | ||
| 486 | mouse_keyboard_update_event = Core::Timing::CreateEvent( | ||
| 487 | "HID::UpdateMouseKeyboardCallback", | ||
| 488 | [this, resource]( | ||
| 489 | s64 time, std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 490 | const auto guard = LockService(); | ||
| 491 | resource->UpdateMouseKeyboard(ns_late); | ||
| 492 | return std::nullopt; | ||
| 493 | }); | ||
| 494 | motion_update_event = Core::Timing::CreateEvent( | ||
| 495 | "HID::UpdateMotionCallback", | ||
| 496 | [this, resource]( | ||
| 497 | s64 time, std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> { | ||
| 498 | const auto guard = LockService(); | ||
| 499 | resource->UpdateMotion(ns_late); | ||
| 500 | return std::nullopt; | ||
| 501 | }); | ||
| 502 | |||
| 503 | system.CoreTiming().ScheduleLoopingEvent(npad_update_ns, npad_update_ns, npad_update_event); | ||
| 504 | system.CoreTiming().ScheduleLoopingEvent(default_update_ns, default_update_ns, | ||
| 505 | default_update_event); | ||
| 506 | system.CoreTiming().ScheduleLoopingEvent(mouse_keyboard_update_ns, mouse_keyboard_update_ns, | ||
| 507 | mouse_keyboard_update_event); | ||
| 508 | system.CoreTiming().ScheduleLoopingEvent(motion_update_ns, motion_update_ns, | ||
| 509 | motion_update_event); | ||
| 510 | } | 510 | } |
| 511 | 511 | ||
| 512 | IAppletResource::~IAppletResource() { | 512 | IAppletResource::~IAppletResource() { |
| 513 | system.CoreTiming().UnscheduleEvent(npad_update_event); | ||
| 514 | system.CoreTiming().UnscheduleEvent(default_update_event); | ||
| 515 | system.CoreTiming().UnscheduleEvent(mouse_keyboard_update_event); | ||
| 516 | system.CoreTiming().UnscheduleEvent(motion_update_event); | ||
| 517 | resource_manager->FreeAppletResourceId(aruid); | 513 | resource_manager->FreeAppletResourceId(aruid); |
| 518 | } | 514 | } |
| 519 | 515 | ||