|
|
@ -156,76 +156,77 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) { |
|
|
styleset_changed_events[controller_idx].writable->Signal(); |
|
|
styleset_changed_events[controller_idx].writable->Signal(); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
controller.joy_styles.raw = 0; // Zero out
|
|
|
|
|
|
|
|
|
controller.style_set.raw = 0; // Zero out
|
|
|
controller.device_type.raw = 0; |
|
|
controller.device_type.raw = 0; |
|
|
controller.properties.raw = 0; |
|
|
|
|
|
|
|
|
controller.system_properties.raw = 0; |
|
|
switch (controller_type) { |
|
|
switch (controller_type) { |
|
|
case NPadControllerType::None: |
|
|
case NPadControllerType::None: |
|
|
UNREACHABLE(); |
|
|
UNREACHABLE(); |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::ProController: |
|
|
case NPadControllerType::ProController: |
|
|
controller.joy_styles.pro_controller.Assign(1); |
|
|
|
|
|
controller.device_type.pro_controller.Assign(1); |
|
|
|
|
|
controller.properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.properties.use_plus.Assign(1); |
|
|
|
|
|
controller.properties.use_minus.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Single; |
|
|
|
|
|
|
|
|
controller.style_set.fullkey.Assign(1); |
|
|
|
|
|
controller.device_type.fullkey.Assign(1); |
|
|
|
|
|
controller.system_properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.system_properties.use_plus.Assign(1); |
|
|
|
|
|
controller.system_properties.use_minus.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Single; |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::Handheld: |
|
|
case NPadControllerType::Handheld: |
|
|
controller.joy_styles.handheld.Assign(1); |
|
|
|
|
|
controller.device_type.handheld.Assign(1); |
|
|
|
|
|
controller.properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.properties.use_plus.Assign(1); |
|
|
|
|
|
controller.properties.use_minus.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Dual; |
|
|
|
|
|
|
|
|
controller.style_set.handheld.Assign(1); |
|
|
|
|
|
controller.device_type.handheld_left.Assign(1); |
|
|
|
|
|
controller.device_type.handheld_right.Assign(1); |
|
|
|
|
|
controller.system_properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.system_properties.use_plus.Assign(1); |
|
|
|
|
|
controller.system_properties.use_minus.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Dual; |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::JoyDual: |
|
|
case NPadControllerType::JoyDual: |
|
|
controller.joy_styles.joycon_dual.Assign(1); |
|
|
|
|
|
|
|
|
controller.style_set.joycon_dual.Assign(1); |
|
|
controller.device_type.joycon_left.Assign(1); |
|
|
controller.device_type.joycon_left.Assign(1); |
|
|
controller.device_type.joycon_right.Assign(1); |
|
|
controller.device_type.joycon_right.Assign(1); |
|
|
controller.properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.properties.use_plus.Assign(1); |
|
|
|
|
|
controller.properties.use_minus.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Dual; |
|
|
|
|
|
|
|
|
controller.system_properties.is_vertical.Assign(1); |
|
|
|
|
|
controller.system_properties.use_plus.Assign(1); |
|
|
|
|
|
controller.system_properties.use_minus.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Dual; |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::JoyLeft: |
|
|
case NPadControllerType::JoyLeft: |
|
|
controller.joy_styles.joycon_left.Assign(1); |
|
|
|
|
|
|
|
|
controller.style_set.joycon_left.Assign(1); |
|
|
controller.device_type.joycon_left.Assign(1); |
|
|
controller.device_type.joycon_left.Assign(1); |
|
|
controller.properties.is_horizontal.Assign(1); |
|
|
|
|
|
controller.properties.use_minus.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Single; |
|
|
|
|
|
|
|
|
controller.system_properties.is_horizontal.Assign(1); |
|
|
|
|
|
controller.system_properties.use_minus.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Single; |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::JoyRight: |
|
|
case NPadControllerType::JoyRight: |
|
|
controller.joy_styles.joycon_right.Assign(1); |
|
|
|
|
|
|
|
|
controller.style_set.joycon_right.Assign(1); |
|
|
controller.device_type.joycon_right.Assign(1); |
|
|
controller.device_type.joycon_right.Assign(1); |
|
|
controller.properties.is_horizontal.Assign(1); |
|
|
|
|
|
controller.properties.use_plus.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Single; |
|
|
|
|
|
|
|
|
controller.system_properties.is_horizontal.Assign(1); |
|
|
|
|
|
controller.system_properties.use_plus.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Single; |
|
|
break; |
|
|
break; |
|
|
case NPadControllerType::Pokeball: |
|
|
case NPadControllerType::Pokeball: |
|
|
controller.joy_styles.pokeball.Assign(1); |
|
|
|
|
|
controller.device_type.pokeball.Assign(1); |
|
|
|
|
|
controller.pad_assignment = NpadAssignments::Single; |
|
|
|
|
|
|
|
|
controller.style_set.palma.Assign(1); |
|
|
|
|
|
controller.device_type.palma.Assign(1); |
|
|
|
|
|
controller.assignment_mode = NpadAssignments::Single; |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
controller.single_color_error = ColorReadError::ReadOk; |
|
|
|
|
|
controller.single_color.body_color = 0; |
|
|
|
|
|
controller.single_color.button_color = 0; |
|
|
|
|
|
|
|
|
controller.fullkey_color.attribute = ColorAttributes::Ok; |
|
|
|
|
|
controller.fullkey_color.fullkey.body = 0; |
|
|
|
|
|
controller.fullkey_color.fullkey.button = 0; |
|
|
|
|
|
|
|
|
controller.dual_color_error = ColorReadError::ReadOk; |
|
|
|
|
|
controller.left_color.body_color = |
|
|
|
|
|
|
|
|
controller.joycon_color.attribute = ColorAttributes::Ok; |
|
|
|
|
|
controller.joycon_color.left.body = |
|
|
Settings::values.players.GetValue()[controller_idx].body_color_left; |
|
|
Settings::values.players.GetValue()[controller_idx].body_color_left; |
|
|
controller.left_color.button_color = |
|
|
|
|
|
|
|
|
controller.joycon_color.left.button = |
|
|
Settings::values.players.GetValue()[controller_idx].button_color_left; |
|
|
Settings::values.players.GetValue()[controller_idx].button_color_left; |
|
|
controller.right_color.body_color = |
|
|
|
|
|
|
|
|
controller.joycon_color.right.body = |
|
|
Settings::values.players.GetValue()[controller_idx].body_color_right; |
|
|
Settings::values.players.GetValue()[controller_idx].body_color_right; |
|
|
controller.right_color.button_color = |
|
|
|
|
|
|
|
|
controller.joycon_color.right.button = |
|
|
Settings::values.players.GetValue()[controller_idx].button_color_right; |
|
|
Settings::values.players.GetValue()[controller_idx].button_color_right; |
|
|
|
|
|
|
|
|
controller.battery_level[0] = BATTERY_FULL; |
|
|
|
|
|
controller.battery_level[1] = BATTERY_FULL; |
|
|
|
|
|
controller.battery_level[2] = BATTERY_FULL; |
|
|
|
|
|
|
|
|
controller.battery_level_dual = BATTERY_FULL; |
|
|
|
|
|
controller.battery_level_left = BATTERY_FULL; |
|
|
|
|
|
controller.battery_level_right = BATTERY_FULL; |
|
|
|
|
|
|
|
|
SignalStyleSetChangedEvent(IndexToNPad(controller_idx)); |
|
|
SignalStyleSetChangedEvent(IndexToNPad(controller_idx)); |
|
|
} |
|
|
} |
|
|
@ -249,8 +250,8 @@ void Controller_NPad::OnInit() { |
|
|
style.joycon_left.Assign(1); |
|
|
style.joycon_left.Assign(1); |
|
|
style.joycon_right.Assign(1); |
|
|
style.joycon_right.Assign(1); |
|
|
style.joycon_dual.Assign(1); |
|
|
style.joycon_dual.Assign(1); |
|
|
style.pro_controller.Assign(1); |
|
|
|
|
|
style.pokeball.Assign(1); |
|
|
|
|
|
|
|
|
style.fullkey.Assign(1); |
|
|
|
|
|
style.palma.Assign(1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::transform(Settings::values.players.GetValue().begin(), |
|
|
std::transform(Settings::values.players.GetValue().begin(), |
|
|
@ -404,13 +405,10 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* |
|
|
} |
|
|
} |
|
|
for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) { |
|
|
for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) { |
|
|
auto& npad = shared_memory_entries[i]; |
|
|
auto& npad = shared_memory_entries[i]; |
|
|
const std::array<NPadGeneric*, 7> controller_npads{&npad.main_controller_states, |
|
|
|
|
|
&npad.handheld_states, |
|
|
|
|
|
&npad.dual_states, |
|
|
|
|
|
&npad.left_joy_states, |
|
|
|
|
|
&npad.right_joy_states, |
|
|
|
|
|
&npad.pokeball_states, |
|
|
|
|
|
&npad.libnx}; |
|
|
|
|
|
|
|
|
const std::array<NPadGeneric*, 7> controller_npads{ |
|
|
|
|
|
&npad.fullkey_states, &npad.handheld_states, &npad.joy_dual_states, |
|
|
|
|
|
&npad.joy_left_states, &npad.joy_right_states, &npad.palma_states, |
|
|
|
|
|
&npad.system_ext_states}; |
|
|
|
|
|
|
|
|
for (auto* main_controller : controller_npads) { |
|
|
for (auto* main_controller : controller_npads) { |
|
|
main_controller->common.entry_count = 16; |
|
|
main_controller->common.entry_count = 16; |
|
|
@ -440,16 +438,16 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* |
|
|
auto& pad_state = npad_pad_states[npad_index]; |
|
|
auto& pad_state = npad_pad_states[npad_index]; |
|
|
|
|
|
|
|
|
auto& main_controller = |
|
|
auto& main_controller = |
|
|
npad.main_controller_states.npad[npad.main_controller_states.common.last_entry_index]; |
|
|
|
|
|
|
|
|
npad.fullkey_states.npad[npad.fullkey_states.common.last_entry_index]; |
|
|
auto& handheld_entry = |
|
|
auto& handheld_entry = |
|
|
npad.handheld_states.npad[npad.handheld_states.common.last_entry_index]; |
|
|
npad.handheld_states.npad[npad.handheld_states.common.last_entry_index]; |
|
|
auto& dual_entry = npad.dual_states.npad[npad.dual_states.common.last_entry_index]; |
|
|
|
|
|
auto& left_entry = npad.left_joy_states.npad[npad.left_joy_states.common.last_entry_index]; |
|
|
|
|
|
|
|
|
auto& dual_entry = npad.joy_dual_states.npad[npad.joy_dual_states.common.last_entry_index]; |
|
|
|
|
|
auto& left_entry = npad.joy_left_states.npad[npad.joy_left_states.common.last_entry_index]; |
|
|
auto& right_entry = |
|
|
auto& right_entry = |
|
|
npad.right_joy_states.npad[npad.right_joy_states.common.last_entry_index]; |
|
|
|
|
|
auto& pokeball_entry = |
|
|
|
|
|
npad.pokeball_states.npad[npad.pokeball_states.common.last_entry_index]; |
|
|
|
|
|
auto& libnx_entry = npad.libnx.npad[npad.libnx.common.last_entry_index]; |
|
|
|
|
|
|
|
|
npad.joy_right_states.npad[npad.joy_right_states.common.last_entry_index]; |
|
|
|
|
|
auto& pokeball_entry = npad.palma_states.npad[npad.palma_states.common.last_entry_index]; |
|
|
|
|
|
auto& libnx_entry = |
|
|
|
|
|
npad.system_ext_states.npad[npad.system_ext_states.common.last_entry_index]; |
|
|
|
|
|
|
|
|
libnx_entry.connection_status.raw = 0; |
|
|
libnx_entry.connection_status.raw = 0; |
|
|
libnx_entry.connection_status.IsConnected.Assign(1); |
|
|
libnx_entry.connection_status.IsConnected.Assign(1); |
|
|
@ -554,7 +552,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const std::array<SixAxisGeneric*, 6> controller_sixaxes{ |
|
|
const std::array<SixAxisGeneric*, 6> controller_sixaxes{ |
|
|
&npad.sixaxis_full, &npad.sixaxis_handheld, &npad.sixaxis_dual_left, |
|
|
|
|
|
|
|
|
&npad.sixaxis_fullkey, &npad.sixaxis_handheld, &npad.sixaxis_dual_left, |
|
|
&npad.sixaxis_dual_right, &npad.sixaxis_left, &npad.sixaxis_right, |
|
|
&npad.sixaxis_dual_right, &npad.sixaxis_left, &npad.sixaxis_right, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
@ -592,7 +590,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
auto& full_sixaxis_entry = |
|
|
auto& full_sixaxis_entry = |
|
|
npad.sixaxis_full.sixaxis[npad.sixaxis_full.common.last_entry_index]; |
|
|
|
|
|
|
|
|
npad.sixaxis_fullkey.sixaxis[npad.sixaxis_fullkey.common.last_entry_index]; |
|
|
auto& handheld_sixaxis_entry = |
|
|
auto& handheld_sixaxis_entry = |
|
|
npad.sixaxis_handheld.sixaxis[npad.sixaxis_handheld.common.last_entry_index]; |
|
|
npad.sixaxis_handheld.sixaxis[npad.sixaxis_handheld.common.last_entry_index]; |
|
|
auto& dual_left_sixaxis_entry = |
|
|
auto& dual_left_sixaxis_entry = |
|
|
@ -727,8 +725,8 @@ Controller_NPad::NpadCommunicationMode Controller_NPad::GetNpadCommunicationMode |
|
|
void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) { |
|
|
void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) { |
|
|
const std::size_t npad_index = NPadIdToIndex(npad_id); |
|
|
const std::size_t npad_index = NPadIdToIndex(npad_id); |
|
|
ASSERT(npad_index < shared_memory_entries.size()); |
|
|
ASSERT(npad_index < shared_memory_entries.size()); |
|
|
if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) { |
|
|
|
|
|
shared_memory_entries[npad_index].pad_assignment = assignment_mode; |
|
|
|
|
|
|
|
|
if (shared_memory_entries[npad_index].assignment_mode != assignment_mode) { |
|
|
|
|
|
shared_memory_entries[npad_index].assignment_mode = assignment_mode; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -935,9 +933,10 @@ void Controller_NPad::DisconnectNpadAtIndex(std::size_t npad_index) { |
|
|
connected_controllers[npad_index].is_connected = false; |
|
|
connected_controllers[npad_index].is_connected = false; |
|
|
|
|
|
|
|
|
auto& controller = shared_memory_entries[npad_index]; |
|
|
auto& controller = shared_memory_entries[npad_index]; |
|
|
controller.joy_styles.raw = 0; // Zero out
|
|
|
|
|
|
|
|
|
controller.style_set.raw = 0; // Zero out
|
|
|
controller.device_type.raw = 0; |
|
|
controller.device_type.raw = 0; |
|
|
controller.properties.raw = 0; |
|
|
|
|
|
|
|
|
controller.system_properties.raw = 0; |
|
|
|
|
|
controller.button_properties.raw = 0; |
|
|
|
|
|
|
|
|
SignalStyleSetChangedEvent(IndexToNPad(npad_index)); |
|
|
SignalStyleSetChangedEvent(IndexToNPad(npad_index)); |
|
|
} |
|
|
} |
|
|
@ -1113,7 +1112,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const |
|
|
[](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) { |
|
|
[](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) { |
|
|
switch (controller) { |
|
|
switch (controller) { |
|
|
case NPadControllerType::ProController: |
|
|
case NPadControllerType::ProController: |
|
|
return style.pro_controller; |
|
|
|
|
|
|
|
|
return style.fullkey; |
|
|
case NPadControllerType::JoyDual: |
|
|
case NPadControllerType::JoyDual: |
|
|
return style.joycon_dual; |
|
|
return style.joycon_dual; |
|
|
case NPadControllerType::JoyLeft: |
|
|
case NPadControllerType::JoyLeft: |
|
|
@ -1121,7 +1120,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const |
|
|
case NPadControllerType::JoyRight: |
|
|
case NPadControllerType::JoyRight: |
|
|
return style.joycon_right; |
|
|
return style.joycon_right; |
|
|
case NPadControllerType::Pokeball: |
|
|
case NPadControllerType::Pokeball: |
|
|
return style.pokeball; |
|
|
|
|
|
|
|
|
return style.palma; |
|
|
default: |
|
|
default: |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|