diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp index 5b89c525..be085b50 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp @@ -23,6 +23,8 @@ AuraTUFKeyboardController::AuraTUFKeyboardController(hid_device* dev_handle, con location = path; device_pid = pid; rev_version = version; + + is_per_led_keyboard = (pid != AURA_TUF_K1_GAMING_PID && pid != AURA_TUF_K5_GAMING_PID); } AuraTUFKeyboardController::~AuraTUFKeyboardController() @@ -256,12 +258,12 @@ void AuraTUFKeyboardController::UpdateLeds usb_buf[0] = 0x00; usb_buf[1] = 0xC0; usb_buf[2] = 0x81; - usb_buf[3] = (device_pid != AURA_TUF_K1_GAMING_PID) ? leds : 0x00; + usb_buf[3] = leds; usb_buf[4] = 0x00; for(int j = 0; j < leds; j++) { - usb_buf[j * 4 + 5] = (device_pid != AURA_TUF_K1_GAMING_PID) ? colors[i * 15 + j].value : 0x00; + usb_buf[j * 4 + 5] = (is_per_led_keyboard) ? colors[i * 15 + j].value : 0x00; usb_buf[j * 4 + 6] = RGBGetRValue(colors[i * 15 + j].color); usb_buf[j * 4 + 7] = RGBGetGValue(colors[i * 15 + j].color); usb_buf[j * 4 + 8] = RGBGetBValue(colors[i * 15 + j].color); @@ -349,7 +351,7 @@ void AuraTUFKeyboardController::UpdateDevice usb_buf[0x07] = color_mode; usb_buf[0x08] = direction; - if(device_pid != AURA_TUF_K1_GAMING_PID) + if(is_per_led_keyboard) { usb_buf[0x09] = 0x02; @@ -390,16 +392,35 @@ void AuraTUFKeyboardController::UpdateDevice } else { - /*-----------------------------------------------------*\ - | Loop over Color1, Color2 and Background if there | - \*-----------------------------------------------------*/ - for(unsigned int i = 0; i != colors.size(); i++) + /*-----------------------------------------------------------------*\ + | Only handles K5 Rainbow. | + | K1 is filtered out earlier and is executed in `UpdateK1Wave()` | + \*-----------------------------------------------------------------*/ + if(mode == AURA_KEYBOARD_MODE_WAVE) { - if(colors[i]) + usb_buf[0x09] = 0x05; + + for(unsigned int i = 0; i < 5; i ++) { - usb_buf[ 9 + i * 3] = RGBGetRValue(colors[i]); - usb_buf[10 + i * 3] = RGBGetGValue(colors[i]); - usb_buf[11 + i * 3] = RGBGetBValue(colors[i]); + usb_buf[10 + i * 4] = i + 1; + usb_buf[11 + i * 4] = RGBGetRValue(colors[i]); + usb_buf[12 + i * 4] = RGBGetGValue(colors[i]); + usb_buf[13 + i * 4] = RGBGetBValue(colors[i]); + } + } + else + { + /*-----------------------------------------------------*\ + | Loop over Color1, Color2 and Background if there | + \*-----------------------------------------------------*/ + for(unsigned int i = 0; i != colors.size(); i++) + { + if(colors[i]) + { + usb_buf[ 9 + i * 3] = RGBGetRValue(colors[i]); + usb_buf[10 + i * 3] = RGBGetGValue(colors[i]); + usb_buf[11 + i * 3] = RGBGetBValue(colors[i]); + } } } } diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h index a5898f9b..c6edb1fa 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h @@ -37,6 +37,7 @@ enum AURA_ROG_FALCHION_WIRELESS_PID = 0x193E, AURA_TUF_K1_GAMING_PID = 0x1945, AURA_TUF_K3_GAMING_PID = 0x194B, + AURA_TUF_K5_GAMING_PID = 0x1899, AURA_TUF_K7_GAMING_PID = 0x18AA, AURA_ROG_CLAYMORE_PID = 0x184D, }; @@ -97,6 +98,7 @@ public: void ClearResponses(); uint16_t device_pid; + bool is_per_led_keyboard; private: hid_device* dev; diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 871018f3..f04543fd 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -53,6 +53,7 @@ #define AURA_ROG_CLAYMORE_PID 0x184D #define AURA_TUF_K1_GAMING_PID 0x1945 #define AURA_TUF_K3_GAMING_PID 0x194B +#define AURA_TUF_K5_GAMING_PID 0x1899 #define AURA_TUF_K7_GAMING_PID 0x18AA /*-----------------------------------------------------------------*\ @@ -320,6 +321,7 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Falchion (Wired)", DetectAs REGISTER_HID_DETECTOR_IP("ASUS ROG Falchion (Wireless)", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_FALCHION_WIRELESS_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K1", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K1_GAMING_PID, 2, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K3", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K3_GAMING_PID, 1, 0xFF00); +REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K5", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K5_GAMING_PID, 2, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K7", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K7_GAMING_PID, 1, 0xFF00); /*-----------------------------------------------------------------*\ diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp index 3e24ca12..aa116907 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp @@ -55,11 +55,21 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont AURA_KEYBOARD_SPEED_MAX = 0; AURA_KEYBOARD_SPEED_DEFAULT = 8; break; + case AURA_TUF_K5_GAMING_PID: + AURA_KEYBOARD_SPEED_MIN = 63; + AURA_KEYBOARD_SPEED_MAX = 0; + AURA_KEYBOARD_SPEED_DEFAULT = 31; + break; case AURA_ROG_FALCHION_WIRED_PID: case AURA_ROG_FALCHION_WIRELESS_PID: AURA_KEYBOARD_SPEED_MIN = 255; AURA_KEYBOARD_SPEED_MAX = 0; AURA_KEYBOARD_SPEED_DEFAULT = 8; + break; + default: + AURA_KEYBOARD_SPEED_MIN = 15; + AURA_KEYBOARD_SPEED_MAX = 0; + AURA_KEYBOARD_SPEED_DEFAULT = 8; } mode Direct; @@ -86,7 +96,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont Breathing.name = "Breathing"; Breathing.value = AURA_KEYBOARD_MODE_BREATHING; Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; - if(pid != AURA_TUF_K1_GAMING_PID) Breathing.flags |= MODE_FLAG_HAS_RANDOM_COLOR; + if(controller->is_per_led_keyboard) Breathing.flags |= MODE_FLAG_HAS_RANDOM_COLOR; Breathing.speed_min = AURA_KEYBOARD_SPEED_MIN; Breathing.speed_max = AURA_KEYBOARD_SPEED_MAX; @@ -117,7 +127,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont Wave.name = "Rainbow Wave"; Wave.value = AURA_KEYBOARD_MODE_WAVE; Wave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; - if(pid != AURA_TUF_K1_GAMING_PID) Wave.flags |= MODE_FLAG_HAS_DIRECTION_UD; + if(controller->is_per_led_keyboard) Wave.flags |= MODE_FLAG_HAS_DIRECTION_UD; Wave.speed_min = AURA_KEYBOARD_SPEED_MIN; Wave.speed_max = AURA_KEYBOARD_SPEED_MAX; @@ -128,7 +138,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont Wave.direction = MODE_DIRECTION_LEFT; Wave.color_mode = MODE_COLORS_MODE_SPECIFIC; - if(pid == AURA_TUF_K1_GAMING_PID) + if(!controller->is_per_led_keyboard) { Wave.colors_min = 5; Wave.colors_max = 5; @@ -142,7 +152,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont Wave.colors.resize(Wave.colors_max); modes.push_back(Wave); - if(pid != AURA_TUF_K1_GAMING_PID) + if(controller->is_per_led_keyboard) { mode Reactive; Reactive.name = "Reactive"; @@ -413,6 +423,7 @@ void RGBController_AuraTUFKeyboard::SetupZones() } break; case AURA_TUF_K1_GAMING_PID: + case AURA_TUF_K5_GAMING_PID: keyboard_ptr = &AsusTufK1Layouts; break; default: @@ -487,7 +498,7 @@ void RGBController_AuraTUFKeyboard::UpdateZoneLEDs(int /*zone*/) void RGBController_AuraTUFKeyboard::UpdateSingleLED(int led) { - if(pid == AURA_TUF_K1_GAMING_PID) + if(!controller->is_per_led_keyboard) { return DeviceUpdateLEDs(); } @@ -533,7 +544,7 @@ void RGBController_AuraTUFKeyboard::DeviceUpdateMode() case AURA_KEYBOARD_MODE_STARRY_NIGHT: case AURA_KEYBOARD_MODE_CURRENT: case AURA_KEYBOARD_MODE_RAIN_DROP: - if(pid == AURA_TUF_K1_GAMING_PID && modes[active_mode].colors.size() > 1) + if(!controller->is_per_led_keyboard && modes[active_mode].colors.size() > 1) { color_mode = 1; break;