summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp21
-rw-r--r--src/core/hle/service/hid/controllers/npad.h7
2 files changed, 21 insertions, 7 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index a9060fa2c..fd677d281 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -79,21 +79,31 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
79 controller.joy_styles.handheld.Assign(1); 79 controller.joy_styles.handheld.Assign(1);
80 controller.device_type.handheld.Assign(1); 80 controller.device_type.handheld.Assign(1);
81 controller.pad_assignment = NPadAssignments::Dual; 81 controller.pad_assignment = NPadAssignments::Dual;
82 controller.properties.is_vertical.Assign(1);
83 controller.properties.use_plus.Assign(1);
84 controller.properties.use_minus.Assign(1);
82 break; 85 break;
83 case NPadControllerType::JoyDual: 86 case NPadControllerType::JoyDual:
84 controller.joy_styles.joycon_dual.Assign(1); 87 controller.joy_styles.joycon_dual.Assign(1);
85 controller.device_type.joycon_left.Assign(1); 88 controller.device_type.joycon_left.Assign(1);
86 controller.device_type.joycon_right.Assign(1); 89 controller.device_type.joycon_right.Assign(1);
90 controller.properties.is_vertical.Assign(1);
91 controller.properties.use_plus.Assign(1);
92 controller.properties.use_minus.Assign(1);
87 controller.pad_assignment = NPadAssignments::Dual; 93 controller.pad_assignment = NPadAssignments::Dual;
88 break; 94 break;
89 case NPadControllerType::JoyLeft: 95 case NPadControllerType::JoyLeft:
90 controller.joy_styles.joycon_left.Assign(1); 96 controller.joy_styles.joycon_left.Assign(1);
91 controller.device_type.joycon_left.Assign(1); 97 controller.device_type.joycon_left.Assign(1);
98 controller.properties.is_horizontal.Assign(1);
99 controller.properties.use_minus.Assign(1);
92 controller.pad_assignment = NPadAssignments::Single; 100 controller.pad_assignment = NPadAssignments::Single;
93 break; 101 break;
94 case NPadControllerType::JoyRight: 102 case NPadControllerType::JoyRight:
95 controller.joy_styles.joycon_right.Assign(1); 103 controller.joy_styles.joycon_right.Assign(1);
96 controller.device_type.joycon_right.Assign(1); 104 controller.device_type.joycon_right.Assign(1);
105 controller.properties.is_horizontal.Assign(1);
106 controller.properties.use_plus.Assign(1);
97 controller.pad_assignment = NPadAssignments::Single; 107 controller.pad_assignment = NPadAssignments::Single;
98 break; 108 break;
99 case NPadControllerType::Pokeball: 109 case NPadControllerType::Pokeball:
@@ -104,6 +114,9 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
104 case NPadControllerType::ProController: 114 case NPadControllerType::ProController:
105 controller.joy_styles.pro_controller.Assign(1); 115 controller.joy_styles.pro_controller.Assign(1);
106 controller.device_type.pro_controller.Assign(1); 116 controller.device_type.pro_controller.Assign(1);
117 controller.properties.is_vertical.Assign(1);
118 controller.properties.use_plus.Assign(1);
119 controller.properties.use_minus.Assign(1);
107 controller.pad_assignment = NPadAssignments::Single; 120 controller.pad_assignment = NPadAssignments::Single;
108 break; 121 break;
109 } 122 }
@@ -118,9 +131,6 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
118 controller.right_color.body_color = JOYCON_BODY_NEON_RED; 131 controller.right_color.body_color = JOYCON_BODY_NEON_RED;
119 controller.right_color.button_color = JOYCON_BUTTONS_NEON_RED; 132 controller.right_color.button_color = JOYCON_BUTTONS_NEON_RED;
120 133
121 controller.properties.is_vertical.Assign(1); // TODO(ogniK): Swap joycons orientations
122 controller.properties.use_plus.Assign(1);
123 controller.properties.use_minus.Assign(1);
124 controller.battery_level[0] = BATTERY_FULL; 134 controller.battery_level[0] = BATTERY_FULL;
125 controller.battery_level[1] = BATTERY_FULL; 135 controller.battery_level[1] = BATTERY_FULL;
126 controller.battery_level[2] = BATTERY_FULL; 136 controller.battery_level[2] = BATTERY_FULL;
@@ -202,8 +212,8 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) {
202 pad_state.r_stick_right.Assign(buttons[RStick_Right - BUTTON_HID_BEGIN]->GetStatus()); 212 pad_state.r_stick_right.Assign(buttons[RStick_Right - BUTTON_HID_BEGIN]->GetStatus());
203 pad_state.r_stick_down.Assign(buttons[RStick_Down - BUTTON_HID_BEGIN]->GetStatus()); 213 pad_state.r_stick_down.Assign(buttons[RStick_Down - BUTTON_HID_BEGIN]->GetStatus());
204 214
205 pad_state.sl.Assign(buttons[SL - BUTTON_HID_BEGIN]->GetStatus()); 215 pad_state.left_sl.Assign(buttons[SL - BUTTON_HID_BEGIN]->GetStatus());
206 pad_state.sr.Assign(buttons[SR - BUTTON_HID_BEGIN]->GetStatus()); 216 pad_state.left_sr.Assign(buttons[SR - BUTTON_HID_BEGIN]->GetStatus());
207 217
208 const auto [stick_l_x_f, stick_l_y_f] = 218 const auto [stick_l_x_f, stick_l_y_f] =
209 sticks[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus(); 219 sticks[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus();
@@ -307,6 +317,7 @@ void Controller_NPad::OnUpdate(u8* data, std::size_t data_len) {
307 pad_state.l_stick = temp_lstick_entry; 317 pad_state.l_stick = temp_lstick_entry;
308 pad_state.r_stick = temp_rstick_entry; 318 pad_state.r_stick = temp_rstick_entry;
309 } 319 }
320
310 libnx_entry.connection_status.raw = 0; 321 libnx_entry.connection_status.raw = 0;
311 322
312 switch (controller_type) { 323 switch (controller_type) {
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index ea12646f8..f702990c7 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -165,8 +165,11 @@ private:
165 BitField<23, 1, u64_le> r_stick_down; 165 BitField<23, 1, u64_le> r_stick_down;
166 166
167 // Not always active? 167 // Not always active?
168 BitField<24, 1, u64_le> sl; 168 BitField<24, 1, u64_le> left_sl;
169 BitField<25, 1, u64_le> sr; 169 BitField<25, 1, u64_le> left_sr;
170
171 BitField<26, 1, u64_le> right_sl;
172 BitField<27, 1, u64_le> right_sr;
170 }; 173 };
171 }; 174 };
172 static_assert(sizeof(ControllerPadState) == 8, "ControllerPadState is an invalid size"); 175 static_assert(sizeof(ControllerPadState) == 8, "ControllerPadState is an invalid size");