diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp index 828dcc082..bbb4cb20a 100644 --- a/src/core/hle/service/hid/hid_server.cpp +++ b/src/core/hle/service/hid/hid_server.cpp @@ -211,6 +211,18 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr r {1002, &IHidServer::SetTouchScreenConfiguration, "SetTouchScreenConfiguration"}, {1003, &IHidServer::IsFirmwareUpdateNeededForNotification, "IsFirmwareUpdateNeededForNotification"}, {2000, nullptr, "ActivateDigitizer"}, + {3000, nullptr, "GetDebugPadGenericPadMap"}, + {3001, nullptr, "SetDebugPadGenericPadMap"}, + {3002, nullptr, "ResetDebugPadGenericPadMap"}, + {3003, nullptr, "GetDebugPadKeyboardMap"}, + {3004, nullptr, "SetDebugPadKeyboardMap"}, + {3005, nullptr, "ResetDebugPadKeyboardMap"}, + {3006, nullptr, "GetFullKeyGenericPadMap"}, + {3007, nullptr, "SetFullKeyGenericPadMap"}, + {3008, nullptr, "ResetFullKeyGenericPadMap"}, + {3009, nullptr, "GetFullKeyKeyboardMap"}, + {3010, nullptr, "SetFullKeyKeyboardMap"}, + {3011, nullptr, "ResetFullKeyKeyboardMap"}, }; // clang-format on @@ -2053,7 +2065,6 @@ void IHidServer::EndPermitVibrationSession(HLERequestContext& ctx) {} void IHidServer::IsVibrationDeviceMounted(HLERequestContext& ctx) {} void IHidServer::SendVibrationValueInBool(HLERequestContext& ctx) { - IPC::RequestParser rp{ctx}; struct Parameters { VibrationDeviceHandle handle; @@ -2154,7 +2165,7 @@ void IHidServer::InitializePalma(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = GetResourceManager()->GetPalma()->Initialize(connection_handle); + const auto result = GetResourceManager()->GetPalma()->Initialize(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2168,10 +2179,10 @@ void IHidServer::AcquirePalmaOperationCompleteEvent(HLERequestContext& ctx) { Kernel::KReadableEvent* out_event = nullptr; const auto result = GetResourceManager()->GetPalma()->AcquirePalmaOperationCompleteEvent( - connection_handle, &out_event); + connection_handle.npad_id, &out_event); IPC::ResponseBuilder rb{ctx, 2, 1}; - rb.Push(ResultSuccess); + rb.Push(result); rb.PushCopyObjects(out_event); } @@ -2183,18 +2194,16 @@ void IHidServer::GetPalmaOperationInfo(HLERequestContext& ctx) { PalmaOperationType operation_type{}; PalmaOperationData data{}; - const auto result = GetResourceManager()->GetPalma()->GetPalmaOperationInfo( - connection_handle, operation_type, data); + const Result result = GetResourceManager()->GetPalma()->GetPalmaOperationInfo( + connection_handle.npad_id, operation_type, data); - if (result.IsError()) { - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(result); + if (result.IsSuccess()) { + ctx.WriteBuffer(data); } - ctx.WriteBuffer(data); IPC::ResponseBuilder rb{ctx, 4}; rb.Push(result); - rb.Push(static_cast(operation_type)); + rb.PushEnum(operation_type); } void IHidServer::PlayPalmaActivity(HLERequestContext& ctx) { @@ -2205,8 +2214,8 @@ void IHidServer::PlayPalmaActivity(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, palma_activity={}", connection_handle.npad_id, palma_activity); - const auto result = - GetResourceManager()->GetPalma()->PlayPalmaActivity(connection_handle, palma_activity); + const auto result = GetResourceManager()->GetPalma()->PlayPalmaActivity( + connection_handle.npad_id, palma_activity); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2221,7 +2230,7 @@ void IHidServer::SetPalmaFrModeType(HLERequestContext& ctx) { connection_handle.npad_id, fr_mode); const auto result = - GetResourceManager()->GetPalma()->SetPalmaFrModeType(connection_handle, fr_mode); + GetResourceManager()->GetPalma()->SetPalmaFrModeType(connection_handle.npad_id, fr_mode); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2233,7 +2242,7 @@ void IHidServer::ReadPalmaStep(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = GetResourceManager()->GetPalma()->ReadPalmaStep(connection_handle); + const auto result = GetResourceManager()->GetPalma()->ReadPalmaStep(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2254,7 +2263,7 @@ void IHidServer::EnablePalmaStep(HLERequestContext& ctx) { parameters.connection_handle.npad_id, parameters.is_enabled); const auto result = GetResourceManager()->GetPalma()->EnablePalmaStep( - parameters.connection_handle, parameters.is_enabled); + parameters.connection_handle.npad_id, parameters.is_enabled); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2266,15 +2275,44 @@ void IHidServer::ResetPalmaStep(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = GetResourceManager()->GetPalma()->ResetPalmaStep(connection_handle); + const auto result = GetResourceManager()->GetPalma()->ResetPalmaStep(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); } -void IHidServer::ReadPalmaApplicationSection(HLERequestContext& ctx) {} +void IHidServer::ReadPalmaApplicationSection(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto connection_handle{rp.PopRaw()}; + const auto starting_index{rp.PopRaw()}; + const auto size{rp.PopRaw()}; -void IHidServer::WritePalmaApplicationSection(HLERequestContext& ctx) {} + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, starting_index={}, size={}", + connection_handle.npad_id, starting_index, size); + + const auto result = GetResourceManager()->GetPalma()->ReadPalmaApplicationSection( + connection_handle.npad_id, starting_index, size); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} + +void IHidServer::WritePalmaApplicationSection(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto connection_handle{rp.PopRaw()}; + const auto starting_index{rp.PopRaw()}; + const auto size{rp.PopRaw()}; + const auto buffer = ctx.ReadBuffer(); + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, starting_index={}, size={}", + connection_handle.npad_id, starting_index, size); + + const auto result = GetResourceManager()->GetPalma()->WritePalmaApplicationSection( + connection_handle.npad_id, starting_index, size, buffer); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} void IHidServer::ReadPalmaUniqueCode(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; @@ -2282,7 +2320,8 @@ void IHidServer::ReadPalmaUniqueCode(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = GetResourceManager()->GetPalma()->ReadPalmaUniqueCode(connection_handle); + const auto result = + GetResourceManager()->GetPalma()->ReadPalmaUniqueCode(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); @@ -2295,29 +2334,45 @@ void IHidServer::SetPalmaUniqueCodeInvalid(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); const auto result = - GetResourceManager()->GetPalma()->SetPalmaUniqueCodeInvalid(connection_handle); + GetResourceManager()->GetPalma()->SetPalmaUniqueCodeInvalid(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } -void IHidServer::WritePalmaActivityEntry(HLERequestContext& ctx) {} +void IHidServer::WritePalmaActivityEntry(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + const auto connection_handle{rp.PopRaw()}; + const auto a{rp.PopRaw()}; + const auto b{rp.PopRaw()}; + const auto c{rp.PopRaw()}; + const auto d{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, a={}, b={}, c={}, d={}", + connection_handle.npad_id, a, b, c, d); + + const auto result = GetResourceManager()->GetPalma()->WritePalmaActivityEntry( + connection_handle.npad_id, a, b, c, d); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(result); +} void IHidServer::WritePalmaRgbLedPatternEntry(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto connection_handle{rp.PopRaw()}; - const auto unknown{rp.Pop()}; + const auto pattern_type{rp.Pop()}; - [[maybe_unused]] const auto buffer = ctx.ReadBuffer(); + const auto buffer = ctx.ReadBuffer(); - LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, unknown={}", - connection_handle.npad_id, unknown); + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, pattern_type={}", + connection_handle.npad_id, pattern_type); - const auto result = - GetResourceManager()->GetPalma()->WritePalmaRgbLedPatternEntry(connection_handle, unknown); + const auto result = GetResourceManager()->GetPalma()->WritePalmaRgbLedPatternEntry( + connection_handle.npad_id, pattern_type, buffer); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::WritePalmaWaveEntry(HLERequestContext& ctx) { @@ -2349,10 +2404,10 @@ void IHidServer::WritePalmaWaveEntry(HLERequestContext& ctx) { connection_handle.npad_id, wave_set, unknown, t_mem_handle, t_mem_size, size); const auto result = GetResourceManager()->GetPalma()->WritePalmaWaveEntry( - connection_handle, wave_set, t_mem->GetSourceAddress(), t_mem_size); + connection_handle.npad_id, wave_set, t_mem->GetSourceAddress(), t_mem_size); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::SetPalmaDataBaseIdentificationVersion(HLERequestContext& ctx) { @@ -2370,7 +2425,7 @@ void IHidServer::SetPalmaDataBaseIdentificationVersion(HLERequestContext& ctx) { parameters.connection_handle.npad_id, parameters.database_id_version); const auto result = GetResourceManager()->GetPalma()->SetPalmaDataBaseIdentificationVersion( - parameters.connection_handle, parameters.database_id_version); + parameters.connection_handle.npad_id, parameters.database_id_version); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); @@ -2382,18 +2437,32 @@ void IHidServer::GetPalmaDataBaseIdentificationVersion(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = - GetResourceManager()->GetPalma()->GetPalmaDataBaseIdentificationVersion(connection_handle); + const auto result = GetResourceManager()->GetPalma()->GetPalmaDataBaseIdentificationVersion( + connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::SuspendPalmaFeature(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + struct Parameters { + s32 palma_feature; + INSERT_PADDING_WORDS_NOINIT(1); + PalmaConnectionHandle connection_handle; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, database_id_version={}", + parameters.connection_handle.npad_id, parameters.palma_feature); + + const auto result = GetResourceManager()->GetPalma()->SuspendPalmaFeature( + parameters.connection_handle.npad_id, parameters.palma_feature); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::GetPalmaOperationResult(HLERequestContext& ctx) { @@ -2402,25 +2471,53 @@ void IHidServer::GetPalmaOperationResult(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - const auto result = applet_resource->GetController(HidController::Palma) - .GetPalmaOperationResult(connection_handle); + const auto result = + GetResourceManager()->GetPalma()->GetPalmaOperationResult(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(result); } void IHidServer::ReadPalmaPlayLog(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + struct Parameters { + u16 entries; + INSERT_PADDING_BYTES_NOINIT(6); + PalmaConnectionHandle connection_handle; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, entries={}", + parameters.connection_handle.npad_id, parameters.entries); + + const auto result = GetResourceManager()->GetPalma()->ReadPalmaPlayLog( + parameters.connection_handle.npad_id, parameters.entries); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::ResetPalmaPlayLog(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + struct Parameters { + u32 entries; + INSERT_PADDING_BYTES_NOINIT(4); + PalmaConnectionHandle connection_handle; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}, entries={}", + parameters.connection_handle.npad_id, parameters.entries); + + const auto result = GetResourceManager()->GetPalma()->ResetPalmaPlayLog( + parameters.connection_handle.npad_id, parameters.entries); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::SetIsPalmaAllConnectable(HLERequestContext& ctx) { @@ -2438,15 +2535,30 @@ void IHidServer::SetIsPalmaAllConnectable(HLERequestContext& ctx) { "(STUBBED) called, is_palma_all_connectable={},applet_resource_user_id={}", parameters.is_palma_all_connectable, parameters.applet_resource_user_id); - applet_resource->GetController(HidController::Palma) - .SetIsPalmaAllConnectable(parameters.is_palma_all_connectable); + GetResourceManager()->GetPalma()->SetIsPalmaAllConnectable(parameters.applet_resource_user_id, + parameters.is_palma_all_connectable); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void IHidServer::SetIsPalmaPairedConnectable(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + struct Parameters { + bool is_palma_paired_connectable; + INSERT_PADDING_BYTES_NOINIT(7); + u64 applet_resource_user_id; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_HID, + "(STUBBED) called, is_palma_paired_connectable={},applet_resource_user_id={}", + parameters.is_palma_paired_connectable, parameters.applet_resource_user_id); + + GetResourceManager()->GetPalma()->SetIsPalmaPairedConnectable( + parameters.applet_resource_user_id, parameters.is_palma_paired_connectable); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); @@ -2458,49 +2570,83 @@ void IHidServer::PairPalma(HLERequestContext& ctx) { LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); - applet_resource->GetController(HidController::Palma) - .PairPalma(connection_handle); + const auto result = GetResourceManager()->GetPalma()->PairPalma(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::SetPalmaBoostMode(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; const auto palma_boost_mode{rp.Pop()}; - LOG_WARNING(Service_HID, "(STUBBED) called, palma_boost_mode={}", palma_boost_mode); + LOG_INFO(Service_HID, "called, palma_boost_mode={}", palma_boost_mode); - applet_resource->GetController(HidController::Palma) - .SetPalmaBoostMode(palma_boost_mode); + // This no longer does anything. Use EnablePalmaBoostMode instead IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void IHidServer::CancelWritePalmaWaveEntry(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + const auto connection_handle{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); + + const auto result = + GetResourceManager()->GetPalma()->CancelWritePalmaWaveEntry(connection_handle.npad_id); IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + rb.Push(result); } void IHidServer::EnablePalmaBoostMode(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + struct Parameters { + bool is_enabled; + INSERT_PADDING_BYTES_NOINIT(7); + u64 applet_resource_user_id; + }; + static_assert(sizeof(Parameters) == 0x10, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_HID, "(STUBBED) called, is_enabled={},applet_resource_user_id={}", + parameters.is_enabled, parameters.applet_resource_user_id); + + GetResourceManager()->GetPalma()->EnablePalmaBoostMode(parameters.applet_resource_user_id, + parameters.is_enabled); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } void IHidServer::GetPalmaBluetoothAddress(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + const auto connection_handle{rp.PopRaw()}; - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultSuccess); + LOG_WARNING(Service_HID, "(STUBBED) called, connection_handle={}", connection_handle.npad_id); + + std::array address{}; + const auto result = GetResourceManager()->GetPalma()->GetPalmaBluetoothAddress( + connection_handle.npad_id, address); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(result); + rb.PushRaw(address); } void IHidServer::SetDisallowedPalmaConnection(HLERequestContext& ctx) { - LOG_WARNING(Service_HID, "(STUBBED) called"); + IPC::RequestParser rp{ctx}; + const auto applet_resource_user_id{rp.PopRaw()}; + const auto address_buffer = ctx.ReadBuffer(); + + LOG_WARNING(Service_HID, "(STUBBED) called, applet_resource_user_id={}", + applet_resource_user_id); + + GetResourceManager()->GetPalma()->SetDisallowedPalmaConnection(applet_resource_user_id, + address_buffer); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); diff --git a/src/core/hle/service/hid/hid_types.h b/src/core/hle/service/hid/hid_types.h index a693dbd76..bf934a360 100644 --- a/src/core/hle/service/hid/hid_types.h +++ b/src/core/hle/service/hid/hid_types.h @@ -877,9 +877,8 @@ struct MouseState { }; static_assert(sizeof(MouseState) == 0x28, "MouseState is an invalid size"); - - // This is nn::hid::PalmaOperationType -enum class PalmaOperationType { +// This is nn::hid::PalmaOperationType +enum class PalmaOperationType : u32 { PlayActivity, SetFrModeType, ReadStep, @@ -923,7 +922,8 @@ enum class PalmaFeature : u64 { MuteSwitch, }; - using PalmaOperationData = std::array; +using PalmaOperationData = std::array; + // This is nn::hid::PalmaOperationInfo struct PalmaOperationInfo { PalmaOperationType operation{}; diff --git a/src/core/hle/service/hid/resource_manager/palma.cpp b/src/core/hle/service/hid/resource_manager/palma.cpp index 417cfeabf..10292bcb0 100644 --- a/src/core/hle/service/hid/resource_manager/palma.cpp +++ b/src/core/hle/service/hid/resource_manager/palma.cpp @@ -21,8 +21,7 @@ Result Palma::Activate() { return ResultSuccess; } -Result Palma::EnablePalmaBoostMode(const u64 aruid, const bool is_enabled) { - return ResultSuccess; +void Palma::EnablePalmaBoostMode(const u64 aruid, const bool is_enabled) { } } // namespace Service::HID diff --git a/src/core/hle/service/hid/resource_manager/palma.h b/src/core/hle/service/hid/resource_manager/palma.h index 98b4fd6ac..a621998bf 100644 --- a/src/core/hle/service/hid/resource_manager/palma.h +++ b/src/core/hle/service/hid/resource_manager/palma.h @@ -11,6 +11,10 @@ namespace Core { class System; } +namespace Kernel { +class KReadableEvent; +} + namespace Service::HID {} // namespace Service::HID namespace Service::HID { @@ -23,8 +27,43 @@ public: Result Activate(const u64 aruid); Result Activate(); - Result EnablePalmaBoostMode(const u64 aruid, const bool is_enabled); - Result GetPalmaConnectionHandle(PalmaConnectionHandle& out_handle,const u64 aruid) const; + Result Initialize(const NpadIdType handle); + Result GetPalmaConnectionHandle(PalmaConnectionHandle& out_handle, const u64 aruid) const; + Result AcquirePalmaOperationCompleteEvent(const NpadIdType handle, + Kernel::KReadableEvent** out_event) const; + Result GetPalmaOperationInfo(const NpadIdType handle, PalmaOperationType& out_type, + PalmaOperationData& out_data) const; + + Result PlayPalmaActivity(const NpadIdType handle, const u32 activity) const; + Result SetPalmaFrModeType(const NpadIdType handle, const PalmaFrModeType type) const; + Result ReadPalmaStep(const NpadIdType handle) const; + Result EnablePalmaStep(const NpadIdType handle, const bool is_enabled) const; + Result ResetPalmaStep(const NpadIdType handle) const; + Result ReadPalmaApplicationSection(const NpadIdType handle, const u32 starting_index, + u32 size) const; + Result WritePalmaApplicationSection(const NpadIdType handle, const u32 starting_index, u32 size, + std::span buffer) const; + Result ReadPalmaUniqueCode(const NpadIdType handle) const; + Result SetPalmaUniqueCodeInvalid(const NpadIdType handle) const; + Result WritePalmaActivityEntry(const NpadIdType handle, const u64 a, const u64 b, const u64 c, + const u64 d) const; + Result WritePalmaRgbLedPatternEntry(const NpadIdType handle, const u16 pattern_type, + std::span buffer) const; + Result WritePalmaWaveEntry(const NpadIdType handle, const PalmaWaveSet wave_set, + const Common::ProcessAddress t_mem, const std::size_t size) const; + Result SetPalmaDataBaseIdentificationVersion(const NpadIdType handle, const s32 version) const; + Result GetPalmaDataBaseIdentificationVersion(const NpadIdType handle) const; + Result SuspendPalmaFeature(const NpadIdType handle, const s32 feature) const; + Result GetPalmaOperationResult(const NpadIdType handle) const; + Result ReadPalmaPlayLog(const NpadIdType handle, const u32 entries) const; + Result ResetPalmaPlayLog(const NpadIdType handle, const u32 entries) const; + void SetIsPalmaAllConnectable(const u64 aruid, const bool is_connectable) const; + void SetIsPalmaPairedConnectable(const u64 aruid, const bool is_connectable) const; + Result PairPalma(const NpadIdType handle) const; + Result CancelWritePalmaWaveEntry(const NpadIdType handle) const; + void EnablePalmaBoostMode(const u64 aruid, const bool is_enabled); + Result GetPalmaBluetoothAddress(const NpadIdType handle, std::span out_address) const; + void SetDisallowedPalmaConnection(const u64 aruid, std::span address) const; private: bool is_activated;