hle: kernel: Implement KEvent.
This commit is contained in:
		| @@ -160,6 +160,8 @@ add_library(core STATIC | |||||||
|     hle/kernel/k_affinity_mask.h |     hle/kernel/k_affinity_mask.h | ||||||
|     hle/kernel/k_condition_variable.cpp |     hle/kernel/k_condition_variable.cpp | ||||||
|     hle/kernel/k_condition_variable.h |     hle/kernel/k_condition_variable.h | ||||||
|  |     hle/kernel/k_event.cpp | ||||||
|  |     hle/kernel/k_event.h | ||||||
|     hle/kernel/k_light_condition_variable.h |     hle/kernel/k_light_condition_variable.h | ||||||
|     hle/kernel/k_light_lock.cpp |     hle/kernel/k_light_lock.cpp | ||||||
|     hle/kernel/k_light_lock.h |     hle/kernel/k_light_lock.h | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								src/core/hle/kernel/k_event.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/core/hle/kernel/k_event.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | // Copyright 2021 yuzu emulator team | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #include "core/hle/kernel/k_event.h" | ||||||
|  | #include "core/hle/kernel/k_readable_event.h" | ||||||
|  | #include "core/hle/kernel/k_writable_event.h" | ||||||
|  |  | ||||||
|  | namespace Kernel { | ||||||
|  |  | ||||||
|  | KEvent::KEvent(KernelCore& kernel, std::string&& name) : Object{kernel, std::move(name)} {} | ||||||
|  |  | ||||||
|  | KEvent::~KEvent() = default; | ||||||
|  |  | ||||||
|  | std::shared_ptr<KEvent> KEvent::Create(KernelCore& kernel, std::string&& name) { | ||||||
|  |     return std::make_shared<KEvent>(kernel, std::move(name)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void KEvent::Initialize() { | ||||||
|  |     // Create our sub events. | ||||||
|  |     readable_event = std::make_shared<KReadableEvent>(kernel, GetName() + ":Readable"); | ||||||
|  |     writable_event = std::make_shared<KWritableEvent>(kernel, GetName() + ":Writable"); | ||||||
|  |  | ||||||
|  |     // Initialize our sub sessions. | ||||||
|  |     readable_event->Initialize(this); | ||||||
|  |     writable_event->Initialize(this); | ||||||
|  |  | ||||||
|  |     // Mark initialized. | ||||||
|  |     initialized = true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Kernel | ||||||
							
								
								
									
										57
									
								
								src/core/hle/kernel/k_event.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/core/hle/kernel/k_event.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | // Copyright 2021 yuzu emulator team | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include "core/hle/kernel/object.h" | ||||||
|  |  | ||||||
|  | namespace Kernel { | ||||||
|  |  | ||||||
|  | class KernelCore; | ||||||
|  | class KReadableEvent; | ||||||
|  | class KWritableEvent; | ||||||
|  |  | ||||||
|  | class KEvent final : public Object { | ||||||
|  | public: | ||||||
|  |     explicit KEvent(KernelCore& kernel, std::string&& name); | ||||||
|  |     ~KEvent() override; | ||||||
|  |  | ||||||
|  |     static std::shared_ptr<KEvent> Create(KernelCore& kernel, std::string&& name); | ||||||
|  |  | ||||||
|  |     void Initialize(); | ||||||
|  |  | ||||||
|  |     void Finalize() override {} | ||||||
|  |  | ||||||
|  |     std::string GetTypeName() const override { | ||||||
|  |         return "KEvent"; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     static constexpr HandleType HANDLE_TYPE = HandleType::Event; | ||||||
|  |     HandleType GetHandleType() const override { | ||||||
|  |         return HANDLE_TYPE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     std::shared_ptr<KReadableEvent>& GetReadableEvent() { | ||||||
|  |         return readable_event; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     std::shared_ptr<KWritableEvent>& GetWritableEvent() { | ||||||
|  |         return writable_event; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const std::shared_ptr<KReadableEvent>& GetReadableEvent() const { | ||||||
|  |         return readable_event; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const std::shared_ptr<KWritableEvent>& GetWritableEvent() const { | ||||||
|  |         return writable_event; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     std::shared_ptr<KReadableEvent> readable_event; | ||||||
|  |     std::shared_ptr<KWritableEvent> writable_event; | ||||||
|  |     bool initialized{}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace Kernel | ||||||
		Reference in New Issue
	
	Block a user