Drop support for old hidapi versions that don't support usage information

This commit is contained in:
Adam Honse
2026-01-31 22:14:20 -06:00
parent eba27bf474
commit 86c998651c
7 changed files with 63 additions and 228 deletions

View File

@@ -218,19 +218,12 @@ REGISTER_HID_DETECTOR_IP("Corsair Sabre RGB", DetectCorsairPeriphe
/*---------------------------------------------------------*\
| Mousemats |
\*---------------------------------------------------------*/
#ifdef USE_HID_USAGE
REGISTER_HID_DETECTOR_P("Corsair MM800 RGB Polaris", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0xFFC2);
#else
REGISTER_HID_DETECTOR_I("Corsair MM800 RGB Polaris", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_MM800_RGB_POLARIS_PID, 0);
#endif
/*---------------------------------------------------------*\
| Headset Stands |
\*---------------------------------------------------------*/
#ifdef USE_HID_USAGE
REGISTER_HID_DETECTOR_P("Corsair ST100 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_ST100_PID, 0xFFC2);
#else
REGISTER_HID_DETECTOR_I("Corsair ST100 RGB", DetectCorsairPeripheralControllers, CORSAIR_VID, CORSAIR_ST100_PID, 0);
#endif
/*---------------------------------------------------------*\
| Corsair K65 Mini Keyboard |

View File

@@ -43,15 +43,7 @@ DetectedControllers DetectGigabyteRGBFusion2USBControllers(hid_device_info* info
return(detected_controllers);
}
#ifdef USE_HID_USAGE
REGISTER_HID_DETECTOR_PU(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x8297, IT8297_UPG, IT8297_U);
REGISTER_HID_DETECTOR_PU(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x8950, IT8297_UPG, IT8297_U);
REGISTER_HID_DETECTOR_PU(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x5702, IT8297_UPG, IT8297_U);
REGISTER_HID_DETECTOR_PU(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x5711, IT8297_UPG, IT8297_U);
#else
REGISTER_HID_DETECTOR_I(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x8297, IT8297_IFC);
REGISTER_HID_DETECTOR_I(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x8950, IT8297_IFC);
REGISTER_HID_DETECTOR_I(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x5702, IT8297_IFC);
REGISTER_HID_DETECTOR_I(DETECTOR_NAME, DetectGigabyteRGBFusion2USBControllers, IT8297_VID, 0x5711, IT8297_IFC);
#endif

View File

@@ -173,7 +173,7 @@ DetectedControllers DetectLogitechKeyboardG810(hid_device_info* info, const std:
| are on usage page 0xFF43 |
\*-----------------------------------------------------*/
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
hid_device* dev_usage_0x0602 = nullptr;
hid_device* dev_usage_0x0604 = nullptr;
hid_device_info* info_temp = info;
@@ -213,17 +213,6 @@ DetectedControllers DetectLogitechKeyboardG810(hid_device_info* info, const std:
hid_close(dev_usage_0x0602);
hid_close(dev_usage_0x0604);
}
#else
hid_device* dev = hid_open_path(info->path);
if(dev)
{
LogitechG810Controller* controller = new LogitechG810Controller(dev, dev, name);
RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller);
detected_controllers.push_back(rgb_controller);
}
#endif
return(detected_controllers);
}
@@ -237,7 +226,7 @@ DetectedControllers DetectLogitechKeyboardG910(hid_device_info* info, const std:
| are on usage page 0xFF43 |
\*-----------------------------------------------------*/
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
hid_device* dev_usage_0x0602 = nullptr;
hid_device* dev_usage_0x0604 = nullptr;
hid_device_info* info_temp = info;
@@ -277,17 +266,6 @@ DetectedControllers DetectLogitechKeyboardG910(hid_device_info* info, const std:
hid_close(dev_usage_0x0602);
hid_close(dev_usage_0x0604);
}
#else
hid_device* dev = hid_open_path(info->path);
if(dev)
{
LogitechG910Controller* controller = new LogitechG910Controller(dev, dev, name);
RGBController_LogitechG910* rgb_controller = new RGBController_LogitechG910(controller);
detected_controllers.push_back(rgb_controller);
}
#endif
return(detected_controllers);
}
@@ -301,7 +279,7 @@ DetectedControllers DetectLogitechKeyboardG815(hid_device_info* info, const std:
| are on usage page 0xFF43 |
\*-----------------------------------------------------*/
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
hid_device* dev_usage_0x0602 = nullptr;
hid_device* dev_usage_0x0604 = nullptr;
hid_device_info* info_temp = info;
@@ -349,17 +327,6 @@ DetectedControllers DetectLogitechKeyboardG815(hid_device_info* info, const std:
hid_close(dev_usage_0x0604);
}
}
#else
hid_device* dev = hid_open_path(info->path);
if(dev)
{
LogitechG815Controller* controller = new LogitechG815Controller(dev, dev, name);
RGBController_LogitechG815* rgb_controller = new RGBController_LogitechG815(controller);
detected_controllers.push_back(rgb_controller);
}
#endif
return(detected_controllers);
}
@@ -411,7 +378,7 @@ DetectedControllers DetectLogitechKeyboardGPro(hid_device_info* info, const std:
| are on usage page 0xFF43 |
\*-----------------------------------------------------*/
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
hid_device* dev_usage_0x0602 = nullptr;
hid_device* dev_usage_0x0604 = nullptr;
hid_device_info* info_temp = info;
@@ -451,17 +418,6 @@ DetectedControllers DetectLogitechKeyboardGPro(hid_device_info* info, const std:
hid_close(dev_usage_0x0602);
hid_close(dev_usage_0x0604);
}
#else
hid_device* dev = hid_open_path(info->path);
if(dev)
{
LogitechGProKeyboardController* controller = new LogitechGProKeyboardController(dev, dev, name);
RGBController_LogitechGProKeyboard* rgb_controller = new RGBController_LogitechGProKeyboard(controller);
detected_controllers.push_back(rgb_controller);
}
#endif
return(detected_controllers);
}
@@ -472,62 +428,46 @@ DetectedControllers DetectLogitechKeyboardGPro(hid_device_info* info, const std:
DetectedControllers addLogitechLightsyncMouse1zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id)
{
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
hid_device* dev_usage_1 = nullptr;
hid_device* dev_usage_2 = nullptr;
hid_device_info* info_temp = info;
while(info_temp)
{
hid_device* dev_usage_1 = nullptr;
hid_device* dev_usage_2 = nullptr;
hid_device_info* info_temp = info;
while(info_temp)
if(info_temp->vendor_id == info->vendor_id // constant LOGITECH_VID
&& info_temp->product_id == info->product_id // NON-constant
&& info_temp->interface_number == info->interface_number // constant 1
&& info_temp->usage_page == info->usage_page) // constant 0x00FF
{
if(info_temp->vendor_id == info->vendor_id // constant LOGITECH_VID
&& info_temp->product_id == info->product_id // NON-constant
&& info_temp->interface_number == info->interface_number // constant 1
&& info_temp->usage_page == info->usage_page) // constant 0x00FF
if (info_temp->usage == 1)
{
if (info_temp->usage == 1)
{
dev_usage_1 = hid_open_path(info_temp->path);
}
else if (info_temp->usage == 2)
{
dev_usage_2 = hid_open_path(info_temp->path);
}
dev_usage_1 = hid_open_path(info_temp->path);
}
if (dev_usage_1 && dev_usage_2)
else if (info_temp->usage == 2)
{
break;
dev_usage_2 = hid_open_path(info_temp->path);
}
info_temp = info_temp->next;
}
if(dev_usage_1 && dev_usage_2)
if (dev_usage_1 && dev_usage_2)
{
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync1zone* rgb_controller = new RGBController_LogitechGLightsync1zone (controller);
detected_controllers.push_back(rgb_controller);
}
else
{
LOG_INFO("Unable to open all device report endpoints, unable to add device");
hid_close(dev_usage_1);
hid_close(dev_usage_2);
break;
}
info_temp = info_temp->next;
}
#else
if(dev_usage_1 && dev_usage_2)
{
hid_device* dev = hid_open_path(info->path);
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync1zone* rgb_controller = new RGBController_LogitechGLightsync1zone (controller);
if(dev)
{
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev, dev, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync1zone* rgb_controller = new RGBController_LogitechGLightsync1zone(controller);
detected_controllers.push_back(rgb_controller);
}
detected_controllers.push_back(rgb_controller);
}
else
{
LOG_INFO("Unable to open all device report endpoints, unable to add device");
hid_close(dev_usage_1);
hid_close(dev_usage_2);
}
#endif
return(detected_controllers);
}
@@ -535,61 +475,46 @@ DetectedControllers addLogitechLightsyncMouse1zone(hid_device_info* info, const
DetectedControllers addLogitechLightsyncMouse2zone(hid_device_info* info, const std::string& name, unsigned char hid_dev_index, unsigned char hid_feature_index, unsigned char hid_fctn_ase_id)
{
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
{
hid_device* dev_usage_1 = nullptr;
hid_device* dev_usage_2 = nullptr;
hid_device_info* info_temp = info;
while(info_temp)
hid_device* dev_usage_1 = nullptr;
hid_device* dev_usage_2 = nullptr;
hid_device_info* info_temp = info;
while(info_temp)
{
if(info_temp->vendor_id == info->vendor_id // constant LOGITECH_VID
&& info_temp->product_id == info->product_id // NON-constant
&& info_temp->interface_number == info->interface_number // constant 1
&& info_temp->usage_page == info->usage_page) // constant 0x00FF
{
if(info_temp->vendor_id == info->vendor_id // constant LOGITECH_VID
&& info_temp->product_id == info->product_id // NON-constant
&& info_temp->interface_number == info->interface_number // constant 1
&& info_temp->usage_page == info->usage_page) // constant 0x00FF
if(info_temp->usage == 1)
{
if(info_temp->usage == 1)
{
dev_usage_1 = hid_open_path(info_temp->path);
}
else if(info_temp->usage == 2)
{
dev_usage_2 = hid_open_path(info_temp->path);
}
dev_usage_1 = hid_open_path(info_temp->path);
}
if(dev_usage_1 && dev_usage_2)
else if(info_temp->usage == 2)
{
break;
dev_usage_2 = hid_open_path(info_temp->path);
}
info_temp = info_temp->next;
}
if(dev_usage_1 && dev_usage_2)
{
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync* rgb_controller = new RGBController_LogitechGLightsync (controller);
detected_controllers.push_back(rgb_controller);
}
else
{
LOG_INFO("Unable to open all device report endpoints, unable to add device");
hid_close(dev_usage_1);
hid_close(dev_usage_2);
break;
}
info_temp = info_temp->next;
}
#else
if(dev_usage_1 && dev_usage_2)
{
hid_device* dev = hid_open_path(info->path);
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev_usage_1, dev_usage_2, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync* rgb_controller = new RGBController_LogitechGLightsync (controller);
if(dev)
{
LogitechGLightsyncController* controller = new LogitechGLightsyncController(dev, dev, info->path, hid_dev_index, hid_feature_index, hid_fctn_ase_id, name);
RGBController_LogitechGLightsync* rgb_controller = new RGBController_LogitechGLightsync(controller);
detected_controllers.push_back(rgb_controller);
}
detected_controllers.push_back(rgb_controller);
}
else
{
LOG_INFO("Unable to open all device report endpoints, unable to add device");
hid_close(dev_usage_1);
hid_close(dev_usage_2);
}
#endif
return(detected_controllers);
}

View File

@@ -257,15 +257,12 @@ DetectedControllers DetectGenesisXenon200(hid_device_info* info, const std::stri
DetectedControllers DetectZetFuryPro(hid_device_info* info, const std::string& name)
{
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
expected_reports reports{expected_report(0x04, 59)};
if(DetectUsages(info, name, 5, reports))
{
hid_device* dev = reports.at(0).device;
#else
{
hid_device* dev = hid_open_path(info->path);
#endif
if(dev)
{
SinowealthController1007* controller = new SinowealthController1007(dev, info->path, name);
@@ -280,7 +277,7 @@ DetectedControllers DetectZetFuryPro(hid_device_info* info, const std::string& n
DetectedControllers DetectSinowealthMouse(hid_device_info* info, const std::string& name)
{
DetectedControllers detected_controllers;
#ifdef USE_HID_USAGE
unsigned char command[6] = {0x05, 0x11, 0x00, 0x00, 0x00, 0x00};
expected_reports reports{expected_report(0x04, 520, command, sizeof(command))};
@@ -288,11 +285,6 @@ DetectedControllers DetectSinowealthMouse(hid_device_info* info, const std::stri
{
hid_device *dev = reports.at(0).device;
hid_device *dev_cmd = reports.at(0).cmd_device;
#else
{
hid_device* dev = hid_open_path(info->path);
hid_device* dev_cmd = dev;
#endif
if(dev && dev_cmd)
{
@@ -344,7 +336,6 @@ DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string&
// static void DetectSinowealthKeyboard16(hid_device_info* info, const std::string& name)
// {
// #ifdef USE_HID_USAGE
// unsigned char command[6] = {0x05, 0x83, 0x00, 0x00, 0x00, 0x00};
// expected_reports reports{expected_report(0x06, 1032, command, sizeof(command))};
// if(!DetectUsages(info, name, 3, reports))
@@ -353,10 +344,6 @@ DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string&
// }
// hid_device *dev = reports.at(0).device;
// hid_device *dev_cmd = reports.at(0).cmd_device;
// #else
// hid_device* dev = hid_open_path(info->path);
// hid_device* dev_cmd = dev;
// #endif
// if(dev && dev_cmd)
// {
// SinowealthKeyboard16Controller* controller = new SinowealthKeyboard16Controller(dev_cmd, dev, info->path, name);
@@ -368,7 +355,6 @@ DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string&
// static void DetectSinowealthKeyboard(hid_device_info* info, const std::string& name)
// {
// #ifdef USE_HID_USAGE
// unsigned char command[6] = {0x05, 0x83, 0xB6, 0x00, 0x00, 0x00};
// expected_reports reports{expected_report(0x06, 1032, command, sizeof(command))};
// if(!DetectUsages(info, name, 3, reports))
@@ -386,18 +372,6 @@ DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string&
//
// DetectionManager::get()->RegisterRGBController(rgb_controller);
// }
// #else
// // It is unknown why this code used the MOUSE controller here; could it be the reason why it was disabled?
// hid_device* dev = hid_open_path(info->path);
//
// if(dev)
// {
// SinowealthController* controller = new SinowealthController(dev, dev, info->path, name);
// RGBController_Sinowealth* rgb_controller = new RGBController_Sinowealth(controller);
//
// DetectionManager::get()->RegisterRGBController(rgb_controller);
// }
// #endif
// }
DetectedControllers DetectSinowealthGenesisKeyboard(hid_device_info* info, const std::string& name)
@@ -442,7 +416,6 @@ DetectedControllers DetectSinowealthKeyboard10c(hid_device_info* info, const std
return(detected_controllers);
}
#ifdef USE_HID_USAGE
REGISTER_HID_DETECTOR_P("Glorious Model O / O-", DetectSinowealthMouse, SINOWEALTH_VID, Glorious_Model_O_PID, 0xFF00 );
REGISTER_HID_DETECTOR_P("Glorious Model D / D-", DetectSinowealthMouse, SINOWEALTH_VID, Glorious_Model_D_PID, 0xFF00 );
REGISTER_HID_DETECTOR_P("Everest GT-100 RGB", DetectSinowealthMouse, SINOWEALTH_VID, Everest_GT100_PID, 0xFF00 );
@@ -458,18 +431,3 @@ REGISTER_HID_DETECTOR_IPU("Sinowealth Keyboard", DetectSinowealthKeyb
// Sinowealth keyboards are disabled due to VID/PID pairs being reused from Redragon keyboards, which ended up in bricking the latter
//REGISTER_HID_DETECTOR_P("FL ESPORTS F11", DetectSinowealthKeyboard, SINOWEALTH_VID, Fl_Esports_F11_PID, 0xFF00 );
//REGISTER_HID_DETECTOR_P("Sinowealth Keyboard", DetectSinowealthKeyboard16, SINOWEALTH_VID, RGB_KEYBOARD_0016PID, 0xFF00 );
#else
REGISTER_HID_DETECTOR_I("Glorious Model O / O-", DetectSinowealthMouse, SINOWEALTH_VID, Glorious_Model_O_PID, 1);
REGISTER_HID_DETECTOR_I("Glorious Model D / D-", DetectSinowealthMouse, SINOWEALTH_VID, Glorious_Model_D_PID, 1);
REGISTER_HID_DETECTOR_I("Everest GT-100 RGB", DetectSinowealthMouse, SINOWEALTH_VID, Everest_GT100_PID, 1);
REGISTER_HID_DETECTOR_I("ZET Fury Pro", DetectZetFuryPro, SINOWEALTH_VID, ZET_FURY_PRO_PID, 1);
REGISTER_HID_DETECTOR_I("Glorious Model O / O- Wireless", DetectGMOW_Dongle, SINOWEALTH_VID, Glorious_Model_OW_PID1, 1);
REGISTER_HID_DETECTOR_I("Glorious Model O / O- Wireless", DetectGMOW_Cable, SINOWEALTH_VID, Glorious_Model_OW_PID2, 2);
REGISTER_HID_DETECTOR_I("Glorious Model D / D- Wireless", DetectGMOW_Dongle, SINOWEALTH_VID, Glorious_Model_DW_PID1, 2);
REGISTER_HID_DETECTOR_I("Glorious Model D / D- Wireless", DetectGMOW_Cable, SINOWEALTH_VID, Glorious_Model_DW_PID2, 2);
REGISTER_HID_DETECTOR_I("Genesis Xenon 200", DetectGenesisXenon200, SINOWEALTH_VID, GENESIS_XENON_200_PID, 1);
REGISTER_HID_DETECTOR_I("Genesis Thor 300", DetectSinowealthGenesisKeyboard, SINOWEALTH_VID, GENESIS_THOR_300_PID, 1);
//REGISTER_HID_DETECTOR_I("FL ESPORTS F11", DetectSinowealthKeyboard, SINOWEALTH_VID, Fl_Esports_F11_PID, 1);
//REGISTER_HID_DETECTOR_I("Sinowealth Keyboard", DetectSinowealthKeyboard16, SINOWEALTH_VID, RGB_KEYBOARD_0016PID, 1);
#endif

View File

@@ -38,8 +38,4 @@ DetectedControllers DetectTecknetControllers(hid_device_info* info, const std::s
return(detected_controllers);
}
#ifdef USE_HID_USAGE
REGISTER_HID_DETECTOR_PU("Tecknet M008", DetectTecknetControllers, TECKNET_VID, TECKNET_M0008_PID, TECKNET_M0008_UPG, TECKNET_M0008_U);
#else
REGISTER_HID_DETECTOR_I("Tecknet M008", DetectTecknetControllers, TECKNET_VID, TECKNET_M0008_PID, 0);
#endif

View File

@@ -97,17 +97,12 @@ bool BasicHIDBlock::compare(hid_device_info* info)
{
return((vid == info->vendor_id)
&& (pid == info->product_id)
#ifdef USE_HID_USAGE
&& ((usage_page == HID_USAGE_PAGE_ANY)
|| (usage_page == info->usage_page))
&& ((usage == HID_USAGE_ANY)
|| (usage == info->usage))
&& ((interface == HID_INTERFACE_ANY)
|| (interface == info->interface_number))
#else
&& ((interface == HID_INTERFACE_ANY)
|| (interface == info->interface_number))
#endif
);
}

View File

@@ -388,7 +388,6 @@ win32:DEFINES -=
UNICODE
win32:DEFINES += \
USE_HID_USAGE \
_MBCS \
WIN32 \
_CRT_SECURE_NO_WARNINGS \
@@ -499,21 +498,11 @@ contains(QMAKE_PLATFORM, linux) {
#-------------------------------------------------------------------------------------------#
packagesExist(hidapi-hotplug-hidraw) {
PKGCONFIG += hidapi-hotplug-hidraw
DEFINES += USE_HID_USAGE=1 \
HID_HOTPLUG_ENABLED=1
DEFINES += HID_HOTPLUG_ENABLED=1
HID_HOTPLUG_ENABLED = "true"
} else {
packagesExist(hidapi-hidraw) {
PKGCONFIG += hidapi-hidraw
#-----------------------------------------------------------------------------------#
# hidapi-hidraw >= 0.10.1 supports USAGE/USAGE_PAGE #
# Define USE_HID_USAGE if hidapi-hidraw supports it #
#-----------------------------------------------------------------------------------#
HIDAPI_HIDRAW_VERSION = $$system($$PKG_CONFIG --modversion hidapi-hidraw)
if(versionAtLeast(HIDAPI_HIDRAW_VERSION, "0.10.1")) {
DEFINES += USE_HID_USAGE
}
} else {
packagesExist(hidapi-libusb) {
PKGCONFIG += hidapi-libusb
@@ -640,14 +629,6 @@ contains(QMAKE_PLATFORM, freebsd) {
#-------------------------------------------------------------------------------------------#
packagesExist(hidapi-hidraw) {
PKGCONFIG += hidapi-hidraw
#---------------------------------------------------------------------------------------#
# hidapi-hidraw >= 0.10.1 supports USAGE/USAGE_PAGE #
# Define USE_HID_USAGE if hidapi-hidraw supports it #
#---------------------------------------------------------------------------------------#
packagesExist(hidapi-hidraw>=0.10.1) {
DEFINES += USE_HID_USAGE
}
} else {
packagesExist(hidapi-libusb) {
PKGCONFIG += hidapi-libusb
@@ -714,9 +695,6 @@ macx {
PKGCONFIG += \
libusb-1.0 \
DEFINES += \
USE_HID_USAGE \
QMAKE_CXXFLAGS += \
-Wno-narrowing \
@@ -743,13 +721,11 @@ macx {
#-------------------------------------------------------------------------------------------#
packagesExist(hidapi-hotplug) {
PKGCONFIG += hidapi-hotplug
DEFINES += USE_HID_USAGE=1 \
HID_HOTPLUG_ENABLED=1
DEFINES += HID_HOTPLUG_ENABLED=1
HID_HOTPLUG_ENABLED = "true"
} else {
PKGCONFIG += hidapi
DEFINES += USE_HID_USAGE=1
}
# Use mbedtls 3