summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/core/hle/kernel/k_event.cpp32
-rw-r--r--src/core/hle/kernel/k_event.h57
3 files changed, 91 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 73ee48f4f..386d7bddf 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -160,6 +160,8 @@ add_library(core STATIC
160 hle/kernel/k_affinity_mask.h 160 hle/kernel/k_affinity_mask.h
161 hle/kernel/k_condition_variable.cpp 161 hle/kernel/k_condition_variable.cpp
162 hle/kernel/k_condition_variable.h 162 hle/kernel/k_condition_variable.h
163 hle/kernel/k_event.cpp
164 hle/kernel/k_event.h
163 hle/kernel/k_light_condition_variable.h 165 hle/kernel/k_light_condition_variable.h
164 hle/kernel/k_light_lock.cpp 166 hle/kernel/k_light_lock.cpp
165 hle/kernel/k_light_lock.h 167 hle/kernel/k_light_lock.h
diff --git a/src/core/hle/kernel/k_event.cpp b/src/core/hle/kernel/k_event.cpp
new file mode 100644
index 000000000..bb2fa4ad5
--- /dev/null
+++ b/src/core/hle/kernel/k_event.cpp
@@ -0,0 +1,32 @@
1// Copyright 2021 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/kernel/k_event.h"
6#include "core/hle/kernel/k_readable_event.h"
7#include "core/hle/kernel/k_writable_event.h"
8
9namespace Kernel {
10
11KEvent::KEvent(KernelCore& kernel, std::string&& name) : Object{kernel, std::move(name)} {}
12
13KEvent::~KEvent() = default;
14
15std::shared_ptr<KEvent> KEvent::Create(KernelCore& kernel, std::string&& name) {
16 return std::make_shared<KEvent>(kernel, std::move(name));
17}
18
19void KEvent::Initialize() {
20 // Create our sub events.
21 readable_event = std::make_shared<KReadableEvent>(kernel, GetName() + ":Readable");
22 writable_event = std::make_shared<KWritableEvent>(kernel, GetName() + ":Writable");
23
24 // Initialize our sub sessions.
25 readable_event->Initialize(this);
26 writable_event->Initialize(this);
27
28 // Mark initialized.
29 initialized = true;
30}
31
32} // namespace Kernel
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h
new file mode 100644
index 000000000..2fb887129
--- /dev/null
+++ b/src/core/hle/kernel/k_event.h
@@ -0,0 +1,57 @@
1// Copyright 2021 yuzu emulator team
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/kernel/object.h"
8
9namespace Kernel {
10
11class KernelCore;
12class KReadableEvent;
13class KWritableEvent;
14
15class KEvent final : public Object {
16public:
17 explicit KEvent(KernelCore& kernel, std::string&& name);
18 ~KEvent() override;
19
20 static std::shared_ptr<KEvent> Create(KernelCore& kernel, std::string&& name);
21
22 void Initialize();
23
24 void Finalize() override {}
25
26 std::string GetTypeName() const override {
27 return "KEvent";
28 }
29
30 static constexpr HandleType HANDLE_TYPE = HandleType::Event;
31 HandleType GetHandleType() const override {
32 return HANDLE_TYPE;
33 }
34
35 std::shared_ptr<KReadableEvent>& GetReadableEvent() {
36 return readable_event;
37 }
38
39 std::shared_ptr<KWritableEvent>& GetWritableEvent() {
40 return writable_event;
41 }
42
43 const std::shared_ptr<KReadableEvent>& GetReadableEvent() const {
44 return readable_event;
45 }
46
47 const std::shared_ptr<KWritableEvent>& GetWritableEvent() const {
48 return writable_event;
49 }
50
51private:
52 std::shared_ptr<KReadableEvent> readable_event;
53 std::shared_ptr<KWritableEvent> writable_event;
54 bool initialized{};
55};
56
57} // namespace Kernel