Skip to content

Commit

Permalink
Adds support for the Tartarus Pro (1532:0244)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexandre Hertzog authored and Alexandre Hertzog committed Aug 11, 2021
1 parent 5ddf10e commit c6dba58
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ The devices below are fully feature supported by OpenRazer, which means all avai
| Razer Tartarus Chroma | 1532:0208 |
| Razer Core | 1532:0215 |
| Razer Tartarus V2 | 1532:022B |
| Razer Tartarus Pro | 1532:0244 |
| Razer Nommo Chroma | 1532:0517 |
| Razer Nommo Pro | 1532:0518 |
| Razer Chroma Mug Holder | 1532:0F07 |
Expand Down
44 changes: 44 additions & 0 deletions daemon/openrazer_daemon/hardware/keyboards.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,50 @@ def _close(self):
# self.key_manager.close()


class RazerTartarusPro(_RippleKeyboard):
"""
Class for Razer Tartarus Pro
"""
EVENT_FILE_REGEX = re.compile(r'.*Razer_Tartarus_Pro(-if01)?-event-kbd')

USB_VID = 0x1532
USB_PID = 0x0244
HAS_MATRIX = True
DEDICATED_MACRO_KEYS = True
MATRIX_DIMS = [4, 6]

METHODS = ['get_device_type_keypad',
'set_breath_random_effect', 'set_breath_single_effect', 'set_breath_dual_effect',
'set_key_row',
'set_reactive_effect',
'set_none_effect',
'set_custom_effect',
'set_wave_effect',
'set_static_effect',
'set_spectrum_effect',
'set_starlight_random_effect', 'set_starlight_single_effect', 'set_starlight_dual_effect',
'keypad_get_profile_led_red', 'keypad_set_profile_led_red',
'keypad_get_profile_led_green', 'keypad_set_profile_led_green',
'keypad_get_profile_led_blue', 'keypad_set_profile_led_blue',
'get_macro_effect', 'set_macro_effect', 'get_macros', 'delete_macro', 'add_macro',
'set_ripple_effect', 'set_ripple_effect_random_colour',
'get_game_mode', 'set_game_mode',
'keypad_get_mode_modifier', 'keypad_set_mode_modifier']

DEVICE_IMAGE = "https://assets.razerzone.com/eeimages/support/products/1255/1255_tartarus_v2.png"

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def _close(self):
"""
Close the key manager
"""
super()._close()

# self.key_manager.close()


class RazerOrbweaver(_RazerDeviceBrightnessSuspend):
"""
Class for the Razer Orbweaver
Expand Down
19 changes: 19 additions & 0 deletions driver/razerkbd_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,10 @@ static ssize_t razer_attr_read_device_type(struct device *dev, struct device_att
device_type = "Razer Tartarus V2\n";
break;

case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
device_type = "Razer Tartarus Pro\n";
break;

case USB_DEVICE_ID_RAZER_BLACKWIDOW_OVERWATCH:
device_type = "Razer BlackWidow Chroma (Overwatch)\n";
break;
Expand Down Expand Up @@ -677,6 +681,7 @@ static ssize_t razer_attr_write_mode_macro_effect(struct device *dev, struct dev
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
report = razer_chroma_standard_set_led_effect(NOSTORE, MACRO_LED, enabled);
report.transaction_id.id = 0x1F;
Expand Down Expand Up @@ -978,6 +983,7 @@ static ssize_t razer_attr_write_mode_none(struct device *dev, struct device_attr
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
case USB_DEVICE_ID_RAZER_CYNOSA_V2:
case USB_DEVICE_ID_RAZER_ORNATA_V2:
Expand Down Expand Up @@ -1040,6 +1046,7 @@ static ssize_t razer_attr_write_mode_wave(struct device *dev, struct device_attr
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
case USB_DEVICE_ID_RAZER_CYNOSA_V2:
case USB_DEVICE_ID_RAZER_ORNATA_V2:
Expand Down Expand Up @@ -1096,6 +1103,7 @@ static ssize_t razer_attr_write_mode_spectrum(struct device *dev, struct device_
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, BACKLIGHT_LED);
report.transaction_id.id = 0x1F; // TODO move to a usb_device variable
break;
Expand Down Expand Up @@ -1143,6 +1151,7 @@ static ssize_t razer_attr_write_mode_reactive(struct device *dev, struct device_
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
case USB_DEVICE_ID_RAZER_CYNOSA_V2:
case USB_DEVICE_ID_RAZER_ORNATA_V2:
Expand Down Expand Up @@ -1180,6 +1189,7 @@ static ssize_t razer_attr_write_mode_static(struct device *dev, struct device_at
switch(usb_dev->descriptor.idProduct) {

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
report = razer_chroma_extended_matrix_effect_static(VARSTORE, BACKLIGHT_LED, (struct razer_rgb*)&buf[0]);
razer_send_payload(usb_dev, &report);
report.transaction_id.id = 0x1F;
Expand Down Expand Up @@ -1378,6 +1388,7 @@ static ssize_t razer_attr_write_mode_starlight(struct device *dev, struct device
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
if(count == 7) {
report = razer_chroma_extended_matrix_effect_starlight_dual(VARSTORE, BACKLIGHT_LED, buf[0], (struct razer_rgb*)&buf[1], (struct razer_rgb*)&buf[4]);
report.transaction_id.id = 0x1F; // TODO move to a usb_device variable
Expand Down Expand Up @@ -1463,6 +1474,7 @@ static ssize_t razer_attr_write_mode_breath(struct device *dev, struct device_at
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
switch(count) {
case 3: // Single colour mode
report = razer_chroma_extended_matrix_effect_breathing_single(VARSTORE, BACKLIGHT_LED, (struct razer_rgb*)&buf[0]);
Expand Down Expand Up @@ -1682,6 +1694,7 @@ static ssize_t razer_attr_write_mode_custom(struct device *dev, struct device_at
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
case USB_DEVICE_ID_RAZER_CYNOSA_V2:
case USB_DEVICE_ID_RAZER_ORNATA_V2:
Expand Down Expand Up @@ -1760,6 +1773,7 @@ static ssize_t razer_attr_write_set_brightness(struct device *dev, struct device
switch(usb_dev->descriptor.idProduct) {

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
report = razer_chroma_extended_matrix_brightness(VARSTORE, ZERO_LED, brightness);
report.transaction_id.id = 0x1F;
break;
Expand Down Expand Up @@ -1825,6 +1839,7 @@ static ssize_t razer_attr_read_set_brightness(struct device *dev, struct device_
switch(usb_dev->descriptor.idProduct) {

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
report = razer_chroma_extended_matrix_get_brightness(VARSTORE, ZERO_LED);
report.transaction_id.id = 0x1F;
break;
Expand Down Expand Up @@ -1980,6 +1995,7 @@ static ssize_t razer_attr_write_matrix_custom_frame(struct device *dev, struct d
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
case USB_DEVICE_ID_RAZER_BLACKWIDOW_ELITE:
case USB_DEVICE_ID_RAZER_CYNOSA_V2:
case USB_DEVICE_ID_RAZER_ORNATA_V2:
Expand Down Expand Up @@ -2548,6 +2564,7 @@ static int razer_kbd_probe(struct hid_device *hdev, const struct hid_device_id *
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_game_led_state); // Enable game mode & LED
CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_macro_led_state); // Enable macro LED
CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_macro_led_effect); // Change macro LED effect (static, flashing)
Expand Down Expand Up @@ -2836,6 +2853,7 @@ static void razer_kbd_disconnect(struct hid_device *hdev)
break;

case USB_DEVICE_ID_RAZER_TARTARUS_V2:
case USB_DEVICE_ID_RAZER_TARTARUS_PRO:
device_remove_file(&hdev->dev, &dev_attr_macro_led_state); // Enable macro LED
device_remove_file(&hdev->dev, &dev_attr_macro_led_effect); // Change macro LED effect (static, flashing)
device_remove_file(&hdev->dev, &dev_attr_game_led_state); // Enable game mode & LED
Expand Down Expand Up @@ -3017,6 +3035,7 @@ static const struct hid_device_id razer_devices[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_TARTARUS) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_TARTARUS_CHROMA) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_TARTARUS_V2) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_TARTARUS_PRO) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_DEATHSTALKER_EXPERT) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_BLACKWIDOW_CHROMA) },
{ HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_BLACKWIDOW_OVERWATCH) },
Expand Down
1 change: 1 addition & 0 deletions driver/razerkbd_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#define USB_DEVICE_ID_RAZER_BLADE_2018_MERCURY 0x0240
#define USB_DEVICE_ID_RAZER_BLACKWIDOW_2019 0x0241
#define USB_DEVICE_ID_RAZER_HUNTSMAN_TE 0x0243
#define USB_DEVICE_ID_RAZER_TARTARUS_PRO 0x0244
#define USB_DEVICE_ID_RAZER_BLADE_MID_2019_MERCURY 0x0245
#define USB_DEVICE_ID_RAZER_BLADE_2019_BASE 0x0246
#define USB_DEVICE_ID_RAZER_BLADE_STEALTH_LATE_2019 0x024A
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
<modalias>usb:v1532p0240d*</modalias>
<modalias>usb:v1532p0241d*</modalias>
<modalias>usb:v1532p0243d*</modalias>
<modalias>usb:v1532p0244d*</modalias>
<modalias>usb:v1532p0245d*</modalias>
<modalias>usb:v1532p0246d*</modalias>
<modalias>usb:v1532p024Ad*</modalias>
Expand Down
2 changes: 1 addition & 1 deletion install_files/udev/99-razer.rules
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ ATTRS{idProduct}=="0013|0016|0020|0024|0025|002e|002f|0032|0034|0036|0037|0038|0
ENV{ID_RAZER_CHROMA}="1", ENV{RAZER_DRIVER}="razermouse"

# Keyboards
ATTRS{idProduct}=="010d|010e|010f|0111|0113|011a|011b|011c|0201|0202|0203|0204|0205|0207|0208|0209|020f|0210|0211|0214|0216|0217|021a|021e|021f|0220|0221|0224|0225|0226|0227|0228|022a|022b|022c|022d|022f|0232|0233|0234|0235|0237|0239|023a|023b|023f|0240|0241|0243|0245|0246|024a|024c|024d|0252|0253|0255|0257|0259|025d|025e|026a|026d|0a24", \
ATTRS{idProduct}=="010d|010e|010f|0111|0113|011a|011b|011c|0201|0202|0203|0204|0205|0207|0208|0209|020f|0210|0211|0214|0216|0217|021a|021e|021f|0220|0221|0224|0225|0226|0227|0228|022a|022b|022c|022d|022f|0232|0233|0234|0235|0237|0239|023a|023b|023f|0240|0241|0243|0244|0245|0246|024a|024c|024d|0252|0253|0255|0257|0259|025d|025e|026a|026d|0a24", \
ATTRS{idVendor}=="1532", \
ENV{ID_RAZER_CHROMA}="1", ENV{RAZER_DRIVER}="razerkbd"

Expand Down
24 changes: 24 additions & 0 deletions pylib/openrazer/_fake_driver/razertartaruspro.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[device]
dir_name = 0003:1532:0244.0013
name = Razer Tartarus Pro
files = r,device_serial,XX0000000244
r,device_type,%(name)s
r,firmware_version,v1.0
rw,game_led_state,0
r,kbd_layout,01
rw,macro_led_effect,0
rw,macro_led_state,0
rw,matrix_brightness,0
w,matrix_custom_frame
w,matrix_effect_breath
w,matrix_effect_custom
w,matrix_effect_none
w,matrix_effect_reactive
w,matrix_effect_spectrum
w,matrix_effect_starlight
w,matrix_effect_static
w,matrix_effect_wave
rw,profile_led_blue,0
rw,profile_led_green,0
rw,profile_led_red,0
r,version,1.0.0
2 changes: 1 addition & 1 deletion pylib/openrazer/client/macro.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def add_macro(self, bind_key: str, macro_object_sequence: list):
def del_macro(self, bind_key: str):
key_map = keyboard.KEY_MAPPING
map_str = "keyboard.KEY_MAPPING"
if self.name in ["Razer Orbweaver", "Razer Orbweaver Chroma", "Razer Tartarus V2", "Razer Tartarus Chroma V2"]:
if self.name in ["Razer Orbweaver", "Razer Orbweaver Chroma", "Razer Tartarus V2", "Razer Tartarus Chroma V2", "Razer Tartarus Pro"]:
key_map = keyboard.ORBWEAVER_KEY_MAPPING
map_str = "keyboard.ORBWEAVER_KEY_MAPPING"
elif self.name in ["Razer Tartarus", "Razer Tartarus Chroma", "Razer Nostromo"]:
Expand Down

0 comments on commit c6dba58

Please sign in to comment.