service: hid: Use applet resource to get latest shared memory handle
parent
09bfc852dc
commit
865abfc37c
@ -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
|
Loading…
Reference in New Issue