diff --git a/60-openrgb.rules b/60-openrgb.rules index eeaeeaa88..a7244f8ce 100644 --- a/60-openrgb.rules +++ b/60-openrgb.rules @@ -579,6 +579,7 @@ SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0227", TAG+="uacces SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0257", TAG+="uaccess", TAG+="Huntsman_Mini" SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0243", TAG+="uaccess" SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0207", TAG+="uaccess" +SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0266", TAG+="uaccess", TAG+="Huntsman V2 Analog" SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="021e", TAG+="uaccess" SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="025d", TAG+="uaccess" SUBSYSTEMS=="usb", ATTR{idVendor}=="1532", ATTR{idProduct}=="0208", TAG+="uaccess" diff --git a/Controllers/RazerController/RazerController.cpp b/Controllers/RazerController/RazerController.cpp index 47d268620..20c40ba79 100644 --- a/Controllers/RazerController/RazerController.cpp +++ b/Controllers/RazerController/RazerController.cpp @@ -132,6 +132,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha case RAZER_HUNTSMAN_PID: case RAZER_HUNTSMAN_MINI_PID: case RAZER_HUNTSMAN_TE_PID: + case RAZER_HUNTSMAN_V2_ANALOG_PID: case RAZER_ORNATA_CHROMA_PID: case RAZER_ORNATA_CHROMA_V2_PID: case RAZER_CORE_PID: @@ -224,6 +225,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha case RAZER_HUNTSMAN_PID: case RAZER_HUNTSMAN_MINI_PID: case RAZER_HUNTSMAN_TE_PID: + case RAZER_HUNTSMAN_V2_ANALOG_PID: case RAZER_KRAKEN_KITTY_EDITION_PID: case RAZER_LANCEHEAD_TE_WIRED_PID: case RAZER_LANCEHEAD_2017_WIRED_PID: @@ -481,6 +483,7 @@ bool RazerController::SupportsWave() case RAZER_HUNTSMAN_ELITE_PID: case RAZER_HUNTSMAN_MINI_PID: case RAZER_HUNTSMAN_TE_PID: + case RAZER_HUNTSMAN_V2_ANALOG_PID: case RAZER_ORBWEAVER_CHROMA_PID: case RAZER_TARTARUS_V2_PID: diff --git a/Controllers/RazerController/RazerControllerDetect.cpp b/Controllers/RazerController/RazerControllerDetect.cpp index e36e6a779..235ba05fd 100644 --- a/Controllers/RazerController/RazerControllerDetect.cpp +++ b/Controllers/RazerController/RazerControllerDetect.cpp @@ -231,6 +231,7 @@ REGISTER_HID_DETECTOR_IPU("Razer Huntsman", Det REGISTER_HID_DETECTOR_IPU("Razer Huntsman Elite", DetectRazerControllers, RAZER_VID, RAZER_HUNTSMAN_ELITE_PID, 0x02, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Huntsman Mini", DetectRazerControllers, RAZER_VID, RAZER_HUNTSMAN_MINI_PID, 0x02, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Huntsman Tournament Edition", DetectRazerControllers, RAZER_VID, RAZER_HUNTSMAN_TE_PID, 0x02, 0x01, 0x02); +REGISTER_HID_DETECTOR_IPU("Razer Huntsman V2 Analog", DetectRazerControllers, RAZER_VID, RAZER_HUNTSMAN_V2_ANALOG_PID, 0x03, 0x0C, 0x01); REGISTER_HID_DETECTOR_IPU("Razer Ornata Chroma", DetectRazerControllers, RAZER_VID, RAZER_ORNATA_CHROMA_PID, 0x02, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Ornata Chroma V2", DetectRazerControllers, RAZER_VID, RAZER_ORNATA_CHROMA_V2_PID, 0x02, 0x01, 0x02); diff --git a/Controllers/RazerController/RazerDevices.h b/Controllers/RazerController/RazerDevices.h index 392b98a30..d7349ab20 100644 --- a/Controllers/RazerController/RazerDevices.h +++ b/Controllers/RazerController/RazerDevices.h @@ -72,6 +72,7 @@ #define RAZER_HUNTSMAN_PID 0x0227 #define RAZER_HUNTSMAN_MINI_PID 0x0257 #define RAZER_HUNTSMAN_TE_PID 0x0243 +#define RAZER_HUNTSMAN_V2_ANALOG_PID 0x0266 #define RAZER_ORBWEAVER_CHROMA_PID 0x0207 #define RAZER_ORNATA_CHROMA_PID 0x021E #define RAZER_ORNATA_CHROMA_V2_PID 0x025D @@ -1122,6 +1123,125 @@ static const razer_key huntsman_elite_keymap[] = { 0, 5, 20, "Key: Number Pad ." }, }; +#define HUNTSMAN_V2_ANALOG_KEYMAP_SIZE (sizeof(huntsman_v2_analog_keymap) / sizeof(huntsman_v2_analog_keymap[0])) + +static const razer_key huntsman_v2_analog_keymap[] = +{ + /*---------------------------------------------------------------------*\ + | Zone, Row, Column, Key | + \*---------------------------------------------------------------------*/ + { 0, 0, 1, "Key: Escape" }, + { 0, 0, 3, "Key: F1" }, + { 0, 0, 4, "Key: F2" }, + { 0, 0, 5, "Key: F3" }, + { 0, 0, 6, "Key: F4" }, + { 0, 0, 7, "Key: F5" }, + { 0, 0, 8, "Key: F6" }, + { 0, 0, 9, "Key: F7" }, + { 0, 0, 10, "Key: F8" }, + { 0, 0, 11, "Key: F9" }, + { 0, 0, 12, "Key: F10" }, + { 0, 0, 13, "Key: F11" }, + { 0, 0, 14, "Key: F12" }, + { 0, 0, 15, "Key: Print Screen" }, + { 0, 0, 16, "Key: Scroll Lock" }, + { 0, 0, 17, "Key: Pause/Break" }, + { 0, 0, 18, "Key: Media Previous" }, + { 0, 0, 19, "Key: Media Play/Pause" }, + { 0, 0, 20, "Key: Media Next" }, + { 0, 0, 21, "Key: Media Mute" }, + { 0, 1, 1, "Key: `" }, + { 0, 1, 2, "Key: 1" }, + { 0, 1, 3, "Key: 2" }, + { 0, 1, 4, "Key: 3" }, + { 0, 1, 5, "Key: 4" }, + { 0, 1, 6, "Key: 5" }, + { 0, 1, 7, "Key: 6" }, + { 0, 1, 8, "Key: 7" }, + { 0, 1, 9, "Key: 8" }, + { 0, 1, 10, "Key: 9" }, + { 0, 1, 11, "Key: 0" }, + { 0, 1, 12, "Key: -" }, + { 0, 1, 13, "Key: =" }, + { 0, 1, 14, "Key: Backspace" }, + { 0, 1, 15, "Key: Insert" }, + { 0, 1, 16, "Key: Home" }, + { 0, 1, 17, "Key: Page Up" }, + { 0, 1, 18, "Key: Num Lock" }, + { 0, 1, 19, "Key: Number Pad /" }, + { 0, 1, 20, "Key: Number Pad *" }, + { 0, 1, 21, "Key: Number Pad -" }, + { 0, 2, 1, "Key: Tab" }, + { 0, 2, 2, "Key: Q" }, + { 0, 2, 3, "Key: W" }, + { 0, 2, 4, "Key: E" }, + { 0, 2, 5, "Key: R" }, + { 0, 2, 6, "Key: T" }, + { 0, 2, 7, "Key: Y" }, + { 0, 2, 8, "Key: U" }, + { 0, 2, 9, "Key: I" }, + { 0, 2, 10, "Key: O" }, + { 0, 2, 11, "Key: P" }, + { 0, 2, 12, "Key: [" }, + { 0, 2, 13, "Key: ]" }, + { 0, 2, 14, "Key: \\ (ANSI)" }, + { 0, 2, 15, "Key: Delete" }, + { 0, 2, 16, "Key: End" }, + { 0, 2, 17, "Key: Page Down" }, + { 0, 2, 18, "Key: Number Pad 7" }, + { 0, 2, 19, "Key: Number Pad 8" }, + { 0, 2, 20, "Key: Number Pad 9" }, + { 0, 2, 21, "Key: Number Pad +" }, + { 0, 3, 1, "Key: Caps Lock" }, + { 0, 3, 2, "Key: A" }, + { 0, 3, 3, "Key: S" }, + { 0, 3, 4, "Key: D" }, + { 0, 3, 5, "Key: F" }, + { 0, 3, 6, "Key: G" }, + { 0, 3, 7, "Key: H" }, + { 0, 3, 8, "Key: J" }, + { 0, 3, 9, "Key: K" }, + { 0, 3, 10, "Key: L" }, + { 0, 3, 11, "Key: ;" }, + { 0, 3, 12, "Key: '" }, + { 0, 3, 13, "Key: #" }, + { 0, 3, 14, "Key: Enter" }, + { 0, 3, 18, "Key: Number Pad 4" }, + { 0, 3, 19, "Key: Number Pad 5" }, + { 0, 3, 20, "Key: Number Pad 6" }, + { 0, 4, 1, "Key: Left Shift" }, + { 0, 4, 2, "Key: \\ (ISO)" }, + { 0, 4, 3, "Key: Z" }, + { 0, 4, 4, "Key: X" }, + { 0, 4, 5, "Key: C" }, + { 0, 4, 6, "Key: V" }, + { 0, 4, 7, "Key: B" }, + { 0, 4, 8, "Key: N" }, + { 0, 4, 9, "Key: M" }, + { 0, 4, 10, "Key: ," }, + { 0, 4, 11, "Key: ." }, + { 0, 4, 12, "Key: /" }, + { 0, 4, 14, "Key: Right Shift" }, + { 0, 4, 16, "Key: Up Arrow" }, + { 0, 4, 18, "Key: Number Pad 1" }, + { 0, 4, 19, "Key: Number Pad 2" }, + { 0, 4, 20, "Key: Number Pad 3" }, + { 0, 4, 21, "Key: Number Pad Enter" }, + { 0, 5, 1, "Key: Left Control" }, + { 0, 5, 2, "Key: Left Windows" }, + { 0, 5, 3, "Key: Left Alt" }, + { 0, 5, 7, "Key: Space" }, + { 0, 5, 11, "Key: Right Alt" }, + { 0, 5, 12, "Key: Right Fn" }, + { 0, 5, 13, "Key: Menu" }, + { 0, 5, 14, "Key: Right Control" }, + { 0, 5, 15, "Key: Left Arrow" }, + { 0, 5, 16, "Key: Down Arrow" }, + { 0, 5, 17, "Key: Right Arrow" }, + { 0, 5, 19, "Key: Number Pad 0" }, + { 0, 5, 20, "Key: Number Pad ." }, +}; + #define HUNTSMAN_KEYMAP_SIZE (sizeof(huntsman_keymap) / sizeof(huntsman_keymap[0])) static const razer_key huntsman_keymap[] = @@ -2738,6 +2858,55 @@ static const razer_device huntsman_elite_device = HUNTSMAN_ELITE_KEYMAP_SIZE }; + + +/*-------------------------------------------------------------*\ +| Razer Huntsman V2 Analog | +| | +| Zone "Keyboard" | +| Matrix | +| 6 Rows, 22 Columns | +| | +| Zone "Underglow" | +| Matrix | +| 3 Rows, 22 Columns | +\*-------------------------------------------------------------*/ +static const razer_zone huntsman_v2_analog_keyboard_zone = +{ + "Keyboard", + ZONE_TYPE_MATRIX, + 6, + 22 +}; + +static const razer_zone huntsman_v2_analog_underglow_zone = +{ + "Underglow", + ZONE_TYPE_MATRIX, + 3, + 22 +}; + +static const razer_device huntsman_v2_analog_device = +{ + "Razer Huntsman V2 Analog", + RAZER_HUNTSMAN_V2_ANALOG_PID, + DEVICE_TYPE_KEYBOARD, + true, + 9, + 22, + { + &huntsman_v2_analog_keyboard_zone, + &huntsman_v2_analog_underglow_zone, + NULL, + NULL, + NULL, + NULL + }, + huntsman_v2_analog_keymap, + HUNTSMAN_V2_ANALOG_KEYMAP_SIZE +}; + /*-------------------------------------------------------------*\ | Razer Huntsman Mini 1532:0257 | | | @@ -6976,6 +7145,7 @@ static const razer_device* device_list[] = &huntsman_elite_device, &huntsman_mini_device, &huntsman_te_device, + &huntsman_v2_analog_device, &ornata_chroma_device, /*-----------------------------------------------------------------*\ | LAPTOPS |