Update DetectionManger to handle generic wildcards in safe mode.

This commit is contained in:
Daniel Clark authored and Adam Honse committed 2026-08-16 16:33:11 -05:00
1 parent 433788cc49
commit ae038bc8e9
1 file changed
+21 -14
+21 -14
View File
@@ -107,7 +107,8 @@ bool BasicHIDBlock::compare(hid_device_info* info)
bool BasicHIDBlock::matching_id(hid_device_info* info)
{
return((vid == info->vendor_id) && (pid == info->product_id));
return(((vid == HID_VID_ANY) || (vid == info->vendor_id))
&& ((pid == HID_PID_ANY) || (pid == info->product_id)));
}
/*---------------------------------------------------------*\
@@ -852,14 +853,14 @@ void DetectionManager::BackgroundDetectDevices()
| Track if rules exist in any /etc location |
| Note: Flatpak mounts this at /run/host/etc |
\*-----------------------------------------------------*/
bool in_etc = (access("/etc/udev/rules.d/60-openrgb.rules", F_OK) == 0) ||
bool in_etc = (access("/etc/udev/rules.d/60-openrgb.rules", F_OK) == 0) ||
(access("/run/host/etc/udev/rules.d/60-openrgb.rules", F_OK) == 0);
/*-----------------------------------------------------*\
| Track if rules exist in any /usr/lib location |
| Note: Flatpak mounts this at /run/host/usr |
\*-----------------------------------------------------*/
bool in_usr_lib = (access("/usr/lib/udev/rules.d/60-openrgb.rules", F_OK) == 0) ||
bool in_usr_lib = (access("/usr/lib/udev/rules.d/60-openrgb.rules", F_OK) == 0) ||
(access("/run/host/usr/lib/udev/rules.d/60-openrgb.rules", F_OK) == 0);
/*-----------------------------------------------------*\
@@ -1180,7 +1181,9 @@ void DetectionManager::BackgroundDetectHIDDevicesSafe(json& detector_settings)
LOG_VERBOSE("[%s] Trying to run detector for [%s] (for %04x:%04x)", DETECTIONMANAGER, detector.name.c_str(), detector.vid, detector.pid);
hid_device_info* current_hid_device = hid_enumerate(detector.vid, detector.pid);
unsigned short enumerate_vid = (detector.vid == HID_VID_ANY) ? 0 : detector.vid;
unsigned short enumerate_pid = (detector.pid == HID_PID_ANY) ? 0 : detector.pid;
hid_device_info* current_hid_device = hid_enumerate(enumerate_vid, enumerate_pid);
while(current_hid_device)
{
@@ -1469,12 +1472,14 @@ void DetectionManager::RunHIDDetector(hid_device_info* current_hid_device, json&
if(this_device_enabled)
{
/*-----------------------------------------*\
| If this was a specific detector, this |
| device VID/PID has at least one specific |
| detector available, so ignore generic |
| detectors. |
| Exact VID/PID detectors take precedence |
| over generic detectors. Wildcard-ID |
| detectors must not suppress generic |
| detectors on unrelated interfaces. |
\*-----------------------------------------*/
if(!generic_detector)
if(!generic_detector
&& detector->vid != HID_VID_ANY
&& detector->pid != HID_PID_ANY)
{
skip_generic_detectors = true;
}
@@ -1585,12 +1590,14 @@ void DetectionManager::RunHIDWrappedDetector(const hidapi_wrapper* wrapper, hid_
if(this_device_enabled)
{
/*-----------------------------------------*\
| If this was a specific detector, this |
| device VID/PID has at least one specific |
| detector available, so ignore generic |
| detectors. |
| Exact VID/PID detectors take precedence |
| over generic detectors. Wildcard-ID |
| detectors must not suppress generic |
| detectors on unrelated interfaces. |
\*-----------------------------------------*/
if(!generic_detector)
if(!generic_detector
&& detector->vid != HID_VID_ANY
&& detector->pid != HID_PID_ANY)
{
skip_generic_detectors = true;
}