From de7a8df31da572a9a0954ee39f40bf1fa31f66db Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 31 Aug 2026 22:52:55 -0500 Subject: [PATCH] Add the ability to register detectors that are disabled by default --- DetectionManager.cpp | 84 +++++++++++++----------- DetectionManager.h | 150 +++++++++++++++++++++++++++---------------- 2 files changed, 139 insertions(+), 95 deletions(-) diff --git a/DetectionManager.cpp b/DetectionManager.cpp index ac05d87e6..08e1d1ee1 100644 --- a/DetectionManager.cpp +++ b/DetectionManager.cpp @@ -260,10 +260,11 @@ void DetectionManager::RegisterI2CBusDetector(I2CBusDetectorFunction detector) /*---------------------------------------------------------*\ | RGBController Detector Registration Functions | \*---------------------------------------------------------*/ -void DetectionManager::RegisterDeviceDetector(std::string name, DeviceDetectorFunction detector) +void DetectionManager::RegisterDeviceDetector(std::string name, DeviceDetectorFunction detector, bool enabled_by_default) { device_detector_strings.push_back(name); device_detectors.push_back(detector); + device_detector_default_enabled.push_back(enabled_by_default); } void DetectionManager::RegisterDynamicDetector(std::string name, DynamicDetectorFunction detector) @@ -272,17 +273,18 @@ void DetectionManager::RegisterDynamicDetector(std::string name, DynamicDetector dynamic_detectors.push_back(detector); } -void DetectionManager::RegisterHIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage) +void DetectionManager::RegisterHIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage, bool enabled_by_default) { HIDDeviceDetectorBlock block; - block.name = name; - block.vid = vid; - block.pid = pid; - block.function = detector; - block.interface = interface; - block.usage_page = usage_page; - block.usage = usage; + block.name = name; + block.vid = vid; + block.pid = pid; + block.function = detector; + block.interface = interface; + block.usage_page = usage_page; + block.usage = usage; + block.enabled_by_default = enabled_by_default; if(block.vid == HID_VID_ANY && block.pid == HID_PID_ANY) { @@ -294,17 +296,18 @@ void DetectionManager::RegisterHIDDeviceDetector(std::string name, HIDDeviceDete } } -void DetectionManager::RegisterHIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage) +void DetectionManager::RegisterHIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage, bool enabled_by_default) { HIDWrappedDeviceDetectorBlock block; - block.name = name; - block.vid = vid; - block.pid = pid; - block.function = detector; - block.interface = interface; - block.usage_page = usage_page; - block.usage = usage; + block.name = name; + block.vid = vid; + block.pid = pid; + block.function = detector; + block.interface = interface; + block.usage_page = usage_page; + block.usage = usage; + block.enabled_by_default = enabled_by_default; if(block.vid == HID_VID_ANY && block.pid == HID_PID_ANY) { @@ -316,35 +319,38 @@ void DetectionManager::RegisterHIDWrappedDeviceDetector(std::string name, HIDWra } } -void DetectionManager::RegisterI2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector) +void DetectionManager::RegisterI2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector, bool enabled_by_default) { i2c_device_detector_strings.push_back(name); i2c_device_detectors.push_back(detector); + i2c_device_detector_default_enabled.push_back(enabled_by_default); } -void DetectionManager::RegisterI2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type) +void DetectionManager::RegisterI2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type, bool enabled_by_default) { I2CDRAMDeviceDetectorBlock block; - block.name = name; - block.function = detector; - block.jedec_id = jedec_id; - block.dram_type = dram_type; + block.name = name; + block.function = detector; + block.jedec_id = jedec_id; + block.dram_type = dram_type; + block.enabled_by_default = enabled_by_default; i2c_dram_device_detectors.push_back(block); } -void DetectionManager::RegisterI2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr) +void DetectionManager::RegisterI2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr, bool enabled_by_default) { I2CPCIDeviceDetectorBlock block; - block.name = name; - block.function = detector; - block.ven_id = ven_id; - block.dev_id = dev_id; - block.subven_id = subven_id; - block.subdev_id = subdev_id; - block.i2c_addr = i2c_addr; + block.name = name; + block.function = detector; + block.ven_id = ven_id; + block.dev_id = dev_id; + block.subven_id = subven_id; + block.subdev_id = subdev_id; + block.i2c_addr = i2c_addr; + block.enabled_by_default = enabled_by_default; i2c_pci_device_detectors.push_back(block); } @@ -1807,7 +1813,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = i2c_device_detector_default_enabled[i2c_detector_idx]; save_settings = true; } } @@ -1822,7 +1828,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = i2c_dram_device_detectors[i2c_detector_idx].enabled_by_default; save_settings = true; } } @@ -1837,7 +1843,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = i2c_pci_device_detectors[i2c_pci_detector_idx].enabled_by_default; save_settings = true; } } @@ -1852,7 +1858,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = hid_generic_detectors[hid_detector_idx].enabled_by_default; save_settings = true; } } @@ -1867,7 +1873,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = hid_specific_detectors[hid_detector_idx].enabled_by_default; save_settings = true; } } @@ -1882,7 +1888,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = hid_wrapped_generic_detectors[hid_wrapped_detector_idx].enabled_by_default; save_settings = true; } } @@ -1897,7 +1903,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = hid_wrapped_specific_detectors[hid_wrapped_detector_idx].enabled_by_default; save_settings = true; } } @@ -1912,7 +1918,7 @@ void DetectionManager::UpdateDetectorSettings() if(!(detector_settings.contains("detectors") && detector_settings["detectors"].contains(detection_string))) { - detector_settings["detectors"][detection_string] = true; + detector_settings["detectors"][detection_string] = device_detector_default_enabled[detector_idx]; save_settings = true; } } diff --git a/DetectionManager.h b/DetectionManager.h index 5e2fb1fab..ccc5005f0 100644 --- a/DetectionManager.h +++ b/DetectionManager.h @@ -70,6 +70,7 @@ public: int interface; int usage_page; int usage; + bool enabled_by_default; bool compare(hid_device_info* info); bool matching_id(hid_device_info* info); @@ -96,6 +97,7 @@ typedef struct uint16_t subven_id; uint16_t subdev_id; uint8_t i2c_addr; + bool enabled_by_default; } I2CPCIDeviceDetectorBlock; typedef struct @@ -104,6 +106,7 @@ typedef struct I2CDRAMDeviceDetectorFunction function; uint16_t jedec_id; uint8_t dram_type; + bool enabled_by_default; } I2CDRAMDeviceDetectorBlock; typedef struct @@ -171,13 +174,13 @@ public: /*-----------------------------------------------------*\ | RGBController Detector Registration Functions | \*-----------------------------------------------------*/ - void RegisterDeviceDetector(std::string name, DeviceDetectorFunction detector); + void RegisterDeviceDetector(std::string name, DeviceDetectorFunction detector, bool enabled_by_default = true); void RegisterDynamicDetector(std::string name, DynamicDetectorFunction detector); - void RegisterHIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface = HID_INTERFACE_ANY, int usage_page = HID_USAGE_PAGE_ANY, int usage = HID_USAGE_ANY); - void RegisterHIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface = HID_INTERFACE_ANY, int usage_page = HID_USAGE_PAGE_ANY, int usage = HID_USAGE_ANY); - void RegisterI2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector); - void RegisterI2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type); - void RegisterI2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr); + void RegisterHIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface = HID_INTERFACE_ANY, int usage_page = HID_USAGE_PAGE_ANY, int usage = HID_USAGE_ANY, bool enabled_by_default = true); + void RegisterHIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface = HID_INTERFACE_ANY, int usage_page = HID_USAGE_PAGE_ANY, int usage = HID_USAGE_ANY, bool enabled_by_default = true); + void RegisterI2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector, bool enabled_by_default = true); + void RegisterI2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type, bool enabled_by_default = true); + void RegisterI2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr, bool enabled_by_default = true); /*-----------------------------------------------------*\ | Pre-Detection Hook Function Registration Function | @@ -250,9 +253,11 @@ private: \*-----------------------------------------------------*/ std::vector device_detectors; std::vector device_detector_strings; + std::vector device_detector_default_enabled; std::vector i2c_bus_detectors; std::vector i2c_device_detectors; std::vector i2c_device_detector_strings; + std::vector i2c_device_detector_default_enabled; std::vector i2c_dram_device_detectors; std::vector i2c_pci_device_detectors; std::vector hid_generic_detectors; @@ -402,36 +407,36 @@ private: class DeviceDetector { public: - DeviceDetector(std::string name, DeviceDetectorFunction detector) + DeviceDetector(std::string name, DeviceDetectorFunction detector, bool enabled_by_default = true) { - DetectionManager::get()->RegisterDeviceDetector(name, detector); + DetectionManager::get()->RegisterDeviceDetector(name, detector, enabled_by_default); } }; class I2CDeviceDetector { public: - I2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector) + I2CDeviceDetector(std::string name, I2CDeviceDetectorFunction detector, bool enabled_by_default = true) { - DetectionManager::get()->RegisterI2CDeviceDetector(name, detector); + DetectionManager::get()->RegisterI2CDeviceDetector(name, detector, enabled_by_default); } }; class I2CDRAMDeviceDetector { public: - I2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type) + I2CDRAMDeviceDetector(std::string name, I2CDRAMDeviceDetectorFunction detector, uint16_t jedec_id, uint8_t dram_type, bool enabled_by_default = true) { - DetectionManager::get()->RegisterI2CDRAMDeviceDetector(name, detector, jedec_id, dram_type); + DetectionManager::get()->RegisterI2CDRAMDeviceDetector(name, detector, jedec_id, dram_type, enabled_by_default); } }; class I2CPCIDeviceDetector { public: - I2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr) + I2CPCIDeviceDetector(std::string name, I2CPCIDeviceDetectorFunction detector, uint16_t ven_id, uint16_t dev_id, uint16_t subven_id, uint16_t subdev_id, uint8_t i2c_addr, bool enabled_by_default = true) { - DetectionManager::get()->RegisterI2CPCIDeviceDetector(name, detector, ven_id, dev_id, subven_id, subdev_id, i2c_addr); + DetectionManager::get()->RegisterI2CPCIDeviceDetector(name, detector, ven_id, dev_id, subven_id, subdev_id, i2c_addr, enabled_by_default); } }; @@ -447,18 +452,18 @@ public: class HIDDeviceDetector { public: - HIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage) + HIDDeviceDetector(std::string name, HIDDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage, bool enabled_by_default = true) { - DetectionManager::get()->RegisterHIDDeviceDetector(name, detector, vid, pid, interface, usage_page, usage); + DetectionManager::get()->RegisterHIDDeviceDetector(name, detector, vid, pid, interface, usage_page, usage, enabled_by_default); } }; class HIDWrappedDeviceDetector { public: - HIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage) + HIDWrappedDeviceDetector(std::string name, HIDWrappedDeviceDetectorFunction detector, int vid, int pid, int interface, int usage_page, int usage, bool enabled_by_default = true) { - DetectionManager::get()->RegisterHIDWrappedDeviceDetector(name, detector, vid, pid, interface, usage_page, usage); + DetectionManager::get()->RegisterHIDWrappedDeviceDetector(name, detector, vid, pid, interface, usage_page, usage, enabled_by_default); } }; @@ -497,43 +502,76 @@ public: /*---------------------------------------------------------*\ | Detector Registration Macros | \*---------------------------------------------------------*/ -#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj_##func(name, func) -#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func) -#define REGISTER_I2C_DRAM_DETECTOR(name, func, jedec_id, dram_type) static I2CDRAMDeviceDetector device_detector_obj_##func##jedec_id(name, func, jedec_id, dram_type) -#define REGISTER_I2C_PCI_DETECTOR(name, func, ven, dev, subven, subdev, addr) static I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr) -#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj_##func(func) -#define REGISTER_HID_DETECTOR(name, func, vid, pid) static HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_I(name, func, vid, pid, interface) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_IP(name, func, vid, pid, interface, page) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) -#define REGISTER_HID_DETECTOR_P(name, func, vid, pid, page) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_PU(name, func, vid, pid, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) -#define REGISTER_HID_DETECTOR_I_ONLY(name, func, interface) static HIDDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_IP_ONLY(name, func, interface, page) static HIDDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_IPU_ONLY(name, func, interface, page, usage) static HIDDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage) -#define REGISTER_HID_DETECTOR_P_ONLY(name, func, page) static HIDDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY) -#define REGISTER_HID_DETECTOR_PU_ONLY(name, func, page, usage) static HIDDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage) -#define REGISTER_HID_WRAPPED_DETECTOR(name, func, vid, pid) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_WRAPPED_DETECTOR_I(name, func, vid, pid, interface) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_WRAPPED_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) -#define REGISTER_HID_WRAPPED_DETECTOR_PU(name, func, vid, pid, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) -#define REGISTER_HID_WRAPPED_DETECTOR_I_ONLY(name, func, interface) static HIDWrappedDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_HID_WRAPPED_DETECTOR_IP_ONLY(name, func, interface, page) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY) -#define REGISTER_HID_WRAPPED_DETECTOR_IPU_ONLY(name, func, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage) -#define REGISTER_HID_WRAPPED_DETECTOR_P_ONLY(name, func, page) static HIDWrappedDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY) -#define REGISTER_HID_WRAPPED_DETECTOR_PU_ONLY(name, func, page, usage) static HIDWrappedDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage) -#define REGISTER_DYNAMIC_DETECTOR(name, func) static DynamicDetector device_detector_obj_##func(name, func) -#define REGISTER_PRE_DETECTION_HOOK(func) static PreDetectionHook device_detector_obj_##func(func) +#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj_##func(name, func) +#define REGISTER_DETECTOR_DISABLED(name, func) static DeviceDetector device_detector_obj_##func(name, func, false) +#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func) +#define REGISTER_I2C_DETECTOR_DISABLED(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func, false) +#define REGISTER_I2C_DRAM_DETECTOR(name, func, jedec_id, dram_type) static I2CDRAMDeviceDetector device_detector_obj_##func##jedec_id(name, func, jedec_id, dram_type) +#define REGISTER_I2C_DRAM_DETECTOR_DISABLED(name, func, jedec_id, dram_type) static I2CDRAMDeviceDetector device_detector_obj_##func##jedec_id(name, func, jedec_id, dram_type, false) +#define REGISTER_I2C_PCI_DETECTOR(name, func, ven, dev, subven, subdev, addr) static I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr) +#define REGISTER_I2C_PCI_DETECTOR_DISABLED(name, func, ven, dev, subven, subdev, addr) static I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr, false) +#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj_##func(func) +#define REGISTER_HID_DETECTOR(name, func, vid, pid) static HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_DISABLED(name, func, vid, pid) static HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_I(name, func, vid, pid, interface) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_I_DISABLED(name, func, vid, pid, interface) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_IP(name, func, vid, pid, interface, page) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_IP_DISABLED(name, func, vid, pid, interface, page) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) +#define REGISTER_HID_DETECTOR_IPU_DISABLED(name, func, vid, pid, interface, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage, false) +#define REGISTER_HID_DETECTOR_P(name, func, vid, pid, page) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_P_DISABLED(name, func, vid, pid, page) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_PU(name, func, vid, pid, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) +#define REGISTER_HID_DETECTOR_PU_DISABLED(name, func, vid, pid, page, usage) static HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage, false) +#define REGISTER_HID_DETECTOR_I_ONLY(name, func, interface) static HIDDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_I_ONLY_DISABLED(name, func, interface) static HIDDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_IP_ONLY(name, func, interface, page) static HIDDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_IP_ONLY_DISABLED(name, func, interface, page) static HIDDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_IPU_ONLY(name, func, interface, page, usage) static HIDDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage) +#define REGISTER_HID_DETECTOR_IPU_ONLY_DISABLED(name, func, interface, page, usage) static HIDDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage, false) +#define REGISTER_HID_DETECTOR_P_ONLY(name, func, page) static HIDDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY) +#define REGISTER_HID_DETECTOR_P_ONLY_DISABLED(name, func, page) static HIDDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY, false) +#define REGISTER_HID_DETECTOR_PU_ONLY(name, func, page, usage) static HIDDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage) +#define REGISTER_HID_DETECTOR_PU_ONLY_DISABLED(name, func, page, usage) static HIDDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage, false) +#define REGISTER_HID_WRAPPED_DETECTOR(name, func, vid, pid) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_WRAPPED_DETECTOR_DISABLED(name, func, vid, pid) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_WRAPPED_DETECTOR_I(name, func, vid, pid, interface) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_WRAPPED_DETECTOR_I_DISABLED(name, func, vid, pid, interface) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_WRAPPED_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) +#define REGISTER_HID_WRAPPED_DETECTOR_IPU_DISABLED(name, func, vid, pid, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage, false) +#define REGISTER_HID_WRAPPED_DETECTOR_PU(name, func, vid, pid, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) +#define REGISTER_HID_WRAPPED_DETECTOR_PU_DISABLED(name, func, vid, pid, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage, false) +#define REGISTER_HID_WRAPPED_DETECTOR_I_ONLY(name, func, interface) static HIDWrappedDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_HID_WRAPPED_DETECTOR_I_ONLY_DISABLED(name, func, interface) static HIDWrappedDeviceDetector device_detector_obj_##interface(name, func, HID_VID_ANY, HID_PID_ANY, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_HID_WRAPPED_DETECTOR_IP_ONLY(name, func, interface, page) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY) +#define REGISTER_HID_WRAPPED_DETECTOR_IP_ONLY_DISABLED(name, func, interface, page) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, HID_USAGE_ANY, false) +#define REGISTER_HID_WRAPPED_DETECTOR_IPU_ONLY(name, func, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage) +#define REGISTER_HID_WRAPPED_DETECTOR_IPU_ONLY_DISABLED(name, func, interface, page, usage) static HIDWrappedDeviceDetector device_detector_obj_##interface##_##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, interface, page, usage, false) +#define REGISTER_HID_WRAPPED_DETECTOR_P_ONLY(name, func, page) static HIDWrappedDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY) +#define REGISTER_HID_WRAPPED_DETECTOR_P_ONLY_DISABLED(name, func, page) static HIDWrappedDeviceDetector device_detector_obj__##page(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, HID_USAGE_ANY, false) +#define REGISTER_HID_WRAPPED_DETECTOR_PU_ONLY(name, func, page, usage) static HIDWrappedDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage) +#define REGISTER_HID_WRAPPED_DETECTOR_PU_ONLY_DISABLED(name, func, page, usage) static HIDWrappedDeviceDetector device_detector_obj__##page##_##usage(name, func, HID_VID_ANY, HID_PID_ANY, HID_INTERFACE_ANY, page, usage, false) +#define REGISTER_DYNAMIC_DETECTOR(name, func) static DynamicDetector device_detector_obj_##func(name, func) +#define REGISTER_PRE_DETECTION_HOOK(func) static PreDetectionHook device_detector_obj_##func(func) -#define REGISTER_DYNAMIC_I2C_DETECTOR(name, func) I2CDeviceDetector device_detector_obj_##func(name, func) -#define REGISTER_DYNAMIC_I2C_DRAM_DETECTOR(name, func, jedec_id, dram_type) I2CDRAMDeviceDetector device_detector_obj_##func(name, func, jedec_id, dram_type) -#define REGISTER_DYNAMIC_I2C_PCI_DETECTOR(name, func, ven, dev, subven, subdev, addr) I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr) -#define REGISTER_DYNAMIC_I2C_BUS_DETECTOR(func) I2CBusDetector device_detector_obj_##func(func) -#define REGISTER_DYNAMIC_HID_DETECTOR(name, func, vid, pid) HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_DYNAMIC_HID_DETECTOR_I(name, func, vid, pid, interface) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) -#define REGISTER_DYNAMIC_HID_DETECTOR_IP(name, func, vid, pid, interface, page) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY) -#define REGISTER_DYNAMIC_HID_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) -#define REGISTER_DYNAMIC_HID_DETECTOR_P(name, func, vid, pid, page) HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY) -#define REGISTER_DYNAMIC_HID_DETECTOR_PU(name, func, vid, pid, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) +#define REGISTER_DYNAMIC_I2C_DETECTOR(name, func) I2CDeviceDetector device_detector_obj_##func(name, func) +#define REGISTER_DYNAMIC_I2C_DETECTOR_DISABLED(name, func) I2CDeviceDetector device_detector_obj_##func(name, func, false) +#define REGISTER_DYNAMIC_I2C_DRAM_DETECTOR(name, func, jedec_id, dram_type) I2CDRAMDeviceDetector device_detector_obj_##func(name, func, jedec_id, dram_type) +#define REGISTER_DYNAMIC_I2C_DRAM_DETECTOR_DISABLED(name, func, jedec_id, dram_type) I2CDRAMDeviceDetector device_detector_obj_##func(name, func, jedec_id, dram_type, false) +#define REGISTER_DYNAMIC_I2C_PCI_DETECTOR(name, func, ven, dev, subven, subdev, addr) I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr) +#define REGISTER_DYNAMIC_I2C_PCI_DETECTOR_DISABLED(name, func, ven, dev, subven, subdev, addr) I2CPCIDeviceDetector device_detector_obj_##ven##dev##subven##subdev##addr##func(name, func, ven, dev, subven, subdev, addr, false) +#define REGISTER_DYNAMIC_I2C_BUS_DETECTOR(func) I2CBusDetector device_detector_obj_##func(func) +#define REGISTER_DYNAMIC_HID_DETECTOR(name, func, vid, pid) HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_DYNAMIC_HID_DETECTOR_DISABLED(name, func, vid, pid) HIDDeviceDetector device_detector_obj_##vid##pid(name, func, vid, pid, HID_INTERFACE_ANY, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_DYNAMIC_HID_DETECTOR_I(name, func, vid, pid, interface) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY) +#define REGISTER_DYNAMIC_HID_DETECTOR_I_DISABLED(name, func, vid, pid, interface) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface(name, func, vid, pid, interface, HID_USAGE_PAGE_ANY, HID_USAGE_ANY, false) +#define REGISTER_DYNAMIC_HID_DETECTOR_IP(name, func, vid, pid, interface, page) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY) +#define REGISTER_DYNAMIC_HID_DETECTOR_IP_DISABLED(name, func, vid, pid, interface, page) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page(name, func, vid, pid, interface, page, HID_USAGE_ANY, false) +#define REGISTER_DYNAMIC_HID_DETECTOR_IPU(name, func, vid, pid, interface, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage) +#define REGISTER_DYNAMIC_HID_DETECTOR_IPU_DISABLED(name, func, vid, pid, interface, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##_##interface##_##page##_##usage(name, func, vid, pid, interface, page, usage, false) +#define REGISTER_DYNAMIC_HID_DETECTOR_P(name, func, vid, pid, page) HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY) +#define REGISTER_DYNAMIC_HID_DETECTOR_P_DISABLED(name, func, vid, pid, page) HIDDeviceDetector device_detector_obj_##vid##pid##__##page(name, func, vid, pid, HID_INTERFACE_ANY, page, HID_USAGE_ANY, false) +#define REGISTER_DYNAMIC_HID_DETECTOR_PU(name, func, vid, pid, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage) +#define REGISTER_DYNAMIC_HID_DETECTOR_PU_DISABLED(name, func, vid, pid, page, usage) HIDDeviceDetector device_detector_obj_##vid##pid##__##page##_##usage(name, func, vid, pid, HID_INTERFACE_ANY, page, usage, false) -#define REGISTER_CUSTOM_UDEV_RULE(id, name, rule) static CustomUdevRule device_detector_obj_##id(name, rule) +#define REGISTER_CUSTOM_UDEV_RULE(id, name, rule) static CustomUdevRule device_detector_obj_##id(name, rule)