summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Morph2020-10-06 07:00:18 -0400
committerGravatar Morph2020-11-15 23:33:20 -0500
commite3c274998603b1bf3aa00a79474f5796c7dadac6 (patch)
tree0874e2eeb43d8c9aa3c8fd98eafc100db2ffceb8 /src
parenthid: Implement GetVibrationDeviceInfo (diff)
downloadyuzu-e3c274998603b1bf3aa00a79474f5796c7dadac6.tar.gz
yuzu-e3c274998603b1bf3aa00a79474f5796c7dadac6.tar.xz
yuzu-e3c274998603b1bf3aa00a79474f5796c7dadac6.zip
hid: Reorder all HID commands
Reorders all HID commands in command id order.
Diffstat (limited to 'src')
-rw-r--r--src/core/frontend/applets/controller.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp34
-rw-r--r--src/core/hle/service/hid/controllers/npad.h14
-rw-r--r--src/core/hle/service/hid/hid.cpp377
-rw-r--r--src/core/hle/service/hid/hid.h20
5 files changed, 232 insertions, 217 deletions
diff --git a/src/core/frontend/applets/controller.cpp b/src/core/frontend/applets/controller.cpp
index 1ac2fb80c..03bbedf8b 100644
--- a/src/core/frontend/applets/controller.cpp
+++ b/src/core/frontend/applets/controller.cpp
@@ -33,13 +33,13 @@ void DefaultControllerApplet::ReconfigureControllers(std::function<void()> callb
33 parameters.enable_single_mode ? 1 : parameters.min_players; 33 parameters.enable_single_mode ? 1 : parameters.min_players;
34 34
35 // Disconnect Handheld first. 35 // Disconnect Handheld first.
36 npad.DisconnectNPadAtIndex(8); 36 npad.DisconnectNpadAtIndex(8);
37 37
38 // Deduce the best configuration based on the input parameters. 38 // Deduce the best configuration based on the input parameters.
39 for (std::size_t index = 0; index < players.size() - 2; ++index) { 39 for (std::size_t index = 0; index < players.size() - 2; ++index) {
40 // First, disconnect all controllers regardless of the value of keep_controllers_connected. 40 // First, disconnect all controllers regardless of the value of keep_controllers_connected.
41 // This makes it easy to connect the desired controllers. 41 // This makes it easy to connect the desired controllers.
42 npad.DisconnectNPadAtIndex(index); 42 npad.DisconnectNpadAtIndex(index);
43 43
44 // Only connect the minimum number of required players. 44 // Only connect the minimum number of required players.
45 if (index >= min_supported_players) { 45 if (index >= min_supported_players) {
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 8181bddbc..b330c5e40 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -139,7 +139,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
139 controller.properties.is_vertical.Assign(1); 139 controller.properties.is_vertical.Assign(1);
140 controller.properties.use_plus.Assign(1); 140 controller.properties.use_plus.Assign(1);
141 controller.properties.use_minus.Assign(1); 141 controller.properties.use_minus.Assign(1);
142 controller.pad_assignment = NPadAssignments::Single; 142 controller.pad_assignment = NpadAssignments::Single;
143 break; 143 break;
144 case NPadControllerType::Handheld: 144 case NPadControllerType::Handheld:
145 controller.joy_styles.handheld.Assign(1); 145 controller.joy_styles.handheld.Assign(1);
@@ -147,7 +147,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
147 controller.properties.is_vertical.Assign(1); 147 controller.properties.is_vertical.Assign(1);
148 controller.properties.use_plus.Assign(1); 148 controller.properties.use_plus.Assign(1);
149 controller.properties.use_minus.Assign(1); 149 controller.properties.use_minus.Assign(1);
150 controller.pad_assignment = NPadAssignments::Dual; 150 controller.pad_assignment = NpadAssignments::Dual;
151 break; 151 break;
152 case NPadControllerType::JoyDual: 152 case NPadControllerType::JoyDual:
153 controller.joy_styles.joycon_dual.Assign(1); 153 controller.joy_styles.joycon_dual.Assign(1);
@@ -156,26 +156,26 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
156 controller.properties.is_vertical.Assign(1); 156 controller.properties.is_vertical.Assign(1);
157 controller.properties.use_plus.Assign(1); 157 controller.properties.use_plus.Assign(1);
158 controller.properties.use_minus.Assign(1); 158 controller.properties.use_minus.Assign(1);
159 controller.pad_assignment = NPadAssignments::Dual; 159 controller.pad_assignment = NpadAssignments::Dual;
160 break; 160 break;
161 case NPadControllerType::JoyLeft: 161 case NPadControllerType::JoyLeft:
162 controller.joy_styles.joycon_left.Assign(1); 162 controller.joy_styles.joycon_left.Assign(1);
163 controller.device_type.joycon_left.Assign(1); 163 controller.device_type.joycon_left.Assign(1);
164 controller.properties.is_horizontal.Assign(1); 164 controller.properties.is_horizontal.Assign(1);
165 controller.properties.use_minus.Assign(1); 165 controller.properties.use_minus.Assign(1);
166 controller.pad_assignment = NPadAssignments::Single; 166 controller.pad_assignment = NpadAssignments::Single;
167 break; 167 break;
168 case NPadControllerType::JoyRight: 168 case NPadControllerType::JoyRight:
169 controller.joy_styles.joycon_right.Assign(1); 169 controller.joy_styles.joycon_right.Assign(1);
170 controller.device_type.joycon_right.Assign(1); 170 controller.device_type.joycon_right.Assign(1);
171 controller.properties.is_horizontal.Assign(1); 171 controller.properties.is_horizontal.Assign(1);
172 controller.properties.use_plus.Assign(1); 172 controller.properties.use_plus.Assign(1);
173 controller.pad_assignment = NPadAssignments::Single; 173 controller.pad_assignment = NpadAssignments::Single;
174 break; 174 break;
175 case NPadControllerType::Pokeball: 175 case NPadControllerType::Pokeball:
176 controller.joy_styles.pokeball.Assign(1); 176 controller.joy_styles.pokeball.Assign(1);
177 controller.device_type.pokeball.Assign(1); 177 controller.device_type.pokeball.Assign(1);
178 controller.pad_assignment = NPadAssignments::Single; 178 controller.pad_assignment = NpadAssignments::Single;
179 break; 179 break;
180 } 180 }
181 181
@@ -202,7 +202,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
202 202
203void Controller_NPad::OnInit() { 203void Controller_NPad::OnInit() {
204 auto& kernel = system.Kernel(); 204 auto& kernel = system.Kernel();
205 for (std::size_t i = 0; i < styleset_changed_events.size(); i++) { 205 for (std::size_t i = 0; i < styleset_changed_events.size(); ++i) {
206 styleset_changed_events[i] = Kernel::WritableEvent::CreateEventPair( 206 styleset_changed_events[i] = Kernel::WritableEvent::CreateEventPair(
207 kernel, fmt::format("npad:NpadStyleSetChanged_{}", i)); 207 kernel, fmt::format("npad:NpadStyleSetChanged_{}", i));
208 } 208 }
@@ -357,7 +357,7 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
357 if (!IsControllerActivated()) { 357 if (!IsControllerActivated()) {
358 return; 358 return;
359 } 359 }
360 for (std::size_t i = 0; i < shared_memory_entries.size(); i++) { 360 for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) {
361 auto& npad = shared_memory_entries[i]; 361 auto& npad = shared_memory_entries[i];
362 const std::array<NPadGeneric*, 7> controller_npads{&npad.main_controller_states, 362 const std::array<NPadGeneric*, 7> controller_npads{&npad.main_controller_states,
363 &npad.handheld_states, 363 &npad.handheld_states,
@@ -499,7 +499,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
499 if (!IsControllerActivated()) { 499 if (!IsControllerActivated()) {
500 return; 500 return;
501 } 501 }
502 for (std::size_t i = 0; i < shared_memory_entries.size(); i++) { 502 for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) {
503 auto& npad = shared_memory_entries[i]; 503 auto& npad = shared_memory_entries[i];
504 504
505 const auto& controller_type = connected_controllers[i].type; 505 const auto& controller_type = connected_controllers[i].type;
@@ -627,7 +627,7 @@ Controller_NPad::NpadStyleSet Controller_NPad::GetSupportedStyleSet() const {
627 return style; 627 return style;
628} 628}
629 629
630void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) { 630void Controller_NPad::SetSupportedNpadIdTypes(u8* data, std::size_t length) {
631 ASSERT(length > 0 && (length % sizeof(u32)) == 0); 631 ASSERT(length > 0 && (length % sizeof(u32)) == 0);
632 supported_npad_id_types.clear(); 632 supported_npad_id_types.clear();
633 supported_npad_id_types.resize(length / sizeof(u32)); 633 supported_npad_id_types.resize(length / sizeof(u32));
@@ -639,7 +639,7 @@ void Controller_NPad::GetSupportedNpadIdTypes(u32* data, std::size_t max_length)
639 std::memcpy(data, supported_npad_id_types.data(), supported_npad_id_types.size()); 639 std::memcpy(data, supported_npad_id_types.data(), supported_npad_id_types.size());
640} 640}
641 641
642std::size_t Controller_NPad::GetSupportedNPadIdTypesSize() const { 642std::size_t Controller_NPad::GetSupportedNpadIdTypesSize() const {
643 return supported_npad_id_types.size(); 643 return supported_npad_id_types.size();
644} 644}
645 645
@@ -659,7 +659,7 @@ Controller_NPad::NpadHandheldActivationMode Controller_NPad::GetNpadHandheldActi
659 return handheld_activation_mode; 659 return handheld_activation_mode;
660} 660}
661 661
662void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode) { 662void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) {
663 const std::size_t npad_index = NPadIdToIndex(npad_id); 663 const std::size_t npad_index = NPadIdToIndex(npad_id);
664 ASSERT(npad_index < shared_memory_entries.size()); 664 ASSERT(npad_index < shared_memory_entries.size());
665 if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) { 665 if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) {
@@ -714,7 +714,7 @@ void Controller_NPad::AddNewControllerAt(NPadControllerType controller, std::siz
714void Controller_NPad::UpdateControllerAt(NPadControllerType controller, std::size_t npad_index, 714void Controller_NPad::UpdateControllerAt(NPadControllerType controller, std::size_t npad_index,
715 bool connected) { 715 bool connected) {
716 if (!connected) { 716 if (!connected) {
717 DisconnectNPadAtIndex(npad_index); 717 DisconnectNpadAtIndex(npad_index);
718 return; 718 return;
719 } 719 }
720 720
@@ -734,11 +734,11 @@ void Controller_NPad::UpdateControllerAt(NPadControllerType controller, std::siz
734 InitNewlyAddedController(npad_index); 734 InitNewlyAddedController(npad_index);
735} 735}
736 736
737void Controller_NPad::DisconnectNPad(u32 npad_id) { 737void Controller_NPad::DisconnectNpad(u32 npad_id) {
738 DisconnectNPadAtIndex(NPadIdToIndex(npad_id)); 738 DisconnectNpadAtIndex(NPadIdToIndex(npad_id));
739} 739}
740 740
741void Controller_NPad::DisconnectNPadAtIndex(std::size_t npad_index) { 741void Controller_NPad::DisconnectNpadAtIndex(std::size_t npad_index) {
742 Settings::values.players.GetValue()[npad_index].connected = false; 742 Settings::values.players.GetValue()[npad_index].connected = false;
743 connected_controllers[npad_index].is_connected = false; 743 connected_controllers[npad_index].is_connected = false;
744 744
@@ -777,7 +777,7 @@ void Controller_NPad::MergeSingleJoyAsDualJoy(u32 npad_id_1, u32 npad_id_2) {
777 (connected_controllers[npad_index_2].type == NPadControllerType::JoyLeft && 777 (connected_controllers[npad_index_2].type == NPadControllerType::JoyLeft &&
778 connected_controllers[npad_index_1].type == NPadControllerType::JoyRight)) { 778 connected_controllers[npad_index_1].type == NPadControllerType::JoyRight)) {
779 // Disconnect the joycon at the second id and connect the dual joycon at the first index. 779 // Disconnect the joycon at the second id and connect the dual joycon at the first index.
780 DisconnectNPad(npad_id_2); 780 DisconnectNpad(npad_id_2);
781 AddNewControllerAt(NPadControllerType::JoyDual, npad_index_1); 781 AddNewControllerAt(NPadControllerType::JoyDual, npad_index_1);
782 } 782 }
783} 783}
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index fed8425b1..35dd2bf5f 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -75,7 +75,7 @@ public:
75 Horizontal = 1, 75 Horizontal = 1,
76 }; 76 };
77 77
78 enum class NPadAssignments : u32 { 78 enum class NpadAssignments : u32 {
79 Dual = 0, 79 Dual = 0,
80 Single = 1, 80 Single = 1,
81 }; 81 };
@@ -136,9 +136,9 @@ public:
136 void SetSupportedStyleSet(NpadStyleSet style_set); 136 void SetSupportedStyleSet(NpadStyleSet style_set);
137 NpadStyleSet GetSupportedStyleSet() const; 137 NpadStyleSet GetSupportedStyleSet() const;
138 138
139 void SetSupportedNPadIdTypes(u8* data, std::size_t length); 139 void SetSupportedNpadIdTypes(u8* data, std::size_t length);
140 void GetSupportedNpadIdTypes(u32* data, std::size_t max_length); 140 void GetSupportedNpadIdTypes(u32* data, std::size_t max_length);
141 std::size_t GetSupportedNPadIdTypesSize() const; 141 std::size_t GetSupportedNpadIdTypesSize() const;
142 142
143 void SetHoldType(NpadHoldType joy_hold_type); 143 void SetHoldType(NpadHoldType joy_hold_type);
144 NpadHoldType GetHoldType() const; 144 NpadHoldType GetHoldType() const;
@@ -146,7 +146,7 @@ public:
146 void SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode); 146 void SetNpadHandheldActivationMode(NpadHandheldActivationMode activation_mode);
147 NpadHandheldActivationMode GetNpadHandheldActivationMode() const; 147 NpadHandheldActivationMode GetNpadHandheldActivationMode() const;
148 148
149 void SetNpadMode(u32 npad_id, NPadAssignments assignment_mode); 149 void SetNpadMode(u32 npad_id, NpadAssignments assignment_mode);
150 150
151 void VibrateController(const std::vector<u32>& controllers, 151 void VibrateController(const std::vector<u32>& controllers,
152 const std::vector<Vibration>& vibrations); 152 const std::vector<Vibration>& vibrations);
@@ -161,8 +161,8 @@ public:
161 // Adds a new controller at an index with connection status. 161 // Adds a new controller at an index with connection status.
162 void UpdateControllerAt(NPadControllerType controller, std::size_t npad_index, bool connected); 162 void UpdateControllerAt(NPadControllerType controller, std::size_t npad_index, bool connected);
163 163
164 void DisconnectNPad(u32 npad_id); 164 void DisconnectNpad(u32 npad_id);
165 void DisconnectNPadAtIndex(std::size_t index); 165 void DisconnectNpadAtIndex(std::size_t index);
166 166
167 void SetGyroscopeZeroDriftMode(GyroscopeZeroDriftMode drift_mode); 167 void SetGyroscopeZeroDriftMode(GyroscopeZeroDriftMode drift_mode);
168 GyroscopeZeroDriftMode GetGyroscopeZeroDriftMode() const; 168 GyroscopeZeroDriftMode GetGyroscopeZeroDriftMode() const;
@@ -348,7 +348,7 @@ private:
348 348
349 struct NPadEntry { 349 struct NPadEntry {
350 NpadStyleSet joy_styles; 350 NpadStyleSet joy_styles;
351 NPadAssignments pad_assignment; 351 NpadAssignments pad_assignment;
352 352
353 ColorReadError single_color_error; 353 ColorReadError single_color_error;
354 ControllerColor single_color; 354 ControllerColor single_color;
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 993738f36..9a631008f 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -328,131 +328,113 @@ void Hid::CreateAppletResource(Kernel::HLERequestContext& ctx) {
328 rb.PushIpcInterface<IAppletResource>(applet_resource); 328 rb.PushIpcInterface<IAppletResource>(applet_resource);
329} 329}
330 330
331void Hid::ActivateXpad(Kernel::HLERequestContext& ctx) { 331void Hid::ActivateDebugPad(Kernel::HLERequestContext& ctx) {
332 IPC::RequestParser rp{ctx}; 332 IPC::RequestParser rp{ctx};
333 const auto basic_xpad_id{rp.Pop<u32>()};
334 const auto applet_resource_user_id{rp.Pop<u64>()}; 333 const auto applet_resource_user_id{rp.Pop<u64>()};
335 334
336 LOG_DEBUG(Service_HID, "called, basic_xpad_id={}, applet_resource_user_id={}", basic_xpad_id, 335 applet_resource->ActivateController(HidController::DebugPad);
337 applet_resource_user_id); 336
337 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
338 338
339 applet_resource->ActivateController(HidController::XPad);
340 IPC::ResponseBuilder rb{ctx, 2}; 339 IPC::ResponseBuilder rb{ctx, 2};
341 rb.Push(RESULT_SUCCESS); 340 rb.Push(RESULT_SUCCESS);
342} 341}
343 342
344void Hid::GetXpadIDs(Kernel::HLERequestContext& ctx) { 343void Hid::ActivateTouchScreen(Kernel::HLERequestContext& ctx) {
345 IPC::RequestParser rp{ctx}; 344 IPC::RequestParser rp{ctx};
346 const auto applet_resource_user_id{rp.Pop<u64>()}; 345 const auto applet_resource_user_id{rp.Pop<u64>()};
347 346
348 LOG_DEBUG(Service_HID, "(STUBBED) called, applet_resource_user_id={}", applet_resource_user_id); 347 applet_resource->ActivateController(HidController::Touchscreen);
349
350 IPC::ResponseBuilder rb{ctx, 3};
351 rb.Push(RESULT_SUCCESS);
352 rb.Push(0);
353}
354 348
355void Hid::ActivateSixAxisSensor(Kernel::HLERequestContext& ctx) { 349 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
356 IPC::RequestParser rp{ctx};
357 const auto handle{rp.Pop<u32>()};
358 const auto applet_resource_user_id{rp.Pop<u64>()};
359 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(true);
360 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle,
361 applet_resource_user_id);
362 350
363 IPC::ResponseBuilder rb{ctx, 2}; 351 IPC::ResponseBuilder rb{ctx, 2};
364 rb.Push(RESULT_SUCCESS); 352 rb.Push(RESULT_SUCCESS);
365} 353}
366 354
367void Hid::DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx) { 355void Hid::ActivateMouse(Kernel::HLERequestContext& ctx) {
368 IPC::RequestParser rp{ctx}; 356 IPC::RequestParser rp{ctx};
369 const auto handle{rp.Pop<u32>()};
370 const auto applet_resource_user_id{rp.Pop<u64>()}; 357 const auto applet_resource_user_id{rp.Pop<u64>()};
371 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(false);
372 358
373 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 359 applet_resource->ActivateController(HidController::Mouse);
374 applet_resource_user_id);
375
376 IPC::ResponseBuilder rb{ctx, 2};
377 rb.Push(RESULT_SUCCESS);
378}
379
380void Hid::ActivateDebugPad(Kernel::HLERequestContext& ctx) {
381 IPC::RequestParser rp{ctx};
382 const auto applet_resource_user_id{rp.Pop<u64>()};
383 360
384 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 361 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
385 362
386 applet_resource->ActivateController(HidController::DebugPad);
387 IPC::ResponseBuilder rb{ctx, 2}; 363 IPC::ResponseBuilder rb{ctx, 2};
388 rb.Push(RESULT_SUCCESS); 364 rb.Push(RESULT_SUCCESS);
389} 365}
390 366
391void Hid::ActivateTouchScreen(Kernel::HLERequestContext& ctx) { 367void Hid::ActivateKeyboard(Kernel::HLERequestContext& ctx) {
392 IPC::RequestParser rp{ctx}; 368 IPC::RequestParser rp{ctx};
393 const auto applet_resource_user_id{rp.Pop<u64>()}; 369 const auto applet_resource_user_id{rp.Pop<u64>()};
394 370
371 applet_resource->ActivateController(HidController::Keyboard);
372
395 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 373 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
396 374
397 applet_resource->ActivateController(HidController::Touchscreen);
398 IPC::ResponseBuilder rb{ctx, 2}; 375 IPC::ResponseBuilder rb{ctx, 2};
399 rb.Push(RESULT_SUCCESS); 376 rb.Push(RESULT_SUCCESS);
400} 377}
401 378
402void Hid::ActivateMouse(Kernel::HLERequestContext& ctx) { 379void Hid::SendKeyboardLockKeyEvent(Kernel::HLERequestContext& ctx) {
403 IPC::RequestParser rp{ctx}; 380 IPC::RequestParser rp{ctx};
404 const auto applet_resource_user_id{rp.Pop<u64>()}; 381 const auto flags{rp.Pop<u32>()};
405 382
406 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 383 LOG_WARNING(Service_HID, "(STUBBED) called. flags={}", flags);
407 384
408 applet_resource->ActivateController(HidController::Mouse);
409 IPC::ResponseBuilder rb{ctx, 2}; 385 IPC::ResponseBuilder rb{ctx, 2};
410 rb.Push(RESULT_SUCCESS); 386 rb.Push(RESULT_SUCCESS);
411} 387}
412 388
413void Hid::ActivateKeyboard(Kernel::HLERequestContext& ctx) { 389void Hid::ActivateXpad(Kernel::HLERequestContext& ctx) {
414 IPC::RequestParser rp{ctx}; 390 IPC::RequestParser rp{ctx};
391 const auto basic_xpad_id{rp.Pop<u32>()};
415 const auto applet_resource_user_id{rp.Pop<u64>()}; 392 const auto applet_resource_user_id{rp.Pop<u64>()};
416 393
417 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 394 applet_resource->ActivateController(HidController::XPad);
395
396 LOG_DEBUG(Service_HID, "called, basic_xpad_id={}, applet_resource_user_id={}", basic_xpad_id,
397 applet_resource_user_id);
418 398
419 applet_resource->ActivateController(HidController::Keyboard);
420 IPC::ResponseBuilder rb{ctx, 2}; 399 IPC::ResponseBuilder rb{ctx, 2};
421 rb.Push(RESULT_SUCCESS); 400 rb.Push(RESULT_SUCCESS);
422} 401}
423 402
424void Hid::SendKeyboardLockKeyEvent(Kernel::HLERequestContext& ctx) { 403void Hid::GetXpadIDs(Kernel::HLERequestContext& ctx) {
425 IPC::RequestParser rp{ctx}; 404 IPC::RequestParser rp{ctx};
426 const auto flags{rp.Pop<u32>()}; 405 const auto applet_resource_user_id{rp.Pop<u64>()};
427 LOG_WARNING(Service_HID, "(STUBBED) called. flags={}", flags);
428 406
429 IPC::ResponseBuilder rb{ctx, 2}; 407 LOG_DEBUG(Service_HID, "(STUBBED) called, applet_resource_user_id={}", applet_resource_user_id);
408
409 IPC::ResponseBuilder rb{ctx, 3};
430 rb.Push(RESULT_SUCCESS); 410 rb.Push(RESULT_SUCCESS);
411 rb.Push(0);
431} 412}
432 413
433void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) { 414void Hid::ActivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
434 IPC::RequestParser rp{ctx}; 415 IPC::RequestParser rp{ctx};
435 const auto unknown{rp.Pop<u32>()}; 416 const auto handle{rp.Pop<u32>()};
436 const auto applet_resource_user_id{rp.Pop<u64>()}; 417 const auto applet_resource_user_id{rp.Pop<u64>()};
437 418
438 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown, 419 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(true);
420
421 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle,
439 applet_resource_user_id); 422 applet_resource_user_id);
440 423
441 applet_resource->ActivateController(HidController::Gesture);
442 IPC::ResponseBuilder rb{ctx, 2}; 424 IPC::ResponseBuilder rb{ctx, 2};
443 rb.Push(RESULT_SUCCESS); 425 rb.Push(RESULT_SUCCESS);
444} 426}
445 427
446void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { 428void Hid::DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
447 // Should have no effect with how our npad sets up the data
448 IPC::RequestParser rp{ctx}; 429 IPC::RequestParser rp{ctx};
449 const auto unknown{rp.Pop<u32>()}; 430 const auto handle{rp.Pop<u32>()};
450 const auto applet_resource_user_id{rp.Pop<u64>()}; 431 const auto applet_resource_user_id{rp.Pop<u64>()};
451 432
452 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown, 433 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(false);
434
435 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle,
453 applet_resource_user_id); 436 applet_resource_user_id);
454 437
455 applet_resource->ActivateController(HidController::NPad);
456 IPC::ResponseBuilder rb{ctx, 2}; 438 IPC::ResponseBuilder rb{ctx, 2};
457 rb.Push(RESULT_SUCCESS); 439 rb.Push(RESULT_SUCCESS);
458} 440}
@@ -487,8 +469,8 @@ void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) {
487 const auto handle{rp.Pop<u32>()}; 469 const auto handle{rp.Pop<u32>()};
488 const auto applet_resource_user_id{rp.Pop<u64>()}; 470 const auto applet_resource_user_id{rp.Pop<u64>()};
489 471
490 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", handle, 472 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", enable,
491 applet_resource_user_id); 473 handle, applet_resource_user_id);
492 474
493 IPC::ResponseBuilder rb{ctx, 2}; 475 IPC::ResponseBuilder rb{ctx, 2};
494 rb.Push(RESULT_SUCCESS); 476 rb.Push(RESULT_SUCCESS);
@@ -501,7 +483,7 @@ void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
501 const auto applet_resource_user_id{rp.Pop<u64>()}; 483 const auto applet_resource_user_id{rp.Pop<u64>()};
502 484
503 applet_resource->GetController<Controller_NPad>(HidController::NPad) 485 applet_resource->GetController<Controller_NPad>(HidController::NPad)
504 .SetGyroscopeZeroDriftMode(Controller_NPad::GyroscopeZeroDriftMode{drift_mode}); 486 .SetGyroscopeZeroDriftMode({drift_mode});
505 487
506 LOG_DEBUG(Service_HID, "called, handle={}, drift_mode={}, applet_resource_user_id={}", handle, 488 LOG_DEBUG(Service_HID, "called, handle={}, drift_mode={}, applet_resource_user_id={}", handle,
507 drift_mode, applet_resource_user_id); 489 drift_mode, applet_resource_user_id);
@@ -520,9 +502,8 @@ void Hid::GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
520 502
521 IPC::ResponseBuilder rb{ctx, 3}; 503 IPC::ResponseBuilder rb{ctx, 3};
522 rb.Push(RESULT_SUCCESS); 504 rb.Push(RESULT_SUCCESS);
523 rb.Push<u32>( 505 rb.PushEnum(applet_resource->GetController<Controller_NPad>(HidController::NPad)
524 static_cast<u32>(applet_resource->GetController<Controller_NPad>(HidController::NPad) 506 .GetGyroscopeZeroDriftMode());
525 .GetGyroscopeZeroDriftMode()));
526} 507}
527 508
528void Hid::ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 509void Hid::ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
@@ -554,15 +535,29 @@ void Hid::IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) {
554 .IsSixAxisSensorAtRest()); 535 .IsSixAxisSensorAtRest());
555} 536}
556 537
538void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) {
539 IPC::RequestParser rp{ctx};
540 const auto unknown{rp.Pop<u32>()};
541 const auto applet_resource_user_id{rp.Pop<u64>()};
542
543 applet_resource->ActivateController(HidController::Gesture);
544
545 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown,
546 applet_resource_user_id);
547
548 IPC::ResponseBuilder rb{ctx, 2};
549 rb.Push(RESULT_SUCCESS);
550}
551
557void Hid::SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) { 552void Hid::SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) {
558 IPC::RequestParser rp{ctx}; 553 IPC::RequestParser rp{ctx};
559 const auto supported_styleset{rp.Pop<u32>()}; 554 const auto supported_styleset{rp.Pop<u32>()};
560 555
561 LOG_DEBUG(Service_HID, "called, supported_styleset={}", supported_styleset);
562
563 applet_resource->GetController<Controller_NPad>(HidController::NPad) 556 applet_resource->GetController<Controller_NPad>(HidController::NPad)
564 .SetSupportedStyleSet({supported_styleset}); 557 .SetSupportedStyleSet({supported_styleset});
565 558
559 LOG_DEBUG(Service_HID, "called, supported_styleset={}", supported_styleset);
560
566 IPC::ResponseBuilder rb{ctx, 2}; 561 IPC::ResponseBuilder rb{ctx, 2};
567 rb.Push(RESULT_SUCCESS); 562 rb.Push(RESULT_SUCCESS);
568} 563}
@@ -573,21 +568,22 @@ void Hid::GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx) {
573 568
574 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 569 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
575 570
576 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
577
578 IPC::ResponseBuilder rb{ctx, 3}; 571 IPC::ResponseBuilder rb{ctx, 3};
579 rb.Push(RESULT_SUCCESS); 572 rb.Push(RESULT_SUCCESS);
580 rb.Push<u32>(controller.GetSupportedStyleSet().raw); 573 rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad)
574 .GetSupportedStyleSet()
575 .raw);
581} 576}
582 577
583void Hid::SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) { 578void Hid::SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) {
584 IPC::RequestParser rp{ctx}; 579 IPC::RequestParser rp{ctx};
585 const auto applet_resource_user_id{rp.Pop<u64>()}; 580 const auto applet_resource_user_id{rp.Pop<u64>()};
586 581
582 applet_resource->GetController<Controller_NPad>(HidController::NPad)
583 .SetSupportedNpadIdTypes(ctx.ReadBuffer().data(), ctx.GetReadBufferSize());
584
587 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 585 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
588 586
589 applet_resource->GetController<Controller_NPad>(HidController::NPad)
590 .SetSupportedNPadIdTypes(ctx.ReadBuffer().data(), ctx.GetReadBufferSize());
591 IPC::ResponseBuilder rb{ctx, 2}; 587 IPC::ResponseBuilder rb{ctx, 2};
592 rb.Push(RESULT_SUCCESS); 588 rb.Push(RESULT_SUCCESS);
593} 589}
@@ -596,22 +592,24 @@ void Hid::ActivateNpad(Kernel::HLERequestContext& ctx) {
596 IPC::RequestParser rp{ctx}; 592 IPC::RequestParser rp{ctx};
597 const auto applet_resource_user_id{rp.Pop<u64>()}; 593 const auto applet_resource_user_id{rp.Pop<u64>()};
598 594
595 applet_resource->ActivateController(HidController::NPad);
596
599 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 597 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
600 598
601 IPC::ResponseBuilder rb{ctx, 2}; 599 IPC::ResponseBuilder rb{ctx, 2};
602 rb.Push(RESULT_SUCCESS); 600 rb.Push(RESULT_SUCCESS);
603 applet_resource->ActivateController(HidController::NPad);
604} 601}
605 602
606void Hid::DeactivateNpad(Kernel::HLERequestContext& ctx) { 603void Hid::DeactivateNpad(Kernel::HLERequestContext& ctx) {
607 IPC::RequestParser rp{ctx}; 604 IPC::RequestParser rp{ctx};
608 const auto applet_resource_user_id{rp.Pop<u64>()}; 605 const auto applet_resource_user_id{rp.Pop<u64>()};
609 606
607 applet_resource->DeactivateController(HidController::NPad);
608
610 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 609 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
611 610
612 IPC::ResponseBuilder rb{ctx, 2}; 611 IPC::ResponseBuilder rb{ctx, 2};
613 rb.Push(RESULT_SUCCESS); 612 rb.Push(RESULT_SUCCESS);
614 applet_resource->DeactivateController(HidController::NPad);
615} 613}
616 614
617void Hid::AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) { 615void Hid::AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) {
@@ -634,10 +632,11 @@ void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) {
634 const auto npad_id{rp.Pop<u32>()}; 632 const auto npad_id{rp.Pop<u32>()};
635 const auto applet_resource_user_id{rp.Pop<u64>()}; 633 const auto applet_resource_user_id{rp.Pop<u64>()};
636 634
635 applet_resource->GetController<Controller_NPad>(HidController::NPad).DisconnectNpad(npad_id);
636
637 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, 637 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id,
638 applet_resource_user_id); 638 applet_resource_user_id);
639 639
640 applet_resource->GetController<Controller_NPad>(HidController::NPad).DisconnectNPad(npad_id);
641 IPC::ResponseBuilder rb{ctx, 2}; 640 IPC::ResponseBuilder rb{ctx, 2};
642 rb.Push(RESULT_SUCCESS); 641 rb.Push(RESULT_SUCCESS);
643} 642}
@@ -650,9 +649,24 @@ void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) {
650 649
651 IPC::ResponseBuilder rb{ctx, 4}; 650 IPC::ResponseBuilder rb{ctx, 4};
652 rb.Push(RESULT_SUCCESS); 651 rb.Push(RESULT_SUCCESS);
653 rb.PushRaw<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) 652 rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad)
654 .GetLedPattern(npad_id) 653 .GetLedPattern(npad_id)
655 .raw); 654 .raw);
655}
656
657void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) {
658 // Should have no effect with how our npad sets up the data
659 IPC::RequestParser rp{ctx};
660 const auto unknown{rp.Pop<u32>()};
661 const auto applet_resource_user_id{rp.Pop<u64>()};
662
663 applet_resource->ActivateController(HidController::NPad);
664
665 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown,
666 applet_resource_user_id);
667
668 IPC::ResponseBuilder rb{ctx, 2};
669 rb.Push(RESULT_SUCCESS);
656} 670}
657 671
658void Hid::SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { 672void Hid::SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) {
@@ -660,12 +674,11 @@ void Hid::SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) {
660 const auto applet_resource_user_id{rp.Pop<u64>()}; 674 const auto applet_resource_user_id{rp.Pop<u64>()};
661 const auto hold_type{rp.Pop<u64>()}; 675 const auto hold_type{rp.Pop<u64>()};
662 676
677 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetHoldType({hold_type});
678
663 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, hold_type={}", 679 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, hold_type={}",
664 applet_resource_user_id, hold_type); 680 applet_resource_user_id, hold_type);
665 681
666 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
667 controller.SetHoldType(Controller_NPad::NpadHoldType{hold_type});
668
669 IPC::ResponseBuilder rb{ctx, 2}; 682 IPC::ResponseBuilder rb{ctx, 2};
670 rb.Push(RESULT_SUCCESS); 683 rb.Push(RESULT_SUCCESS);
671} 684}
@@ -676,10 +689,9 @@ void Hid::GetNpadJoyHoldType(Kernel::HLERequestContext& ctx) {
676 689
677 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 690 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
678 691
679 const auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
680 IPC::ResponseBuilder rb{ctx, 4}; 692 IPC::ResponseBuilder rb{ctx, 4};
681 rb.Push(RESULT_SUCCESS); 693 rb.Push(RESULT_SUCCESS);
682 rb.Push<u64>(static_cast<u64>(controller.GetHoldType())); 694 rb.PushEnum(applet_resource->GetController<Controller_NPad>(HidController::NPad).GetHoldType()));
683} 695}
684 696
685void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) { 697void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) {
@@ -687,12 +699,12 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx
687 const auto npad_id{rp.Pop<u32>()}; 699 const auto npad_id{rp.Pop<u32>()};
688 const auto applet_resource_user_id{rp.Pop<u64>()}; 700 const auto applet_resource_user_id{rp.Pop<u64>()};
689 701
702 applet_resource->GetController<Controller_NPad>(HidController::NPad)
703 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Single);
704
690 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, 705 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id,
691 applet_resource_user_id); 706 applet_resource_user_id);
692 707
693 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
694 controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single);
695
696 IPC::ResponseBuilder rb{ctx, 2}; 708 IPC::ResponseBuilder rb{ctx, 2};
697 rb.Push(RESULT_SUCCESS); 709 rb.Push(RESULT_SUCCESS);
698} 710}
@@ -704,13 +716,13 @@ void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) {
704 const auto applet_resource_user_id{rp.Pop<u64>()}; 716 const auto applet_resource_user_id{rp.Pop<u64>()};
705 const auto npad_joy_device_type{rp.Pop<u64>()}; 717 const auto npad_joy_device_type{rp.Pop<u64>()};
706 718
719 applet_resource->GetController<Controller_NPad>(HidController::NPad)
720 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Single);
721
707 LOG_WARNING(Service_HID, 722 LOG_WARNING(Service_HID,
708 "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", 723 "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
709 npad_id, applet_resource_user_id, npad_joy_device_type); 724 npad_id, applet_resource_user_id, npad_joy_device_type);
710 725
711 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
712 controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Single);
713
714 IPC::ResponseBuilder rb{ctx, 2}; 726 IPC::ResponseBuilder rb{ctx, 2};
715 rb.Push(RESULT_SUCCESS); 727 rb.Push(RESULT_SUCCESS);
716} 728}
@@ -720,12 +732,12 @@ void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) {
720 const auto npad_id{rp.Pop<u32>()}; 732 const auto npad_id{rp.Pop<u32>()};
721 const auto applet_resource_user_id{rp.Pop<u64>()}; 733 const auto applet_resource_user_id{rp.Pop<u64>()};
722 734
735 applet_resource->GetController<Controller_NPad>(HidController::NPad)
736 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Dual);
737
723 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, 738 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id,
724 applet_resource_user_id); 739 applet_resource_user_id);
725 740
726 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
727 controller.SetNpadMode(npad_id, Controller_NPad::NPadAssignments::Dual);
728
729 IPC::ResponseBuilder rb{ctx, 2}; 741 IPC::ResponseBuilder rb{ctx, 2};
730 rb.Push(RESULT_SUCCESS); 742 rb.Push(RESULT_SUCCESS);
731} 743}
@@ -736,12 +748,12 @@ void Hid::MergeSingleJoyAsDualJoy(Kernel::HLERequestContext& ctx) {
736 const auto npad_id_2{rp.Pop<u32>()}; 748 const auto npad_id_2{rp.Pop<u32>()};
737 const auto applet_resource_user_id{rp.Pop<u64>()}; 749 const auto applet_resource_user_id{rp.Pop<u64>()};
738 750
751 applet_resource->GetController<Controller_NPad>(HidController::NPad)
752 .MergeSingleJoyAsDualJoy(npad_id_1, npad_id_2);
753
739 LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}", 754 LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}",
740 npad_id_1, npad_id_2, applet_resource_user_id); 755 npad_id_1, npad_id_2, applet_resource_user_id);
741 756
742 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
743 controller.MergeSingleJoyAsDualJoy(npad_id_1, npad_id_2);
744
745 IPC::ResponseBuilder rb{ctx, 2}; 757 IPC::ResponseBuilder rb{ctx, 2};
746 rb.Push(RESULT_SUCCESS); 758 rb.Push(RESULT_SUCCESS);
747} 759}
@@ -750,9 +762,9 @@ void Hid::StartLrAssignmentMode(Kernel::HLERequestContext& ctx) {
750 IPC::RequestParser rp{ctx}; 762 IPC::RequestParser rp{ctx};
751 const auto applet_resource_user_id{rp.Pop<u64>()}; 763 const auto applet_resource_user_id{rp.Pop<u64>()};
752 764
765 applet_resource->GetController<Controller_NPad>(HidController::NPad).StartLRAssignmentMode();
766
753 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 767 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
754 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
755 controller.StartLRAssignmentMode();
756 768
757 IPC::ResponseBuilder rb{ctx, 2}; 769 IPC::ResponseBuilder rb{ctx, 2};
758 rb.Push(RESULT_SUCCESS); 770 rb.Push(RESULT_SUCCESS);
@@ -762,9 +774,9 @@ void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) {
762 IPC::RequestParser rp{ctx}; 774 IPC::RequestParser rp{ctx};
763 const auto applet_resource_user_id{rp.Pop<u64>()}; 775 const auto applet_resource_user_id{rp.Pop<u64>()};
764 776
777 applet_resource->GetController<Controller_NPad>(HidController::NPad).StopLRAssignmentMode();
778
765 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 779 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
766 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
767 controller.StopLRAssignmentMode();
768 780
769 IPC::ResponseBuilder rb{ctx, 2}; 781 IPC::ResponseBuilder rb{ctx, 2};
770 rb.Push(RESULT_SUCCESS); 782 rb.Push(RESULT_SUCCESS);
@@ -775,12 +787,12 @@ void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
775 const auto applet_resource_user_id{rp.Pop<u64>()}; 787 const auto applet_resource_user_id{rp.Pop<u64>()};
776 const auto mode{rp.Pop<u64>()}; 788 const auto mode{rp.Pop<u64>()};
777 789
790 applet_resource->GetController<Controller_NPad>(HidController::NPad)
791 .SetNpadHandheldActivationMode({mode});
792
778 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, mode={}", applet_resource_user_id, 793 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, mode={}", applet_resource_user_id,
779 mode); 794 mode);
780 795
781 applet_resource->GetController<Controller_NPad>(HidController::NPad)
782 .SetNpadHandheldActivationMode(Controller_NPad::NpadHandheldActivationMode{mode});
783
784 IPC::ResponseBuilder rb{ctx, 2}; 796 IPC::ResponseBuilder rb{ctx, 2};
785 rb.Push(RESULT_SUCCESS); 797 rb.Push(RESULT_SUCCESS);
786} 798}
@@ -793,23 +805,24 @@ void Hid::GetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
793 805
794 IPC::ResponseBuilder rb{ctx, 4}; 806 IPC::ResponseBuilder rb{ctx, 4};
795 rb.Push(RESULT_SUCCESS); 807 rb.Push(RESULT_SUCCESS);
796 rb.Push<u64>( 808 rb.PushEnum(applet_resource->GetController<Controller_NPad>(HidController::NPad)
797 static_cast<u64>(applet_resource->GetController<Controller_NPad>(HidController::NPad) 809 .GetNpadHandheldActivationMode());
798 .GetNpadHandheldActivationMode()));
799} 810}
800 811
801void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) { 812void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
802 IPC::RequestParser rp{ctx}; 813 IPC::RequestParser rp{ctx};
803 const auto npad_1{rp.Pop<u32>()}; 814 const auto npad_id_1{rp.Pop<u32>()};
804 const auto npad_2{rp.Pop<u32>()}; 815 const auto npad_id_2{rp.Pop<u32>()};
805 const auto applet_resource_user_id{rp.Pop<u64>()}; 816 const auto applet_resource_user_id{rp.Pop<u64>()};
806 817
807 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_1={}, npad_2={}", 818 const bool res = applet_resource->GetController<Controller_NPad>(HidController::NPad)
808 applet_resource_user_id, npad_1, npad_2); 819 .SwapNpadAssignment(npad_id_1, npad_id_2);
820
821 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_id_1={}, npad_id_2={}",
822 applet_resource_user_id, npad_id_1, npad_id_2);
809 823
810 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
811 IPC::ResponseBuilder rb{ctx, 2}; 824 IPC::ResponseBuilder rb{ctx, 2};
812 if (controller.SwapNpadAssignment(npad_1, npad_2)) { 825 if (res) {
813 rb.Push(RESULT_SUCCESS); 826 rb.Push(RESULT_SUCCESS);
814 } else { 827 } else {
815 LOG_ERROR(Service_HID, "Npads are not connected!"); 828 LOG_ERROR(Service_HID, "Npads are not connected!");
@@ -825,11 +838,10 @@ void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext
825 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, 838 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id,
826 applet_resource_user_id); 839 applet_resource_user_id);
827 840
828 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
829
830 IPC::ResponseBuilder rb{ctx, 3}; 841 IPC::ResponseBuilder rb{ctx, 3};
831 rb.Push(RESULT_SUCCESS); 842 rb.Push(RESULT_SUCCESS);
832 rb.Push<bool>(controller.IsUnintendedHomeButtonInputProtectionEnabled(npad_id)); 843 rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad)
844 .IsUnintendedHomeButtonInputProtectionEnabled(npad_id));
833} 845}
834 846
835void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { 847void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) {
@@ -838,36 +850,46 @@ void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& c
838 const auto npad_id{rp.Pop<u32>()}; 850 const auto npad_id{rp.Pop<u32>()};
839 const auto applet_resource_user_id{rp.Pop<u64>()}; 851 const auto applet_resource_user_id{rp.Pop<u64>()};
840 852
853 applet_resource->GetController<Controller_NPad>(HidController::NPad)
854 .SetUnintendedHomeButtonInputProtectionEnabled(unintended_home_button_input_protection,
855 npad_id);
856
841 LOG_WARNING(Service_HID, 857 LOG_WARNING(Service_HID,
842 "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," 858 "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={},"
843 "applet_resource_user_id={}", 859 "applet_resource_user_id={}",
844 npad_id, unintended_home_button_input_protection, applet_resource_user_id); 860 unintended_home_button_input_protection, npad_id, applet_resource_user_id);
845
846 auto& controller = applet_resource->GetController<Controller_NPad>(HidController::NPad);
847 controller.SetUnintendedHomeButtonInputProtectionEnabled(
848 unintended_home_button_input_protection, npad_id);
849 861
850 IPC::ResponseBuilder rb{ctx, 2}; 862 IPC::ResponseBuilder rb{ctx, 2};
851 rb.Push(RESULT_SUCCESS); 863 rb.Push(RESULT_SUCCESS);
852} 864}
853 865
854void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) { 866void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) {
855 IPC::RequestParser rp{ctx}; 867 IPC::RequestParser rp{ctx};
856 const auto applet_resource_user_id{rp.Pop<u64>()}; 868 const auto vibration_device_handle{rp.PopRaw<Controller_NPad::DeviceHandle>()};
857 869
858 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id); 870 VibrationDeviceInfo vibration_device_info;
859 871
860 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetVibrationEnabled(true); 872 vibration_device_info.type = VibrationDeviceType::LinearResonantActuator;
861 IPC::ResponseBuilder rb{ctx, 2};
862 rb.Push(RESULT_SUCCESS);
863}
864 873
865void Hid::EndPermitVibrationSession(Kernel::HLERequestContext& ctx) { 874 switch (vibration_device_handle.device_index) {
866 LOG_DEBUG(Service_HID, "called"); 875 case Controller_NPad::DeviceIndex::Left:
876 vibration_device_info.position = VibrationDevicePosition::Left;
877 break;
878 case Controller_NPad::DeviceIndex::Right:
879 vibration_device_info.position = VibrationDevicePosition::Right;
880 break;
881 case Controller_NPad::DeviceIndex::None:
882 default:
883 vibration_device_info.position = VibrationDevicePosition::None;
884 break;
885 }
867 886
868 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetVibrationEnabled(false); 887 LOG_DEBUG(Service_HID, "called, vibration_device_type={}, vibration_device_position={}",
869 IPC::ResponseBuilder rb{ctx, 2}; 888 vibration_device_info.type, vibration_device_info.position);
889
890 IPC::ResponseBuilder rb{ctx, 4};
870 rb.Push(RESULT_SUCCESS); 891 rb.Push(RESULT_SUCCESS);
892 rb.PushRaw(vibration_device_info);
871} 893}
872 894
873void Hid::SendVibrationValue(Kernel::HLERequestContext& ctx) { 895void Hid::SendVibrationValue(Kernel::HLERequestContext& ctx) {
@@ -876,34 +898,11 @@ void Hid::SendVibrationValue(Kernel::HLERequestContext& ctx) {
876 const auto vibration_values{rp.PopRaw<Controller_NPad::Vibration>()}; 898 const auto vibration_values{rp.PopRaw<Controller_NPad::Vibration>()};
877 const auto applet_resource_user_id{rp.Pop<u64>()}; 899 const auto applet_resource_user_id{rp.Pop<u64>()};
878 900
879 LOG_DEBUG(Service_HID, "called, controller={}, applet_resource_user_id={}", controller,
880 applet_resource_user_id);
881
882 IPC::ResponseBuilder rb{ctx, 2};
883 rb.Push(RESULT_SUCCESS);
884
885 applet_resource->GetController<Controller_NPad>(HidController::NPad) 901 applet_resource->GetController<Controller_NPad>(HidController::NPad)
886 .VibrateController({controller}, {vibration_values}); 902 .VibrateController({controller}, {vibration_values});
887}
888 903
889void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) { 904 LOG_DEBUG(Service_HID, "called, controller={}, applet_resource_user_id={}", controller,
890 IPC::RequestParser rp{ctx}; 905 applet_resource_user_id);
891 const auto applet_resource_user_id{rp.Pop<u64>()};
892
893 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
894
895 const auto controllers = ctx.ReadBuffer(0);
896 const auto vibrations = ctx.ReadBuffer(1);
897
898 std::vector<u32> controller_list(controllers.size() / sizeof(u32));
899 std::vector<Controller_NPad::Vibration> vibration_list(vibrations.size() /
900 sizeof(Controller_NPad::Vibration));
901
902 std::memcpy(controller_list.data(), controllers.data(), controllers.size());
903 std::memcpy(vibration_list.data(), vibrations.data(), vibrations.size());
904
905 applet_resource->GetController<Controller_NPad>(HidController::NPad)
906 .VibrateController(controller_list, vibration_list);
907 906
908 IPC::ResponseBuilder rb{ctx, 2}; 907 IPC::ResponseBuilder rb{ctx, 2};
909 rb.Push(RESULT_SUCCESS); 908 rb.Push(RESULT_SUCCESS);
@@ -919,39 +918,10 @@ void Hid::GetActualVibrationValue(Kernel::HLERequestContext& ctx) {
919 918
920 IPC::ResponseBuilder rb{ctx, 6}; 919 IPC::ResponseBuilder rb{ctx, 6};
921 rb.Push(RESULT_SUCCESS); 920 rb.Push(RESULT_SUCCESS);
922 rb.PushRaw<Controller_NPad::Vibration>( 921 rb.PushRaw(
923 applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration()); 922 applet_resource->GetController<Controller_NPad>(HidController::NPad).GetLastVibration());
924} 923}
925 924
926void Hid::GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx) {
927 IPC::RequestParser rp{ctx};
928 const auto vibration_device_handle{rp.PopRaw<Controller_NPad::DeviceHandle>()};
929
930 VibrationDeviceInfo vibration_device_info;
931
932 vibration_device_info.type = VibrationDeviceType::LinearResonantActuator;
933
934 switch (vibration_device_handle.device_index) {
935 case Controller_NPad::DeviceIndex::Left:
936 vibration_device_info.position = VibrationDevicePosition::Left;
937 break;
938 case Controller_NPad::DeviceIndex::Right:
939 vibration_device_info.position = VibrationDevicePosition::Right;
940 break;
941 case Controller_NPad::DeviceIndex::None:
942 default:
943 vibration_device_info.position = VibrationDevicePosition::None;
944 break;
945 }
946
947 LOG_DEBUG(Service_HID, "called, vibration_device_type={}, vibration_device_position={}",
948 vibration_device_info.type, vibration_device_info.position);
949
950 IPC::ResponseBuilder rb{ctx, 4};
951 rb.Push(RESULT_SUCCESS);
952 rb.PushRaw<VibrationDeviceInfo>(vibration_device_info);
953}
954
955void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) { 925void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) {
956 LOG_DEBUG(Service_HID, "called"); 926 LOG_DEBUG(Service_HID, "called");
957 927
@@ -963,6 +933,7 @@ void Hid::CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx) {
963void Hid::PermitVibration(Kernel::HLERequestContext& ctx) { 933void Hid::PermitVibration(Kernel::HLERequestContext& ctx) {
964 IPC::RequestParser rp{ctx}; 934 IPC::RequestParser rp{ctx};
965 const auto can_vibrate{rp.Pop<bool>()}; 935 const auto can_vibrate{rp.Pop<bool>()};
936
966 Settings::values.vibration_enabled.SetValue(can_vibrate); 937 Settings::values.vibration_enabled.SetValue(can_vibrate);
967 938
968 LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate); 939 LOG_DEBUG(Service_HID, "called, can_vibrate={}", can_vibrate);
@@ -979,6 +950,50 @@ void Hid::IsVibrationPermitted(Kernel::HLERequestContext& ctx) {
979 rb.Push(Settings::values.vibration_enabled.GetValue()); 950 rb.Push(Settings::values.vibration_enabled.GetValue());
980} 951}
981 952
953void Hid::SendVibrationValues(Kernel::HLERequestContext& ctx) {
954 IPC::RequestParser rp{ctx};
955 const auto applet_resource_user_id{rp.Pop<u64>()};
956
957 const auto controllers = ctx.ReadBuffer(0);
958 const auto vibrations = ctx.ReadBuffer(1);
959
960 std::vector<u32> controller_list(controllers.size() / sizeof(u32));
961 std::vector<Controller_NPad::Vibration> vibration_list(vibrations.size() /
962 sizeof(Controller_NPad::Vibration));
963
964 std::memcpy(controller_list.data(), controllers.data(), controllers.size());
965 std::memcpy(vibration_list.data(), vibrations.data(), vibrations.size());
966
967 applet_resource->GetController<Controller_NPad>(HidController::NPad)
968 .VibrateController(controller_list, vibration_list);
969
970 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
971
972 IPC::ResponseBuilder rb{ctx, 2};
973 rb.Push(RESULT_SUCCESS);
974}
975
976void Hid::BeginPermitVibrationSession(Kernel::HLERequestContext& ctx) {
977 IPC::RequestParser rp{ctx};
978 const auto applet_resource_user_id{rp.Pop<u64>()};
979
980 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetVibrationEnabled(true);
981
982 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
983
984 IPC::ResponseBuilder rb{ctx, 2};
985 rb.Push(RESULT_SUCCESS);
986}
987
988void Hid::EndPermitVibrationSession(Kernel::HLERequestContext& ctx) {
989 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetVibrationEnabled(false);
990
991 LOG_DEBUG(Service_HID, "called");
992
993 IPC::ResponseBuilder rb{ctx, 2};
994 rb.Push(RESULT_SUCCESS);
995}
996
982void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { 997void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
983 IPC::RequestParser rp{ctx}; 998 IPC::RequestParser rp{ctx};
984 const auto applet_resource_user_id{rp.Pop<u64>()}; 999 const auto applet_resource_user_id{rp.Pop<u64>()};
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index 2f7483170..57bc93778 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -86,17 +86,15 @@ public:
86 86
87private: 87private:
88 void CreateAppletResource(Kernel::HLERequestContext& ctx); 88 void CreateAppletResource(Kernel::HLERequestContext& ctx);
89 void ActivateXpad(Kernel::HLERequestContext& ctx);
90 void GetXpadIDs(Kernel::HLERequestContext& ctx);
91 void ActivateSixAxisSensor(Kernel::HLERequestContext& ctx);
92 void DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx);
93 void ActivateDebugPad(Kernel::HLERequestContext& ctx); 89 void ActivateDebugPad(Kernel::HLERequestContext& ctx);
94 void ActivateTouchScreen(Kernel::HLERequestContext& ctx); 90 void ActivateTouchScreen(Kernel::HLERequestContext& ctx);
95 void ActivateMouse(Kernel::HLERequestContext& ctx); 91 void ActivateMouse(Kernel::HLERequestContext& ctx);
96 void ActivateKeyboard(Kernel::HLERequestContext& ctx); 92 void ActivateKeyboard(Kernel::HLERequestContext& ctx);
97 void SendKeyboardLockKeyEvent(Kernel::HLERequestContext& ctx); 93 void SendKeyboardLockKeyEvent(Kernel::HLERequestContext& ctx);
98 void ActivateGesture(Kernel::HLERequestContext& ctx); 94 void ActivateXpad(Kernel::HLERequestContext& ctx);
99 void ActivateNpadWithRevision(Kernel::HLERequestContext& ctx); 95 void GetXpadIDs(Kernel::HLERequestContext& ctx);
96 void ActivateSixAxisSensor(Kernel::HLERequestContext& ctx);
97 void DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx);
100 void StartSixAxisSensor(Kernel::HLERequestContext& ctx); 98 void StartSixAxisSensor(Kernel::HLERequestContext& ctx);
101 void StopSixAxisSensor(Kernel::HLERequestContext& ctx); 99 void StopSixAxisSensor(Kernel::HLERequestContext& ctx);
102 void EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx); 100 void EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx);
@@ -104,6 +102,7 @@ private:
104 void GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); 102 void GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx);
105 void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx); 103 void ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx);
106 void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx); 104 void IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx);
105 void ActivateGesture(Kernel::HLERequestContext& ctx);
107 void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); 106 void SetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx);
108 void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx); 107 void GetSupportedNpadStyleSet(Kernel::HLERequestContext& ctx);
109 void SetSupportedNpadIdType(Kernel::HLERequestContext& ctx); 108 void SetSupportedNpadIdType(Kernel::HLERequestContext& ctx);
@@ -112,6 +111,7 @@ private:
112 void AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx); 111 void AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx);
113 void DisconnectNpad(Kernel::HLERequestContext& ctx); 112 void DisconnectNpad(Kernel::HLERequestContext& ctx);
114 void GetPlayerLedPattern(Kernel::HLERequestContext& ctx); 113 void GetPlayerLedPattern(Kernel::HLERequestContext& ctx);
114 void ActivateNpadWithRevision(Kernel::HLERequestContext& ctx);
115 void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx); 115 void SetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
116 void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx); 116 void GetNpadJoyHoldType(Kernel::HLERequestContext& ctx);
117 void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx); 117 void SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx);
@@ -125,15 +125,15 @@ private:
125 void SwapNpadAssignment(Kernel::HLERequestContext& ctx); 125 void SwapNpadAssignment(Kernel::HLERequestContext& ctx);
126 void IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx); 126 void IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx);
127 void EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx); 127 void EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx);
128 void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx); 128 void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
129 void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);
130 void SendVibrationValue(Kernel::HLERequestContext& ctx); 129 void SendVibrationValue(Kernel::HLERequestContext& ctx);
131 void SendVibrationValues(Kernel::HLERequestContext& ctx);
132 void GetActualVibrationValue(Kernel::HLERequestContext& ctx); 130 void GetActualVibrationValue(Kernel::HLERequestContext& ctx);
133 void GetVibrationDeviceInfo(Kernel::HLERequestContext& ctx);
134 void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx); 131 void CreateActiveVibrationDeviceList(Kernel::HLERequestContext& ctx);
135 void PermitVibration(Kernel::HLERequestContext& ctx); 132 void PermitVibration(Kernel::HLERequestContext& ctx);
136 void IsVibrationPermitted(Kernel::HLERequestContext& ctx); 133 void IsVibrationPermitted(Kernel::HLERequestContext& ctx);
134 void SendVibrationValues(Kernel::HLERequestContext& ctx);
135 void BeginPermitVibrationSession(Kernel::HLERequestContext& ctx);
136 void EndPermitVibrationSession(Kernel::HLERequestContext& ctx);
137 void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx); 137 void ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
138 void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx); 138 void StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);
139 void StopConsoleSixAxisSensor(Kernel::HLERequestContext& ctx); 139 void StopConsoleSixAxisSensor(Kernel::HLERequestContext& ctx);