summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/hid/controllers
diff options
context:
space:
mode:
authorDavid Marcec <dmarcecguzman@gmail.com>2019-07-01 07:12:57 +0200
committerDavid Marcec <dmarcecguzman@gmail.com>2019-07-01 07:12:57 +0200
commit472210bf72e1509f7266e49bf50be7a681078552 (patch)
tree16647a42c9f71f764a5bf501422c16b4c09e4cdc /src/core/hle/service/hid/controllers
parentMerge pull request #2583 from FernandoS27/core-timing-safe (diff)
downloadyuzu-472210bf72e1509f7266e49bf50be7a681078552.tar
yuzu-472210bf72e1509f7266e49bf50be7a681078552.tar.gz
yuzu-472210bf72e1509f7266e49bf50be7a681078552.tar.bz2
yuzu-472210bf72e1509f7266e49bf50be7a681078552.tar.lz
yuzu-472210bf72e1509f7266e49bf50be7a681078552.tar.xz
yuzu-472210bf72e1509f7266e49bf50be7a681078552.tar.zst
yuzu-472210bf72e1509f7266e49bf50be7a681078552.zip
Diffstat (limited to 'src/core/hle/service/hid/controllers')
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp30
-rw-r--r--src/core/hle/service/hid/controllers/npad.h5
2 files changed, 35 insertions, 0 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index fdd6d79a2..99af0469d 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -548,6 +548,36 @@ void Controller_NPad::DisconnectNPad(u32 npad_id) {
connected_controllers[NPadIdToIndex(npad_id)].is_connected = false;
}
+void Controller_NPad::StartLRAssignmentMode() {
+ // Nothing internally is used for lr assignment mode. Since we have the ability to set the
+ // controller types from boot, it doesn't really matter about showing a selection screen
+ is_in_lr_assignment_mode = true;
+}
+
+void Controller_NPad::StopLRAssignmentMode() {
+ is_in_lr_assignment_mode = false;
+}
+
+bool Controller_NPad::SwapNpadAssignment(u32 npad_id_1, u32 npad_id_2) {
+ if (npad_id_1 == NPAD_HANDHELD || npad_id_2 == NPAD_HANDHELD || npad_id_1 == NPAD_UNKNOWN ||
+ npad_id_2 == NPAD_UNKNOWN) {
+ return true;
+ }
+
+ if (!IsControllerSupported(connected_controllers[NPadIdToIndex(npad_id_1)].type) ||
+ !IsControllerSupported(connected_controllers[NPadIdToIndex(npad_id_2)].type)) {
+ return false;
+ }
+
+ std::swap(connected_controllers[NPadIdToIndex(npad_id_1)].type,
+ connected_controllers[NPadIdToIndex(npad_id_2)].type);
+
+ InitNewlyAddedControler(NPadIdToIndex(npad_id_1));
+ InitNewlyAddedControler(NPadIdToIndex(npad_id_2));
+
+ return true;
+}
+
bool Controller_NPad::IsControllerSupported(NPadControllerType controller) {
if (controller == NPadControllerType::Handheld) {
// Handheld is not even a supported type, lets stop here
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 4ff50b3cd..4b6c1083f 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -124,6 +124,10 @@ public:
void ConnectAllDisconnectedControllers();
void ClearAllControllers();
+ void StartLRAssignmentMode();
+ void StopLRAssignmentMode();
+ bool SwapNpadAssignment(u32 npad_id_1, u32 npad_id_2);
+
// Logical OR for all buttons presses on all controllers
// Specifically for cheat engine and other features.
u32 GetAndResetPressState();
@@ -321,5 +325,6 @@ private:
void RequestPadStateUpdate(u32 npad_id);
std::array<ControllerPad, 10> npad_pad_states{};
bool IsControllerSupported(NPadControllerType controller);
+ bool is_in_lr_assignment_mode{false};
};
} // namespace Service::HID