summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Morph2020-10-07 00:37:13 -0400
committerGravatar Morph2020-11-15 23:33:20 -0500
commit31de52513eef90ed19583ab1ffe3e74ebe95e45d (patch)
treeee8d84174401c92dc3e5f1971e067ad23fbe40d4
parenthid: Reorder all HID commands (diff)
downloadyuzu-31de52513eef90ed19583ab1ffe3e74ebe95e45d.tar.gz
yuzu-31de52513eef90ed19583ab1ffe3e74ebe95e45d.tar.xz
yuzu-31de52513eef90ed19583ab1ffe3e74ebe95e45d.zip
hid: Pop a struct of parameters instead of popping individual parameters
Some parameters need to be doubleword aligned due to the presence of the applet_resource_user_id. Previously, this value was invalid in many commands where it was not doubleword aligned when popped.
-rw-r--r--src/core/hle/service/hid/hid.cpp340
1 files changed, 237 insertions, 103 deletions
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 9a631008f..fdac598f0 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -388,13 +388,18 @@ void Hid::SendKeyboardLockKeyEvent(Kernel::HLERequestContext& ctx) {
388 388
389void Hid::ActivateXpad(Kernel::HLERequestContext& ctx) { 389void Hid::ActivateXpad(Kernel::HLERequestContext& ctx) {
390 IPC::RequestParser rp{ctx}; 390 IPC::RequestParser rp{ctx};
391 const auto basic_xpad_id{rp.Pop<u32>()}; 391 struct Parameters {
392 const auto applet_resource_user_id{rp.Pop<u64>()}; 392 u32 basic_xpad_id{};
393 INSERT_PADDING_WORDS(1);
394 u64 applet_resource_user_id{};
395 };
396
397 const auto parameters{rp.PopRaw<Parameters>()};
393 398
394 applet_resource->ActivateController(HidController::XPad); 399 applet_resource->ActivateController(HidController::XPad);
395 400
396 LOG_DEBUG(Service_HID, "called, basic_xpad_id={}, applet_resource_user_id={}", basic_xpad_id, 401 LOG_DEBUG(Service_HID, "called, basic_xpad_id={}, applet_resource_user_id={}",
397 applet_resource_user_id); 402 parameters.basic_xpad_id, parameters.applet_resource_user_id);
398 403
399 IPC::ResponseBuilder rb{ctx, 2}; 404 IPC::ResponseBuilder rb{ctx, 2};
400 rb.Push(RESULT_SUCCESS); 405 rb.Push(RESULT_SUCCESS);
@@ -413,13 +418,20 @@ void Hid::GetXpadIDs(Kernel::HLERequestContext& ctx) {
413 418
414void Hid::ActivateSixAxisSensor(Kernel::HLERequestContext& ctx) { 419void Hid::ActivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
415 IPC::RequestParser rp{ctx}; 420 IPC::RequestParser rp{ctx};
416 const auto handle{rp.Pop<u32>()}; 421 struct Parameters {
417 const auto applet_resource_user_id{rp.Pop<u64>()}; 422 Controller_NPad::DeviceHandle sixaxis_handle{};
423 INSERT_PADDING_WORDS(1);
424 u64 applet_resource_user_id{};
425 };
426
427 const auto parameters{rp.PopRaw<Parameters>()};
418 428
419 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(true); 429 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(true);
420 430
421 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 431 LOG_DEBUG(Service_HID,
422 applet_resource_user_id); 432 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
433 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
434 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
423 435
424 IPC::ResponseBuilder rb{ctx, 2}; 436 IPC::ResponseBuilder rb{ctx, 2};
425 rb.Push(RESULT_SUCCESS); 437 rb.Push(RESULT_SUCCESS);
@@ -427,13 +439,20 @@ void Hid::ActivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
427 439
428void Hid::DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx) { 440void Hid::DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
429 IPC::RequestParser rp{ctx}; 441 IPC::RequestParser rp{ctx};
430 const auto handle{rp.Pop<u32>()}; 442 struct Parameters {
431 const auto applet_resource_user_id{rp.Pop<u64>()}; 443 Controller_NPad::DeviceHandle sixaxis_handle{};
444 INSERT_PADDING_WORDS(1);
445 u64 applet_resource_user_id{};
446 };
447
448 const auto parameters{rp.PopRaw<Parameters>()};
432 449
433 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(false); 450 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(false);
434 451
435 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 452 LOG_DEBUG(Service_HID,
436 applet_resource_user_id); 453 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
454 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
455 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
437 456
438 IPC::ResponseBuilder rb{ctx, 2}; 457 IPC::ResponseBuilder rb{ctx, 2};
439 rb.Push(RESULT_SUCCESS); 458 rb.Push(RESULT_SUCCESS);
@@ -441,11 +460,20 @@ void Hid::DeactivateSixAxisSensor(Kernel::HLERequestContext& ctx) {
441 460
442void Hid::StartSixAxisSensor(Kernel::HLERequestContext& ctx) { 461void Hid::StartSixAxisSensor(Kernel::HLERequestContext& ctx) {
443 IPC::RequestParser rp{ctx}; 462 IPC::RequestParser rp{ctx};
444 const auto handle{rp.Pop<u32>()}; 463 struct Parameters {
445 const auto applet_resource_user_id{rp.Pop<u64>()}; 464 Controller_NPad::DeviceHandle sixaxis_handle{};
465 INSERT_PADDING_WORDS(1);
466 u64 applet_resource_user_id{};
467 };
446 468
447 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", handle, 469 const auto parameters{rp.PopRaw<Parameters>()};
448 applet_resource_user_id); 470
471 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(true);
472
473 LOG_DEBUG(Service_HID,
474 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
475 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
476 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
449 477
450 IPC::ResponseBuilder rb{ctx, 2}; 478 IPC::ResponseBuilder rb{ctx, 2};
451 rb.Push(RESULT_SUCCESS); 479 rb.Push(RESULT_SUCCESS);
@@ -453,11 +481,20 @@ void Hid::StartSixAxisSensor(Kernel::HLERequestContext& ctx) {
453 481
454void Hid::StopSixAxisSensor(Kernel::HLERequestContext& ctx) { 482void Hid::StopSixAxisSensor(Kernel::HLERequestContext& ctx) {
455 IPC::RequestParser rp{ctx}; 483 IPC::RequestParser rp{ctx};
456 const auto handle{rp.Pop<u32>()}; 484 struct Parameters {
457 const auto applet_resource_user_id{rp.Pop<u64>()}; 485 Controller_NPad::DeviceHandle sixaxis_handle{};
486 INSERT_PADDING_WORDS(1);
487 u64 applet_resource_user_id{};
488 };
458 489
459 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", handle, 490 const auto parameters{rp.PopRaw<Parameters>()};
460 applet_resource_user_id); 491
492 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetSixAxisEnabled(false);
493
494 LOG_DEBUG(Service_HID,
495 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
496 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
497 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
461 498
462 IPC::ResponseBuilder rb{ctx, 2}; 499 IPC::ResponseBuilder rb{ctx, 2};
463 rb.Push(RESULT_SUCCESS); 500 rb.Push(RESULT_SUCCESS);
@@ -465,12 +502,21 @@ void Hid::StopSixAxisSensor(Kernel::HLERequestContext& ctx) {
465 502
466void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) { 503void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) {
467 IPC::RequestParser rp{ctx}; 504 IPC::RequestParser rp{ctx};
468 [[maybe_unused]] const auto enable{rp.Pop<bool>()}; 505 struct Parameters {
469 const auto handle{rp.Pop<u32>()}; 506 bool enable_sixaxis_sensor_fusion{};
470 const auto applet_resource_user_id{rp.Pop<u64>()}; 507 INSERT_PADDING_BYTES(3);
508 Controller_NPad::DeviceHandle sixaxis_handle{};
509 u64 applet_resource_user_id{};
510 };
471 511
472 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", enable, 512 const auto parameters{rp.PopRaw<Parameters>()};
473 handle, applet_resource_user_id); 513
514 LOG_WARNING(Service_HID,
515 "(STUBBED) called, enable_sixaxis_sensor_fusion={}, npad_type={}, npad_id={}, "
516 "device_index={}, applet_resource_user_id={}",
517 parameters.enable_sixaxis_sensor_fusion, parameters.sixaxis_handle.npad_type,
518 parameters.sixaxis_handle.npad_id, parameters.sixaxis_handle.device_index,
519 parameters.applet_resource_user_id);
474 520
475 IPC::ResponseBuilder rb{ctx, 2}; 521 IPC::ResponseBuilder rb{ctx, 2};
476 rb.Push(RESULT_SUCCESS); 522 rb.Push(RESULT_SUCCESS);
@@ -478,14 +524,17 @@ void Hid::EnableSixAxisSensorFusion(Kernel::HLERequestContext& ctx) {
478 524
479void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 525void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
480 IPC::RequestParser rp{ctx}; 526 IPC::RequestParser rp{ctx};
481 const auto handle{rp.Pop<u32>()}; 527 const auto sixaxis_handle{rp.PopRaw<Controller_NPad::DeviceHandle>()};
482 const auto drift_mode{rp.Pop<u32>()}; 528 const auto drift_mode{rp.PopEnum<Controller_NPad::GyroscopeZeroDriftMode>()};
483 const auto applet_resource_user_id{rp.Pop<u64>()}; 529 const auto applet_resource_user_id{rp.Pop<u64>()};
484 530
485 applet_resource->GetController<Controller_NPad>(HidController::NPad) 531 applet_resource->GetController<Controller_NPad>(HidController::NPad)
486 .SetGyroscopeZeroDriftMode({drift_mode}); 532 .SetGyroscopeZeroDriftMode(drift_mode);
487 533
488 LOG_DEBUG(Service_HID, "called, handle={}, drift_mode={}, applet_resource_user_id={}", handle, 534 LOG_DEBUG(Service_HID,
535 "called, npad_type={}, npad_id={}, device_index={}, drift_mode={}, "
536 "applet_resource_user_id={}",
537 sixaxis_handle.npad_type, sixaxis_handle.npad_id, sixaxis_handle.device_index,
489 drift_mode, applet_resource_user_id); 538 drift_mode, applet_resource_user_id);
490 539
491 IPC::ResponseBuilder rb{ctx, 2}; 540 IPC::ResponseBuilder rb{ctx, 2};
@@ -494,11 +543,18 @@ void Hid::SetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
494 543
495void Hid::GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 544void Hid::GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
496 IPC::RequestParser rp{ctx}; 545 IPC::RequestParser rp{ctx};
497 const auto handle{rp.Pop<u32>()}; 546 struct Parameters {
498 const auto applet_resource_user_id{rp.Pop<u64>()}; 547 Controller_NPad::DeviceHandle sixaxis_handle{};
548 INSERT_PADDING_WORDS(1);
549 u64 applet_resource_user_id{};
550 };
499 551
500 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 552 const auto parameters{rp.PopRaw<Parameters>()};
501 applet_resource_user_id); 553
554 LOG_DEBUG(Service_HID,
555 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
556 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
557 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
502 558
503 IPC::ResponseBuilder rb{ctx, 3}; 559 IPC::ResponseBuilder rb{ctx, 3};
504 rb.Push(RESULT_SUCCESS); 560 rb.Push(RESULT_SUCCESS);
@@ -508,14 +564,21 @@ void Hid::GetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
508 564
509void Hid::ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) { 565void Hid::ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
510 IPC::RequestParser rp{ctx}; 566 IPC::RequestParser rp{ctx};
511 const auto handle{rp.Pop<u32>()}; 567 struct Parameters {
512 const auto applet_resource_user_id{rp.Pop<u64>()}; 568 Controller_NPad::DeviceHandle sixaxis_handle{};
569 INSERT_PADDING_WORDS(1);
570 u64 applet_resource_user_id{};
571 };
572
573 const auto parameters{rp.PopRaw<Parameters>()};
513 574
514 applet_resource->GetController<Controller_NPad>(HidController::NPad) 575 applet_resource->GetController<Controller_NPad>(HidController::NPad)
515 .SetGyroscopeZeroDriftMode(Controller_NPad::GyroscopeZeroDriftMode::Standard); 576 .SetGyroscopeZeroDriftMode(Controller_NPad::GyroscopeZeroDriftMode::Standard);
516 577
517 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 578 LOG_DEBUG(Service_HID,
518 applet_resource_user_id); 579 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
580 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
581 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
519 582
520 IPC::ResponseBuilder rb{ctx, 2}; 583 IPC::ResponseBuilder rb{ctx, 2};
521 rb.Push(RESULT_SUCCESS); 584 rb.Push(RESULT_SUCCESS);
@@ -523,11 +586,18 @@ void Hid::ResetGyroscopeZeroDriftMode(Kernel::HLERequestContext& ctx) {
523 586
524void Hid::IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) { 587void Hid::IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) {
525 IPC::RequestParser rp{ctx}; 588 IPC::RequestParser rp{ctx};
526 const auto handle{rp.Pop<u32>()}; 589 struct Parameters {
527 const auto applet_resource_user_id{rp.Pop<u64>()}; 590 Controller_NPad::DeviceHandle sixaxis_handle{};
591 INSERT_PADDING_WORDS(1);
592 u64 applet_resource_user_id{};
593 };
528 594
529 LOG_DEBUG(Service_HID, "called, handle={}, applet_resource_user_id={}", handle, 595 const auto parameters{rp.PopRaw<Parameters>()};
530 applet_resource_user_id); 596
597 LOG_DEBUG(Service_HID,
598 "called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
599 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
600 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
531 601
532 IPC::ResponseBuilder rb{ctx, 3}; 602 IPC::ResponseBuilder rb{ctx, 3};
533 rb.Push(RESULT_SUCCESS); 603 rb.Push(RESULT_SUCCESS);
@@ -537,13 +607,18 @@ void Hid::IsSixAxisSensorAtRest(Kernel::HLERequestContext& ctx) {
537 607
538void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) { 608void Hid::ActivateGesture(Kernel::HLERequestContext& ctx) {
539 IPC::RequestParser rp{ctx}; 609 IPC::RequestParser rp{ctx};
540 const auto unknown{rp.Pop<u32>()}; 610 struct Parameters {
541 const auto applet_resource_user_id{rp.Pop<u64>()}; 611 u32 unknown{};
612 INSERT_PADDING_WORDS(1);
613 u64 applet_resource_user_id{};
614 };
615
616 const auto parameters{rp.PopRaw<Parameters>()};
542 617
543 applet_resource->ActivateController(HidController::Gesture); 618 applet_resource->ActivateController(HidController::Gesture);
544 619
545 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown, 620 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", parameters.unknown,
546 applet_resource_user_id); 621 parameters.applet_resource_user_id);
547 622
548 IPC::ResponseBuilder rb{ctx, 2}; 623 IPC::ResponseBuilder rb{ctx, 2};
549 rb.Push(RESULT_SUCCESS); 624 rb.Push(RESULT_SUCCESS);
@@ -614,28 +689,39 @@ void Hid::DeactivateNpad(Kernel::HLERequestContext& ctx) {
614 689
615void Hid::AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) { 690void Hid::AcquireNpadStyleSetUpdateEventHandle(Kernel::HLERequestContext& ctx) {
616 IPC::RequestParser rp{ctx}; 691 IPC::RequestParser rp{ctx};
617 const auto npad_id{rp.Pop<u32>()}; 692 struct Parameters {
618 const auto applet_resource_user_id{rp.Pop<u64>()}; 693 u32 npad_id{};
619 const auto unknown{rp.Pop<u64>()}; 694 INSERT_PADDING_WORDS(1);
695 u64 applet_resource_user_id{};
696 u64 unknown{};
697 };
698
699 const auto parameters{rp.PopRaw<Parameters>()};
620 700
621 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}, unknown={}", npad_id, 701 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}, unknown={}",
622 applet_resource_user_id, unknown); 702 parameters.npad_id, parameters.applet_resource_user_id, parameters.unknown);
623 703
624 IPC::ResponseBuilder rb{ctx, 2, 1}; 704 IPC::ResponseBuilder rb{ctx, 2, 1};
625 rb.Push(RESULT_SUCCESS); 705 rb.Push(RESULT_SUCCESS);
626 rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad) 706 rb.PushCopyObjects(applet_resource->GetController<Controller_NPad>(HidController::NPad)
627 .GetStyleSetChangedEvent(npad_id)); 707 .GetStyleSetChangedEvent(parameters.npad_id));
628} 708}
629 709
630void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) { 710void Hid::DisconnectNpad(Kernel::HLERequestContext& ctx) {
631 IPC::RequestParser rp{ctx}; 711 IPC::RequestParser rp{ctx};
632 const auto npad_id{rp.Pop<u32>()}; 712 struct Parameters {
633 const auto applet_resource_user_id{rp.Pop<u64>()}; 713 u32 npad_id{};
714 INSERT_PADDING_WORDS(1);
715 u64 applet_resource_user_id{};
716 };
634 717
635 applet_resource->GetController<Controller_NPad>(HidController::NPad).DisconnectNpad(npad_id); 718 const auto parameters{rp.PopRaw<Parameters>()};
636 719
637 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, 720 applet_resource->GetController<Controller_NPad>(HidController::NPad)
638 applet_resource_user_id); 721 .DisconnectNpad(parameters.npad_id);
722
723 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id,
724 parameters.applet_resource_user_id);
639 725
640 IPC::ResponseBuilder rb{ctx, 2}; 726 IPC::ResponseBuilder rb{ctx, 2};
641 rb.Push(RESULT_SUCCESS); 727 rb.Push(RESULT_SUCCESS);
@@ -657,13 +743,18 @@ void Hid::GetPlayerLedPattern(Kernel::HLERequestContext& ctx) {
657void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) { 743void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) {
658 // Should have no effect with how our npad sets up the data 744 // Should have no effect with how our npad sets up the data
659 IPC::RequestParser rp{ctx}; 745 IPC::RequestParser rp{ctx};
660 const auto unknown{rp.Pop<u32>()}; 746 struct Parameters {
661 const auto applet_resource_user_id{rp.Pop<u64>()}; 747 u32 unknown{};
748 INSERT_PADDING_WORDS(1);
749 u64 applet_resource_user_id{};
750 };
751
752 const auto parameters{rp.PopRaw<Parameters>()};
662 753
663 applet_resource->ActivateController(HidController::NPad); 754 applet_resource->ActivateController(HidController::NPad);
664 755
665 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", unknown, 756 LOG_DEBUG(Service_HID, "called, unknown={}, applet_resource_user_id={}", parameters.unknown,
666 applet_resource_user_id); 757 parameters.applet_resource_user_id);
667 758
668 IPC::ResponseBuilder rb{ctx, 2}; 759 IPC::ResponseBuilder rb{ctx, 2};
669 rb.Push(RESULT_SUCCESS); 760 rb.Push(RESULT_SUCCESS);
@@ -672,9 +763,9 @@ void Hid::ActivateNpadWithRevision(Kernel::HLERequestContext& ctx) {
672void Hid::SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) { 763void Hid::SetNpadJoyHoldType(Kernel::HLERequestContext& ctx) {
673 IPC::RequestParser rp{ctx}; 764 IPC::RequestParser rp{ctx};
674 const auto applet_resource_user_id{rp.Pop<u64>()}; 765 const auto applet_resource_user_id{rp.Pop<u64>()};
675 const auto hold_type{rp.Pop<u64>()}; 766 const auto hold_type{rp.PopEnum<Controller_NPad::NpadHoldType>()};
676 767
677 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetHoldType({hold_type}); 768 applet_resource->GetController<Controller_NPad>(HidController::NPad).SetHoldType(hold_type);
678 769
679 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, hold_type={}", 770 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, hold_type={}",
680 applet_resource_user_id, hold_type); 771 applet_resource_user_id, hold_type);
@@ -691,19 +782,24 @@ void Hid::GetNpadJoyHoldType(Kernel::HLERequestContext& ctx) {
691 782
692 IPC::ResponseBuilder rb{ctx, 4}; 783 IPC::ResponseBuilder rb{ctx, 4};
693 rb.Push(RESULT_SUCCESS); 784 rb.Push(RESULT_SUCCESS);
694 rb.PushEnum(applet_resource->GetController<Controller_NPad>(HidController::NPad).GetHoldType())); 785 rb.PushEnum(applet_resource->GetController<Controller_NPad>(HidController::NPad).GetHoldType());
695} 786}
696 787
697void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) { 788void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx) {
698 IPC::RequestParser rp{ctx}; 789 IPC::RequestParser rp{ctx};
699 const auto npad_id{rp.Pop<u32>()}; 790 struct Parameters {
700 const auto applet_resource_user_id{rp.Pop<u64>()}; 791 u32 npad_id{};
792 INSERT_PADDING_WORDS(1);
793 u64 applet_resource_user_id{};
794 };
795
796 const auto parameters{rp.PopRaw<Parameters>()};
701 797
702 applet_resource->GetController<Controller_NPad>(HidController::NPad) 798 applet_resource->GetController<Controller_NPad>(HidController::NPad)
703 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Single); 799 .SetNpadMode(parameters.npad_id, Controller_NPad::NpadAssignments::Single);
704 800
705 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, 801 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}",
706 applet_resource_user_id); 802 parameters.npad_id, parameters.applet_resource_user_id);
707 803
708 IPC::ResponseBuilder rb{ctx, 2}; 804 IPC::ResponseBuilder rb{ctx, 2};
709 rb.Push(RESULT_SUCCESS); 805 rb.Push(RESULT_SUCCESS);
@@ -712,16 +808,22 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(Kernel::HLERequestContext& ctx
712void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) { 808void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) {
713 // TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault 809 // TODO: Check the differences between this and SetNpadJoyAssignmentModeSingleByDefault
714 IPC::RequestParser rp{ctx}; 810 IPC::RequestParser rp{ctx};
715 const auto npad_id{rp.Pop<u32>()}; 811 struct Parameters {
716 const auto applet_resource_user_id{rp.Pop<u64>()}; 812 u32 npad_id{};
717 const auto npad_joy_device_type{rp.Pop<u64>()}; 813 INSERT_PADDING_WORDS(1);
814 u64 applet_resource_user_id{};
815 u64 npad_joy_device_type{};
816 };
817
818 const auto parameters{rp.PopRaw<Parameters>()};
718 819
719 applet_resource->GetController<Controller_NPad>(HidController::NPad) 820 applet_resource->GetController<Controller_NPad>(HidController::NPad)
720 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Single); 821 .SetNpadMode(parameters.npad_id, Controller_NPad::NpadAssignments::Single);
721 822
722 LOG_WARNING(Service_HID, 823 LOG_WARNING(Service_HID,
723 "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", 824 "(STUBBED) called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}",
724 npad_id, applet_resource_user_id, npad_joy_device_type); 825 parameters.npad_id, parameters.applet_resource_user_id,
826 parameters.npad_joy_device_type);
725 827
726 IPC::ResponseBuilder rb{ctx, 2}; 828 IPC::ResponseBuilder rb{ctx, 2};
727 rb.Push(RESULT_SUCCESS); 829 rb.Push(RESULT_SUCCESS);
@@ -729,14 +831,19 @@ void Hid::SetNpadJoyAssignmentModeSingle(Kernel::HLERequestContext& ctx) {
729 831
730void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) { 832void Hid::SetNpadJoyAssignmentModeDual(Kernel::HLERequestContext& ctx) {
731 IPC::RequestParser rp{ctx}; 833 IPC::RequestParser rp{ctx};
732 const auto npad_id{rp.Pop<u32>()}; 834 struct Parameters {
733 const auto applet_resource_user_id{rp.Pop<u64>()}; 835 u32 npad_id{};
836 INSERT_PADDING_WORDS(1);
837 u64 applet_resource_user_id{};
838 };
839
840 const auto parameters{rp.PopRaw<Parameters>()};
734 841
735 applet_resource->GetController<Controller_NPad>(HidController::NPad) 842 applet_resource->GetController<Controller_NPad>(HidController::NPad)
736 .SetNpadMode(npad_id, Controller_NPad::NpadAssignments::Dual); 843 .SetNpadMode(parameters.npad_id, Controller_NPad::NpadAssignments::Dual);
737 844
738 LOG_DEBUG(Service_HID, "called, npad_id={}, applet_resource_user_id={}", npad_id, 845 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}",
739 applet_resource_user_id); 846 parameters.npad_id, parameters.applet_resource_user_id);
740 847
741 IPC::ResponseBuilder rb{ctx, 2}; 848 IPC::ResponseBuilder rb{ctx, 2};
742 rb.Push(RESULT_SUCCESS); 849 rb.Push(RESULT_SUCCESS);
@@ -785,13 +892,13 @@ void Hid::StopLrAssignmentMode(Kernel::HLERequestContext& ctx) {
785void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) { 892void Hid::SetNpadHandheldActivationMode(Kernel::HLERequestContext& ctx) {
786 IPC::RequestParser rp{ctx}; 893 IPC::RequestParser rp{ctx};
787 const auto applet_resource_user_id{rp.Pop<u64>()}; 894 const auto applet_resource_user_id{rp.Pop<u64>()};
788 const auto mode{rp.Pop<u64>()}; 895 const auto activation_mode{rp.PopEnum<Controller_NPad::NpadHandheldActivationMode>()};
789 896
790 applet_resource->GetController<Controller_NPad>(HidController::NPad) 897 applet_resource->GetController<Controller_NPad>(HidController::NPad)
791 .SetNpadHandheldActivationMode({mode}); 898 .SetNpadHandheldActivationMode(activation_mode);
792 899
793 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, mode={}", applet_resource_user_id, 900 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, activation_mode={}",
794 mode); 901 applet_resource_user_id, activation_mode);
795 902
796 IPC::ResponseBuilder rb{ctx, 2}; 903 IPC::ResponseBuilder rb{ctx, 2};
797 rb.Push(RESULT_SUCCESS); 904 rb.Push(RESULT_SUCCESS);
@@ -818,8 +925,8 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
818 const bool res = applet_resource->GetController<Controller_NPad>(HidController::NPad) 925 const bool res = applet_resource->GetController<Controller_NPad>(HidController::NPad)
819 .SwapNpadAssignment(npad_id_1, npad_id_2); 926 .SwapNpadAssignment(npad_id_1, npad_id_2);
820 927
821 LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}, npad_id_1={}, npad_id_2={}", 928 LOG_DEBUG(Service_HID, "called, npad_id_1={}, npad_id_2={}, applet_resource_user_id={}",
822 applet_resource_user_id, npad_id_1, npad_id_2); 929 npad_id_1, npad_id_2, applet_resource_user_id);
823 930
824 IPC::ResponseBuilder rb{ctx, 2}; 931 IPC::ResponseBuilder rb{ctx, 2};
825 if (res) { 932 if (res) {
@@ -832,32 +939,43 @@ void Hid::SwapNpadAssignment(Kernel::HLERequestContext& ctx) {
832 939
833void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) { 940void Hid::IsUnintendedHomeButtonInputProtectionEnabled(Kernel::HLERequestContext& ctx) {
834 IPC::RequestParser rp{ctx}; 941 IPC::RequestParser rp{ctx};
835 const auto npad_id{rp.Pop<u32>()}; 942 struct Parameters {
836 const auto applet_resource_user_id{rp.Pop<u64>()}; 943 u32 npad_id{};
944 INSERT_PADDING_WORDS(1);
945 u64 applet_resource_user_id{};
946 };
837 947
838 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}", npad_id, 948 const auto parameters{rp.PopRaw<Parameters>()};
839 applet_resource_user_id); 949
950 LOG_WARNING(Service_HID, "(STUBBED) called, npad_id={}, applet_resource_user_id={}",
951 parameters.npad_id, parameters.applet_resource_user_id);
840 952
841 IPC::ResponseBuilder rb{ctx, 3}; 953 IPC::ResponseBuilder rb{ctx, 3};
842 rb.Push(RESULT_SUCCESS); 954 rb.Push(RESULT_SUCCESS);
843 rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad) 955 rb.Push(applet_resource->GetController<Controller_NPad>(HidController::NPad)
844 .IsUnintendedHomeButtonInputProtectionEnabled(npad_id)); 956 .IsUnintendedHomeButtonInputProtectionEnabled(parameters.npad_id));
845} 957}
846 958
847void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) { 959void Hid::EnableUnintendedHomeButtonInputProtection(Kernel::HLERequestContext& ctx) {
848 IPC::RequestParser rp{ctx}; 960 IPC::RequestParser rp{ctx};
849 const auto unintended_home_button_input_protection{rp.Pop<bool>()}; 961 struct Parameters {
850 const auto npad_id{rp.Pop<u32>()}; 962 bool unintended_home_button_input_protection{};
851 const auto applet_resource_user_id{rp.Pop<u64>()}; 963 INSERT_PADDING_BYTES(3);
964 u32 npad_id{};
965 u64 applet_resource_user_id{};
966 };
967
968 const auto parameters{rp.PopRaw<Parameters>()};
852 969
853 applet_resource->GetController<Controller_NPad>(HidController::NPad) 970 applet_resource->GetController<Controller_NPad>(HidController::NPad)
854 .SetUnintendedHomeButtonInputProtectionEnabled(unintended_home_button_input_protection, 971 .SetUnintendedHomeButtonInputProtectionEnabled(
855 npad_id); 972 parameters.unintended_home_button_input_protection, parameters.npad_id);
856 973
857 LOG_WARNING(Service_HID, 974 LOG_WARNING(Service_HID,
858 "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={}," 975 "(STUBBED) called, unintended_home_button_input_protection={}, npad_id={},"
859 "applet_resource_user_id={}", 976 "applet_resource_user_id={}",
860 unintended_home_button_input_protection, npad_id, applet_resource_user_id); 977 parameters.unintended_home_button_input_protection, parameters.npad_id,
978 parameters.applet_resource_user_id);
861 979
862 IPC::ResponseBuilder rb{ctx, 2}; 980 IPC::ResponseBuilder rb{ctx, 2};
863 rb.Push(RESULT_SUCCESS); 981 rb.Push(RESULT_SUCCESS);
@@ -1007,11 +1125,19 @@ void Hid::ActivateConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
1007 1125
1008void Hid::StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { 1126void Hid::StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
1009 IPC::RequestParser rp{ctx}; 1127 IPC::RequestParser rp{ctx};
1010 const auto handle{rp.Pop<u32>()}; 1128 struct Parameters {
1011 const auto applet_resource_user_id{rp.Pop<u64>()}; 1129 Controller_NPad::DeviceHandle sixaxis_handle{};
1130 INSERT_PADDING_WORDS(1);
1131 u64 applet_resource_user_id{};
1132 };
1012 1133
1013 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", handle, 1134 const auto parameters{rp.PopRaw<Parameters>()};
1014 applet_resource_user_id); 1135
1136 LOG_WARNING(
1137 Service_HID,
1138 "(STUBBED) called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
1139 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
1140 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
1015 1141
1016 IPC::ResponseBuilder rb{ctx, 2}; 1142 IPC::ResponseBuilder rb{ctx, 2};
1017 rb.Push(RESULT_SUCCESS); 1143 rb.Push(RESULT_SUCCESS);
@@ -1019,11 +1145,19 @@ void Hid::StartConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
1019 1145
1020void Hid::StopConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) { 1146void Hid::StopConsoleSixAxisSensor(Kernel::HLERequestContext& ctx) {
1021 IPC::RequestParser rp{ctx}; 1147 IPC::RequestParser rp{ctx};
1022 const auto handle{rp.Pop<u32>()}; 1148 struct Parameters {
1023 const auto applet_resource_user_id{rp.Pop<u64>()}; 1149 Controller_NPad::DeviceHandle sixaxis_handle{};
1150 INSERT_PADDING_WORDS(1);
1151 u64 applet_resource_user_id{};
1152 };
1024 1153
1025 LOG_WARNING(Service_HID, "(STUBBED) called, handle={}, applet_resource_user_id={}", handle, 1154 const auto parameters{rp.PopRaw<Parameters>()};
1026 applet_resource_user_id); 1155
1156 LOG_WARNING(
1157 Service_HID,
1158 "(STUBBED) called, npad_type={}, npad_id={}, device_index={}, applet_resource_user_id={}",
1159 parameters.sixaxis_handle.npad_type, parameters.sixaxis_handle.npad_id,
1160 parameters.sixaxis_handle.device_index, parameters.applet_resource_user_id);
1027 1161
1028 IPC::ResponseBuilder rb{ctx, 2}; 1162 IPC::ResponseBuilder rb{ctx, 2};
1029 rb.Push(RESULT_SUCCESS); 1163 rb.Push(RESULT_SUCCESS);