diff --git a/README.md b/README.md index b7a1147ae230ab47562460de706df40ca558fb1b..11cfc7d0174857e0bc2ad536772c673c98c6371e 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ The devices below are fully feature supported by OpenRazer, which means all avai | Razer DeathAdder V2 | 1532:0084 | | Razer Viper Mini | 1532:008A | | Razer DeathAdder V2 Mini | 1532:008C | +| Razer Naga Left-Handed Edition | 1532:008D | ### Mousemats | Device | USB VID:PID | diff --git a/daemon/openrazer_daemon/hardware/mouse.py b/daemon/openrazer_daemon/hardware/mouse.py index 49c26471daad8da1f8eddfd48227fff6db47752e..1d44be233fdfd364145c8485a0e2d2560e7b88fd 100644 --- a/daemon/openrazer_daemon/hardware/mouse.py +++ b/daemon/openrazer_daemon/hardware/mouse.py @@ -1913,6 +1913,71 @@ class RazerMambaElite(__RazerDeviceSpecialBrightnessSuspend): self.disable_notify = False +class RazerNagaLeftHanded2020(__RazerDeviceSpecialBrightnessSuspend): + """ + Class for the Razer Naga Left Handed Edition 2020 + """ + USB_VID = 0x1532 + USB_PID = 0x008D + HAS_MATRIX = True + WAVE_DIRS = (1, 2) + MATRIX_DIMS = [1, 3] + + DEDICATED_MACRO_KEYS = True + METHODS = ['get_device_type_mouse', 'max_dpi', 'get_dpi_xy', 'set_dpi_xy', + 'get_poll_rate', 'set_poll_rate', + # Macros + 'get_macros', 'delete_macro', 'add_macro', + # Logo + 'get_logo_brightness', 'set_logo_brightness', + 'set_logo_wave', 'set_logo_static_naga_hex_v2', 'set_logo_spectrum_naga_hex_v2', 'set_logo_none_naga_hex_v2', 'set_logo_reactive_naga_hex_v2', 'set_logo_breath_random_naga_hex_v2', 'set_logo_breath_single_naga_hex_v2', 'set_logo_breath_dual_naga_hex_v2', + # Scroll wheel + 'get_scroll_brightness', 'set_scroll_brightness', + 'set_scroll_wave', 'set_scroll_static_naga_hex_v2', 'set_scroll_spectrum_naga_hex_v2', 'set_scroll_none_naga_hex_v2', 'set_scroll_reactive_naga_hex_v2', 'set_scroll_breath_random_naga_hex_v2', 'set_scroll_breath_single_naga_hex_v2', 'set_scroll_breath_dual_naga_hex_v2', + # Right side = thumbgrid + 'get_right_brightness', 'set_right_brightness', + 'set_right_wave', 'set_right_static', 'set_right_spectrum', 'set_right_none', 'set_right_reactive', 'set_right_breath_random', 'set_right_breath_single', 'set_right_breath_dual', + # Custom frame + 'set_custom_effect', 'set_key_row'] + + DPI_MAX = 20000 + + DEVICE_IMAGE = "https://rzrwarranty.s3.amazonaws.com/cee694cd7526df413008167b7566af310985321b20c57f3dc42e5cbd773f2417.png" + + def _suspend_device(self): + """ + Suspend the device + Get the current brightness level, store it for later and then set the brightness to 0 + """ + self.suspend_args.clear() + self.suspend_args['brightness'] = ( + _da_get_logo_brightness(self), + _da_get_scroll_brightness(self), + _get_right_brightness(self)) + + # Todo make it context? + self.disable_notify = True + _da_set_logo_brightness(self, 0) + _da_set_scroll_brightness(self, 0) + _set_right_brightness(self, 0) + self.disable_notify = False + + def _resume_device(self): + """ + Resume the device + Get the last known brightness and then set the brightness + """ + logo_brightness = self.suspend_args.get('brightness', (100, 100, 100))[0] + scroll_brightness = self.suspend_args.get('brightness', (100, 100, 100))[1] + right_row_brightness = self.suspend_args.get('brightness', (100, 100, 100))[2] + + self.disable_notify = True + _da_set_logo_brightness(self, logo_brightness) + _da_set_scroll_brightness(self, scroll_brightness) + _set_right_brightness(self, right_row_brightness) + self.disable_notify = False + + class RazerDeathAdder1800(__RazerDevice): """ Class for the Razer DeathAdder 1800 diff --git a/driver/razermouse_driver.c b/driver/razermouse_driver.c index bfe8b42627e157e7f788efb0ce4456c0899eb528..0a7a16974f250ac1c8ff5b6d97a42dbfdab569d0 100644 --- a/driver/razermouse_driver.c +++ b/driver/razermouse_driver.c @@ -422,6 +422,10 @@ static ssize_t razer_attr_read_device_type(struct device *dev, struct device_att device_type = "Razer Basilisk X HyperSpeed\n"; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: + device_type = "Razer Naga Left-Handed Edition 2020\n"; + break; + default: device_type = "Unknown Device\n"; } @@ -449,6 +453,7 @@ static ssize_t razer_attr_read_get_firmware_version(struct device *dev, struct d return sprintf(buf, "v%d.%d\n", 0x01, 0x00); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; @@ -560,6 +565,7 @@ static ssize_t razer_attr_write_mode_custom(struct device *dev, struct device_at report = razer_chroma_extended_matrix_effect_custom_frame(); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_custom_frame(); report.transaction_id.id = 0x1f; @@ -598,6 +604,7 @@ static ssize_t razer_attr_write_mode_static(struct device *dev, struct device_at report.transaction_id.id = 0xff; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_NAGA_TRINITY: // Some sort of mode switcher required after initialization and before color switching report = get_razer_report(0x0f, 0x02, 0x06); @@ -792,6 +799,7 @@ static ssize_t razer_attr_read_get_serial(struct device *dev, struct device_attr report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; break; @@ -968,6 +976,7 @@ static ssize_t razer_attr_read_poll_rate(struct device *dev, struct device_attri report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; break; @@ -1036,6 +1045,7 @@ static ssize_t razer_attr_write_poll_rate(struct device *dev, struct device_attr report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; break; @@ -1076,6 +1086,7 @@ static ssize_t razer_attr_write_matrix_brightness(struct device *dev, struct dev report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_brightness(VARSTORE, 0x00, brightness); report.transaction_id.id = 0x1F; @@ -1125,6 +1136,7 @@ static ssize_t razer_attr_read_matrix_brightness(struct device *dev, struct devi report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, 0x00); report.transaction_id.id = 0x1F; @@ -1217,6 +1229,7 @@ static ssize_t razer_attr_write_mouse_dpi(struct device *dev, struct device_attr return count; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_OROCHI_2013: case USB_DEVICE_ID_RAZER_IMPERATOR: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: @@ -1263,6 +1276,7 @@ static ssize_t razer_attr_write_mouse_dpi(struct device *dev, struct device_attr report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; @@ -1322,6 +1336,7 @@ static ssize_t razer_attr_read_mouse_dpi(struct device *dev, struct device_attri report = razer_chroma_misc_get_dpi_xy_byte(); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report = razer_chroma_misc_get_dpi_xy(NOSTORE); @@ -1669,6 +1684,7 @@ static ssize_t razer_attr_write_set_key_row(struct device *dev, struct device_at report = razer_chroma_misc_one_row_set_custom_frame(start_col, stop_col, (unsigned char*)&buf[offset]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_set_custom_frame2(row_id, start_col, stop_col, (unsigned char*)&buf[offset], 0); report.transaction_id.id = 0x1f; @@ -1701,6 +1717,7 @@ static ssize_t razer_attr_write_device_mode(struct device *dev, struct device_at return count; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; @@ -1768,6 +1785,7 @@ static ssize_t razer_attr_read_device_mode(struct device *dev, struct device_att report.transaction_id.id = 0x3f; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: case USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER: report.transaction_id.id = 0x1f; @@ -1797,6 +1815,7 @@ static ssize_t razer_attr_read_scroll_led_brightness(struct device *dev, struct report.transaction_id.id = 0x3F; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; @@ -1843,6 +1862,7 @@ static ssize_t razer_attr_write_scroll_led_brightness(struct device *dev, struct report.transaction_id.id = 0x3F; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_brightness(VARSTORE, SCROLL_WHEEL_LED, brightness); report.transaction_id.id = 0x1f; @@ -1889,6 +1909,7 @@ static ssize_t razer_attr_read_logo_led_brightness(struct device *dev, struct de report.transaction_id.id = 0x3F; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; @@ -1944,6 +1965,7 @@ static ssize_t razer_attr_write_logo_led_brightness(struct device *dev, struct d report.transaction_id.id = 0x3F; break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_brightness(VARSTORE, LOGO_LED, brightness); report.transaction_id.id = 0x1f; @@ -1999,6 +2021,7 @@ static ssize_t razer_attr_read_side_led_brightness(struct device *dev, struct de report = razer_chroma_extended_matrix_get_brightness(VARSTORE, side); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_get_brightness(VARSTORE, side); report.transaction_id.id = 0x1f; @@ -2030,6 +2053,7 @@ static ssize_t razer_attr_write_side_led_brightness(struct device *dev, struct d report = razer_chroma_extended_matrix_brightness(VARSTORE, side, brightness); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_brightness(VARSTORE, side, brightness); report.transaction_id.id = 0x1f; @@ -2364,6 +2388,7 @@ static ssize_t razer_attr_write_scroll_mode_wave(struct device *dev, struct devi report = razer_chroma_extended_matrix_effect_wave(VARSTORE, SCROLL_WHEEL_LED, direction); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, SCROLL_WHEEL_LED, direction); report.transaction_id.id = 0x1f; @@ -2409,6 +2434,7 @@ static ssize_t razer_attr_write_scroll_mode_spectrum(struct device *dev, struct report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, SCROLL_WHEEL_LED); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; @@ -2457,6 +2483,7 @@ static ssize_t razer_attr_write_scroll_mode_reactive(struct device *dev, struct report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, SCROLL_WHEEL_LED, speed, (struct razer_rgb*)&buf[1]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, SCROLL_WHEEL_LED, speed, (struct razer_rgb*)&buf[1]); report.transaction_id.id = 0x1f; @@ -2505,6 +2532,7 @@ static ssize_t razer_attr_write_scroll_mode_breath(struct device *dev, struct de } break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_DEATHADDER_ELITE: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRED: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS: @@ -2535,6 +2563,7 @@ static ssize_t razer_attr_write_scroll_mode_breath(struct device *dev, struct de } switch(usb_dev->descriptor.idProduct) { + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report.transaction_id.id = 0x1f; break; @@ -2582,6 +2611,7 @@ static ssize_t razer_attr_write_scroll_mode_static(struct device *dev, struct de report = razer_chroma_extended_matrix_effect_static(VARSTORE, SCROLL_WHEEL_LED, (struct razer_rgb*)&buf[0]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_static(VARSTORE, SCROLL_WHEEL_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; @@ -2634,6 +2664,7 @@ static ssize_t razer_attr_write_scroll_mode_none(struct device *dev, struct devi report = razer_chroma_extended_matrix_effect_none(VARSTORE, SCROLL_WHEEL_LED); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_none(VARSTORE, SCROLL_WHEEL_LED); report.transaction_id.id = 0x1f; @@ -2669,6 +2700,7 @@ static ssize_t razer_attr_write_logo_mode_wave(struct device *dev, struct device report = razer_chroma_extended_matrix_effect_wave(VARSTORE, LOGO_LED, direction); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, LOGO_LED, direction); report.transaction_id.id = 0x1f; @@ -2722,6 +2754,7 @@ static ssize_t razer_attr_write_logo_mode_spectrum(struct device *dev, struct de report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, LOGO_LED); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; @@ -2778,6 +2811,7 @@ static ssize_t razer_attr_write_logo_mode_reactive(struct device *dev, struct de report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, LOGO_LED, speed, (struct razer_rgb*)&buf[1]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, LOGO_LED, speed, (struct razer_rgb*)&buf[1]); report.transaction_id.id = 0x1f; @@ -2826,6 +2860,7 @@ static ssize_t razer_attr_write_logo_mode_breath(struct device *dev, struct devi } break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_DEATHADDER_ELITE: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRED: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS: @@ -2865,6 +2900,7 @@ static ssize_t razer_attr_write_logo_mode_breath(struct device *dev, struct devi } switch(usb_dev->descriptor.idProduct) { + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report.transaction_id.id = 0x1f; break; @@ -2920,6 +2956,7 @@ static ssize_t razer_attr_write_logo_mode_static(struct device *dev, struct devi report = razer_chroma_extended_matrix_effect_static(VARSTORE, LOGO_LED, (struct razer_rgb*)&buf[0]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_static(VARSTORE, LOGO_LED, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; @@ -2979,6 +3016,7 @@ static ssize_t razer_attr_write_logo_mode_none(struct device *dev, struct device report = razer_chroma_extended_matrix_effect_none(VARSTORE, LOGO_LED); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_none(VARSTORE, LOGO_LED); report.transaction_id.id = 0x1f; @@ -3009,6 +3047,7 @@ static ssize_t razer_attr_write_side_mode_wave(struct device *dev, struct device report = razer_chroma_extended_matrix_effect_wave(VARSTORE, side, direction); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_wave(VARSTORE, side, direction); report.transaction_id.id = 0x1f; @@ -3059,6 +3098,7 @@ static ssize_t razer_attr_write_side_mode_spectrum(struct device *dev, struct de report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, side); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_spectrum(VARSTORE, side); report.transaction_id.id = 0x1f; @@ -3111,6 +3151,7 @@ static ssize_t razer_attr_write_side_mode_reactive(struct device *dev, struct de report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, side, speed, (struct razer_rgb*)&buf[1]); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_reactive(VARSTORE, side, speed, (struct razer_rgb*)&buf[1]); report.transaction_id.id = 0x1f; @@ -3156,6 +3197,7 @@ static ssize_t razer_attr_write_side_mode_breath(struct device *dev, struct devi struct razer_report report = {0}; switch(usb_dev->descriptor.idProduct) { + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRED: case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS: case USB_DEVICE_ID_RAZER_LANCEHEAD_TE_WIRED: @@ -3179,6 +3221,7 @@ static ssize_t razer_attr_write_side_mode_breath(struct device *dev, struct devi } switch(usb_dev->descriptor.idProduct) { + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report.transaction_id.id = 0x1f; break; @@ -3227,6 +3270,8 @@ static ssize_t razer_attr_write_side_mode_static(struct device *dev, struct devi case USB_DEVICE_ID_RAZER_LANCEHEAD_WIRELESS_WIRED: report = razer_chroma_extended_matrix_effect_static(VARSTORE, side, (struct razer_rgb*)&buf[0]); break; + + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_static(VARSTORE, side, (struct razer_rgb*)&buf[0]); report.transaction_id.id = 0x1f; @@ -3276,6 +3321,7 @@ static ssize_t razer_attr_write_side_mode_none(struct device *dev, struct device report = razer_chroma_extended_matrix_effect_none(VARSTORE, side); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: case USB_DEVICE_ID_RAZER_MAMBA_ELITE: report = razer_chroma_extended_matrix_effect_none(VARSTORE, side); report.transaction_id.id = 0x1f; @@ -3858,6 +3904,38 @@ static int razer_mouse_probe(struct hid_device *hdev, const struct hid_device_id CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_dpi); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_dpi); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_poll_rate); + + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_led_brightness); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_wave); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_spectrum); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_reactive); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_breath); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_static); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_logo_matrix_effect_none); + + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_led_brightness); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_wave); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_spectrum); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_reactive); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_breath); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_static); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_scroll_matrix_effect_none); + + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_led_brightness); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_wave); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_spectrum); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_reactive); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_breath); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_static); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_right_matrix_effect_none); + + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_matrix_effect_custom); + CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_matrix_custom_frame); + break; + case USB_DEVICE_ID_RAZER_MAMBA_ELITE: CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_dpi); CREATE_DEVICE_FILE(&hdev->dev, &dev_attr_poll_rate); @@ -4319,6 +4397,38 @@ static void razer_mouse_disconnect(struct hid_device *hdev) device_remove_file(&hdev->dev, &dev_attr_dpi); break; + case USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020: + device_remove_file(&hdev->dev, &dev_attr_dpi); + device_remove_file(&hdev->dev, &dev_attr_poll_rate); + + device_remove_file(&hdev->dev, &dev_attr_logo_led_brightness); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_wave); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_spectrum); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_reactive); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_breath); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_static); + device_remove_file(&hdev->dev, &dev_attr_logo_matrix_effect_none); + + device_remove_file(&hdev->dev, &dev_attr_scroll_led_brightness); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_wave); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_spectrum); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_reactive); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_breath); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_static); + device_remove_file(&hdev->dev, &dev_attr_scroll_matrix_effect_none); + + device_remove_file(&hdev->dev, &dev_attr_right_led_brightness); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_wave); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_spectrum); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_reactive); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_breath); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_static); + device_remove_file(&hdev->dev, &dev_attr_right_matrix_effect_none); + + device_remove_file(&hdev->dev, &dev_attr_matrix_effect_custom); + device_remove_file(&hdev->dev, &dev_attr_matrix_custom_frame); + break; + case USB_DEVICE_ID_RAZER_MAMBA_ELITE: device_remove_file(&hdev->dev, &dev_attr_dpi); device_remove_file(&hdev->dev, &dev_attr_poll_rate); @@ -4511,6 +4621,7 @@ static const struct hid_device_id razer_devices[] = { { HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_DEATHADDER_2000) }, { HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_ATHERIS_RECEIVER) }, { HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_BASILISK_X_HYPERSPEED) }, + { HID_USB_DEVICE(USB_VENDOR_ID_RAZER,USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020) }, { 0 } }; diff --git a/driver/razermouse_driver.h b/driver/razermouse_driver.h index 9208dfdf4f1a15dc2d6a10d6ccde012f6e3cb604..aab8656eb75dc9deeecdac2b90165a756cac83ac 100644 --- a/driver/razermouse_driver.h +++ b/driver/razermouse_driver.h @@ -65,6 +65,7 @@ #define USB_DEVICE_ID_RAZER_DEATHADDER_V2 0x0084 #define USB_DEVICE_ID_RAZER_VIPER_MINI 0x008A #define USB_DEVICE_ID_RAZER_DEATHADDER_V2_MINI 0x008C +#define USB_DEVICE_ID_RAZER_NAGA_LEFT_HANDED_2020 0x008D /* Each keyboard report has 90 bytes*/ #define RAZER_REPORT_LEN 0x5A diff --git a/install_files/appstream/io.github.openrazer.openrazer.metainfo.xml b/install_files/appstream/io.github.openrazer.openrazer.metainfo.xml index 84948470e900c5736b1ffebbdf36762d1295dcfe..3dfa621f828c0858b04e166abe77130605c1858a 100644 --- a/install_files/appstream/io.github.openrazer.openrazer.metainfo.xml +++ b/install_files/appstream/io.github.openrazer.openrazer.metainfo.xml @@ -69,6 +69,7 @@ <modalias>usb:v1532p0084d*</modalias> <modalias>usb:v1532p008Ad*</modalias> <modalias>usb:v1532p008Cd*</modalias> + <modalias>usb:v1532p008Dd*</modalias> <modalias>usb:v1532p010Dd*</modalias> <modalias>usb:v1532p010Ed*</modalias> <modalias>usb:v1532p010Fd*</modalias> diff --git a/install_files/udev/99-razer.rules b/install_files/udev/99-razer.rules index 01f29aaafe679392094b8d30b93bd2db31e1b655..945fd6cf1b289fae761d649b92e39fb603854b6c 100644 --- a/install_files/udev/99-razer.rules +++ b/install_files/udev/99-razer.rules @@ -5,7 +5,7 @@ GOTO="razer_end" LABEL="razer_vendor" # Mice -ATTRS{idProduct}=="0013|0016|0020|0024|0025|002e|002f|0032|0034|0036|0037|0038|0039|0040|0041|0042|0043|0044|0045|0046|0048|004c|004f|0050|0053|0054|0059|005a|005b|005c|005e|0060|0062|0064|0067|006a|006b|006c|006e|006f|0070|0071|0072|0073|0078|007a|007b|007c|007d|0083|0084|008a|008c", \ +ATTRS{idProduct}=="0013|0016|0020|0024|0025|002e|002f|0032|0034|0036|0037|0038|0039|0040|0041|0042|0043|0044|0045|0046|0048|004c|004f|0050|0053|0054|0059|005a|005b|005c|005e|0060|0062|0064|0067|006a|006b|006c|006e|006f|0070|0071|0072|0073|0078|007a|007b|007c|007d|0083|0084|008a|008c|008d", \ ATTRS{idVendor}=="1532", \ ENV{ID_RAZER_CHROMA}="1", ENV{RAZER_DRIVER}="razermouse" diff --git a/pylib/openrazer/_fake_driver/razernagaleft-handededition2020.cfg b/pylib/openrazer/_fake_driver/razernagaleft-handededition2020.cfg new file mode 100644 index 0000000000000000000000000000000000000000..89d9d1f8a82ffc38a27108be715929db014d665b --- /dev/null +++ b/pylib/openrazer/_fake_driver/razernagaleft-handededition2020.cfg @@ -0,0 +1,32 @@ +[device] +dir_name = 0003:1532:008D.0001 +name = Razer Naga Left-Handed Edition 2020 +files = r,device_serial,XX000000008D + r,device_type,%(name)s + rw,dpi,800:800 + r,firmware_version,v1.0 + rw,logo_led_brightness,0 + w,logo_matrix_effect_breath + w,logo_matrix_effect_none + w,logo_matrix_effect_reactive + w,logo_matrix_effect_spectrum + w,logo_matrix_effect_static + w,logo_matrix_effect_wave + w,matrix_custom_frame + w,matrix_effect_custom + rw,poll_rate,500 + rw,right_led_brightness,0 + w,right_matrix_effect_breath + w,right_matrix_effect_none + w,right_matrix_effect_reactive + w,right_matrix_effect_spectrum + w,right_matrix_effect_static + w,right_matrix_effect_wave + rw,scroll_led_brightness,0 + w,scroll_matrix_effect_breath + w,scroll_matrix_effect_none + w,scroll_matrix_effect_reactive + w,scroll_matrix_effect_spectrum + w,scroll_matrix_effect_static + w,scroll_matrix_effect_wave + r,version,1.0.0