mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 16:09:03 -05:00 
			
		
		
		
	Merge pull request #2836 from Morph1984/hid_vibration
hid: Implement PermitVibration and IsVibrationPermitted
This commit is contained in:
		| @@ -636,10 +636,15 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) { | ||||
|         return LedPattern{0, 0, 0, 0}; | ||||
|     }; | ||||
| } | ||||
|  | ||||
| void Controller_NPad::SetVibrationEnabled(bool can_vibrate) { | ||||
|     can_controllers_vibrate = can_vibrate; | ||||
| } | ||||
|  | ||||
| bool Controller_NPad::IsVibrationEnabled() const { | ||||
|     return can_controllers_vibrate; | ||||
| } | ||||
|  | ||||
| void Controller_NPad::ClearAllConnectedControllers() { | ||||
|     for (auto& controller : connected_controllers) { | ||||
|         if (controller.is_connected && controller.type != NPadControllerType::None) { | ||||
| @@ -648,6 +653,7 @@ void Controller_NPad::ClearAllConnectedControllers() { | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| void Controller_NPad::DisconnectAllConnectedControllers() { | ||||
|     std::for_each(connected_controllers.begin(), connected_controllers.end(), | ||||
|                   [](ControllerHolder& controller) { controller.is_connected = false; }); | ||||
|   | ||||
| @@ -119,6 +119,7 @@ public: | ||||
|     void DisconnectNPad(u32 npad_id); | ||||
|     LedPattern GetLedPattern(u32 npad_id); | ||||
|     void SetVibrationEnabled(bool can_vibrate); | ||||
|     bool IsVibrationEnabled() const; | ||||
|     void ClearAllConnectedControllers(); | ||||
|     void DisconnectAllConnectedControllers(); | ||||
|     void ConnectAllDisconnectedControllers(); | ||||
|   | ||||
| @@ -216,8 +216,8 @@ Hid::Hid() : ServiceFramework("hid") { | ||||
|         {201, &Hid::SendVibrationValue, "SendVibrationValue"}, | ||||
|         {202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"}, | ||||
|         {203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"}, | ||||
|         {204, nullptr, "PermitVibration"}, | ||||
|         {205, nullptr, "IsVibrationPermitted"}, | ||||
|         {204, &Hid::PermitVibration, "PermitVibration"}, | ||||
|         {205, &Hid::IsVibrationPermitted, "IsVibrationPermitted"}, | ||||
|         {206, &Hid::SendVibrationValues, "SendVibrationValues"}, | ||||
|         {207, nullptr, "SendVibrationGcErmCommand"}, | ||||
|         {208, nullptr, "GetActualVibrationGcErmCommand"}, | ||||
| @@ -679,6 +679,27 @@ void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) { | ||||
|     rb.PushIpcInterface<IActiveVibrationDeviceList>(); | ||||
| } | ||||
|  | ||||
| void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto can_vibrate{rp.Pop<bool>()}; | ||||
|     applet_resource->GetController<Controller_NPad>(HidController::NPad) | ||||
|         .SetVibrationEnabled(can_vibrate); | ||||
|  | ||||
|     LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
|  | ||||
| void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_HID, "called"); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 3}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.Push( | ||||
|         applet_resource->GetController<Controller_NPad>(HidController::NPad).IsVibrationEnabled()); | ||||
| } | ||||
|  | ||||
| void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto applet_resource_user_id{rp.Pop<u64>()}; | ||||
|   | ||||
| @@ -114,6 +114,8 @@ private: | ||||
|     void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx); | ||||
|     void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx); | ||||
|     void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); | ||||
|     void PermitVibration(Kernel::HLERequestContext& ctx); | ||||
|     void IsVibrationPermitted(Kernel::HLERequestContext& ctx); | ||||
|     void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx); | ||||
|     void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx); | ||||
|     void StopSixAxisSensor(Kernel::HLERequestContext& ctx); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David
					David