adding hardware modes and layout detection to Asus ROG Falchion to resolve #2732

This commit is contained in:
Mola19 2022-09-18 23:54:57 +02:00
parent 34cb864147
commit 790abdd9c0
6 changed files with 226 additions and 40 deletions

View file

@ -57,6 +57,7 @@ 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;
@ -92,9 +93,7 @@ std::string AuraTUFKeyboardController::GetVersion()
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];
@ -166,12 +165,12 @@ int AuraTUFKeyboardController::GetNumpadLocation()
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
usb_buf[0x01] = 0x40;
usb_buf[0x02] = 0x60;
ClearResponses();
hid_write(dev, usb_buf, 65);
unsigned char usb_buf_out[65];
@ -183,7 +182,6 @@ int AuraTUFKeyboardController::GetNumpadLocation()
void AuraTUFKeyboardController::SaveMode()
{
unsigned char usb_save_buf[65];
memset(usb_save_buf, 0x00, sizeof(usb_save_buf));
usb_save_buf[0x00] = 0x00;
@ -191,9 +189,7 @@ void AuraTUFKeyboardController::SaveMode()
usb_save_buf[0x02] = 0x55;
ClearResponses();
hid_write(dev, usb_save_buf, 65);
AwaitResponse(60);
}
@ -203,7 +199,6 @@ void AuraTUFKeyboardController::SaveMode()
void AuraTUFKeyboardController::AllowRemoteControl(unsigned char type)
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
@ -211,9 +206,7 @@ void AuraTUFKeyboardController::AllowRemoteControl(unsigned char type)
usb_buf[0x02] = type;
ClearResponses();
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}
@ -229,7 +222,6 @@ void AuraTUFKeyboardController::UpdateSingleLed
| Set up message packet for single LED |
\*-----------------------------------------------------*/
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0] = 0x00;
@ -247,9 +239,7 @@ void AuraTUFKeyboardController::UpdateSingleLed
usb_buf[8] = blue;
ClearResponses();
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}
@ -263,7 +253,6 @@ void AuraTUFKeyboardController::UpdateLeds
for(int i = 0; i < packets; i++)
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
int remaining = colors.size() - i * 15;
@ -283,11 +272,8 @@ void AuraTUFKeyboardController::UpdateLeds
usb_buf[j * 4 + 7] = RGBGetGValue(colors[i * 15 + j].color);
usb_buf[j * 4 + 8] = RGBGetBValue(colors[i * 15 + j].color);
}
ClearResponses();
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}
}
@ -303,7 +289,6 @@ void AuraTUFKeyboardController::UpdateDevice
)
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
@ -401,12 +386,7 @@ void AuraTUFKeyboardController::UpdateDevice
}
ClearResponses();
/*-----------------------------------------------------*\
| Send packet |
\*-----------------------------------------------------*/
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}
@ -419,7 +399,6 @@ void AuraTUFKeyboardController::UpdateQuicksandColors
)
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
@ -437,9 +416,7 @@ void AuraTUFKeyboardController::UpdateQuicksandColors
}
ClearResponses();
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}
@ -449,7 +426,6 @@ void AuraTUFKeyboardController::UpdateQuicksandColors
void AuraTUFKeyboardController::UpdateMode(unsigned char mode)
{
unsigned char usb_buf[65];
memset(usb_buf, 0x00, sizeof(usb_buf));
usb_buf[0x00] = 0x00;
@ -460,9 +436,7 @@ void AuraTUFKeyboardController::UpdateMode(unsigned char mode)
usb_buf[0x05] = mode;
ClearResponses();
hid_write(dev, usb_buf, 65);
AwaitResponse(20);
}

View file

@ -33,6 +33,8 @@ enum
enum
{
AURA_ROG_FALCHION_WIRED_PID = 0x193C,
AURA_ROG_FALCHION_WIRELESS_PID = 0x193E,
AURA_TUF_K7_GAMING_PID = 0x18AA,
AURA_TUF_K3_GAMING_PID = 0x194B,
AURA_ROG_CLAYMORE_PID = 0x184D,

View file

@ -79,6 +79,22 @@ static unsigned int ASUS_TUF_K7_LAYOUT_KEYS_UK[6][24] = {
{ 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_FALCHION_LAYOUT_KEYS_US[5][16] = {
{ 0, 5, 7, 12, 16, 20, 24, 29, 33, 37, 41, 46, 51, 56, NA, 63 },
{ 1, NA, 8, 13, 17, 21, 25, 30, 34, 38, 42, 47, 52, 57, 59, 64 },
{ 2, NA, 9, 14, 18, 22, 26, 31, 35, 39, 43, 48, 53, NA, 60, 65 },
{ 3, NA, 10, 15, 19, 23, 27, 32, 36, 40, 44, 49, 54, NA, 61, 66 },
{ 4, 6, 11, NA, NA, NA, 28, NA, NA, NA, 45, 50, 55, 58, 62, 67 }
};
static unsigned int ASUS_FALCHION_LAYOUT_KEYS_UK[5][16] = {
{ 0, 5, 8, 13, 17, 21, 25, 30, 34, 38, 42, 47, 52, 57, NA, 64 },
{ 1, NA, 9, 14, 18, 22, 26, 31, 35, 39, 43, 48, 53, 58, 61, 65 },
{ 2, NA, 10, 15, 19, 23, 27, 32, 36, 40, 44, 49, 54, 59, NA, 66 },
{ 3, 6, 11, 16, 20, 24, 28, 33, 37, 41, 45, 50, 55, NA, 62, 67 },
{ 4, 7, 12, NA, NA, NA, 29, NA, NA, NA, 46, 51, 56, 60, 63, 68 }
};
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 },
@ -416,6 +432,200 @@ static std::map<int,layout_info> AsusTUFK7Layouts =
},
};
static std::map<int,layout_info> AsusFalchionLayouts =
{
{
ASUS_TUF_K7_LAYOUT_UK,
{
*ASUS_FALCHION_LAYOUT_KEYS_UK,
69,
5,
16,
{
{ KEY_EN_ESCAPE, 0x00 },
{ KEY_EN_TAB, 0x01 },
{ KEY_EN_CAPS_LOCK, 0x02 },
{ KEY_EN_LEFT_SHIFT, 0x03 },
{ KEY_EN_LEFT_CONTROL, 0x04 },
{ KEY_EN_1, 0x08 },
{ KEY_EN_ISO_BACK_SLASH, 0x0B },
{ KEY_EN_LEFT_WINDOWS, 0x0C },
{ KEY_EN_2, 0x10 },
{ KEY_EN_Q, 0x09 },
{ KEY_EN_A, 0x0A },
{ KEY_EN_Z, 0x13 },
{ KEY_EN_LEFT_ALT, 0x14 },
{ KEY_EN_3, 0x18 },
{ KEY_EN_W, 0x11 },
{ KEY_EN_S, 0x12 },
{ KEY_EN_X, 0x1B },
{ KEY_EN_4, 0x20 },
{ KEY_EN_E, 0x19 },
{ KEY_EN_D, 0x1A },
{ KEY_EN_C, 0x23 },
{ KEY_EN_5, 0x28 },
{ KEY_EN_R, 0x21 },
{ KEY_EN_F, 0x22 },
{ KEY_EN_V, 0x2B },
{ KEY_EN_6, 0x30 },
{ KEY_EN_T, 0x29 },
{ KEY_EN_G, 0x2A },
{ KEY_EN_B, 0x33 },
{ KEY_EN_SPACE, 0x34 },
{ KEY_EN_7, 0x38 },
{ KEY_EN_Y, 0x31 },
{ KEY_EN_H, 0x32 },
{ KEY_EN_N, 0x3B },
{ KEY_EN_8, 0x40 },
{ KEY_EN_U, 0x39 },
{ KEY_EN_J, 0x3A },
{ KEY_EN_M, 0x43 },
{ KEY_EN_9, 0x48 },
{ KEY_EN_I, 0x41 },
{ KEY_EN_K, 0x42 },
{ KEY_EN_COMMA, 0x4B },
{ KEY_EN_0, 0x50 },
{ KEY_EN_O, 0x49 },
{ KEY_EN_L, 0x4A },
{ KEY_EN_PERIOD, 0x53 },
{ KEY_EN_RIGHT_ALT, 0x4C },
{ KEY_EN_MINUS, 0x58 },
{ KEY_EN_P, 0x51 },
{ KEY_EN_SEMICOLON, 0x52 },
{ KEY_EN_FORWARD_SLASH, 0x5B },
{ KEY_EN_RIGHT_FUNCTION, 0x54 },
{ KEY_EN_EQUALS, 0x60 },
{ KEY_EN_LEFT_BRACKET, 0x59 },
{ KEY_EN_QUOTE, 0x5A },
{ KEY_EN_RIGHT_SHIFT, 0x63 },
{ KEY_EN_RIGHT_CONTROL, 0x5C },
{ KEY_EN_BACKSPACE, 0x68 },
{ KEY_EN_RIGHT_BRACKET, 0x61 },
{ KEY_EN_POUND, 0x62 },
{ KEY_EN_LEFT_ARROW, 0x64 },
{ KEY_EN_ISO_ENTER, 0x6A },
{ KEY_EN_UP_ARROW, 0x6B },
{ KEY_EN_DOWN_ARROW, 0x6C },
{ KEY_EN_INSERT, 0x70 },
{ KEY_EN_DELETE, 0x71 },
{ KEY_EN_PAGE_UP, 0x72 },
{ KEY_EN_PAGE_DOWN, 0x73 },
{ KEY_EN_RIGHT_ARROW, 0x74 },
}
}
},
{
ASUS_TUF_K7_LAYOUT_US,
{
*ASUS_FALCHION_LAYOUT_KEYS_US,
68,
5,
16,
{
{ KEY_EN_ESCAPE, 0x00 },
{ KEY_EN_TAB, 0x01 },
{ KEY_EN_CAPS_LOCK, 0x02 },
{ KEY_EN_LEFT_SHIFT, 0x03 },
{ KEY_EN_LEFT_CONTROL, 0x04 },
{ KEY_EN_1, 0x08 },
{ KEY_EN_LEFT_WINDOWS, 0x0C },
{ KEY_EN_2, 0x10 },
{ KEY_EN_Q, 0x09 },
{ KEY_EN_A, 0x0A },
{ KEY_EN_Z, 0x13 },
{ KEY_EN_LEFT_ALT, 0x14 },
{ KEY_EN_3, 0x18 },
{ KEY_EN_W, 0x11 },
{ KEY_EN_S, 0x12 },
{ KEY_EN_X, 0x1B },
{ KEY_EN_4, 0x20 },
{ KEY_EN_E, 0x19 },
{ KEY_EN_D, 0x1A },
{ KEY_EN_C, 0x23 },
{ KEY_EN_5, 0x28 },
{ KEY_EN_R, 0x21 },
{ KEY_EN_F, 0x22 },
{ KEY_EN_V, 0x2B },
{ KEY_EN_6, 0x30 },
{ KEY_EN_T, 0x29 },
{ KEY_EN_G, 0x2A },
{ KEY_EN_B, 0x33 },
{ KEY_EN_SPACE, 0x34 },
{ KEY_EN_7, 0x38 },
{ KEY_EN_Y, 0x31 },
{ KEY_EN_H, 0x32 },
{ KEY_EN_N, 0x3B },
{ KEY_EN_8, 0x40 },
{ KEY_EN_U, 0x39 },
{ KEY_EN_J, 0x3A },
{ KEY_EN_M, 0x43 },
{ KEY_EN_9, 0x48 },
{ KEY_EN_I, 0x41 },
{ KEY_EN_K, 0x42 },
{ KEY_EN_COMMA, 0x4B },
{ KEY_EN_0, 0x50 },
{ KEY_EN_O, 0x49 },
{ KEY_EN_L, 0x4A },
{ KEY_EN_PERIOD, 0x53 },
{ KEY_EN_RIGHT_ALT, 0x4C },
{ KEY_EN_MINUS, 0x58 },
{ KEY_EN_P, 0x51 },
{ KEY_EN_SEMICOLON, 0x52 },
{ KEY_EN_FORWARD_SLASH, 0x5B },
{ KEY_EN_RIGHT_FUNCTION, 0x54 },
{ KEY_EN_EQUALS, 0x60 },
{ KEY_EN_LEFT_BRACKET, 0x59 },
{ KEY_EN_QUOTE, 0x5A },
{ KEY_EN_RIGHT_SHIFT, 0x63 },
{ KEY_EN_RIGHT_CONTROL, 0x5C },
{ KEY_EN_BACKSPACE, 0x68 },
{ KEY_EN_RIGHT_BRACKET, 0x61 },
{ KEY_EN_LEFT_ARROW, 0x64 },
{ KEY_EN_ANSI_BACK_SLASH, 0x69 },
{ KEY_EN_ANSI_ENTER, 0x6A },
{ KEY_EN_UP_ARROW, 0x6B },
{ KEY_EN_DOWN_ARROW, 0x6C },
{ KEY_EN_INSERT, 0x70 },
{ KEY_EN_DELETE, 0x71 },
{ KEY_EN_PAGE_UP, 0x72 },
{ KEY_EN_PAGE_DOWN, 0x73 },
{ KEY_EN_RIGHT_ARROW, 0x74 },
}
}
},
};
static std::map<int,layout_info> AsusClaymoreNoNumpadLayouts =
{
{

View file

@ -106,10 +106,6 @@ AuraKeyboardMappingLayoutType GetKeyboardMappingLayoutType(int pid)
case AURA_ROG_STRIX_SCOPE_TKL_PNK_LTD_PID:
return SCOPE_TKL_LAYOUT;
case AURA_ROG_FALCHION_WIRED_PID:
case AURA_ROG_FALCHION_WIRELESS_PID:
return FALCHION_LAYOUT;
default:
return FLARE_LAYOUT;
}
@ -296,8 +292,6 @@ REGISTER_HID_DETECTOR ("ASUS Aura Motherboard", DetectAs
/*-----------------------------------------------------------------*\
| KEYBOARDS |
\*-----------------------------------------------------------------*/
REGISTER_HID_DETECTOR_IP("ASUS ROG Falchion (Wired)", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_FALCHION_WIRED_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Falchion (Wireless)", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_FALCHION_WIRELESS_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare PNK LTD", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PNK_LTD_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope", DetectAsusAuraUSBKeyboards, AURA_USB_VID, AURA_ROG_STRIX_SCOPE_PID, 1, 0xFF00);
@ -305,6 +299,8 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Scope RX", DetectAs
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 ROG Falchion (Wired)", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_FALCHION_WIRED_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS ROG Falchion (Wireless)", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_FALCHION_WIRELESS_PID, 1, 0xFF00);
REGISTER_HID_DETECTOR_IP("ASUS TUF Gaming 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);

View file

@ -28,6 +28,8 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont
pid = controller->device_pid;
const unsigned char AURA_KEYBOARD_SPEED_MIN = (pid == AURA_ROG_FALCHION_WIRED_PID || pid == AURA_ROG_FALCHION_WIRELESS_PID) ? 255 : 15;
if(pid != AURA_ROG_CLAYMORE_PID)
{
name = "ASUS Aura Keyboard";
@ -347,6 +349,13 @@ void RGBController_AuraTUFKeyboard::SetupZones()
switch(pid)
{
case AURA_TUF_K7_GAMING_PID:
keyboard_ptr = &AsusTUFK7Layouts;
break;
case AURA_ROG_FALCHION_WIRED_PID:
case AURA_ROG_FALCHION_WIRELESS_PID:
keyboard_ptr = &AsusFalchionLayouts;
break;
case AURA_ROG_CLAYMORE_PID:
unsigned char numpad;
numpad = controller->GetNumpadLocation();
@ -365,9 +374,6 @@ void RGBController_AuraTUFKeyboard::SetupZones()
keyboard_ptr = &AsusClaymoreNoNumpadLayouts;
}
break;
case AURA_TUF_K7_GAMING_PID:
keyboard_ptr = &AsusTUFK7Layouts;
break;
default:
keyboard_ptr = &AsusTUFK7Layouts;
}
@ -423,13 +429,12 @@ void RGBController_AuraTUFKeyboard::DeviceUpdateLEDs()
{
std::vector<led_color> led_color_list = {};
for(unsigned int i = 0; i < colors.size(); i++)
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*/)

View file

@ -13,7 +13,6 @@
enum
{
AURA_KEYBOARD_SPEED_MIN = 15,
AURA_KEYBOARD_SPEED_MAX = 0,
AURA_KEYBOARD_SPEED_DEFAULT = 8,
AURA_KEYBOARD_BRIGHTNESS_MIN = 0,