cleanup
This commit is contained in:
parent
7843915b71
commit
971f0a395b
|
@ -513,6 +513,8 @@ add_library(core STATIC
|
||||||
hle/service/hid/hid.h
|
hle/service/hid/hid.h
|
||||||
hle/service/hid/hid_debug_server.cpp
|
hle/service/hid/hid_debug_server.cpp
|
||||||
hle/service/hid/hid_debug_server.h
|
hle/service/hid/hid_debug_server.h
|
||||||
|
hle/service/hid/hid_firmware_settings.cpp
|
||||||
|
hle/service/hid/hid_firmware_settings.h
|
||||||
hle/service/hid/hid_result.h
|
hle/service/hid/hid_result.h
|
||||||
hle/service/hid/hid_server.cpp
|
hle/service/hid/hid_server.cpp
|
||||||
hle/service/hid/hid_server.h
|
hle/service/hid/hid_server.h
|
||||||
|
|
|
@ -11,15 +11,18 @@
|
||||||
#include "core/hle/service/hid/resource_manager.h"
|
#include "core/hle/service/hid/resource_manager.h"
|
||||||
#include "core/hle/service/hid/xcd.h"
|
#include "core/hle/service/hid/xcd.h"
|
||||||
#include "core/hle/service/server_manager.h"
|
#include "core/hle/service/server_manager.h"
|
||||||
|
#include "core/hle/service/hid/hid_firmware_settings.h"
|
||||||
|
|
||||||
namespace Service::HID {
|
namespace Service::HID {
|
||||||
|
|
||||||
void LoopProcess(Core::System& system) {
|
void LoopProcess(Core::System& system) {
|
||||||
auto server_manager = std::make_unique<ServerManager>(system);
|
auto server_manager = std::make_unique<ServerManager>(system);
|
||||||
std::shared_ptr<ResourceManager> resouce_manager = std::make_shared<ResourceManager>(system);
|
std::shared_ptr<ResourceManager> resouce_manager = std::make_shared<ResourceManager>(system);
|
||||||
|
std::shared_ptr<HidFirmwareSettings> firmware_settings =
|
||||||
|
std::make_shared<HidFirmwareSettings>();
|
||||||
|
|
||||||
server_manager->RegisterNamedService("hid",
|
server_manager->RegisterNamedService(
|
||||||
std::make_shared<IHidServer>(system, resouce_manager));
|
"hid", std::make_shared<IHidServer>(system, resouce_manager, firmware_settings));
|
||||||
server_manager->RegisterNamedService(
|
server_manager->RegisterNamedService(
|
||||||
"hid:dbg", std::make_shared<IHidDebugServer>(system, resouce_manager));
|
"hid:dbg", std::make_shared<IHidDebugServer>(system, resouce_manager));
|
||||||
server_manager->RegisterNamedService(
|
server_manager->RegisterNamedService(
|
||||||
|
|
|
@ -326,11 +326,7 @@ void IHidDebugServer::GetGyroscopeOdr(HLERequestContext& ctx) {}
|
||||||
void IHidDebugServer::SetGyroscopeOdr(HLERequestContext& ctx) {}
|
void IHidDebugServer::SetGyroscopeOdr(HLERequestContext& ctx) {}
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> IHidDebugServer::GetResourceManager() {
|
std::shared_ptr<ResourceManager> IHidDebugServer::GetResourceManager() {
|
||||||
if (!is_resource_manager_initialized) {
|
resource_manager->VerifiyInitalization();
|
||||||
resource_manager->Initialize();
|
|
||||||
is_resource_manager_initialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return resource_manager;
|
return resource_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,6 @@ private:
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> GetResourceManager();
|
std::shared_ptr<ResourceManager> GetResourceManager();
|
||||||
|
|
||||||
bool is_resource_manager_initialized{};
|
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,148 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "core/hle/service/hid/hid_firmware_settings.h"
|
||||||
|
|
||||||
|
namespace Service::HID {
|
||||||
|
|
||||||
|
HidFirmwareSettings::HidFirmwareSettings() {
|
||||||
|
LoadSettings(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HidFirmwareSettings::Reload() {
|
||||||
|
LoadSettings(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HidFirmwareSettings::LoadSettings(bool should_initialize) {
|
||||||
|
// TODO: uncomment this code when we can talk between services
|
||||||
|
|
||||||
|
if (is_debug_settings_initalized && !should_initialize) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_debugpad_enabled = true;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&is_debugpad_enabled, 1, "hid_debug",
|
||||||
|
// "enables_debugpad")
|
||||||
|
|
||||||
|
is_device_managed = true;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&is_device_managed, 1, "hid_debug",
|
||||||
|
// "manages_devices");
|
||||||
|
|
||||||
|
is_touch_i2c_managed = is_device_managed;
|
||||||
|
if (is_device_managed) {
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_manages_touch_ic_i2c, 1,
|
||||||
|
// "hid_debug", "manages_touch_ic_i2c");
|
||||||
|
}
|
||||||
|
|
||||||
|
is_future_devices_emulated = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_emulate_future_device, 1,
|
||||||
|
// "hid_debug", "emulate_future_device");
|
||||||
|
|
||||||
|
is_mcu_hardware_error_emulated = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_emulate_mcu_hardware_error, 1,
|
||||||
|
// "hid_debug", "emulate_mcu_hardware_error");
|
||||||
|
|
||||||
|
is_rail_enabled = true;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_enables_rail, 1, "hid_debug",
|
||||||
|
// "enables_rail");
|
||||||
|
|
||||||
|
is_firmware_update_failure_emulated = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(setting_hid_debug_emulate_firmware_update_failure,
|
||||||
|
// 1, "hid_debug", "emulate_firmware_update_failure");
|
||||||
|
|
||||||
|
is_firmware_update_failure = {};
|
||||||
|
if (is_firmware_update_failure_emulated) {
|
||||||
|
const std::size_t size = 0; // GetSettingsItemValueSize("hid_debug",
|
||||||
|
// "firmware_update_failure"); if (size != 0) {
|
||||||
|
[[maybe_unused]] const std::size_t setting_size =
|
||||||
|
std::min(size, is_firmware_update_failure.size());
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&is_firmware_update_failure, setting_size,
|
||||||
|
// "hid_debug", "firmware_update_failure");
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ble_disabled = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_ble_disabled, 1, "hid_debug",
|
||||||
|
// "ble_disabled");
|
||||||
|
|
||||||
|
is_dscale_disabled = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_dscale_disabled, 1, "hid_debug",
|
||||||
|
// "dscale_disabled");
|
||||||
|
|
||||||
|
is_handheld_forced = true;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&force_handheld, 1, "hid_debug", "force_handheld");
|
||||||
|
|
||||||
|
features_per_id_disabled = {};
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(&disabled_features_per_id,
|
||||||
|
// is_features_per_id_disabled.size(), "hid_debug",
|
||||||
|
// "disabled_features_per_id");
|
||||||
|
|
||||||
|
is_touch_firmware_auto_update_disabled = false;
|
||||||
|
// nn::settings::fwdbg::GetSettingsItemValue(
|
||||||
|
// &setting_hid_debug_touch_firmware_auto_update_disabled, 1, "hid_debug",
|
||||||
|
// "touch_firmware_auto_update_disabled");
|
||||||
|
|
||||||
|
is_debug_settings_initalized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsDebugPadEnabled() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_debugpad_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsDeviceManaged() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_device_managed;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsEmulateFutureDevice() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_future_devices_emulated;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsTouchI2cManaged() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_touch_i2c_managed;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsHandheldForced() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_handheld_forced;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsRailEnabled() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_rail_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsHardwareErrorEmulated() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_mcu_hardware_error_emulated;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsBleDisabled() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_ble_disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsDscaleDisabled() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_dscale_disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HidFirmwareSettings::IsTouchAutoUpdateDisabled() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_touch_firmware_auto_update_disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
HidFirmwareSettings::FirmwareSetting HidFirmwareSettings::GetFirmwareUpdateFailure() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return is_firmware_update_failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
HidFirmwareSettings::FeaturesPerId HidFirmwareSettings::FeaturesDisabledPerId() {
|
||||||
|
LoadSettings(false);
|
||||||
|
return features_per_id_disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Service::HID
|
|
@ -0,0 +1,54 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common/common_types.h"
|
||||||
|
|
||||||
|
namespace Service::HID {
|
||||||
|
|
||||||
|
/// Loads firmware config from nn::settings::fwdbg
|
||||||
|
class HidFirmwareSettings {
|
||||||
|
public:
|
||||||
|
using FirmwareSetting = std::array<u8, 4>;
|
||||||
|
using FeaturesPerId = std::array<bool, 0xA8>;
|
||||||
|
|
||||||
|
HidFirmwareSettings();
|
||||||
|
|
||||||
|
void Reload();
|
||||||
|
void LoadSettings(bool should_initialize);
|
||||||
|
|
||||||
|
bool IsDebugPadEnabled();
|
||||||
|
bool IsDeviceManaged();
|
||||||
|
bool IsEmulateFutureDevice();
|
||||||
|
bool IsTouchI2cManaged();
|
||||||
|
bool IsHandheldForced();
|
||||||
|
bool IsRailEnabled();
|
||||||
|
bool IsHardwareErrorEmulated();
|
||||||
|
bool IsBleDisabled();
|
||||||
|
bool IsDscaleDisabled();
|
||||||
|
bool IsTouchAutoUpdateDisabled();
|
||||||
|
|
||||||
|
FirmwareSetting GetFirmwareUpdateFailure();
|
||||||
|
FeaturesPerId FeaturesDisabledPerId();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool is_debug_settings_initalized{};
|
||||||
|
|
||||||
|
// Debug settings
|
||||||
|
bool is_debugpad_enabled{};
|
||||||
|
bool is_device_managed{};
|
||||||
|
bool is_touch_i2c_managed{};
|
||||||
|
bool is_future_devices_emulated{};
|
||||||
|
bool is_mcu_hardware_error_emulated{};
|
||||||
|
bool is_rail_enabled{};
|
||||||
|
bool is_firmware_update_failure_emulated{};
|
||||||
|
bool is_ble_disabled{};
|
||||||
|
bool is_dscale_disabled{};
|
||||||
|
bool is_handheld_forced{};
|
||||||
|
bool is_touch_firmware_auto_update_disabled{};
|
||||||
|
FirmwareSetting is_firmware_update_failure{};
|
||||||
|
FeaturesPerId features_per_id_disabled{};
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Service::HID
|
|
@ -19,6 +19,7 @@
|
||||||
#include "core/hle/service/hid/resource_manager/palma.h"
|
#include "core/hle/service/hid/resource_manager/palma.h"
|
||||||
#include "core/hle/service/hid/resource_manager/sixaxis.h"
|
#include "core/hle/service/hid/resource_manager/sixaxis.h"
|
||||||
#include "core/hle/service/hid/resource_manager/touch_screen.h"
|
#include "core/hle/service/hid/resource_manager/touch_screen.h"
|
||||||
|
#include "core/hle/service/hid/hid_firmware_settings.h"
|
||||||
#include "core/hle/service/ipc_helpers.h"
|
#include "core/hle/service/ipc_helpers.h"
|
||||||
|
|
||||||
namespace Service::HID {
|
namespace Service::HID {
|
||||||
|
@ -70,15 +71,16 @@ void IAppletResource::GetSharedMemoryHandle(HLERequestContext& ctx) {
|
||||||
rb.PushCopyObjects(&system.Kernel().GetHidSharedMem());
|
rb.PushCopyObjects(&system.Kernel().GetHidSharedMem());
|
||||||
}
|
}
|
||||||
|
|
||||||
IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> resource)
|
IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> resource,
|
||||||
: ServiceFramework{system_, "hid"}, resource_manager{resource} {
|
std::shared_ptr<HidFirmwareSettings> settings)
|
||||||
|
: ServiceFramework{system_, "hid"}, resource_manager{resource}, firmware_settings{settings} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IHidServer::CreateAppletResource, "CreateAppletResource"},
|
{0, &IHidServer::CreateAppletResource, "CreateAppletResource"},
|
||||||
{1, &IHidServer::ActivateDebugPad, "ActivateDebugPad"},
|
{1, &IHidServer::ActivateDebugPad, "ActivateDebugPad"},
|
||||||
{11, &IHidServer::ActivateTouchScreen, "ActivateTouchScreen"},
|
{11, &IHidServer::ActivateTouchScreen, "ActivateTouchScreen"},
|
||||||
{21, &IHidServer::ActivateMouse, "ActivateMouse"},
|
{21, &IHidServer::ActivateMouse, "ActivateMouse"},
|
||||||
{26, nullptr, "ActivateDebugMouse"},
|
{26, &IHidServer::ActivateDebugMouse, "ActivateDebugMouse"},
|
||||||
{31, &IHidServer::ActivateKeyboard, "ActivateKeyboard"},
|
{31, &IHidServer::ActivateKeyboard, "ActivateKeyboard"},
|
||||||
{32, &IHidServer::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"},
|
{32, &IHidServer::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"},
|
||||||
{40, &IHidServer::AcquireXpadIdEventHandle, "AcquireXpadIdEventHandle"},
|
{40, &IHidServer::AcquireXpadIdEventHandle, "AcquireXpadIdEventHandle"},
|
||||||
|
@ -258,7 +260,7 @@ void IHidServer::ActivateDebugPad(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto debug_pad = GetResourceManager()->GetDebugPad();
|
auto debug_pad = GetResourceManager()->GetDebugPad();
|
||||||
|
|
||||||
if (IsDeviceManaged()) {
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
result = debug_pad->Activate(applet_resource_user_id);
|
result = debug_pad->Activate(applet_resource_user_id);
|
||||||
} else {
|
} else {
|
||||||
result = debug_pad->Activate();
|
result = debug_pad->Activate();
|
||||||
|
@ -277,7 +279,7 @@ void IHidServer::ActivateTouchScreen(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto touch_screen = GetResourceManager()->GetTouchScreen();
|
auto touch_screen = GetResourceManager()->GetTouchScreen();
|
||||||
|
|
||||||
if (IsDeviceManaged()) {
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
result = touch_screen->Activate(applet_resource_user_id);
|
result = touch_screen->Activate(applet_resource_user_id);
|
||||||
} else {
|
} else {
|
||||||
result = touch_screen->Activate();
|
result = touch_screen->Activate();
|
||||||
|
@ -296,7 +298,26 @@ void IHidServer::ActivateMouse(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto mouse = GetResourceManager()->GetMouse();
|
auto mouse = GetResourceManager()->GetMouse();
|
||||||
|
|
||||||
if (IsDeviceManaged()) {
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
|
result = mouse->Activate(applet_resource_user_id);
|
||||||
|
} else {
|
||||||
|
result = mouse->Activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::ActivateDebugMouse(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
||||||
|
|
||||||
|
Result result = ResultSuccess;
|
||||||
|
auto mouse = GetResourceManager()->GetDebugMouse();
|
||||||
|
|
||||||
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
result = mouse->Activate(applet_resource_user_id);
|
result = mouse->Activate(applet_resource_user_id);
|
||||||
} else {
|
} else {
|
||||||
result = mouse->Activate();
|
result = mouse->Activate();
|
||||||
|
@ -315,7 +336,7 @@ void IHidServer::ActivateKeyboard(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto keyboard = GetResourceManager()->GetKeyboard();
|
auto keyboard = GetResourceManager()->GetKeyboard();
|
||||||
|
|
||||||
if (IsDeviceManaged()) {
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
result = keyboard->Activate(applet_resource_user_id);
|
result = keyboard->Activate(applet_resource_user_id);
|
||||||
} else {
|
} else {
|
||||||
result = keyboard->Activate();
|
result = keyboard->Activate();
|
||||||
|
@ -325,7 +346,20 @@ void IHidServer::ActivateKeyboard(HLERequestContext& ctx) {
|
||||||
rb.Push(result);
|
rb.Push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::SendKeyboardLockKeyEvent(HLERequestContext& ctx) {}
|
void IHidServer::SendKeyboardLockKeyEvent(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto keyboard_lock_key_event{rp.Pop<u32>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_INFO(Service_HID, "called, keyboard_lock_key_event={}, applet_resource_user_id={}",
|
||||||
|
keyboard_lock_key_event, applet_resource_user_id);
|
||||||
|
|
||||||
|
const Result result =
|
||||||
|
GetResourceManager()->GetKeyboard()->SendKeyboardLockKeyEvent(keyboard_lock_key_event);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
void IHidServer::AcquireXpadIdEventHandle(HLERequestContext& ctx) {
|
void IHidServer::AcquireXpadIdEventHandle(HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
|
@ -978,13 +1012,13 @@ void IHidServer::IsSixAxisSensorAtRest(HLERequestContext& ctx) {
|
||||||
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
||||||
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
// const auto npad = GetResourceManager()->GetNpad();
|
const auto sixaxis_sensor_state =
|
||||||
// const auto sixaxis = npad()->GetNpadSharedMemory(parameters.sixaxis_handle);
|
GetResourceManager()->GetNpad()->GetSixAxisSensorState(parameters.sixaxis_handle);
|
||||||
// const bool is_at_rest = sixaxis->IsAtRest();
|
const bool is_at_rest = sixaxis_sensor_state.IsAtRest();
|
||||||
|
|
||||||
// IPC::ResponseBuilder rb{ctx, 3};
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
// rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
// rb.Push<u8>(is_at_rest);
|
rb.Push<u8>(is_at_rest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::IsFirmwareUpdateAvailableForSixAxisSensor(HLERequestContext& ctx) {
|
void IHidServer::IsFirmwareUpdateAvailableForSixAxisSensor(HLERequestContext& ctx) {
|
||||||
|
@ -1094,20 +1128,21 @@ void IHidServer::StoreSixAxisSensorCalibrationParameter(HLERequestContext& ctx)
|
||||||
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
||||||
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
// SixAxisSensorCalibrationParameter calibration{};
|
const auto sixaxis_config =
|
||||||
// const auto npad = GetResourceManager()->GetNpad();
|
GetResourceManager()->GetNpad()->GetSixAxisSensorConfig(parameters.sixaxis_handle);
|
||||||
// const auto sixaxis = npad()->GetNpadSharedMemory(parameters.sixaxis_handle);
|
|
||||||
|
|
||||||
// if (sixaxis == nullptr) {
|
if (sixaxis_config == nullptr) {
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(ResultUnknown108);
|
rb.Push(ResultUnknown108);
|
||||||
// }
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// memcpy(&calibration, buffer.data(), sizeof(SixAxisSensorCalibrationParameter));
|
SixAxisSensorCalibrationParameter calibration{};
|
||||||
// const auto result = sixaxis.StoreSixAxisSensorCalibrationParameter(calibration);
|
memcpy(&calibration, buffer.data(), sizeof(SixAxisSensorCalibrationParameter));
|
||||||
|
const auto result = ResultSuccess; // sixaxis_config.StoreSixAxisSensorCalibrationParameter(calibration);
|
||||||
|
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(result);
|
rb.Push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::LoadSixAxisSensorCalibrationParameter(HLERequestContext& ctx) {
|
void IHidServer::LoadSixAxisSensorCalibrationParameter(HLERequestContext& ctx) {
|
||||||
|
@ -1127,23 +1162,25 @@ void IHidServer::LoadSixAxisSensorCalibrationParameter(HLERequestContext& ctx) {
|
||||||
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
||||||
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
// SixAxisSensorCalibrationParameter calibration{};
|
const auto sixaxis_config =
|
||||||
// const auto npad = GetResourceManager()->GetNpad();
|
GetResourceManager()->GetNpad()->GetSixAxisSensorConfig(parameters.sixaxis_handle);
|
||||||
// const auto sixaxis = npad()->GetNpadSharedMemory(parameters.sixaxis_handle);
|
|
||||||
|
|
||||||
// if (sixaxis == nullptr) {
|
if (sixaxis_config == nullptr) {
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(ResultUnknown108);
|
rb.Push(ResultUnknown108);
|
||||||
// }
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// const auto result = sixaxis.LoadSixAxisSensorCalibrationParameter(calibration);
|
SixAxisSensorCalibrationParameter calibration{};
|
||||||
|
const auto result =
|
||||||
|
ResultSuccess; // sixaxis_config.LoadSixAxisSensorCalibrationParameter(calibration);
|
||||||
|
|
||||||
// if (result.IsSuccess()) {
|
if (result.IsSuccess()) {
|
||||||
// ctx.WriteBuffer(calibration);
|
ctx.WriteBuffer(calibration);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(result);
|
rb.Push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::GetSixAxisSensorIcInformation(HLERequestContext& ctx) {
|
void IHidServer::GetSixAxisSensorIcInformation(HLERequestContext& ctx) {
|
||||||
|
@ -1163,23 +1200,24 @@ void IHidServer::GetSixAxisSensorIcInformation(HLERequestContext& ctx) {
|
||||||
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
|
||||||
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
// SixAxisSensorIcInformation ic_information{};
|
const auto sixaxis_config =
|
||||||
// const auto npad = GetResourceManager()->GetNpad();
|
GetResourceManager()->GetNpad()->GetSixAxisSensorConfig(parameters.sixaxis_handle);
|
||||||
// const auto sixaxis = npad()->GetNpadSharedMemory(parameters.sixaxis_handle);
|
|
||||||
|
|
||||||
// if (sixaxis == nullptr) {
|
if (sixaxis_config == nullptr) {
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(ResultUnknown108);
|
rb.Push(ResultUnknown108);
|
||||||
// }
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// const auto result = sixaxis.GetSixAxisSensorIcInformation(ic_information);
|
SixAxisSensorIcInformation ic_information{};
|
||||||
|
const auto result = ResultSuccess; // sixaxis.GetSixAxisSensorIcInformation(ic_information);
|
||||||
|
|
||||||
// if (result.IsSuccess()) {
|
if (result.IsSuccess()) {
|
||||||
// ctx.WriteBuffer(ic_information);
|
ctx.WriteBuffer(ic_information);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
// rb.Push(result);
|
rb.Push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::ResetIsSixAxisSensorDeviceNewlyAssigned(HLERequestContext& ctx) {
|
void IHidServer::ResetIsSixAxisSensorDeviceNewlyAssigned(HLERequestContext& ctx) {
|
||||||
|
@ -1224,7 +1262,7 @@ void IHidServer::ActivateGesture(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto gesture = GetResourceManager()->GetGesture();
|
auto gesture = GetResourceManager()->GetGesture();
|
||||||
|
|
||||||
if (IsDeviceManaged()) {
|
if (firmware_settings->IsDeviceManaged()) {
|
||||||
result = gesture->Activate(parameters.applet_resource_user_id, parameters.basic_gesture_id);
|
result = gesture->Activate(parameters.applet_resource_user_id, parameters.basic_gesture_id);
|
||||||
} else {
|
} else {
|
||||||
result = gesture->Activate();
|
result = gesture->Activate();
|
||||||
|
@ -2128,7 +2166,7 @@ void IHidServer::ActivateConsoleSixAxisSensor(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
|
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
|
||||||
|
|
||||||
// if (IsDeviceManaged()) {
|
// if (firmware_settings->IsDeviceManaged()) {
|
||||||
// result = sixaxis->Activate(applet_resource_user_id);
|
// result = sixaxis->Activate(applet_resource_user_id);
|
||||||
// } else {
|
// } else {
|
||||||
// result = sixaxis->Activate();
|
// result = sixaxis->Activate();
|
||||||
|
@ -2177,7 +2215,7 @@ void IHidServer::ActivateSevenSixAxisSensor(HLERequestContext& ctx) {
|
||||||
Result result = ResultSuccess;
|
Result result = ResultSuccess;
|
||||||
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
|
auto sixaxis = GetResourceManager()->GetConsoleSixAxis();
|
||||||
|
|
||||||
// if (IsDeviceManaged()) {
|
// if (firmware_settings->IsDeviceManaged()) {
|
||||||
// result = sixaxis->Activate(applet_resource_user_id);
|
// result = sixaxis->Activate(applet_resource_user_id);
|
||||||
// } else {
|
// } else {
|
||||||
// result = sixaxis->Activate();
|
// result = sixaxis->Activate();
|
||||||
|
@ -2854,89 +2892,8 @@ void IHidServer::IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx) {
|
||||||
|
|
||||||
void IHidServer::ActivateDigitizer(HLERequestContext& ctx) {}
|
void IHidServer::ActivateDigitizer(HLERequestContext& ctx) {}
|
||||||
|
|
||||||
bool IHidServer::IsDeviceManaged() {
|
|
||||||
InitializeDebugSettings();
|
|
||||||
return is_device_managed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IHidServer::InitializeDebugSettings() {
|
|
||||||
if (is_debug_settings_initalized) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: uncomment this code when we can talk between services
|
|
||||||
|
|
||||||
is_debugpad_enabled = true;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&is_debugpad_enabled, 1, "hid_debug",
|
|
||||||
// "enables_debugpad")
|
|
||||||
|
|
||||||
is_device_managed = true;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&is_device_managed, 1, "hid_debug",
|
|
||||||
// "manages_devices");
|
|
||||||
|
|
||||||
is_touch_i2c_managed = is_device_managed;
|
|
||||||
if (is_device_managed) {
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_manages_touch_ic_i2c, 1,
|
|
||||||
// "hid_debug", "manages_touch_ic_i2c");
|
|
||||||
}
|
|
||||||
|
|
||||||
is_future_devices_emulated = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_emulate_future_device, 1,
|
|
||||||
// "hid_debug", "emulate_future_device");
|
|
||||||
|
|
||||||
is_mcu_hardware_error_emulated = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_emulate_mcu_hardware_error, 1,
|
|
||||||
// "hid_debug", "emulate_mcu_hardware_error");
|
|
||||||
|
|
||||||
is_rail_enabled = true;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_enables_rail, 1, "hid_debug",
|
|
||||||
// "enables_rail");
|
|
||||||
|
|
||||||
is_firmware_update_failure_emulated = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(setting_hid_debug_emulate_firmware_update_failure,
|
|
||||||
// 1, "hid_debug", "emulate_firmware_update_failure");
|
|
||||||
|
|
||||||
is_firmware_update_failure = {};
|
|
||||||
if (is_firmware_update_failure_emulated) {
|
|
||||||
const std::size_t size = 0; // GetSettingsItemValueSize("hid_debug",
|
|
||||||
// "firmware_update_failure"); if (size != 0) {
|
|
||||||
[[maybe_unused]] const std::size_t setting_size =
|
|
||||||
std::min(size, is_firmware_update_failure.size());
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&is_firmware_update_failure, setting_size,
|
|
||||||
// "hid_debug", "firmware_update_failure");
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
is_ble_disabled = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_ble_disabled, 1, "hid_debug",
|
|
||||||
// "ble_disabled");
|
|
||||||
|
|
||||||
is_dscale_disabled = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&setting_hid_debug_dscale_disabled, 1, "hid_debug",
|
|
||||||
// "dscale_disabled");
|
|
||||||
|
|
||||||
is_handheld_forced = true;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&force_handheld, 1, "hid_debug", "force_handheld");
|
|
||||||
|
|
||||||
is_features_per_id_disabled = {};
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(&disabled_features_per_id,
|
|
||||||
// is_features_per_id_disabled.size(), "hid_debug",
|
|
||||||
// "disabled_features_per_id");
|
|
||||||
|
|
||||||
is_touch_firmware_auto_update_disabled = false;
|
|
||||||
// nn::settings::fwdbg::GetSettingsItemValue(
|
|
||||||
// &setting_hid_debug_touch_firmware_auto_update_disabled, 1, "hid_debug",
|
|
||||||
// "touch_firmware_auto_update_disabled");
|
|
||||||
|
|
||||||
is_debug_settings_initalized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> IHidServer::GetResourceManager() {
|
std::shared_ptr<ResourceManager> IHidServer::GetResourceManager() {
|
||||||
if (!is_resource_manager_initialized) {
|
resource_manager->VerifiyInitalization();
|
||||||
resource_manager->Initialize();
|
|
||||||
is_resource_manager_initialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return resource_manager;
|
return resource_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ struct VibrationDeviceHandle;
|
||||||
struct VibrationValue;
|
struct VibrationValue;
|
||||||
|
|
||||||
class ResourceManager;
|
class ResourceManager;
|
||||||
|
class HidFirmwareSettings;
|
||||||
} // namespace Service::HID
|
} // namespace Service::HID
|
||||||
|
|
||||||
namespace Service::HID {
|
namespace Service::HID {
|
||||||
|
@ -41,15 +42,16 @@ private:
|
||||||
|
|
||||||
class IHidServer final : public ServiceFramework<IHidServer> {
|
class IHidServer final : public ServiceFramework<IHidServer> {
|
||||||
public:
|
public:
|
||||||
explicit IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> resource);
|
explicit IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> resource,
|
||||||
|
std::shared_ptr<HidFirmwareSettings> settings);
|
||||||
~IHidServer() override;
|
~IHidServer() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Service calls
|
|
||||||
void CreateAppletResource(HLERequestContext& ctx);
|
void CreateAppletResource(HLERequestContext& ctx);
|
||||||
void ActivateDebugPad(HLERequestContext& ctx);
|
void ActivateDebugPad(HLERequestContext& ctx);
|
||||||
void ActivateTouchScreen(HLERequestContext& ctx);
|
void ActivateTouchScreen(HLERequestContext& ctx);
|
||||||
void ActivateMouse(HLERequestContext& ctx);
|
void ActivateMouse(HLERequestContext& ctx);
|
||||||
|
void ActivateDebugMouse(HLERequestContext& ctx);
|
||||||
void ActivateKeyboard(HLERequestContext& ctx);
|
void ActivateKeyboard(HLERequestContext& ctx);
|
||||||
void SendKeyboardLockKeyEvent(HLERequestContext& ctx);
|
void SendKeyboardLockKeyEvent(HLERequestContext& ctx);
|
||||||
void AcquireXpadIdEventHandle(HLERequestContext& ctx);
|
void AcquireXpadIdEventHandle(HLERequestContext& ctx);
|
||||||
|
@ -189,31 +191,11 @@ private:
|
||||||
Result SendVibrationValueImpl(const u64 aruid, const VibrationDeviceHandle& handle,
|
Result SendVibrationValueImpl(const u64 aruid, const VibrationDeviceHandle& handle,
|
||||||
const VibrationValue& value);
|
const VibrationValue& value);
|
||||||
|
|
||||||
bool IsDeviceManaged();
|
|
||||||
void InitializeDebugSettings();
|
|
||||||
std::shared_ptr<ResourceManager> GetResourceManager();
|
std::shared_ptr<ResourceManager> GetResourceManager();
|
||||||
|
|
||||||
// Server state
|
|
||||||
bool is_debug_settings_initalized{};
|
|
||||||
bool is_resource_manager_initialized{};
|
|
||||||
|
|
||||||
// Debug settings
|
|
||||||
bool is_debugpad_enabled{};
|
|
||||||
bool is_device_managed{};
|
|
||||||
bool is_touch_i2c_managed{};
|
|
||||||
bool is_future_devices_emulated{};
|
|
||||||
bool is_mcu_hardware_error_emulated{};
|
|
||||||
bool is_rail_enabled{};
|
|
||||||
bool is_firmware_update_failure_emulated{};
|
|
||||||
std::array<u8, 4> is_firmware_update_failure{};
|
|
||||||
bool is_ble_disabled{};
|
|
||||||
bool is_dscale_disabled{};
|
|
||||||
bool is_handheld_forced{};
|
|
||||||
std::array<bool, 0xA8> is_features_per_id_disabled{};
|
|
||||||
bool is_touch_firmware_auto_update_disabled{};
|
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
||||||
std::shared_ptr<IAppletResource> applet_resource = nullptr;
|
std::shared_ptr<IAppletResource> applet_resource = nullptr;
|
||||||
|
std::shared_ptr<HidFirmwareSettings> firmware_settings = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Service::HID
|
} // namespace Service::HID
|
||||||
|
|
|
@ -396,11 +396,7 @@ void IHidSystemServer::GetTouchScreenDefaultConfiguration(HLERequestContext& ctx
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> IHidSystemServer::GetResourceManager() {
|
std::shared_ptr<ResourceManager> IHidSystemServer::GetResourceManager() {
|
||||||
if (!is_resource_manager_initialized) {
|
resource_manager->VerifiyInitalization();
|
||||||
resource_manager->Initialize();
|
|
||||||
is_resource_manager_initialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return resource_manager;
|
return resource_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,6 @@ private:
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> GetResourceManager();
|
std::shared_ptr<ResourceManager> GetResourceManager();
|
||||||
|
|
||||||
bool is_resource_manager_initialized{};
|
|
||||||
|
|
||||||
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
std::shared_ptr<ResourceManager> resource_manager = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,14 @@ void ResourceManager::Initialize() {
|
||||||
palma = std::make_shared<Palma>();
|
palma = std::make_shared<Palma>();
|
||||||
sixaxis = std::make_shared<SixAxis>();
|
sixaxis = std::make_shared<SixAxis>();
|
||||||
touch_screen = std::make_shared<TouchScreen>();
|
touch_screen = std::make_shared<TouchScreen>();
|
||||||
|
|
||||||
|
is_initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResourceManager::VerifiyInitalization() {
|
||||||
|
if (!is_initialized) {
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ResourceManager::GetVibrationDeviceInfo(VibrationDeviceInfo& out_device_info,
|
Result ResourceManager::GetVibrationDeviceInfo(VibrationDeviceInfo& out_device_info,
|
||||||
|
@ -182,6 +190,10 @@ std::shared_ptr<Mouse> ResourceManager::GetMouse() {
|
||||||
return mouse;
|
return mouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Mouse> ResourceManager::GetDebugMouse() {
|
||||||
|
return debug_mouse;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Npad> ResourceManager::GetNpad() {
|
std::shared_ptr<Npad> ResourceManager::GetNpad() {
|
||||||
return npad;
|
return npad;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ public:
|
||||||
~ResourceManager();
|
~ResourceManager();
|
||||||
|
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
void VerifiyInitalization();
|
||||||
|
|
||||||
Result GetVibrationDeviceInfo(VibrationDeviceInfo& out_device_info,
|
Result GetVibrationDeviceInfo(VibrationDeviceInfo& out_device_info,
|
||||||
const VibrationDeviceHandle& handle) const;
|
const VibrationDeviceHandle& handle) const;
|
||||||
|
@ -42,6 +43,7 @@ public:
|
||||||
std::shared_ptr<Gesture> GetGesture();
|
std::shared_ptr<Gesture> GetGesture();
|
||||||
std::shared_ptr<Keyboard> GetKeyboard();
|
std::shared_ptr<Keyboard> GetKeyboard();
|
||||||
std::shared_ptr<Mouse> GetMouse();
|
std::shared_ptr<Mouse> GetMouse();
|
||||||
|
std::shared_ptr<Mouse> GetDebugMouse();
|
||||||
std::shared_ptr<Npad> GetNpad();
|
std::shared_ptr<Npad> GetNpad();
|
||||||
std::shared_ptr<Palma> GetPalma();
|
std::shared_ptr<Palma> GetPalma();
|
||||||
std::shared_ptr<SixAxis> GetSixAxis();
|
std::shared_ptr<SixAxis> GetSixAxis();
|
||||||
|
@ -52,10 +54,13 @@ public:
|
||||||
std::shared_ptr<Vibration> GetGCVibration(const VibrationDeviceHandle& handle);
|
std::shared_ptr<Vibration> GetGCVibration(const VibrationDeviceHandle& handle);
|
||||||
std::shared_ptr<Vibration> GetN64Vibration(const VibrationDeviceHandle& handle);
|
std::shared_ptr<Vibration> GetN64Vibration(const VibrationDeviceHandle& handle);
|
||||||
|
|
||||||
|
bool is_initialized;
|
||||||
|
|
||||||
std::shared_ptr<DebugPad> debug_pad = nullptr;
|
std::shared_ptr<DebugPad> debug_pad = nullptr;
|
||||||
std::shared_ptr<Gesture> gesture = nullptr;
|
std::shared_ptr<Gesture> gesture = nullptr;
|
||||||
std::shared_ptr<Keyboard> keyboard = nullptr;
|
std::shared_ptr<Keyboard> keyboard = nullptr;
|
||||||
std::shared_ptr<Mouse> mouse = nullptr;
|
std::shared_ptr<Mouse> mouse = nullptr;
|
||||||
|
std::shared_ptr<Mouse> debug_mouse = nullptr;
|
||||||
std::shared_ptr<Npad> npad = nullptr;
|
std::shared_ptr<Npad> npad = nullptr;
|
||||||
std::shared_ptr<Palma> palma = nullptr;
|
std::shared_ptr<Palma> palma = nullptr;
|
||||||
std::shared_ptr<SixAxis> sixaxis = nullptr;
|
std::shared_ptr<SixAxis> sixaxis = nullptr;
|
||||||
|
|
|
@ -23,6 +23,8 @@ public:
|
||||||
Result Activate(const u64 aruid);
|
Result Activate(const u64 aruid);
|
||||||
Result Activate();
|
Result Activate();
|
||||||
|
|
||||||
|
Result SendKeyboardLockKeyEvent(const u32 keyboard_lock_key_event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool is_activated;
|
bool is_activated;
|
||||||
};
|
};
|
||||||
|
|
|
@ -281,6 +281,34 @@ Result Npad::ResetIsSixAxisSensorDeviceNewlyAssigned(const u64 aruid,
|
||||||
return ResultSuccess;
|
return ResultSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SixAxisSensorSharedState Npad::GetSixAxisSensorState(const SixAxisSensorHandle& handle) {
|
||||||
|
auto npad_index = NpadIdTypeToIndex(static_cast<NpadIdType>(handle.device_index));
|
||||||
|
if (!IsNpadIdValid(static_cast<NpadIdType>(handle.npad_id))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& abtract = abstract_npad_state[npad_index];
|
||||||
|
|
||||||
|
if (handle.npad_type == NpadStyleIndex::FullKey) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Implement this part
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<SixAxisSensorSharedConfig> Npad::GetSixAxisSensorConfig(const SixAxisSensorHandle& handle) {
|
||||||
|
auto npad_index = NpadIdTypeToIndex(static_cast<NpadIdType>(handle.device_index));
|
||||||
|
if (!IsNpadIdValid(static_cast<NpadIdType>(handle.npad_id))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& abtract = abstract_npad_state[npad_index];
|
||||||
|
|
||||||
|
if (handle.npad_type == NpadStyleIndex::FullKey) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
void Npad::SetNpadJoyAssignmentModeSingleByDefault(const u64 aruid, const NpadIdType npad_id) {
|
void Npad::SetNpadJoyAssignmentModeSingleByDefault(const u64 aruid, const NpadIdType npad_id) {
|
||||||
if (aruid != GetNpadActiveAruid()) {
|
if (aruid != GetNpadActiveAruid()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -40,6 +40,12 @@ class NpadState;
|
||||||
|
|
||||||
namespace Service::HID {
|
namespace Service::HID {
|
||||||
|
|
||||||
|
class SixAxisSensorSharedState {
|
||||||
|
public:
|
||||||
|
bool IsAtRest() const;
|
||||||
|
};
|
||||||
|
class SixAxisSensorSharedConfig {};
|
||||||
|
|
||||||
class AbstractNpadState {
|
class AbstractNpadState {
|
||||||
public:
|
public:
|
||||||
explicit AbstractNpadState();
|
explicit AbstractNpadState();
|
||||||
|
@ -108,6 +114,9 @@ public:
|
||||||
bool IsFirmwareUpdateAvailableForSixAxisSensor(const SixAxisSensorHandle& handle) const;
|
bool IsFirmwareUpdateAvailableForSixAxisSensor(const SixAxisSensorHandle& handle) const;
|
||||||
Result ResetIsSixAxisSensorDeviceNewlyAssigned(const u64 aruid,
|
Result ResetIsSixAxisSensorDeviceNewlyAssigned(const u64 aruid,
|
||||||
const SixAxisSensorHandle& handle);
|
const SixAxisSensorHandle& handle);
|
||||||
|
SixAxisSensorSharedState GetSixAxisSensorState(const SixAxisSensorHandle& handle);
|
||||||
|
std::shared_ptr <
|
||||||
|
SixAxisSensorSharedConfig> GetSixAxisSensorConfig(const SixAxisSensorHandle& handle);
|
||||||
|
|
||||||
// Assignment, merge, swap or split npad
|
// Assignment, merge, swap or split npad
|
||||||
void SetNpadJoyAssignmentModeSingleByDefault(const u64 aruid, const NpadIdType npad_id);
|
void SetNpadJoyAssignmentModeSingleByDefault(const u64 aruid, const NpadIdType npad_id);
|
||||||
|
|
Loading…
Reference in New Issue