From a6da9a25b7cb72013f18a4257d5955c30b577914 Mon Sep 17 00:00:00 2001 From: Marcin Date: Fri, 3 Sep 2021 13:54:22 +0200 Subject: [PATCH] Simplify Logitech G915 detection logic --- .../LogitechControllerDetect.cpp | 116 +----------------- .../LogitechG915Controller.cpp | 39 +++--- .../LogitechG915Controller.h | 5 +- 3 files changed, 25 insertions(+), 135 deletions(-) diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index f79715090..2a71d17c9 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -320,136 +320,28 @@ void DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) void DetectLogitechKeyboardG915(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | Logitech keyboards use two different usages, one for 20-byte packets and one for 64-byte packets | - | Usage 0x0602 for 20 byte, usage 0x0604 for 64 byte, both are on usage page 0xFF43 | - \*-------------------------------------------------------------------------------------------------*/ -#ifdef USE_HID_USAGE - hid_device* dev_usage_0x0001 = nullptr; - hid_device* dev_usage_0x0002 = 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 2 - && info_temp->usage_page == info->usage_page) // constant 0xFF00 - { - if(info_temp->usage == 0x0001) - { - dev_usage_0x0001 = hid_open_path(info_temp->path); - } - else if(info_temp->usage == 0x0002) - { - dev_usage_0x0002 = hid_open_path(info_temp->path); - } - } - if(dev_usage_0x0001 && dev_usage_0x0002) - { - break; - } - info_temp = info_temp->next; - } - if(dev_usage_0x0001 && dev_usage_0x0002) - { - LogitechG915Controller* controller = new LogitechG915Controller(dev_usage_0x0001, dev_usage_0x0002, false); - RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller); - rgb_controller->name = name; - ResourceManager::get()->RegisterRGBController(rgb_controller); - } - else - { - /*-------------------------------------------------*\ - | Not all of them could be opened, do some cleanup | - \*-------------------------------------------------*/ - if(dev_usage_0x0001) - { - hid_close(dev_usage_0x0001); - } - if(dev_usage_0x0002) - { - hid_close(dev_usage_0x0002); - } - } -#else hid_device* dev = hid_open_path(info->path); if(dev) { - LogitechG915Controller* controller = new LogitechG915Controller(dev, dev, false); + LogitechG915Controller* controller = new LogitechG915Controller(dev, false); RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller); rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); } -#endif } void DetectLogitechKeyboardG915Wired(hid_device_info* info, const std::string& name) { - /*-------------------------------------------------------------------------------------------------*\ - | Logitech keyboards use two different usages, one for 20-byte packets and one for 64-byte packets | - | Usage 0x0602 for 20 byte, usage 0x0604 for 64 byte, both are on usage page 0xFF43 | - \*-------------------------------------------------------------------------------------------------*/ -#ifdef USE_HID_USAGE - hid_device* dev_usage_0x0001 = nullptr; - hid_device* dev_usage_0x0002 = 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 2 - && info_temp->usage_page == info->usage_page) // constant 0xFF00 - { - if(info_temp->usage == 0x0001) - { - dev_usage_0x0001 = hid_open_path(info_temp->path); - } - else if(info_temp->usage == 0x0002) - { - dev_usage_0x0002 = hid_open_path(info_temp->path); - } - } - if(dev_usage_0x0001 && dev_usage_0x0002) - { - break; - } - info_temp = info_temp->next; - } - if(dev_usage_0x0001 && dev_usage_0x0002) - { - LogitechG915Controller* controller = new LogitechG915Controller(dev_usage_0x0001, dev_usage_0x0002, true); - RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller); - rgb_controller->name = name; - ResourceManager::get()->RegisterRGBController(rgb_controller); - } - else - { - /*-------------------------------------------------*\ - | Not all of them could be opened, do some cleanup | - \*-------------------------------------------------*/ - if(dev_usage_0x0001) - { - hid_close(dev_usage_0x0001); - } - if(dev_usage_0x0002) - { - hid_close(dev_usage_0x0002); - } - } -#else hid_device* dev = hid_open_path(info->path); if(dev) { - LogitechG915Controller* controller = new LogitechG915Controller(dev, dev, true); + LogitechG915Controller* controller = new LogitechG915Controller(dev, true); RGBController_LogitechG915* rgb_controller = new RGBController_LogitechG915(controller); rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); } -#endif } /*-----------------------------------------------------*\ @@ -677,8 +569,8 @@ REGISTER_HID_DETECTOR_IP ("Logitech G813 RGB Mechanical Gaming Keyboard", REGISTER_HID_DETECTOR_IP ("Logitech G815 RGB Mechanical Gaming Keyboard", DetectLogitechKeyboardG815, LOGITECH_VID, LOGITECH_G815_PID, 1, 0xFF43); REGISTER_HID_DETECTOR_IP ("Logitech G910 Orion Spark", DetectLogitechKeyboardG910, LOGITECH_VID, LOGITECH_G910_ORION_SPARK_PID, 1, 0xFF43); REGISTER_HID_DETECTOR_IP ("Logitech G910 Orion Spectrum", DetectLogitechKeyboardG910, LOGITECH_VID, LOGITECH_G910_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G915 Wireless RGB Mechanical Gaming Keyboard", DetectLogitechKeyboardG915, LOGITECH_VID, LOGITECH_G915_RECEIVER_PID, 2, 0xFF00); -REGISTER_HID_DETECTOR_IP ("Logitech G915 Wireless RGB Mechanical Gaming Keyboard (Wired)", DetectLogitechKeyboardG915Wired, LOGITECH_VID, LOGITECH_G915_WIRED_PID, 2, 0xFF00); +REGISTER_HID_DETECTOR_IPU("Logitech G915 Wireless RGB Mechanical Gaming Keyboard", DetectLogitechKeyboardG915, LOGITECH_VID, LOGITECH_G915_RECEIVER_PID, 2, 0xFF00, 2); +REGISTER_HID_DETECTOR_IPU("Logitech G915 Wireless RGB Mechanical Gaming Keyboard (Wired)", DetectLogitechKeyboardG915Wired, LOGITECH_VID, LOGITECH_G915_WIRED_PID, 2, 0xFF00, 2); /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*\ | Mice | \*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/Controllers/LogitechController/LogitechG915Controller.cpp b/Controllers/LogitechController/LogitechG915Controller.cpp index 6903b0493..c788cf6eb 100644 --- a/Controllers/LogitechController/LogitechG915Controller.cpp +++ b/Controllers/LogitechController/LogitechG915Controller.cpp @@ -10,10 +10,9 @@ #include "LogitechG915Controller.h" #include -LogitechG915Controller::LogitechG915Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, bool wired) +LogitechG915Controller::LogitechG915Controller(hid_device* dev_handle, bool wired) { - dev_pkt_0x11 = dev_handle_0x11; - dev_pkt_0x12 = dev_handle_0x12; + this->dev_handle = dev_handle; if(wired) { @@ -39,7 +38,7 @@ LogitechG915Controller::~LogitechG915Controller() std::string LogitechG915Controller::GetSerialString() { wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev_pkt_0x11, serial_string, 128); + int ret = hid_get_serial_number_string(dev_handle, serial_string, 128); if(ret != 0) { @@ -104,8 +103,8 @@ void LogitechG915Controller::SendCommit() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read_timeout(dev_pkt_0x11, (unsigned char *)usb_buf, 20, LOGITECH_READ_TIMEOUT); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read_timeout(dev_handle, (unsigned char *)usb_buf, 20, LOGITECH_READ_TIMEOUT); } void LogitechG915Controller::InitializeDirect() @@ -128,8 +127,8 @@ void LogitechG915Controller::InitializeDirect() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); /*-----------------------------------------------------*\ | Zero out buffer | @@ -147,8 +146,8 @@ void LogitechG915Controller::InitializeDirect() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); /*-----------------------------------------------------*\ | Zero out buffer | @@ -167,8 +166,8 @@ void LogitechG915Controller::InitializeDirect() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); /*-----------------------------------------------------*\ | Zero out buffer | @@ -188,8 +187,8 @@ void LogitechG915Controller::InitializeDirect() /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); } void LogitechG915Controller::SendSingleLed @@ -224,8 +223,8 @@ void LogitechG915Controller::SendSingleLed /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); } void LogitechG915Controller::SendDirectFrame @@ -257,8 +256,8 @@ void LogitechG915Controller::SendDirectFrame /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read_timeout(dev_pkt_0x11, (unsigned char *)usb_buf, 20, LOGITECH_READ_TIMEOUT); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read_timeout(dev_handle, (unsigned char *)usb_buf, 20, LOGITECH_READ_TIMEOUT); } void LogitechG915Controller::SendMode @@ -316,6 +315,6 @@ void LogitechG915Controller::SendMode /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, (unsigned char *)usb_buf, 20); - hid_read(dev_pkt_0x11, (unsigned char *)usb_buf, 20); + hid_write(dev_handle, (unsigned char *)usb_buf, 20); + hid_read(dev_handle, (unsigned char *)usb_buf, 20); } diff --git a/Controllers/LogitechController/LogitechG915Controller.h b/Controllers/LogitechController/LogitechG915Controller.h index 5c93dfe19..be84bed37 100644 --- a/Controllers/LogitechController/LogitechG915Controller.h +++ b/Controllers/LogitechController/LogitechG915Controller.h @@ -64,7 +64,7 @@ enum class LogitechG915Controller { public: - LogitechG915Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, bool wired); + LogitechG915Controller(hid_device* dev_handle, bool wired); ~LogitechG915Controller(); std::string GetSerialString(); @@ -92,8 +92,7 @@ public: ); private: - hid_device* dev_pkt_0x11; - hid_device* dev_pkt_0x12; + hid_device* dev_handle; char feature_4522_idx; char feature_8040_idx; char feature_8071_idx;