diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index d49fb00a9..be403bab8 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -20,9 +20,6 @@ #include "LogitechG213Controller.h" #include "LogitechG600Controller.h" #include "LogitechG933Controller.h" -#include "LogitechG810Controller.h" -#include "LogitechGProKeyboardController.h" -#include "LogitechG910Controller.h" #include "LogitechG815Controller.h" #include "LogitechG915Controller.h" #include "LogitechGLightsyncController.h" @@ -32,9 +29,6 @@ #include "RGBController_LogitechG213.h" #include "RGBController_LogitechG600.h" #include "RGBController_LogitechG933.h" -#include "RGBController_LogitechG810.h" -#include "RGBController_LogitechGProKeyboard.h" -#include "RGBController_LogitechG910.h" #include "RGBController_LogitechG815.h" #include "RGBController_LogitechG915.h" #include "RGBController_LogitechGLightsync.h" @@ -61,12 +55,6 @@ using namespace std::chrono_literals; | Keyboard product IDs | \*---------------------------------------------------------*/ #define LOGITECH_G213_PID 0xC336 -#define LOGITECH_G512_PID 0xC342 -#define LOGITECH_G512_RGB_PID 0xC33C -#define LOGITECH_G610_1_PID 0xC333 -#define LOGITECH_G610_2_PID 0xC338 -#define LOGITECH_G810_1_PID 0xC331 -#define LOGITECH_G810_2_PID 0xC337 #define LOGITECH_G813_PID 0xC232 #define LOGITECH_G815_PID 0xC33F #define LOGITECH_G915_WIRED_PID 0xC33E @@ -74,9 +62,6 @@ using namespace std::chrono_literals; #define LOGITECH_G915_RECEIVER_2_PID 0xC547 #define LOGITECH_G915TKL_WIRED_PID 0xC343 #define LOGITECH_G915TKL_RECEIVER_PID 0xC545 -#define LOGITECH_G910_ORION_SPARK_PID 0xC32B -#define LOGITECH_G910_PID 0xC335 -#define LOGITECH_GPRO_KEYBOARD_1_PID 0xC339 /*---------------------------------------------------------*\ | Mouse product IDs | @@ -172,112 +157,6 @@ DetectedControllers DetectLogitechKeyboardG213(hid_device_info* info, const std: return(detected_controllers); } -DetectedControllers DetectLogitechKeyboardG810(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 | - \*-----------------------------------------------------*/ - DetectedControllers detected_controllers; - - hid_device* dev_usage_0x0602 = nullptr; - hid_device* dev_usage_0x0604 = 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 0xFF43 - { - if(info_temp->usage == 0x0602) - { - dev_usage_0x0602 = hid_open_path(info_temp->path); - } - else if(info_temp->usage == 0x0604) - { - dev_usage_0x0604 = hid_open_path(info_temp->path); - } - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - break; - } - info_temp = info_temp->next; - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - LogitechG810Controller* controller = new LogitechG810Controller(dev_usage_0x0602, dev_usage_0x0604, info->path, name); - RGBController_LogitechG810* rgb_controller = new RGBController_LogitechG810(controller); - - detected_controllers.push_back(rgb_controller); - } - else - { - // Not all of them could be opened, do some cleanup - hid_close(dev_usage_0x0602); - hid_close(dev_usage_0x0604); - } - - return(detected_controllers); -} - -DetectedControllers DetectLogitechKeyboardG910(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 | - \*-----------------------------------------------------*/ - DetectedControllers detected_controllers; - - hid_device* dev_usage_0x0602 = nullptr; - hid_device* dev_usage_0x0604 = 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 0xFF43 - { - if(info_temp->usage == 0x0602) - { - dev_usage_0x0602 = hid_open_path(info_temp->path); - } - else if(info_temp->usage == 0x0604) - { - dev_usage_0x0604 = hid_open_path(info_temp->path); - } - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - break; - } - info_temp = info_temp->next; - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - LogitechG910Controller* controller = new LogitechG910Controller(dev_usage_0x0602, dev_usage_0x0604, info->path, name); - RGBController_LogitechG910* rgb_controller = new RGBController_LogitechG910(controller); - - detected_controllers.push_back(rgb_controller); - } - else - { - // Not all of them could be opened, do some cleanup - hid_close(dev_usage_0x0602); - hid_close(dev_usage_0x0604); - } - - return(detected_controllers); -} - DetectedControllers DetectLogitechKeyboardG815(hid_device_info* info, const std::string& name) { /*-----------------------------------------------------*\ @@ -493,59 +372,6 @@ DetectedControllers DetectLogitechKeyboardG915Wired(hid_device_info* info, const return(detected_controllers); } -DetectedControllers DetectLogitechKeyboardGPro(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 | - \*-----------------------------------------------------*/ - DetectedControllers detected_controllers; - - hid_device* dev_usage_0x0602 = nullptr; - hid_device* dev_usage_0x0604 = 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 0xFF43 - { - if(info_temp->usage == 0x0602) - { - dev_usage_0x0602 = hid_open_path(info_temp->path); - } - else if(info_temp->usage == 0x0604) - { - dev_usage_0x0604 = hid_open_path(info_temp->path); - } - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - break; - } - info_temp = info_temp->next; - } - if(dev_usage_0x0602 && dev_usage_0x0604) - { - LogitechGProKeyboardController* controller = new LogitechGProKeyboardController(dev_usage_0x0602, dev_usage_0x0604, name); - RGBController_LogitechGProKeyboard* rgb_controller = new RGBController_LogitechGProKeyboard(controller); - - detected_controllers.push_back(rgb_controller); - } - else - { - // Not all of them could be opened, do some cleanup - hid_close(dev_usage_0x0602); - hid_close(dev_usage_0x0604); - } - - return(detected_controllers); -} - /*---------------------------------------------------------*\ | Logitech Mice | \*---------------------------------------------------------*/ @@ -1714,17 +1540,8 @@ REGISTER_CUSTOM_UDEV_RULE(logitech_g560, "Logitech G560 Lightsync Speaker", "SUB | Keyboards | \*-------------------------------------------------------------------------------------------------------------------------------------------------*/ REGISTER_HID_DETECTOR_IPU("Logitech G213", DetectLogitechKeyboardG213, LOGITECH_VID, LOGITECH_G213_PID, 1, 0xFF43, 0x0602); -REGISTER_HID_DETECTOR_IP ("Logitech G512", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G512_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G512 RGB", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G512_RGB_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G610 Orion", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G610_1_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G610 Orion", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G610_2_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G810 Orion Spectrum", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G810_1_PID, 1, 0xFF43); -REGISTER_HID_DETECTOR_IP ("Logitech G810 Orion Spectrum", DetectLogitechKeyboardG810, LOGITECH_VID, LOGITECH_G810_2_PID, 1, 0xFF43); REGISTER_HID_DETECTOR_IP ("Logitech G813 RGB Mechanical Gaming Keyboard", DetectLogitechKeyboardG815, LOGITECH_VID, LOGITECH_G813_PID, 1, 0xFF43); 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 G Pro RGB Mechanical Gaming Keyboard", DetectLogitechKeyboardGPro, LOGITECH_VID, LOGITECH_GPRO_KEYBOARD_1_PID, 1, 0xFF43); 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 (Receiver 2)", DetectLogitechKeyboardG915Receiver2, LOGITECH_VID, LOGITECH_G915_RECEIVER_2_PID, 2, 0xFF00, 2); diff --git a/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.cpp b/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.cpp deleted file mode 100644 index 467de04f2..000000000 --- a/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechG810Controller.cpp | -| | -| Driver for Logitech G810 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 11 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include -#include "LogitechG810Controller.h" -#include "StringUtils.h" - -LogitechG810Controller::LogitechG810Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, char* path, std::string dev_name) -{ - dev_pkt_0x11 = dev_handle_0x11; - dev_pkt_0x12 = dev_handle_0x12; - location = path; - name = dev_name; -} - -LogitechG810Controller::~LogitechG810Controller() -{ - hid_close(dev_pkt_0x11); - hid_close(dev_pkt_0x12); -} - -std::string LogitechG810Controller::GetLocationString() -{ - return("HID: " + location); -} - -std::string LogitechG810Controller::GetNameString() -{ - return(name); -} - -std::string LogitechG810Controller::GetSerialString() -{ - wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev_pkt_0x11, serial_string, 128); - - if(ret != 0) - { - return(""); - } - - return(StringUtils::wstring_to_string(serial_string)); -} - -void LogitechG810Controller::Commit() -{ - SendCommit(); -} - -void LogitechG810Controller::SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - SendDirectFrame(zone, frame_count, frame_data); -} - -void LogitechG810Controller::SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - SendMode(LOGITECH_G810_ZONE_MODE_KEYBOARD, mode, speed, red, green, blue); - SendMode(LOGITECH_G810_ZONE_MODE_LOGO, mode, speed, red, green, blue); - - SendCommit(); -} - -/*-------------------------------------------------------------------------------------------------*\ -| Private packet sending functions. | -\*-------------------------------------------------------------------------------------------------*/ - -void LogitechG810Controller::SendCommit() -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Commit packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0C; - usb_buf[0x03] = 0x5D; - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechG810Controller::SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - unsigned char usb_buf[64]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x12; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0C; - usb_buf[0x03] = 0x3D; - usb_buf[0x05] = zone; - usb_buf[0x07] = frame_count; - - /*-----------------------------------------------------*\ - | Copy in frame data | - \*-----------------------------------------------------*/ - memcpy(&usb_buf[0x08], frame_data, frame_count * 4); - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x12, usb_buf, 64); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechG810Controller::SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0D; - usb_buf[0x03] = 0x3D; - usb_buf[0x04] = zone; - - usb_buf[0x05] = mode; - - usb_buf[0x06] = red; - usb_buf[0x07] = green; - usb_buf[0x08] = blue; - - speed = 100 * speed; - if(mode == LOGITECH_G810_MODE_CYCLE) - { - usb_buf[0x0B] = speed >> 8; - usb_buf[0x0C] = speed & 0xFF; - usb_buf[0x0D] = 0x64; - } - else if(mode == LOGITECH_G810_MODE_BREATHING) - { - usb_buf[0x09] = speed >> 8; - usb_buf[0x0A] = speed & 0xFF; - usb_buf[0x0C] = 0x64; - } - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} diff --git a/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.h b/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.h deleted file mode 100644 index 4b32dcf89..000000000 --- a/Controllers/LogitechController/LogitechG810Controller/LogitechG810Controller.h +++ /dev/null @@ -1,104 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechG810Controller.h | -| | -| Driver for Logitech G810 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 11 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include -#include -#include "RGBController.h" - -enum -{ - LOGITECH_G810_ZONE_MODE_KEYBOARD = 0x00, - LOGITECH_G810_ZONE_MODE_LOGO = 0x01, -}; - -enum -{ - LOGITECH_G810_ZONE_DIRECT_KEYBOARD = 0x01, - LOGITECH_G810_ZONE_DIRECT_MEDIA = 0x02, - LOGITECH_G810_ZONE_DIRECT_LOGO = 0x10, - LOGITECH_G810_ZONE_DIRECT_INDICATORS = 0x40, -}; - -enum -{ - LOGITECH_G810_MODE_OFF = 0x00, - LOGITECH_G810_MODE_STATIC = 0x01, - LOGITECH_G810_MODE_BREATHING = 0x02, - LOGITECH_G810_MODE_CYCLE = 0x03, - LOGITECH_G810_MODE_WAVE = 0x04, -}; - -/*---------------------------------------------------------------------------------------------*\ -| Speed is 1000 for fast and 20000 for slow. | -| Values are multiplied by 100 later to give lots of GUI steps. | -\*---------------------------------------------------------------------------------------------*/ -enum -{ - LOGITECH_G810_SPEED_SLOWEST = 0xC8, /* Slowest speed */ - LOGITECH_G810_SPEED_NORMAL = 0x32, /* Normal speed */ - LOGITECH_G810_SPEED_FASTEST = 0x0A, /* Fastest speed */ -}; - -class LogitechG810Controller -{ -public: - LogitechG810Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, char* path, std::string dev_name); - ~LogitechG810Controller(); - - std::string GetLocationString(); - std::string GetNameString(); - std::string GetSerialString(); - - void Commit(); - - void SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - -private: - hid_device* dev_pkt_0x11; - hid_device* dev_pkt_0x12; - std::string location; - std::string name; - - void SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - - void SendCommit(); -}; diff --git a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp b/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp deleted file mode 100644 index 89ac7370e..000000000 --- a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp +++ /dev/null @@ -1,380 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechG810.cpp | -| | -| RGBController for Logitech G810 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 12 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include "RGBControllerKeyNames.h" -#include "RGBController_LogitechG810.h" - -//0xFFFFFFFF indicates an unused entry in matrix -#define NA 0xFFFFFFFF - -static unsigned int matrix_map[7][23] = - { { 111, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 116, 114, 115, NA, 113, NA, 112, 110, NA, NA, NA }, - { 37, NA, 54, 55, 56, 57, NA, 58, 59, 60, 61, NA, 62, 63, 64, 65, 66, 67, 68, 109, 108, 107, 106 }, - { 49, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, NA, 41, 42, 38, NA, 69, 70, 71, 79, 80, 81, 82 }, - { 39, NA, 16, 22, 4, 17, NA, 19, 24, 20, 8, 14, 15, 43, 44, 45, 72, 73, 74, 91, 92, 93, 83 }, - { 53, NA, 0, 18, 3, 5, NA, 6, 7, 9, 10, 11, 47, 48, 46, 36, NA, NA, NA, 88, 89, 90, NA }, - { 99, 96, 25, 23, 2, 21, NA, 1, NA, 13, 12, 50, 51, 52, 103, NA, NA, 78, NA, 85, 86, 87, 84 }, - { 98, 101, 100, NA, NA, NA, NA, 40, NA, NA, NA, NA, 104, 105, 97, 102, 76, 77, 75, 94, NA, 95, NA } }; - -static const char* zone_names[] = -{ - ZONE_EN_KEYBOARD, -}; - -static zone_type zone_types[] = -{ - ZONE_TYPE_MATRIX, -}; - -static const unsigned int zone_sizes[] = -{ - 117, -}; - -typedef struct -{ - const char * name; - const unsigned char zone; - const unsigned char idx; -} led_type; - -static const led_type led_names[] = -{ - /* Key Label Zone, Index */ - { KEY_EN_A, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x04 }, - { KEY_EN_B, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x05 }, - { KEY_EN_C, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x06 }, - { KEY_EN_D, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x07 }, - { KEY_EN_E, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x08 }, - { KEY_EN_F, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x09 }, - { KEY_EN_G, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0A }, - { KEY_EN_H, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0B }, - { KEY_EN_I, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0C }, - { KEY_EN_J, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0D }, - { KEY_EN_K, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0E }, - { KEY_EN_L, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x0F }, - { KEY_EN_M, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x10 }, - { KEY_EN_N, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x11 }, - { KEY_EN_O, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x12 }, - { KEY_EN_P, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x13 }, - { KEY_EN_Q, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x14 }, - { KEY_EN_R, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x15 }, - { KEY_EN_S, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x16 }, - { KEY_EN_T, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x17 }, - { KEY_EN_U, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x18 }, - { KEY_EN_V, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x19 }, - { KEY_EN_W, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1A }, - { KEY_EN_X, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1B }, - { KEY_EN_Y, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1C }, - { KEY_EN_Z, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1D }, - { KEY_EN_1, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1E }, - { KEY_EN_2, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x1F }, - { KEY_EN_3, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x20 }, - { KEY_EN_4, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x21 }, - { KEY_EN_5, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x22 }, - { KEY_EN_6, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x23 }, - { KEY_EN_7, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x24 }, - { KEY_EN_8, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x25 }, - { KEY_EN_9, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x26 }, - { KEY_EN_0, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x27 }, - { KEY_EN_ANSI_ENTER, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x28 }, - { KEY_EN_ESCAPE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x29 }, - { KEY_EN_BACKSPACE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2A }, - { KEY_EN_TAB, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2B }, - { KEY_EN_SPACE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2C }, - { KEY_EN_MINUS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2D }, - { KEY_EN_EQUALS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2E }, - { KEY_EN_LEFT_BRACKET, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x2F }, - { KEY_EN_RIGHT_BRACKET, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x30 }, - { KEY_EN_ANSI_BACK_SLASH, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x31 },//ANSI only - { KEY_EN_POUND, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x32 },//ISO only - { KEY_EN_SEMICOLON, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x33 }, - { KEY_EN_QUOTE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x34 }, - { KEY_EN_BACK_TICK, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x35 }, - { KEY_EN_COMMA, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x36 }, - { KEY_EN_PERIOD, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x37 }, - { KEY_EN_FORWARD_SLASH, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x38 }, - { KEY_EN_CAPS_LOCK, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x39 }, - { KEY_EN_F1, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3A }, - { KEY_EN_F2, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3B }, - { KEY_EN_F3, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3C }, - { KEY_EN_F4, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3D }, - { KEY_EN_F5, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3E }, - { KEY_EN_F6, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x3F }, - { KEY_EN_F7, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x40 }, - { KEY_EN_F8, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x41 }, - { KEY_EN_F9, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x42 }, - { KEY_EN_F10, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x43 }, - { KEY_EN_F11, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x44 }, - { KEY_EN_F12, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x45 }, - { KEY_EN_PRINT_SCREEN, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x46 }, - { KEY_EN_SCROLL_LOCK, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x47 }, - { KEY_EN_PAUSE_BREAK, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x48 }, - { KEY_EN_INSERT, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x49 }, - { KEY_EN_HOME, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4A }, - { KEY_EN_PAGE_UP, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4B }, - { KEY_EN_DELETE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4C }, - { KEY_EN_END, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4D }, - { KEY_EN_PAGE_DOWN, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4E }, - { KEY_EN_RIGHT_ARROW, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x4F }, - { KEY_EN_LEFT_ARROW, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x50 }, - { KEY_EN_DOWN_ARROW, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x51 }, - { KEY_EN_UP_ARROW, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x52 }, - { KEY_EN_NUMPAD_LOCK, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x53 }, - { KEY_EN_NUMPAD_DIVIDE, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x54 }, - { KEY_EN_NUMPAD_TIMES, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x55 }, - { KEY_EN_NUMPAD_MINUS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x56 }, - { KEY_EN_NUMPAD_PLUS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x57 }, - { KEY_EN_NUMPAD_ENTER, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x58 }, - { KEY_EN_NUMPAD_1, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x59 }, - { KEY_EN_NUMPAD_2, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5A }, - { KEY_EN_NUMPAD_3, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5B }, - { KEY_EN_NUMPAD_4, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5C }, - { KEY_EN_NUMPAD_5, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5D }, - { KEY_EN_NUMPAD_6, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5E }, - { KEY_EN_NUMPAD_7, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x5F }, - { KEY_EN_NUMPAD_8, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x60 }, - { KEY_EN_NUMPAD_9, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x61 }, - { KEY_EN_NUMPAD_0, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x62 }, - { KEY_EN_NUMPAD_PERIOD, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x63 }, - { KEY_EN_ISO_BACK_SLASH, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x64 },//ISO only - { KEY_EN_MENU, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0x65 }, - { KEY_EN_LEFT_CONTROL, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE0 }, - { KEY_EN_LEFT_SHIFT, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE1 }, - { KEY_EN_LEFT_ALT, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE2 }, - { KEY_EN_LEFT_WINDOWS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE3 }, - { KEY_EN_RIGHT_CONTROL, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE4 }, - { KEY_EN_RIGHT_SHIFT, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE5 }, - { KEY_EN_RIGHT_ALT, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE6 }, - { KEY_EN_RIGHT_WINDOWS, LOGITECH_G810_ZONE_DIRECT_KEYBOARD, 0xE7 }, - { KEY_EN_MEDIA_NEXT, LOGITECH_G810_ZONE_DIRECT_MEDIA, 0xB5 }, - { KEY_EN_MEDIA_PREVIOUS, LOGITECH_G810_ZONE_DIRECT_MEDIA, 0xB6 }, - { KEY_EN_MEDIA_STOP, LOGITECH_G810_ZONE_DIRECT_MEDIA, 0xB7 }, - { KEY_EN_MEDIA_PLAY_PAUSE, LOGITECH_G810_ZONE_DIRECT_MEDIA, 0xCD }, - { KEY_EN_MEDIA_MUTE, LOGITECH_G810_ZONE_DIRECT_MEDIA, 0xE2 }, - { "Logo", LOGITECH_G810_ZONE_DIRECT_LOGO, 0x01 }, - { "Lighting", LOGITECH_G810_ZONE_DIRECT_INDICATORS, 0x01 }, - { "Game Mode", LOGITECH_G810_ZONE_DIRECT_INDICATORS, 0x02 }, - { "Caps Lock Indicator", LOGITECH_G810_ZONE_DIRECT_INDICATORS, 0x03 }, - { "Scroll Lock Indicator", LOGITECH_G810_ZONE_DIRECT_INDICATORS, 0x04 }, - { "Num Lock Indicator", LOGITECH_G810_ZONE_DIRECT_INDICATORS, 0x05 }, -}; - -/**------------------------------------------------------------------*\ - @name Logitech G810 - @category Keyboard - @type USB - @save :robot: - @direct :white_check_mark: - @effects :white_check_mark: - @detectors DetectLogitechKeyboardG810 - @comment -\*-------------------------------------------------------------------*/ - -RGBController_LogitechG810::RGBController_LogitechG810(LogitechG810Controller* controller_ptr) -{ - controller = controller_ptr; - - name = controller->GetNameString(); - vendor = "Logitech"; - type = DEVICE_TYPE_KEYBOARD; - description = "Logitech Keyboard Device"; - location = controller->GetLocationString(); - serial = controller->GetSerialString(); - - mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); - - mode Static; - Static.name = "Static"; - Static.value = LOGITECH_G810_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Static.colors_min = 1; - Static.colors_max = 1; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.colors.resize(1); - modes.push_back(Static); - - mode Off; - Off.name = "Off"; - Off.value = LOGITECH_G810_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; - modes.push_back(Off); - - mode Cycle; - Cycle.name = "Cycle"; - Cycle.value = LOGITECH_G810_MODE_CYCLE; - Cycle.flags = MODE_FLAG_HAS_SPEED; - Cycle.color_mode = MODE_COLORS_NONE; - Cycle.speed_min = LOGITECH_G810_SPEED_SLOWEST; - Cycle.speed_max = LOGITECH_G810_SPEED_FASTEST; - Cycle.speed = LOGITECH_G810_SPEED_NORMAL; - modes.push_back(Cycle); - - mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = LOGITECH_G810_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED; - Breathing.colors_min = 1; - Breathing.colors_max = 1; - Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - Breathing.colors.resize(1); - Breathing.speed_min = LOGITECH_G810_SPEED_SLOWEST; - Breathing.speed_max = LOGITECH_G810_SPEED_FASTEST; - Breathing.speed = LOGITECH_G810_SPEED_NORMAL; - modes.push_back(Breathing); - - SetupZones(); -} - -RGBController_LogitechG810::~RGBController_LogitechG810() -{ - Shutdown(); - - delete controller; -} - -void RGBController_LogitechG810::SetupZones() -{ - /*---------------------------------------------------------*\ - | Set up zones | - \*---------------------------------------------------------*/ - unsigned int total_led_count = 0; - for(unsigned int zone_idx = 0; zone_idx < 1; zone_idx++) - { - zone new_zone; - new_zone.name = zone_names[zone_idx]; - new_zone.type = zone_types[zone_idx]; - new_zone.leds_min = zone_sizes[zone_idx]; - new_zone.leds_max = zone_sizes[zone_idx]; - new_zone.leds_count = zone_sizes[zone_idx]; - - if(zone_types[zone_idx] == ZONE_TYPE_MATRIX) - { - new_zone.matrix_map.Set(7, 23, (unsigned int *)&matrix_map); - } - - zones.push_back(new_zone); - - total_led_count += zone_sizes[zone_idx]; - } - - for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++) - { - led new_led; - new_led.name = led_names[led_idx].name; - new_led.value = ( led_names[led_idx].zone << 8 ) + led_names[led_idx].idx; - leds.push_back(new_led); - } - - SetupColors(); -} - -void RGBController_LogitechG810::DeviceUpdateLEDs() -{ - #define MAX_FRAMES_PER_PACKET 0x0E - - unsigned char frame_buf[MAX_FRAMES_PER_PACKET * 4]; - unsigned char frame_cnt = 0; - unsigned char prev_zone = 0; - unsigned char zone = 0; - unsigned char idx = 0; - - /*---------------------------------------------------------*\ - | TODO: Send packets with multiple LED frames | - \*---------------------------------------------------------*/ - for(std::size_t led_idx = 0; led_idx < leds.size(); led_idx++) - { - zone = ( leds[led_idx].value >> 8 ); - idx = ( leds[led_idx].value & 0xFF ); - - if((zone != prev_zone) && (frame_cnt != 0)) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - - frame_buf[(frame_cnt * 4) + 0] = idx; - frame_buf[(frame_cnt * 4) + 1] = RGBGetRValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 2] = RGBGetGValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 3] = RGBGetBValue(colors[led_idx]); - - frame_cnt++; - prev_zone = zone; - - if(frame_cnt == MAX_FRAMES_PER_PACKET) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - } - - if(frame_cnt != 0) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - } - - controller->Commit(); -} - -void RGBController_LogitechG810::DeviceUpdateZoneLEDs(int /*zone*/) -{ - DeviceUpdateLEDs(); -} - -void RGBController_LogitechG810::DeviceUpdateSingleLED(int led) -{ - unsigned char frame[4]; - unsigned char zone; - unsigned char idx; - - zone = ( leds[led].value >> 8 ); - idx = ( leds[led].value & 0xFF ); - - frame[0] = idx; - frame[1] = RGBGetRValue(colors[led]); - frame[2] = RGBGetGValue(colors[led]); - frame[3] = RGBGetBValue(colors[led]); - - controller->SetDirect(zone, 1, frame); - controller->Commit(); -} - -void RGBController_LogitechG810::DeviceUpdateMode() -{ - /*---------------------------------------------------------*\ - | Direct mode does not send a mode packet | - | Call UpdateLEDs to send direct packet | - \*---------------------------------------------------------*/ - if(active_mode == 0xFFFF) - { - UpdateLEDsInternal(); - return; - } - - unsigned char red = 0; - unsigned char grn = 0; - unsigned char blu = 0; - - if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) - { - red = RGBGetRValue(modes[active_mode].colors[0]); - grn = RGBGetGValue(modes[active_mode].colors[0]); - blu = RGBGetBValue(modes[active_mode].colors[0]); - } - - controller->SetMode(modes[active_mode].value, modes[active_mode].speed, red, grn, blu); -} diff --git a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.h b/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.h deleted file mode 100644 index 6764fead3..000000000 --- a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.h +++ /dev/null @@ -1,33 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechG810.h | -| | -| RGBController for Logitech G810 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 12 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include "RGBController.h" -#include "LogitechG810Controller.h" - -class RGBController_LogitechG810 : public RGBController -{ -public: - RGBController_LogitechG810(LogitechG810Controller* controller_ptr); - ~RGBController_LogitechG810(); - - void SetupZones(); - - void DeviceUpdateLEDs(); - void DeviceUpdateZoneLEDs(int zone); - void DeviceUpdateSingleLED(int led); - - void DeviceUpdateMode(); - -private: - LogitechG810Controller* controller; -}; diff --git a/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.cpp b/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.cpp deleted file mode 100644 index b1d8133a6..000000000 --- a/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechG910Controller.cpp | -| | -| Driver for Logitech G910 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 11 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include -#include "LogitechG910Controller.h" -#include "StringUtils.h" - -LogitechG910Controller::LogitechG910Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, char* path, std::string dev_name) -{ - dev_pkt_0x11 = dev_handle_0x11; - dev_pkt_0x12 = dev_handle_0x12; - location = path; - name = dev_name; -} - -LogitechG910Controller::~LogitechG910Controller() -{ - hid_close(dev_pkt_0x11); - hid_close(dev_pkt_0x12); -} - -std::string LogitechG910Controller::GetNameString() -{ - return(name); -} - -std::string LogitechG910Controller::GetLocationString() -{ - return("HID: " + location); -} - -std::string LogitechG910Controller::GetSerialString() -{ - wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev_pkt_0x11, serial_string, 128); - - if(ret != 0) - { - return(""); - } - - return(StringUtils::wstring_to_string(serial_string)); -} - -void LogitechG910Controller::Commit() -{ - SendCommit(); -} - -void LogitechG910Controller::SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - SendDirectFrame(zone, frame_count, frame_data); -} - -void LogitechG910Controller::SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - SendMode(LOGITECH_G910_ZONE_MODE_KEYBOARD, mode, speed, red, green, blue); - SendMode(LOGITECH_G910_ZONE_MODE_LOGO, mode, speed, red, green, blue); - - SendCommit(); -} - -/*-------------------------------------------------------------------------------------------------*\ -| Private packet sending functions. | -\*-------------------------------------------------------------------------------------------------*/ - -void LogitechG910Controller::SendCommit() -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Commit packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0F; - usb_buf[0x03] = 0x5F; - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechG910Controller::SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - unsigned char usb_buf[64]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x12; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0F; - usb_buf[0x03] = 0x3F; - usb_buf[0x05] = zone; - usb_buf[0x07] = frame_count; - - /*-----------------------------------------------------*\ - | Copy in frame data | - \*-----------------------------------------------------*/ - memcpy(&usb_buf[0x08], frame_data, frame_count * 4); - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x12, usb_buf, 64); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechG910Controller::SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x10; - usb_buf[0x03] = 0x3B; - usb_buf[0x04] = zone; - - usb_buf[0x05] = mode; - - usb_buf[0x06] = red; - usb_buf[0x07] = green; - usb_buf[0x08] = blue; - - speed = 100 * speed; - if(mode == LOGITECH_G910_MODE_CYCLE) - { - usb_buf[0x0B] = speed >> 8; - usb_buf[0x0C] = speed & 0xFF; - usb_buf[0x0D] = 0x64; - } - else if(mode == LOGITECH_G910_MODE_BREATHING) - { - usb_buf[0x09] = speed >> 8; - usb_buf[0x0A] = speed & 0xFF; - usb_buf[0x0C] = 0x64; - } - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} diff --git a/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.h b/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.h deleted file mode 100644 index 2a2550710..000000000 --- a/Controllers/LogitechController/LogitechG910Controller/LogitechG910Controller.h +++ /dev/null @@ -1,104 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechG910Controller.h | -| | -| Driver for Logitech G910 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 11 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include -#include -#include "RGBController.h" - -enum -{ - LOGITECH_G910_ZONE_MODE_KEYBOARD = 0x00, - LOGITECH_G910_ZONE_MODE_LOGO = 0x01, -}; - -enum -{ - LOGITECH_G910_ZONE_DIRECT_KEYBOARD = 0x01, - LOGITECH_G910_ZONE_DIRECT_GKEYS = 0x04, - LOGITECH_G910_ZONE_DIRECT_LOGO = 0x10, - LOGITECH_G910_ZONE_DIRECT_INDICATORS = 0x40, -}; - -enum -{ - LOGITECH_G910_MODE_OFF = 0x00, - LOGITECH_G910_MODE_STATIC = 0x01, - LOGITECH_G910_MODE_BREATHING = 0x02, - LOGITECH_G910_MODE_CYCLE = 0x03, - LOGITECH_G910_MODE_WAVE = 0x04, -}; - -/*---------------------------------------------------------------------------------------------*\ -| Speed is 1000 for fast and 20000 for slow. | -| Values are multiplied by 100 later to give lots of GUI steps. | -\*---------------------------------------------------------------------------------------------*/ -enum -{ - LOGITECH_G910_SPEED_SLOWEST = 0xC8, /* Slowest speed */ - LOGITECH_G910_SPEED_NORMAL = 0x32, /* Normal speed */ - LOGITECH_G910_SPEED_FASTEST = 0x0A, /* Fastest speed */ -}; - -class LogitechG910Controller -{ -public: - LogitechG910Controller(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, char* path, std::string dev_name); - ~LogitechG910Controller(); - - std::string GetLocationString(); - std::string GetNameString(); - std::string GetSerialString(); - - void Commit(); - - void SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - -private: - hid_device* dev_pkt_0x11; - hid_device* dev_pkt_0x12; - std::string location; - std::string name; - - void SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - - void SendCommit(); -}; diff --git a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp b/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp deleted file mode 100644 index 83bfe9832..000000000 --- a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp +++ /dev/null @@ -1,381 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechG910.cpp | -| | -| RGBController for Logitech G910 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 12 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include "RGBControllerKeyNames.h" -#include "RGBController_LogitechG910.h" - -//0xFFFFFFFF indicates an unused entry in matrix -#define NA 0xFFFFFFFF - -static unsigned int matrix_map[8][24] = - { { NA, 111, 112, 113, 114, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA }, - { 115, 37, NA, 54, 55, 56, 57, NA, 58, 59, 60, 61, NA, 62, 63, 64, 65, 66, 67, 68, NA, NA, NA, NA }, - { 106, 49, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, NA, 41, 42, 38, NA, 69, 70, 71, 79, 80, 81, 82 }, - { 107, 39, NA, 16, 22, 4, 17, NA, 19, 24, 20, 8, 14, 15, 43, 44, 45, 72, 73, 74, 91, 92, 93, 83 }, - { 108, 53, NA, 0, 18, 3, 5, NA, 6, 7, 9, 10, 11, 47, 48, 46, 36, NA, NA, NA, 88, 89, 90, NA }, - { 109, 99, 96, 25, 23, 2, 21, NA, 1, NA, 13, 12, 50, 51, 52, 103, NA, NA, 78, NA, 85, 86, 87, 84 }, - { 110, 98, 101, 100, NA, NA, NA, NA, 40, NA, NA, NA, NA, 104, 105, 97, 102, 76, 77, 75, 94, NA, 95, NA }, - { NA, NA, NA, 116, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } }; - -static const char* zone_names[] = -{ - ZONE_EN_KEYBOARD, -}; - -static zone_type zone_types[] = -{ - ZONE_TYPE_MATRIX, -}; - -static const unsigned int zone_sizes[] = -{ - 117, -}; - -typedef struct -{ - const char * name; - const unsigned char zone; - const unsigned char idx; -} led_type; - -static const led_type led_names[] = -{ - /* Key Label Zone, Index */ - { KEY_EN_A, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x04 }, - { KEY_EN_B, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x05 }, - { KEY_EN_C, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x06 }, - { KEY_EN_D, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x07 }, - { KEY_EN_E, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x08 }, - { KEY_EN_F, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x09 }, - { KEY_EN_G, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0A }, - { KEY_EN_H, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0B }, - { KEY_EN_I, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0C }, - { KEY_EN_J, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0D }, - { KEY_EN_K, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0E }, - { KEY_EN_L, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x0F }, - { KEY_EN_M, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x10 }, - { KEY_EN_N, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x11 }, - { KEY_EN_O, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x12 }, - { KEY_EN_P, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x13 }, - { KEY_EN_Q, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x14 }, - { KEY_EN_R, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x15 }, - { KEY_EN_S, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x16 }, - { KEY_EN_T, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x17 }, - { KEY_EN_U, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x18 }, - { KEY_EN_V, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x19 }, - { KEY_EN_W, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1A }, - { KEY_EN_X, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1B }, - { KEY_EN_Y, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1C }, - { KEY_EN_Z, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1D }, - { KEY_EN_1, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1E }, - { KEY_EN_2, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x1F }, - { KEY_EN_3, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x20 }, - { KEY_EN_4, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x21 }, - { KEY_EN_5, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x22 }, - { KEY_EN_6, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x23 }, - { KEY_EN_7, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x24 }, - { KEY_EN_8, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x25 }, - { KEY_EN_9, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x26 }, - { KEY_EN_0, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x27 }, - { KEY_EN_ANSI_ENTER, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x28 }, - { KEY_EN_ESCAPE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x29 }, - { KEY_EN_BACKSPACE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2A }, - { KEY_EN_TAB, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2B }, - { KEY_EN_SPACE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2C }, - { KEY_EN_MINUS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2D }, - { KEY_EN_EQUALS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2E }, - { KEY_EN_LEFT_BRACKET, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x2F }, - { KEY_EN_RIGHT_BRACKET, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x30 }, - { KEY_EN_ANSI_BACK_SLASH, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x31 },//ANSI only - { KEY_EN_POUND, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x32 },//ISO only - { KEY_EN_SEMICOLON, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x33 }, - { KEY_EN_QUOTE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x34 }, - { KEY_EN_BACK_TICK, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x35 }, - { KEY_EN_COMMA, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x36 }, - { KEY_EN_PERIOD, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x37 }, - { KEY_EN_FORWARD_SLASH, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x38 }, - { KEY_EN_CAPS_LOCK, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x39 }, - { KEY_EN_F1, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3A }, - { KEY_EN_F2, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3B }, - { KEY_EN_F3, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3C }, - { KEY_EN_F4, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3D }, - { KEY_EN_F5, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3E }, - { KEY_EN_F6, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x3F }, - { KEY_EN_F7, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x40 }, - { KEY_EN_F8, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x41 }, - { KEY_EN_F9, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x42 }, - { KEY_EN_F10, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x43 }, - { KEY_EN_F11, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x44 }, - { KEY_EN_F12, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x45 }, - { KEY_EN_PRINT_SCREEN, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x46 }, - { KEY_EN_SCROLL_LOCK, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x47 }, - { KEY_EN_PAUSE_BREAK, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x48 }, - { KEY_EN_INSERT, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x49 }, - { KEY_EN_HOME, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4A }, - { KEY_EN_PAGE_UP, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4B }, - { KEY_EN_DELETE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4C }, - { KEY_EN_END, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4D }, - { KEY_EN_PAGE_DOWN, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4E }, - { KEY_EN_RIGHT_ARROW, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x4F }, - { KEY_EN_LEFT_ARROW, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x50 }, - { KEY_EN_DOWN_ARROW, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x51 }, - { KEY_EN_UP_ARROW, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x52 }, - { KEY_EN_NUMPAD_LOCK, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x53 }, - { KEY_EN_NUMPAD_DIVIDE, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x54 }, - { KEY_EN_NUMPAD_TIMES, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x55 }, - { KEY_EN_NUMPAD_MINUS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x56 }, - { KEY_EN_NUMPAD_PLUS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x57 }, - { KEY_EN_NUMPAD_ENTER, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x58 }, - { KEY_EN_NUMPAD_1, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x59 }, - { KEY_EN_NUMPAD_2, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5A }, - { KEY_EN_NUMPAD_3, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5B }, - { KEY_EN_NUMPAD_4, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5C }, - { KEY_EN_NUMPAD_5, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5D }, - { KEY_EN_NUMPAD_6, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5E }, - { KEY_EN_NUMPAD_7, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x5F }, - { KEY_EN_NUMPAD_8, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x60 }, - { KEY_EN_NUMPAD_9, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x61 }, - { KEY_EN_NUMPAD_0, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x62 }, - { KEY_EN_NUMPAD_PERIOD, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x63 }, - { KEY_EN_ISO_BACK_SLASH, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x64 },//ISO only - { KEY_EN_MENU, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0x65 }, - { KEY_EN_LEFT_CONTROL, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE0 }, - { KEY_EN_LEFT_SHIFT, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE1 }, - { KEY_EN_LEFT_ALT, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE2 }, - { KEY_EN_LEFT_WINDOWS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE3 }, - { KEY_EN_RIGHT_CONTROL, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE4 }, - { KEY_EN_RIGHT_SHIFT, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE5 }, - { KEY_EN_RIGHT_ALT, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE6 }, - { KEY_EN_RIGHT_WINDOWS, LOGITECH_G910_ZONE_DIRECT_KEYBOARD, 0xE7 }, - { "Key: G1", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x01 }, - { "Key: G2", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x02 }, - { "Key: G3", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x03 }, - { "Key: G4", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x04 }, - { "Key: G5", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x05 }, - { "Key: G6", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x06 }, - { "Key: G7", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x07 }, - { "Key: G8", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x08 }, - { "Key: G9", LOGITECH_G910_ZONE_DIRECT_GKEYS, 0x09 }, - { "Logo", LOGITECH_G910_ZONE_DIRECT_LOGO, 0x01 }, - { "Nameplate", LOGITECH_G910_ZONE_DIRECT_LOGO, 0x02 }, -}; - -/**------------------------------------------------------------------*\ - @name Logitech G910 - @category Keyboard - @type USB - @save :robot: - @direct :white_check_mark: - @effects :white_check_mark: - @detectors DetectLogitechKeyboardG910 - @comment -\*-------------------------------------------------------------------*/ - -RGBController_LogitechG910::RGBController_LogitechG910(LogitechG910Controller* controller_ptr) -{ - controller = controller_ptr; - - name = controller->GetNameString(); - vendor = "Logitech"; - type = DEVICE_TYPE_KEYBOARD; - description = "Logitech Keyboard Device"; - location = controller->GetLocationString(); - serial = controller->GetSerialString(); - - mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); - - mode Static; - Static.name = "Static"; - Static.value = LOGITECH_G910_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Static.colors_min = 1; - Static.colors_max = 1; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.colors.resize(1); - modes.push_back(Static); - - mode Off; - Off.name = "Off"; - Off.value = LOGITECH_G910_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; - modes.push_back(Off); - - mode Cycle; - Cycle.name = "Cycle"; - Cycle.value = LOGITECH_G910_MODE_CYCLE; - Cycle.flags = MODE_FLAG_HAS_SPEED; - Cycle.color_mode = MODE_COLORS_NONE; - Cycle.speed_min = LOGITECH_G910_SPEED_SLOWEST; - Cycle.speed_max = LOGITECH_G910_SPEED_FASTEST; - Cycle.speed = LOGITECH_G910_SPEED_NORMAL; - modes.push_back(Cycle); - - mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = LOGITECH_G910_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED; - Breathing.colors_min = 1; - Breathing.colors_max = 1; - Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - Breathing.colors.resize(1); - Breathing.speed_min = LOGITECH_G910_SPEED_SLOWEST; - Breathing.speed_max = LOGITECH_G910_SPEED_FASTEST; - Breathing.speed = LOGITECH_G910_SPEED_NORMAL; - modes.push_back(Breathing); - - SetupZones(); -} - -RGBController_LogitechG910::~RGBController_LogitechG910() -{ - Shutdown(); - - delete controller; -} - -void RGBController_LogitechG910::SetupZones() -{ - /*---------------------------------------------------------*\ - | Set up zones | - \*---------------------------------------------------------*/ - unsigned int total_led_count = 0; - for(unsigned int zone_idx = 0; zone_idx < 1; zone_idx++) - { - zone new_zone; - new_zone.name = zone_names[zone_idx]; - new_zone.type = zone_types[zone_idx]; - new_zone.leds_min = zone_sizes[zone_idx]; - new_zone.leds_max = zone_sizes[zone_idx]; - new_zone.leds_count = zone_sizes[zone_idx]; - - if(zone_types[zone_idx] == ZONE_TYPE_MATRIX) - { - new_zone.matrix_map.Set(8, 24, (unsigned int *)&matrix_map); - } - - zones.push_back(new_zone); - - total_led_count += zone_sizes[zone_idx]; - } - - for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++) - { - led new_led; - new_led.name = led_names[led_idx].name; - new_led.value = ( led_names[led_idx].zone << 8 ) + led_names[led_idx].idx; - leds.push_back(new_led); - } - - SetupColors(); -} - -void RGBController_LogitechG910::DeviceUpdateLEDs() -{ - #define MAX_FRAMES_PER_PACKET 0x0E - - unsigned char frame_buf[MAX_FRAMES_PER_PACKET * 4]; - unsigned char frame_cnt = 0; - unsigned char prev_zone = 0; - unsigned char zone = 0; - unsigned char idx = 0; - - /*---------------------------------------------------------*\ - | TODO: Send packets with multiple LED frames | - \*---------------------------------------------------------*/ - for(std::size_t led_idx = 0; led_idx < leds.size(); led_idx++) - { - zone = ( leds[led_idx].value >> 8 ); - idx = ( leds[led_idx].value & 0xFF ); - - if((zone != prev_zone) && (frame_cnt != 0)) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - - frame_buf[(frame_cnt * 4) + 0] = idx; - frame_buf[(frame_cnt * 4) + 1] = RGBGetRValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 2] = RGBGetGValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 3] = RGBGetBValue(colors[led_idx]); - - frame_cnt++; - prev_zone = zone; - - if(frame_cnt == MAX_FRAMES_PER_PACKET) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - } - - if(frame_cnt != 0) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - } - - controller->Commit(); -} - -void RGBController_LogitechG910::DeviceUpdateZoneLEDs(int /*zone*/) -{ - DeviceUpdateLEDs(); -} - -void RGBController_LogitechG910::DeviceUpdateSingleLED(int led) -{ - unsigned char frame[4]; - unsigned char zone; - unsigned char idx; - - zone = ( leds[led].value >> 8 ); - idx = ( leds[led].value & 0xFF ); - - frame[0] = idx; - frame[1] = RGBGetRValue(colors[led]); - frame[2] = RGBGetGValue(colors[led]); - frame[3] = RGBGetBValue(colors[led]); - - controller->SetDirect(zone, 1, frame); - controller->Commit(); -} - -void RGBController_LogitechG910::DeviceUpdateMode() -{ - /*---------------------------------------------------------*\ - | Direct mode does not send a mode packet | - | Call UpdateLEDs to send direct packet | - \*---------------------------------------------------------*/ - if(active_mode == 0xFFFF) - { - UpdateLEDsInternal(); - return; - } - - unsigned char red = 0; - unsigned char grn = 0; - unsigned char blu = 0; - - if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) - { - red = RGBGetRValue(modes[active_mode].colors[0]); - grn = RGBGetGValue(modes[active_mode].colors[0]); - blu = RGBGetBValue(modes[active_mode].colors[0]); - } - - controller->SetMode(modes[active_mode].value, modes[active_mode].speed, red, grn, blu); -} diff --git a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.h b/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.h deleted file mode 100644 index 35b33e09f..000000000 --- a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.h +++ /dev/null @@ -1,33 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechG910.h | -| | -| RGBController for Logitech G910 Orion Spectrum | -| | -| Adam Honse (CalcProgrammer1) 12 Jun 2020 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include "RGBController.h" -#include "LogitechG910Controller.h" - -class RGBController_LogitechG910 : public RGBController -{ -public: - RGBController_LogitechG910(LogitechG910Controller* controller_ptr); - ~RGBController_LogitechG910(); - - void SetupZones(); - - void DeviceUpdateLEDs(); - void DeviceUpdateZoneLEDs(int zone); - void DeviceUpdateSingleLED(int led); - - void DeviceUpdateMode(); - -private: - LogitechG910Controller* controller; -}; diff --git a/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.cpp b/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.cpp deleted file mode 100644 index f3c94db91..000000000 --- a/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechGProController.cpp | -| | -| Driver for Logitech G Pro keyboard | -| | -| sanchezzzs 20 Oct 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include -#include "LogitechGProKeyboardController.h" -#include "StringUtils.h" - -LogitechGProKeyboardController::LogitechGProKeyboardController(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, std::string dev_name) -{ - dev_pkt_0x11 = dev_handle_0x11; - dev_pkt_0x12 = dev_handle_0x12; - name = dev_name; -} - -LogitechGProKeyboardController::~LogitechGProKeyboardController() -{ - hid_close(dev_pkt_0x11); - hid_close(dev_pkt_0x12); -} - -std::string LogitechGProKeyboardController::GetNameString() -{ - return(name); -} - -std::string LogitechGProKeyboardController::GetSerialString() -{ - wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev_pkt_0x11, serial_string, 128); - - if(ret != 0) - { - return(""); - } - - return(StringUtils::wstring_to_string(serial_string)); -} - -void LogitechGProKeyboardController::Commit() -{ - SendCommit(); -} - -void LogitechGProKeyboardController::SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - SendDirectFrame(zone, frame_count, frame_data); -} - -void LogitechGProKeyboardController::SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - SendMode(LOGITECH_GPRO_ZONE_MODE_KEYBOARD, mode, speed, red, green, blue); - SendMode(LOGITECH_GPRO_ZONE_MODE_LOGO, mode, speed, red, green, blue); - - SendCommit(); -} - -/*-------------------------------------------------------------------------------------------------*\ -| Private packet sending functions. | -\*-------------------------------------------------------------------------------------------------*/ - -void LogitechGProKeyboardController::SendCommit() -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Commit packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0C; - usb_buf[0x03] = 0x5D; - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechGProKeyboardController::SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ) -{ - unsigned char usb_buf[64]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x12; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0C; - usb_buf[0x03] = 0x3D; - usb_buf[0x05] = zone; - usb_buf[0x07] = frame_count; - - /*-----------------------------------------------------*\ - | Copy in frame data | - \*-----------------------------------------------------*/ - memcpy(&usb_buf[0x08], frame_data, frame_count * 4); - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x12, usb_buf, 64); - hid_read(dev_pkt_0x11, usb_buf, 20); -} - -void LogitechGProKeyboardController::SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ) -{ - unsigned char usb_buf[20]; - - /*-----------------------------------------------------*\ - | Zero out buffer | - \*-----------------------------------------------------*/ - memset(usb_buf, 0x00, sizeof(usb_buf)); - - /*-----------------------------------------------------*\ - | Set up Lighting Control packet | - \*-----------------------------------------------------*/ - usb_buf[0x00] = 0x11; - usb_buf[0x01] = 0xFF; - usb_buf[0x02] = 0x0D; - usb_buf[0x03] = 0x3D; - usb_buf[0x04] = zone; - - usb_buf[0x05] = mode; - - usb_buf[0x06] = red; - usb_buf[0x07] = green; - usb_buf[0x08] = blue; - - speed = 100 * speed; - if(mode == LOGITECH_GPRO_MODE_CYCLE) - { - usb_buf[0x0B] = speed >> 8; - usb_buf[0x0C] = speed & 0xFF; - usb_buf[0x0D] = 0x64; - } - else if(mode == LOGITECH_GPRO_MODE_BREATHING) - { - usb_buf[0x09] = speed >> 8; - usb_buf[0x0A] = speed & 0xFF; - usb_buf[0x0C] = 0x64; - } - - /*-----------------------------------------------------*\ - | Send packet | - \*-----------------------------------------------------*/ - hid_write(dev_pkt_0x11, usb_buf, 20); - hid_read(dev_pkt_0x11, usb_buf, 20); -} diff --git a/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.h b/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.h deleted file mode 100644 index d99787bf4..000000000 --- a/Controllers/LogitechController/LogitechGProKeyboardController/LogitechGProKeyboardController.h +++ /dev/null @@ -1,102 +0,0 @@ -/*---------------------------------------------------------*\ -| LogitechGProController.h | -| | -| Driver for Logitech G Pro keyboard | -| | -| sanchezzzs 20 Oct 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include -#include -#include "RGBController.h" - -enum -{ - LOGITECH_GPRO_ZONE_MODE_KEYBOARD = 0x00, - LOGITECH_GPRO_ZONE_MODE_LOGO = 0x01, -}; - -enum -{ - LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD = 0x01, - LOGITECH_GPRO_ZONE_DIRECT_MEDIA = 0x02, - LOGITECH_GPRO_ZONE_DIRECT_LOGO = 0x10, - LOGITECH_GPRO_ZONE_DIRECT_INDICATORS = 0x40, -}; - -enum -{ - LOGITECH_GPRO_MODE_OFF = 0x00, - LOGITECH_GPRO_MODE_STATIC = 0x01, - LOGITECH_GPRO_MODE_BREATHING = 0x02, - LOGITECH_GPRO_MODE_CYCLE = 0x03, - LOGITECH_GPRO_MODE_WAVE = 0x04, -}; - -/*---------------------------------------------------------------------------------------------*\ -| Speed is 1000 for fast and 20000 for slow. | -| Values are multiplied by 100 later to give lots of GUI steps. | -\*---------------------------------------------------------------------------------------------*/ -enum -{ - LOGITECH_GPRO_SPEED_SLOWEST = 0xC8, /* Slowest speed */ - LOGITECH_GPRO_SPEED_NORMAL = 0x32, /* Normal speed */ - LOGITECH_GPRO_SPEED_FASTEST = 0x0A, /* Fastest speed */ -}; - -class LogitechGProKeyboardController -{ -public: - LogitechGProKeyboardController(hid_device* dev_handle_0x11, hid_device* dev_handle_0x12, std::string dev_name); - ~LogitechGProKeyboardController(); - - std::string GetNameString(); - std::string GetSerialString(); - - void Commit(); - - void SetDirect - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SetMode - ( - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - -private: - hid_device* dev_pkt_0x11; - hid_device* dev_pkt_0x12; - std::string name; - - void SendDirectFrame - ( - unsigned char zone, - unsigned char frame_count, - unsigned char * frame_data - ); - - void SendMode - ( - unsigned char zone, - unsigned char mode, - unsigned short speed, - unsigned char red, - unsigned char green, - unsigned char blue - ); - - void SendCommit(); -}; diff --git a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp b/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp deleted file mode 100644 index a7b6fb75c..000000000 --- a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechGPro.cpp | -| | -| RGBController for Logitech G Pro keyboard | -| | -| sanchezzzs 20 Oct 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#include "RGBControllerKeyNames.h" -#include "RGBController_LogitechGProKeyboard.h" - -//0xFFFFFFFF indicates an unused entry in matrix -#define NA 0xFFFFFFFF - -static unsigned int matrix_map[7][19] = - { { 89, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 93, 92, NA, NA, 91, NA, 90 }, - { 37, NA, 54, 55, 56, 57, NA, 58, 59, 60, 61, NA, 62, 63, 64, 65, 66, 67, 68 }, - { 49, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, NA, 41, 42, 38, NA, 69, 70, 71 }, - { 39, NA, 16, 22, 4, 17, NA, 19, 24, 20, 8, 14, 15, 43, 44, 45, 72, 73, 74 }, - { 53, NA, 0, 18, 3, 5, NA, 6, 7, 9, 10, 11, 47, 48, 46, 36, NA, NA, NA }, - { 82, 79, 25, 23, 2, 21, NA, 1, NA, 13, 12, 50, 51, 52, 86, NA, NA, 78, NA }, - { 81, 84, 83, NA, NA, NA, NA, 40, NA, NA, NA, NA, 87, 88, 80, 85, 76, 77, 75 } }; - -static const char* zone_names[] = -{ - ZONE_EN_KEYBOARD, -}; - -static zone_type zone_types[] = -{ - ZONE_TYPE_MATRIX, -}; - -static const unsigned int zone_sizes[] = -{ - 94, -}; - -typedef struct -{ - const char * name; - const unsigned char zone; - const unsigned char idx; -} led_type; - -static const led_type led_names[] = -{ - /* Key Label Zone, Index */ - { KEY_EN_A, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x04 },//00 - { KEY_EN_B, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x05 }, - { KEY_EN_C, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x06 }, - { KEY_EN_D, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x07 }, - { KEY_EN_E, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x08 }, - { KEY_EN_F, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x09 }, - { KEY_EN_G, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0A }, - { KEY_EN_H, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0B }, - { KEY_EN_I, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0C }, - { KEY_EN_J, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0D }, - { KEY_EN_K, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0E },//10 - { KEY_EN_L, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x0F }, - { KEY_EN_M, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x10 }, - { KEY_EN_N, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x11 }, - { KEY_EN_O, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x12 }, - { KEY_EN_P, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x13 }, - { KEY_EN_Q, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x14 }, - { KEY_EN_R, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x15 }, - { KEY_EN_S, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x16 }, - { KEY_EN_T, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x17 }, - { KEY_EN_U, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x18 },//20 - { KEY_EN_V, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x19 }, - { KEY_EN_W, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1A }, - { KEY_EN_X, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1B }, - { KEY_EN_Y, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1C }, - { KEY_EN_Z, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1D }, - { KEY_EN_1, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1E }, - { KEY_EN_2, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x1F }, - { KEY_EN_3, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x20 }, - { KEY_EN_4, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x21 }, - { KEY_EN_5, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x22 },//30 - { KEY_EN_6, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x23 }, - { KEY_EN_7, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x24 }, - { KEY_EN_8, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x25 }, - { KEY_EN_9, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x26 }, - { KEY_EN_0, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x27 }, - { KEY_EN_ANSI_ENTER, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x28 }, - { KEY_EN_ESCAPE, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x29 }, - { KEY_EN_BACKSPACE, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2A }, - { KEY_EN_TAB, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2B }, - { KEY_EN_SPACE, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2C },//40 - { KEY_EN_MINUS, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2D }, - { KEY_EN_EQUALS, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2E }, - { KEY_EN_LEFT_BRACKET, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x2F }, - { KEY_EN_RIGHT_BRACKET, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x30 }, - { KEY_EN_ANSI_BACK_SLASH, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x31 },//ANSI only - { KEY_EN_POUND, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x32 },//ISO only - { KEY_EN_SEMICOLON, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x33 }, - { KEY_EN_QUOTE, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x34 }, - { KEY_EN_BACK_TICK, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x35 }, - { KEY_EN_COMMA, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x36 },//50 - { KEY_EN_PERIOD, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x37 }, - { KEY_EN_FORWARD_SLASH, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x38 }, - { KEY_EN_CAPS_LOCK, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x39 }, - { KEY_EN_F1, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3A }, - { KEY_EN_F2, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3B }, - { KEY_EN_F3, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3C }, - { KEY_EN_F4, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3D }, - { KEY_EN_F5, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3E }, - { KEY_EN_F6, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x3F }, - { KEY_EN_F7, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x40 },//60 - { KEY_EN_F8, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x41 }, - { KEY_EN_F9, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x42 }, - { KEY_EN_F10, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x43 }, - { KEY_EN_F11, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x44 }, - { KEY_EN_F12, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x45 }, - { KEY_EN_PRINT_SCREEN, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x46 }, - { KEY_EN_SCROLL_LOCK, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x47 }, - { KEY_EN_PAUSE_BREAK, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x48 }, - { KEY_EN_INSERT, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x49 }, - { KEY_EN_HOME, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4A },//70 - { KEY_EN_PAGE_UP, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4B }, - { KEY_EN_DELETE, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4C }, - { KEY_EN_END, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4D }, - { KEY_EN_PAGE_DOWN, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4E }, - { KEY_EN_RIGHT_ARROW, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x4F }, - { KEY_EN_LEFT_ARROW, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x50 }, - { KEY_EN_DOWN_ARROW, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x51 }, - { KEY_EN_UP_ARROW, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x52 }, - { KEY_EN_ISO_BACK_SLASH, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x64 },//ISO only - { KEY_EN_MENU, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0x65 },//80 - { KEY_EN_LEFT_CONTROL, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE0 }, - { KEY_EN_LEFT_SHIFT, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE1 }, - { KEY_EN_LEFT_ALT, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE2 }, - { KEY_EN_LEFT_WINDOWS, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE3 }, - { KEY_EN_RIGHT_CONTROL, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE4 }, - { KEY_EN_RIGHT_SHIFT, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE5 }, - { KEY_EN_RIGHT_ALT, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE6 }, - { KEY_EN_RIGHT_FUNCTION, LOGITECH_GPRO_ZONE_DIRECT_KEYBOARD, 0xE7 }, - { "Logo", LOGITECH_GPRO_ZONE_DIRECT_LOGO, 0x01 }, - { "Lighting", LOGITECH_GPRO_ZONE_DIRECT_INDICATORS, 0x01 },//90 - { "Game Mode", LOGITECH_GPRO_ZONE_DIRECT_INDICATORS, 0x02 }, - { "Caps Lock Indicator", LOGITECH_GPRO_ZONE_DIRECT_INDICATORS, 0x03 }, - { "Scroll Lock Indicator", LOGITECH_GPRO_ZONE_DIRECT_INDICATORS, 0x04 },//93 -}; - -/**------------------------------------------------------------------*\ - @name Logitech G Pro - @category Keyboard - @type USB - @save :robot: - @direct :white_check_mark: - @effects :white_check_mark: - @detectors DetectLogitechKeyboardGPro - @comment -\*-------------------------------------------------------------------*/ - -RGBController_LogitechGProKeyboard::RGBController_LogitechGProKeyboard(LogitechGProKeyboardController* controller_ptr) -{ - controller = controller_ptr; - - name = controller->GetNameString(); - vendor = "Logitech"; - type = DEVICE_TYPE_KEYBOARD; - description = "Logitech Keyboard Device"; - serial = controller->GetSerialString(); - - mode Direct; - Direct.name = "Direct"; - Direct.value = 0xFFFF; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; - modes.push_back(Direct); - - mode Static; - Static.name = "Static"; - Static.value = LOGITECH_GPRO_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Static.colors_min = 1; - Static.colors_max = 1; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.colors.resize(1); - modes.push_back(Static); - - mode Off; - Off.name = "Off"; - Off.value = LOGITECH_GPRO_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; - modes.push_back(Off); - - mode Cycle; - Cycle.name = "Cycle"; - Cycle.value = LOGITECH_GPRO_MODE_CYCLE; - Cycle.flags = MODE_FLAG_HAS_SPEED; - Cycle.color_mode = MODE_COLORS_NONE; - Cycle.speed_min = LOGITECH_GPRO_SPEED_SLOWEST; - Cycle.speed_max = LOGITECH_GPRO_SPEED_FASTEST; - Cycle.speed = LOGITECH_GPRO_SPEED_NORMAL; - modes.push_back(Cycle); - - mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = LOGITECH_GPRO_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED; - Breathing.colors_min = 1; - Breathing.colors_max = 1; - Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - Breathing.colors.resize(1); - Breathing.speed_min = LOGITECH_GPRO_SPEED_SLOWEST; - Breathing.speed_max = LOGITECH_GPRO_SPEED_FASTEST; - Breathing.speed = LOGITECH_GPRO_SPEED_NORMAL; - modes.push_back(Breathing); - - SetupZones(); -} - -RGBController_LogitechGProKeyboard::~RGBController_LogitechGProKeyboard() -{ - Shutdown(); - - delete controller; -} - -void RGBController_LogitechGProKeyboard::SetupZones() -{ - /*---------------------------------------------------------*\ - | Set up zones | - \*---------------------------------------------------------*/ - unsigned int total_led_count = 0; - for(unsigned int zone_idx = 0; zone_idx < 1; zone_idx++) - { - zone new_zone; - new_zone.name = zone_names[zone_idx]; - new_zone.type = zone_types[zone_idx]; - new_zone.leds_min = zone_sizes[zone_idx]; - new_zone.leds_max = zone_sizes[zone_idx]; - new_zone.leds_count = zone_sizes[zone_idx]; - - if(zone_types[zone_idx] == ZONE_TYPE_MATRIX) - { - new_zone.matrix_map.Set(7, 19, (unsigned int *)&matrix_map); - } - - zones.push_back(new_zone); - - total_led_count += zone_sizes[zone_idx]; - } - - for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++) - { - led new_led; - new_led.name = led_names[led_idx].name; - new_led.value = ( led_names[led_idx].zone << 8 ) + led_names[led_idx].idx; - leds.push_back(new_led); - } - - SetupColors(); -} - -void RGBController_LogitechGProKeyboard::DeviceUpdateLEDs() -{ - #define MAX_FRAMES_PER_PACKET 0x0E - - unsigned char frame_buf[MAX_FRAMES_PER_PACKET * 4]; - unsigned char frame_cnt = 0; - unsigned char prev_zone = 0; - unsigned char zone = 0; - unsigned char idx = 0; - - /*---------------------------------------------------------*\ - | TODO: Send packets with multiple LED frames | - \*---------------------------------------------------------*/ - for(std::size_t led_idx = 0; led_idx < leds.size(); led_idx++) - { - zone = ( leds[led_idx].value >> 8 ); - idx = ( leds[led_idx].value & 0xFF ); - - if((zone != prev_zone) && (frame_cnt != 0)) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - - frame_buf[(frame_cnt * 4) + 0] = idx; - frame_buf[(frame_cnt * 4) + 1] = RGBGetRValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 2] = RGBGetGValue(colors[led_idx]); - frame_buf[(frame_cnt * 4) + 3] = RGBGetBValue(colors[led_idx]); - - frame_cnt++; - prev_zone = zone; - - if(frame_cnt == MAX_FRAMES_PER_PACKET) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - frame_cnt = 0; - } - } - - if(frame_cnt != 0) - { - controller->SetDirect(prev_zone, frame_cnt, frame_buf); - } - - controller->Commit(); -} - -void RGBController_LogitechGProKeyboard::DeviceUpdateZoneLEDs(int /*zone*/) -{ - DeviceUpdateLEDs(); -} - -void RGBController_LogitechGProKeyboard::DeviceUpdateSingleLED(int led) -{ - unsigned char frame[4]; - unsigned char zone; - unsigned char idx; - - zone = ( leds[led].value >> 8 ); - idx = ( leds[led].value & 0xFF ); - - frame[0] = idx; - frame[1] = RGBGetRValue(colors[led]); - frame[2] = RGBGetGValue(colors[led]); - frame[3] = RGBGetBValue(colors[led]); - - controller->SetDirect(zone, 1, frame); - controller->Commit(); -} - -void RGBController_LogitechGProKeyboard::DeviceUpdateMode() -{ - /*---------------------------------------------------------*\ - | Direct mode does not send a mode packet | - | Call UpdateLEDs to send direct packet | - \*---------------------------------------------------------*/ - if(active_mode == 0xFFFF) - { - UpdateLEDsInternal(); - return; - } - - unsigned char red = 0; - unsigned char grn = 0; - unsigned char blu = 0; - - if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) - { - red = RGBGetRValue(modes[active_mode].colors[0]); - grn = RGBGetGValue(modes[active_mode].colors[0]); - blu = RGBGetBValue(modes[active_mode].colors[0]); - } - - controller->SetMode(modes[active_mode].value, modes[active_mode].speed, red, grn, blu); -} diff --git a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.h b/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.h deleted file mode 100644 index d9c0b5e99..000000000 --- a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.h +++ /dev/null @@ -1,33 +0,0 @@ -/*---------------------------------------------------------*\ -| RGBController_LogitechGPro.h | -| | -| RGBController for Logitech G Pro keyboard | -| | -| sanchezzzs 20 Oct 2021 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-or-later | -\*---------------------------------------------------------*/ - -#pragma once - -#include "RGBController.h" -#include "LogitechGProKeyboardController.h" - -class RGBController_LogitechGProKeyboard : public RGBController -{ -public: - RGBController_LogitechGProKeyboard(LogitechGProKeyboardController* controller_ptr); - ~RGBController_LogitechGProKeyboard(); - - void SetupZones(); - - void DeviceUpdateLEDs(); - void DeviceUpdateZoneLEDs(int zone); - void DeviceUpdateSingleLED(int led); - - void DeviceUpdateMode(); - -private: - LogitechGProKeyboardController* controller; -}; diff --git a/Controllers/LogitechController/LogitechHIDPP20Controller/RGBController_LogitechHIDPP20.cpp b/Controllers/LogitechController/LogitechHIDPP20Controller/RGBController_LogitechHIDPP20.cpp index 88a47190c..751f6fdde 100644 --- a/Controllers/LogitechController/LogitechHIDPP20Controller/RGBController_LogitechHIDPP20.cpp +++ b/Controllers/LogitechController/LogitechHIDPP20Controller/RGBController_LogitechHIDPP20.cpp @@ -804,9 +804,10 @@ static const keyboard_led g512_top_strip[] = | legacy map: the media cluster above the numpad (on/off | | backlight, not RGB; the firmware still advertises media | | keyType 0x02, see the C32B quirk) and the four small | -| mode keys left of G6, which nothing has identified yet. | -| If firmware enumerates any of these they surface in | -| Extras (suppression is off for this board). | +| mode keys left of G6. Painting the advertised extras | +| controls nothing (hardware-observed), so unclaimed ids | +| are suppressed as phantoms; the plugin's Show Unmapped | +| override surfaces them for auditing. | \*---------------------------------------------------------*/ static const keyboard_led g910_side_strip[] = { @@ -831,15 +832,15 @@ static const keyboard_led g910_side_strip[] = \*---------------------------------------------------------*/ static const Kb8080Strip known_kb_8080_strips[] = { - { 0xC331, true, g810_top_strip, 11, false }, /* G810 */ - { 0xC337, true, g810_top_strip, 11, false }, /* G810 */ - { 0xC333, true, g810_top_strip, 11, false }, /* G610 */ - { 0xC338, true, g810_top_strip, 11, false }, /* G610 */ + { 0xC331, true, g810_top_strip, 11, true }, /* G810 */ + { 0xC337, true, g810_top_strip, 11, true }, /* G810 */ + { 0xC333, true, g810_top_strip, 11, true }, /* G610 */ + { 0xC338, true, g810_top_strip, 11, true }, /* G610 */ { 0xC342, true, g512_top_strip, 2, true }, /* G512 */ { 0xC33C, true, g512_top_strip, 2, true }, /* G512 RGB */ - { 0xC32B, true, g910_side_strip, 11, false }, /* G910 Orion Spark */ - { 0xC335, true, g910_side_strip, 11, false }, /* G910 */ - { 0xC339, false, gpro_top_strip, 5, false }, /* G Pro */ + { 0xC32B, true, g910_side_strip, 11, true }, /* G910 Orion Spark */ + { 0xC335, true, g910_side_strip, 11, true }, /* G910 */ + { 0xC339, false, gpro_top_strip, 5, true }, /* G Pro */ }; static const Kb8080Strip* FindKb8080Strip(uint16_t pid_wired, uint16_t pid_wireless) @@ -988,6 +989,27 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont { const HIDPP20ZoneCluster& cluster = caps.zone_clusters[0]; + /*-------------------------------------------------*\ + | Per-LED effect colors: multi-cluster devices | + | whose only paint path is zone effects, one color | + | per cluster. Per-key devices take a single mode | + | color: the UI repaints per-key on any per-LED | + | mode set, which overwrites the zone effect. | + \*-------------------------------------------------*/ + const bool per_led_colors = (caps.zone_clusters.size() > 1) + && !caps.has_perkey + && !PerKey8080Capable(); + + /*-------------------------------------------------*\ + | 0x8070 keyboard firmware ignores the Cycle, Wave | + | and Breathing intensity byte (G810/G910 | + | hardware); the same slots drive brightness on | + | the mice. No slider for a dead control; the wire | + | still sends 100 in that slot. | + \*-------------------------------------------------*/ + const bool effect_brightness = !(caps.rgb_feature_page == HIDPP20_FEAT_COLOR_LED_EFFECTS + && caps.device_type == LOGITECH_DEVICE_TYPE_KEYBOARD); + for(size_t i = 0; i < cluster.effects.size(); i++) { const HIDPP20Effect& fx = cluster.effects[i]; @@ -1000,16 +1022,7 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont Static.name = "Static"; Static.value = fx.index; - /*-------------------------------------*\ - | Multi-cluster devices (mice with | - | logo/scroll/DPI) get per-LED colors | - | so each zone can be painted | - | independently in Static. Single- | - | cluster devices (keyboards, single- | - | zone mice) keep the single-color | - | MODE_COLORS_MODE_SPECIFIC UX. | - \*-------------------------------------*/ - if(caps.zone_clusters.size() > 1) + if(per_led_colors) { Static.flags = MODE_FLAG_HAS_PER_LED_COLOR; Static.color_mode = MODE_COLORS_PER_LED; @@ -1031,8 +1044,11 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont mode Cycle; Cycle.name = "Spectrum Cycle"; Cycle.value = fx.index; - Cycle.flags = MODE_FLAG_HAS_SPEED - | MODE_FLAG_HAS_BRIGHTNESS; + Cycle.flags = MODE_FLAG_HAS_SPEED; + if(effect_brightness) + { + Cycle.flags |= MODE_FLAG_HAS_BRIGHTNESS; + } Cycle.speed_min = HIDPP20_SPEED_SLIDER_MIN; Cycle.speed_max = HIDPP20_SPEED_SLIDER_MAX; Cycle.speed = 80; /* ~4.9s, lively medium */ @@ -1056,11 +1072,7 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont Breathing.brightness_max = 100; Breathing.brightness = 100; - /*-------------------------------------*\ - | See Static above, multi- | - | cluster gets per-LED colors. | - \*-------------------------------------*/ - if(caps.zone_clusters.size() > 1) + if(per_led_colors) { Breathing.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED @@ -1077,6 +1089,12 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; Breathing.colors.resize(1); } + + if(!effect_brightness) + { + Breathing.flags &= ~MODE_FLAG_HAS_BRIGHTNESS; + } + modes.push_back(Breathing); break; } @@ -1096,7 +1114,7 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont Visualizer.speed_max = HIDPP20_SPEED_SLIDER_MAX; Visualizer.speed = 80; /* ~4.9s, near the 5s firmware default */ - if(caps.zone_clusters.size() > 1) + if(per_led_colors) { Visualizer.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_SPEED; @@ -1120,8 +1138,11 @@ RGBController_LogitechHIDPP20::RGBController_LogitechHIDPP20(LogitechHIDPP20Cont mode Wave; Wave.name = "Color Wave"; Wave.value = fx.index; - Wave.flags = MODE_FLAG_HAS_SPEED - | MODE_FLAG_HAS_BRIGHTNESS; + Wave.flags = MODE_FLAG_HAS_SPEED; + if(effect_brightness) + { + Wave.flags |= MODE_FLAG_HAS_BRIGHTNESS; + } Wave.speed_min = HIDPP20_SPEED_SLIDER_MIN; Wave.speed_max = HIDPP20_SPEED_SLIDER_MAX; Wave.speed = 80; /* ~4.9s, lively medium */