diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp index 0a97e16a..7ef7e869 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.cpp @@ -17,11 +17,12 @@ #include #include -AuraTUFKeyboardController::AuraTUFKeyboardController(hid_device* dev_handle, const char* path, uint16_t pid) +AuraTUFKeyboardController::AuraTUFKeyboardController(hid_device* dev_handle, const char* path, uint16_t pid, unsigned short rev_version) { dev = dev_handle; location = path; device_pid = pid; + version = rev_version; } AuraTUFKeyboardController::~AuraTUFKeyboardController() @@ -52,44 +53,131 @@ std::string AuraTUFKeyboardController::GetSerialString() 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]; - if (device_pid == AURA_TUF_K3_GAMING_PID) + if(device_pid != AURA_ROG_CLAYMORE_PID) { - snprintf(version, 9, "%02X.%02X.%02X", usb_buf_out[6], usb_buf_out[5], usb_buf_out[4]); + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x12; + usb_buf[0x02] = 0x00; + + ClearResponses(); + + hid_write(dev, usb_buf, 65); + + unsigned char usb_buf_out[65]; + hid_read(dev, usb_buf_out, 65); + + char version[9]; + if(device_pid == AURA_TUF_K3_GAMING_PID) + { + snprintf(version, 9, "%02X.%02X.%02X", usb_buf_out[6], usb_buf_out[5], usb_buf_out[4]); + } + else + { + snprintf(version, 9, "%02X.%02X.%02X", usb_buf_out[5], usb_buf_out[6], usb_buf_out[7]); + } + + return std::string(version); } else { - snprintf(version, 9, "%02X.%02X.%02X", usb_buf_out[5], usb_buf_out[6], usb_buf_out[7]); + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x10; + usb_buf[0x02] = 0x01; + usb_buf[0x03] = 0x00; + usb_buf[0x04] = 0x00; + usb_buf[0x05] = 0x00; // set to 1 to get firmware version of numpad + + ClearResponses(); + + hid_write(dev, usb_buf, 65); + + AwaitResponse(20); + + unsigned char usb_buf1[65]; + memset(usb_buf1, 0x00, sizeof(usb_buf1)); + usb_buf1[0x00] = 0x00; + usb_buf1[0x01] = 0x12; + usb_buf1[0x02] = 0x22; + + ClearResponses(); + hid_write(dev, usb_buf1, 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[8], usb_buf_out[9], usb_buf_out[10]); + + return std::string(version); } - - return std::string(version); } int AuraTUFKeyboardController::GetLayout() +{ + if(device_pid != AURA_ROG_CLAYMORE_PID) + { + unsigned char usb_buf[65]; + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x12; + usb_buf[0x02] = 0x12; + + ClearResponses(); + 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]); + } + else + { + char layout[] = ""; + + sprintf(layout, "%X", version); + + int layoutnum = std::stoi(std::string(layout, 1)); + + switch(layoutnum) + { + case 1: + return 117; + case 2: + return 204; + case 3: + return 221; + case 4: + return 117; + default: + return 117; + } + } +} + +/*---------------------------------------------------------*\ +| only needed for Claymore | +\*---------------------------------------------------------*/ +int AuraTUFKeyboardController::GetNumpadLocation() { unsigned char usb_buf[65]; memset(usb_buf, 0x00, sizeof(usb_buf)); usb_buf[0x00] = 0x00; - usb_buf[0x01] = 0x12; - usb_buf[0x02] = 0x12; + usb_buf[0x01] = 0x40; + usb_buf[0x02] = 0x60; + + ClearResponses(); 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]); + return(usb_buf_out[5] * 2 + usb_buf_out[4]); } void AuraTUFKeyboardController::SaveMode() @@ -102,7 +190,31 @@ void AuraTUFKeyboardController::SaveMode() usb_save_buf[0x01] = 0x50; usb_save_buf[0x02] = 0x55; + ClearResponses(); + hid_write(dev, usb_save_buf, 65); + + AwaitResponse(60); +} + +/*---------------------------------------------------------*\ +| only needed for Claymore | +\*---------------------------------------------------------*/ +void AuraTUFKeyboardController::AllowRemoteControl(unsigned char type) +{ + unsigned char usb_buf[65]; + + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x41; + usb_buf[0x02] = type; + + ClearResponses(); + + hid_write(dev, usb_buf, 65); + + AwaitResponse(20); } void AuraTUFKeyboardController::UpdateSingleLed @@ -121,7 +233,7 @@ void AuraTUFKeyboardController::UpdateSingleLed memset(usb_buf, 0x00, sizeof(usb_buf)); usb_buf[0] = 0x00; - usb_buf[1] = 0xc0; + usb_buf[1] = 0xC0; usb_buf[2] = 0x81; usb_buf[3] = 0x01; usb_buf[4] = 0x00; @@ -129,70 +241,54 @@ void AuraTUFKeyboardController::UpdateSingleLed /*-----------------------------------------------------*\ | Convert LED index | \*-----------------------------------------------------*/ - usb_buf[5] = floor(led/6)*8 + led%6; + usb_buf[5] = led; usb_buf[6] = red; usb_buf[7] = green; usb_buf[8] = blue; + ClearResponses(); + hid_write(dev, usb_buf, 65); + + AwaitResponse(20); } void AuraTUFKeyboardController::UpdateLeds ( - std::vector colors + std::vector colors ) { - /*-----------------------------------------------------*\ - | Loop over every column (optimisation needed) | - \*-----------------------------------------------------*/ - for(unsigned int i = 0; i < 192; i += 16) + int packets = ceil((float) colors.size() / 15); + + for(int i = 0; i < packets; i++) { - unsigned char usb_buf[69]; + unsigned char usb_buf[65]; memset(usb_buf, 0x00, sizeof(usb_buf)); + int remaining = colors.size() - i * 15; + + int leds = (remaining > 0x0F) ? 0x0F : remaining; + usb_buf[0] = 0x00; - usb_buf[1] = 0xc0; + usb_buf[1] = 0xC0; usb_buf[2] = 0x81; - usb_buf[3] = (138 - i / 16 * 12); + usb_buf[3] = leds; usb_buf[4] = 0x00; - for(unsigned int n = 0; n < 6; n++) + for(unsigned int j = 0; j < leds; j++) { - usb_buf[n * 4 + 5] = i + n; - usb_buf[n * 4 + 6] = RGBGetRValue(colors[i/16*12+n]); - usb_buf[n * 4 + 7] = RGBGetGValue(colors[i/16*12+n]); - usb_buf[n * 4 + 8] = RGBGetBValue(colors[i/16*12+n]); + usb_buf[j * 4 + 5] = colors[i * 15 + j].value; + 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); } + + ClearResponses(); - for(unsigned int n = 6; n < 8; n++) - { - usb_buf[n * 4 + 5] = i + n; - usb_buf[n * 4 + 6] = 0; - usb_buf[n * 4 + 7] = 0; - usb_buf[n * 4 + 8] = 0; - } + hid_write(dev, usb_buf, 65); - if(i != 176) - { - for(unsigned int n = 8; n < 14; n++) - { - usb_buf[n * 4 + 5] = i + n; - usb_buf[n * 4 + 6] = RGBGetRValue(colors[i/16*12+n-2]); - usb_buf[n * 4 + 7] = RGBGetGValue(colors[i/16*12+n-2]); - usb_buf[n * 4 + 8] = RGBGetBValue(colors[i/16*12+n-2]); - } - - for(unsigned int n = 14; n < 16; n++) - { - usb_buf[n * 4 + 5] = i + n; - usb_buf[n * 4 + 6] = 0; - usb_buf[n * 4 + 7] = 0; - usb_buf[n * 4 + 8] = 0; - } - } - - hid_write(dev, usb_buf, 69); + AwaitResponse(20); } } @@ -200,7 +296,7 @@ void AuraTUFKeyboardController::UpdateDevice ( unsigned char mode, std::vector colors, - unsigned char dir, + unsigned char direction, unsigned char color_mode, unsigned char speed, unsigned char brightness @@ -213,62 +309,167 @@ void AuraTUFKeyboardController::UpdateDevice usb_buf[0x00] = 0x00; usb_buf[0x01] = 0x51; usb_buf[0x02] = 0x2C; - usb_buf[0x03] = mode; - usb_buf[0x04] = 0x00; - usb_buf[0x05] = speed; - usb_buf[0x06] = brightness; - usb_buf[0x07] = color_mode; - usb_buf[0x08] = dir; - usb_buf[0x09] = 0x02; - if(mode == 4 || mode == 5) + if(device_pid != AURA_ROG_CLAYMORE_PID) { - /*-----------------------------------------------------*\ - | If mode is Rainbow or Ripple | - \*-----------------------------------------------------*/ - usb_buf[0x0A] = colors.size(); + usb_buf[0x03] = mode; + usb_buf[0x04] = 0x00; + usb_buf[0x05] = speed; + usb_buf[0x06] = brightness; + usb_buf[0x07] = color_mode; + usb_buf[0x08] = direction; + usb_buf[0x09] = 0x02; - /*-----------------------------------------------------*\ - | Loop over every color given | - \*-----------------------------------------------------*/ - for(unsigned int i = 0; i / 4 < colors.size(); i += 4) + if(mode == AURA_KEYBOARD_MODE_WAVE || mode == AURA_KEYBOARD_MODE_RIPPLE) { - if(colors[i / 4]) + usb_buf[0x0A] = colors.size(); + + /*-----------------------------------------------------*\ + | Loop over every color given | + \*-----------------------------------------------------*/ + for(unsigned int i = 0; i < colors.size(); i ++) { - usb_buf[11 + i] = 100/(double)colors.size()*(i/4+1); - usb_buf[12 + i] = RGBGetRValue(colors[i/4]); - usb_buf[13 + i] = RGBGetGValue(colors[i/4]); - usb_buf[14 + i] = RGBGetBValue(colors[i/4]); + if(colors[i]) + { + usb_buf[11 + i * 4] = 100/(double)colors.size()*(i+1); + usb_buf[12 + i * 4] = RGBGetRValue(colors[i]); + usb_buf[13 + i * 4] = RGBGetGValue(colors[i]); + usb_buf[14 + 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[10 + i * 3] = RGBGetRValue(colors[i]); + usb_buf[11 + i * 3] = RGBGetGValue(colors[i]); + usb_buf[12 + i * 3] = RGBGetBValue(colors[i]); + } + } + + } } else { - /*-----------------------------------------------------*\ - | Loop over Color1, Color2 and Background if there | - \*-----------------------------------------------------*/ - for(unsigned int i = 0; i / 3 != colors.size(); i += 3) + usb_buf[0x03] = 0x00; + usb_buf[0x04] = 0x00; + usb_buf[0x05] = mode; + usb_buf[0x06] = speed; + + bool random = (color_mode == 1); + bool pattern = (color_mode == 2); + + usb_buf[0x07] = random * 128 + pattern * 32 + direction; + usb_buf[0x08] = 0xFF; // "byteExt1" unknown usage + usb_buf[0x09] = 0xFF; // "byteExt2" unknown usage + usb_buf[0x0A] = (mode == 2) ? 0x80 : 0xFF; // "Lightness" (not Brightness) + + if(mode == 7) { - if(colors[i / 3]) + UpdateQuicksandColors(colors); + } + else + { + if(mode == 4 && color_mode == 0) { - usb_buf[10 + i] = RGBGetRValue(colors[i/3]); - usb_buf[11 + i] = RGBGetGValue(colors[i/3]); - usb_buf[12 + i] = RGBGetBValue(colors[i/3]); + usb_buf[11] = 0xFF; + usb_buf[12] = 0xFF; + usb_buf[13] = 0xFF; + } + + for(unsigned int i = 0; i < colors.size(); i ++) + { + if(colors[i]) + { + usb_buf[11 + i * 3] = RGBGetRValue(colors[i]); + usb_buf[12 + i * 3] = RGBGetGValue(colors[i]); + usb_buf[13 + i * 3] = RGBGetBValue(colors[i]); + } } } - + + for(int i = 1; i < 5; i++) + { + usb_buf[5 + i * 12] = 0xFF; + } } + ClearResponses(); + /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, usb_buf, 65); + + AwaitResponse(20); } -void AuraTUFKeyboardController::AwaitResponse() +/*---------------------------------------------------------*\ +| only needed for Claymore | +\*---------------------------------------------------------*/ +void AuraTUFKeyboardController::UpdateQuicksandColors + ( + std::vector colors + ) +{ + unsigned char usb_buf[65]; + + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x51; + usb_buf[0x02] = 0x91; + + for(unsigned int i = 0; i < 6; i++) + { + if(colors[i]) + { + usb_buf[5 + i * 3] = RGBGetRValue(colors[i]); + usb_buf[6 + i * 3] = RGBGetGValue(colors[i]); + usb_buf[7 + i * 3] = RGBGetBValue(colors[i]); + } + } + + ClearResponses(); + + hid_write(dev, usb_buf, 65); + + AwaitResponse(20); +} + +/*---------------------------------------------------------*\ +| only needed for Claymore | +\*---------------------------------------------------------*/ +void AuraTUFKeyboardController::UpdateMode(unsigned char mode) +{ + unsigned char usb_buf[65]; + + memset(usb_buf, 0x00, sizeof(usb_buf)); + + usb_buf[0x00] = 0x00; + usb_buf[0x01] = 0x51; + usb_buf[0x02] = 0x28; + usb_buf[0x03] = 0x00; + usb_buf[0x04] = 0x00; + usb_buf[0x05] = mode; + + ClearResponses(); + + hid_write(dev, usb_buf, 65); + + AwaitResponse(20); +} + +void AuraTUFKeyboardController::AwaitResponse(int ms) { unsigned char usb_buf_out[65]; - hid_read(dev, usb_buf_out, 65); + hid_read_timeout(dev, usb_buf_out, 65, ms); } void AuraTUFKeyboardController::ClearResponses() @@ -277,7 +478,7 @@ void AuraTUFKeyboardController::ClearResponses() unsigned char usb_buf_flush[65]; while(result > 0) { - result = hid_read_timeout(dev, usb_buf_flush, 65, 0); + result = hid_read_timeout(dev, usb_buf_flush, 65, 0); } } diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h index f3432c27..9a834582 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController.h @@ -16,14 +16,6 @@ #pragma once -enum -{ - AURA_KEYBOARD_ZONE_LOGO = 0, - AURA_KEYBOARD_ZONE_SCROLL = 1, - AURA_KEYBOARD_ZONE_UNDERGLOW = 2, - AURA_KEYBOARD_ZONE_ALL = 3, -}; - enum { AURA_KEYBOARD_MODE_STATIC = 0, @@ -43,20 +35,28 @@ enum { AURA_TUF_K7_GAMING_PID = 0x18AA, AURA_TUF_K3_GAMING_PID = 0x194B, + AURA_ROG_CLAYMORE_PID = 0x184D, }; +struct led_color +{ + unsigned int value; + RGBColor color; +}; class AuraTUFKeyboardController { public: - AuraTUFKeyboardController(hid_device* dev_handle, const char* path, uint16_t pid); + AuraTUFKeyboardController(hid_device* dev_handle, const char* path, uint16_t pid, unsigned short rev_version); ~AuraTUFKeyboardController(); std::string GetDeviceLocation(); std::string GetSerialString(); std::string GetVersion(); int GetLayout(); + int GetNumpadLocation(); void SaveMode(); + void AllowRemoteControl(unsigned char type); void UpdateSingleLed ( @@ -68,7 +68,7 @@ public: void UpdateLeds ( - std::vector colors + std::vector colors ); void UpdateDevice @@ -80,7 +80,9 @@ public: unsigned char speed, unsigned char brightness ); - void AwaitResponse(); + void UpdateQuicksandColors(std::vector colors); + void UpdateMode(unsigned char mode); + void AwaitResponse(int ms); void ClearResponses(); uint16_t device_pid; @@ -88,5 +90,6 @@ public: private: hid_device* dev; std::string location; + unsigned short version; }; diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h index 18fdbe92..70695d4c 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardLayouts.h @@ -45,367 +45,1049 @@ enum #define NA 0xFFFFFFFF -typedef struct +struct led_value { - 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 } + const char* name; + unsigned char id; }; -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 } +struct layout_info +{ + unsigned int* matrix_map; + int size; + int rows; + int cols; + std::vector led_names; +}; + +static unsigned int ASUS_TUF_K7_LAYOUT_KEYS_US[6][24] = { + { 0, NA, 8, 14, 19, 24, NA, 34, 39, 44, 49, 55, 61, 66, 70, NA, 74, 78, 83, NA, NA, NA, NA, NA }, + { 1, 6, 9, 15, 20, 25, 29, 35, 40, 45, 50, 56, 62, 67, NA, NA, 75, 79, 84, NA, 87, 92, 96, 101 }, + { 2, NA, 10, 16, 21, 26, 30, 36, 41, 46, 51, 57, 63, 68, 71, NA, 76, 80, 85, NA, 88, 93, 97, 102 }, + { 3, NA, 11, 17, 22, 27, 31, 37, 42, 47, 52, 58, 64, NA, 72, NA, NA, NA, NA, NA, 89, 94, 98, NA }, + { 4, NA, 12, 18, 23, 28, 32, 38, 43, 48, 53, 59, NA, 69, NA, NA, NA, 81, NA, NA, 90, 95, 99, 103 }, + { 5, 7, 13, NA, NA, NA, 33, NA, NA, NA, 54, 60, 65, NA, 73, NA, 77, 82, 86, NA, 91, NA, 100, NA } }; -static std::map AsusTUFK7Layouts = +static unsigned int ASUS_TUF_K7_LAYOUT_KEYS_UK[6][24] = { + { 0, NA, 9, 15, 20, 25, NA, 35, 40, 45, 50, 56, 62, 67, 72, NA, 75, 79, 84, NA, NA, NA, NA, NA }, + { 1, 6, 10, 16, 21, 26, 30, 36, 41, 46, 51, 57, 63, 68, NA, NA, 76, 80, 85, NA, 88, 93, 97, 102 }, + { 2, NA, 11, 17, 22, 27, 31, 37, 42, 47, 52, 58, 64, 69, NA, NA, 77, 81, 86, NA, 89, 94, 98, 103 }, + { 3, NA, 12, 18, 23, 28, 32, 38, 43, 48, 53, 59, 65, 70, 73, NA, NA, NA, NA, NA, 90, 95, 99, NA }, + { 4, 7, 13, 19, 24, 29, 33, 39, 44, 49, 54, 60, NA, 71, NA, NA, NA, 82, NA, NA, 91, 96, 100, 104 }, + { 5, 8, 14, NA, NA, NA, 34, NA, NA, NA, 55, 61, 66, NA, 74, NA, 78, 83, 87, NA, 92, NA, 101, NA } +}; + +static unsigned int ASUS_CLAYMORE_NO_NUMPAD_LAYOUT_KEYS_US[7][19] = { + { 0, NA, 8, 14, 19, 24, NA, 34, 39, 45, 50, 56, 62, 67, 71, NA, 75, 79, 84 }, + { 1, 6, 9, 15, 20, 25, 29, 35, 40, 46, 51, 57, 63, 68, NA, NA, 76, 80, 85 }, + { 2, NA, 10, 16, 21, 26, 30, 36, 41, 47, 52, 58, 64, 69, 72, NA, 77, 81, 86 }, + { 3, NA, 11, 17, 22, 27, 31, 37, 42, 48, 53, 59, 65, NA, 73, NA, NA, NA, NA }, + { 4, NA, 12, 18, 23, 28, 32, 38, 43, 49, 54, 60, NA, 70, NA, NA, NA, 82, NA }, + { 5, 7, 13, NA, NA, NA, 33, NA, NA, NA, 55, 61, 66, NA, 74, NA, 78, 83, 87 }, + { NA, NA, NA, NA, NA, NA, NA, NA, 44, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static unsigned int ASUS_CLAYMORE_NO_NUMPAD_LAYOUT_KEYS_UK[7][19] = { + { 0, NA, 9, 15, 20, 25, NA, 35, 40, 46, 51, 57, 63, 68, 73, NA, 76, 80, 85 }, + { 1, 6, 10, 16, 21, 26, 30, 36, 41, 47, 52, 58, 64, 69, NA, NA, 77, 81, 86 }, + { 2, NA, 11, 17, 22, 27, 31, 37, 42, 48, 53, 59, 65, 70, NA, NA, 78, 82, 87 }, + { 3, NA, 12, 18, 23, 28, 32, 38, 43, 49, 54, 60, 66, 71, 74, NA, NA, NA, NA }, + { 4, 7, 13, 19, 24, 29, 33, 39, 44, 50, 55, 61, NA, 72, NA, NA, NA, 83, NA }, + { 5, 8, 14, NA, NA, NA, 34, NA, NA, NA, 56, 62, 67, NA, 75, NA, 79, 84, 88 }, + { NA, NA, NA, NA, NA, NA, NA, NA, 45, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static unsigned int ASUS_CLAYMORE_NUMPAD_RIGHT_LAYOUT_KEYS_US[7][24] = { + { 0, NA, 8, 14, 19, 24, NA, 34, 39, 45, 50, 56, 62, 67, 71, NA, 75, 79, 84, NA, NA, NA, NA, NA }, + { 1, 6, 9, 15, 20, 25, 29, 35, 40, 46, 51, 57, 63, 68, NA, NA, 76, 80, 85, NA, 88, 93, 97, 102 }, + { 2, NA, 10, 16, 21, 26, 30, 36, 41, 47, 52, 58, 64, 69, 72, NA, 77, 81, 86, NA, 89, 94, 98, 103 }, + { 3, NA, 11, 17, 22, 27, 31, 37, 42, 48, 53, 59, 65, NA, 73, NA, NA, NA, NA, NA, 90, 95, 99, NA }, + { 4, NA, 12, 18, 23, 28, 32, 38, 43, 49, 54, 60, NA, 70, NA, NA, NA, 82, NA, NA, 91, 96, 100, 104 }, + { 5, 7, 13, NA, NA, NA, 33, NA, NA, NA, 55, 61, 66, NA, 74, NA, 78, 83, 87, NA, 92, NA, 101, NA }, + { NA, NA, NA, NA, NA, NA, NA, NA, 44, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static unsigned int ASUS_CLAYMORE_NUMPAD_RIGHT_LAYOUT_KEYS_UK[7][24] = { + { 0, NA, 9, 15, 20, 25, NA, 35, 40, 46, 51, 57, 63, 68, 73, NA, 76, 80, 85, NA, NA, NA, NA, NA }, + { 1, 6, 10, 16, 21, 26, 30, 36, 41, 47, 52, 58, 64, 69, NA, NA, 77, 81, 86, NA, 89, 94, 98, 103 }, + { 2, NA, 11, 17, 22, 27, 31, 37, 42, 48, 53, 59, 65, 70, NA, NA, 78, 82, 87, NA, 90, 95, 99, 104 }, + { 3, NA, 12, 18, 23, 28, 32, 38, 43, 49, 54, 60, 66, 71, 74, NA, NA, NA, NA, NA, 91, 96, 100, NA }, + { 4, 7, 13, 19, 24, 29, 33, 39, 44, 50, 55, 61, NA, 72, NA, NA, NA, 83, NA, NA, 92, 97, 101, 105 }, + { 5, 8, 14, NA, NA, NA, 34, NA, NA, NA, 56, 62, 67, NA, 75, NA, 79, 84, 88, NA, 93, NA, 102, NA }, + { NA, NA, NA, NA, NA, NA, NA, NA, 45, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static unsigned int ASUS_CLAYMORE_NUMPAD_LEFT_LAYOUT_KEYS_US[7][24] = { + { NA, NA, NA, NA, NA, 17, NA, 25, 31, 36, 41, NA, 51, 56, 62, 67, 73, 79, 84, 88, NA, 92, 96, 101 }, + { 0, 5, 9, 14, NA, 18, 23, 26, 32, 37, 42, 46, 52, 57, 63, 68, 74, 80, 85, NA, NA, 93, 97, 102 }, + { 1, 6, 10, 15, NA, 19, NA, 27, 33, 38, 43, 47, 53, 58, 64, 69, 75, 81, 86, 89, NA, 94, 98, 103 }, + { 2, 7, 11, NA, NA, 20, NA, 28, 34, 39, 44, 48, 54, 59, 65, 70, 76, 82, NA, 90, NA, NA, NA, NA }, + { 3, 8, 12, 16, NA, 21, NA, 29, 35, 40, 45, 49, 55, 60, 66, 71, 77, NA, 87, NA, NA, NA, 99, NA }, + { 4, NA, 13, NA, NA, 22, 24, 30, NA, NA, NA, 50, NA, NA, NA, 72, 78, 83, NA, 91, NA, 95, 100, 104 }, + { NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 61, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static unsigned int ASUS_CLAYMORE_NUMPAD_LEFT_LAYOUT_KEYS_UK[7][24] = { + { NA, NA, NA, NA, NA, 17, NA, 26, 32, 37, 42, NA, 52, 57, 63, 68, 74, 80, 85, 90, NA, 93, 97, 102 }, + { 0, 5, 9, 14, NA, 18, 23, 27, 33, 38, 43, 47, 53, 58, 64, 69, 75, 81, 86, NA, NA, 94, 98, 103 }, + { 1, 6, 10, 15, NA, 19, NA, 28, 34, 39, 44, 48, 54, 59, 65, 70, 76, 82, 87, NA, NA, 95, 99, 104 }, + { 2, 7, 11, NA, NA, 20, NA, 29, 35, 40, 45, 49, 55, 60, 66, 71, 77, 83, 88, 91, NA, NA, NA, NA }, + { 3, 8, 12, 16, NA, 21, 24, 30, 36, 41, 46, 50, 56, 61, 67, 72, 78, NA, 89, NA, NA, NA, 100, NA }, + { 4, NA, 13, NA, NA, 22, 25, 31, NA, NA, NA, 51, NA, NA, NA, 73, 79, 84, NA, 92, NA, 96, 101, 105 }, + { NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 62, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA } +}; + +static std::map AsusTUFK7Layouts = { { ASUS_TUF_K7_LAYOUT_UK, { - (unsigned int *) ASUS_TUF_K7_LAYOUT_KEYS_105, + *ASUS_TUF_K7_LAYOUT_KEYS_UK, + 105, + 6, + 24, { - KEY_EN_ESCAPE, - KEY_EN_BACK_TICK, - KEY_EN_TAB, - KEY_EN_CAPS_LOCK, - KEY_EN_LEFT_SHIFT, - KEY_EN_LEFT_CONTROL, + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - "Key: \\", - KEY_EN_LEFT_WINDOWS, + { KEY_EN_1, 0x11 }, + { KEY_EN_ISO_BACK_SLASH, 0x0C }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, - KEY_EN_UNUSED, - KEY_EN_1, - KEY_EN_Q, - KEY_EN_A, - KEY_EN_Z, - KEY_EN_LEFT_ALT, + { KEY_EN_F1, 0x18 }, + { KEY_EN_2, 0x19 }, + { KEY_EN_Q, 0x12 }, + { KEY_EN_A, 0x13 }, + { KEY_EN_Z, 0x14 }, + { KEY_EN_LEFT_ALT, 0x15 }, - KEY_EN_F1, - KEY_EN_2, - KEY_EN_W, - KEY_EN_S, - KEY_EN_X, - KEY_EN_UNUSED, + { KEY_EN_F2, 0x20 }, + { KEY_EN_3, 0x21 }, + { KEY_EN_W, 0x1A }, + { KEY_EN_S, 0x1B }, + { KEY_EN_X, 0x1C }, - KEY_EN_F2, - KEY_EN_3, - KEY_EN_E, - KEY_EN_D, - KEY_EN_C, - KEY_EN_UNUSED, + { KEY_EN_F3, 0x28 }, + { KEY_EN_4, 0x29 }, + { KEY_EN_E, 0x22 }, + { KEY_EN_D, 0x23 }, + { KEY_EN_C, 0x24 }, + + { KEY_EN_F4, 0x30 }, + { KEY_EN_5, 0x31 }, + { KEY_EN_R, 0x2A }, + { KEY_EN_F, 0x2B }, + { KEY_EN_V, 0x2C }, - KEY_EN_F3, - KEY_EN_4, - KEY_EN_R, - KEY_EN_F, - KEY_EN_V, - KEY_EN_UNUSED, + { KEY_EN_6, 0x39 }, + { KEY_EN_T, 0x32 }, + { KEY_EN_G, 0x33 }, + { KEY_EN_B, 0x34 }, + { KEY_EN_SPACE, 0x35 }, - KEY_EN_F4, - KEY_EN_5, - KEY_EN_T, - KEY_EN_G, - KEY_EN_B, - KEY_EN_SPACE, + { KEY_EN_F5, 0x40 }, + { KEY_EN_7, 0x41 }, + { KEY_EN_Y, 0x3A }, + { KEY_EN_H, 0x3B }, + { KEY_EN_N, 0x3C }, - KEY_EN_UNUSED, - KEY_EN_6, - KEY_EN_Y, - KEY_EN_H, - KEY_EN_N, - KEY_EN_UNUSED, + { KEY_EN_F6, 0x48 }, + { KEY_EN_8, 0x49 }, + { KEY_EN_U, 0x42 }, + { KEY_EN_J, 0x43 }, + { KEY_EN_M, 0x44 }, - KEY_EN_F5, - KEY_EN_7, - KEY_EN_U, - KEY_EN_J, - KEY_EN_M, - KEY_EN_UNUSED, + { KEY_EN_F7, 0x50 }, + { KEY_EN_9, 0x51 }, + { KEY_EN_I, 0x4A }, + { KEY_EN_K, 0x4B }, + { KEY_EN_COMMA, 0x4C }, - KEY_EN_F6, - KEY_EN_8, - KEY_EN_I, - KEY_EN_K, - KEY_EN_COMMA, - KEY_EN_RIGHT_ALT, + { KEY_EN_F8, 0x58 }, + { KEY_EN_0, 0x59 }, + { KEY_EN_O, 0x52 }, + { KEY_EN_L, 0x53 }, + { KEY_EN_PERIOD, 0x54 }, + { KEY_EN_RIGHT_ALT, 0x4D }, - KEY_EN_F7, - KEY_EN_9, - KEY_EN_O, - KEY_EN_L, - KEY_EN_PERIOD, - KEY_EN_UNUSED, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x61 }, + { KEY_EN_P, 0x5A }, + { KEY_EN_SEMICOLON, 0x5B }, + { KEY_EN_FORWARD_SLASH, 0x5C }, + { KEY_EN_RIGHT_FUNCTION, 0x5D }, - KEY_EN_F8, - KEY_EN_0, - KEY_EN_P, - KEY_EN_SEMICOLON, - KEY_EN_FORWARD_SLASH, - KEY_EN_RIGHT_FUNCTION, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x69 }, + { KEY_EN_LEFT_BRACKET, 0x62 }, + { KEY_EN_QUOTE, 0x63 }, + { KEY_EN_MENU, 0x65 }, - KEY_EN_F9, - KEY_EN_MINUS, - KEY_EN_LEFT_BRACKET, - KEY_EN_QUOTE, - KEY_EN_UNUSED, - KEY_EN_MENU, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x79 }, + { KEY_EN_RIGHT_BRACKET, 0x6A }, + { KEY_EN_POUND, 0x6B }, + { KEY_EN_RIGHT_SHIFT, 0x7C }, - KEY_EN_F10, - KEY_EN_EQUALS, - KEY_EN_RIGHT_BRACKET, - KEY_EN_POUND, - KEY_EN_UNUSED, - KEY_EN_UNUSED, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ISO_ENTER, 0x7B }, + { KEY_EN_RIGHT_CONTROL, 0x7D }, - KEY_EN_F11, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, - KEY_EN_F12, - KEY_EN_BACKSPACE, - KEY_EN_UNUSED, - KEY_EN_ANSI_ENTER, - KEY_EN_RIGHT_SHIFT, - KEY_EN_RIGHT_CONTROL, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, - KEY_EN_PRINT_SCREEN, - KEY_EN_INSERT, - KEY_EN_DELETE, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_LEFT_ARROW, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 }, - KEY_EN_SCROLL_LOCK, - KEY_EN_HOME, - KEY_EN_END, - KEY_EN_UNUSED, - KEY_EN_UP_ARROW, - KEY_EN_DOWN_ARROW, + { KEY_EN_NUMPAD_LOCK, 0x99 }, + { KEY_EN_NUMPAD_7, 0x9A }, + { KEY_EN_NUMPAD_4, 0x9B }, + { KEY_EN_NUMPAD_1, 0x9C }, + { KEY_EN_NUMPAD_0, 0x9D }, - KEY_EN_PAUSE_BREAK, - KEY_EN_PAGE_UP, - KEY_EN_PAGE_DOWN, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_RIGHT_ARROW, + { KEY_EN_NUMPAD_DIVIDE, 0xA1 }, + { KEY_EN_NUMPAD_8, 0xA2 }, + { KEY_EN_NUMPAD_5, 0xA3 }, + { KEY_EN_NUMPAD_2, 0xA4 }, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_LOCK, - KEY_EN_NUMPAD_7, - KEY_EN_NUMPAD_4, - KEY_EN_NUMPAD_1, - KEY_EN_NUMPAD_0, + { KEY_EN_NUMPAD_TIMES, 0xA9 }, + { KEY_EN_NUMPAD_9, 0xAA }, + { KEY_EN_NUMPAD_6, 0xAB }, + { KEY_EN_NUMPAD_3, 0xAC }, + { KEY_EN_NUMPAD_PERIOD, 0xAD }, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_DIVIDE, - KEY_EN_NUMPAD_8, - KEY_EN_NUMPAD_5, - KEY_EN_NUMPAD_2, - KEY_EN_UNUSED, - - KEY_EN_UNUSED, - KEY_EN_NUMPAD_TIMES, - KEY_EN_NUMPAD_9, - KEY_EN_NUMPAD_6, - KEY_EN_NUMPAD_3, - "Key: Number Pad ,", - - KEY_EN_UNUSED, - KEY_EN_NUMPAD_MINUS, - KEY_EN_NUMPAD_PLUS, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_ENTER, - KEY_EN_UNUSED, + { KEY_EN_NUMPAD_MINUS, 0xB1 }, + { KEY_EN_NUMPAD_PLUS, 0xB2 }, + { KEY_EN_NUMPAD_ENTER, 0xB4 } } } }, { ASUS_TUF_K7_LAYOUT_US, { - (unsigned int *) ASUS_TUF_K7_LAYOUT_KEYS_104, + *ASUS_TUF_K7_LAYOUT_KEYS_US, + 104, + 6, + 24, { - KEY_EN_ESCAPE, - KEY_EN_BACK_TICK, - KEY_EN_TAB, - KEY_EN_CAPS_LOCK, - KEY_EN_LEFT_SHIFT, - KEY_EN_LEFT_CONTROL, + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_LEFT_WINDOWS, + { KEY_EN_1, 0x11 }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, - KEY_EN_UNUSED, - KEY_EN_1, - KEY_EN_Q, - KEY_EN_A, - KEY_EN_Z, - KEY_EN_LEFT_ALT, + { KEY_EN_F1, 0x18 }, + { KEY_EN_2, 0x19 }, + { KEY_EN_Q, 0x12 }, + { KEY_EN_A, 0x13 }, + { KEY_EN_Z, 0x14 }, + { KEY_EN_LEFT_ALT, 0x15 }, - KEY_EN_F1, - KEY_EN_2, - KEY_EN_W, - KEY_EN_S, - KEY_EN_X, - KEY_EN_UNUSED, + { KEY_EN_F2, 0x20 }, + { KEY_EN_3, 0x21 }, + { KEY_EN_W, 0x1A }, + { KEY_EN_S, 0x1B }, + { KEY_EN_X, 0x1C }, - KEY_EN_F2, - KEY_EN_3, - KEY_EN_E, - KEY_EN_D, - KEY_EN_C, - KEY_EN_UNUSED, + { KEY_EN_F3, 0x28 }, + { KEY_EN_4, 0x29 }, + { KEY_EN_E, 0x22 }, + { KEY_EN_D, 0x23 }, + { KEY_EN_C, 0x24 }, - KEY_EN_F3, - KEY_EN_4, - KEY_EN_R, - KEY_EN_F, - KEY_EN_V, - KEY_EN_UNUSED, + { KEY_EN_F4, 0x30 }, + { KEY_EN_5, 0x31 }, + { KEY_EN_R, 0x2A }, + { KEY_EN_F, 0x2B }, + { KEY_EN_V, 0x2C }, - KEY_EN_F4, - KEY_EN_5, - KEY_EN_T, - KEY_EN_G, - KEY_EN_B, - KEY_EN_SPACE, + { KEY_EN_6, 0x39 }, + { KEY_EN_T, 0x32 }, + { KEY_EN_G, 0x33 }, + { KEY_EN_B, 0x34 }, + { KEY_EN_SPACE, 0x35 }, - KEY_EN_UNUSED, - KEY_EN_6, - KEY_EN_Y, - KEY_EN_H, - KEY_EN_N, - KEY_EN_UNUSED, + { KEY_EN_F5, 0x40 }, + { KEY_EN_7, 0x41 }, + { KEY_EN_Y, 0x3A }, + { KEY_EN_H, 0x3B }, + { KEY_EN_N, 0x3C }, - KEY_EN_F5, - KEY_EN_7, - KEY_EN_U, - KEY_EN_J, - KEY_EN_M, - KEY_EN_UNUSED, + { KEY_EN_F6, 0x48 }, + { KEY_EN_8, 0x49 }, + { KEY_EN_U, 0x42 }, + { KEY_EN_J, 0x43 }, + { KEY_EN_M, 0x44 }, - KEY_EN_F6, - KEY_EN_8, - KEY_EN_I, - KEY_EN_K, - KEY_EN_COMMA, - KEY_EN_RIGHT_ALT, + { KEY_EN_F7, 0x50 }, + { KEY_EN_9, 0x51 }, + { KEY_EN_I, 0x4A }, + { KEY_EN_K, 0x4B }, + { KEY_EN_COMMA, 0x4C }, - KEY_EN_F7, - KEY_EN_9, - KEY_EN_O, - KEY_EN_L, - KEY_EN_PERIOD, - KEY_EN_UNUSED, + { KEY_EN_F8, 0x58 }, + { KEY_EN_0, 0x59 }, + { KEY_EN_O, 0x52 }, + { KEY_EN_L, 0x53 }, + { KEY_EN_PERIOD, 0x54 }, + { KEY_EN_RIGHT_ALT, 0x4D }, - KEY_EN_F8, - KEY_EN_0, - KEY_EN_P, - KEY_EN_SEMICOLON, - KEY_EN_FORWARD_SLASH, - KEY_EN_RIGHT_FUNCTION, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x61 }, + { KEY_EN_P, 0x5A }, + { KEY_EN_SEMICOLON, 0x5B }, + { KEY_EN_FORWARD_SLASH, 0x5C }, + { KEY_EN_RIGHT_FUNCTION, 0x5D }, - KEY_EN_F9, - KEY_EN_MINUS, - KEY_EN_LEFT_BRACKET, - KEY_EN_QUOTE, - KEY_EN_UNUSED, - KEY_EN_MENU, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x69 }, + { KEY_EN_LEFT_BRACKET, 0x62 }, + { KEY_EN_QUOTE, 0x63 }, + { KEY_EN_MENU, 0x65 }, - KEY_EN_F10, - KEY_EN_EQUALS, - KEY_EN_RIGHT_BRACKET, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x79 }, + { KEY_EN_RIGHT_BRACKET, 0x6A }, + { KEY_EN_RIGHT_SHIFT, 0x7C }, - KEY_EN_F11, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_UNUSED, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ANSI_BACK_SLASH, 0x7A }, + { KEY_EN_ANSI_ENTER, 0x7B }, + { KEY_EN_RIGHT_CONTROL, 0x7D }, - KEY_EN_F12, - KEY_EN_BACKSPACE, - "Key: \\", - KEY_EN_ANSI_ENTER, - KEY_EN_RIGHT_SHIFT, - KEY_EN_RIGHT_CONTROL, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, - KEY_EN_PRINT_SCREEN, - KEY_EN_INSERT, - KEY_EN_DELETE, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_LEFT_ARROW, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, - KEY_EN_SCROLL_LOCK, - KEY_EN_HOME, - KEY_EN_END, - KEY_EN_UNUSED, - KEY_EN_UP_ARROW, - KEY_EN_DOWN_ARROW, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 }, - KEY_EN_PAUSE_BREAK, - KEY_EN_PAGE_UP, - KEY_EN_PAGE_DOWN, - KEY_EN_UNUSED, - KEY_EN_UNUSED, - KEY_EN_RIGHT_ARROW, + { KEY_EN_NUMPAD_LOCK, 0x99 }, + { KEY_EN_NUMPAD_7, 0x9A }, + { KEY_EN_NUMPAD_4, 0x9B }, + { KEY_EN_NUMPAD_1, 0x9C }, + { KEY_EN_NUMPAD_0, 0x9D }, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_LOCK, - KEY_EN_NUMPAD_7, - KEY_EN_NUMPAD_4, - KEY_EN_NUMPAD_1, - KEY_EN_NUMPAD_0, + { KEY_EN_NUMPAD_DIVIDE, 0xA1 }, + { KEY_EN_NUMPAD_8, 0xA2 }, + { KEY_EN_NUMPAD_5, 0xA3 }, + { KEY_EN_NUMPAD_2, 0xA4 }, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_DIVIDE, - KEY_EN_NUMPAD_8, - KEY_EN_NUMPAD_5, - KEY_EN_NUMPAD_2, - KEY_EN_UNUSED, + { KEY_EN_NUMPAD_TIMES, 0xA9 }, + { KEY_EN_NUMPAD_9, 0xAA }, + { KEY_EN_NUMPAD_6, 0xAB }, + { KEY_EN_NUMPAD_3, 0xAC }, + { KEY_EN_NUMPAD_PERIOD, 0xAD }, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_TIMES, - KEY_EN_NUMPAD_9, - KEY_EN_NUMPAD_6, - KEY_EN_NUMPAD_3, - "Key: Number Pad ,", - - KEY_EN_UNUSED, - KEY_EN_NUMPAD_MINUS, - KEY_EN_NUMPAD_PLUS, - KEY_EN_UNUSED, - KEY_EN_NUMPAD_ENTER, - KEY_EN_UNUSED, + { KEY_EN_NUMPAD_MINUS, 0xB1 }, + { KEY_EN_NUMPAD_PLUS, 0xB2 }, + { KEY_EN_NUMPAD_ENTER, 0xB4 } + } + } + }, +}; + +static std::map AsusClaymoreNoNumpadLayouts = +{ + { + ASUS_TUF_K7_LAYOUT_UK, + { + *ASUS_CLAYMORE_NO_NUMPAD_LAYOUT_KEYS_UK, + 89, + 7, + 19, + { + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, + { KEY_EN_1, 0x09 }, + { KEY_EN_ISO_BACK_SLASH, 0x0C }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, + { KEY_EN_F1, 0x10 }, + { KEY_EN_2, 0x11 }, + { KEY_EN_Q, 0x0A }, + { KEY_EN_A, 0x0B }, + { KEY_EN_Z, 0x14 }, + { KEY_EN_LEFT_ALT, 0x15 }, + { KEY_EN_F2, 0x18 }, + { KEY_EN_3, 0x19 }, + { KEY_EN_W, 0x12 }, + { KEY_EN_S, 0x13 }, + { KEY_EN_X, 0x1C }, + { KEY_EN_F3, 0x20 }, + { KEY_EN_4, 0x21 }, + { KEY_EN_E, 0x1A }, + { KEY_EN_D, 0x1B }, + { KEY_EN_C, 0x24 }, + { KEY_EN_F4, 0x28 }, + { KEY_EN_5, 0x29 }, + { KEY_EN_R, 0x22 }, + { KEY_EN_F, 0x23 }, + { KEY_EN_V, 0x2C }, + { KEY_EN_6, 0x31 }, + { KEY_EN_T, 0x2A }, + { KEY_EN_G, 0x2B }, + { KEY_EN_B, 0x34 }, + { KEY_EN_SPACE, 0x25 }, + { KEY_EN_F5, 0x38 }, + { KEY_EN_7, 0x39 }, + { KEY_EN_Y, 0x32 }, + { KEY_EN_H, 0x33 }, + { KEY_EN_N, 0x3C }, + { KEY_EN_F6, 0x40 }, + { KEY_EN_8, 0x41 }, + { KEY_EN_U, 0x3A }, + { KEY_EN_J, 0x3B }, + { KEY_EN_M, 0x44 }, + { "Logo", 0x45 }, + { KEY_EN_F7, 0x48 }, + { KEY_EN_9, 0x49 }, + { KEY_EN_I, 0x42 }, + { KEY_EN_K, 0x43 }, + { KEY_EN_COMMA, 0x4C }, + { KEY_EN_F8, 0x50 }, + { KEY_EN_0, 0x51 }, + { KEY_EN_O, 0x4A }, + { KEY_EN_L, 0x4B }, + { KEY_EN_PERIOD, 0x54 }, + { KEY_EN_RIGHT_ALT, 0x4D }, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x59 }, + { KEY_EN_P, 0x52 }, + { KEY_EN_SEMICOLON, 0x53 }, + { KEY_EN_FORWARD_SLASH, 0x5C }, + { KEY_EN_RIGHT_FUNCTION, 0x55 }, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x61 }, + { KEY_EN_LEFT_BRACKET, 0x5A }, + { KEY_EN_QUOTE, 0x5B }, + { KEY_EN_MENU, 0x5D }, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x69 }, + { KEY_EN_RIGHT_BRACKET, 0x62 }, + { KEY_EN_POUND, 0x63 }, + { KEY_EN_RIGHT_SHIFT, 0x6C }, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ISO_ENTER, 0x6B }, + { KEY_EN_RIGHT_CONTROL, 0x6D }, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 } + } + } + }, + { + ASUS_TUF_K7_LAYOUT_US, + { + *ASUS_CLAYMORE_NO_NUMPAD_LAYOUT_KEYS_US, + 88, + 7, + 19, + { + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, + { KEY_EN_1, 0x09 }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, + { KEY_EN_F1, 0x10 }, + { KEY_EN_2, 0x11 }, + { KEY_EN_Q, 0x0A }, + { KEY_EN_A, 0x0B }, + { KEY_EN_Z, 0x0C }, + { KEY_EN_LEFT_ALT, 0x15 }, + { KEY_EN_F2, 0x18 }, + { KEY_EN_3, 0x19 }, + { KEY_EN_W, 0x12 }, + { KEY_EN_S, 0x13 }, + { KEY_EN_X, 0x14 }, + { KEY_EN_F3, 0x20 }, + { KEY_EN_4, 0x21 }, + { KEY_EN_E, 0x1A }, + { KEY_EN_D, 0x1B }, + { KEY_EN_C, 0x1C }, + { KEY_EN_F4, 0x28 }, + { KEY_EN_5, 0x29 }, + { KEY_EN_R, 0x22 }, + { KEY_EN_F, 0x23 }, + { KEY_EN_V, 0x24 }, + { KEY_EN_6, 0x31 }, + { KEY_EN_T, 0x2A }, + { KEY_EN_G, 0x2B }, + { KEY_EN_B, 0x2C }, + { KEY_EN_SPACE, 0x25 }, + { KEY_EN_F5, 0x38 }, + { KEY_EN_7, 0x39 }, + { KEY_EN_Y, 0x32 }, + { KEY_EN_H, 0x33 }, + { KEY_EN_N, 0x34 }, + { KEY_EN_F6, 0x40 }, + { KEY_EN_8, 0x41 }, + { KEY_EN_U, 0x3A }, + { KEY_EN_J, 0x3B }, + { KEY_EN_M, 0x3C }, + { "Logo", 0x3D }, + { KEY_EN_F7, 0x48 }, + { KEY_EN_9, 0x49 }, + { KEY_EN_I, 0x42 }, + { KEY_EN_K, 0x43 }, + { KEY_EN_COMMA, 0x44 }, + { KEY_EN_F8, 0x50 }, + { KEY_EN_0, 0x51 }, + { KEY_EN_O, 0x4A }, + { KEY_EN_L, 0x4B }, + { KEY_EN_PERIOD, 0x4C }, + { KEY_EN_RIGHT_ALT, 0x4D }, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x59 }, + { KEY_EN_P, 0x52 }, + { KEY_EN_SEMICOLON, 0x53 }, + { KEY_EN_FORWARD_SLASH, 0x54 }, + { KEY_EN_RIGHT_FUNCTION, 0x55 }, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x61 }, + { KEY_EN_LEFT_BRACKET, 0x5A }, + { KEY_EN_QUOTE, 0x5B }, + { KEY_EN_MENU, 0x5D }, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x69 }, + { KEY_EN_RIGHT_BRACKET, 0x62 }, + { KEY_EN_RIGHT_SHIFT, 0x6C }, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ANSI_BACK_SLASH, 0x6A }, + { KEY_EN_ANSI_ENTER, 0x6B }, + { KEY_EN_RIGHT_CONTROL, 0x6D }, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 } + } + } + }, +}; + +static std::map AsusClaymoreNumpadRightLayouts = +{ + { + ASUS_TUF_K7_LAYOUT_UK, + { + *ASUS_CLAYMORE_NUMPAD_RIGHT_LAYOUT_KEYS_UK, + 106, + 7, + 24, + { + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, + { KEY_EN_1, 0x09 }, + { KEY_EN_ISO_BACK_SLASH, 0x0C }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, + { KEY_EN_F1, 0x10 }, + { KEY_EN_2, 0x11 }, + { KEY_EN_Q, 0x0A }, + { KEY_EN_A, 0x0B }, + { KEY_EN_Z, 0x14 }, + { KEY_EN_LEFT_ALT, 0x15 }, + { KEY_EN_F2, 0x18 }, + { KEY_EN_3, 0x19 }, + { KEY_EN_W, 0x12 }, + { KEY_EN_S, 0x13 }, + { KEY_EN_X, 0x1C }, + { KEY_EN_F3, 0x20 }, + { KEY_EN_4, 0x21 }, + { KEY_EN_E, 0x1A }, + { KEY_EN_D, 0x1B }, + { KEY_EN_C, 0x24 }, + { KEY_EN_F4, 0x28 }, + { KEY_EN_5, 0x29 }, + { KEY_EN_R, 0x22 }, + { KEY_EN_F, 0x23 }, + { KEY_EN_V, 0x2C }, + { KEY_EN_6, 0x31 }, + { KEY_EN_T, 0x2A }, + { KEY_EN_G, 0x2B }, + { KEY_EN_B, 0x34 }, + { KEY_EN_SPACE, 0x25 }, + { KEY_EN_F5, 0x38 }, + { KEY_EN_7, 0x39 }, + { KEY_EN_Y, 0x32 }, + { KEY_EN_H, 0x33 }, + { KEY_EN_N, 0x3C }, + { KEY_EN_F6, 0x40 }, + { KEY_EN_8, 0x41 }, + { KEY_EN_U, 0x3A }, + { KEY_EN_J, 0x3B }, + { KEY_EN_M, 0x44 }, + { "Logo", 0x45 }, + { KEY_EN_F7, 0x48 }, + { KEY_EN_9, 0x49 }, + { KEY_EN_I, 0x42 }, + { KEY_EN_K, 0x43 }, + { KEY_EN_COMMA, 0x4C }, + { KEY_EN_F8, 0x50 }, + { KEY_EN_0, 0x51 }, + { KEY_EN_O, 0x4A }, + { KEY_EN_L, 0x4B }, + { KEY_EN_PERIOD, 0x54 }, + { KEY_EN_RIGHT_ALT, 0x4D }, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x59 }, + { KEY_EN_P, 0x52 }, + { KEY_EN_SEMICOLON, 0x53 }, + { KEY_EN_FORWARD_SLASH, 0x5C }, + { KEY_EN_RIGHT_FUNCTION, 0x55 }, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x61 }, + { KEY_EN_LEFT_BRACKET, 0x5A }, + { KEY_EN_QUOTE, 0x5B }, + { KEY_EN_MENU, 0x5D }, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x69 }, + { KEY_EN_RIGHT_BRACKET, 0x62 }, + { KEY_EN_POUND, 0x63 }, + { KEY_EN_RIGHT_SHIFT, 0x6C }, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ISO_ENTER, 0x6B }, + { KEY_EN_RIGHT_CONTROL, 0x6D }, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 }, + { KEY_EN_NUMPAD_LOCK, 0x99 }, + { KEY_EN_NUMPAD_7, 0x9A }, + { KEY_EN_NUMPAD_4, 0x9B }, + { KEY_EN_NUMPAD_1, 0x9C }, + { KEY_EN_NUMPAD_0, 0x9D }, + { KEY_EN_NUMPAD_DIVIDE, 0xA1 }, + { KEY_EN_NUMPAD_8, 0xA2 }, + { KEY_EN_NUMPAD_5, 0xA3 }, + { KEY_EN_NUMPAD_2, 0xA4 }, + { KEY_EN_NUMPAD_TIMES, 0xA9 }, + { KEY_EN_NUMPAD_9, 0xAA }, + { KEY_EN_NUMPAD_6, 0xAB }, + { KEY_EN_NUMPAD_3, 0xAC }, + { KEY_EN_NUMPAD_PERIOD, 0xAD }, + { KEY_EN_NUMPAD_MINUS, 0xB1 }, + { KEY_EN_NUMPAD_PLUS, 0xB2 }, + { KEY_EN_NUMPAD_ENTER, 0xB4 } + } + } + }, + { + ASUS_TUF_K7_LAYOUT_US, + { + *ASUS_CLAYMORE_NUMPAD_RIGHT_LAYOUT_KEYS_US, + 105, + 7, + 24, + { + { KEY_EN_ESCAPE, 0x00 }, + { KEY_EN_BACK_TICK, 0x01 }, + { KEY_EN_TAB, 0x02 }, + { KEY_EN_CAPS_LOCK, 0x03 }, + { KEY_EN_LEFT_SHIFT, 0x04 }, + { KEY_EN_LEFT_CONTROL, 0x05 }, + { KEY_EN_1, 0x09 }, + { KEY_EN_LEFT_WINDOWS, 0x0D }, + { KEY_EN_F1, 0x10 }, + { KEY_EN_2, 0x11 }, + { KEY_EN_Q, 0x0A }, + { KEY_EN_A, 0x0B }, + { KEY_EN_Z, 0x0C }, + { KEY_EN_LEFT_ALT, 0x15 }, + { KEY_EN_F2, 0x18 }, + { KEY_EN_3, 0x19 }, + { KEY_EN_W, 0x12 }, + { KEY_EN_S, 0x13 }, + { KEY_EN_X, 0x14 }, + { KEY_EN_F3, 0x20 }, + { KEY_EN_4, 0x21 }, + { KEY_EN_E, 0x1A }, + { KEY_EN_D, 0x1B }, + { KEY_EN_C, 0x1C }, + { KEY_EN_F4, 0x28 }, + { KEY_EN_5, 0x29 }, + { KEY_EN_R, 0x22 }, + { KEY_EN_F, 0x23 }, + { KEY_EN_V, 0x24 }, + { KEY_EN_6, 0x31 }, + { KEY_EN_T, 0x2A }, + { KEY_EN_G, 0x2B }, + { KEY_EN_B, 0x2C }, + { KEY_EN_SPACE, 0x25 }, + { KEY_EN_F5, 0x38 }, + { KEY_EN_7, 0x39 }, + { KEY_EN_Y, 0x32 }, + { KEY_EN_H, 0x33 }, + { KEY_EN_N, 0x34 }, + { KEY_EN_F6, 0x40 }, + { KEY_EN_8, 0x41 }, + { KEY_EN_U, 0x3A }, + { KEY_EN_J, 0x3B }, + { KEY_EN_M, 0x3C }, + { "Logo", 0x3D }, + { KEY_EN_F7, 0x48 }, + { KEY_EN_9, 0x49 }, + { KEY_EN_I, 0x42 }, + { KEY_EN_K, 0x43 }, + { KEY_EN_COMMA, 0x44 }, + { KEY_EN_F8, 0x50 }, + { KEY_EN_0, 0x51 }, + { KEY_EN_O, 0x4A }, + { KEY_EN_L, 0x4B }, + { KEY_EN_PERIOD, 0x4C }, + { KEY_EN_RIGHT_ALT, 0x4D }, + { KEY_EN_F9, 0x60 }, + { KEY_EN_MINUS, 0x59 }, + { KEY_EN_P, 0x52 }, + { KEY_EN_SEMICOLON, 0x53 }, + { KEY_EN_FORWARD_SLASH, 0x54 }, + { KEY_EN_RIGHT_FUNCTION, 0x55 }, + { KEY_EN_F10, 0x68 }, + { KEY_EN_EQUALS, 0x61 }, + { KEY_EN_LEFT_BRACKET, 0x5A }, + { KEY_EN_QUOTE, 0x5B }, + { KEY_EN_MENU, 0x5D }, + { KEY_EN_F11, 0x70 }, + { KEY_EN_BACKSPACE, 0x69 }, + { KEY_EN_RIGHT_BRACKET, 0x62 }, + { KEY_EN_RIGHT_SHIFT, 0x6C }, + { KEY_EN_F12, 0x78 }, + { KEY_EN_ANSI_BACK_SLASH, 0x6A }, + { KEY_EN_ANSI_ENTER, 0x6B }, + { KEY_EN_RIGHT_CONTROL, 0x6D }, + { KEY_EN_PRINT_SCREEN, 0x80 }, + { KEY_EN_INSERT, 0x81 }, + { KEY_EN_DELETE, 0x82 }, + { KEY_EN_LEFT_ARROW, 0x85 }, + { KEY_EN_SCROLL_LOCK, 0x88 }, + { KEY_EN_HOME, 0x89 }, + { KEY_EN_END, 0x8A }, + { KEY_EN_UP_ARROW, 0x8C }, + { KEY_EN_DOWN_ARROW, 0x8D }, + { KEY_EN_PAUSE_BREAK, 0x90 }, + { KEY_EN_PAGE_UP, 0x91 }, + { KEY_EN_PAGE_DOWN, 0x92 }, + { KEY_EN_RIGHT_ARROW, 0x95 }, + { KEY_EN_NUMPAD_LOCK, 0x99 }, + { KEY_EN_NUMPAD_7, 0x9A }, + { KEY_EN_NUMPAD_4, 0x9B }, + { KEY_EN_NUMPAD_1, 0x9C }, + { KEY_EN_NUMPAD_0, 0x9D }, + { KEY_EN_NUMPAD_DIVIDE, 0xA1 }, + { KEY_EN_NUMPAD_8, 0xA2 }, + { KEY_EN_NUMPAD_5, 0xA3 }, + { KEY_EN_NUMPAD_2, 0xA4 }, + { KEY_EN_NUMPAD_TIMES, 0xA9 }, + { KEY_EN_NUMPAD_9, 0xAA }, + { KEY_EN_NUMPAD_6, 0xAB }, + { KEY_EN_NUMPAD_3, 0xAC }, + { KEY_EN_NUMPAD_PERIOD, 0xAD }, + { KEY_EN_NUMPAD_MINUS, 0xB1 }, + { KEY_EN_NUMPAD_PLUS, 0xB2 }, + { KEY_EN_NUMPAD_ENTER, 0xB4 } + } + } + }, +}; + +static std::map AsusClaymoreNumpadLeftLayouts = +{ + { + ASUS_TUF_K7_LAYOUT_UK, + { + *ASUS_CLAYMORE_NUMPAD_LEFT_LAYOUT_KEYS_UK, + 106, + 7, + 24, + { + { KEY_EN_NUMPAD_LOCK, 0x01 }, + { KEY_EN_NUMPAD_7, 0x02 }, + { KEY_EN_NUMPAD_4, 0x03 }, + { KEY_EN_NUMPAD_1, 0x04 }, + { KEY_EN_NUMPAD_0, 0x05 }, + { KEY_EN_NUMPAD_DIVIDE, 0x09 }, + { KEY_EN_NUMPAD_8, 0x0A }, + { KEY_EN_NUMPAD_5, 0x0B }, + { KEY_EN_NUMPAD_2, 0x0C }, + { KEY_EN_NUMPAD_TIMES, 0x11 }, + { KEY_EN_NUMPAD_9, 0x12 }, + { KEY_EN_NUMPAD_6, 0x13 }, + { KEY_EN_NUMPAD_3, 0x14 }, + { KEY_EN_NUMPAD_PERIOD, 0x15 }, + { KEY_EN_NUMPAD_MINUS, 0x19 }, + { KEY_EN_NUMPAD_PLUS, 0x1A }, + { KEY_EN_NUMPAD_ENTER, 0x1C }, + { KEY_EN_ESCAPE, 0x20 }, + { KEY_EN_BACK_TICK, 0x21 }, + { KEY_EN_TAB, 0x22 }, + { KEY_EN_CAPS_LOCK, 0x23 }, + { KEY_EN_LEFT_SHIFT, 0x24 }, + { KEY_EN_LEFT_CONTROL, 0x25 }, + { KEY_EN_1, 0x29 }, + { KEY_EN_ISO_BACK_SLASH, 0x2C }, + { KEY_EN_LEFT_WINDOWS, 0x2D }, + { KEY_EN_F1, 0x30 }, + { KEY_EN_2, 0x31 }, + { KEY_EN_Q, 0x2A }, + { KEY_EN_A, 0x2B }, + { KEY_EN_Z, 0x34 }, + { KEY_EN_LEFT_ALT, 0x35 }, + { KEY_EN_F2, 0x38 }, + { KEY_EN_3, 0x39 }, + { KEY_EN_W, 0x32 }, + { KEY_EN_S, 0x33 }, + { KEY_EN_X, 0x3C }, + { KEY_EN_F3, 0x40 }, + { KEY_EN_4, 0x41 }, + { KEY_EN_E, 0x3A }, + { KEY_EN_D, 0x3B }, + { KEY_EN_C, 0x44 }, + { KEY_EN_F4, 0x48 }, + { KEY_EN_5, 0x49 }, + { KEY_EN_R, 0x42 }, + { KEY_EN_F, 0x43 }, + { KEY_EN_V, 0x4C }, + { KEY_EN_6, 0x51 }, + { KEY_EN_T, 0x4A }, + { KEY_EN_G, 0x4B }, + { KEY_EN_B, 0x54 }, + { KEY_EN_SPACE, 0x45 }, + { KEY_EN_F5, 0x58 }, + { KEY_EN_7, 0x59 }, + { KEY_EN_Y, 0x52 }, + { KEY_EN_H, 0x53 }, + { KEY_EN_N, 0x5C }, + { KEY_EN_F6, 0x60 }, + { KEY_EN_8, 0x61 }, + { KEY_EN_U, 0x5A }, + { KEY_EN_J, 0x5B }, + { KEY_EN_M, 0x64 }, + { "Logo", 0x65 }, + { KEY_EN_F7, 0x68 }, + { KEY_EN_9, 0x69 }, + { KEY_EN_I, 0x62 }, + { KEY_EN_K, 0x63 }, + { KEY_EN_COMMA, 0x6C }, + { KEY_EN_F8, 0x70 }, + { KEY_EN_0, 0x71 }, + { KEY_EN_O, 0x6A }, + { KEY_EN_L, 0x6B }, + { KEY_EN_PERIOD, 0x74 }, + { KEY_EN_RIGHT_ALT, 0x6D }, + { KEY_EN_F9, 0x80 }, + { KEY_EN_MINUS, 0x79 }, + { KEY_EN_P, 0x72 }, + { KEY_EN_SEMICOLON, 0x73 }, + { KEY_EN_FORWARD_SLASH, 0x7C }, + { KEY_EN_RIGHT_FUNCTION, 0x75 }, + { KEY_EN_F10, 0x88 }, + { KEY_EN_EQUALS, 0x81 }, + { KEY_EN_LEFT_BRACKET, 0x7A }, + { KEY_EN_QUOTE, 0x7B }, + { KEY_EN_MENU, 0x7D }, + { KEY_EN_F11, 0x90 }, + { KEY_EN_BACKSPACE, 0x89 }, + { KEY_EN_RIGHT_BRACKET, 0x82 }, + { KEY_EN_POUND, 0x83 }, + { KEY_EN_RIGHT_SHIFT, 0x8C }, + { KEY_EN_F12, 0x98 }, + { KEY_EN_ISO_ENTER, 0x8B }, + { KEY_EN_RIGHT_CONTROL, 0x8D }, + { KEY_EN_PRINT_SCREEN, 0xA0 }, + { KEY_EN_INSERT, 0xA1 }, + { KEY_EN_DELETE, 0xA2 }, + { KEY_EN_LEFT_ARROW, 0xA5 }, + { KEY_EN_SCROLL_LOCK, 0xA8 }, + { KEY_EN_HOME, 0xA9 }, + { KEY_EN_END, 0xAA }, + { KEY_EN_UP_ARROW, 0xAC }, + { KEY_EN_DOWN_ARROW, 0xAD }, + { KEY_EN_PAUSE_BREAK, 0xB0 }, + { KEY_EN_PAGE_UP, 0xB1 }, + { KEY_EN_PAGE_DOWN, 0xB2 }, + { KEY_EN_RIGHT_ARROW, 0xB5 } + } + } + }, + { + ASUS_TUF_K7_LAYOUT_US, + { + *ASUS_CLAYMORE_NUMPAD_LEFT_LAYOUT_KEYS_US, + 105, + 7, + 24, + { + { KEY_EN_NUMPAD_LOCK, 0x01 }, + { KEY_EN_NUMPAD_7, 0x02 }, + { KEY_EN_NUMPAD_4, 0x03 }, + { KEY_EN_NUMPAD_1, 0x04 }, + { KEY_EN_NUMPAD_0, 0x05 }, + { KEY_EN_NUMPAD_DIVIDE, 0x09 }, + { KEY_EN_NUMPAD_8, 0x0A }, + { KEY_EN_NUMPAD_5, 0x0B }, + { KEY_EN_NUMPAD_2, 0x0C }, + { KEY_EN_NUMPAD_TIMES, 0x11 }, + { KEY_EN_NUMPAD_9, 0x12 }, + { KEY_EN_NUMPAD_6, 0x13 }, + { KEY_EN_NUMPAD_3, 0x14 }, + { KEY_EN_NUMPAD_PERIOD, 0x15 }, + { KEY_EN_NUMPAD_MINUS, 0x19 }, + { KEY_EN_NUMPAD_PLUS, 0x1A }, + { KEY_EN_NUMPAD_ENTER, 0x1C }, + { KEY_EN_ESCAPE, 0x20 }, + { KEY_EN_BACK_TICK, 0x21 }, + { KEY_EN_TAB, 0x22 }, + { KEY_EN_CAPS_LOCK, 0x23 }, + { KEY_EN_LEFT_SHIFT, 0x24 }, + { KEY_EN_LEFT_CONTROL, 0x25 }, + { KEY_EN_1, 0x29 }, + { KEY_EN_LEFT_WINDOWS, 0x2D }, + { KEY_EN_F1, 0x30 }, + { KEY_EN_2, 0x31 }, + { KEY_EN_Q, 0x2A }, + { KEY_EN_A, 0x2B }, + { KEY_EN_Z, 0x2C }, + { KEY_EN_LEFT_ALT, 0x35 }, + { KEY_EN_F2, 0x38 }, + { KEY_EN_3, 0x39 }, + { KEY_EN_W, 0x32 }, + { KEY_EN_S, 0x33 }, + { KEY_EN_X, 0x34 }, + { KEY_EN_F3, 0x40 }, + { KEY_EN_4, 0x41 }, + { KEY_EN_E, 0x3A }, + { KEY_EN_D, 0x3B }, + { KEY_EN_C, 0x3C }, + { KEY_EN_F4, 0x48 }, + { KEY_EN_5, 0x49 }, + { KEY_EN_R, 0x42 }, + { KEY_EN_F, 0x43 }, + { KEY_EN_V, 0x44 }, + { KEY_EN_6, 0x51 }, + { KEY_EN_T, 0x4A }, + { KEY_EN_G, 0x4B }, + { KEY_EN_B, 0x4C }, + { KEY_EN_SPACE, 0x45 }, + { KEY_EN_F5, 0x58 }, + { KEY_EN_7, 0x59 }, + { KEY_EN_Y, 0x52 }, + { KEY_EN_H, 0x53 }, + { KEY_EN_N, 0x54 }, + { KEY_EN_F6, 0x60 }, + { KEY_EN_8, 0x61 }, + { KEY_EN_U, 0x5A }, + { KEY_EN_J, 0x5B }, + { KEY_EN_M, 0x5C }, + { "Logo", 0x5D }, + { KEY_EN_F7, 0x68 }, + { KEY_EN_9, 0x69 }, + { KEY_EN_I, 0x62 }, + { KEY_EN_K, 0x63 }, + { KEY_EN_COMMA, 0x64 }, + { KEY_EN_F8, 0x70 }, + { KEY_EN_0, 0x71 }, + { KEY_EN_O, 0x6A }, + { KEY_EN_L, 0x6B }, + { KEY_EN_PERIOD, 0x6C }, + { KEY_EN_RIGHT_ALT, 0x6D }, + { KEY_EN_F9, 0x80 }, + { KEY_EN_MINUS, 0x79 }, + { KEY_EN_P, 0x72 }, + { KEY_EN_SEMICOLON, 0x73 }, + { KEY_EN_FORWARD_SLASH, 0x74 }, + { KEY_EN_RIGHT_FUNCTION, 0x75 }, + { KEY_EN_F10, 0x88 }, + { KEY_EN_EQUALS, 0x81 }, + { KEY_EN_LEFT_BRACKET, 0x7A }, + { KEY_EN_QUOTE, 0x7B }, + { KEY_EN_MENU, 0x7D }, + { KEY_EN_F11, 0x90 }, + { KEY_EN_BACKSPACE, 0x89 }, + { KEY_EN_RIGHT_BRACKET, 0x82 }, + { KEY_EN_RIGHT_SHIFT, 0x8C }, + { KEY_EN_F12, 0x98 }, + { KEY_EN_ANSI_BACK_SLASH, 0x8A }, + { KEY_EN_ANSI_ENTER, 0x8B }, + { KEY_EN_RIGHT_CONTROL, 0x8D }, + { KEY_EN_PRINT_SCREEN, 0xA0 }, + { KEY_EN_INSERT, 0xA1 }, + { KEY_EN_DELETE, 0xA2 }, + { KEY_EN_LEFT_ARROW, 0xA5 }, + { KEY_EN_SCROLL_LOCK, 0xA8 }, + { KEY_EN_HOME, 0xA9 }, + { KEY_EN_END, 0xAA }, + { KEY_EN_UP_ARROW, 0xAC }, + { KEY_EN_DOWN_ARROW, 0xAD }, + { KEY_EN_PAUSE_BREAK, 0xB0 }, + { KEY_EN_PAGE_UP, 0xB1 }, + { KEY_EN_PAGE_DOWN, 0xB2 }, + { KEY_EN_RIGHT_ARROW, 0xB5 } } } }, diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 849a1999..4bc31d83 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -48,6 +48,7 @@ #define AURA_ROG_STRIX_SCOPE_RX_PID 0x1951 #define AURA_ROG_STRIX_SCOPE_TKL_PID 0x190C #define AURA_ROG_STRIX_SCOPE_TKL_PNK_LTD_PID 0x1954 +#define AURA_ROG_CLAYMORE_PID 0x184D #define AURA_TUF_K7_GAMING_PID 0x18AA #define AURA_TUF_K3_GAMING_PID 0x194B @@ -260,7 +261,7 @@ void DetectAsusAuraTUFUSBKeyboard(hid_device_info* info, const std::string& name if(dev) { - AuraTUFKeyboardController* controller = new AuraTUFKeyboardController(dev, info->path, info->product_id); + AuraTUFKeyboardController* controller = new AuraTUFKeyboardController(dev, info->path, info->product_id, info->release_number); RGBController_AuraTUFKeyboard* rgb_controller = new RGBController_AuraTUFKeyboard(controller); rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); @@ -302,6 +303,7 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope", DetectAs REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope RX", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_RX_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope TKL", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_TKL_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope TKL PNK LTD", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_TKL_PNK_LTD_PID, 1, 0xFF00); +REGISTER_HID_DETECTOR_IP("ASUS ROG Claymore", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_CLAYMORE_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K7", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K7_GAMING_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming K3", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_TUF_K3_GAMING_PID, 1, 0xFF00); diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp index bcdf2378..a950878e 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.cpp @@ -24,178 +24,312 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardController* controller_ptr) { - controller = controller_ptr; + controller = controller_ptr; - name = "ASUS Aura Keyboard"; - vendor = "ASUS"; - type = DEVICE_TYPE_KEYBOARD; - description = "ASUS Aura Keyboard Device"; - version = controller->GetVersion(); - location = controller->GetDeviceLocation(); - serial = controller->GetSerialString(); + pid = controller->device_pid; - 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; - modes.push_back(Direct); + if(pid != AURA_ROG_CLAYMORE_PID) + { + name = "ASUS Aura Keyboard"; + vendor = "ASUS"; + type = DEVICE_TYPE_KEYBOARD; + description = "ASUS Aura Keyboard Device"; + version = controller->GetVersion(); + location = controller->GetDeviceLocation(); + serial = controller->GetSerialString(); - mode Static; - 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 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; + modes.push_back(Direct); - 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 | 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 Static; + 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 Color_Cycle; - 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 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 | 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 Wave; - 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 Color_Cycle; + 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 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 | 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 Wave; + 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 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 | 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 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 | 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 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 | 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 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 | 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 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 | 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 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 | 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 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 | 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 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 | 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 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 | 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); + 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 | 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 | 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); + } + else + { + + name = "ASUS ROG Claymore"; + vendor = "ASUS"; + type = DEVICE_TYPE_KEYBOARD; + description = "ASUS Aura Keyboard Device"; + version = controller->GetVersion(); + location = controller->GetDeviceLocation(); + serial = controller->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; + modes.push_back(Direct); + + mode Static; + Static.name = "Static"; + Static.value = AURA_KEYBOARD_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE; + 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_SPEED | MODE_FLAG_AUTOMATIC_SAVE; + Breathing.speed_min = AURA_CLAYMORE_SPEED_MIN; + Breathing.speed_max = AURA_CLAYMORE_SPEED_MAX; + Breathing.speed = AURA_CLAYMORE_SPEED_DEFAULT_BREATHING; + Breathing.color_mode = MODE_COLORS_MODE_SPECIFIC; + Breathing.colors_min = 1; + Breathing.colors_max = 2; + Breathing.colors.resize(2); + modes.push_back(Breathing); + + mode Color_Cycle; + Color_Cycle.name = "Spectrum Cycle"; + Color_Cycle.value = AURA_KEYBOARD_MODE_COLOR_CYCLE; + Color_Cycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_AUTOMATIC_SAVE; + Color_Cycle.speed_min = AURA_CLAYMORE_SPEED_MIN; + Color_Cycle.speed_max = AURA_CLAYMORE_SPEED_MAX; + Color_Cycle.speed = AURA_CLAYMORE_SPEED_DEFAULT_COLOR_CYCLE; + Color_Cycle.color_mode = MODE_COLORS_NONE; + modes.push_back(Color_Cycle); + + 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 | MODE_FLAG_AUTOMATIC_SAVE; + Reactive.speed_min = AURA_CLAYMORE_SPEED_MIN; + Reactive.speed_max = AURA_CLAYMORE_SPEED_MAX; + Reactive.speed = AURA_CLAYMORE_SPEED_DEFAULT_REACTIVE; + Reactive.color_mode = MODE_COLORS_MODE_SPECIFIC; + Reactive.colors_min = 1; + Reactive.colors_max = 2; + Reactive.colors.resize(2); + modes.push_back(Reactive); + + mode Wave; + Wave.name = "Rainbow Wave"; + Wave.value = AURA_KEYBOARD_MODE_WAVE; + Wave.flags = MODE_COLORS_NONE | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_AUTOMATIC_SAVE; + Wave.speed_min = AURA_CLAYMORE_SPEED_MIN; + Wave.speed_max = AURA_CLAYMORE_SPEED_MAX; + Wave.speed = AURA_CLAYMORE_SPEED_DEFAULT_WAVE; + Wave.direction = MODE_DIRECTION_LEFT; + Wave.color_mode = MODE_COLORS_NONE; + modes.push_back(Wave); + + mode Color_Wave; + Color_Wave.name = "Color Wave"; + Color_Wave.value = AURA_KEYBOARD_MODE_WAVE; + Color_Wave.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_DIRECTION_UD | MODE_FLAG_AUTOMATIC_SAVE; + Color_Wave.speed_min = AURA_CLAYMORE_SPEED_MIN; + Color_Wave.speed_max = AURA_CLAYMORE_SPEED_MAX; + Color_Wave.speed = AURA_CLAYMORE_SPEED_DEFAULT_WAVE; + Color_Wave.direction = MODE_DIRECTION_LEFT; + Color_Wave.color_mode = MODE_COLORS_MODE_SPECIFIC; + Color_Wave.colors_min = 1; + Color_Wave.colors_max = 2; + Color_Wave.colors.resize(2); + modes.push_back(Color_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 | MODE_FLAG_AUTOMATIC_SAVE; + Ripple.speed_min = AURA_CLAYMORE_SPEED_MIN; + Ripple.speed_max = AURA_CLAYMORE_SPEED_MAX; + Ripple.speed = AURA_CLAYMORE_SPEED_DEFAULT_RIPPLE; + Ripple.color_mode = MODE_COLORS_MODE_SPECIFIC; + Ripple.colors_min = 1; + Ripple.colors_max = 2; + Ripple.colors.resize(2); + modes.push_back(Ripple); + + 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 | MODE_FLAG_AUTOMATIC_SAVE; + Starry_Night.speed_min = AURA_CLAYMORE_SPEED_MIN; + Starry_Night.speed_max = AURA_CLAYMORE_SPEED_MAX; + Starry_Night.speed = AURA_CLAYMORE_SPEED_DEFAULT_STARRY_NIGHT; + Starry_Night.color_mode = MODE_COLORS_MODE_SPECIFIC; + Starry_Night.colors_min = 1; + Starry_Night.colors_max = 2; + Starry_Night.colors.resize(2); + 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_AUTOMATIC_SAVE; + Quicksand.direction = MODE_DIRECTION_DOWN; + Quicksand.speed_min = AURA_CLAYMORE_SPEED_MIN; + Quicksand.speed_max = AURA_CLAYMORE_SPEED_MAX; + Quicksand.speed = AURA_CLAYMORE_SPEED_DEFAULT_QUICKSAND; + Quicksand.color_mode = MODE_COLORS_MODE_SPECIFIC; + Quicksand.colors_min = 6; + Quicksand.colors_max = 6; + Quicksand.colors.resize(6); + modes.push_back(Quicksand); + } SetupZones(); } @@ -207,10 +341,44 @@ RGBController_AuraTUFKeyboard::~RGBController_AuraTUFKeyboard() void RGBController_AuraTUFKeyboard::SetupZones() { - int layout = controller->GetLayout(); + unsigned char layout = controller->GetLayout(); - if(AsusTUFK7Layouts.find(layout % 100) == AsusTUFK7Layouts.end()) + std::map * keyboard_ptr; + + switch(pid) { + case AURA_ROG_CLAYMORE_PID: + unsigned char numpad; + numpad = controller->GetNumpadLocation(); + switch(numpad) + { + case 0: + keyboard_ptr = &AsusClaymoreNoNumpadLayouts; + break; + case 2: + keyboard_ptr = &AsusClaymoreNumpadRightLayouts; + break; + case 3: + keyboard_ptr = &AsusClaymoreNumpadLeftLayouts; + break; + default: + keyboard_ptr = &AsusClaymoreNoNumpadLayouts; + } + break; + case AURA_TUF_K7_GAMING_PID: + keyboard_ptr = &AsusTUFK7Layouts; + break; + default: + keyboard_ptr = &AsusTUFK7Layouts; + } + + std::map & keyboard = *keyboard_ptr; + + if(keyboard.find(layout % 100) == keyboard.end()) + { + /*---------------------------------------------------------*\ + | If Layout not found, take uk or us | + \*---------------------------------------------------------*/ layout = std::floor(layout/100) == 2 ? ASUS_TUF_K7_LAYOUT_UK : ASUS_TUF_K7_LAYOUT_US; } else @@ -218,33 +386,32 @@ void RGBController_AuraTUFKeyboard::SetupZones() layout = layout % 100; } - unsigned int total_led_count = 0; + zone keyboard_zone; + keyboard_zone.name = "Keyboard"; + keyboard_zone.type = ZONE_TYPE_MATRIX; + keyboard_zone.leds_min = keyboard[layout].size; + keyboard_zone.leds_max = keyboard[layout].size; + keyboard_zone.leds_count = keyboard[layout].size; + keyboard_zone.matrix_map = new matrix_map_type; + keyboard_zone.matrix_map->height = keyboard[layout].rows; + keyboard_zone.matrix_map->width = keyboard[layout].cols; + keyboard_zone.matrix_map->map = keyboard[layout].matrix_map; + zones.push_back(keyboard_zone); - int zone_size = 138; - - zone keyboard; - keyboard.name = ZONE_EN_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; - - - for(unsigned int led_idx = 0; led_idx < total_led_count; led_idx++) + for(unsigned int led_id = 0; led_id < keyboard[layout].size; led_id++) { led new_led; - new_led.name = AsusTUFK7Layouts[layout].led_names[led_idx]; + new_led.name = keyboard[layout].led_names[led_id].name; + new_led.value = keyboard[layout].led_names[led_id].id; leds.push_back(new_led); } SetupColors(); + + /*---------------------------------------------------------*\ + | sends the init packet for the default mode (direct) | + \*---------------------------------------------------------*/ + DeviceUpdateMode(); } void RGBController_AuraTUFKeyboard::ResizeZone(int /*zone*/, int /*new_size*/) @@ -254,12 +421,20 @@ void RGBController_AuraTUFKeyboard::ResizeZone(int /*zone*/, int /*new_size*/) void RGBController_AuraTUFKeyboard::DeviceUpdateLEDs() { - DeviceUpdateMode(); + std::vector led_color_list = {}; + + for(int i = 0; i < colors.size(); i++) + { + led_color_list.push_back({ leds[i].value, colors[i] }); + } + + controller->UpdateLeds(led_color_list); + } void RGBController_AuraTUFKeyboard::UpdateZoneLEDs(int /*zone*/) { - controller->UpdateLeds(colors); + DeviceUpdateLEDs(); } void RGBController_AuraTUFKeyboard::UpdateSingleLED(int led) @@ -268,72 +443,100 @@ void RGBController_AuraTUFKeyboard::UpdateSingleLED(int led) unsigned char green = RGBGetGValue(colors[led]); unsigned char blue = RGBGetBValue(colors[led]); - controller->UpdateSingleLed(led, red, green, blue); + controller->UpdateSingleLed(leds[led].value, red, green, blue); } +static const uint8_t direction_map[2][6] = +{ + { 4, 0, 6, 2, 8, 1 }, // Default directions Left, Right, Up, Down, Horizontal, Vertical + { 0, 4, 6, 2, 0xFF, 0xFF }, // AURA_ROG_CLAYMORE directions Left, Right, Up, Down +}; + void RGBController_AuraTUFKeyboard::DeviceUpdateMode() { - unsigned char color_mode; - std::vector mode_colors; + if(pid == AURA_ROG_CLAYMORE_PID) + { + controller->AllowRemoteControl(1); + } + + unsigned char color_mode = 0; + unsigned char direction = 0; + unsigned char brightness = 0; if(modes[active_mode].value == AURA_KEYBOARD_MODE_DIRECT) { - controller->UpdateLeds(colors); + if(pid == AURA_ROG_CLAYMORE_PID) controller->AllowRemoteControl(3); + return; + }; + + if(pid != AURA_ROG_CLAYMORE_PID) + { + brightness = modes[active_mode].brightness * 25; + + switch(modes[active_mode].value) + { + case AURA_KEYBOARD_MODE_BREATHING: + case AURA_KEYBOARD_MODE_REACTIVE: + case AURA_KEYBOARD_MODE_STARRY_NIGHT: + case AURA_KEYBOARD_MODE_CURRENT: + case AURA_KEYBOARD_MODE_RAIN_DROP: + bool color_is_black = (modes[active_mode].colors.size() > 1 && modes[active_mode].colors[1] == 000); + + if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC && !color_is_black) + { + color_mode = 16; + } + break; + } + + if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) + { + color_mode = 1; + } + + if(modes[active_mode].value == AURA_KEYBOARD_MODE_WAVE) + { + /*----------------------------------------------------------*\ + | converting openrgb direction value to keyboard directions | + \*----------------------------------------------------------*/ + direction = direction_map[0][modes[active_mode].direction]; + } } else { - bool mode_with_double = (modes[active_mode].value == 1 || modes[active_mode].value == 3 || modes[active_mode].value == 6 || modes[active_mode].value == 8 || modes[active_mode].value == 9); - - if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC && mode_with_double && modes[active_mode].colors.size() > 1) + if(modes[active_mode].color_mode == MODE_COLORS_RANDOM) { - if(modes[active_mode].colors[1] == 000) - { - color_mode = 0; - } - else - { - color_mode = 16; - } - } - else - { - color_mode = modes[active_mode].color_mode == MODE_COLORS_RANDOM ? 1 : 0; + color_mode = 1; } - int direction = 0; + if(modes[active_mode].value == AURA_KEYBOARD_MODE_WAVE) { + if (modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) color_mode = 2; - switch (modes[active_mode].direction) - { - case MODE_DIRECTION_LEFT: - direction = 0; - break; - case MODE_DIRECTION_RIGHT: - direction = 4; - break; - case MODE_DIRECTION_UP: - direction = 6; - break; - case MODE_DIRECTION_DOWN: - direction = 2; - break; - case MODE_DIRECTION_HORIZONTAL: - direction = 8; - break; - case MODE_DIRECTION_VERTICAL: - direction = 1; - break; + /*----------------------------------------------------------*\ + | converting openrgb direction value to keyboard directions | + \*----------------------------------------------------------*/ + direction = direction_map[1][modes[active_mode].direction]; } + } - mode_colors = modes[active_mode].color_mode == MODE_COLORS_PER_LED ? std::vector(colors) : std::vector(modes[active_mode].colors); + controller->UpdateDevice(modes[active_mode].value, std::vector(modes[active_mode].colors), direction, color_mode, modes[active_mode].speed, brightness); - controller->UpdateDevice(modes[active_mode].value, mode_colors, direction, color_mode, (15 - modes[active_mode].speed), modes[active_mode].brightness * 25); + if(pid == AURA_ROG_CLAYMORE_PID) + { + controller->UpdateMode(modes[active_mode].value); + controller->SaveMode(); + controller->AllowRemoteControl(0); } } void RGBController_AuraTUFKeyboard::DeviceSaveMode() { - controller->ClearResponses(); - DeviceUpdateMode(); - controller->AwaitResponse(); - controller->SaveMode(); + /*----------------------------------------------------------*\ + | not available for Claymore | + \*----------------------------------------------------------*/ + if(pid != AURA_ROG_CLAYMORE_PID) + { + DeviceUpdateMode(); + controller->SaveMode(); + } } diff --git a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h index df122f42..1bbb3498 100644 --- a/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h +++ b/Controllers/AsusAuraUSBController/RGBController_AsusAuraTUFKeyboard.h @@ -13,12 +13,27 @@ enum { - AURA_KEYBOARD_SPEED_MIN = 0, - AURA_KEYBOARD_SPEED_MAX = 15, + AURA_KEYBOARD_SPEED_MIN = 15, + AURA_KEYBOARD_SPEED_MAX = 0, AURA_KEYBOARD_SPEED_DEFAULT = 8, AURA_KEYBOARD_BRIGHTNESS_MIN = 0, AURA_KEYBOARD_BRIGHTNESS_MAX = 4, - AURA_KEYBOARD_BRIGHTNESS_DEFAULT = 4 + AURA_KEYBOARD_BRIGHTNESS_DEFAULT = 4, +}; + +enum +{ + AURA_CLAYMORE_SPEED_MIN = 254, + AURA_CLAYMORE_SPEED_MAX = 0, + AURA_CLAYMORE_SPEED_DEFAULT_STATIC = 0, + AURA_CLAYMORE_SPEED_DEFAULT_BREATHING = 107, + AURA_CLAYMORE_SPEED_DEFAULT_COLOR_CYCLE = 121, + AURA_CLAYMORE_SPEED_DEFAULT_REACTIVE = 56, + AURA_CLAYMORE_SPEED_DEFAULT_WAVE = 50, + AURA_CLAYMORE_SPEED_DEFAULT_RIPPLE = 108, + AURA_CLAYMORE_SPEED_DEFAULT_STARRY_NIGHT = 54, + AURA_CLAYMORE_SPEED_DEFAULT_QUICKSAND = 103, + }; class RGBController_AuraTUFKeyboard : public RGBController @@ -40,4 +55,5 @@ public: private: AuraTUFKeyboardController* controller; + uint16_t pid; };