diff options
29 files changed, 287 insertions, 164 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index 23e5d3f10..2e59894ab 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | #include "audio_core/codec.h" | 8 | #include "audio_core/codec.h" |
| 9 | #include "common/assert.h" | 9 | #include "common/assert.h" |
| 10 | #include "common/logging/log.h" | 10 | #include "common/logging/log.h" |
| 11 | #include "core/hle/kernel/event.h" | 11 | #include "core/hle/kernel/writable_event.h" |
| 12 | #include "core/memory.h" | 12 | #include "core/memory.h" |
| 13 | 13 | ||
| 14 | namespace AudioCore { | 14 | namespace AudioCore { |
| @@ -72,7 +72,7 @@ private: | |||
| 72 | EffectInStatus info{}; | 72 | EffectInStatus info{}; |
| 73 | }; | 73 | }; |
| 74 | AudioRenderer::AudioRenderer(AudioRendererParameter params, | 74 | AudioRenderer::AudioRenderer(AudioRendererParameter params, |
| 75 | Kernel::SharedPtr<Kernel::Event> buffer_event) | 75 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event) |
| 76 | : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), | 76 | : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), |
| 77 | effects(params.effect_count) { | 77 | effects(params.effect_count) { |
| 78 | 78 | ||
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index 71ba4be40..7826881bf 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include "core/hle/kernel/object.h" | 15 | #include "core/hle/kernel/object.h" |
| 16 | 16 | ||
| 17 | namespace Kernel { | 17 | namespace Kernel { |
| 18 | class Event; | 18 | class WritableEvent; |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | namespace AudioCore { | 21 | namespace AudioCore { |
| @@ -208,7 +208,8 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size | |||
| 208 | 208 | ||
| 209 | class AudioRenderer { | 209 | class AudioRenderer { |
| 210 | public: | 210 | public: |
| 211 | AudioRenderer(AudioRendererParameter params, Kernel::SharedPtr<Kernel::Event> buffer_event); | 211 | AudioRenderer(AudioRendererParameter params, |
| 212 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event); | ||
| 212 | ~AudioRenderer(); | 213 | ~AudioRenderer(); |
| 213 | 214 | ||
| 214 | std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); | 215 | std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); |
| @@ -224,7 +225,7 @@ private: | |||
| 224 | class VoiceState; | 225 | class VoiceState; |
| 225 | 226 | ||
| 226 | AudioRendererParameter worker_params; | 227 | AudioRendererParameter worker_params; |
| 227 | Kernel::SharedPtr<Kernel::Event> buffer_event; | 228 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event; |
| 228 | std::vector<VoiceState> voices; | 229 | std::vector<VoiceState> voices; |
| 229 | std::vector<EffectState> effects; | 230 | std::vector<EffectState> effects; |
| 230 | std::unique_ptr<AudioOut> audio_out; | 231 | std::unique_ptr<AudioOut> audio_out; |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 5e9660a48..85a9c50fb 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -20,17 +20,18 @@ | |||
| 20 | #include "core/hle/kernel/address_arbiter.h" | 20 | #include "core/hle/kernel/address_arbiter.h" |
| 21 | #include "core/hle/kernel/client_port.h" | 21 | #include "core/hle/kernel/client_port.h" |
| 22 | #include "core/hle/kernel/client_session.h" | 22 | #include "core/hle/kernel/client_session.h" |
| 23 | #include "core/hle/kernel/event.h" | ||
| 24 | #include "core/hle/kernel/handle_table.h" | 23 | #include "core/hle/kernel/handle_table.h" |
| 25 | #include "core/hle/kernel/kernel.h" | 24 | #include "core/hle/kernel/kernel.h" |
| 26 | #include "core/hle/kernel/mutex.h" | 25 | #include "core/hle/kernel/mutex.h" |
| 27 | #include "core/hle/kernel/process.h" | 26 | #include "core/hle/kernel/process.h" |
| 27 | #include "core/hle/kernel/readable_event.h" | ||
| 28 | #include "core/hle/kernel/resource_limit.h" | 28 | #include "core/hle/kernel/resource_limit.h" |
| 29 | #include "core/hle/kernel/scheduler.h" | 29 | #include "core/hle/kernel/scheduler.h" |
| 30 | #include "core/hle/kernel/shared_memory.h" | 30 | #include "core/hle/kernel/shared_memory.h" |
| 31 | #include "core/hle/kernel/svc.h" | 31 | #include "core/hle/kernel/svc.h" |
| 32 | #include "core/hle/kernel/svc_wrap.h" | 32 | #include "core/hle/kernel/svc_wrap.h" |
| 33 | #include "core/hle/kernel/thread.h" | 33 | #include "core/hle/kernel/thread.h" |
| 34 | #include "core/hle/kernel/writable_event.h" | ||
| 34 | #include "core/hle/lock.h" | 35 | #include "core/hle/lock.h" |
| 35 | #include "core/hle/result.h" | 36 | #include "core/hle/result.h" |
| 36 | #include "core/hle/service/service.h" | 37 | #include "core/hle/service/service.h" |
| @@ -1361,11 +1362,11 @@ static ResultCode ResetSignal(Handle handle) { | |||
| 1361 | LOG_DEBUG(Kernel_SVC, "called handle 0x{:08X}", handle); | 1362 | LOG_DEBUG(Kernel_SVC, "called handle 0x{:08X}", handle); |
| 1362 | 1363 | ||
| 1363 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1364 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1364 | auto event = handle_table.Get<Event>(handle); | 1365 | auto event = handle_table.Get<ReadableEvent>(handle); |
| 1365 | 1366 | ||
| 1366 | ASSERT(event != nullptr); | 1367 | ASSERT(event != nullptr); |
| 1367 | 1368 | ||
| 1368 | event->Clear(); | 1369 | event->PromoteToWritable()->Clear(); |
| 1369 | return RESULT_SUCCESS; | 1370 | return RESULT_SUCCESS; |
| 1370 | } | 1371 | } |
| 1371 | 1372 | ||
| @@ -1524,13 +1525,13 @@ static ResultCode ClearEvent(Handle handle) { | |||
| 1524 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); | 1525 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); |
| 1525 | 1526 | ||
| 1526 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1527 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1527 | SharedPtr<Event> evt = handle_table.Get<Event>(handle); | 1528 | SharedPtr<ReadableEvent> evt = handle_table.Get<ReadableEvent>(handle); |
| 1528 | if (evt == nullptr) { | 1529 | if (evt == nullptr) { |
| 1529 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); | 1530 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); |
| 1530 | return ERR_INVALID_HANDLE; | 1531 | return ERR_INVALID_HANDLE; |
| 1531 | } | 1532 | } |
| 1532 | 1533 | ||
| 1533 | evt->Clear(); | 1534 | evt->PromoteToWritable()->Clear(); |
| 1534 | return RESULT_SUCCESS; | 1535 | return RESULT_SUCCESS; |
| 1535 | } | 1536 | } |
| 1536 | 1537 | ||
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index d595c37b0..43c91e521 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -9,9 +9,11 @@ | |||
| 9 | #include "audio_core/audio_renderer.h" | 9 | #include "audio_core/audio_renderer.h" |
| 10 | #include "core/core.h" | 10 | #include "core/core.h" |
| 11 | #include "core/hle/ipc_helpers.h" | 11 | #include "core/hle/ipc_helpers.h" |
| 12 | #include "core/hle/kernel/event.h" | 12 | #include "core/hle/kernel/kernel.h" |
| 13 | #include "core/hle/kernel/process.h" | 13 | #include "core/hle/kernel/process.h" |
| 14 | #include "core/hle/kernel/readable_event.h" | ||
| 14 | #include "core/hle/kernel/shared_memory.h" | 15 | #include "core/hle/kernel/shared_memory.h" |
| 16 | #include "core/hle/kernel/writable_event.h" | ||
| 15 | #include "core/hle/service/acc/profile_manager.h" | 17 | #include "core/hle/service/acc/profile_manager.h" |
| 16 | #include "core/hle/service/am/am.h" | 18 | #include "core/hle/service/am/am.h" |
| 17 | #include "core/hle/service/am/applet_ae.h" | 19 | #include "core/hle/service/am/applet_ae.h" |
| @@ -208,8 +210,8 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger | |||
| 208 | RegisterHandlers(functions); | 210 | RegisterHandlers(functions); |
| 209 | 211 | ||
| 210 | auto& kernel = Core::System::GetInstance().Kernel(); | 212 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 211 | launchable_event = | 213 | launchable_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 212 | Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "ISelfController:LaunchableEvent"); | 214 | kernel, Kernel::ResetType::Sticky, "ISelfController:LaunchableEvent"); |
| 213 | } | 215 | } |
| 214 | 216 | ||
| 215 | ISelfController::~ISelfController() = default; | 217 | ISelfController::~ISelfController() = default; |
| @@ -299,8 +301,7 @@ void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& | |||
| 299 | 301 | ||
| 300 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 302 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 301 | rb.Push(RESULT_SUCCESS); | 303 | rb.Push(RESULT_SUCCESS); |
| 302 | rb.PushCopyObjects(launchable_event); | 304 | rb.PushCopyObjects(event->second); |
| 303 | } | ||
| 304 | 305 | ||
| 305 | void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) { | 306 | void ISelfController::SetScreenShotImageOrientation(Kernel::HLERequestContext& ctx) { |
| 306 | LOG_WARNING(Service_AM, "(STUBBED) called"); | 307 | LOG_WARNING(Service_AM, "(STUBBED) called"); |
| @@ -348,20 +349,26 @@ void ISelfController::GetIdleTimeDetectionExtension(Kernel::HLERequestContext& c | |||
| 348 | 349 | ||
| 349 | AppletMessageQueue::AppletMessageQueue() { | 350 | AppletMessageQueue::AppletMessageQueue() { |
| 350 | auto& kernel = Core::System::GetInstance().Kernel(); | 351 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 351 | on_new_message = Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, | 352 | on_new_message = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 352 | "AMMessageQueue:OnMessageRecieved"); | 353 | kernel, Kernel::ResetType::Sticky, "AMMessageQueue:OnMessageRecieved"); |
| 353 | on_operation_mode_changed = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 354 | on_operation_mode_changed = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 354 | "AMMessageQueue:OperationModeChanged"); | 355 | kernel, Kernel::ResetType::OneShot, "AMMessageQueue:OperationModeChanged"); |
| 355 | } | 356 | } |
| 356 | 357 | ||
| 357 | AppletMessageQueue::~AppletMessageQueue() = default; | 358 | AppletMessageQueue::~AppletMessageQueue() = default; |
| 358 | 359 | ||
| 359 | const Kernel::SharedPtr<Kernel::Event>& AppletMessageQueue::GetMesssageRecieveEvent() const { | 360 | const Kernel::SharedPtr<Kernel::ReadableEvent>& AppletMessageQueue::GetMesssageRecieveEvent() |
| 360 | return on_new_message; | 361 | const { |
| 362 | const auto& event{ | ||
| 363 | Core::System::GetInstance().Kernel().FindNamedEvent("AMMessageQueue:OnMessageRecieved")}; | ||
| 364 | return event->second; | ||
| 361 | } | 365 | } |
| 362 | 366 | ||
| 363 | const Kernel::SharedPtr<Kernel::Event>& AppletMessageQueue::GetOperationModeChangedEvent() const { | 367 | const Kernel::SharedPtr<Kernel::ReadableEvent>& AppletMessageQueue::GetOperationModeChangedEvent() |
| 364 | return on_operation_mode_changed; | 368 | const { |
| 369 | const auto& event{ | ||
| 370 | Core::System::GetInstance().Kernel().FindNamedEvent("AMMessageQueue:OperationModeChanged")}; | ||
| 371 | return event->second; | ||
| 365 | } | 372 | } |
| 366 | 373 | ||
| 367 | void AppletMessageQueue::PushMessage(AppletMessage msg) { | 374 | void AppletMessageQueue::PushMessage(AppletMessage msg) { |
| @@ -426,9 +433,6 @@ ICommonStateGetter::ICommonStateGetter(std::shared_ptr<AppletMessageQueue> msg_q | |||
| 426 | // clang-format on | 433 | // clang-format on |
| 427 | 434 | ||
| 428 | RegisterHandlers(functions); | 435 | RegisterHandlers(functions); |
| 429 | |||
| 430 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 431 | event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "ICommonStateGetter:Event"); | ||
| 432 | } | 436 | } |
| 433 | 437 | ||
| 434 | ICommonStateGetter::~ICommonStateGetter() = default; | 438 | ICommonStateGetter::~ICommonStateGetter() = default; |
| @@ -564,8 +568,8 @@ private: | |||
| 564 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { | 568 | void GetAppletStateChangedEvent(Kernel::HLERequestContext& ctx) { |
| 565 | LOG_DEBUG(Service_AM, "called"); | 569 | LOG_DEBUG(Service_AM, "called"); |
| 566 | 570 | ||
| 571 | applet->GetBroker().SignalStateChanged(); | ||
| 567 | const auto event = applet->GetBroker().GetStateChangedEvent(); | 572 | const auto event = applet->GetBroker().GetStateChangedEvent(); |
| 568 | event->Signal(); | ||
| 569 | 573 | ||
| 570 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 574 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 571 | rb.Push(RESULT_SUCCESS); | 575 | rb.Push(RESULT_SUCCESS); |
diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h index 44c1bcde5..ef90b0702 100644 --- a/src/core/hle/service/am/am.h +++ b/src/core/hle/service/am/am.h | |||
| @@ -9,8 +9,9 @@ | |||
| 9 | #include "core/hle/service/service.h" | 9 | #include "core/hle/service/service.h" |
| 10 | 10 | ||
| 11 | namespace Kernel { | 11 | namespace Kernel { |
| 12 | class Event; | 12 | class ReadableEvent; |
| 13 | } | 13 | class WritableEvent; |
| 14 | } // namespace Kernel | ||
| 14 | 15 | ||
| 15 | namespace Service { | 16 | namespace Service { |
| 16 | namespace NVFlinger { | 17 | namespace NVFlinger { |
| @@ -52,8 +53,8 @@ public: | |||
| 52 | AppletMessageQueue(); | 53 | AppletMessageQueue(); |
| 53 | ~AppletMessageQueue(); | 54 | ~AppletMessageQueue(); |
| 54 | 55 | ||
| 55 | const Kernel::SharedPtr<Kernel::Event>& GetMesssageRecieveEvent() const; | 56 | const Kernel::SharedPtr<Kernel::ReadableEvent>& GetMesssageRecieveEvent() const; |
| 56 | const Kernel::SharedPtr<Kernel::Event>& GetOperationModeChangedEvent() const; | 57 | const Kernel::SharedPtr<Kernel::ReadableEvent>& GetOperationModeChangedEvent() const; |
| 57 | void PushMessage(AppletMessage msg); | 58 | void PushMessage(AppletMessage msg); |
| 58 | AppletMessage PopMessage(); | 59 | AppletMessage PopMessage(); |
| 59 | std::size_t GetMessageCount() const; | 60 | std::size_t GetMessageCount() const; |
| @@ -61,8 +62,8 @@ public: | |||
| 61 | 62 | ||
| 62 | private: | 63 | private: |
| 63 | std::queue<AppletMessage> messages; | 64 | std::queue<AppletMessage> messages; |
| 64 | Kernel::SharedPtr<Kernel::Event> on_new_message; | 65 | Kernel::SharedPtr<Kernel::WritableEvent> on_new_message; |
| 65 | Kernel::SharedPtr<Kernel::Event> on_operation_mode_changed; | 66 | Kernel::SharedPtr<Kernel::WritableEvent> on_operation_mode_changed; |
| 66 | }; | 67 | }; |
| 67 | 68 | ||
| 68 | class IWindowController final : public ServiceFramework<IWindowController> { | 69 | class IWindowController final : public ServiceFramework<IWindowController> { |
| @@ -122,7 +123,7 @@ private: | |||
| 122 | void GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx); | 123 | void GetIdleTimeDetectionExtension(Kernel::HLERequestContext& ctx); |
| 123 | 124 | ||
| 124 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; | 125 | std::shared_ptr<NVFlinger::NVFlinger> nvflinger; |
| 125 | Kernel::SharedPtr<Kernel::Event> launchable_event; | 126 | Kernel::SharedPtr<Kernel::WritableEvent> launchable_event; |
| 126 | u32 idle_time_detection_extension = 0; | 127 | u32 idle_time_detection_extension = 0; |
| 127 | }; | 128 | }; |
| 128 | 129 | ||
| @@ -151,7 +152,6 @@ private: | |||
| 151 | void GetBootMode(Kernel::HLERequestContext& ctx); | 152 | void GetBootMode(Kernel::HLERequestContext& ctx); |
| 152 | void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); | 153 | void GetDefaultDisplayResolution(Kernel::HLERequestContext& ctx); |
| 153 | 154 | ||
| 154 | Kernel::SharedPtr<Kernel::Event> event; | ||
| 155 | std::shared_ptr<AppletMessageQueue> msg_queue; | 155 | std::shared_ptr<AppletMessageQueue> msg_queue; |
| 156 | }; | 156 | }; |
| 157 | 157 | ||
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp index becbadd06..494205322 100644 --- a/src/core/hle/service/am/applets/applets.cpp +++ b/src/core/hle/service/am/applets/applets.cpp | |||
| @@ -5,8 +5,9 @@ | |||
| 5 | #include <cstring> | 5 | #include <cstring> |
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hle/kernel/event.h" | 8 | #include "core/hle/kernel/readable_event.h" |
| 9 | #include "core/hle/kernel/server_port.h" | 9 | #include "core/hle/kernel/server_port.h" |
| 10 | #include "core/hle/kernel/writable_event.h" | ||
| 10 | #include "core/hle/service/am/am.h" | 11 | #include "core/hle/service/am/am.h" |
| 11 | #include "core/hle/service/am/applets/applets.h" | 12 | #include "core/hle/service/am/applets/applets.h" |
| 12 | 13 | ||
| @@ -14,11 +15,11 @@ namespace Service::AM::Applets { | |||
| 14 | 15 | ||
| 15 | AppletDataBroker::AppletDataBroker() { | 16 | AppletDataBroker::AppletDataBroker() { |
| 16 | auto& kernel = Core::System::GetInstance().Kernel(); | 17 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 17 | state_changed_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 18 | state_changed_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 18 | "ILibraryAppletAccessor:StateChangedEvent"); | 19 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:StateChangedEvent"); |
| 19 | pop_out_data_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 20 | pop_out_data_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 20 | "ILibraryAppletAccessor:PopDataOutEvent"); | 21 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopDataOutEvent"); |
| 21 | pop_interactive_out_data_event = Kernel::Event::Create( | 22 | pop_interactive_out_data_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 22 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); | 23 | kernel, Kernel::ResetType::OneShot, "ILibraryAppletAccessor:PopInteractiveDataOutEvent"); |
| 23 | } | 24 | } |
| 24 | 25 | ||
| @@ -82,16 +83,22 @@ void AppletDataBroker::SignalStateChanged() const { | |||
| 82 | state_changed_event->Signal(); | 83 | state_changed_event->Signal(); |
| 83 | } | 84 | } |
| 84 | 85 | ||
| 85 | Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetNormalDataEvent() const { | 86 | Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetNormalDataEvent() const { |
| 86 | return pop_out_data_event; | 87 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent( |
| 88 | "ILibraryAppletAccessor:PopDataOutEvent")}; | ||
| 89 | return event->second; | ||
| 87 | } | 90 | } |
| 88 | 91 | ||
| 89 | Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetInteractiveDataEvent() const { | 92 | Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetInteractiveDataEvent() const { |
| 90 | return pop_interactive_out_data_event; | 93 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent( |
| 94 | "ILibraryAppletAccessor:PopInteractiveDataOutEvent")}; | ||
| 95 | return event->second; | ||
| 91 | } | 96 | } |
| 92 | 97 | ||
| 93 | Kernel::SharedPtr<Kernel::Event> AppletDataBroker::GetStateChangedEvent() const { | 98 | Kernel::SharedPtr<Kernel::ReadableEvent> AppletDataBroker::GetStateChangedEvent() const { |
| 94 | return state_changed_event; | 99 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent( |
| 100 | "ILibraryAppletAccessor:StateChangedEvent")}; | ||
| 101 | return event->second; | ||
| 95 | } | 102 | } |
| 96 | 103 | ||
| 97 | Applet::Applet() = default; | 104 | Applet::Applet() = default; |
diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h index f65ea119c..5cd6232cc 100644 --- a/src/core/hle/service/am/applets/applets.h +++ b/src/core/hle/service/am/applets/applets.h | |||
| @@ -12,8 +12,9 @@ | |||
| 12 | union ResultCode; | 12 | union ResultCode; |
| 13 | 13 | ||
| 14 | namespace Kernel { | 14 | namespace Kernel { |
| 15 | class Event; | 15 | class ReadableEvent; |
| 16 | } | 16 | class WritableEvent; |
| 17 | } // namespace Kernel | ||
| 17 | 18 | ||
| 18 | namespace Service::AM { | 19 | namespace Service::AM { |
| 19 | 20 | ||
| @@ -40,9 +41,9 @@ public: | |||
| 40 | 41 | ||
| 41 | void SignalStateChanged() const; | 42 | void SignalStateChanged() const; |
| 42 | 43 | ||
| 43 | Kernel::SharedPtr<Kernel::Event> GetNormalDataEvent() const; | 44 | Kernel::SharedPtr<Kernel::ReadableEvent> GetNormalDataEvent() const; |
| 44 | Kernel::SharedPtr<Kernel::Event> GetInteractiveDataEvent() const; | 45 | Kernel::SharedPtr<Kernel::ReadableEvent> GetInteractiveDataEvent() const; |
| 45 | Kernel::SharedPtr<Kernel::Event> GetStateChangedEvent() const; | 46 | Kernel::SharedPtr<Kernel::ReadableEvent> GetStateChangedEvent() const; |
| 46 | 47 | ||
| 47 | private: | 48 | private: |
| 48 | // Queues are named from applet's perspective | 49 | // Queues are named from applet's perspective |
| @@ -59,13 +60,13 @@ private: | |||
| 59 | // PopInteractiveDataToGame and PushInteractiveDataFromApplet | 60 | // PopInteractiveDataToGame and PushInteractiveDataFromApplet |
| 60 | std::queue<std::unique_ptr<IStorage>> out_interactive_channel; | 61 | std::queue<std::unique_ptr<IStorage>> out_interactive_channel; |
| 61 | 62 | ||
| 62 | Kernel::SharedPtr<Kernel::Event> state_changed_event; | 63 | Kernel::SharedPtr<Kernel::WritableEvent> state_changed_event; |
| 63 | 64 | ||
| 64 | // Signaled on PushNormalDataFromApplet | 65 | // Signaled on PushNormalDataFromApplet |
| 65 | Kernel::SharedPtr<Kernel::Event> pop_out_data_event; | 66 | Kernel::SharedPtr<Kernel::WritableEvent> pop_out_data_event; |
| 66 | 67 | ||
| 67 | // Signaled on PushInteractiveDataFromApplet | 68 | // Signaled on PushInteractiveDataFromApplet |
| 68 | Kernel::SharedPtr<Kernel::Event> pop_interactive_out_data_event; | 69 | Kernel::SharedPtr<Kernel::WritableEvent> pop_interactive_out_data_event; |
| 69 | }; | 70 | }; |
| 70 | 71 | ||
| 71 | class Applet { | 72 | class Applet { |
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index bacf19de2..a89f99dc7 100644 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp | |||
| @@ -13,8 +13,10 @@ | |||
| 13 | #include "core/file_sys/patch_manager.h" | 13 | #include "core/file_sys/patch_manager.h" |
| 14 | #include "core/file_sys/registered_cache.h" | 14 | #include "core/file_sys/registered_cache.h" |
| 15 | #include "core/hle/ipc_helpers.h" | 15 | #include "core/hle/ipc_helpers.h" |
| 16 | #include "core/hle/kernel/event.h" | 16 | #include "core/hle/kernel/kernel.h" |
| 17 | #include "core/hle/kernel/process.h" | 17 | #include "core/hle/kernel/process.h" |
| 18 | #include "core/hle/kernel/readable_event.h" | ||
| 19 | #include "core/hle/kernel/writable_event.h" | ||
| 18 | #include "core/hle/service/aoc/aoc_u.h" | 20 | #include "core/hle/service/aoc/aoc_u.h" |
| 19 | #include "core/hle/service/filesystem/filesystem.h" | 21 | #include "core/hle/service/filesystem/filesystem.h" |
| 20 | #include "core/loader/loader.h" | 22 | #include "core/loader/loader.h" |
| @@ -61,8 +63,8 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u"), add_on_content(AccumulateAOCTitleIDs | |||
| 61 | RegisterHandlers(functions); | 63 | RegisterHandlers(functions); |
| 62 | 64 | ||
| 63 | auto& kernel = Core::System::GetInstance().Kernel(); | 65 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 64 | aoc_change_event = Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, | 66 | aoc_change_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 65 | "GetAddOnContentListChanged:Event"); | 67 | kernel, Kernel::ResetType::Sticky, "GetAddOnContentListChanged:Event"); |
| 66 | } | 68 | } |
| 67 | 69 | ||
| 68 | AOC_U::~AOC_U() = default; | 70 | AOC_U::~AOC_U() = default; |
| @@ -142,9 +144,12 @@ void AOC_U::PrepareAddOnContent(Kernel::HLERequestContext& ctx) { | |||
| 142 | void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) { | 144 | void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) { |
| 143 | LOG_WARNING(Service_AOC, "(STUBBED) called"); | 145 | LOG_WARNING(Service_AOC, "(STUBBED) called"); |
| 144 | 146 | ||
| 147 | const auto& event{ | ||
| 148 | Core::System::GetInstance().Kernel().FindNamedEvent("GetAddOnContentListChanged:Event")}; | ||
| 149 | |||
| 145 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 150 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 146 | rb.Push(RESULT_SUCCESS); | 151 | rb.Push(RESULT_SUCCESS); |
| 147 | rb.PushCopyObjects(aoc_change_event); | 152 | rb.PushCopyObjects(event->second); |
| 148 | } | 153 | } |
| 149 | 154 | ||
| 150 | void InstallInterfaces(SM::ServiceManager& service_manager) { | 155 | void InstallInterfaces(SM::ServiceManager& service_manager) { |
diff --git a/src/core/hle/service/aoc/aoc_u.h b/src/core/hle/service/aoc/aoc_u.h index 68d94fdaa..f32a757aa 100644 --- a/src/core/hle/service/aoc/aoc_u.h +++ b/src/core/hle/service/aoc/aoc_u.h | |||
| @@ -6,6 +6,10 @@ | |||
| 6 | 6 | ||
| 7 | #include "core/hle/service/service.h" | 7 | #include "core/hle/service/service.h" |
| 8 | 8 | ||
| 9 | namespace Kernel { | ||
| 10 | class WritableEvent; | ||
| 11 | } | ||
| 12 | |||
| 9 | namespace Service::AOC { | 13 | namespace Service::AOC { |
| 10 | 14 | ||
| 11 | class AOC_U final : public ServiceFramework<AOC_U> { | 15 | class AOC_U final : public ServiceFramework<AOC_U> { |
| @@ -21,7 +25,7 @@ private: | |||
| 21 | void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx); | 25 | void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx); |
| 22 | 26 | ||
| 23 | std::vector<u64> add_on_content; | 27 | std::vector<u64> add_on_content; |
| 24 | Kernel::SharedPtr<Kernel::Event> aoc_change_event; | 28 | Kernel::SharedPtr<Kernel::WritableEvent> aoc_change_event; |
| 25 | }; | 29 | }; |
| 26 | 30 | ||
| 27 | /// Registers all AOC services with the specified service manager. | 31 | /// Registers all AOC services with the specified service manager. |
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp index 2ee9bc273..b5012e579 100644 --- a/src/core/hle/service/audio/audout_u.cpp +++ b/src/core/hle/service/audio/audout_u.cpp | |||
| @@ -13,8 +13,10 @@ | |||
| 13 | #include "common/swap.h" | 13 | #include "common/swap.h" |
| 14 | #include "core/core.h" | 14 | #include "core/core.h" |
| 15 | #include "core/hle/ipc_helpers.h" | 15 | #include "core/hle/ipc_helpers.h" |
| 16 | #include "core/hle/kernel/event.h" | ||
| 17 | #include "core/hle/kernel/hle_ipc.h" | 16 | #include "core/hle/kernel/hle_ipc.h" |
| 17 | #include "core/hle/kernel/kernel.h" | ||
| 18 | #include "core/hle/kernel/readable_event.h" | ||
| 19 | #include "core/hle/kernel/writable_event.h" | ||
| 18 | #include "core/hle/service/audio/audout_u.h" | 20 | #include "core/hle/service/audio/audout_u.h" |
| 19 | #include "core/memory.h" | 21 | #include "core/memory.h" |
| 20 | 22 | ||
| @@ -67,8 +69,8 @@ public: | |||
| 67 | 69 | ||
| 68 | // This is the event handle used to check if the audio buffer was released | 70 | // This is the event handle used to check if the audio buffer was released |
| 69 | auto& kernel = Core::System::GetInstance().Kernel(); | 71 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 70 | buffer_event = | 72 | buffer_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 71 | Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); | 73 | kernel, Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); |
| 72 | 74 | ||
| 73 | stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, | 75 | stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, |
| 74 | std::move(unique_name), [=]() { buffer_event->Signal(); }); | 76 | std::move(unique_name), [=]() { buffer_event->Signal(); }); |
| @@ -121,7 +123,9 @@ private: | |||
| 121 | 123 | ||
| 122 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 124 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 123 | rb.Push(RESULT_SUCCESS); | 125 | rb.Push(RESULT_SUCCESS); |
| 124 | rb.PushCopyObjects(buffer_event); | 126 | const auto& event{ |
| 127 | Core::System::GetInstance().Kernel().FindNamedEvent("IAudioOutBufferReleased")}; | ||
| 128 | rb.PushCopyObjects(event->second); | ||
| 125 | } | 129 | } |
| 126 | 130 | ||
| 127 | void AppendAudioOutBufferImpl(Kernel::HLERequestContext& ctx) { | 131 | void AppendAudioOutBufferImpl(Kernel::HLERequestContext& ctx) { |
| @@ -188,7 +192,7 @@ private: | |||
| 188 | AudoutParams audio_params{}; | 192 | AudoutParams audio_params{}; |
| 189 | 193 | ||
| 190 | /// This is the evend handle used to check if the audio buffer was released | 194 | /// This is the evend handle used to check if the audio buffer was released |
| 191 | Kernel::SharedPtr<Kernel::Event> buffer_event; | 195 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event; |
| 192 | }; | 196 | }; |
| 193 | 197 | ||
| 194 | void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { | 198 | void AudOutU::ListAudioOutsImpl(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index 1c418a9bb..9b7f7b201 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -12,8 +12,10 @@ | |||
| 12 | #include "common/logging/log.h" | 12 | #include "common/logging/log.h" |
| 13 | #include "core/core.h" | 13 | #include "core/core.h" |
| 14 | #include "core/hle/ipc_helpers.h" | 14 | #include "core/hle/ipc_helpers.h" |
| 15 | #include "core/hle/kernel/event.h" | ||
| 16 | #include "core/hle/kernel/hle_ipc.h" | 15 | #include "core/hle/kernel/hle_ipc.h" |
| 16 | #include "core/hle/kernel/kernel.h" | ||
| 17 | #include "core/hle/kernel/readable_event.h" | ||
| 18 | #include "core/hle/kernel/writable_event.h" | ||
| 17 | #include "core/hle/service/audio/audren_u.h" | 19 | #include "core/hle/service/audio/audren_u.h" |
| 18 | 20 | ||
| 19 | namespace Service::Audio { | 21 | namespace Service::Audio { |
| @@ -41,8 +43,8 @@ public: | |||
| 41 | RegisterHandlers(functions); | 43 | RegisterHandlers(functions); |
| 42 | 44 | ||
| 43 | auto& kernel = Core::System::GetInstance().Kernel(); | 45 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 44 | system_event = | 46 | system_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 45 | Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "IAudioRenderer:SystemEvent"); | 47 | kernel, Kernel::ResetType::Sticky, "IAudioRenderer:SystemEvent"); |
| 46 | renderer = std::make_unique<AudioCore::AudioRenderer>(audren_params, system_event); | 48 | renderer = std::make_unique<AudioCore::AudioRenderer>(audren_params, system_event); |
| 47 | } | 49 | } |
| 48 | 50 | ||
| @@ -112,7 +114,9 @@ private: | |||
| 112 | 114 | ||
| 113 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 115 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 114 | rb.Push(RESULT_SUCCESS); | 116 | rb.Push(RESULT_SUCCESS); |
| 115 | rb.PushCopyObjects(system_event); | 117 | const auto& event{ |
| 118 | Core::System::GetInstance().Kernel().FindNamedEvent("IAudioRenderer:SystemEvent")}; | ||
| 119 | rb.PushCopyObjects(event->second); | ||
| 116 | } | 120 | } |
| 117 | 121 | ||
| 118 | void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { | 122 | void SetRenderingTimeLimit(Kernel::HLERequestContext& ctx) { |
| @@ -135,7 +139,7 @@ private: | |||
| 135 | rb.Push(rendering_time_limit_percent); | 139 | rb.Push(rendering_time_limit_percent); |
| 136 | } | 140 | } |
| 137 | 141 | ||
| 138 | Kernel::SharedPtr<Kernel::Event> system_event; | 142 | Kernel::SharedPtr<Kernel::WritableEvent> system_event; |
| 139 | std::unique_ptr<AudioCore::AudioRenderer> renderer; | 143 | std::unique_ptr<AudioCore::AudioRenderer> renderer; |
| 140 | u32 rendering_time_limit_percent = 100; | 144 | u32 rendering_time_limit_percent = 100; |
| 141 | }; | 145 | }; |
| @@ -162,8 +166,8 @@ public: | |||
| 162 | RegisterHandlers(functions); | 166 | RegisterHandlers(functions); |
| 163 | 167 | ||
| 164 | auto& kernel = Core::System::GetInstance().Kernel(); | 168 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 165 | buffer_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 169 | buffer_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 166 | "IAudioOutBufferReleasedEvent"); | 170 | kernel, Kernel::ResetType::OneShot, "IAudioOutBufferReleasedEvent"); |
| 167 | } | 171 | } |
| 168 | 172 | ||
| 169 | private: | 173 | private: |
| @@ -211,7 +215,9 @@ private: | |||
| 211 | 215 | ||
| 212 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 216 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 213 | rb.Push(RESULT_SUCCESS); | 217 | rb.Push(RESULT_SUCCESS); |
| 214 | rb.PushCopyObjects(buffer_event); | 218 | const auto& event{ |
| 219 | Core::System::GetInstance().Kernel().FindNamedEvent("IAudioOutBufferReleasedEvent")}; | ||
| 220 | rb.PushCopyObjects(event->second); | ||
| 215 | } | 221 | } |
| 216 | 222 | ||
| 217 | void GetActiveChannelCount(Kernel::HLERequestContext& ctx) { | 223 | void GetActiveChannelCount(Kernel::HLERequestContext& ctx) { |
| @@ -222,7 +228,7 @@ private: | |||
| 222 | rb.Push<u32>(1); | 228 | rb.Push<u32>(1); |
| 223 | } | 229 | } |
| 224 | 230 | ||
| 225 | Kernel::SharedPtr<Kernel::Event> buffer_event; | 231 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event; |
| 226 | 232 | ||
| 227 | }; // namespace Audio | 233 | }; // namespace Audio |
| 228 | 234 | ||
diff --git a/src/core/hle/service/btdrv/btdrv.cpp b/src/core/hle/service/btdrv/btdrv.cpp index 2eadcdd05..04c78e81a 100644 --- a/src/core/hle/service/btdrv/btdrv.cpp +++ b/src/core/hle/service/btdrv/btdrv.cpp | |||
| @@ -4,8 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | #include "common/logging/log.h" | 5 | #include "common/logging/log.h" |
| 6 | #include "core/hle/ipc_helpers.h" | 6 | #include "core/hle/ipc_helpers.h" |
| 7 | #include "core/hle/kernel/event.h" | ||
| 8 | #include "core/hle/kernel/hle_ipc.h" | 7 | #include "core/hle/kernel/hle_ipc.h" |
| 8 | #include "core/hle/kernel/kernel.h" | ||
| 9 | #include "core/hle/kernel/readable_event.h" | ||
| 10 | #include "core/hle/kernel/writable_event.h" | ||
| 9 | #include "core/hle/service/btdrv/btdrv.h" | 11 | #include "core/hle/service/btdrv/btdrv.h" |
| 10 | #include "core/hle/service/service.h" | 12 | #include "core/hle/service/service.h" |
| 11 | #include "core/hle/service/sm/sm.h" | 13 | #include "core/hle/service/sm/sm.h" |
| @@ -30,20 +32,22 @@ public: | |||
| 30 | }; | 32 | }; |
| 31 | // clang-format on | 33 | // clang-format on |
| 32 | RegisterHandlers(functions); | 34 | RegisterHandlers(functions); |
| 35 | |||
| 36 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 37 | register_event = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 38 | kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent"); | ||
| 33 | } | 39 | } |
| 34 | 40 | ||
| 35 | private: | 41 | private: |
| 36 | void RegisterEvent(Kernel::HLERequestContext& ctx) { | 42 | void RegisterEvent(Kernel::HLERequestContext& ctx) { |
| 37 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | 43 | LOG_WARNING(Service_BTM, "(STUBBED) called"); |
| 38 | 44 | ||
| 39 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 40 | register_event = | ||
| 41 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "BT:RegisterEvent"); | ||
| 42 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 45 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 43 | rb.Push(RESULT_SUCCESS); | 46 | rb.Push(RESULT_SUCCESS); |
| 44 | rb.PushCopyObjects(register_event); | 47 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("BT:RegisterEvent")}; |
| 48 | rb.PushCopyObjects(event->second); | ||
| 45 | } | 49 | } |
| 46 | Kernel::SharedPtr<Kernel::Event> register_event; | 50 | Kernel::SharedPtr<Kernel::WritableEvent> register_event; |
| 47 | }; | 51 | }; |
| 48 | 52 | ||
| 49 | class BtDrv final : public ServiceFramework<BtDrv> { | 53 | class BtDrv final : public ServiceFramework<BtDrv> { |
diff --git a/src/core/hle/service/btm/btm.cpp b/src/core/hle/service/btm/btm.cpp index 463a79351..3ee298161 100644 --- a/src/core/hle/service/btm/btm.cpp +++ b/src/core/hle/service/btm/btm.cpp | |||
| @@ -6,8 +6,10 @@ | |||
| 6 | 6 | ||
| 7 | #include "common/logging/log.h" | 7 | #include "common/logging/log.h" |
| 8 | #include "core/hle/ipc_helpers.h" | 8 | #include "core/hle/ipc_helpers.h" |
| 9 | #include "core/hle/kernel/event.h" | ||
| 10 | #include "core/hle/kernel/hle_ipc.h" | 9 | #include "core/hle/kernel/hle_ipc.h" |
| 10 | #include "core/hle/kernel/kernel.h" | ||
| 11 | #include "core/hle/kernel/readable_event.h" | ||
| 12 | #include "core/hle/kernel/writable_event.h" | ||
| 11 | #include "core/hle/service/btm/btm.h" | 13 | #include "core/hle/service/btm/btm.h" |
| 12 | #include "core/hle/service/service.h" | 14 | #include "core/hle/service/service.h" |
| 13 | 15 | ||
| @@ -53,53 +55,64 @@ public: | |||
| 53 | }; | 55 | }; |
| 54 | // clang-format on | 56 | // clang-format on |
| 55 | RegisterHandlers(functions); | 57 | RegisterHandlers(functions); |
| 58 | |||
| 59 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 60 | scan_event = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 61 | kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent"); | ||
| 62 | connection_event = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 63 | kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConnectionEvent"); | ||
| 64 | service_discovery = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 65 | kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery"); | ||
| 66 | config_event = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 67 | kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent"); | ||
| 56 | } | 68 | } |
| 57 | 69 | ||
| 58 | private: | 70 | private: |
| 59 | void GetScanEvent(Kernel::HLERequestContext& ctx) { | 71 | void GetScanEvent(Kernel::HLERequestContext& ctx) { |
| 60 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | 72 | LOG_WARNING(Service_BTM, "(STUBBED) called"); |
| 61 | 73 | ||
| 62 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 63 | scan_event = | ||
| 64 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ScanEvent"); | ||
| 65 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 74 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 66 | rb.Push(RESULT_SUCCESS); | 75 | rb.Push(RESULT_SUCCESS); |
| 67 | rb.PushCopyObjects(scan_event); | 76 | |
| 77 | const auto& event{ | ||
| 78 | Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ScanEvent")}; | ||
| 79 | rb.PushCopyObjects(event->second); | ||
| 68 | } | 80 | } |
| 69 | void GetConnectionEvent(Kernel::HLERequestContext& ctx) { | 81 | void GetConnectionEvent(Kernel::HLERequestContext& ctx) { |
| 70 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | 82 | LOG_WARNING(Service_BTM, "(STUBBED) called"); |
| 71 | 83 | ||
| 72 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 73 | connection_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | ||
| 74 | "IBtmUserCore:ConnectionEvent"); | ||
| 75 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 84 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 76 | rb.Push(RESULT_SUCCESS); | 85 | rb.Push(RESULT_SUCCESS); |
| 77 | rb.PushCopyObjects(connection_event); | 86 | |
| 87 | const auto& event{ | ||
| 88 | Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ConnectionEvent")}; | ||
| 89 | rb.PushCopyObjects(event->second); | ||
| 78 | } | 90 | } |
| 79 | void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) { | 91 | void GetDiscoveryEvent(Kernel::HLERequestContext& ctx) { |
| 80 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | 92 | LOG_WARNING(Service_BTM, "(STUBBED) called"); |
| 81 | 93 | ||
| 82 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 83 | service_discovery = | ||
| 84 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:Discovery"); | ||
| 85 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 94 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 86 | rb.Push(RESULT_SUCCESS); | 95 | rb.Push(RESULT_SUCCESS); |
| 87 | rb.PushCopyObjects(service_discovery); | 96 | |
| 97 | const auto& event{ | ||
| 98 | Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:Discovery")}; | ||
| 99 | rb.PushCopyObjects(event->second); | ||
| 88 | } | 100 | } |
| 89 | void GetConfigEvent(Kernel::HLERequestContext& ctx) { | 101 | void GetConfigEvent(Kernel::HLERequestContext& ctx) { |
| 90 | LOG_WARNING(Service_BTM, "(STUBBED) called"); | 102 | LOG_WARNING(Service_BTM, "(STUBBED) called"); |
| 91 | 103 | ||
| 92 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 93 | config_event = | ||
| 94 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IBtmUserCore:ConfigEvent"); | ||
| 95 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 104 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 96 | rb.Push(RESULT_SUCCESS); | 105 | rb.Push(RESULT_SUCCESS); |
| 97 | rb.PushCopyObjects(config_event); | 106 | |
| 107 | const auto& event{ | ||
| 108 | Core::System::GetInstance().Kernel().FindNamedEvent("IBtmUserCore:ConfigEvent")}; | ||
| 109 | rb.PushCopyObjects(event->second); | ||
| 98 | } | 110 | } |
| 99 | Kernel::SharedPtr<Kernel::Event> scan_event; | 111 | |
| 100 | Kernel::SharedPtr<Kernel::Event> connection_event; | 112 | Kernel::SharedPtr<Kernel::WritableEvent> scan_event; |
| 101 | Kernel::SharedPtr<Kernel::Event> service_discovery; | 113 | Kernel::SharedPtr<Kernel::WritableEvent> connection_event; |
| 102 | Kernel::SharedPtr<Kernel::Event> config_event; | 114 | Kernel::SharedPtr<Kernel::WritableEvent> service_discovery; |
| 115 | Kernel::SharedPtr<Kernel::WritableEvent> config_event; | ||
| 103 | }; | 116 | }; |
| 104 | 117 | ||
| 105 | class BTM_USR final : public ServiceFramework<BTM_USR> { | 118 | class BTM_USR final : public ServiceFramework<BTM_USR> { |
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 22e87a50a..df39a6dc4 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -12,7 +12,9 @@ | |||
| 12 | #include "core/core.h" | 12 | #include "core/core.h" |
| 13 | #include "core/core_timing.h" | 13 | #include "core/core_timing.h" |
| 14 | #include "core/frontend/input.h" | 14 | #include "core/frontend/input.h" |
| 15 | #include "core/hle/kernel/event.h" | 15 | #include "core/hle/kernel/kernel.h" |
| 16 | #include "core/hle/kernel/readable_event.h" | ||
| 17 | #include "core/hle/kernel/writable_event.h" | ||
| 16 | #include "core/hle/service/hid/controllers/npad.h" | 18 | #include "core/hle/service/hid/controllers/npad.h" |
| 17 | #include "core/settings.h" | 19 | #include "core/settings.h" |
| 18 | 20 | ||
| @@ -167,8 +169,8 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | |||
| 167 | 169 | ||
| 168 | void Controller_NPad::OnInit() { | 170 | void Controller_NPad::OnInit() { |
| 169 | auto& kernel = Core::System::GetInstance().Kernel(); | 171 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 170 | styleset_changed_event = | 172 | styleset_changed_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 171 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "npad:NpadStyleSetChanged"); | 173 | kernel, Kernel::ResetType::OneShot, "npad:NpadStyleSetChanged"); |
| 172 | 174 | ||
| 173 | if (!IsControllerActivated()) { | 175 | if (!IsControllerActivated()) { |
| 174 | return; | 176 | return; |
| @@ -538,11 +540,13 @@ void Controller_NPad::VibrateController(const std::vector<u32>& controller_ids, | |||
| 538 | last_processed_vibration = vibrations.back(); | 540 | last_processed_vibration = vibrations.back(); |
| 539 | } | 541 | } |
| 540 | 542 | ||
| 541 | Kernel::SharedPtr<Kernel::Event> Controller_NPad::GetStyleSetChangedEvent() const { | 543 | Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEvent() const { |
| 542 | // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should | 544 | // TODO(ogniK): Figure out the best time to signal this event. This event seems that it should |
| 543 | // be signalled at least once, and signaled after a new controller is connected? | 545 | // be signalled at least once, and signaled after a new controller is connected? |
| 544 | styleset_changed_event->Signal(); | 546 | styleset_changed_event->Signal(); |
| 545 | return styleset_changed_event; | 547 | const auto& event{ |
| 548 | Core::System::GetInstance().Kernel().FindNamedEvent("npad:NpadStyleSetChanged")}; | ||
| 549 | return event->second; | ||
| 546 | } | 550 | } |
| 547 | 551 | ||
| 548 | Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { | 552 | Controller_NPad::Vibration Controller_NPad::GetLastVibration() const { |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index abff6544d..c960d0f57 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -8,10 +8,15 @@ | |||
| 8 | #include "common/bit_field.h" | 8 | #include "common/bit_field.h" |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "core/frontend/input.h" | 10 | #include "core/frontend/input.h" |
| 11 | #include "core/hle/kernel/event.h" | 11 | #include "core/hle/kernel/object.h" |
| 12 | #include "core/hle/service/hid/controllers/controller_base.h" | 12 | #include "core/hle/service/hid/controllers/controller_base.h" |
| 13 | #include "core/settings.h" | 13 | #include "core/settings.h" |
| 14 | 14 | ||
| 15 | namespace Kernel { | ||
| 16 | class ReadableEvent; | ||
| 17 | class WritableEvent; | ||
| 18 | } // namespace Kernel | ||
| 19 | |||
| 15 | namespace Service::HID { | 20 | namespace Service::HID { |
| 16 | 21 | ||
| 17 | constexpr u32 NPAD_HANDHELD = 32; | 22 | constexpr u32 NPAD_HANDHELD = 32; |
| @@ -108,7 +113,7 @@ public: | |||
| 108 | void VibrateController(const std::vector<u32>& controller_ids, | 113 | void VibrateController(const std::vector<u32>& controller_ids, |
| 109 | const std::vector<Vibration>& vibrations); | 114 | const std::vector<Vibration>& vibrations); |
| 110 | 115 | ||
| 111 | Kernel::SharedPtr<Kernel::Event> GetStyleSetChangedEvent() const; | 116 | Kernel::SharedPtr<Kernel::ReadableEvent> GetStyleSetChangedEvent() const; |
| 112 | Vibration GetLastVibration() const; | 117 | Vibration GetLastVibration() const; |
| 113 | 118 | ||
| 114 | void AddNewController(NPadControllerType controller); | 119 | void AddNewController(NPadControllerType controller); |
| @@ -303,7 +308,7 @@ private: | |||
| 303 | sticks; | 308 | sticks; |
| 304 | std::vector<u32> supported_npad_id_types{}; | 309 | std::vector<u32> supported_npad_id_types{}; |
| 305 | NpadHoldType hold_type{NpadHoldType::Vertical}; | 310 | NpadHoldType hold_type{NpadHoldType::Vertical}; |
| 306 | Kernel::SharedPtr<Kernel::Event> styleset_changed_event; | 311 | Kernel::SharedPtr<Kernel::WritableEvent> styleset_changed_event; |
| 307 | Vibration last_processed_vibration{}; | 312 | Vibration last_processed_vibration{}; |
| 308 | std::array<ControllerHolder, 10> connected_controllers{}; | 313 | std::array<ControllerHolder, 10> connected_controllers{}; |
| 309 | bool can_controllers_vibrate{true}; | 314 | bool can_controllers_vibrate{true}; |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 46496e9bb..2ec38c726 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -13,8 +13,9 @@ | |||
| 13 | #include "core/hle/ipc_helpers.h" | 13 | #include "core/hle/ipc_helpers.h" |
| 14 | #include "core/hle/kernel/client_port.h" | 14 | #include "core/hle/kernel/client_port.h" |
| 15 | #include "core/hle/kernel/client_session.h" | 15 | #include "core/hle/kernel/client_session.h" |
| 16 | #include "core/hle/kernel/event.h" | 16 | #include "core/hle/kernel/readable_event.h" |
| 17 | #include "core/hle/kernel/shared_memory.h" | 17 | #include "core/hle/kernel/shared_memory.h" |
| 18 | #include "core/hle/kernel/writable_event.h" | ||
| 18 | #include "core/hle/service/hid/hid.h" | 19 | #include "core/hle/service/hid/hid.h" |
| 19 | #include "core/hle/service/hid/irs.h" | 20 | #include "core/hle/service/hid/irs.h" |
| 20 | #include "core/hle/service/hid/xcd.h" | 21 | #include "core/hle/service/hid/xcd.h" |
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index ff9170c24..75c605364 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp | |||
| @@ -7,7 +7,9 @@ | |||
| 7 | #include "common/logging/log.h" | 7 | #include "common/logging/log.h" |
| 8 | #include "core/core.h" | 8 | #include "core/core.h" |
| 9 | #include "core/hle/ipc_helpers.h" | 9 | #include "core/hle/ipc_helpers.h" |
| 10 | #include "core/hle/kernel/event.h" | 10 | #include "core/hle/kernel/kernel.h" |
| 11 | #include "core/hle/kernel/readable_event.h" | ||
| 12 | #include "core/hle/kernel/writable_event.h" | ||
| 11 | #include "core/hle/lock.h" | 13 | #include "core/hle/lock.h" |
| 12 | #include "core/hle/service/hid/hid.h" | 14 | #include "core/hle/service/hid/hid.h" |
| 13 | #include "core/hle/service/nfp/nfp.h" | 15 | #include "core/hle/service/nfp/nfp.h" |
| @@ -23,8 +25,8 @@ constexpr ResultCode ERR_TAG_FAILED(ErrorModule::NFP, | |||
| 23 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) | 25 | Module::Interface::Interface(std::shared_ptr<Module> module, const char* name) |
| 24 | : ServiceFramework(name), module(std::move(module)) { | 26 | : ServiceFramework(name), module(std::move(module)) { |
| 25 | auto& kernel = Core::System::GetInstance().Kernel(); | 27 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 26 | nfc_tag_load = | 28 | nfc_tag_load = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 27 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IUser:NFCTagDetected"); | 29 | kernel, Kernel::ResetType::OneShot, "IUser:NFCTagDetected"); |
| 28 | } | 30 | } |
| 29 | 31 | ||
| 30 | Module::Interface::~Interface() = default; | 32 | Module::Interface::~Interface() = default; |
| @@ -63,10 +65,10 @@ public: | |||
| 63 | RegisterHandlers(functions); | 65 | RegisterHandlers(functions); |
| 64 | 66 | ||
| 65 | auto& kernel = Core::System::GetInstance().Kernel(); | 67 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 66 | deactivate_event = | 68 | deactivate_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 67 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IUser:DeactivateEvent"); | 69 | kernel, Kernel::ResetType::OneShot, "IUser:DeactivateEvent"); |
| 68 | availability_change_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 70 | availability_change_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 69 | "IUser:AvailabilityChangeEvent"); | 71 | kernel, Kernel::ResetType::OneShot, "IUser:AvailabilityChangeEvent"); |
| 70 | } | 72 | } |
| 71 | 73 | ||
| 72 | private: | 74 | private: |
| @@ -164,7 +166,10 @@ private: | |||
| 164 | 166 | ||
| 165 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 167 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 166 | rb.Push(RESULT_SUCCESS); | 168 | rb.Push(RESULT_SUCCESS); |
| 167 | rb.PushCopyObjects(deactivate_event); | 169 | |
| 170 | const auto& event{ | ||
| 171 | Core::System::GetInstance().Kernel().FindNamedEvent("IUser:DeactivateEvent")}; | ||
| 172 | rb.PushCopyObjects(event->second); | ||
| 168 | } | 173 | } |
| 169 | 174 | ||
| 170 | void StopDetection(Kernel::HLERequestContext& ctx) { | 175 | void StopDetection(Kernel::HLERequestContext& ctx) { |
| @@ -264,7 +269,9 @@ private: | |||
| 264 | 269 | ||
| 265 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 270 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 266 | rb.Push(RESULT_SUCCESS); | 271 | rb.Push(RESULT_SUCCESS); |
| 267 | rb.PushCopyObjects(availability_change_event); | 272 | const auto& event{ |
| 273 | Core::System::GetInstance().Kernel().FindNamedEvent("IUser:AvailabilityChangeEvent")}; | ||
| 274 | rb.PushCopyObjects(event->second); | ||
| 268 | } | 275 | } |
| 269 | 276 | ||
| 270 | void GetRegisterInfo(Kernel::HLERequestContext& ctx) { | 277 | void GetRegisterInfo(Kernel::HLERequestContext& ctx) { |
| @@ -319,8 +326,8 @@ private: | |||
| 319 | const u32 npad_id{0}; // Player 1 controller | 326 | const u32 npad_id{0}; // Player 1 controller |
| 320 | State state{State::NonInitialized}; | 327 | State state{State::NonInitialized}; |
| 321 | DeviceState device_state{DeviceState::Initialized}; | 328 | DeviceState device_state{DeviceState::Initialized}; |
| 322 | Kernel::SharedPtr<Kernel::Event> deactivate_event; | 329 | Kernel::SharedPtr<Kernel::WritableEvent> deactivate_event; |
| 323 | Kernel::SharedPtr<Kernel::Event> availability_change_event; | 330 | Kernel::SharedPtr<Kernel::WritableEvent> availability_change_event; |
| 324 | const Module::Interface& nfp_interface; | 331 | const Module::Interface& nfp_interface; |
| 325 | }; | 332 | }; |
| 326 | 333 | ||
| @@ -342,8 +349,10 @@ bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { | |||
| 342 | nfc_tag_load->Signal(); | 349 | nfc_tag_load->Signal(); |
| 343 | return true; | 350 | return true; |
| 344 | } | 351 | } |
| 345 | const Kernel::SharedPtr<Kernel::Event>& Module::Interface::GetNFCEvent() const { | 352 | |
| 346 | return nfc_tag_load; | 353 | const Kernel::SharedPtr<Kernel::ReadableEvent>& Module::Interface::GetNFCEvent() const { |
| 354 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("IUser:NFCTagDetected")}; | ||
| 355 | return event->second; | ||
| 347 | } | 356 | } |
| 348 | const Module::Interface::AmiiboFile& Module::Interface::GetAmiiboBuffer() const { | 357 | const Module::Interface::AmiiboFile& Module::Interface::GetAmiiboBuffer() const { |
| 349 | return amiibo; | 358 | return amiibo; |
diff --git a/src/core/hle/service/nfp/nfp.h b/src/core/hle/service/nfp/nfp.h index 5c0ae8a54..0ab1ca997 100644 --- a/src/core/hle/service/nfp/nfp.h +++ b/src/core/hle/service/nfp/nfp.h | |||
| @@ -6,9 +6,13 @@ | |||
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <vector> | 8 | #include <vector> |
| 9 | #include "core/hle/kernel/event.h" | ||
| 10 | #include "core/hle/service/service.h" | 9 | #include "core/hle/service/service.h" |
| 11 | 10 | ||
| 11 | namespace Kernel { | ||
| 12 | class ReadableEvent; | ||
| 13 | class WritableEvent; | ||
| 14 | } // namespace Kernel | ||
| 15 | |||
| 12 | namespace Service::NFP { | 16 | namespace Service::NFP { |
| 13 | 17 | ||
| 14 | class Module final { | 18 | class Module final { |
| @@ -33,11 +37,11 @@ public: | |||
| 33 | 37 | ||
| 34 | void CreateUserInterface(Kernel::HLERequestContext& ctx); | 38 | void CreateUserInterface(Kernel::HLERequestContext& ctx); |
| 35 | bool LoadAmiibo(const std::vector<u8>& buffer); | 39 | bool LoadAmiibo(const std::vector<u8>& buffer); |
| 36 | const Kernel::SharedPtr<Kernel::Event>& GetNFCEvent() const; | 40 | const Kernel::SharedPtr<Kernel::ReadableEvent>& GetNFCEvent() const; |
| 37 | const AmiiboFile& GetAmiiboBuffer() const; | 41 | const AmiiboFile& GetAmiiboBuffer() const; |
| 38 | 42 | ||
| 39 | private: | 43 | private: |
| 40 | Kernel::SharedPtr<Kernel::Event> nfc_tag_load{}; | 44 | Kernel::SharedPtr<Kernel::WritableEvent> nfc_tag_load{}; |
| 41 | AmiiboFile amiibo{}; | 45 | AmiiboFile amiibo{}; |
| 42 | 46 | ||
| 43 | protected: | 47 | protected: |
diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index dee391201..80a66bce3 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp | |||
| @@ -4,7 +4,9 @@ | |||
| 4 | 4 | ||
| 5 | #include "core/core.h" | 5 | #include "core/core.h" |
| 6 | #include "core/hle/ipc_helpers.h" | 6 | #include "core/hle/ipc_helpers.h" |
| 7 | #include "core/hle/kernel/event.h" | 7 | #include "core/hle/kernel/kernel.h" |
| 8 | #include "core/hle/kernel/readable_event.h" | ||
| 9 | #include "core/hle/kernel/writable_event.h" | ||
| 8 | #include "core/hle/service/nifm/nifm.h" | 10 | #include "core/hle/service/nifm/nifm.h" |
| 9 | #include "core/hle/service/service.h" | 11 | #include "core/hle/service/service.h" |
| 10 | 12 | ||
| @@ -56,8 +58,10 @@ public: | |||
| 56 | RegisterHandlers(functions); | 58 | RegisterHandlers(functions); |
| 57 | 59 | ||
| 58 | auto& kernel = Core::System::GetInstance().Kernel(); | 60 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 59 | event1 = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IRequest:Event1"); | 61 | event1 = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 60 | event2 = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "IRequest:Event2"); | 62 | kernel, Kernel::ResetType::OneShot, "IRequest:Event1"); |
| 63 | event2 = Kernel::WritableEvent::CreateRegisteredEventPair( | ||
| 64 | kernel, Kernel::ResetType::OneShot, "IRequest:Event2"); | ||
| 61 | } | 65 | } |
| 62 | 66 | ||
| 63 | private: | 67 | private: |
| @@ -88,7 +92,11 @@ private: | |||
| 88 | 92 | ||
| 89 | IPC::ResponseBuilder rb{ctx, 2, 2}; | 93 | IPC::ResponseBuilder rb{ctx, 2, 2}; |
| 90 | rb.Push(RESULT_SUCCESS); | 94 | rb.Push(RESULT_SUCCESS); |
| 91 | rb.PushCopyObjects(event1, event2); | 95 | |
| 96 | const auto& event1{Core::System::GetInstance().Kernel().FindNamedEvent("IRequest:Event1")}; | ||
| 97 | const auto& event2{Core::System::GetInstance().Kernel().FindNamedEvent("IRequest:Event2")}; | ||
| 98 | |||
| 99 | rb.PushCopyObjects(event1->second, event2->second); | ||
| 92 | } | 100 | } |
| 93 | 101 | ||
| 94 | void Cancel(Kernel::HLERequestContext& ctx) { | 102 | void Cancel(Kernel::HLERequestContext& ctx) { |
| @@ -105,7 +113,7 @@ private: | |||
| 105 | rb.Push(RESULT_SUCCESS); | 113 | rb.Push(RESULT_SUCCESS); |
| 106 | } | 114 | } |
| 107 | 115 | ||
| 108 | Kernel::SharedPtr<Kernel::Event> event1, event2; | 116 | Kernel::SharedPtr<Kernel::WritableEvent> event1, event2; |
| 109 | }; | 117 | }; |
| 110 | 118 | ||
| 111 | class INetworkProfile final : public ServiceFramework<INetworkProfile> { | 119 | class INetworkProfile final : public ServiceFramework<INetworkProfile> { |
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index 1bbccd444..d181a781c 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp | |||
| @@ -6,7 +6,9 @@ | |||
| 6 | #include <ctime> | 6 | #include <ctime> |
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hle/ipc_helpers.h" | 8 | #include "core/hle/ipc_helpers.h" |
| 9 | #include "core/hle/kernel/event.h" | 9 | #include "core/hle/kernel/kernel.h" |
| 10 | #include "core/hle/kernel/readable_event.h" | ||
| 11 | #include "core/hle/kernel/writable_event.h" | ||
| 10 | #include "core/hle/service/nim/nim.h" | 12 | #include "core/hle/service/nim/nim.h" |
| 11 | #include "core/hle/service/service.h" | 13 | #include "core/hle/service/service.h" |
| 12 | #include "core/hle/service/sm/sm.h" | 14 | #include "core/hle/service/sm/sm.h" |
| @@ -138,13 +140,13 @@ public: | |||
| 138 | RegisterHandlers(functions); | 140 | RegisterHandlers(functions); |
| 139 | 141 | ||
| 140 | auto& kernel = Core::System::GetInstance().Kernel(); | 142 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 141 | finished_event = | 143 | finished_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 142 | Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, | 144 | kernel, Kernel::ResetType::OneShot, |
| 143 | "IEnsureNetworkClockAvailabilityService:FinishEvent"); | 145 | "IEnsureNetworkClockAvailabilityService:FinishEvent"); |
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | private: | 148 | private: |
| 147 | Kernel::SharedPtr<Kernel::Event> finished_event; | 149 | Kernel::SharedPtr<Kernel::WritableEvent> finished_event; |
| 148 | 150 | ||
| 149 | void StartTask(Kernel::HLERequestContext& ctx) { | 151 | void StartTask(Kernel::HLERequestContext& ctx) { |
| 150 | // No need to connect to the internet, just finish the task straight away. | 152 | // No need to connect to the internet, just finish the task straight away. |
| @@ -160,7 +162,9 @@ private: | |||
| 160 | 162 | ||
| 161 | IPC::ResponseBuilder rb{ctx, 2, 1}; | 163 | IPC::ResponseBuilder rb{ctx, 2, 1}; |
| 162 | rb.Push(RESULT_SUCCESS); | 164 | rb.Push(RESULT_SUCCESS); |
| 163 | rb.PushCopyObjects(finished_event); | 165 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent( |
| 166 | "IEnsureNetworkClockAvailabilityService:FinishEvent")}; | ||
| 167 | rb.PushCopyObjects(event->second); | ||
| 164 | } | 168 | } |
| 165 | 169 | ||
| 166 | void GetResult(Kernel::HLERequestContext& ctx) { | 170 | void GetResult(Kernel::HLERequestContext& ctx) { |
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp index ff76e0524..3d89b4020 100644 --- a/src/core/hle/service/nvdrv/interface.cpp +++ b/src/core/hle/service/nvdrv/interface.cpp | |||
| @@ -6,7 +6,9 @@ | |||
| 6 | #include "common/logging/log.h" | 6 | #include "common/logging/log.h" |
| 7 | #include "core/core.h" | 7 | #include "core/core.h" |
| 8 | #include "core/hle/ipc_helpers.h" | 8 | #include "core/hle/ipc_helpers.h" |
| 9 | #include "core/hle/kernel/event.h" | 9 | #include "core/hle/kernel/kernel.h" |
| 10 | #include "core/hle/kernel/readable_event.h" | ||
| 11 | #include "core/hle/kernel/writable_event.h" | ||
| 10 | #include "core/hle/service/nvdrv/interface.h" | 12 | #include "core/hle/service/nvdrv/interface.h" |
| 11 | #include "core/hle/service/nvdrv/nvdrv.h" | 13 | #include "core/hle/service/nvdrv/nvdrv.h" |
| 12 | 14 | ||
| @@ -69,7 +71,9 @@ void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) { | |||
| 69 | 71 | ||
| 70 | IPC::ResponseBuilder rb{ctx, 3, 1}; | 72 | IPC::ResponseBuilder rb{ctx, 3, 1}; |
| 71 | rb.Push(RESULT_SUCCESS); | 73 | rb.Push(RESULT_SUCCESS); |
| 72 | rb.PushCopyObjects(query_event); | 74 | |
| 75 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent("NVDRV::query_event")}; | ||
| 76 | rb.PushCopyObjects(event->second); | ||
| 73 | rb.Push<u32>(0); | 77 | rb.Push<u32>(0); |
| 74 | } | 78 | } |
| 75 | 79 | ||
| @@ -127,7 +131,8 @@ NVDRV::NVDRV(std::shared_ptr<Module> nvdrv, const char* name) | |||
| 127 | RegisterHandlers(functions); | 131 | RegisterHandlers(functions); |
| 128 | 132 | ||
| 129 | auto& kernel = Core::System::GetInstance().Kernel(); | 133 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 130 | query_event = Kernel::Event::Create(kernel, Kernel::ResetType::OneShot, "NVDRV::query_event"); | 134 | query_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 135 | kernel, Kernel::ResetType::OneShot, "NVDRV::query_event"); | ||
| 131 | } | 136 | } |
| 132 | 137 | ||
| 133 | NVDRV::~NVDRV() = default; | 138 | NVDRV::~NVDRV() = default; |
diff --git a/src/core/hle/service/nvdrv/interface.h b/src/core/hle/service/nvdrv/interface.h index 5a1e4baa7..a27252038 100644 --- a/src/core/hle/service/nvdrv/interface.h +++ b/src/core/hle/service/nvdrv/interface.h | |||
| @@ -5,10 +5,13 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include "core/hle/kernel/event.h" | ||
| 9 | #include "core/hle/service/nvdrv/nvdrv.h" | 8 | #include "core/hle/service/nvdrv/nvdrv.h" |
| 10 | #include "core/hle/service/service.h" | 9 | #include "core/hle/service/service.h" |
| 11 | 10 | ||
| 11 | namespace Kernel { | ||
| 12 | class WritableEvent; | ||
| 13 | } | ||
| 14 | |||
| 12 | namespace Service::Nvidia { | 15 | namespace Service::Nvidia { |
| 13 | 16 | ||
| 14 | class NVDRV final : public ServiceFramework<NVDRV> { | 17 | class NVDRV final : public ServiceFramework<NVDRV> { |
| @@ -31,7 +34,7 @@ private: | |||
| 31 | 34 | ||
| 32 | u64 pid{}; | 35 | u64 pid{}; |
| 33 | 36 | ||
| 34 | Kernel::SharedPtr<Kernel::Event> query_event; | 37 | Kernel::SharedPtr<Kernel::WritableEvent> query_event; |
| 35 | }; | 38 | }; |
| 36 | 39 | ||
| 37 | } // namespace Service::Nvidia | 40 | } // namespace Service::Nvidia |
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp index 172a1a441..7b07750b5 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue.cpp | |||
| @@ -7,14 +7,17 @@ | |||
| 7 | #include "common/assert.h" | 7 | #include "common/assert.h" |
| 8 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| 9 | #include "core/core.h" | 9 | #include "core/core.h" |
| 10 | #include "core/hle/kernel/kernel.h" | ||
| 11 | #include "core/hle/kernel/readable_event.h" | ||
| 12 | #include "core/hle/kernel/writable_event.h" | ||
| 10 | #include "core/hle/service/nvflinger/buffer_queue.h" | 13 | #include "core/hle/service/nvflinger/buffer_queue.h" |
| 11 | 14 | ||
| 12 | namespace Service::NVFlinger { | 15 | namespace Service::NVFlinger { |
| 13 | 16 | ||
| 14 | BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) { | 17 | BufferQueue::BufferQueue(u32 id, u64 layer_id) : id(id), layer_id(layer_id) { |
| 15 | auto& kernel = Core::System::GetInstance().Kernel(); | 18 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 16 | buffer_wait_event = | 19 | buffer_wait_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 17 | Kernel::Event::Create(kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle"); | 20 | kernel, Kernel::ResetType::Sticky, "BufferQueue NativeHandle"); |
| 18 | } | 21 | } |
| 19 | 22 | ||
| 20 | BufferQueue::~BufferQueue() = default; | 23 | BufferQueue::~BufferQueue() = default; |
| @@ -104,4 +107,14 @@ u32 BufferQueue::Query(QueryType type) { | |||
| 104 | return 0; | 107 | return 0; |
| 105 | } | 108 | } |
| 106 | 109 | ||
| 110 | Kernel::SharedPtr<Kernel::WritableEvent> BufferQueue::GetWritableBufferWaitEvent() const { | ||
| 111 | return buffer_wait_event; | ||
| 112 | } | ||
| 113 | |||
| 114 | Kernel::SharedPtr<Kernel::ReadableEvent> BufferQueue::GetBufferWaitEvent() const { | ||
| 115 | const auto& event{ | ||
| 116 | Core::System::GetInstance().Kernel().FindNamedEvent("BufferQueue NativeHandle")}; | ||
| 117 | return event->second; | ||
| 118 | } | ||
| 119 | |||
| 107 | } // namespace Service::NVFlinger | 120 | } // namespace Service::NVFlinger |
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h index 8cff5eb71..8b2a2b7de 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.h +++ b/src/core/hle/service/nvflinger/buffer_queue.h | |||
| @@ -10,12 +10,17 @@ | |||
| 10 | #include "common/common_funcs.h" | 10 | #include "common/common_funcs.h" |
| 11 | #include "common/math_util.h" | 11 | #include "common/math_util.h" |
| 12 | #include "common/swap.h" | 12 | #include "common/swap.h" |
| 13 | #include "core/hle/kernel/event.h" | 13 | #include "core/hle/kernel/object.h" |
| 14 | 14 | ||
| 15 | namespace CoreTiming { | 15 | namespace CoreTiming { |
| 16 | struct EventType; | 16 | struct EventType; |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | namespace Kernel { | ||
| 20 | class ReadableEvent; | ||
| 21 | class WritableEvent; | ||
| 22 | } // namespace Kernel | ||
| 23 | |||
| 19 | namespace Service::NVFlinger { | 24 | namespace Service::NVFlinger { |
| 20 | 25 | ||
| 21 | struct IGBPBuffer { | 26 | struct IGBPBuffer { |
| @@ -86,16 +91,16 @@ public: | |||
| 86 | return id; | 91 | return id; |
| 87 | } | 92 | } |
| 88 | 93 | ||
| 89 | Kernel::SharedPtr<Kernel::Event> GetBufferWaitEvent() const { | 94 | Kernel::SharedPtr<Kernel::WritableEvent> GetWritableBufferWaitEvent() const; |
| 90 | return buffer_wait_event; | 95 | |
| 91 | } | 96 | Kernel::SharedPtr<Kernel::ReadableEvent> GetBufferWaitEvent() const; |
| 92 | 97 | ||
| 93 | private: | 98 | private: |
| 94 | u32 id; | 99 | u32 id; |
| 95 | u64 layer_id; | 100 | u64 layer_id; |
| 96 | 101 | ||
| 97 | std::vector<Buffer> queue; | 102 | std::vector<Buffer> queue; |
| 98 | Kernel::SharedPtr<Kernel::Event> buffer_wait_event; | 103 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_wait_event; |
| 99 | }; | 104 | }; |
| 100 | 105 | ||
| 101 | } // namespace Service::NVFlinger | 106 | } // namespace Service::NVFlinger |
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index 214e6d1b3..2a329cb8e 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp | |||
| @@ -13,6 +13,9 @@ | |||
| 13 | #include "core/core.h" | 13 | #include "core/core.h" |
| 14 | #include "core/core_timing.h" | 14 | #include "core/core_timing.h" |
| 15 | #include "core/core_timing_util.h" | 15 | #include "core/core_timing_util.h" |
| 16 | #include "core/hle/kernel/kernel.h" | ||
| 17 | #include "core/hle/kernel/readable_event.h" | ||
| 18 | #include "core/hle/kernel/writable_event.h" | ||
| 16 | #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" | 19 | #include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" |
| 17 | #include "core/hle/service/nvdrv/nvdrv.h" | 20 | #include "core/hle/service/nvdrv/nvdrv.h" |
| 18 | #include "core/hle/service/nvflinger/buffer_queue.h" | 21 | #include "core/hle/service/nvflinger/buffer_queue.h" |
| @@ -83,9 +86,10 @@ u32 NVFlinger::GetBufferQueueId(u64 display_id, u64 layer_id) { | |||
| 83 | return layer.buffer_queue->GetId(); | 86 | return layer.buffer_queue->GetId(); |
| 84 | } | 87 | } |
| 85 | 88 | ||
| 86 | Kernel::SharedPtr<Kernel::Event> NVFlinger::GetVsyncEvent(u64 display_id) { | 89 | Kernel::SharedPtr<Kernel::ReadableEvent> NVFlinger::GetVsyncEvent(u64 display_id) { |
| 87 | const auto& display = GetDisplay(display_id); | 90 | const auto& event{Core::System::GetInstance().Kernel().FindNamedEvent( |
| 88 | return display.vsync_event; | 91 | fmt::format("Display VSync Event {}", display_id))}; |
| 92 | return event->second; | ||
| 89 | } | 93 | } |
| 90 | 94 | ||
| 91 | std::shared_ptr<BufferQueue> NVFlinger::GetBufferQueue(u32 id) const { | 95 | std::shared_ptr<BufferQueue> NVFlinger::GetBufferQueue(u32 id) const { |
| @@ -164,7 +168,8 @@ Layer::~Layer() = default; | |||
| 164 | 168 | ||
| 165 | Display::Display(u64 id, std::string name) : id(id), name(std::move(name)) { | 169 | Display::Display(u64 id, std::string name) : id(id), name(std::move(name)) { |
| 166 | auto& kernel = Core::System::GetInstance().Kernel(); | 170 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 167 | vsync_event = Kernel::Event::Create(kernel, Kernel::ResetType::Pulse, "Display VSync Event"); | 171 | vsync_event = Kernel::WritableEvent::CreateRegisteredEventPair( |
| 172 | kernel, Kernel::ResetType::Pulse, fmt::format("Display VSync Event {}", id)); | ||
| 168 | } | 173 | } |
| 169 | 174 | ||
| 170 | Display::~Display() = default; | 175 | Display::~Display() = default; |
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h index 3dc69e69b..1a9e74f35 100644 --- a/src/core/hle/service/nvflinger/nvflinger.h +++ b/src/core/hle/service/nvflinger/nvflinger.h | |||
| @@ -10,12 +10,17 @@ | |||
| 10 | #include <vector> | 10 | #include <vector> |
| 11 | 11 | ||
| 12 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| 13 | #include "core/hle/kernel/event.h" | 13 | #include "core/hle/kernel/object.h" |
| 14 | 14 | ||
| 15 | namespace CoreTiming { | 15 | namespace CoreTiming { |
| 16 | struct EventType; | 16 | struct EventType; |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | namespace Kernel { | ||
| 20 | class ReadableEvent; | ||
| 21 | class WritableEvent; | ||
| 22 | } // namespace Kernel | ||
| 23 | |||
| 19 | namespace Service::Nvidia { | 24 | namespace Service::Nvidia { |
| 20 | class Module; | 25 | class Module; |
| 21 | } | 26 | } |
| @@ -40,7 +45,7 @@ struct Display { | |||
| 40 | std::string name; | 45 | std::string name; |
| 41 | 46 | ||
| 42 | std::vector<Layer> layers; | 47 | std::vector<Layer> layers; |
| 43 | Kernel::SharedPtr<Kernel::Event> vsync_event; | 48 | Kernel::SharedPtr<Kernel::WritableEvent> vsync_event; |
| 44 | }; | 49 | }; |
| 45 | 50 | ||
| 46 | class NVFlinger final { | 51 | class NVFlinger final { |
| @@ -61,7 +66,7 @@ public: | |||
| 61 | u32 GetBufferQueueId(u64 display_id, u64 layer_id); | 66 | u32 GetBufferQueueId(u64 display_id, u64 layer_id); |
| 62 | 67 | ||
| 63 | /// Gets the vsync event for the specified display. | 68 | /// Gets the vsync event for the specified display. |
| 64 | Kernel::SharedPtr<Kernel::Event> GetVsyncEvent(u64 display_id); | 69 | Kernel::SharedPtr<Kernel::ReadableEvent> GetVsyncEvent(u64 display_id); |
| 65 | 70 | ||
| 66 | /// Obtains a buffer queue identified by the id. | 71 | /// Obtains a buffer queue identified by the id. |
| 67 | std::shared_ptr<BufferQueue> GetBufferQueue(u32 id) const; | 72 | std::shared_ptr<BufferQueue> GetBufferQueue(u32 id) const; |
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index 5120abfff..47beaf8f6 100644 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
| @@ -18,7 +18,8 @@ | |||
| 18 | #include "common/swap.h" | 18 | #include "common/swap.h" |
| 19 | #include "core/core_timing.h" | 19 | #include "core/core_timing.h" |
| 20 | #include "core/hle/ipc_helpers.h" | 20 | #include "core/hle/ipc_helpers.h" |
| 21 | #include "core/hle/kernel/event.h" | 21 | #include "core/hle/kernel/readable_event.h" |
| 22 | #include "core/hle/kernel/writable_event.h" | ||
| 22 | #include "core/hle/service/nvdrv/nvdrv.h" | 23 | #include "core/hle/service/nvdrv/nvdrv.h" |
| 23 | #include "core/hle/service/nvflinger/buffer_queue.h" | 24 | #include "core/hle/service/nvflinger/buffer_queue.h" |
| 24 | #include "core/hle/service/nvflinger/nvflinger.h" | 25 | #include "core/hle/service/nvflinger/nvflinger.h" |
| @@ -547,7 +548,7 @@ private: | |||
| 547 | IPC::ResponseBuilder rb{ctx, 2}; | 548 | IPC::ResponseBuilder rb{ctx, 2}; |
| 548 | rb.Push(RESULT_SUCCESS); | 549 | rb.Push(RESULT_SUCCESS); |
| 549 | }, | 550 | }, |
| 550 | buffer_queue->GetBufferWaitEvent()); | 551 | buffer_queue->GetWritableBufferWaitEvent(), buffer_queue->GetBufferWaitEvent()); |
| 551 | } | 552 | } |
| 552 | } else if (transaction == TransactionId::RequestBuffer) { | 553 | } else if (transaction == TransactionId::RequestBuffer) { |
| 553 | IGBPRequestBufferRequestParcel request{ctx.ReadBuffer()}; | 554 | IGBPRequestBufferRequestParcel request{ctx.ReadBuffer()}; |
diff --git a/src/yuzu/debugger/wait_tree.cpp b/src/yuzu/debugger/wait_tree.cpp index 0c831c9f4..797be6c4a 100644 --- a/src/yuzu/debugger/wait_tree.cpp +++ b/src/yuzu/debugger/wait_tree.cpp | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | 7 | ||
| 8 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| 9 | #include "core/core.h" | 9 | #include "core/core.h" |
| 10 | #include "core/hle/kernel/event.h" | ||
| 11 | #include "core/hle/kernel/handle_table.h" | 10 | #include "core/hle/kernel/handle_table.h" |
| 12 | #include "core/hle/kernel/mutex.h" | 11 | #include "core/hle/kernel/mutex.h" |
| 13 | #include "core/hle/kernel/process.h" | 12 | #include "core/hle/kernel/process.h" |
| @@ -15,6 +14,7 @@ | |||
| 15 | #include "core/hle/kernel/thread.h" | 14 | #include "core/hle/kernel/thread.h" |
| 16 | #include "core/hle/kernel/timer.h" | 15 | #include "core/hle/kernel/timer.h" |
| 17 | #include "core/hle/kernel/wait_object.h" | 16 | #include "core/hle/kernel/wait_object.h" |
| 17 | #include "core/hle/kernel/writable_event.h" | ||
| 18 | #include "core/memory.h" | 18 | #include "core/memory.h" |
| 19 | 19 | ||
| 20 | WaitTreeItem::WaitTreeItem() = default; | 20 | WaitTreeItem::WaitTreeItem() = default; |
| @@ -154,7 +154,7 @@ QString WaitTreeWaitObject::GetText() const { | |||
| 154 | std::unique_ptr<WaitTreeWaitObject> WaitTreeWaitObject::make(const Kernel::WaitObject& object) { | 154 | std::unique_ptr<WaitTreeWaitObject> WaitTreeWaitObject::make(const Kernel::WaitObject& object) { |
| 155 | switch (object.GetHandleType()) { | 155 | switch (object.GetHandleType()) { |
| 156 | case Kernel::HandleType::Event: | 156 | case Kernel::HandleType::Event: |
| 157 | return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::Event&>(object)); | 157 | return std::make_unique<WaitTreeEvent>(static_cast<const Kernel::WritableEvent&>(object)); |
| 158 | case Kernel::HandleType::Timer: | 158 | case Kernel::HandleType::Timer: |
| 159 | return std::make_unique<WaitTreeTimer>(static_cast<const Kernel::Timer&>(object)); | 159 | return std::make_unique<WaitTreeTimer>(static_cast<const Kernel::Timer&>(object)); |
| 160 | case Kernel::HandleType::Thread: | 160 | case Kernel::HandleType::Thread: |
| @@ -332,7 +332,7 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const { | |||
| 332 | return list; | 332 | return list; |
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | WaitTreeEvent::WaitTreeEvent(const Kernel::Event& object) : WaitTreeWaitObject(object) {} | 335 | WaitTreeEvent::WaitTreeEvent(const Kernel::WritableEvent& object) : WaitTreeWaitObject(object) {} |
| 336 | WaitTreeEvent::~WaitTreeEvent() = default; | 336 | WaitTreeEvent::~WaitTreeEvent() = default; |
| 337 | 337 | ||
| 338 | std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const { | 338 | std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const { |
| @@ -340,7 +340,8 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeEvent::GetChildren() const { | |||
| 340 | 340 | ||
| 341 | list.push_back(std::make_unique<WaitTreeText>( | 341 | list.push_back(std::make_unique<WaitTreeText>( |
| 342 | tr("reset type = %1") | 342 | tr("reset type = %1") |
| 343 | .arg(GetResetTypeQString(static_cast<const Kernel::Event&>(object).GetResetType())))); | 343 | .arg(GetResetTypeQString( |
| 344 | static_cast<const Kernel::WritableEvent&>(object).GetResetType())))); | ||
| 344 | return list; | 345 | return list; |
| 345 | } | 346 | } |
| 346 | 347 | ||
diff --git a/src/yuzu/debugger/wait_tree.h b/src/yuzu/debugger/wait_tree.h index 331f89885..c0b6e0e7f 100644 --- a/src/yuzu/debugger/wait_tree.h +++ b/src/yuzu/debugger/wait_tree.h | |||
| @@ -18,7 +18,7 @@ class EmuThread; | |||
| 18 | 18 | ||
| 19 | namespace Kernel { | 19 | namespace Kernel { |
| 20 | class WaitObject; | 20 | class WaitObject; |
| 21 | class Event; | 21 | class WritableEvent; |
| 22 | class Thread; | 22 | class Thread; |
| 23 | class Timer; | 23 | class Timer; |
| 24 | } // namespace Kernel | 24 | } // namespace Kernel |
| @@ -144,7 +144,7 @@ public: | |||
| 144 | class WaitTreeEvent : public WaitTreeWaitObject { | 144 | class WaitTreeEvent : public WaitTreeWaitObject { |
| 145 | Q_OBJECT | 145 | Q_OBJECT |
| 146 | public: | 146 | public: |
| 147 | explicit WaitTreeEvent(const Kernel::Event& object); | 147 | explicit WaitTreeEvent(const Kernel::WritableEvent& object); |
| 148 | ~WaitTreeEvent() override; | 148 | ~WaitTreeEvent() override; |
| 149 | 149 | ||
| 150 | std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; | 150 | std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; |