From 6a0ef7de681b41243e1375bb4bad43e37d3cbad5 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Mon, 21 Aug 2023 18:09:19 -0600 Subject: [PATCH] rest --- src/core/hle/service/hid/hid_server.cpp | 46 ++++++++---- src/core/hle/service/hid/hid_server.h | 13 ++++ .../hle/service/hid/hid_system_server.cpp | 73 ++++++++++++++++--- src/core/hle/service/hid/hid_system_server.h | 3 + src/core/hle/service/hid/hid_types.h | 3 + .../resource_manager/npad_resource/npad.cpp | 10 +++ .../hid/resource_manager/npad_resource/npad.h | 1 + 7 files changed, 127 insertions(+), 22 deletions(-) diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp index 6b12b9c7b..818c0f6d9 100644 --- a/src/core/hle/service/hid/hid_server.cpp +++ b/src/core/hle/service/hid/hid_server.cpp @@ -80,7 +80,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr r {21, &IHidServer::ActivateMouse, "ActivateMouse"}, {26, nullptr, "ActivateDebugMouse"}, {31, &IHidServer::ActivateKeyboard, "ActivateKeyboard"}, - {32, nullptr, "SendKeyboardLockKeyEvent"}, + {32, &IHidServer::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"}, {40, &IHidServer::AcquireXpadIdEventHandle, "AcquireXpadIdEventHandle"}, {41, &IHidServer::ReleaseXpadIdEventHandle, "ReleaseXpadIdEventHandle"}, {51, &IHidServer::ActivateXpad, "ActivateXpad"}, @@ -166,18 +166,18 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr r {305, &IHidServer::StopSevenSixAxisSensor, "StopSevenSixAxisSensor"}, {306, &IHidServer::InitializeSevenSixAxisSensor, "InitializeSevenSixAxisSensor"}, {307, &IHidServer::FinalizeSevenSixAxisSensor, "FinalizeSevenSixAxisSensor"}, - {308, nullptr, "SetSevenSixAxisSensorFusionStrength"}, - {309, nullptr, "GetSevenSixAxisSensorFusionStrength"}, + {308, &IHidServer::SetSevenSixAxisSensorFusionStrength, "SetSevenSixAxisSensorFusionStrength"}, + {309, &IHidServer::GetSevenSixAxisSensorFusionStrength, "GetSevenSixAxisSensorFusionStrength"}, {310, &IHidServer::ResetSevenSixAxisSensorTimestamp, "ResetSevenSixAxisSensorTimestamp"}, - {400, nullptr, "IsUsbFullKeyControllerEnabled"}, - {401, nullptr, "EnableUsbFullKeyController"}, - {402, nullptr, "IsUsbFullKeyControllerConnected"}, - {403, nullptr, "HasBattery"}, - {404, nullptr, "HasLeftRightBattery"}, - {405, nullptr, "GetNpadInterfaceType"}, - {406, nullptr, "GetNpadLeftRightInterfaceType"}, - {407, nullptr, "GetNpadOfHighestBatteryLevel"}, - {408, nullptr, "GetNpadOfHighestBatteryLevelForJoyRight"}, + {400, &IHidServer::IsUsbFullKeyControllerEnabled, "IsUsbFullKeyControllerEnabled"}, + {401, &IHidServer::EnableUsbFullKeyController, "EnableUsbFullKeyController"}, + {402, &IHidServer::IsUsbFullKeyControllerConnected, "IsUsbFullKeyControllerConnected"}, + {403, &IHidServer::HasBattery, "HasBattery"}, + {404, &IHidServer::HasLeftRightBattery, "HasLeftRightBattery"}, + {405, &IHidServer::GetNpadInterfaceType, "GetNpadInterfaceType"}, + {406, &IHidServer::GetNpadLeftRightInterfaceType, "GetNpadLeftRightInterfaceType"}, + {407, &IHidServer::GetNpadOfHighestBatteryLevel, "GetNpadOfHighestBatteryLevel"}, + {408, &IHidServer::GetNpadOfHighestBatteryLevelForJoyRight, "GetNpadOfHighestBatteryLevelForJoyRight"}, {500, &IHidServer::GetPalmaConnectionHandle, "GetPalmaConnectionHandle"}, {501, &IHidServer::InitializePalma, "InitializePalma"}, {502, &IHidServer::AcquirePalmaOperationCompleteEvent, "AcquirePalmaOperationCompleteEvent"}, @@ -212,7 +212,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr r {1001, &IHidServer::GetNpadCommunicationMode, "GetNpadCommunicationMode"}, {1002, &IHidServer::SetTouchScreenConfiguration, "SetTouchScreenConfiguration"}, {1003, &IHidServer::IsFirmwareUpdateNeededForNotification, "IsFirmwareUpdateNeededForNotification"}, - {2000, nullptr, "ActivateDigitizer"}, + {2000, &IHidServer::ActivateDigitizer, "ActivateDigitizer"}, {3000, nullptr, "GetDebugPadGenericPadMap"}, {3001, nullptr, "SetDebugPadGenericPadMap"}, {3002, nullptr, "ResetDebugPadGenericPadMap"}, @@ -241,6 +241,7 @@ void IHidServer::CreateAppletResource(HLERequestContext& ctx) { if (applet_resource == nullptr) { applet_resource = std::make_shared(system); + applet_resource->Initialize(); } IPC::ResponseBuilder rb{ctx, 2, 0, 1}; @@ -324,6 +325,9 @@ void IHidServer::ActivateKeyboard(HLERequestContext& ctx) { rb.Push(result); } +void IHidServer::SendKeyboardLockKeyEvent(HLERequestContext& ctx) { +} + void IHidServer::AcquireXpadIdEventHandle(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto applet_resource_user_id{rp.Pop()}; @@ -2232,6 +2236,9 @@ void IHidServer::FinalizeSevenSixAxisSensor(HLERequestContext& ctx) { rb.Push(ResultSuccess); } +void IHidServer::ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx) {} +void IHidServer::IsUsbFullKeyControllerEnabled(HLERequestContext& ctx) {} + void IHidServer::ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx) {} void IHidServer::IsUsbFullKeyControllerEnabled(HLERequestContext& ctx) { @@ -2268,6 +2275,15 @@ void IHidServer::GetPalmaConnectionHandle(HLERequestContext& ctx) { rb.PushRaw(handle); } +void IHidServer::EnableUsbFullKeyController(HLERequestContext& ctx) {} +void IHidServer::IsUsbFullKeyControllerConnected(HLERequestContext& ctx) {} +void IHidServer::HasBattery(HLERequestContext& ctx) {} +void IHidServer::HasLeftRightBattery(HLERequestContext& ctx) {} +void IHidServer::GetNpadInterfaceType(HLERequestContext& ctx) {} +void IHidServer::GetNpadLeftRightInterfaceType(HLERequestContext& ctx) {} +void IHidServer::GetNpadOfHighestBatteryLevel(HLERequestContext& ctx) {} +void IHidServer::GetNpadOfHighestBatteryLevelForJoyRight(HLERequestContext& ctx) {} + void IHidServer::InitializePalma(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto connection_handle{rp.PopRaw()}; @@ -2837,6 +2853,10 @@ void IHidServer::IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx) { rb.Push(needs_update); } +void IHidServer::ActivateDigitizer(HLERequestContext& ctx) { + +} + bool IHidServer::IsDeviceManaged() { InitializeDebugSettings(); return is_device_managed; diff --git a/src/core/hle/service/hid/hid_server.h b/src/core/hle/service/hid/hid_server.h index 0e3f7fe76..ac70ca9bc 100644 --- a/src/core/hle/service/hid/hid_server.h +++ b/src/core/hle/service/hid/hid_server.h @@ -51,6 +51,7 @@ private: void ActivateTouchScreen(HLERequestContext& ctx); void ActivateMouse(HLERequestContext& ctx); void ActivateKeyboard(HLERequestContext& ctx); + void SendKeyboardLockKeyEvent(HLERequestContext& ctx); void AcquireXpadIdEventHandle(HLERequestContext& ctx); void ReleaseXpadIdEventHandle(HLERequestContext& ctx); void ActivateXpad(HLERequestContext& ctx); @@ -136,8 +137,18 @@ private: void StopSevenSixAxisSensor(HLERequestContext& ctx); void InitializeSevenSixAxisSensor(HLERequestContext& ctx); void FinalizeSevenSixAxisSensor(HLERequestContext& ctx); + void SetSevenSixAxisSensorFusionStrength(HLERequestContext& ctx); + void GetSevenSixAxisSensorFusionStrength(HLERequestContext& ctx); void ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx); void IsUsbFullKeyControllerEnabled(HLERequestContext& ctx); + void EnableUsbFullKeyController(HLERequestContext& ctx); + void IsUsbFullKeyControllerConnected(HLERequestContext& ctx); + void HasBattery(HLERequestContext& ctx); + void HasLeftRightBattery(HLERequestContext& ctx); + void GetNpadInterfaceType(HLERequestContext& ctx); + void GetNpadLeftRightInterfaceType(HLERequestContext& ctx); + void GetNpadOfHighestBatteryLevel(HLERequestContext& ctx); + void GetNpadOfHighestBatteryLevelForJoyRight(HLERequestContext& ctx); void GetPalmaConnectionHandle(HLERequestContext& ctx); void InitializePalma(HLERequestContext& ctx); void AcquirePalmaOperationCompleteEvent(HLERequestContext& ctx); @@ -172,7 +183,9 @@ private: void GetNpadCommunicationMode(HLERequestContext& ctx); void SetTouchScreenConfiguration(HLERequestContext& ctx); void IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx); + void ActivateDigitizer(HLERequestContext& ctx); +private: Result SendVibrationValueImpl(const u64 aruid, const VibrationDeviceHandle& handle, const VibrationValue& value); diff --git a/src/core/hle/service/hid/hid_system_server.cpp b/src/core/hle/service/hid/hid_system_server.cpp index 9bb3e1bb8..85083f541 100644 --- a/src/core/hle/service/hid/hid_system_server.cpp +++ b/src/core/hle/service/hid/hid_system_server.cpp @@ -6,6 +6,7 @@ #include "core/hle/service/hid/hid_system_server.h" #include "core/hle/service/hid/resource_manager.h" #include "core/hle/service/hid/resource_manager/npad_resource/npad.h" +#include "core/hle/service/hid/resource_manager/touch_screen.h" #include "core/hle/service/ipc_helpers.h" namespace Service::HID { @@ -36,11 +37,11 @@ IHidSystemServer::IHidSystemServer(Core::System& system_, std::shared_ptrGetNpad()->GetLastActiveNpad(npad_id); + + LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); + + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(result); + rb.PushEnum(ResultSuccess); +} + void IHidSystemServer::ApplyNpadSystemCommonPolicyFull(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto applet_resource_user_id{rp.Pop()}; @@ -340,6 +352,49 @@ void IHidSystemServer::GetVibrationMasterVolume(HLERequestContext& ctx) { rb.Push(volume); } +void IHidSystemServer::SetTouchScreenDefaultConfiguration(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + auto touch_screen_configuration{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, mode={}", touch_screen_configuration.mode); + + switch (touch_screen_configuration.mode) { + case TouchScreenModeForNx::UseSystemSetting: + case TouchScreenModeForNx::Finger: + case TouchScreenModeForNx::Heat2: + break; + default: + touch_screen_configuration.mode = TouchScreenModeForNx::UseSystemSetting; + } + + const Result result = GetResourceManager()->GetTouchScreen()->SetTouchScreenConfiguration( + touch_screen_configuration); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidSystemServer::GetTouchScreenDefaultConfiguration(HLERequestContext& ctx) { + LOG_WARNING(Service_HID, "(STUBBED) called"); + + TouchScreenConfigurationForNx touch_screen_configuration{}; + const Result result = GetResourceManager()->GetTouchScreen()->GetTouchScreenConfiguration( + touch_screen_configuration.mode); + + switch (touch_screen_configuration.mode) { + case TouchScreenModeForNx::UseSystemSetting: + case TouchScreenModeForNx::Finger: + case TouchScreenModeForNx::Heat2: + break; + default: + touch_screen_configuration.mode = TouchScreenModeForNx::UseSystemSetting; + } + + IPC::ResponseBuilder rb{ctx, 6}; + rb.Push(ResultSuccess); + rb.PushRaw(touch_screen_configuration); +} + std::shared_ptr IHidSystemServer::GetResourceManager() { if (!is_resource_manager_initialized) { resource_manager->Initialize(); diff --git a/src/core/hle/service/hid/hid_system_server.h b/src/core/hle/service/hid/hid_system_server.h index 2b73c99a3..c948d5c83 100644 --- a/src/core/hle/service/hid/hid_system_server.h +++ b/src/core/hle/service/hid/hid_system_server.h @@ -21,12 +21,15 @@ private: void ApplyNpadSystemCommonPolicy(HLERequestContext& ctx); void EnableAssigningSingleOnSlSrPress(HLERequestContext& ctx); void DisableAssigningSingleOnSlSrPress(HLERequestContext& ctx); + void GetLastActiveNpad(HLERequestContext& ctx); void ApplyNpadSystemCommonPolicyFull(HLERequestContext& ctx); void GetMaskedSupportedNpadStyleSet(HLERequestContext& ctx); void SetSupportedNpadStyleSetAll(HLERequestContext& ctx); void GetNpadCaptureButtonAssignment(HLERequestContext& ctx); void SetVibrationMasterVolume(HLERequestContext& ctx); void GetVibrationMasterVolume(HLERequestContext& ctx); + void SetTouchScreenDefaultConfiguration(HLERequestContext& ctx); + void GetTouchScreenDefaultConfiguration(HLERequestContext& ctx); std::shared_ptr GetResourceManager(); diff --git a/src/core/hle/service/hid/hid_types.h b/src/core/hle/service/hid/hid_types.h index 345a86550..645687f62 100644 --- a/src/core/hle/service/hid/hid_types.h +++ b/src/core/hle/service/hid/hid_types.h @@ -968,4 +968,7 @@ struct TouchScreenConfigurationForNx { TouchScreenModeForNx mode{TouchScreenModeForNx::UseSystemSetting}; INSERT_PADDING_BYTES(0xF); }; +static_assert(sizeof(TouchScreenConfigurationForNx) == 0x10, + "TouchScreenConfigurationForNx has incorrect size."); + } // namespace Service::HID diff --git a/src/core/hle/service/hid/resource_manager/npad_resource/npad.cpp b/src/core/hle/service/hid/resource_manager/npad_resource/npad.cpp index c5e03be28..ffb121fd8 100644 --- a/src/core/hle/service/hid/resource_manager/npad_resource/npad.cpp +++ b/src/core/hle/service/hid/resource_manager/npad_resource/npad.cpp @@ -858,6 +858,16 @@ bool Npad::IsFirmwareUpdateNeededForNotification(const u64 aruid, const s32 unkn // Not Implemented return false; } + +Result Npad::GetLastActiveNpad(NpadIdType& out_npad_id) const { + std::scoped_lock lock{mutex}; + + out_npad_id = NpadIdType::Handheld; + const Result result = ResultSuccess; // last_active_npad->GetNpadIdType(out_npad_id); + + return result; +} + std::shared_ptr Npad::GetAbstractNpad(const NpadIdType npad_id) { return abstract_npad_state[NpadIdTypeToIndex(npad_id)]; } diff --git a/src/core/hle/service/hid/resource_manager/npad_resource/npad.h b/src/core/hle/service/hid/resource_manager/npad_resource/npad.h index 1aef10c1e..952a5d3f7 100644 --- a/src/core/hle/service/hid/resource_manager/npad_resource/npad.h +++ b/src/core/hle/service/hid/resource_manager/npad_resource/npad.h @@ -143,6 +143,7 @@ public: Result SetVibrationMasterVolume(const float volume); Result GetVibrationMasterVolume(float& out_volume) const; bool IsFirmwareUpdateNeededForNotification(const u64 aruid, const s32 unknown) const; + Result GetLastActiveNpad(NpadIdType& out_npad_id) const; std::shared_ptr GetAbstractNpad(const NpadIdType npad_id);