end of progress day 2
This commit is contained in:
@ -8,6 +8,7 @@
|
|||||||
#include "core/hle/service/hid/hid_result.h"
|
#include "core/hle/service/hid/hid_result.h"
|
||||||
#include "core/hle/service/hid/hid_server.h"
|
#include "core/hle/service/hid/hid_server.h"
|
||||||
#include "core/hle/service/hid/hid_types.h"
|
#include "core/hle/service/hid/hid_types.h"
|
||||||
|
#include "core/hle/service/hid/hid_util.h"
|
||||||
#include "core/hle/service/hid/resource_manager.h"
|
#include "core/hle/service/hid/resource_manager.h"
|
||||||
#include "core/hle/service/hid/resource_manager/debug_pad.h"
|
#include "core/hle/service/hid/resource_manager/debug_pad.h"
|
||||||
#include "core/hle/service/hid/resource_manager/gesture.h"
|
#include "core/hle/service/hid/resource_manager/gesture.h"
|
||||||
@ -1457,14 +1458,13 @@ void IHidServer::SetNpadJoyAssignmentModeSingle(HLERequestContext& ctx) {
|
|||||||
|
|
||||||
const auto parameters{rp.PopRaw<Parameters>()};
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
|
||||||
LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
|
LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
|
||||||
parameters.npad_id, parameters.applet_resource_user_id,
|
parameters.npad_id, parameters.applet_resource_user_id,
|
||||||
parameters.npad_joy_device_type);
|
parameters.npad_joy_device_type);
|
||||||
|
|
||||||
const auto npad = GetResourceManager()->GetNpad();
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
npad->SetNpadJoyAssignmentModeSingle(
|
npad->SetNpadJoyAssignmentModeSingle(parameters.applet_resource_user_id, parameters.npad_id,
|
||||||
parameters.applet_resource_user_id, parameters.npad_id, parameters.npad_joy_device_type);
|
parameters.npad_joy_device_type);
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
@ -1485,8 +1485,7 @@ void IHidServer::SetNpadJoyAssignmentModeDual(HLERequestContext& ctx) {
|
|||||||
parameters.applet_resource_user_id);
|
parameters.applet_resource_user_id);
|
||||||
|
|
||||||
const auto npad = GetResourceManager()->GetNpad();
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
npad->SetNpadJoyAssignmentModeDual(parameters.applet_resource_user_id,
|
npad->SetNpadJoyAssignmentModeDual(parameters.applet_resource_user_id, parameters.npad_id);
|
||||||
parameters.npad_id);
|
|
||||||
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(ResultSuccess);
|
rb.Push(ResultSuccess);
|
||||||
@ -1509,17 +1508,234 @@ void IHidServer::MergeSingleJoyAsDualJoy(HLERequestContext& ctx) {
|
|||||||
rb.Push(result);
|
rb.Push(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHidServer::StartLrAssignmentMode(HLERequestContext& ctx) {}
|
void IHidServer::StartLrAssignmentMode(HLERequestContext& ctx) {
|
||||||
void IHidServer::StopLrAssignmentMode(HLERequestContext& ctx) {}
|
IPC::RequestParser rp{ctx};
|
||||||
void IHidServer::SetNpadHandheldActivationMode(HLERequestContext& ctx) {}
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
void IHidServer::GetNpadHandheldActivationMode(HLERequestContext& ctx) {}
|
|
||||||
void IHidServer::SwapNpadAssignment(HLERequestContext& ctx) {}
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
|
||||||
void IHidServer::IsUnintendedHomeButtonInputProtectionEnabled(HLERequestContext& ctx) {}
|
|
||||||
void IHidServer::EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx) {}
|
GetResourceManager()->GetNpad()->StartLrAssignmentMode(applet_resource_user_id);
|
||||||
void IHidServer::SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx) {}
|
|
||||||
void IHidServer::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) {}
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
void IHidServer::SetNpadCaptureButtonAssignment(HLERequestContext& ctx) {}
|
rb.Push(ResultSuccess);
|
||||||
void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) {}
|
}
|
||||||
|
|
||||||
|
void IHidServer::StopLrAssignmentMode(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);
|
||||||
|
|
||||||
|
GetResourceManager()->GetNpad()->StopLrAssignmentMode(applet_resource_user_id);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::SetNpadHandheldActivationMode(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
const auto activation_mode{rp.PopEnum<NpadHandheldActivationMode>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, activation_mode={}",
|
||||||
|
applet_resource_user_id, activation_mode);
|
||||||
|
|
||||||
|
if (activation_mode >= NpadHandheldActivationMode::MaxActivationMode) {
|
||||||
|
// Console should crash here
|
||||||
|
ASSERT_MSG("Activation mode should be always None, Single or Dual");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result =
|
||||||
|
npad->SetNpadHandheldActivationMode(applet_resource_user_id, activation_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::GetNpadHandheldActivationMode(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);
|
||||||
|
|
||||||
|
NpadHandheldActivationMode activation_mode{};
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result =
|
||||||
|
npad->GetNpadHandheldActivationMode(applet_resource_user_id, activation_mode);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(result);
|
||||||
|
rb.PushEnum(activation_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::SwapNpadAssignment(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto npad_id_1{rp.PopEnum<NpadIdType>()};
|
||||||
|
const auto npad_id_2{rp.PopEnum<NpadIdType>()};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}",
|
||||||
|
npad_id_1, npad_id_2, applet_resource_user_id);
|
||||||
|
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result = npad->SwapNpadAssignment(applet_resource_user_id, npad_id_1, npad_id_2);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::IsUnintendedHomeButtonInputProtectionEnabled(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
struct Parameters {
|
||||||
|
NpadIdType npad_id;
|
||||||
|
INSERT_PADDING_WORDS_NOINIT(1);
|
||||||
|
u64 applet_resource_user_id;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size.");
|
||||||
|
|
||||||
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}",
|
||||||
|
parameters.npad_id, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
|
if (!IsNpadIdValid(parameters.npad_id)) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultInvalidNpadId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_enabled{};
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result = npad->IsUnintendedHomeButtonInputProtectionEnabled(
|
||||||
|
is_enabled, parameters.applet_resource_user_id, parameters.npad_id);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(result);
|
||||||
|
rb.Push<u8>(is_enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
struct Parameters {
|
||||||
|
bool is_enabled;
|
||||||
|
INSERT_PADDING_BYTES_NOINIT(3);
|
||||||
|
NpadIdType npad_id;
|
||||||
|
u64 applet_resource_user_id;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size.");
|
||||||
|
|
||||||
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID,
|
||||||
|
"(STUBBED) called, is_enabled={}, npad_id={}, applet_resource_user_id={}",
|
||||||
|
parameters.is_enabled, parameters.npad_id, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
|
if (!IsNpadIdValid(parameters.npad_id)) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultInvalidNpadId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result = npad->EnableUnintendedHomeButtonInputProtection(
|
||||||
|
parameters.applet_resource_user_id, parameters.npad_id, parameters.is_enabled);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
struct Parameters {
|
||||||
|
NpadIdType npad_id;
|
||||||
|
INSERT_PADDING_WORDS_NOINIT(1);
|
||||||
|
u64 applet_resource_user_id;
|
||||||
|
NpadJoyDeviceType npad_joy_device_type;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(Parameters) == 0x18, "Parameters has incorrect size.");
|
||||||
|
|
||||||
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
|
||||||
|
parameters.npad_id, parameters.applet_resource_user_id,
|
||||||
|
parameters.npad_joy_device_type);
|
||||||
|
|
||||||
|
NpadIdType new_npad_id{};
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto is_reassigned = npad->SetNpadJoyAssignmentModeSingleWithDestination(
|
||||||
|
new_npad_id, parameters.applet_resource_user_id, parameters.npad_id,
|
||||||
|
parameters.npad_joy_device_type);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(is_reassigned);
|
||||||
|
rb.PushEnum(new_npad_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
struct Parameters {
|
||||||
|
bool analog_stick_use_center_clamp;
|
||||||
|
INSERT_PADDING_BYTES_NOINIT(7);
|
||||||
|
u64 applet_resource_user_id;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size.");
|
||||||
|
|
||||||
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID,
|
||||||
|
"(STUBBED) called, analog_stick_use_center_clamp={}, applet_resource_user_id={}",
|
||||||
|
parameters.analog_stick_use_center_clamp, parameters.applet_resource_user_id);
|
||||||
|
|
||||||
|
GetResourceManager()->GetNpad()->SetNpadAnalogStickUseCenterClamp(
|
||||||
|
parameters.applet_resource_user_id, parameters.analog_stick_use_center_clamp);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::SetNpadCaptureButtonAssignment(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
struct Parameters {
|
||||||
|
NpadStyleSet npad_styleset;
|
||||||
|
INSERT_PADDING_WORDS_NOINIT(1);
|
||||||
|
u64 applet_resource_user_id;
|
||||||
|
NpadButton button;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(Parameters) == 0x18, "Parameters has incorrect size.");
|
||||||
|
|
||||||
|
const auto parameters{rp.PopRaw<Parameters>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID,
|
||||||
|
"(STUBBED) called, npad_styleset={}, applet_resource_user_id={}, button={}",
|
||||||
|
parameters.npad_styleset, parameters.applet_resource_user_id, parameters.button);
|
||||||
|
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result = npad->SetNpadCaptureButtonAssignment(
|
||||||
|
parameters.applet_resource_user_id, parameters.npad_styleset, parameters.button);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
||||||
|
LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}",
|
||||||
|
applet_resource_user_id);
|
||||||
|
|
||||||
|
const auto npad = GetResourceManager()->GetNpad();
|
||||||
|
const auto result = npad->ClearNpadCaptureButtonAssignment(parameters.applet_resource_user_id);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(result);
|
||||||
|
}
|
||||||
|
|
||||||
void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) {}
|
void IHidServer::GetVibrationDeviceInfo(HLERequestContext& ctx) {}
|
||||||
void IHidServer::SendVibrationValue(HLERequestContext& ctx) {}
|
void IHidServer::SendVibrationValue(HLERequestContext& ctx) {}
|
||||||
void IHidServer::GetActualVibrationValue(HLERequestContext& ctx) {}
|
void IHidServer::GetActualVibrationValue(HLERequestContext& ctx) {}
|
||||||
|
@ -309,6 +309,14 @@ enum class NpadJoyAssignmentMode : u32 {
|
|||||||
Single = 1,
|
Single = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This is nn::hid::NpadHandheldActivationMode
|
||||||
|
enum class NpadHandheldActivationMode : u64 {
|
||||||
|
Dual = 0,
|
||||||
|
Single = 1,
|
||||||
|
None = 2,
|
||||||
|
MaxActivationMode = 3,
|
||||||
|
};
|
||||||
|
|
||||||
// This is nn::hid::NpadStyleTag
|
// This is nn::hid::NpadStyleTag
|
||||||
struct NpadStyleTag {
|
struct NpadStyleTag {
|
||||||
union {
|
union {
|
||||||
|
@ -67,7 +67,11 @@ namespace Service::HID {
|
|||||||
return player_memory;
|
return player_memory;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
ResourceManager::ResourceManager(Core::System& system_) {
|
ResourceManager::ResourceManager(Core::System& system_) {}
|
||||||
|
|
||||||
|
ResourceManager::~ResourceManager() = default;
|
||||||
|
|
||||||
|
void ResourceManager::Initialize() {
|
||||||
debug_pad = std::make_shared<DebugPad>();
|
debug_pad = std::make_shared<DebugPad>();
|
||||||
gesture = std::make_shared<Gesture>();
|
gesture = std::make_shared<Gesture>();
|
||||||
keyboard = std::make_shared<Keyboard>();
|
keyboard = std::make_shared<Keyboard>();
|
||||||
@ -78,10 +82,6 @@ ResourceManager::ResourceManager(Core::System& system_) {
|
|||||||
touch_screen = std::make_shared<TouchScreen>();
|
touch_screen = std::make_shared<TouchScreen>();
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceManager::~ResourceManager() = default;
|
|
||||||
|
|
||||||
void ResourceManager::Initialize() {}
|
|
||||||
|
|
||||||
std::shared_ptr<DebugPad> ResourceManager::GetDebugPad() {
|
std::shared_ptr<DebugPad> ResourceManager::GetDebugPad() {
|
||||||
return debug_pad;
|
return debug_pad;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user