37 changed files with 711 additions and 230 deletions
-
16src/core/CMakeLists.txt
-
18src/core/hle/service/hid/controllers/applet_resource.cpp
-
94src/core/hle/service/hid/controllers/applet_resource.h
-
38src/core/hle/service/hid/controllers/capture_button.cpp
-
8src/core/hle/service/hid/controllers/capture_button.h
-
15src/core/hle/service/hid/controllers/console_six_axis.cpp
-
6src/core/hle/service/hid/controllers/console_six_axis.h
-
5src/core/hle/service/hid/controllers/controller_base.cpp
-
8src/core/hle/service/hid/controllers/controller_base.h
-
63src/core/hle/service/hid/controllers/debug_mouse.cpp
-
34src/core/hle/service/hid/controllers/debug_mouse.h
-
16src/core/hle/service/hid/controllers/debug_pad.cpp
-
6src/core/hle/service/hid/controllers/debug_pad.h
-
38src/core/hle/service/hid/controllers/digitizer.cpp
-
27src/core/hle/service/hid/controllers/digitizer.h
-
41src/core/hle/service/hid/controllers/gesture.cpp
-
5src/core/hle/service/hid/controllers/gesture.h
-
38src/core/hle/service/hid/controllers/home_button.cpp
-
27src/core/hle/service/hid/controllers/home_button.h
-
16src/core/hle/service/hid/controllers/keyboard.cpp
-
6src/core/hle/service/hid/controllers/keyboard.h
-
15src/core/hle/service/hid/controllers/mouse.cpp
-
5src/core/hle/service/hid/controllers/mouse.h
-
51src/core/hle/service/hid/controllers/npad.cpp
-
11src/core/hle/service/hid/controllers/npad.h
-
3src/core/hle/service/hid/controllers/shared_memory_holder.cpp
-
24src/core/hle/service/hid/controllers/six_axis.cpp
-
38src/core/hle/service/hid/controllers/sleep_button.cpp
-
27src/core/hle/service/hid/controllers/sleep_button.h
-
31src/core/hle/service/hid/controllers/stubbed.cpp
-
17src/core/hle/service/hid/controllers/touchscreen.cpp
-
4src/core/hle/service/hid/controllers/touchscreen.h
-
0src/core/hle/service/hid/controllers/types/shared_memory_format.h
-
38src/core/hle/service/hid/controllers/unique_pad.cpp
-
27src/core/hle/service/hid/controllers/unique_pad.h
-
107src/core/hle/service/hid/resource_manager.cpp
-
18src/core/hle/service/hid/resource_manager.h
@ -0,0 +1,38 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/capture_button.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
CaptureButton::CaptureButton(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {} |
|||
|
|||
CaptureButton::~CaptureButton() = default; |
|||
|
|||
void CaptureButton::OnInit() {} |
|||
|
|||
void CaptureButton::OnRelease() {} |
|||
|
|||
void CaptureButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
auto& header = data->shared_memory_format->capture_button.header; |
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,63 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/frontend/emu_window.h"
|
|||
#include "core/hid/emulated_devices.h"
|
|||
#include "core/hid/hid_core.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/debug_mouse.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
DebugMouse::DebugMouse(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} { |
|||
emulated_devices = hid_core.GetEmulatedDevices(); |
|||
} |
|||
|
|||
DebugMouse::~DebugMouse() = default; |
|||
|
|||
void DebugMouse::OnInit() {} |
|||
void DebugMouse::OnRelease() {} |
|||
|
|||
void DebugMouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
MouseSharedMemoryFormat& shared_memory = data->shared_memory_format->debug_mouse; |
|||
|
|||
if (!IsControllerActivated()) { |
|||
shared_memory.mouse_lifo.buffer_count = 0; |
|||
shared_memory.mouse_lifo.buffer_tail = 0; |
|||
return; |
|||
} |
|||
|
|||
next_state = {}; |
|||
|
|||
const auto& last_entry = shared_memory.mouse_lifo.ReadCurrentEntry().state; |
|||
next_state.sampling_number = last_entry.sampling_number + 1; |
|||
|
|||
if (Settings::values.mouse_enabled) { |
|||
const auto& mouse_button_state = emulated_devices->GetMouseButtons(); |
|||
const auto& mouse_position_state = emulated_devices->GetMousePosition(); |
|||
const auto& mouse_wheel_state = emulated_devices->GetMouseWheel(); |
|||
next_state.attribute.is_connected.Assign(1); |
|||
next_state.x = static_cast<s32>(mouse_position_state.x * Layout::ScreenUndocked::Width); |
|||
next_state.y = static_cast<s32>(mouse_position_state.y * Layout::ScreenUndocked::Height); |
|||
next_state.delta_x = next_state.x - last_entry.x; |
|||
next_state.delta_y = next_state.y - last_entry.y; |
|||
next_state.delta_wheel_x = mouse_wheel_state.x - last_mouse_wheel_state.x; |
|||
next_state.delta_wheel_y = mouse_wheel_state.y - last_mouse_wheel_state.y; |
|||
|
|||
last_mouse_wheel_state = mouse_wheel_state; |
|||
next_state.button = mouse_button_state; |
|||
} |
|||
|
|||
shared_memory.mouse_lifo.WriteNextEntry(next_state); |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,34 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/hid/controllers/controller_base.h" |
|||
|
|||
namespace Core::HID { |
|||
class EmulatedDevices; |
|||
struct MouseState; |
|||
struct AnalogStickState; |
|||
} // namespace Core::HID |
|||
|
|||
namespace Service::HID { |
|||
class DebugMouse final : public ControllerBase { |
|||
public: |
|||
explicit DebugMouse(Core::HID::HIDCore& hid_core_); |
|||
~DebugMouse() override; |
|||
|
|||
// Called when the controller is initialized |
|||
void OnInit() override; |
|||
|
|||
// When the controller is released |
|||
void OnRelease() override; |
|||
|
|||
// When the controller is requesting an update for the shared memory |
|||
void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
|||
|
|||
private: |
|||
Core::HID::MouseState next_state{}; |
|||
Core::HID::AnalogStickState last_mouse_wheel_state{}; |
|||
Core::HID::EmulatedDevices* emulated_devices = nullptr; |
|||
}; |
|||
} // namespace Service::HID |
|||
@ -0,0 +1,38 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/digitizer.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
Digitizer::Digitizer(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {} |
|||
|
|||
Digitizer::~Digitizer() = default; |
|||
|
|||
void Digitizer::OnInit() {} |
|||
|
|||
void Digitizer::OnRelease() {} |
|||
|
|||
void Digitizer::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
auto& header = data->shared_memory_format->digitizer.header; |
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,27 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/hid/controllers/controller_base.h" |
|||
|
|||
namespace Service::HID { |
|||
|
|||
class Digitizer final : public ControllerBase { |
|||
public: |
|||
explicit Digitizer(Core::HID::HIDCore& hid_core_); |
|||
~Digitizer() override; |
|||
|
|||
// Called when the controller is initialized |
|||
void OnInit() override; |
|||
|
|||
// When the controller is released |
|||
void OnRelease() override; |
|||
|
|||
// When the controller is requesting an update for the shared memory |
|||
void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
|||
|
|||
private: |
|||
bool smart_update{}; |
|||
}; |
|||
} // namespace Service::HID |
|||
@ -0,0 +1,38 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/home_button.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
HomeButton::HomeButton(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {} |
|||
|
|||
HomeButton::~HomeButton() = default; |
|||
|
|||
void HomeButton::OnInit() {} |
|||
|
|||
void HomeButton::OnRelease() {} |
|||
|
|||
void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
auto& header = data->shared_memory_format->home_button.header; |
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,27 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/hid/controllers/controller_base.h" |
|||
|
|||
namespace Service::HID { |
|||
|
|||
class HomeButton final : public ControllerBase { |
|||
public: |
|||
explicit HomeButton(Core::HID::HIDCore& hid_core_); |
|||
~HomeButton() override; |
|||
|
|||
// Called when the controller is initialized |
|||
void OnInit() override; |
|||
|
|||
// When the controller is released |
|||
void OnRelease() override; |
|||
|
|||
// When the controller is requesting an update for the shared memory |
|||
void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
|||
|
|||
private: |
|||
bool smart_update{}; |
|||
}; |
|||
} // namespace Service::HID |
|||
@ -0,0 +1,38 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/sleep_button.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
SleepButton::SleepButton(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {} |
|||
|
|||
SleepButton::~SleepButton() = default; |
|||
|
|||
void SleepButton::OnInit() {} |
|||
|
|||
void SleepButton::OnRelease() {} |
|||
|
|||
void SleepButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
auto& header = data->shared_memory_format->capture_button.header; |
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,27 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/hid/controllers/controller_base.h" |
|||
|
|||
namespace Service::HID { |
|||
|
|||
class SleepButton final : public ControllerBase { |
|||
public: |
|||
explicit SleepButton(Core::HID::HIDCore& hid_core_); |
|||
~SleepButton() override; |
|||
|
|||
// Called when the controller is initialized |
|||
void OnInit() override; |
|||
|
|||
// When the controller is released |
|||
void OnRelease() override; |
|||
|
|||
// When the controller is requesting an update for the shared memory |
|||
void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
|||
|
|||
private: |
|||
bool smart_update{}; |
|||
}; |
|||
} // namespace Service::HID |
|||
@ -1,31 +0,0 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/shared_memory_format.h"
|
|||
#include "core/hle/service/hid/controllers/stubbed.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
Controller_Stubbed::Controller_Stubbed(Core::HID::HIDCore& hid_core_, |
|||
CommonHeader& ring_lifo_header) |
|||
: ControllerBase{hid_core_}, header{ring_lifo_header} {} |
|||
|
|||
Controller_Stubbed::~Controller_Stubbed() = default; |
|||
|
|||
void Controller_Stubbed::OnInit() {} |
|||
|
|||
void Controller_Stubbed::OnRelease() {} |
|||
|
|||
void Controller_Stubbed::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,38 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
#include "core/core_timing.h"
|
|||
#include "core/hle/service/hid/controllers/applet_resource.h"
|
|||
#include "core/hle/service/hid/controllers/types/shared_memory_format.h"
|
|||
#include "core/hle/service/hid/controllers/unique_pad.h"
|
|||
|
|||
namespace Service::HID { |
|||
|
|||
UniquePad::UniquePad(Core::HID::HIDCore& hid_core_) : ControllerBase{hid_core_} {} |
|||
|
|||
UniquePad::~UniquePad() = default; |
|||
|
|||
void UniquePad::OnInit() {} |
|||
|
|||
void UniquePad::OnRelease() {} |
|||
|
|||
void UniquePad::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
|||
if (!smart_update) { |
|||
return; |
|||
} |
|||
|
|||
const u64 aruid = applet_resource->GetActiveAruid(); |
|||
auto* data = applet_resource->GetAruidData(aruid); |
|||
|
|||
if (data == nullptr) { |
|||
return; |
|||
} |
|||
|
|||
auto& header = data->shared_memory_format->capture_button.header; |
|||
header.timestamp = core_timing.GetGlobalTimeNs().count(); |
|||
header.total_entry_count = 17; |
|||
header.entry_count = 0; |
|||
header.last_entry_index = 0; |
|||
} |
|||
|
|||
} // namespace Service::HID
|
|||
@ -0,0 +1,27 @@ |
|||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project |
|||
// SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
#pragma once |
|||
|
|||
#include "core/hle/service/hid/controllers/controller_base.h" |
|||
|
|||
namespace Service::HID { |
|||
|
|||
class UniquePad final : public ControllerBase { |
|||
public: |
|||
explicit UniquePad(Core::HID::HIDCore& hid_core_); |
|||
~UniquePad() override; |
|||
|
|||
// Called when the controller is initialized |
|||
void OnInit() override; |
|||
|
|||
// When the controller is released |
|||
void OnRelease() override; |
|||
|
|||
// When the controller is requesting an update for the shared memory |
|||
void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
|||
|
|||
private: |
|||
bool smart_update{}; |
|||
}; |
|||
} // namespace Service::HID |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue