diff options
Diffstat (limited to 'src/hid_core')
| -rw-r--r-- | src/hid_core/resource_manager.cpp | 1 | ||||
| -rw-r--r-- | src/hid_core/resources/applet_resource.cpp | 34 | ||||
| -rw-r--r-- | src/hid_core/resources/npad/npad_resource.cpp | 4 |
3 files changed, 18 insertions, 21 deletions
diff --git a/src/hid_core/resource_manager.cpp b/src/hid_core/resource_manager.cpp index 17dacef6e..2c5fe6d51 100644 --- a/src/hid_core/resource_manager.cpp +++ b/src/hid_core/resource_manager.cpp | |||
| @@ -224,6 +224,7 @@ Result ResourceManager::RegisterAppletResourceUserId(u64 aruid, bool bool_value) | |||
| 224 | void ResourceManager::UnregisterAppletResourceUserId(u64 aruid) { | 224 | void ResourceManager::UnregisterAppletResourceUserId(u64 aruid) { |
| 225 | std::scoped_lock lock{shared_mutex}; | 225 | std::scoped_lock lock{shared_mutex}; |
| 226 | applet_resource->UnregisterAppletResourceUserId(aruid); | 226 | applet_resource->UnregisterAppletResourceUserId(aruid); |
| 227 | npad->UnregisterAppletResourceUserId(aruid); | ||
| 227 | } | 228 | } |
| 228 | 229 | ||
| 229 | Result ResourceManager::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { | 230 | Result ResourceManager::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { |
diff --git a/src/hid_core/resources/applet_resource.cpp b/src/hid_core/resources/applet_resource.cpp index d16cff1a4..d09a525c6 100644 --- a/src/hid_core/resources/applet_resource.cpp +++ b/src/hid_core/resources/applet_resource.cpp | |||
| @@ -87,7 +87,9 @@ Result AppletResource::RegisterAppletResourceUserId(u64 aruid, bool enable_input | |||
| 87 | data_index = i; | 87 | data_index = i; |
| 88 | break; | 88 | break; |
| 89 | } | 89 | } |
| 90 | if (registration_list.flag[i] == RegistrationStatus::None) { | 90 | // TODO: Don't Handle pending delete here |
| 91 | if (registration_list.flag[i] == RegistrationStatus::None || | ||
| 92 | registration_list.flag[i] == RegistrationStatus::PendingDelete) { | ||
| 91 | data_index = i; | 93 | data_index = i; |
| 92 | break; | 94 | break; |
| 93 | } | 95 | } |
| @@ -104,30 +106,22 @@ Result AppletResource::RegisterAppletResourceUserId(u64 aruid, bool enable_input | |||
| 104 | } | 106 | } |
| 105 | 107 | ||
| 106 | void AppletResource::UnregisterAppletResourceUserId(u64 aruid) { | 108 | void AppletResource::UnregisterAppletResourceUserId(u64 aruid) { |
| 107 | u64 index = GetIndexFromAruid(aruid); | 109 | const u64 index = GetIndexFromAruid(aruid); |
| 108 | 110 | ||
| 109 | if (index < AruidIndexMax) { | 111 | if (index >= AruidIndexMax) { |
| 110 | if (data[index].flag.is_assigned) { | 112 | return; |
| 111 | data[index].shared_memory_format = nullptr; | ||
| 112 | data[index].flag.is_assigned.Assign(false); | ||
| 113 | } | ||
| 114 | } | 113 | } |
| 115 | 114 | ||
| 116 | index = GetIndexFromAruid(aruid); | 115 | FreeAppletResourceId(aruid); |
| 117 | if (index < AruidIndexMax) { | 116 | DestroySevenSixAxisTransferMemory(); |
| 118 | DestroySevenSixAxisTransferMemory(); | 117 | data[index].flag.raw = 0; |
| 119 | data[index].flag.raw = 0; | 118 | data[index].aruid = 0; |
| 120 | data[index].aruid = 0; | ||
| 121 | 119 | ||
| 122 | index = GetIndexFromAruid(aruid); | 120 | registration_list.flag[index] = RegistrationStatus::PendingDelete; |
| 123 | if (index < AruidIndexMax) { | ||
| 124 | registration_list.flag[index] = RegistrationStatus::PendingDelete; | ||
| 125 | } | ||
| 126 | } | ||
| 127 | } | 121 | } |
| 128 | 122 | ||
| 129 | void AppletResource::FreeAppletResourceId(u64 aruid) { | 123 | void AppletResource::FreeAppletResourceId(u64 aruid) { |
| 130 | u64 index = GetIndexFromAruid(aruid); | 124 | const u64 index = GetIndexFromAruid(aruid); |
| 131 | if (index >= AruidIndexMax) { | 125 | if (index >= AruidIndexMax) { |
| 132 | return; | 126 | return; |
| 133 | } | 127 | } |
| @@ -144,7 +138,7 @@ u64 AppletResource::GetActiveAruid() { | |||
| 144 | } | 138 | } |
| 145 | 139 | ||
| 146 | Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { | 140 | Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { |
| 147 | u64 index = GetIndexFromAruid(aruid); | 141 | const u64 index = GetIndexFromAruid(aruid); |
| 148 | if (index >= AruidIndexMax) { | 142 | if (index >= AruidIndexMax) { |
| 149 | return ResultAruidNotRegistered; | 143 | return ResultAruidNotRegistered; |
| 150 | } | 144 | } |
| @@ -155,7 +149,7 @@ Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, | |||
| 155 | 149 | ||
| 156 | Result AppletResource::GetSharedMemoryFormat(SharedMemoryFormat** out_shared_memory_format, | 150 | Result AppletResource::GetSharedMemoryFormat(SharedMemoryFormat** out_shared_memory_format, |
| 157 | u64 aruid) { | 151 | u64 aruid) { |
| 158 | u64 index = GetIndexFromAruid(aruid); | 152 | const u64 index = GetIndexFromAruid(aruid); |
| 159 | if (index >= AruidIndexMax) { | 153 | if (index >= AruidIndexMax) { |
| 160 | return ResultAruidNotRegistered; | 154 | return ResultAruidNotRegistered; |
| 161 | } | 155 | } |
diff --git a/src/hid_core/resources/npad/npad_resource.cpp b/src/hid_core/resources/npad/npad_resource.cpp index b0255a05c..ea9fc14ed 100644 --- a/src/hid_core/resources/npad/npad_resource.cpp +++ b/src/hid_core/resources/npad/npad_resource.cpp | |||
| @@ -46,7 +46,9 @@ Result NPadResource::RegisterAppletResourceUserId(u64 aruid) { | |||
| 46 | data_index = i; | 46 | data_index = i; |
| 47 | break; | 47 | break; |
| 48 | } | 48 | } |
| 49 | if (registration_list.flag[i] == RegistrationStatus::None) { | 49 | // TODO: Don't Handle pending delete here |
| 50 | if (registration_list.flag[i] == RegistrationStatus::None || | ||
| 51 | registration_list.flag[i] == RegistrationStatus::PendingDelete) { | ||
| 50 | data_index = i; | 52 | data_index = i; |
| 51 | break; | 53 | break; |
| 52 | } | 54 | } |