diff options
| author | David Marcec <dmarcecguzman@gmail.com> | 2018-10-10 21:38:43 +1100 |
|---|---|---|
| committer | David Marcec <dmarcecguzman@gmail.com> | 2018-10-10 21:38:43 +1100 |
| commit | 3d75c9cd7a75f7ef97e2e14fc2eb15e4bba92934 (patch) | |
| tree | a4fd0d5c6ed5e11fa5eb0229b9dd9ab4e06885de /src/core/hle/service/hid/controllers/npad.cpp | |
| parent | 46cdeb4549dbd549f9700967c25c089594f3b4ff (diff) | |
Added GetLedPattern and HandheldVariant
HandheldVariant is for specific games which expect handheld controllers to be at position 8(kirby), however this doesn't fix all games as some games require handhelds to be at position 0(snipperclips)
Diffstat (limited to 'src/core/hle/service/hid/controllers/npad.cpp')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 282953bab..069e0d5de 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -41,6 +41,7 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { controller.joy_styles.raw = 0; // Zero out controller.device_type.raw = 0; switch (controller_type) { + case NPadControllerType::HandheldVariant: case NPadControllerType::Handheld: controller.joy_styles.handheld.Assign(1); controller.device_type.handheld.Assign(1); @@ -220,9 +221,12 @@ void Controller_NPad::OnUpdate(u8* data, std::size_t data_len) { } switch (controller_type) { + case NPadControllerType::HandheldVariant: case NPadControllerType::Handheld: handheld_entry.connection_status.IsConnected.Assign(1); - handheld_entry.connection_status.IsWired.Assign(1); + if (!Settings::values.use_docked_mode) { + handheld_entry.connection_status.IsWired.Assign(1); + } handheld_entry.pad_states.raw = pad_state.raw; handheld_entry.l_stick = lstick_entry; handheld_entry.r_stick = rstick_entry; @@ -334,7 +338,7 @@ void Controller_NPad::AddNewController(NPadControllerType controller) { LOG_ERROR(Service_HID, "Cannot connect any more controllers!"); return; } - if (controller == NPadControllerType::Handheld) { + if (controller == NPadControllerType::HandheldVariant) { connected_controllers[8] = {controller, true}; InitNewlyAddedControler(8); return; @@ -354,4 +358,32 @@ void Controller_NPad::DisconnectNPad(u32 npad_id) { return; connected_controllers[npad_id].is_connected = false; } + +Controller_NPad::LedPattern Controller_NPad::GetLedPattern(u32 npad_id) { + if (npad_id == npad_id_list.back() || npad_id == npad_id_list[npad_id_list.size() - 2]) { + // These are controllers without led patterns + return LedPattern{0, 0, 0, 0}; + } + switch (npad_id) { + case 0: + return LedPattern{1, 0, 0, 0}; + case 1: + return LedPattern{0, 1, 0, 0}; + case 2: + return LedPattern{0, 0, 1, 0}; + case 3: + return LedPattern{0, 0, 0, 1}; + case 4: + return LedPattern{1, 0, 0, 1}; + case 5: + return LedPattern{1, 0, 1, 0}; + case 6: + return LedPattern{1, 0, 1, 1}; + case 7: + return LedPattern{0, 1, 1, 0}; + default: + UNIMPLEMENTED_MSG("Unhandled npad_id {}", npad_id); + return LedPattern{0, 0, 0, 0}; + }; +} } // namespace Service::HID |
