summaryrefslogtreecommitdiff
path: root/src/hid_core
diff options
context:
space:
mode:
Diffstat (limited to 'src/hid_core')
-rw-r--r--src/hid_core/resource_manager.cpp1
-rw-r--r--src/hid_core/resources/applet_resource.cpp34
-rw-r--r--src/hid_core/resources/npad/npad_resource.cpp4
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)
224void ResourceManager::UnregisterAppletResourceUserId(u64 aruid) { 224void 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
229Result ResourceManager::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { 230Result 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
106void AppletResource::UnregisterAppletResourceUserId(u64 aruid) { 108void 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
129void AppletResource::FreeAppletResourceId(u64 aruid) { 123void 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
146Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) { 140Result 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
156Result AppletResource::GetSharedMemoryFormat(SharedMemoryFormat** out_shared_memory_format, 150Result 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 }