mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06: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