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