end of progress day 2

This commit is contained in:
Narr the Reg 2023-08-13 20:55:32 -06:00
parent e6f30ed8ee
commit c45078844c
3 changed files with 245 additions and 21 deletions

View File

@ -8,6 +8,7 @@
#include "core/hle/service/hid/hid_result.h"
#include "core/hle/service/hid/hid_server.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/debug_pad.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>()};
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);
const auto npad = GetResourceManager()->GetNpad();
npad->SetNpadJoyAssignmentModeSingle(
parameters.applet_resource_user_id, parameters.npad_id, parameters.npad_joy_device_type);
npad->SetNpadJoyAssignmentModeSingle(parameters.applet_resource_user_id, parameters.npad_id,
parameters.npad_joy_device_type);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
@ -1485,8 +1485,7 @@ void IHidServer::SetNpadJoyAssignmentModeDual(HLERequestContext& ctx) {
parameters.applet_resource_user_id);
const auto npad = GetResourceManager()->GetNpad();
npad->SetNpadJoyAssignmentModeDual(parameters.applet_resource_user_id,
parameters.npad_id);
npad->SetNpadJoyAssignmentModeDual(parameters.applet_resource_user_id, parameters.npad_id);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
@ -1509,17 +1508,234 @@ void IHidServer::MergeSingleJoyAsDualJoy(HLERequestContext& ctx) {
rb.Push(result);
}
void IHidServer::StartLrAssignmentMode(HLERequestContext& ctx) {}
void IHidServer::StopLrAssignmentMode(HLERequestContext& ctx) {}
void IHidServer::SetNpadHandheldActivationMode(HLERequestContext& ctx) {}
void IHidServer::GetNpadHandheldActivationMode(HLERequestContext& ctx) {}
void IHidServer::SwapNpadAssignment(HLERequestContext& ctx) {}
void IHidServer::IsUnintendedHomeButtonInputProtectionEnabled(HLERequestContext& ctx) {}
void IHidServer::EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx) {}
void IHidServer::SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx) {}
void IHidServer::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) {}
void IHidServer::SetNpadCaptureButtonAssignment(HLERequestContext& ctx) {}
void IHidServer::ClearNpadCaptureButtonAssignment(HLERequestContext& ctx) {}
void IHidServer::StartLrAssignmentMode(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()->StartLrAssignmentMode(applet_resource_user_id);
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
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::SendVibrationValue(HLERequestContext& ctx) {}
void IHidServer::GetActualVibrationValue(HLERequestContext& ctx) {}

View File

@ -309,6 +309,14 @@ enum class NpadJoyAssignmentMode : u32 {
Single = 1,
};
// This is nn::hid::NpadHandheldActivationMode
enum class NpadHandheldActivationMode : u64 {
Dual = 0,
Single = 1,
None = 2,
MaxActivationMode = 3,
};
// This is nn::hid::NpadStyleTag
struct NpadStyleTag {
union {

View File

@ -67,7 +67,11 @@ namespace Service::HID {
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>();
gesture = std::make_shared<Gesture>();
keyboard = std::make_shared<Keyboard>();
@ -78,10 +82,6 @@ ResourceManager::ResourceManager(Core::System& system_) {
touch_screen = std::make_shared<TouchScreen>();
}
ResourceManager::~ResourceManager() = default;
void ResourceManager::Initialize() {}
std::shared_ptr<DebugPad> ResourceManager::GetDebugPad() {
return debug_pad;
}