Skip to content

Commit 68b0287

Browse files
Make detectors for QMK OpenRGB controller configurable
1 parent d18f66f commit 68b0287

File tree

2 files changed

+49
-35
lines changed

2 files changed

+49
-35
lines changed

Controllers/QMKOpenRGBController/QMKOpenRGBControllerDetect.cpp

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
| Jath03 28th May 2021 |
88
\*-------------------------------------------------------------------*/
99

10+
#include <iostream>
11+
#include <string>
12+
1013
#include "Detector.h"
1114
#include "QMKOpenRGBController.h"
1215
#include "RGBController.h"
@@ -24,26 +27,6 @@
2427
#define QMK_USAGE_PAGE 0xFF60
2528
#define QMK_USAGE 0x61
2629

27-
/*-----------------------------------------------------*\
28-
| Massdrop |
29-
\*-----------------------------------------------------*/
30-
#define MASSDROP_VID 0x04D8
31-
#define MASSDROP_ALT_PID 0xEED3
32-
#define MASSDROP_CTRL_PID 0xEED2
33-
34-
/*-----------------------------------------------------*\
35-
| SonixQMK |
36-
\*-----------------------------------------------------*/
37-
#define SONIXQMK_VID 0x0C45
38-
#define SONIXQMK_5004_PID 0x5004
39-
#define SONIXQMK_5104_PID 0x5104
40-
41-
/*-----------------------------------------------------*\
42-
| KBDFans |
43-
\*-----------------------------------------------------*/
44-
#define KBDFANS_VID 0x4B42
45-
#define KBDFANS_K67_MKII_RGB_PID 0x1225
46-
4730
void DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&)
4831
{
4932
hid_device *dev = hid_open_path(info->path);
@@ -67,11 +50,33 @@ void DetectQMKOpenRGBControllers(hid_device_info *info, const std::string&)
6750

6851
void RegisterQMKDetectors()
6952
{
70-
REGISTER_HID_DETECTOR_IPU("Massdrop Alt", DetectQMKOpenRGBControllers, MASSDROP_VID, MASSDROP_ALT_PID, 1, QMK_USAGE_PAGE, QMK_USAGE);
71-
REGISTER_HID_DETECTOR_IPU("Massdrop Ctrl", DetectQMKOpenRGBControllers, MASSDROP_VID, MASSDROP_CTRL_PID, 1, QMK_USAGE_PAGE, QMK_USAGE);
72-
REGISTER_HID_DETECTOR_IPU("SonixQMK 0C45:5004", DetectQMKOpenRGBControllers, SONIXQMK_VID, SONIXQMK_5004_PID, 1, QMK_USAGE_PAGE, QMK_USAGE);
73-
REGISTER_HID_DETECTOR_IPU("SonixQMK 0C45:5104", DetectQMKOpenRGBControllers, SONIXQMK_VID, SONIXQMK_5104_PID, 1, QMK_USAGE_PAGE, QMK_USAGE);
74-
REGISTER_HID_DETECTOR_IPU("KBDFans KBD67 MKII RGB", DetectQMKOpenRGBControllers, KBDFANS_VID, KBDFANS_K67_MKII_RGB_PID, 1, QMK_USAGE_PAGE, QMK_USAGE);
53+
/*-------------------------------------------------*\
54+
| Get QMKOpenRGB settings |
55+
\*-------------------------------------------------*/
56+
json qmk_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("QMKOpenRGBDevices");
57+
58+
if(qmk_settings.contains("devices"))
59+
{
60+
for(unsigned int device_idx = 0; device_idx < qmk_settings["devices"].size(); device_idx++)
61+
{
62+
if( qmk_settings["devices"][device_idx].contains("usb_pid")
63+
&& qmk_settings["devices"][device_idx].contains("usb_vid")
64+
&& qmk_settings["devices"][device_idx].contains("name"))
65+
{
66+
std::string usb_pid_str = qmk_settings["devices"][device_idx]["usb_pid"];
67+
std::string usb_vid_str = qmk_settings["devices"][device_idx]["usb_vid"];
68+
std::string name = qmk_settings["devices"][device_idx]["name"];
69+
70+
/*-------------------------------------*\
71+
| Parse hex string to integer |
72+
\*-------------------------------------*/
73+
unsigned short usb_pid = std::stoi(usb_pid_str, 0, 16);
74+
unsigned short usb_vid = std::stoi(usb_vid_str, 0, 16);
75+
76+
REGISTER_DYNAMIC_HID_DETECTOR_IPU(name, DetectQMKOpenRGBControllers, usb_vid, usb_pid, 1, QMK_USAGE_PAGE, QMK_USAGE);
77+
}
78+
}
79+
}
7580
}
7681

7782
REGISTER_DYNAMIC_DETECTOR("QMK OpenRGB Devices", RegisterQMKDetectors);

Detector.h

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,22 @@
22

33
#include "DeviceDetector.h"
44

5-
#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj_##func(name, func)
6-
#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func)
7-
#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj_##func(func)
8-
#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)
9-
#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)
10-
#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)
11-
#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)
12-
#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)
13-
#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)
14-
#define REGISTER_DYNAMIC_DETECTOR(name, func) static DynamicDetector device_detector_obj_##func(name, func)
5+
#define REGISTER_DETECTOR(name, func) static DeviceDetector device_detector_obj_##func(name, func)
6+
#define REGISTER_I2C_DETECTOR(name, func) static I2CDeviceDetector device_detector_obj_##func(name, func)
7+
#define REGISTER_I2C_BUS_DETECTOR(func) static I2CBusDetector device_detector_obj_##func(func)
8+
#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)
9+
#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)
10+
#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)
11+
#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)
12+
#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)
13+
#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)
14+
#define REGISTER_DYNAMIC_DETECTOR(name, func) static DynamicDetector device_detector_obj_##func(name, func)
15+
16+
#define REGISTER_DYNAMIC_I2C_DETECTOR(name, func) I2CDeviceDetector device_detector_obj_##func(name, func)
17+
#define REGISTER_DYNAMIC_I2C_BUS_DETECTOR(func) I2CBusDetector device_detector_obj_##func(func)
18+
#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)
19+
#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)
20+
#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)
21+
#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)
22+
#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)
23+
#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)

0 commit comments

Comments
 (0)