From cf823702a0dfc8a0222f3b9a62ceaa45f750d1c7 Mon Sep 17 00:00:00 2001 From: raahim arbaz Date: Fri, 1 May 2026 01:25:00 +0500 Subject: [PATCH] Add support for ASUS ROG Falchion RX Low Profile keyboard Adds detection for the wired (PID 0x1B04) variant on AsusAuraTUFKeyboardController with a 68-key ANSI layout map verified by per-lamp probing on real hardware. The visual key grid is identical to the original ROG Falchion's ANSI layout so the existing matrix is reused. The firmware allocates 8 slots per column with the right-cluster keys at lamp indices 82..117, above the 82-lamp count advertised by the LampArray descriptor. Closes #4203 --- .../AsusAuraTUFKeyboardController.h | 1 + .../AsusAuraTUFKeyboardLayouts.h | 99 +++++++++++++++++++ .../RGBController_AsusAuraTUFKeyboard.cpp | 4 + .../AsusAuraUSBControllerDetect.cpp | 3 + 4 files changed, 107 insertions(+) diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardController.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardController.h index 323e9bdad..338793e8c 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardController.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardController.h @@ -39,6 +39,7 @@ enum AURA_ROG_CLAYMORE_PID = 0x184D, AURA_ROG_FALCHION_WIRED_PID = 0x193C, AURA_ROG_FALCHION_WIRELESS_PID = 0x193E, + AURA_ROG_FALCHION_RX_LP_WIRED_PID = 0x1B04, AURA_ROG_STRIX_FLARE_PID = 0x1875, AURA_ROG_STRIX_FLARE_PNK_LTD_PID = 0x18CF, AURA_ROG_STRIX_FLARE_COD_BO4_PID = 0x18AF, diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardLayouts.h b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardLayouts.h index 2b33d80d6..4c347b1b8 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardLayouts.h +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/AsusAuraTUFKeyboardLayouts.h @@ -3033,6 +3033,105 @@ static std::map AsusFalchionLayouts = }; +static std::map AsusFalchionRxLpLayouts = +{ + { + ASUS_TUF_K7_LAYOUT_US, + { + *ASUS_FALCHION_LAYOUT_KEYS_ANSI, + 68, + 5, + 16, + { + { KEY_EN_ESCAPE, 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_2, 0x11 }, + { KEY_EN_Q, 0x0A }, + { KEY_EN_A, 0x0B }, + { KEY_EN_Z, 0x14 }, + { KEY_EN_LEFT_ALT, 0x15 }, + + { KEY_EN_3, 0x19 }, + { KEY_EN_W, 0x12 }, + { KEY_EN_S, 0x13 }, + { KEY_EN_X, 0x1C }, + + { KEY_EN_4, 0x21 }, + { KEY_EN_E, 0x1A }, + { KEY_EN_D, 0x1B }, + { KEY_EN_C, 0x24 }, + + { 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, 0x35 }, + + { KEY_EN_7, 0x39 }, + { KEY_EN_Y, 0x32 }, + { KEY_EN_H, 0x33 }, + { KEY_EN_N, 0x3C }, + + { KEY_EN_8, 0x41 }, + { KEY_EN_U, 0x3A }, + { KEY_EN_J, 0x3B }, + { KEY_EN_M, 0x44 }, + + { KEY_EN_9, 0x49 }, + { KEY_EN_I, 0x42 }, + { KEY_EN_K, 0x43 }, + { KEY_EN_COMMA, 0x4C }, + + { KEY_EN_0, 0x51 }, + { KEY_EN_O, 0x4A }, + { KEY_EN_L, 0x4B }, + { KEY_EN_PERIOD, 0x54 }, + { KEY_EN_RIGHT_ALT, 0x4D }, + + { KEY_EN_MINUS, 0x59 }, + { KEY_EN_P, 0x52 }, + { KEY_EN_SEMICOLON, 0x53 }, + { KEY_EN_FORWARD_SLASH, 0x5C }, + { KEY_EN_RIGHT_FUNCTION, 0x55 }, + + { KEY_EN_EQUALS, 0x61 }, + { KEY_EN_LEFT_BRACKET, 0x5A }, + { KEY_EN_QUOTE, 0x5B }, + { KEY_EN_RIGHT_SHIFT, 0x64 }, + { KEY_EN_RIGHT_CONTROL, 0x5D }, + + { KEY_EN_BACKSPACE, 0x69 }, + { KEY_EN_RIGHT_BRACKET, 0x62 }, + { KEY_EN_LEFT_ARROW, 0x65 }, + + { KEY_EN_ANSI_BACK_SLASH, 0x6A }, + { KEY_EN_ANSI_ENTER, 0x6B }, + { KEY_EN_UP_ARROW, 0x6C }, + { KEY_EN_DOWN_ARROW, 0x6D }, + + { KEY_EN_INSERT, 0x71 }, + { KEY_EN_DELETE, 0x72 }, + { KEY_EN_PAGE_UP, 0x73 }, + { KEY_EN_PAGE_DOWN, 0x74 }, + { KEY_EN_RIGHT_ARROW, 0x75 }, + } + } + }, +}; + + static std::map AsusClaymoreNoNumpadLayouts = { { diff --git a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/RGBController_AsusAuraTUFKeyboard.cpp b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/RGBController_AsusAuraTUFKeyboard.cpp index 1d4c216cc..7cb7fed11 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/RGBController_AsusAuraTUFKeyboard.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraTUFKeyboardController/RGBController_AsusAuraTUFKeyboard.cpp @@ -67,6 +67,7 @@ RGBController_AuraTUFKeyboard::RGBController_AuraTUFKeyboard(AuraTUFKeyboardCont case AURA_ROG_AZOTH_2_4_PID: case AURA_ROG_FALCHION_WIRED_PID: case AURA_ROG_FALCHION_WIRELESS_PID: + case AURA_ROG_FALCHION_RX_LP_WIRED_PID: case AURA_ROG_STRIX_FLARE_II_PID: case AURA_ROG_STRIX_FLARE_II_ANIMATE_PID: case AURA_ROG_STRIX_SCOPE_RX_PID: @@ -460,6 +461,9 @@ void RGBController_AuraTUFKeyboard::SetupZones() case AURA_ROG_FALCHION_WIRELESS_PID: keyboard_ptr = &AsusFalchionLayouts; break; + case AURA_ROG_FALCHION_RX_LP_WIRED_PID: + keyboard_ptr = &AsusFalchionRxLpLayouts; + break; case AURA_ROG_CLAYMORE_PID: unsigned char numpad; numpad = controller->GetNumpadLocation(); diff --git a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp index 6a0977668..8f748a904 100644 --- a/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp +++ b/Controllers/AsusAuraUSBController/AsusAuraUSBControllerDetect.cpp @@ -60,6 +60,7 @@ #define AURA_ROG_CLAYMORE_PID 0x184D #define AURA_ROG_FALCHION_WIRED_PID 0x193C #define AURA_ROG_FALCHION_WIRELESS_PID 0x193E +#define AURA_ROG_FALCHION_RX_LP_WIRED_PID 0x1B04 #define AURA_ROG_STRIX_FLARE_PID 0x1875 #define AURA_ROG_STRIX_FLARE_PNK_LTD_PID 0x18CF #define AURA_ROG_STRIX_FLARE_COD_BO4_PID 0x18AF @@ -362,6 +363,8 @@ REGISTER_HID_DETECTOR_IP("ASUS ROG Azoth 2.4GHz", Dete 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 ROG Falchion RX Low Profile (Wired)", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_FALCHION_RX_LP_WIRED_PID, 1, 0xFF00); + REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare PNK LTD", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_FLARE_PNK_LTD_PID, 1, 0xFF00); REGISTER_HID_DETECTOR_IP("ASUS ROG Strix Flare CoD Black Ops 4 Edition", DetectAsusAuraTUFUSBKeyboard, AURA_USB_VID, AURA_ROG_STRIX_FLARE_COD_BO4_PID, 1, 0xFF00);