From cfedcd218073f326486a78959c1bbf2c40eac72d Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Sat, 7 Feb 2026 00:14:36 -0600 Subject: [PATCH] Add Razer Blackwidow V4 Pro 75% wireless mode and add missing underglow LEDs to the matrix --- .../RazerController/RazerControllerDetect.cpp | 1 + Controllers/RazerController/RazerDevices.cpp | 71 +++++++++++++++---- Controllers/RazerController/RazerDevices.h | 1 + 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/Controllers/RazerController/RazerControllerDetect.cpp b/Controllers/RazerController/RazerControllerDetect.cpp index b6b572d06..41f234ab8 100644 --- a/Controllers/RazerController/RazerControllerDetect.cpp +++ b/Controllers/RazerController/RazerControllerDetect.cpp @@ -239,6 +239,7 @@ REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V3 Mini (Wireless)", Det REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_PID, 0x03, 0x01, 0x00); REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4 Pro", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_PRO_PID, 0x03, 0x01, 0x00); REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4 Pro 75% (Wired)", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_PRO_75_WIRED_PID, 0x03, 0x0C, 0x01); +REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4 Pro 75% (Wireless)", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_PRO_75_WIRELESS_PID, 0x02, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4 75% (Wired)", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_75_WIRED_PID, 0x03, 0x01, 0x00); REGISTER_HID_DETECTOR_IPU("Razer Blackwidow V4 X", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_V4_X_PID, 0x02, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Blackwidow X Chroma", DetectRazerControllers, RAZER_VID, RAZER_BLACKWIDOW_X_CHROMA_PID, 0x02, 0x01, 0x02); diff --git a/Controllers/RazerController/RazerDevices.cpp b/Controllers/RazerController/RazerDevices.cpp index 0023cdb74..20ffb069b 100644 --- a/Controllers/RazerController/RazerDevices.cpp +++ b/Controllers/RazerController/RazerDevices.cpp @@ -345,7 +345,7 @@ keyboard_keymap_overlay_values razer_blackwidow_v4_pro_layout } }; -keyboard_keymap_overlay_values razer_blackwidow_v4_pro_75_wired_layout +keyboard_keymap_overlay_values razer_blackwidow_v4_pro_75_layout { KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE, { @@ -361,27 +361,34 @@ keyboard_keymap_overlay_values razer_blackwidow_v4_pro_75_wired_layout \*-------------------------------------------------------------------------------------------------------------------------------------*/ { 0, 0, 0, 0, "Left Underglow 0", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 0, 2, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Delete gap between ESC and F1 + { 0, 0, 14, 0, "Left Underglow 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, + { 0, 0, 15, 0, "Left Underglow 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, + { 0, 0, 16, 0, "Left Underglow 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, { 0, 0, 17, 0, "Right Underglow 0", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 1, 0, 0, "Left Underglow 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + + { 0, 1, 0, 0, "Left Underglow 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 1, 14, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Add gap between = and Backspace { 0, 1, 16, 0, KEY_EN_DELETE, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 1, 17, 0, "Right Underglow 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 2, 0, 0, "Left Underglow 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 1, 17, 0, "Right Underglow 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 0, 0, "Left Underglow 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 2, 16, 0, KEY_EN_PAGE_UP, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 2, 17, 0, "Right Underglow 2", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 3, 0, 0, "Left Underglow 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 2, 17, 0, "Right Underglow 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 0, 0, "Left Underglow 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 3, 16, 0, KEY_EN_PAGE_DOWN, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 3, 17, 0, "Right Underglow 3", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 4, 0, 0, "Left Underglow 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 3, 17, 0, "Right Underglow 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 0, 0, "Left Underglow 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 4, 15, 0, KEY_EN_UP_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 4, 16, 0, KEY_EN_INSERT, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 4, 17, 0, "Right Underglow 4", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 5, 0, 0, "Left Underglow 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 4, 17, 0, "Right Underglow 6", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 0, 0, "Left Underglow 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 5, 0, "Right Underglow 1", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, + { 0, 5, 6, 0, "Right Underglow 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, + { 0, 5, 8, 0, "Right Underglow 8", KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY }, { 0, 5, 13, 0, KEY_EN_UNUSED, KEY_EN_UNUSED, KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT, }, // Remove Menu key between Fn and RCtrl { 0, 5, 14, 0, KEY_EN_LEFT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 5, 15, 0, KEY_EN_DOWN_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, { 0, 5, 16, 0, KEY_EN_RIGHT_ARROW, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, - { 0, 5, 17, 0, "Right Underglow 5", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, + { 0, 5, 17, 0, "Right Underglow 7", KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, } }; @@ -1817,7 +1824,7 @@ static const razer_device blackwidow_v4_pro_device = }; /*-------------------------------------------------------------*\ -| Razer Blackwidow V4 Pro 75% 1532:02B3 | +| Razer Blackwidow V4 Pro 75% (Wired) 1532:02B3 | | | | Zone "Keyboard" | | Matrix | @@ -1848,7 +1855,42 @@ static const razer_device blackwidow_v4_pro_75_wired_device = NULL, NULL }, - &razer_blackwidow_v4_pro_75_wired_layout + &razer_blackwidow_v4_pro_75_layout +}; + +/*-------------------------------------------------------------*\ +| Razer Blackwidow V4 Pro 75% (Wireless) 1532:02B4 | +| | +| Zone "Keyboard" | +| Matrix | +| 6 Rows, 18 Columns | +\*-------------------------------------------------------------*/ +static const razer_zone blackwidow_v4_pro_75_wireless_zone = +{ + ZONE_EN_KEYBOARD, + ZONE_TYPE_MATRIX, + 6, + 18 +}; + +static const razer_device blackwidow_v4_pro_75_wireless_device = +{ + "Razer Blackwidow V4 Pro 75% (Wireless)", + RAZER_BLACKWIDOW_V4_PRO_75_WIRELESS_PID, + DEVICE_TYPE_KEYBOARD, + RAZER_MATRIX_TYPE_EXTENDED, + 0x1F, + 6, + 18, + { + &blackwidow_v4_pro_75_wireless_zone, + NULL, + NULL, + NULL, + NULL, + NULL + }, + &razer_blackwidow_v4_pro_75_layout }; /*-------------------------------------------------------------*\ @@ -1883,7 +1925,7 @@ static const razer_device blackwidow_v4_75_wired_device = NULL, NULL }, - &razer_blackwidow_v4_pro_75_wired_layout + &razer_blackwidow_v4_pro_75_layout }; /*-------------------------------------------------------------*\ @@ -9093,6 +9135,7 @@ const razer_device* razer_device_list[] = &blackwidow_v4_device, &blackwidow_v4_pro_device, &blackwidow_v4_pro_75_wired_device, + &blackwidow_v4_pro_75_wireless_device, &blackwidow_v4_75_wired_device, &blackwidow_v4_x_device, &blackwidow_x_chroma_device, diff --git a/Controllers/RazerController/RazerDevices.h b/Controllers/RazerController/RazerDevices.h index cae553883..cb90674b7 100644 --- a/Controllers/RazerController/RazerDevices.h +++ b/Controllers/RazerController/RazerDevices.h @@ -54,6 +54,7 @@ #define RAZER_BLACKWIDOW_V4_PRO_PID 0x028D #define RAZER_BLACKWIDOW_V4_X_PID 0x0293 #define RAZER_BLACKWIDOW_V4_PRO_75_WIRED_PID 0x02B3 +#define RAZER_BLACKWIDOW_V4_PRO_75_WIRELESS_PID 0x02B4 #define RAZER_BLACKWIDOW_V4_75_WIRED_PID 0x02A5 #define RAZER_BLACKWIDOW_X_CHROMA_PID 0x0216 #define RAZER_BLACKWIDOW_X_CHROMA_TE_PID 0x021A