Browse Source
Merge pull request #1803 from DarkLordZach/k-able-event
Merge pull request #1803 from DarkLordZach/k-able-event
kernel: Divide Event into ReadableEvent and WritableEventnce_cpp
committed by
GitHub
37 changed files with 410 additions and 247 deletions
-
4src/audio_core/audio_renderer.cpp
-
7src/audio_core/audio_renderer.h
-
6src/core/CMakeLists.txt
-
29src/core/hle/kernel/hle_ipc.cpp
-
12src/core/hle/kernel/hle_ipc.h
-
6src/core/hle/kernel/object.h
-
27src/core/hle/kernel/readable_event.cpp
-
55src/core/hle/kernel/readable_event.h
-
7src/core/hle/kernel/svc.cpp
-
52src/core/hle/kernel/writable_event.cpp
-
33src/core/hle/kernel/writable_event.h
-
43src/core/hle/service/am/am.cpp
-
16src/core/hle/service/am/am.h
-
31src/core/hle/service/am/applets/applets.cpp
-
17src/core/hle/service/am/applets/applets.h
-
10src/core/hle/service/aoc/aoc_u.cpp
-
6src/core/hle/service/aoc/aoc_u.h
-
17src/core/hle/service/audio/audout_u.cpp
-
26src/core/hle/service/audio/audren_u.cpp
-
16src/core/hle/service/btdrv/btdrv.cpp
-
46src/core/hle/service/btm/btm.cpp
-
18src/core/hle/service/hid/controllers/npad.cpp
-
7src/core/hle/service/hid/controllers/npad.h
-
3src/core/hle/service/hid/hid.cpp
-
34src/core/hle/service/nfp/nfp.cpp
-
7src/core/hle/service/nfp/nfp.h
-
14src/core/hle/service/nifm/nifm.cpp
-
20src/core/hle/service/nim/nim.cpp
-
9src/core/hle/service/nvdrv/interface.cpp
-
7src/core/hle/service/nvdrv/interface.h
-
19src/core/hle/service/nvflinger/buffer_queue.cpp
-
11src/core/hle/service/nvflinger/buffer_queue.h
-
13src/core/hle/service/nvflinger/nvflinger.cpp
-
11src/core/hle/service/nvflinger/nvflinger.h
-
5src/core/hle/service/vi/vi.cpp
-
9src/yuzu/debugger/wait_tree.cpp
-
4src/yuzu/debugger/wait_tree.h
@ -0,0 +1,55 @@ |
|||||
|
// Copyright 2014 Citra Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "core/hle/kernel/object.h" |
||||
|
#include "core/hle/kernel/wait_object.h" |
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
class KernelCore; |
||||
|
class WritableEvent; |
||||
|
|
||||
|
class ReadableEvent final : public WaitObject { |
||||
|
friend class WritableEvent; |
||||
|
|
||||
|
public: |
||||
|
~ReadableEvent() override; |
||||
|
|
||||
|
std::string GetTypeName() const override { |
||||
|
return "ReadableEvent"; |
||||
|
} |
||||
|
std::string GetName() const override { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
ResetType GetResetType() const { |
||||
|
return reset_type; |
||||
|
} |
||||
|
|
||||
|
static const HandleType HANDLE_TYPE = HandleType::Event; |
||||
|
HandleType GetHandleType() const override { |
||||
|
return HANDLE_TYPE; |
||||
|
} |
||||
|
|
||||
|
bool ShouldWait(Thread* thread) const override; |
||||
|
void Acquire(Thread* thread) override; |
||||
|
|
||||
|
void WakeupAllWaitingThreads() override; |
||||
|
|
||||
|
void Clear(); |
||||
|
|
||||
|
private: |
||||
|
explicit ReadableEvent(KernelCore& kernel); |
||||
|
|
||||
|
void Signal(); |
||||
|
|
||||
|
ResetType reset_type; |
||||
|
bool signaled; |
||||
|
|
||||
|
std::string name; ///< Name of event (optional) |
||||
|
}; |
||||
|
|
||||
|
} // namespace Kernel |
||||
@ -0,0 +1,52 @@ |
|||||
|
// Copyright 2014 Citra Emulator Project
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include <algorithm>
|
||||
|
#include "common/assert.h"
|
||||
|
#include "core/hle/kernel/kernel.h"
|
||||
|
#include "core/hle/kernel/object.h"
|
||||
|
#include "core/hle/kernel/readable_event.h"
|
||||
|
#include "core/hle/kernel/thread.h"
|
||||
|
#include "core/hle/kernel/writable_event.h"
|
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
WritableEvent::WritableEvent(KernelCore& kernel) : Object{kernel} {} |
||||
|
WritableEvent::~WritableEvent() = default; |
||||
|
|
||||
|
EventPair WritableEvent::CreateEventPair(KernelCore& kernel, ResetType reset_type, |
||||
|
std::string name) { |
||||
|
SharedPtr<WritableEvent> writable_event(new WritableEvent(kernel)); |
||||
|
SharedPtr<ReadableEvent> readable_event(new ReadableEvent(kernel)); |
||||
|
|
||||
|
writable_event->name = name + ":Writable"; |
||||
|
writable_event->readable = readable_event; |
||||
|
readable_event->name = name + ":Readable"; |
||||
|
readable_event->signaled = false; |
||||
|
readable_event->reset_type = reset_type; |
||||
|
|
||||
|
return {std::move(readable_event), std::move(writable_event)}; |
||||
|
} |
||||
|
|
||||
|
SharedPtr<ReadableEvent> WritableEvent::GetReadableEvent() const { |
||||
|
return readable; |
||||
|
} |
||||
|
|
||||
|
ResetType WritableEvent::GetResetType() const { |
||||
|
return readable->reset_type; |
||||
|
} |
||||
|
|
||||
|
void WritableEvent::Signal() { |
||||
|
readable->Signal(); |
||||
|
} |
||||
|
|
||||
|
void WritableEvent::Clear() { |
||||
|
readable->Clear(); |
||||
|
} |
||||
|
|
||||
|
bool WritableEvent::IsSignaled() const { |
||||
|
return readable->signaled; |
||||
|
} |
||||
|
|
||||
|
} // namespace Kernel
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue