Merge pull request #2836 from Morph1984/hid_vibration
hid: Implement PermitVibration and IsVibrationPermitted
This commit is contained in:
commit
67bdd8ed58
|
@ -636,10 +636,15 @@ Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) {
|
||||||
return LedPattern{0, 0, 0, 0};
|
return LedPattern{0, 0, 0, 0};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller_NPad::SetVibrationEnabled(bool can_vibrate) {
|
void Controller_NPad::SetVibrationEnabled(bool can_vibrate) {
|
||||||
can_controllers_vibrate = can_vibrate;
|
can_controllers_vibrate = can_vibrate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Controller_NPad::IsVibrationEnabled() const {
|
||||||
|
return can_controllers_vibrate;
|
||||||
|
}
|
||||||
|
|
||||||
void Controller_NPad::ClearAllConnectedControllers() {
|
void Controller_NPad::ClearAllConnectedControllers() {
|
||||||
for (auto& controller : connected_controllers) {
|
for (auto& controller : connected_controllers) {
|
||||||
if (controller.is_connected && controller.type != NPadControllerType::None) {
|
if (controller.is_connected && controller.type != NPadControllerType::None) {
|
||||||
|
@ -648,6 +653,7 @@ void Controller_NPad::ClearAllConnectedControllers() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Controller_NPad::DisconnectAllConnectedControllers() {
|
void Controller_NPad::DisconnectAllConnectedControllers() {
|
||||||
std::for_each(connected_controllers.begin(), connected_controllers.end(),
|
std::for_each(connected_controllers.begin(), connected_controllers.end(),
|
||||||
[](ControllerHolder& controller) { controller.is_connected = false; });
|
[](ControllerHolder& controller) { controller.is_connected = false; });
|
||||||
|
|
|
@ -119,6 +119,7 @@ public:
|
||||||
void DisconnectNPad(u32 npad_id);
|
void DisconnectNPad(u32 npad_id);
|
||||||
LedPattern GetLedPattern(u32 npad_id);
|
LedPattern GetLedPattern(u32 npad_id);
|
||||||
void SetVibrationEnabled(bool can_vibrate);
|
void SetVibrationEnabled(bool can_vibrate);
|
||||||
|
bool IsVibrationEnabled() const;
|
||||||
void ClearAllConnectedControllers();
|
void ClearAllConnectedControllers();
|
||||||
void DisconnectAllConnectedControllers();
|
void DisconnectAllConnectedControllers();
|
||||||
void ConnectAllDisconnectedControllers();
|
void ConnectAllDisconnectedControllers();
|
||||||
|
|
|
@ -216,8 +216,8 @@ Hid::Hid() : ServiceFramework("hid") {
|
||||||
{201, &Hid::SendVibrationValue, "SendVibrationValue"},
|
{201, &Hid::SendVibrationValue, "SendVibrationValue"},
|
||||||
{202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"},
|
{202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"},
|
||||||
{203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"},
|
{203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"},
|
||||||
{204, nullptr, "PermitVibration"},
|
{204, &Hid::PermitVibration, "PermitVibration"},
|
||||||
{205, nullptr, "IsVibrationPermitted"},
|
{205, &Hid::IsVibrationPermitted, "IsVibrationPermitted"},
|
||||||
{206, &Hid::SendVibrationValues, "SendVibrationValues"},
|
{206, &Hid::SendVibrationValues, "SendVibrationValues"},
|
||||||
{207, nullptr, "SendVibrationGcErmCommand"},
|
{207, nullptr, "SendVibrationGcErmCommand"},
|
||||||
{208, nullptr, "GetActualVibrationGcErmCommand"},
|
{208, nullptr, "GetActualVibrationGcErmCommand"},
|
||||||
|
@ -679,6 +679,27 @@ void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) {
|
||||||
rb.PushIpcInterface<IActiveVibrationDeviceList>();
|
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) {
|
void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
const auto applet_resource_user_id{rp.Pop<u64>()};
|
const auto applet_resource_user_id{rp.Pop<u64>()};
|
||||||
|
|
|
@ -114,6 +114,8 @@ private:
|
||||||
void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
|
void SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx);
|
||||||
void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
|
void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
|
||||||
void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx);
|
void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx);
|
||||||
|
void PermitVibration(Kernel::HLERequestContext& ctx);
|
||||||
|
void IsVibrationPermitted(Kernel::HLERequestContext& ctx);
|
||||||
void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
|
void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
|
||||||
void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
|
void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
|
||||||
void StopSixAxisSensor(Kernel::HLERequestContext& ctx);
|
void StopSixAxisSensor(Kernel::HLERequestContext& ctx);
|
||||||
|
|
Reference in New Issue