summaryrefslogtreecommitdiff
path: root/src/core/hle/service/hid
diff options
context:
space:
mode:
authorGravatar Narr the Reg2024-01-30 10:36:42 -0600
committerGravatar Narr the Reg2024-01-30 10:57:03 -0600
commita0f7f2b309e4920e0e3f1217441a4628023f59b8 (patch)
tree5f8c8b2b284369d1e5b9562ad7d7df20f3abc2d9 /src/core/hle/service/hid
parentMerge pull request #12843 from t895/system-driver-whoops (diff)
downloadyuzu-a0f7f2b309e4920e0e3f1217441a4628023f59b8.tar.gz
yuzu-a0f7f2b309e4920e0e3f1217441a4628023f59b8.tar.xz
yuzu-a0f7f2b309e4920e0e3f1217441a4628023f59b8.zip
service: hid: Implement GetPlayerLedPattern accurately
Diffstat (limited to 'src/core/hle/service/hid')
-rw-r--r--src/core/hle/service/hid/hid_server.cpp45
-rw-r--r--src/core/hle/service/hid/hid_server.h5
2 files changed, 37 insertions, 13 deletions
diff --git a/src/core/hle/service/hid/hid_server.cpp b/src/core/hle/service/hid/hid_server.cpp
index 09c47b5e3..938b93451 100644
--- a/src/core/hle/service/hid/hid_server.cpp
+++ b/src/core/hle/service/hid/hid_server.cpp
@@ -8,6 +8,7 @@
8#include "core/hle/kernel/k_shared_memory.h" 8#include "core/hle/kernel/k_shared_memory.h"
9#include "core/hle/kernel/k_transfer_memory.h" 9#include "core/hle/kernel/k_transfer_memory.h"
10#include "core/hle/kernel/kernel.h" 10#include "core/hle/kernel/kernel.h"
11#include "core/hle/service/cmif_serialization.h"
11#include "core/hle/service/hid/hid_server.h" 12#include "core/hle/service/hid/hid_server.h"
12#include "core/hle/service/ipc_helpers.h" 13#include "core/hle/service/ipc_helpers.h"
13#include "core/memory.h" 14#include "core/memory.h"
@@ -153,7 +154,7 @@ IHidServer::IHidServer(Core::System& system_, std::shared_ptr<ResourceManager> r
153 {104, &IHidServer::DeactivateNpad, "DeactivateNpad"}, 154 {104, &IHidServer::DeactivateNpad, "DeactivateNpad"},
154 {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"}, 155 {106, &IHidServer::AcquireNpadStyleSetUpdateEventHandle, "AcquireNpadStyleSetUpdateEventHandle"},
155 {107, &IHidServer::DisconnectNpad, "DisconnectNpad"}, 156 {107, &IHidServer::DisconnectNpad, "DisconnectNpad"},
156 {108, &IHidServer::GetPlayerLedPattern, "GetPlayerLedPattern"}, 157 {108, C<&IHidServer::GetPlayerLedPattern>, "GetPlayerLedPattern"},
157 {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"}, 158 {109, &IHidServer::ActivateNpadWithRevision, "ActivateNpadWithRevision"},
158 {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"}, 159 {120, &IHidServer::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
159 {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"}, 160 {121, &IHidServer::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
@@ -1136,19 +1137,39 @@ void IHidServer::DisconnectNpad(HLERequestContext& ctx) {
1136 rb.Push(ResultSuccess); 1137 rb.Push(ResultSuccess);
1137} 1138}
1138 1139
1139void IHidServer::GetPlayerLedPattern(HLERequestContext& ctx) { 1140Result IHidServer::GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern,
1140 IPC::RequestParser rp{ctx}; 1141 Core::HID::NpadIdType npad_id) {
1141 const auto npad_id{rp.PopEnum<Core::HID::NpadIdType>()};
1142
1143 Core::HID::LedPattern pattern{0, 0, 0, 0};
1144 auto controller = GetResourceManager()->GetNpad();
1145 const auto result = controller->GetLedPattern(npad_id, pattern);
1146
1147 LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id); 1142 LOG_DEBUG(Service_HID, "called, npad_id={}", npad_id);
1148 1143
1149 IPC::ResponseBuilder rb{ctx, 4}; 1144 switch (npad_id) {
1150 rb.Push(result); 1145 case Core::HID::NpadIdType::Player1:
1151 rb.Push(pattern.raw); 1146 *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 0};
1147 R_SUCCEED();
1148 case Core::HID::NpadIdType::Player2:
1149 *out_led_pattern = Core::HID::LedPattern{1, 1, 0, 0};
1150 R_SUCCEED();
1151 case Core::HID::NpadIdType::Player3:
1152 *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 0};
1153 R_SUCCEED();
1154 case Core::HID::NpadIdType::Player4:
1155 *out_led_pattern = Core::HID::LedPattern{1, 1, 1, 1};
1156 R_SUCCEED();
1157 case Core::HID::NpadIdType::Player5:
1158 *out_led_pattern = Core::HID::LedPattern{1, 0, 0, 1};
1159 R_SUCCEED();
1160 case Core::HID::NpadIdType::Player6:
1161 *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 0};
1162 R_SUCCEED();
1163 case Core::HID::NpadIdType::Player7:
1164 *out_led_pattern = Core::HID::LedPattern{1, 0, 1, 1};
1165 R_SUCCEED();
1166 case Core::HID::NpadIdType::Player8:
1167 *out_led_pattern = Core::HID::LedPattern{0, 1, 1, 0};
1168 R_SUCCEED();
1169 default:
1170 *out_led_pattern = Core::HID::LedPattern{0, 0, 0, 0};
1171 R_SUCCEED();
1172 }
1152} 1173}
1153 1174
1154void IHidServer::ActivateNpadWithRevision(HLERequestContext& ctx) { 1175void IHidServer::ActivateNpadWithRevision(HLERequestContext& ctx) {
diff --git a/src/core/hle/service/hid/hid_server.h b/src/core/hle/service/hid/hid_server.h
index 3a2e0a230..faf775689 100644
--- a/src/core/hle/service/hid/hid_server.h
+++ b/src/core/hle/service/hid/hid_server.h
@@ -3,7 +3,9 @@
3 3
4#pragma once 4#pragma once
5 5
6#include "core/hle/service/cmif_types.h"
6#include "core/hle/service/service.h" 7#include "core/hle/service/service.h"
8#include "hid_core/hid_types.h"
7 9
8namespace Core { 10namespace Core {
9class System; 11class System;
@@ -66,7 +68,8 @@ private:
66 void DeactivateNpad(HLERequestContext& ctx); 68 void DeactivateNpad(HLERequestContext& ctx);
67 void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx); 69 void AcquireNpadStyleSetUpdateEventHandle(HLERequestContext& ctx);
68 void DisconnectNpad(HLERequestContext& ctx); 70 void DisconnectNpad(HLERequestContext& ctx);
69 void GetPlayerLedPattern(HLERequestContext& ctx); 71 Result GetPlayerLedPattern(Out<Core::HID::LedPattern> out_led_pattern,
72 Core::HID::NpadIdType npad_id);
70 void ActivateNpadWithRevision(HLERequestContext& ctx); 73 void ActivateNpadWithRevision(HLERequestContext& ctx);
71 void SetNpadJoyHoldType(HLERequestContext& ctx); 74 void SetNpadJoyHoldType(HLERequestContext& ctx);
72 void GetNpadJoyHoldType(HLERequestContext& ctx); 75 void GetNpadJoyHoldType(HLERequestContext& ctx);