diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp index f0bb1a72..749f55c9 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include AuraTUFKeyboardController::AuraTUFKeyboardController(hid_device* dev_handle, const char* path) { @@ -36,7 +36,12 @@ std::string AuraTUFKeyboardController::GetDeviceLocation() std::string AuraTUFKeyboardController::GetSerialString() { wchar_t serial_string[128]; - hid_get_serial_number_string(dev, serial_string, 128); + int ret = hid_get_serial_number_string(dev, serial_string, 128); + + if(ret != 0) + { + return(""); + } std::wstring return_wstring = serial_string; std::string return_string(return_wstring.begin(), return_wstring.end()); @@ -44,6 +49,53 @@ std::string AuraTUFKeyboardController::GetSerialString() return(return_string); } +std::string AuraTUFKeyboardController::GetVersion() +{ + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x12; + usb_buf[0x02] = 0x00; + + hid_write(dev, usb_buf, 65); + + unsigned char usb_buf_out[65]; + hid_read(dev, usb_buf_out, 65); + + char version[9]; + snprintf(version, 9, "%02X.%02X.%02X", usb_buf_out[5], usb_buf_out[6], usb_buf_out[7]); + return std::string(version); +} + +int AuraTUFKeyboardController::GetLayout() +{ + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x12; + usb_buf[0x02] = 0x12; + + hid_write(dev, usb_buf, 65); + + unsigned char usb_buf_out[65]; + hid_read(dev, usb_buf_out, 65); + + return(usb_buf_out[4] * 100 + usb_buf_out[5]); +} + +void AuraTUFKeyboardController::SaveMode() +{ + unsigned char usb_save_buf[65]; + + memset(usb_save_buf, 0x00, sizeof(usb_save_buf)); + + usb_save_buf[0x00] = 0x00; + usb_save_buf[0x01] = 0x50; + usb_save_buf[0x02] = 0x55; + + hid_write(dev, usb_save_buf, 65); +} + void AuraTUFKeyboardController::UpdateSingleLed ( int led, @@ -141,7 +193,8 @@ void AuraTUFKeyboardController::UpdateDevice std::vector colors, unsigned char dir, unsigned char color_mode, - unsigned char speed + unsigned char speed, + unsigned char brightness ) { unsigned char usb_buf[65]; @@ -154,21 +207,21 @@ void AuraTUFKeyboardController::UpdateDevice usb_buf[0x03] = mode; usb_buf[0x04] = 0x00; usb_buf[0x05] = speed; - usb_buf[0x06] = 0x64; + usb_buf[0x06] = brightness; usb_buf[0x07] = color_mode; usb_buf[0x08] = dir; usb_buf[0x09] = 0x02; - if(mode == 4 || mode == 5) - { - /*-----------------------------------------------------*\ + if(mode == 4 || mode == 5) + { + /*-----------------------------------------------------*\ | If mode is Rainbow or Ripple | - \*-----------------------------------------------------*/ - usb_buf[0x0A] = colors.size(); + \*-----------------------------------------------------*/ + usb_buf[0x0A] = colors.size(); - /*-----------------------------------------------------*\ - | Loop over every color given | - \*-----------------------------------------------------*/ + /*-----------------------------------------------------*\ + | Loop over every color given | + \*-----------------------------------------------------*/ for(unsigned int i = 0; i / 4 < colors.size(); i += 4) { if(colors[i / 4]) @@ -179,13 +232,13 @@ void AuraTUFKeyboardController::UpdateDevice usb_buf[14 + i] = RGBGetBValue(colors[i/4]); } } - } + } else { - /*-----------------------------------------------------*\ - | Loop over Color1, Color2 and Background if there | - \*-----------------------------------------------------*/ - for(unsigned int i = 0; i / 3 != colors.size(); i += 3) + /*-----------------------------------------------------*\ + | Loop over Color1, Color2 and Background if there | + \*-----------------------------------------------------*/ + for(unsigned int i = 0; i / 3 != colors.size(); i += 3) { if(colors[i / 3]) { @@ -194,25 +247,28 @@ void AuraTUFKeyboardController::UpdateDevice usb_buf[12 + i] = RGBGetBValue(colors[i/3]); } } - - } + + } /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, usb_buf, 65); - - /*-----------------------------------------------------*\ - | Set up and send packet save Packet | - \*-----------------------------------------------------*/ - unsigned char usb_save_buf[65]; - - memset(usb_save_buf, 0x00, sizeof(usb_save_buf)); - - usb_save_buf[0x00] = 0x00; - usb_save_buf[0x01] = 0x50; - usb_save_buf[0x02] = 0x55; - - hid_write(dev, usb_save_buf, 65); +} + +void AuraTUFKeyboardController::AwaitResponse() +{ + unsigned char usb_buf_out[65]; + hid_read(dev, usb_buf_out, 65); +} + +void AuraTUFKeyboardController::ClearResponses() +{ + int result = 1; + unsigned char usb_buf_flush[65]; + while(result > 0) + { + result = hid_read_timeout(dev, usb_buf_flush, 65, 0); + } } diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h index 85bb7f9c..a631ead6 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h @@ -8,6 +8,7 @@ \*-----------------------------------------*/ #include "RGBController.h" +#include "AsusAuraTUFKeyboardLayouts.h" #include #include @@ -46,6 +47,9 @@ public: std::string GetDeviceLocation(); std::string GetSerialString(); + std::string GetVersion(); + int GetLayout(); + void SaveMode(); void UpdateSingleLed ( @@ -55,7 +59,7 @@ public: unsigned char blue ); - void UpdateLeds + void UpdateLeds ( std::vector colors ); @@ -66,8 +70,11 @@ public: std::vector colors, unsigned char dir, unsigned char color_mode, - unsigned char speed + unsigned char speed, + unsigned char brightness ); + void AwaitResponse(); + void ClearResponses(); private: hid_device* dev; diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h new file mode 100644 index 00000000..d8ac729b --- /dev/null +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h @@ -0,0 +1,411 @@ +/*-----------------------------------------*\ +| AsusAuraTUFKeyboardController.h | +| | +| Definitions and types for ASUS Aura | +| USB RGB lighting controller | +| | +| Mola19 10/02/2021 | +\*-----------------------------------------*/ + +#include +#include +#include "RGBController.h" + +#pragma once + +enum +{ + ASUS_TUF_K7_LAYOUT_CA = 1, + ASUS_TUF_K7_LAYOUT_AR = 2, + ASUS_TUF_K7_LAYOUT_DE = 3, + ASUS_TUF_K7_LAYOUT_UK = 4, + ASUS_TUF_K7_LAYOUT_FR = 5, + ASUS_TUF_K7_LAYOUT_CN = 6, + ASUS_TUF_K7_LAYOUT_HU = 7, + ASUS_TUF_K7_LAYOUT_IT = 8, + ASUS_TUF_K7_LAYOUT_TH = 9, + ASUS_TUF_K7_LAYOUT_UA = 10, + ASUS_TUF_K7_LAYOUT_NO = 11, + ASUS_TUF_K7_LAYOUT_PT = 12, + ASUS_TUF_K7_LAYOUT_HE = 13, + ASUS_TUF_K7_LAYOUT_RU = 14, + ASUS_TUF_K7_LAYOUT_ES = 15, + ASUS_TUF_K7_LAYOUT_TW = 16, + ASUS_TUF_K7_LAYOUT_US = 17, + ASUS_TUF_K7_LAYOUT_TR = 18, + ASUS_TUF_K7_LAYOUT_CZ = 19, + ASUS_TUF_K7_LAYOUT_BE = 20, + ASUS_TUF_K7_LAYOUT_JP = 21, + ASUS_TUF_K7_LAYOUT_KR = 22, + ASUS_TUF_K7_LAYOUT_IS = 23, + ASUS_TUF_K7_LAYOUT_WB = 24, + ASUS_TUF_K7_LAYOUT_SW_CH = 25 +}; + +#define NA 0xFFFFFFFF + +typedef struct +{ + unsigned int * matrix_map; + std::vector led_names; +} layout_type; + + +static unsigned int ASUS_TUF_K7_LAYOUT_KEYS_104[6][23] = { + { 0, NA, 18, 24, 30, 36, NA, 48, 54, 60, 66, 72, 78, 84, 90, NA, 96, 102, 108, NA, NA, NA, NA }, + { 1, 13, 19, 25, 31, 37, 43, 49, 55, 61, 67, 73, 79, 91, NA, NA, 97, 103, 109, 115, 121, 127, 133 }, + { 2, NA, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, 92, NA, 98, 104, 110, 116, 122, 128, 134 }, + { 3, NA, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, NA, 93, NA, NA, NA, NA, 117, 123, 129, NA }, + { 4, NA, 16, 22, 28, 34, 40, 46, 52, 58, 64, 70, NA, 94, NA, NA, NA, 106, NA, 118, 124, 130, 136 }, + { 5, 11, 17, NA, NA, NA, 41, NA, NA, NA, 59, 71, 77, NA, 95, NA, 101, 107, 113, 119, NA, 131, NA } +}; + +static unsigned int ASUS_TUF_K7_LAYOUT_KEYS_105[6][23] = { + { 0, NA, 18, 24, 30, 36, NA, 48, 54, 60, 66, 72, 78, 84, 90, NA, 96, 102, 108, NA, NA, NA, NA }, + { 1, 13, 19, 25, 31, 37, 43, 49, 55, 61, 67, 73, 79, 91, NA, NA, 97, 103, 109, 115, 121, 127, 133 }, + { 2, NA, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, NA, NA, 98, 104, 110, 116, 122, 128, 134 }, + { 3, NA, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 93, NA, NA, NA, NA, 117, 123, 129, NA }, + { 4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 64, 70, NA, 94, NA, NA, NA, 106, NA, 118, 124, 130, 136 }, + { 5, 11, 17, NA, NA, NA, 41, NA, NA, NA, 59, 71, 77, NA, 95, NA, 101, 107, 113, 119, NA, 131, NA } +}; + + +static std::map AsusTUFK7Layouts = +{ + { + ASUS_TUF_K7_LAYOUT_UK, + { + (unsigned int *) ASUS_TUF_K7_LAYOUT_KEYS_105, + { + "Key: Escape", + "Key: `", + "Key: Tab", + "Key: Caps Lock", + "Key: Left Shift", + "Key: Left Control", + + "Unused", + "Unused", + "Unused", + "Unused", + "Key: \\", + "Key: Left Windows", + + "Unused", + "Key: 1", + "Key: Q", + "Key: A", + "Key: Z", + "Key: Left Alt", + + "Key: F1", + "Key: 2", + "Key: W", + "Key: S", + "Key: X", + "Unused", + + "Key: F2", + "Key: 3", + "Key: E", + "Key: D", + "Key: C", + "Unused", + + "Key: F3", + "Key: 4", + "Key: R", + "Key: F", + "Key: V", + "Unused", + + "Key: F4", + "Key: 5", + "Key: T", + "Key: G", + "Key: B", + "Key: Space", + + "Unused", + "Key: 6", + "Key: Y", + "Key: H", + "Key: N", + "Unused", + + "Key: F5", + "Key: 7", + "Key: U", + "Key: J", + "Key: M", + "Unused", + + "Key: F6", + "Key: 8", + "Key: I", + "Key: K", + "Key: ,", + "Key: Right Alt", + + "Key: F7", + "Key: 9", + "Key: O", + "Key: L", + "Key: .", + "Unused", + + "Key: F8", + "Key: 0", + "Key: P", + "Key: ;", + "Key: /", + "Key: Right Fn", + + "Key: F9", + "Key: -", + "Key: [", + "Key: '", + "Unused", + "Key: Menu", + + "Key: F10", + "Key: =", + "Key: ]", + "Key: #", + "Unused", + "Unused", + + "Key: F11", + "Unused", + "Unused", + "Unused", + "Unused", + "Unused", + + "Key: F12", + "Key: Backspace", + "Unused", + "Key: Enter", + "Key: Right Shift", + "Key: Right Control", + + "Key: Print Screen", + "Key: Insert", + "Key: Delete", + "Unused", + "Unused", + "Key: Left Arrow", + + "Key: Scroll Lock", + "Key: Home", + "Key: End", + "Unused", + "Key: Up Arrow", + "Key: Down Arrow", + + "Key: Pause/Break", + "Key: Page Up", + "Key: Page Down", + "Unused", + "Unused", + "Key: Right Arrow", + + "Unused", + "Key: Num Lock", + "Key: Number Pad 7", + "Key: Number Pad 4", + "Key: Number Pad 1", + "Key: Number Pad 0", + + "Unused", + "Key: Number Pad /", + "Key: Number Pad 8", + "Key: Number Pad 5", + "Key: Number Pad 2", + "Unused", + + "Unused", + "Key: Number Pad *", + "Key: Number Pad 9", + "Key: Number Pad 6", + "Key: Number Pad 3", + "Key: Number Pad ,", + + "Unused", + "Key: Number Pad -", + "Key: Number Pad +", + "Unused", + "Key: Number Pad Enter", + "Unused", + } + } + }, + { + ASUS_TUF_K7_LAYOUT_US, + { + (unsigned int *) ASUS_TUF_K7_LAYOUT_KEYS_104, + { + "Key: Escape", + "Key: `", + "Key: Tab", + "Key: Caps Lock", + "Key: Left Shift", + "Key: Left Control", + + "Unused", + "Unused", + "Unused", + "Unused", + "Unused", + "Key: Left Windows", + + "Unused", + "Key: 1", + "Key: Q", + "Key: A", + "Key: Z", + "Key: Left Alt", + + "Key: F1", + "Key: 2", + "Key: W", + "Key: S", + "Key: X", + "Unused", + + "Key: F2", + "Key: 3", + "Key: E", + "Key: D", + "Key: C", + "Unused", + + "Key: F3", + "Key: 4", + "Key: R", + "Key: F", + "Key: V", + "Unused", + + "Key: F4", + "Key: 5", + "Key: T", + "Key: G", + "Key: B", + "Key: Space", + + "Unused", + "Key: 6", + "Key: Y", + "Key: H", + "Key: N", + "Unused", + + "Key: F5", + "Key: 7", + "Key: U", + "Key: J", + "Key: M", + "Unused", + + "Key: F6", + "Key: 8", + "Key: I", + "Key: K", + "Key: ,", + "Key: Right Alt", + + "Key: F7", + "Key: 9", + "Key: O", + "Key: L", + "Key: .", + "Unused", + + "Key: F8", + "Key: 0", + "Key: P", + "Key: ;", + "Key: /", + "Key: Right Fn", + + "Key: F9", + "Key: -", + "Key: [", + "Key: '", + "Unused", + "Key: Menu", + + "Key: F10", + "Key: =", + "Key: ]", + "Unused", + "Unused", + "Unused", + + "Key: F11", + "Unused", + "Unused", + "Unused", + "Unused", + "Unused", + + "Key: F12", + "Key: Backspace", + "Key: \\", + "Key: Enter", + "Key: Right Shift", + "Key: Right Control", + + "Key: Print Screen", + "Key: Insert", + "Key: Delete", + "Unused", + "Unused", + "Key: Left Arrow", + + "Key: Scroll Lock", + "Key: Home", + "Key: End", + "Unused", + "Key: Up Arrow", + "Key: Down Arrow", + + "Key: Pause/Break", + "Key: Page Up", + "Key: Page Down", + "Unused", + "Unused", + "Key: Right Arrow", + + "Unused", + "Key: Num Lock", + "Key: Number Pad 7", + "Key: Number Pad 4", + "Key: Number Pad 1", + "Key: Number Pad 0", + + "Unused", + "Key: Number Pad /", + "Key: Number Pad 8", + "Key: Number Pad 5", + "Key: Number Pad 2", + "Unused", + + "Unused", + "Key: Number Pad *", + "Key: Number Pad 9", + "Key: Number Pad 6", + "Key: Number Pad 3", + "Key: Number Pad ,", + + "Unused", + "Key: Number Pad -", + "Key: Number Pad +", + "Unused", + "Key: Number Pad Enter", + "Unused", + } + } + }, +}; diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp index f6758129..69ef6398 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp @@ -9,195 +9,7 @@ #include "RGBController_AsusAuraTUFKeyboard.h" #include - -#define NA 0xFFFFFFFF - -static unsigned int matrix_map[6][23] = - { { 0, NA, 18, 24, 30, 36, NA, 48, 54, 60, 66, 72, 78, 84, 90, NA, 96, 102, 108, NA, NA, NA, NA }, - { 1, 13, 19, 25, 31, 37, 43, 49, 55, 61, 67, 73, 79, 91, NA, NA, 97, 103, 109, 115, 121, 127, 133 }, - { 2, NA, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, NA, NA, 98, 104, 110, 116, 122, 128, 134 }, - { 3, NA, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 93, NA, NA, NA, NA, 117, 123, 129, NA }, - { 4, 10, 16, 22, 28, 34, 40, 46, 52, 58, 64, 70, NA, 94, NA, NA, NA, 106, NA, 118, 124, 130, 136 }, - { 5, 11, 17, NA, NA, NA, 41, NA, NA, NA, 59, 71, 77, NA, 95, NA, 101, 107, 113, 119, NA, 131, NA } }; - -static const char* zone_names[] = -{ - "Keyboard" -}; - -static zone_type zone_types[] = -{ - ZONE_TYPE_MATRIX, -}; - -static const unsigned int zone_sizes[] = -{ - 138 -}; - -static const char *led_names[] = -{ - "Key: Escape", - "Key: ^", - "Key: Tab", - "Key: Caps Lock", - "Key: Left Shift", - "Key: Left Control", - - "Unused", - "Unused", - "Unused", - "Unused", - "Key: <", - "Key: Left Windows", - - "Unused", - "Key: 1", - "Key: Q", - "Key: A", - "Key: Y", - "Key: Left Alt", - - "Key: F1", - "Key: 2", - "Key: W", - "Key: S", - "Key: X", - "Unused", - - "Key: F2", - "Key: 3", - "Key: E", - "Key: D", - "Key: C", - "Unused", - - "Key: F3", - "Key: 4", - "Key: R", - "Key: F", - "Key: V", - "Unused", - - "Key: F4", - "Key: 5", - "Key: T", - "Key: G", - "Key: B", - "Key: Space", - - "Unused", - "Key: 6", - "Key: Z", - "Key: H", - "Key: N", - "Unused", - - "Key: F5", - "Key: 7", - "Key: U", - "Key: J", - "Key: M", - "Unused", - - "Key: F6", - "Key: 8", - "Key: I", - "Key: K", - "Key: ,", - "Key: Right Alt", - - "Key: F7", - "Key: 9", - "Key: O", - "Key: L", - "Key: .", - "Unused", - - "Key: F8", - "Key: 0", - "Key: P", - "Key: Ö", - "Key: -", - "Key: Right Fn", - - "Key: F9", - "Key: ß", - "Key: Ü", - "Key: Ä", - "Unused", - "Key: Menu", - - "Key: F10", - "Key: ´", - "Key: +", - "Key: #", - "Unused", - "Unused", - - "Key: F11", - "Unused", - "Unused", - "Unused", - "Unused", - "Unused", - - "Key: F12", - "Key: Backspace", - "Unused", - "Key: Enter", - "Key: Right Shift", - "Key: Right Control", - - "Key: Print Screen", - "Key: Insert", - "Key: Delete", - "Unused", - "Unused", - "Key: Left Arrow", - - "Key: Scroll Lock", - "Key: Home", - "Key: End", - "Unused", - "Key: Up Arrow", - "Key: Down Arrow", - - "Key: Pause/Break", - "Key: Page Up", - "Key: Page Down", - "Unused", - "Unused", - "Key: Right Arrow", - - "Unused", - "Key: Num Lock", - "Key: Number Pad 7", - "Key: Number Pad 4", - "Key: Number Pad 1", - "Key: Number Pad 0", - - "Unused", - "Key: Number Pad /", - "Key: Number Pad 8", - "Key: Number Pad 5", - "Key: Number Pad 2", - "Unused", - - "Unused", - "Key: Number Pad *", - "Key: Number Pad 9", - "Key: Number Pad 6", - "Key: Number Pad 3", - "Key: Number Pad ,", - - "Unused", - "Key: Number Pad -", - "Key: Number Pad +", - "Unused", - "Key: Number Pad Enter", - "Unused", -}; +#include RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardController* aura_ptr) { @@ -207,139 +19,170 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont vendor = "ASUS"; type = DEVICE_TYPE_KEYBOARD; description = "ASUS Aura Keyboard Device"; + version = aura->GetVersion(); location = aura->GetDeviceLocation(); serial = aura->GetSerialString(); mode Direct; - Direct.name = "Direct"; - Direct.value = AURA_KEYBOARD_MODE_DIRECT; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR; - Direct.color_mode = MODE_COLORS_PER_LED; + Direct.name = "Direct"; + Direct.value = AURA_KEYBOARD_MODE_DIRECT; + 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 = AURA_KEYBOARD_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.colors_min = 1; - Static.colors_max = 1; + Static.name = "Static"; + Static.value = AURA_KEYBOARD_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Static.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Static.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Static.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Static.color_mode = MODE_COLORS_MODE_SPECIFIC; + Static.colors_min = 1; + Static.colors_max = 1; Static.colors.resize(1); modes.push_back(Static); mode Breathing; - Breathing.name = "Breathing"; - Breathing.value = AURA_KEYBOARD_MODE_BREATHING; - Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; - Breathing.speed_min = 0; - Breathing.speed_max = 15; - Breathing.speed = 8; - Breathing.colors_min = 1; - Breathing.colors_max = 2; + Breathing.name = "Breathing"; + Breathing.value = AURA_KEYBOARD_MODE_BREATHING; + Breathing.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Breathing.speed_min = AURA_KEYBOARD_SPEED_MIN; + Breathing.speed_max = AURA_KEYBOARD_SPEED_MAX; + Breathing.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Breathing.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Breathing.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Breathing.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; + Breathing.colors_min = 1; + Breathing.colors_max = 2; Breathing.colors.resize(1); modes.push_back(Breathing); mode Color_Cycle; - Color_Cycle.name = "Color Cycle"; - Color_Cycle.value = AURA_KEYBOARD_MODE_COLOR_CYCLE; - Color_Cycle.flags = MODE_FLAG_HAS_SPEED; - Color_Cycle.color_mode = MODE_COLORS_NONE; - Color_Cycle.speed_min = 0; - Color_Cycle.speed_max = 15; - Color_Cycle.speed = 8; + Color_Cycle.name = "Spectrum Cycle"; + Color_Cycle.value = AURA_KEYBOARD_MODE_COLOR_CYCLE; + Color_Cycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Color_Cycle.speed_min = AURA_KEYBOARD_SPEED_MIN; + Color_Cycle.speed_max = AURA_KEYBOARD_SPEED_MAX; + Color_Cycle.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Color_Cycle.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Color_Cycle.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Color_Cycle.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Color_Cycle.color_mode = MODE_COLORS_NONE; modes.push_back(Color_Cycle); mode Wave; - Wave.name = "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_UD | MODE_FLAG_HAS_DIRECTION_HV; - Wave.color_mode = MODE_COLORS_MODE_SPECIFIC; - Wave.speed_min = 0; - Wave.speed_max = 15; - Wave.speed = 8; - Wave.direction = MODE_DIRECTION_LEFT; - Wave.colors_min = 1; - Wave.colors_max = 7; + 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_UD | MODE_FLAG_HAS_DIRECTION_HV | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Wave.speed_min = AURA_KEYBOARD_SPEED_MIN; + Wave.speed_max = AURA_KEYBOARD_SPEED_MAX; + Wave.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Wave.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Wave.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Wave.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Wave.direction = MODE_DIRECTION_LEFT; + Wave.color_mode = MODE_COLORS_MODE_SPECIFIC; + Wave.colors_min = 1; + Wave.colors_max = 7; Wave.colors.resize(7); modes.push_back(Wave); mode Ripple; - Ripple.name = "Ripple"; - Ripple.value = AURA_KEYBOARD_MODE_RIPPLE; - Ripple.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Ripple.color_mode = MODE_COLORS_MODE_SPECIFIC; - Ripple.speed_min = 0; - Ripple.speed_max = 15; - Ripple.speed = 8; - Ripple.colors_min = 1; - Ripple.colors_max = 8; + Ripple.name = "Ripple"; + Ripple.value = AURA_KEYBOARD_MODE_RIPPLE; + Ripple.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Ripple.speed_min = AURA_KEYBOARD_SPEED_MIN; + Ripple.speed_max = AURA_KEYBOARD_SPEED_MAX; + Ripple.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Ripple.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Ripple.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Ripple.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Ripple.color_mode = MODE_COLORS_MODE_SPECIFIC; + Ripple.colors_min = 1; + Ripple.colors_max = 8; Ripple.colors.resize(7); modes.push_back(Ripple); mode Reactive; - Reactive.name = "Reactive"; - Reactive.value = AURA_KEYBOARD_MODE_REACTIVE; - Reactive.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC; - Reactive.speed_min = 0; - Reactive.speed_max = 15; - Reactive.speed = 8; - Reactive.colors_min = 1; - Reactive.colors_max = 2; + Reactive.name = "Reactive"; + Reactive.value = AURA_KEYBOARD_MODE_REACTIVE; + Reactive.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Reactive.speed_min = AURA_KEYBOARD_SPEED_MIN; + Reactive.speed_max = AURA_KEYBOARD_SPEED_MAX; + Reactive.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Reactive.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Reactive.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Reactive.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC; + Reactive.colors_min = 1; + Reactive.colors_max = 2; Reactive.colors.resize(1); modes.push_back(Reactive); mode Starry_Night; - Starry_Night.name = "Starry Night"; - Starry_Night.value = AURA_KEYBOARD_MODE_STARRY_NIGHT; - Starry_Night.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Starry_Night.color_mode = MODE_COLORS_MODE_SPECIFIC; - Starry_Night.speed_min = 0; - Starry_Night.speed_max = 15; - Starry_Night.speed = 8; - Starry_Night.colors_min = 1; - Starry_Night.colors_max = 3; + Starry_Night.name = "Starry Night"; + Starry_Night.value = AURA_KEYBOARD_MODE_STARRY_NIGHT; + Starry_Night.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Starry_Night.speed_min = AURA_KEYBOARD_SPEED_MIN; + Starry_Night.speed_max = AURA_KEYBOARD_SPEED_MAX; + Starry_Night.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Starry_Night.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Starry_Night.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Starry_Night.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Starry_Night.color_mode = MODE_COLORS_MODE_SPECIFIC; + Starry_Night.colors_min = 1; + Starry_Night.colors_max = 3; Starry_Night.colors.resize(1); modes.push_back(Starry_Night); mode Quicksand; - Quicksand.name = "Quicksand"; - Quicksand.value = AURA_KEYBOARD_MODE_QUICKSAND; - Quicksand.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD; - Quicksand.color_mode = MODE_COLORS_MODE_SPECIFIC; - Quicksand.direction = MODE_DIRECTION_DOWN; - Quicksand.speed_min = 0; - Quicksand.speed_max = 15; - Quicksand.speed = 8; - Quicksand.colors_min = 6; - Quicksand.colors_max = 6; + Quicksand.name = "Quicksand"; + Quicksand.value = AURA_KEYBOARD_MODE_QUICKSAND; + Quicksand.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Quicksand.direction = MODE_DIRECTION_DOWN; + Quicksand.speed_min = AURA_KEYBOARD_SPEED_MIN; + Quicksand.speed_max = AURA_KEYBOARD_SPEED_MAX; + Quicksand.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Quicksand.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Quicksand.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Quicksand.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Quicksand.color_mode = MODE_COLORS_MODE_SPECIFIC; + Quicksand.colors_min = 6; + Quicksand.colors_max = 6; Quicksand.colors.resize(6); modes.push_back(Quicksand); mode Current; - Current.name = "Current"; - Current.value = AURA_KEYBOARD_MODE_CURRENT; - Current.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Current.color_mode = MODE_COLORS_MODE_SPECIFIC; - Current.speed_min = 0; - Current.speed_max = 15; - Current.speed = 8; - Current.colors_min = 1; - Current.colors_max = 3; + Current.name = "Current"; + Current.value = AURA_KEYBOARD_MODE_CURRENT; + Current.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Current.speed_min = AURA_KEYBOARD_SPEED_MIN; + Current.speed_max = AURA_KEYBOARD_SPEED_MAX; + Current.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Current.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Current.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Current.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Current.color_mode = MODE_COLORS_MODE_SPECIFIC; + Current.colors_min = 1; + Current.colors_max = 3; Current.colors.resize(1); modes.push_back(Current); mode Rain_Drop; - Rain_Drop.name = "Rain Drop"; - Rain_Drop.value = AURA_KEYBOARD_MODE_RAIN_DROP; - Rain_Drop.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED; - Rain_Drop.color_mode = MODE_COLORS_MODE_SPECIFIC; - Rain_Drop.speed_min = 0; - Rain_Drop.speed_max = 15; - Rain_Drop.speed = 8; - Rain_Drop.colors_min = 1; - Rain_Drop.colors_max = 3; + Rain_Drop.name = "Rain Drop"; + Rain_Drop.value = AURA_KEYBOARD_MODE_RAIN_DROP; + Rain_Drop.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_RANDOM_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_MANUAL_SAVE | MODE_FLAG_HAS_BRIGHTNESS; + Rain_Drop.speed_min = AURA_KEYBOARD_SPEED_MIN; + Rain_Drop.speed_max = AURA_KEYBOARD_SPEED_MAX; + Rain_Drop.speed = AURA_KEYBOARD_SPEED_DEFAULT; + Rain_Drop.brightness_min = AURA_KEYBOARD_BRIGHTNESS_MIN; + Rain_Drop.brightness_max = AURA_KEYBOARD_BRIGHTNESS_MAX; + Rain_Drop.brightness = AURA_KEYBOARD_BRIGHTNESS_DEFAULT; + Rain_Drop.color_mode = MODE_COLORS_MODE_SPECIFIC; + Rain_Drop.colors_min = 1; + Rain_Drop.colors_max = 3; Rain_Drop.colors.resize(1); modes.push_back(Rain_Drop); @@ -353,29 +196,40 @@ RGBController_AuraTUFKeyboard::~RGBController_AuraTUFKeyboard() void RGBController_AuraTUFKeyboard::SetupZones() { + int layout = aura->GetLayout(); + + if(AsusTUFK7Layouts.find(layout % 100) == AsusTUFK7Layouts.end()) + { + layout = std::floor(layout/100) == 2 ? ASUS_TUF_K7_LAYOUT_UK : ASUS_TUF_K7_LAYOUT_US; + } + else + { + layout = layout % 100; + } + 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]; - new_zone.matrix_map = new matrix_map_type; - new_zone.matrix_map->height = 6; - new_zone.matrix_map->width = 23; - new_zone.matrix_map->map = (unsigned int *)&matrix_map; - zones.push_back(new_zone); + int zone_size = 138; + + zone keyboard; + keyboard.name = "Keyboard"; + keyboard.type = ZONE_TYPE_MATRIX; + keyboard.leds_min = zone_size; + keyboard.leds_max = zone_size; + keyboard.leds_count = zone_size; + keyboard.matrix_map = new matrix_map_type; + keyboard.matrix_map->height = 6; + keyboard.matrix_map->width = 23; + keyboard.matrix_map->map = AsusTUFK7Layouts[layout].matrix_map; + zones.push_back(keyboard); + + total_led_count += zone_size; - 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]; + new_led.name = AsusTUFK7Layouts[layout].led_names[led_idx]; leds.push_back(new_led); } @@ -465,6 +319,14 @@ void RGBController_AuraTUFKeyboard::DeviceUpdateMode() mode_colors = modes[active_mode].color_mode == MODE_COLORS_PER_LED ? std::vector(colors) : std::vector(modes[active_mode].colors); - aura->UpdateDevice(modes[active_mode].value, mode_colors, direction, color_mode, (15 - modes[active_mode].speed)); + aura->UpdateDevice(modes[active_mode].value, mode_colors, direction, color_mode, (15 - modes[active_mode].speed), modes[active_mode].brightness * 25); } } + +void RGBController_AuraTUFKeyboard::DeviceSaveMode() +{ + aura->ClearResponses(); + DeviceUpdateMode(); + aura->AwaitResponse(); + aura->SaveMode(); +} diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h index f762c231..ba38f45f 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h @@ -11,6 +11,16 @@ #include "RGBController.h" #include "AsusAuraTUFKeyboardController.h" +enum +{ + AURA_KEYBOARD_SPEED_MIN = 0, + AURA_KEYBOARD_SPEED_MAX = 15, + AURA_KEYBOARD_SPEED_DEFAULT = 8, + AURA_KEYBOARD_BRIGHTNESS_MIN = 0, + AURA_KEYBOARD_BRIGHTNESS_MAX = 4, + AURA_KEYBOARD_BRIGHTNESS_DEFAULT = 4 +}; + class RGBController_AuraTUFKeyboard : public RGBController { public: @@ -27,6 +37,7 @@ public: void SetCustomMode(); void DeviceUpdateMode(); + void DeviceSaveMode(); private: AuraTUFKeyboardController* aura; diff --git a/OpenRGB.pro b/OpenRGB.pro index 5d8e9b12..7dc2f2fd 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -232,6 +232,7 @@ HEADERS += Controllers/AsusAuraUSBController/AsusAuraMouseController.h \ Controllers/AsusAuraUSBController/AsusAuraMouseDevices.h \ Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h \ + Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraHeadsetStand.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraKeyboard.h \ Controllers/AsusAuraUSBController/RGBController_AsusAuraMouse.h \