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
-
49src/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