mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-30 22:36:46 +08:00 
			
		
		
		
	service: hid: Migrate HidServer to new IPC
This commit is contained in:
		
							parent
							
								
									d08f201e0c
								
							
						
					
					
						commit
						fc6a87bba1
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -6,12 +6,20 @@ | |||||||
| #include "core/hle/service/cmif_types.h" | #include "core/hle/service/cmif_types.h" | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| #include "hid_core/hid_types.h" | #include "hid_core/hid_types.h" | ||||||
|  | #include "hid_core/resources/npad/npad_types.h" | ||||||
|  | #include "hid_core/resources/palma/palma.h" | ||||||
| 
 | 
 | ||||||
| namespace Core { | namespace Core { | ||||||
| class System; | class System; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | namespace Kernel { | ||||||
|  | class KReadableEvent; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| namespace Service::HID { | namespace Service::HID { | ||||||
|  | class IActiveVibrationDeviceList; | ||||||
|  | class IAppletResource; | ||||||
| class ResourceManager; | class ResourceManager; | ||||||
| class HidFirmwareSettings; | class HidFirmwareSettings; | ||||||
| 
 | 
 | ||||||
| @ -24,128 +32,232 @@ public: | |||||||
|     std::shared_ptr<ResourceManager> GetResourceManager(); |     std::shared_ptr<ResourceManager> GetResourceManager(); | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     void CreateAppletResource(HLERequestContext& ctx); |     Result CreateAppletResource(OutInterface<IAppletResource> out_applet_resource, | ||||||
|     void ActivateDebugPad(HLERequestContext& ctx); |                                 ClientAppletResourceUserId aruid); | ||||||
|     void ActivateTouchScreen(HLERequestContext& ctx); |     Result ActivateDebugPad(ClientAppletResourceUserId aruid); | ||||||
|     void ActivateMouse(HLERequestContext& ctx); |     Result ActivateTouchScreen(ClientAppletResourceUserId aruid); | ||||||
|     void ActivateKeyboard(HLERequestContext& ctx); |     Result ActivateMouse(ClientAppletResourceUserId aruid); | ||||||
|     void SendKeyboardLockKeyEvent(HLERequestContext& ctx); |     Result ActivateKeyboard(ClientAppletResourceUserId aruid); | ||||||
|     void AcquireXpadIdEventHandle(HLERequestContext& ctx); |     Result SendKeyboardLockKeyEvent(u32 flags); | ||||||
|     void ReleaseXpadIdEventHandle(HLERequestContext& ctx); |     Result AcquireXpadIdEventHandle(OutCopyHandle<Kernel::KReadableEvent> out_event, | ||||||
|     void ActivateXpad(HLERequestContext& ctx); |                                     ClientAppletResourceUserId aruid); | ||||||
|     void GetXpadIds(HLERequestContext& ctx); |     Result ReleaseXpadIdEventHandle(ClientAppletResourceUserId aruid); | ||||||
|     void ActivateJoyXpad(HLERequestContext& ctx); |     Result ActivateXpad(u32 basic_xpad_id, ClientAppletResourceUserId aruid); | ||||||
|     void GetJoyXpadLifoHandle(HLERequestContext& ctx); |     Result GetXpadIds(Out<u64> out_count, OutArray<u32, BufferAttr_HipcPointer> out_basic_pad_ids); | ||||||
|     void GetJoyXpadIds(HLERequestContext& ctx); |     Result ActivateJoyXpad(u32 joy_xpad_id); | ||||||
|     void ActivateSixAxisSensor(HLERequestContext& ctx); |     Result GetJoyXpadLifoHandle(OutCopyHandle<Kernel::KSharedMemory> out_shared_memory_handle, | ||||||
|     void DeactivateSixAxisSensor(HLERequestContext& ctx); |                                 u32 joy_xpad_id); | ||||||
|     void GetSixAxisSensorLifoHandle(HLERequestContext& ctx); |     Result GetJoyXpadIds(Out<s64> out_basic_xpad_id_count); | ||||||
|     void ActivateJoySixAxisSensor(HLERequestContext& ctx); |     Result ActivateSixAxisSensor(u32 joy_xpad_id); | ||||||
|     void DeactivateJoySixAxisSensor(HLERequestContext& ctx); |     Result DeactivateSixAxisSensor(u32 joy_xpad_id); | ||||||
|     void GetJoySixAxisSensorLifoHandle(HLERequestContext& ctx); |     Result GetSixAxisSensorLifoHandle(OutCopyHandle<Kernel::KSharedMemory> out_shared_memory_handle, | ||||||
|     void StartSixAxisSensor(HLERequestContext& ctx); |                                       u32 joy_xpad_id); | ||||||
|     void StopSixAxisSensor(HLERequestContext& ctx); |     Result ActivateJoySixAxisSensor(u32 joy_xpad_id); | ||||||
|     void IsSixAxisSensorFusionEnabled(HLERequestContext& ctx); |     Result DeactivateJoySixAxisSensor(u32 joy_xpad_id); | ||||||
|     void EnableSixAxisSensorFusion(HLERequestContext& ctx); |     Result GetJoySixAxisSensorLifoHandle( | ||||||
|     void SetSixAxisSensorFusionParameters(HLERequestContext& ctx); |         OutCopyHandle<Kernel::KSharedMemory> out_shared_memory_handle, u32 joy_xpad_id); | ||||||
|     void GetSixAxisSensorFusionParameters(HLERequestContext& ctx); |     Result StartSixAxisSensor(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void ResetSixAxisSensorFusionParameters(HLERequestContext& ctx); |                               ClientAppletResourceUserId aruid); | ||||||
|     void SetGyroscopeZeroDriftMode(HLERequestContext& ctx); |     Result StopSixAxisSensor(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void GetGyroscopeZeroDriftMode(HLERequestContext& ctx); |                              ClientAppletResourceUserId aruid); | ||||||
|     void ResetGyroscopeZeroDriftMode(HLERequestContext& ctx); |     Result IsSixAxisSensorFusionEnabled(Out<bool> out_is_enabled, | ||||||
|     void IsSixAxisSensorAtRest(HLERequestContext& ctx); |                                         Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void IsFirmwareUpdateAvailableForSixAxisSensor(HLERequestContext& ctx); |                                         ClientAppletResourceUserId aruid); | ||||||
|     void EnableSixAxisSensorUnalteredPassthrough(HLERequestContext& ctx); |     Result EnableSixAxisSensorFusion(bool is_enabled, Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void IsSixAxisSensorUnalteredPassthroughEnabled(HLERequestContext& ctx); |                                      ClientAppletResourceUserId aruid); | ||||||
|     void LoadSixAxisSensorCalibrationParameter(HLERequestContext& ctx); |     Result SetSixAxisSensorFusionParameters(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void GetSixAxisSensorIcInformation(HLERequestContext& ctx); |                                             Core::HID::SixAxisSensorFusionParameters sixaxis_fusion, | ||||||
|     void ResetIsSixAxisSensorDeviceNewlyAssigned(HLERequestContext& ctx); |                                             ClientAppletResourceUserId aruid); | ||||||
|     void ActivateGesture(HLERequestContext& ctx); |     Result GetSixAxisSensorFusionParameters( | ||||||
|     void SetSupportedNpadStyleSet(HLERequestContext& ctx); |         Out<Core::HID::SixAxisSensorFusionParameters> out_fusion_parameters, | ||||||
|     void GetSupportedNpadStyleSet(HLERequestContext& ctx); |         Core::HID::SixAxisSensorHandle sixaxis_handle, ClientAppletResourceUserId aruid); | ||||||
|     void SetSupportedNpadIdType(HLERequestContext& ctx); |     Result ResetSixAxisSensorFusionParameters(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void ActivateNpad(HLERequestContext& ctx); |                                               ClientAppletResourceUserId aruid); | ||||||
|     void DeactivateNpad(HLERequestContext& ctx); |     Result SetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|     void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx); |                                      Core::HID::GyroscopeZeroDriftMode drift_mode, | ||||||
|     void DisconnectNpad(HLERequestContext& ctx); |                                      ClientAppletResourceUserId aruid); | ||||||
|  |     Result GetGyroscopeZeroDriftMode(Out<Core::HID::GyroscopeZeroDriftMode> out_drift_mode, | ||||||
|  |                                      Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                      ClientAppletResourceUserId aruid); | ||||||
|  |     Result ResetGyroscopeZeroDriftMode(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                        ClientAppletResourceUserId aruid); | ||||||
|  |     Result IsSixAxisSensorAtRest(Out<bool> out_is_at_rest, | ||||||
|  |                                  Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                  ClientAppletResourceUserId aruid); | ||||||
|  |     Result IsFirmwareUpdateAvailableForSixAxisSensor(Out<bool> out_is_firmware_available, | ||||||
|  |                                                      Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                                      ClientAppletResourceUserId aruid); | ||||||
|  |     Result EnableSixAxisSensorUnalteredPassthrough(bool is_enabled, | ||||||
|  |                                                    Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                                    ClientAppletResourceUserId aruid); | ||||||
|  |     Result IsSixAxisSensorUnalteredPassthroughEnabled(Out<bool> out_is_enabled, | ||||||
|  |                                                       Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                                       ClientAppletResourceUserId aruid); | ||||||
|  |     Result LoadSixAxisSensorCalibrationParameter( | ||||||
|  |         OutLargeData<Core::HID::SixAxisSensorCalibrationParameter, BufferAttr_HipcMapAlias> | ||||||
|  |             out_calibration, | ||||||
|  |         Core::HID::SixAxisSensorHandle sixaxis_handle, ClientAppletResourceUserId aruid); | ||||||
|  |     Result GetSixAxisSensorIcInformation( | ||||||
|  |         OutLargeData<Core::HID::SixAxisSensorIcInformation, BufferAttr_HipcPointer> | ||||||
|  |             out_ic_information, | ||||||
|  |         Core::HID::SixAxisSensorHandle sixaxis_handle, ClientAppletResourceUserId aruid); | ||||||
|  |     Result ResetIsSixAxisSensorDeviceNewlyAssigned(Core::HID::SixAxisSensorHandle sixaxis_handle, | ||||||
|  |                                                    ClientAppletResourceUserId aruid); | ||||||
|  |     Result ActivateGesture(u32 basic_gesture_id, ClientAppletResourceUserId aruid); | ||||||
|  |     Result SetSupportedNpadStyleSet(Core::HID::NpadStyleSet supported_style_set, | ||||||
|  |                                     ClientAppletResourceUserId aruid); | ||||||
|  |     Result GetSupportedNpadStyleSet(Out<Core::HID::NpadStyleSet> out_supported_style_set, | ||||||
|  |                                     ClientAppletResourceUserId aruid); | ||||||
|  |     Result SetSupportedNpadIdType( | ||||||
|  |         ClientAppletResourceUserId aruid, | ||||||
|  |         InArray<Core::HID::NpadIdType, BufferAttr_HipcPointer> supported_npad_list); | ||||||
|  |     Result ActivateNpad(ClientAppletResourceUserId aruid); | ||||||
|  |     Result DeactivateNpad(ClientAppletResourceUserId aruid); | ||||||
|  |     Result AcquireNpadStyleSetUpdateEventHandle(OutCopyHandle<Kernel::KReadableEvent> out_event, | ||||||
|  |                                                 Core::HID::NpadIdType npad_id, | ||||||
|  |                                                 ClientAppletResourceUserId aruid, u64 unknown); | ||||||
|  |     Result DisconnectNpad(Core::HID::NpadIdType npad_id, ClientAppletResourceUserId aruid); | ||||||
|     Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, |     Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern, | ||||||
|                                Core::HID::NpadIdType npad_id); |                                Core::HID::NpadIdType npad_id); | ||||||
|     void ActivateNpadWithRevision(HLERequestContext& ctx); |     Result ActivateNpadWithRevision(NpadRevision revision, ClientAppletResourceUserId aruid); | ||||||
|     void SetNpadJoyHoldType(HLERequestContext& ctx); |     Result SetNpadJoyHoldType(ClientAppletResourceUserId aruid, NpadJoyHoldType hold_type); | ||||||
|     void GetNpadJoyHoldType(HLERequestContext& ctx); |     Result GetNpadJoyHoldType(Out<NpadJoyHoldType> out_hold_type, ClientAppletResourceUserId aruid); | ||||||
|     void SetNpadJoyAssignmentModeSingleByDefault(HLERequestContext& ctx); |     Result SetNpadJoyAssignmentModeSingleByDefault(Core::HID::NpadIdType npad_id, | ||||||
|     void SetNpadJoyAssignmentModeSingle(HLERequestContext& ctx); |                                                    ClientAppletResourceUserId aruid); | ||||||
|     void SetNpadJoyAssignmentModeDual(HLERequestContext& ctx); |     Result SetNpadJoyAssignmentModeSingle(Core::HID::NpadIdType npad_id, | ||||||
|     void MergeSingleJoyAsDualJoy(HLERequestContext& ctx); |                                           ClientAppletResourceUserId aruid, | ||||||
|     void StartLrAssignmentMode(HLERequestContext& ctx); |                                           NpadJoyDeviceType npad_joy_device_type); | ||||||
|     void StopLrAssignmentMode(HLERequestContext& ctx); |     Result SetNpadJoyAssignmentModeDual(Core::HID::NpadIdType npad_id, | ||||||
|     void SetNpadHandheldActivationMode(HLERequestContext& ctx); |                                         ClientAppletResourceUserId aruid); | ||||||
|     void GetNpadHandheldActivationMode(HLERequestContext& ctx); |     Result MergeSingleJoyAsDualJoy(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2, | ||||||
|     void SwapNpadAssignment(HLERequestContext& ctx); |                                    ClientAppletResourceUserId aruid); | ||||||
|     void IsUnintendedHomeButtonInputProtectionEnabled(HLERequestContext& ctx); |     Result StartLrAssignmentMode(ClientAppletResourceUserId aruid); | ||||||
|     void EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx); |     Result StopLrAssignmentMode(ClientAppletResourceUserId aruid); | ||||||
|     void SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx); |     Result SetNpadHandheldActivationMode(ClientAppletResourceUserId aruid, | ||||||
|     void SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx); |                                          NpadHandheldActivationMode activation_mode); | ||||||
|     void SetNpadCaptureButtonAssignment(HLERequestContext& ctx); |     Result GetNpadHandheldActivationMode(Out<NpadHandheldActivationMode> out_activation_mode, | ||||||
|     void ClearNpadCaptureButtonAssignment(HLERequestContext& ctx); |                                          ClientAppletResourceUserId aruid); | ||||||
|     void GetVibrationDeviceInfo(HLERequestContext& ctx); |     Result SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, Core::HID::NpadIdType npad_id_2, | ||||||
|     void SendVibrationValue(HLERequestContext& ctx); |                               ClientAppletResourceUserId aruid); | ||||||
|     void GetActualVibrationValue(HLERequestContext& ctx); |     Result IsUnintendedHomeButtonInputProtectionEnabled(Out<bool> out_is_enabled, | ||||||
|     void CreateActiveVibrationDeviceList(HLERequestContext& ctx); |                                                         Core::HID::NpadIdType npad_id, | ||||||
|     void PermitVibration(HLERequestContext& ctx); |                                                         ClientAppletResourceUserId aruid); | ||||||
|     void IsVibrationPermitted(HLERequestContext& ctx); |     Result EnableUnintendedHomeButtonInputProtection(bool is_enabled, Core::HID::NpadIdType npad_id, | ||||||
|     void SendVibrationValues(HLERequestContext& ctx); |                                                      ClientAppletResourceUserId aruid); | ||||||
|     void SendVibrationGcErmCommand(HLERequestContext& ctx); |     Result SetNpadJoyAssignmentModeSingleWithDestination(Out<bool> out_is_reassigned, | ||||||
|     void GetActualVibrationGcErmCommand(HLERequestContext& ctx); |                                                          Out<Core::HID::NpadIdType> out_new_npad_id, | ||||||
|     void BeginPermitVibrationSession(HLERequestContext& ctx); |                                                          Core::HID::NpadIdType npad_id, | ||||||
|     void EndPermitVibrationSession(HLERequestContext& ctx); |                                                          ClientAppletResourceUserId aruid, | ||||||
|     void IsVibrationDeviceMounted(HLERequestContext& ctx); |                                                          NpadJoyDeviceType npad_joy_device_type); | ||||||
|     void SendVibrationValueInBool(HLERequestContext& ctx); |     Result SetNpadAnalogStickUseCenterClamp(bool use_center_clamp, | ||||||
|     void ActivateConsoleSixAxisSensor(HLERequestContext& ctx); |                                             ClientAppletResourceUserId aruid); | ||||||
|     void StartConsoleSixAxisSensor(HLERequestContext& ctx); |     Result SetNpadCaptureButtonAssignment(Core::HID::NpadStyleSet npad_styleset, | ||||||
|     void StopConsoleSixAxisSensor(HLERequestContext& ctx); |                                           ClientAppletResourceUserId aruid, | ||||||
|     void ActivateSevenSixAxisSensor(HLERequestContext& ctx); |                                           Core::HID::NpadButton button); | ||||||
|     void StartSevenSixAxisSensor(HLERequestContext& ctx); |     Result ClearNpadCaptureButtonAssignment(ClientAppletResourceUserId aruid); | ||||||
|     void StopSevenSixAxisSensor(HLERequestContext& ctx); |     Result GetVibrationDeviceInfo(Out<Core::HID::VibrationDeviceInfo> out_vibration_device_info, | ||||||
|     void InitializeSevenSixAxisSensor(HLERequestContext& ctx); |                                   Core::HID::VibrationDeviceHandle vibration_device_handle); | ||||||
|     void FinalizeSevenSixAxisSensor(HLERequestContext& ctx); |     Result SendVibrationValue(Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void ResetSevenSixAxisSensorTimestamp(HLERequestContext& ctx); |                               Core::HID::VibrationValue vibration_value, | ||||||
|     void IsUsbFullKeyControllerEnabled(HLERequestContext& ctx); |                               ClientAppletResourceUserId aruid); | ||||||
|     void GetPalmaConnectionHandle(HLERequestContext& ctx); |     Result GetActualVibrationValue(Out<Core::HID::VibrationValue> out_vibration_value, | ||||||
|     void InitializePalma(HLERequestContext& ctx); |                                    Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void AcquirePalmaOperationCompleteEvent(HLERequestContext& ctx); |                                    ClientAppletResourceUserId aruid); | ||||||
|     void GetPalmaOperationInfo(HLERequestContext& ctx); |     Result CreateActiveVibrationDeviceList(OutInterface<IActiveVibrationDeviceList> out_interface); | ||||||
|     void PlayPalmaActivity(HLERequestContext& ctx); |     Result PermitVibration(bool can_vibrate); | ||||||
|     void SetPalmaFrModeType(HLERequestContext& ctx); |     Result IsVibrationPermitted(Out<bool> out_is_permitted); | ||||||
|     void ReadPalmaStep(HLERequestContext& ctx); |     Result SendVibrationValues( | ||||||
|     void EnablePalmaStep(HLERequestContext& ctx); |         ClientAppletResourceUserId aruid, | ||||||
|     void ResetPalmaStep(HLERequestContext& ctx); |         InArray<Core::HID::VibrationDeviceHandle, BufferAttr_HipcPointer> vibration_handles, | ||||||
|     void ReadPalmaApplicationSection(HLERequestContext& ctx); |         InArray<Core::HID::VibrationValue, BufferAttr_HipcPointer> vibration_values); | ||||||
|     void WritePalmaApplicationSection(HLERequestContext& ctx); |     Result SendVibrationGcErmCommand(Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void ReadPalmaUniqueCode(HLERequestContext& ctx); |                                      ClientAppletResourceUserId aruid, | ||||||
|     void SetPalmaUniqueCodeInvalid(HLERequestContext& ctx); |                                      Core::HID::VibrationGcErmCommand gc_erm_command); | ||||||
|     void WritePalmaActivityEntry(HLERequestContext& ctx); |     Result GetActualVibrationGcErmCommand(Out<Core::HID::VibrationGcErmCommand> out_gc_erm_command, | ||||||
|     void WritePalmaRgbLedPatternEntry(HLERequestContext& ctx); |                                           Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void WritePalmaWaveEntry(HLERequestContext& ctx); |                                           ClientAppletResourceUserId aruid); | ||||||
|     void SetPalmaDataBaseIdentificationVersion(HLERequestContext& ctx); |     Result BeginPermitVibrationSession(ClientAppletResourceUserId aruid); | ||||||
|     void GetPalmaDataBaseIdentificationVersion(HLERequestContext& ctx); |     Result EndPermitVibrationSession(ClientAppletResourceUserId aruid); | ||||||
|     void SuspendPalmaFeature(HLERequestContext& ctx); |     Result IsVibrationDeviceMounted(Out<bool> out_is_mounted, | ||||||
|     void GetPalmaOperationResult(HLERequestContext& ctx); |                                     Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void ReadPalmaPlayLog(HLERequestContext& ctx); |                                     ClientAppletResourceUserId aruid); | ||||||
|     void ResetPalmaPlayLog(HLERequestContext& ctx); |     Result SendVibrationValueInBool(bool is_vibrating, | ||||||
|     void SetIsPalmaAllConnectable(HLERequestContext& ctx); |                                     Core::HID::VibrationDeviceHandle vibration_device_handle, | ||||||
|     void SetIsPalmaPairedConnectable(HLERequestContext& ctx); |                                     ClientAppletResourceUserId aruid); | ||||||
|     void PairPalma(HLERequestContext& ctx); |     Result ActivateConsoleSixAxisSensor(ClientAppletResourceUserId aruid); | ||||||
|     void SetPalmaBoostMode(HLERequestContext& ctx); |     Result StartConsoleSixAxisSensor(Core::HID::ConsoleSixAxisSensorHandle console_sixaxis_handle, | ||||||
|     void CancelWritePalmaWaveEntry(HLERequestContext& ctx); |                                      ClientAppletResourceUserId aruid); | ||||||
|     void EnablePalmaBoostMode(HLERequestContext& ctx); |     Result StopConsoleSixAxisSensor(Core::HID::ConsoleSixAxisSensorHandle console_sixaxis_handle, | ||||||
|     void GetPalmaBluetoothAddress(HLERequestContext& ctx); |                                     ClientAppletResourceUserId aruid); | ||||||
|     void SetDisallowedPalmaConnection(HLERequestContext& ctx); |     Result ActivateSevenSixAxisSensor(ClientAppletResourceUserId aruid); | ||||||
|     void SetNpadCommunicationMode(HLERequestContext& ctx); |     Result StartSevenSixAxisSensor(ClientAppletResourceUserId aruid); | ||||||
|     void GetNpadCommunicationMode(HLERequestContext& ctx); |     Result StopSevenSixAxisSensor(ClientAppletResourceUserId aruid); | ||||||
|     void SetTouchScreenConfiguration(HLERequestContext& ctx); |     Result InitializeSevenSixAxisSensor(ClientAppletResourceUserId aruid, u64 t_mem_1_size, | ||||||
|     void IsFirmwareUpdateNeededForNotification(HLERequestContext& ctx); |                                         u64 t_mem_2_size, | ||||||
|     void SetTouchScreenResolution(HLERequestContext& ctx); |                                         InCopyHandle<Kernel::KTransferMemory> t_mem_1, | ||||||
|  |                                         InCopyHandle<Kernel::KTransferMemory> t_mem_2); | ||||||
|  |     Result FinalizeSevenSixAxisSensor(ClientAppletResourceUserId aruid); | ||||||
|  |     Result ResetSevenSixAxisSensorTimestamp(ClientAppletResourceUserId aruid); | ||||||
|  |     Result IsUsbFullKeyControllerEnabled(Out<bool> out_is_enabled, | ||||||
|  |                                          ClientAppletResourceUserId aruid); | ||||||
|  |     Result GetPalmaConnectionHandle(Out<Palma::PalmaConnectionHandle> out_handle, | ||||||
|  |                                     Core::HID::NpadIdType npad_id, | ||||||
|  |                                     ClientAppletResourceUserId aruid); | ||||||
|  |     Result InitializePalma(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result AcquirePalmaOperationCompleteEvent(OutCopyHandle<Kernel::KReadableEvent> out_event, | ||||||
|  |                                               Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result GetPalmaOperationInfo(Out<Palma::PalmaOperationType> out_operation_type, | ||||||
|  |                                  Palma::PalmaConnectionHandle connection_handle, | ||||||
|  |                                  OutBuffer<BufferAttr_HipcMapAlias> out_data); | ||||||
|  |     Result PlayPalmaActivity(Palma::PalmaConnectionHandle connection_handle, u64 palma_activity); | ||||||
|  |     Result SetPalmaFrModeType(Palma::PalmaConnectionHandle connection_handle, | ||||||
|  |                               Palma::PalmaFrModeType fr_mode); | ||||||
|  |     Result ReadPalmaStep(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result EnablePalmaStep(bool is_enabled, Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result ResetPalmaStep(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result ReadPalmaApplicationSection(Palma::PalmaConnectionHandle connection_handle, u64 offset, | ||||||
|  |                                        u64 size); | ||||||
|  |     Result WritePalmaApplicationSection( | ||||||
|  |         Palma::PalmaConnectionHandle connection_handle, u64 offset, u64 size, | ||||||
|  |         InLargeData<Palma::PalmaApplicationSection, BufferAttr_HipcPointer> data); | ||||||
|  |     Result ReadPalmaUniqueCode(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result SetPalmaUniqueCodeInvalid(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result WritePalmaActivityEntry(Palma::PalmaConnectionHandle connection_handle, | ||||||
|  |                                    Palma::PalmaActivityEntry activity_entry); | ||||||
|  |     Result WritePalmaRgbLedPatternEntry(Palma::PalmaConnectionHandle connection_handle, u64 unknown, | ||||||
|  |                                         InBuffer<BufferAttr_HipcMapAlias> led_pattern); | ||||||
|  |     Result WritePalmaWaveEntry(Palma::PalmaConnectionHandle connection_handle, | ||||||
|  |                                Palma::PalmaWaveSet wave_set, u64 unknown, u64 t_mem_size, u64 size, | ||||||
|  |                                InCopyHandle<Kernel::KTransferMemory> t_mem); | ||||||
|  |     Result SetPalmaDataBaseIdentificationVersion(s32 database_id_version, | ||||||
|  |                                                  Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result GetPalmaDataBaseIdentificationVersion(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result SuspendPalmaFeature(Palma::PalmaFeature feature, | ||||||
|  |                                Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result GetPalmaOperationResult(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result ReadPalmaPlayLog(u16 unknown, Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result ResetPalmaPlayLog(u16 unknown, Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result SetIsPalmaAllConnectable(bool is_palma_all_connectable, ClientAppletResourceUserId arui); | ||||||
|  |     Result SetIsPalmaPairedConnectable(bool is_palma_paired_connectable, | ||||||
|  |                                        ClientAppletResourceUserId aruid); | ||||||
|  |     Result PairPalma(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result SetPalmaBoostMode(bool is_enabled); | ||||||
|  |     Result CancelWritePalmaWaveEntry(Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result EnablePalmaBoostMode(bool is_enabled, ClientAppletResourceUserId aruid); | ||||||
|  |     Result GetPalmaBluetoothAddress(Out<Palma::Address> out_bt_address, | ||||||
|  |                                     Palma::PalmaConnectionHandle connection_handle); | ||||||
|  |     Result SetDisallowedPalmaConnection( | ||||||
|  |         ClientAppletResourceUserId aruid, | ||||||
|  |         InArray<Palma::Address, BufferAttr_HipcPointer> disallowed_address); | ||||||
|  |     Result SetNpadCommunicationMode(ClientAppletResourceUserId aruid, | ||||||
|  |                                     NpadCommunicationMode communication_mode); | ||||||
|  |     Result GetNpadCommunicationMode(Out<NpadCommunicationMode> out_communication_mode, | ||||||
|  |                                     ClientAppletResourceUserId aruid); | ||||||
|  |     Result SetTouchScreenConfiguration(Core::HID::TouchScreenConfigurationForNx touchscreen_config, | ||||||
|  |                                        ClientAppletResourceUserId aruid); | ||||||
|  |     Result IsFirmwareUpdateNeededForNotification(Out<bool> out_is_firmware_update_needed, | ||||||
|  |                                                  s32 unknown, ClientAppletResourceUserId aruid); | ||||||
|  |     Result SetTouchScreenResolution(u32 width, u32 height, ClientAppletResourceUserId aruid); | ||||||
| 
 | 
 | ||||||
|     std::shared_ptr<ResourceManager> resource_manager; |     std::shared_ptr<ResourceManager> resource_manager; | ||||||
|     std::shared_ptr<HidFirmwareSettings> firmware_settings; |     std::shared_ptr<HidFirmwareSettings> firmware_settings; | ||||||
|  | |||||||
| @ -565,36 +565,28 @@ static_assert(sizeof(SixAxisSensorProperties) == 1, "SixAxisSensorProperties is | |||||||
| 
 | 
 | ||||||
| // This is nn::hid::SixAxisSensorCalibrationParameter
 | // This is nn::hid::SixAxisSensorCalibrationParameter
 | ||||||
| struct SixAxisSensorCalibrationParameter { | struct SixAxisSensorCalibrationParameter { | ||||||
|     std::array<u8, 0x744> unknown_data{}; |     std::array<u8, 0x744> unknown_data; | ||||||
| }; | }; | ||||||
| static_assert(sizeof(SixAxisSensorCalibrationParameter) == 0x744, | static_assert(sizeof(SixAxisSensorCalibrationParameter) == 0x744, | ||||||
|               "SixAxisSensorCalibrationParameter is an invalid size"); |               "SixAxisSensorCalibrationParameter is an invalid size"); | ||||||
|  | static_assert(std::is_trivial_v<SixAxisSensorCalibrationParameter>, | ||||||
|  |               "SixAxisSensorCalibrationParameter must be trivial."); | ||||||
| 
 | 
 | ||||||
| // This is nn::hid::SixAxisSensorIcInformation
 | // This is nn::hid::SixAxisSensorIcInformation
 | ||||||
| struct SixAxisSensorIcInformation { | struct SixAxisSensorIcInformation { | ||||||
|     f32 angular_rate{2000.0f}; // dps
 |     f32 angular_rate;                      // dps
 | ||||||
|     std::array<f32, 6> unknown_gyro_data1{ |     std::array<f32, 6> unknown_gyro_data1; // dps
 | ||||||
|         -10.0f, -10.0f, -10.0f, 10.0f, 10.0f, 10.0f, |     std::array<f32, 9> unknown_gyro_data2; | ||||||
|     }; // dps
 |     std::array<f32, 9> unknown_gyro_data3; | ||||||
|     std::array<f32, 9> unknown_gyro_data2{ |     f32 acceleration_range;                 // g force
 | ||||||
|         0.95f, -0.003f, -0.003f, -0.003f, 0.95f, -0.003f, -0.003f, -0.003f, 0.95f, |     std::array<f32, 6> unknown_accel_data1; // g force
 | ||||||
|     }; |     std::array<f32, 9> unknown_accel_data2; | ||||||
|     std::array<f32, 9> unknown_gyro_data3{ |     std::array<f32, 9> unknown_accel_data3; | ||||||
|         1.05f, 0.003f, 0.003f, 0.003f, 1.05f, 0.003f, 0.003f, 0.003f, 1.05f, |  | ||||||
|     }; |  | ||||||
|     f32 acceleration_range{8.0f}; // g force
 |  | ||||||
|     std::array<f32, 6> unknown_accel_data1{ |  | ||||||
|         -0.0612f, -0.0612f, -0.0612f, 0.0612f, 0.0612f, 0.0612f, |  | ||||||
|     }; // g force
 |  | ||||||
|     std::array<f32, 9> unknown_accel_data2{ |  | ||||||
|         0.95f, -0.003f, -0.003f, -0.003f, 0.95f, -0.003f, -0.003f, -0.003f, 0.95f, |  | ||||||
|     }; |  | ||||||
|     std::array<f32, 9> unknown_accel_data3{ |  | ||||||
|         1.05f, 0.003f, 0.003f, 0.003f, 1.05f, 0.003f, 0.003f, 0.003f, 1.05f, |  | ||||||
|     }; |  | ||||||
| }; | }; | ||||||
| static_assert(sizeof(SixAxisSensorIcInformation) == 0xC8, | static_assert(sizeof(SixAxisSensorIcInformation) == 0xC8, | ||||||
|               "SixAxisSensorIcInformation is an invalid size"); |               "SixAxisSensorIcInformation is an invalid size"); | ||||||
|  | static_assert(std::is_trivial_v<SixAxisSensorIcInformation>, | ||||||
|  |               "SixAxisSensorIcInformation must be trivial."); | ||||||
| 
 | 
 | ||||||
| // This is nn::hid::SixAxisSensorAttribute
 | // This is nn::hid::SixAxisSensorAttribute
 | ||||||
| struct SixAxisSensorAttribute { | struct SixAxisSensorAttribute { | ||||||
|  | |||||||
| @ -56,12 +56,14 @@ Kernel::KReadableEvent& Palma::AcquirePalmaOperationCompleteEvent( | |||||||
| 
 | 
 | ||||||
| Result Palma::GetPalmaOperationInfo(const PalmaConnectionHandle& handle, | Result Palma::GetPalmaOperationInfo(const PalmaConnectionHandle& handle, | ||||||
|                                     PalmaOperationType& operation_type, |                                     PalmaOperationType& operation_type, | ||||||
|                                     PalmaOperationData& data) const { |                                     std::span<u8> out_data) const { | ||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation_type = operation.operation; |     operation_type = static_cast<PalmaOperationType>(operation.operation); | ||||||
|     data = operation.data; |     std::memcpy(out_data.data(), operation.data.data(), | ||||||
|  |                 std::min(out_data.size(), operation.data.size())); | ||||||
|  | 
 | ||||||
|     return ResultSuccess; |     return ResultSuccess; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -69,7 +71,7 @@ Result Palma::PlayPalmaActivity(const PalmaConnectionHandle& handle, u64 palma_a | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::PlayActivity; |     operation.operation = PackedPalmaOperationType::PlayActivity; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -88,7 +90,7 @@ Result Palma::ReadPalmaStep(const PalmaConnectionHandle& handle) { | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::ReadStep; |     operation.operation = PackedPalmaOperationType::ReadStep; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -117,7 +119,7 @@ Result Palma::ReadPalmaUniqueCode(const PalmaConnectionHandle& handle) { | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::ReadUniqueCode; |     operation.operation = PackedPalmaOperationType::ReadUniqueCode; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -128,7 +130,7 @@ Result Palma::SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle& handle) { | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::SetUniqueCodeInvalid; |     operation.operation = PackedPalmaOperationType::SetUniqueCodeInvalid; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -141,7 +143,7 @@ Result Palma::WritePalmaRgbLedPatternEntry(const PalmaConnectionHandle& handle, | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::WriteRgbLedPatternEntry; |     operation.operation = PackedPalmaOperationType::WriteRgbLedPatternEntry; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -153,7 +155,7 @@ Result Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWave | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::WriteWaveEntry; |     operation.operation = PackedPalmaOperationType::WriteWaveEntry; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -166,7 +168,7 @@ Result Palma::SetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& | |||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     database_id_version = database_id_version_; |     database_id_version = database_id_version_; | ||||||
|     operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion; |     operation.operation = PackedPalmaOperationType::ReadDataBaseIdentificationVersion; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data[0] = {}; |     operation.data[0] = {}; | ||||||
|     operation_complete_event->Signal(); |     operation_complete_event->Signal(); | ||||||
| @ -177,7 +179,7 @@ Result Palma::GetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& | |||||||
|     if (handle.npad_id != active_handle.npad_id) { |     if (handle.npad_id != active_handle.npad_id) { | ||||||
|         return InvalidPalmaHandle; |         return InvalidPalmaHandle; | ||||||
|     } |     } | ||||||
|     operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion; |     operation.operation = PackedPalmaOperationType::ReadDataBaseIdentificationVersion; | ||||||
|     operation.result = PalmaResultSuccess; |     operation.result = PalmaResultSuccess; | ||||||
|     operation.data = {}; |     operation.data = {}; | ||||||
|     operation.data[0] = static_cast<u8>(database_id_version); |     operation.data[0] = static_cast<u8>(database_id_version); | ||||||
|  | |||||||
| @ -4,6 +4,8 @@ | |||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <span> | ||||||
|  | 
 | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/typed_address.h" | #include "common/typed_address.h" | ||||||
| #include "hid_core/hid_result.h" | #include "hid_core/hid_result.h" | ||||||
| @ -27,9 +29,31 @@ namespace Service::HID { | |||||||
| class Palma final : public ControllerBase { | class Palma final : public ControllerBase { | ||||||
| public: | public: | ||||||
|     using PalmaOperationData = std::array<u8, 0x140>; |     using PalmaOperationData = std::array<u8, 0x140>; | ||||||
|  |     using PalmaApplicationSection = std::array<u8, 0x100>; | ||||||
|  |     using Address = std::array<u8, 0x6>; | ||||||
| 
 | 
 | ||||||
|     // This is nn::hid::PalmaOperationType
 |     // This is nn::hid::PalmaOperationType
 | ||||||
|     enum class PalmaOperationType { |     enum class PalmaOperationType : u64 { | ||||||
|  |         PlayActivity, | ||||||
|  |         SetFrModeType, | ||||||
|  |         ReadStep, | ||||||
|  |         EnableStep, | ||||||
|  |         ResetStep, | ||||||
|  |         ReadApplicationSection, | ||||||
|  |         WriteApplicationSection, | ||||||
|  |         ReadUniqueCode, | ||||||
|  |         SetUniqueCodeInvalid, | ||||||
|  |         WriteActivityEntry, | ||||||
|  |         WriteRgbLedPatternEntry, | ||||||
|  |         WriteWaveEntry, | ||||||
|  |         ReadDataBaseIdentificationVersion, | ||||||
|  |         WriteDataBaseIdentificationVersion, | ||||||
|  |         SuspendFeature, | ||||||
|  |         ReadPlayLog, | ||||||
|  |         ResetPlayLog, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     enum class PackedPalmaOperationType : u32 { | ||||||
|         PlayActivity, |         PlayActivity, | ||||||
|         SetFrModeType, |         SetFrModeType, | ||||||
|         ReadStep, |         ReadStep, | ||||||
| @ -75,7 +99,7 @@ public: | |||||||
| 
 | 
 | ||||||
|     // This is nn::hid::PalmaOperationInfo
 |     // This is nn::hid::PalmaOperationInfo
 | ||||||
|     struct PalmaOperationInfo { |     struct PalmaOperationInfo { | ||||||
|         PalmaOperationType operation{}; |         PackedPalmaOperationType operation{}; | ||||||
|         Result result{PalmaResultSuccess}; |         Result result{PalmaResultSuccess}; | ||||||
|         PalmaOperationData data{}; |         PalmaOperationData data{}; | ||||||
|     }; |     }; | ||||||
| @ -92,8 +116,7 @@ public: | |||||||
|     static_assert(sizeof(PalmaActivityEntry) == 0x20, "PalmaActivityEntry is an invalid size"); |     static_assert(sizeof(PalmaActivityEntry) == 0x20, "PalmaActivityEntry is an invalid size"); | ||||||
| 
 | 
 | ||||||
|     struct PalmaConnectionHandle { |     struct PalmaConnectionHandle { | ||||||
|         Core::HID::NpadIdType npad_id; |         alignas(8) Core::HID::NpadIdType npad_id; | ||||||
|         INSERT_PADDING_BYTES(4); // Unknown
 |  | ||||||
|     }; |     }; | ||||||
|     static_assert(sizeof(PalmaConnectionHandle) == 0x8, |     static_assert(sizeof(PalmaConnectionHandle) == 0x8, | ||||||
|                   "PalmaConnectionHandle has incorrect size."); |                   "PalmaConnectionHandle has incorrect size."); | ||||||
| @ -115,8 +138,7 @@ public: | |||||||
|     Kernel::KReadableEvent& AcquirePalmaOperationCompleteEvent( |     Kernel::KReadableEvent& AcquirePalmaOperationCompleteEvent( | ||||||
|         const PalmaConnectionHandle& handle) const; |         const PalmaConnectionHandle& handle) const; | ||||||
|     Result GetPalmaOperationInfo(const PalmaConnectionHandle& handle, |     Result GetPalmaOperationInfo(const PalmaConnectionHandle& handle, | ||||||
|                                  PalmaOperationType& operation_type, |                                  PalmaOperationType& operation_type, std::span<u8> out_data) const; | ||||||
|                                  PalmaOperationData& data) const; |  | ||||||
|     Result PlayPalmaActivity(const PalmaConnectionHandle& handle, u64 palma_activity); |     Result PlayPalmaActivity(const PalmaConnectionHandle& handle, u64 palma_activity); | ||||||
|     Result SetPalmaFrModeType(const PalmaConnectionHandle& handle, PalmaFrModeType fr_mode_); |     Result SetPalmaFrModeType(const PalmaConnectionHandle& handle, PalmaFrModeType fr_mode_); | ||||||
|     Result ReadPalmaStep(const PalmaConnectionHandle& handle); |     Result ReadPalmaStep(const PalmaConnectionHandle& handle); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user