Browse Source

[hle] handle NPad shared_memory being null on certain updates and cases

Signed-off-by: lizzie <lizzie@eden-emu.dev>
lizzie/bundleevil123
lizzie 2 months ago
parent
commit
558bebd76a
  1. 24
      src/hid_core/resources/npad/npad.cpp

24
src/hid_core/resources/npad/npad.cpp

@ -157,11 +157,14 @@ void NPad::ControllerUpdate(Core::HID::ControllerTriggerType type, std::size_t c
if (!controller.device->IsConnected()) { if (!controller.device->IsConnected()) {
return; return;
} }
auto* shared_memory = controller.shared_memory;
const auto& battery_level = controller.device->GetBattery();
shared_memory->battery_level_dual = battery_level.dual.battery_level;
shared_memory->battery_level_left = battery_level.left.battery_level;
shared_memory->battery_level_right = battery_level.right.battery_level;
if (auto* shared_memory = controller.shared_memory; shared_memory) {
const auto& battery_level = controller.device->GetBattery();
shared_memory->battery_level_dual = battery_level.dual.battery_level;
shared_memory->battery_level_left = battery_level.left.battery_level;
shared_memory->battery_level_right = battery_level.right.battery_level;
} else {
LOG_WARNING(Service_HID, "shared_memory is null {}", controller_idx);
}
break; break;
} }
default: default:
@ -180,6 +183,10 @@ void NPad::InitNewlyAddedController(u64 aruid, Core::HID::NpadIdType npad_id) {
const auto& body_colors = controller.device->GetColors(); const auto& body_colors = controller.device->GetColors();
const auto& battery_level = controller.device->GetBattery(); const auto& battery_level = controller.device->GetBattery();
auto* shared_memory = controller.shared_memory; auto* shared_memory = controller.shared_memory;
if (!shared_memory) {
LOG_WARNING(Service_HID, "shared_memory is null for npad_id={}", npad_id);
return ResultSuccess;
}
if (controller_type == Core::HID::NpadStyleIndex::None) { if (controller_type == Core::HID::NpadStyleIndex::None) {
npad_resource.SignalStyleSetUpdateEvent(aruid, npad_id); npad_resource.SignalStyleSetUpdateEvent(aruid, npad_id);
return; return;
@ -801,7 +808,7 @@ Result NPad::DisconnectNpad(u64 aruid, Core::HID::NpadIdType npad_id) {
auto* shared_memory = controller.shared_memory; auto* shared_memory = controller.shared_memory;
if (!shared_memory) { if (!shared_memory) {
LOG_WARNING(Service_HID, "DisconnectNpad: shared_memory is null for npad_id={}", npad_id);
LOG_WARNING(Service_HID, "shared_memory is null for npad_id={}", npad_id);
return ResultSuccess; return ResultSuccess;
} }
// Don't reset shared_memory->assignment_mode this value is persistent // Don't reset shared_memory->assignment_mode this value is persistent
@ -1195,11 +1202,10 @@ const Core::HID::SixAxisSensorProperties& NPad::GetSixaxisProperties(
AppletDetailedUiType NPad::GetAppletDetailedUiType(Core::HID::NpadIdType npad_id) { AppletDetailedUiType NPad::GetAppletDetailedUiType(Core::HID::NpadIdType npad_id) {
const auto aruid = applet_resource_holder.applet_resource->GetActiveAruid(); const auto aruid = applet_resource_holder.applet_resource->GetActiveAruid();
const auto& shared_memory = GetControllerFromNpadIdType(aruid, npad_id).shared_memory;
const auto* shared_memory = GetControllerFromNpadIdType(aruid, npad_id).shared_memory;
return { return {
.ui_variant = 0, .ui_variant = 0,
.footer = shared_memory->applet_footer_type,
.footer = shared_memory ? shared_memory->applet_footer_type : AppletFooterUiType::None,
}; };
} }

Loading…
Cancel
Save