From 8926d2930031423754b5369319918073f2f9065c Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 4 Aug 2022 11:47:40 +1000 Subject: [PATCH] Initial commit for Razer Deathadder Essential V2 to resolve #2651 + Added PID entry for the Deathadder Essential V2 + Registered detectors + Added metadata to RazerDevices.h + Added capabilities to RazerController.cpp + Added `GetMaxBrightness()` to account for difference in brightness value --- .../RazerController/RGBController_Razer.cpp | 85 ++++++++++--------- .../RazerController/RazerController.cpp | 26 ++++++ Controllers/RazerController/RazerController.h | 3 +- .../RazerController/RazerControllerDetect.cpp | 1 + Controllers/RazerController/RazerDevices.h | 49 +++++++++++ 5 files changed, 121 insertions(+), 43 deletions(-) diff --git a/Controllers/RazerController/RGBController_Razer.cpp b/Controllers/RazerController/RGBController_Razer.cpp index 2141d102b..809df860e 100644 --- a/Controllers/RazerController/RGBController_Razer.cpp +++ b/Controllers/RazerController/RGBController_Razer.cpp @@ -14,44 +14,45 @@ RGBController_Razer::RGBController_Razer(RazerController* controller_ptr) { - controller = controller_ptr; + controller = controller_ptr; - name = controller->GetName(); - vendor = "Razer"; - type = controller->GetDeviceType(); - description = "Razer Device"; - location = controller->GetDeviceLocation(); - version = controller->GetFirmwareString(); - serial = controller->GetSerialString(); + name = controller->GetName(); + vendor = "Razer"; + type = controller->GetDeviceType(); + description = "Razer Device"; + location = controller->GetDeviceLocation(); + version = controller->GetFirmwareString(); + serial = controller->GetSerialString(); + uint8_t max_brightness = controller->GetMaxBrightness(); mode Direct; - Direct.name = "Direct"; - Direct.value = RAZER_MODE_DIRECT; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Direct.color_mode = MODE_COLORS_PER_LED; - Direct.brightness_min = 0; - Direct.brightness_max = 255; - Direct.brightness = 255; + Direct.name = "Direct"; + Direct.value = RAZER_MODE_DIRECT; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Direct.color_mode = MODE_COLORS_PER_LED; + Direct.brightness_min = 0; + Direct.brightness_max = max_brightness; + Direct.brightness = max_brightness; modes.push_back(Direct); mode Off; - Off.name = "Off"; - Off.value = RAZER_MODE_OFF; - Off.flags = 0; - Off.color_mode = MODE_COLORS_NONE; + Off.name = "Off"; + Off.value = RAZER_MODE_OFF; + Off.flags = 0; + Off.color_mode = MODE_COLORS_NONE; modes.push_back(Off); mode Static; - Static.name = "Static"; - Static.value = RAZER_MODE_STATIC; - Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Static.color_mode = MODE_COLORS_MODE_SPECIFIC; - Static.colors_min = 1; - Static.colors_max = 1; + Static.name = "Static"; + Static.value = RAZER_MODE_STATIC; + Static.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Static.color_mode = MODE_COLORS_MODE_SPECIFIC; + Static.colors_min = 1; + Static.colors_max = 1; Static.colors.resize(1); - Static.brightness_min = 0; - Static.brightness_max = 255; - Static.brightness = 255; + Static.brightness_min = 0; + Static.brightness_max = max_brightness; + Static.brightness = max_brightness; modes.push_back(Static); if(controller->SupportsBreathing()) @@ -65,8 +66,8 @@ RGBController_Razer::RGBController_Razer(RazerController* controller_ptr) Breathing.colors_max = 2; Breathing.colors.resize(1); Breathing.brightness_min = 0; - Breathing.brightness_max = 255; - Breathing.brightness = 255; + Breathing.brightness_max = max_brightness; + Breathing.brightness = max_brightness; modes.push_back(Breathing); } @@ -76,21 +77,21 @@ RGBController_Razer::RGBController_Razer(RazerController* controller_ptr) SpectrumCycle.flags = MODE_FLAG_HAS_BRIGHTNESS; SpectrumCycle.color_mode = MODE_COLORS_NONE; SpectrumCycle.brightness_min = 0; - SpectrumCycle.brightness_max = 255; - SpectrumCycle.brightness = 255; + SpectrumCycle.brightness_max = max_brightness; + SpectrumCycle.brightness = max_brightness; modes.push_back(SpectrumCycle); if(controller->SupportsWave()) { mode Wave; - Wave.name = "Wave"; - Wave.value = RAZER_MODE_WAVE; - Wave.flags = MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_BRIGHTNESS; - Wave.direction = MODE_DIRECTION_RIGHT; - Wave.color_mode = MODE_COLORS_NONE; - Wave.brightness_min = 0; - Wave.brightness_max = 255; - Wave.brightness = 255; + Wave.name = "Wave"; + Wave.value = RAZER_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_DIRECTION_LR | MODE_FLAG_HAS_BRIGHTNESS; + Wave.direction = MODE_DIRECTION_RIGHT; + Wave.color_mode = MODE_COLORS_NONE; + Wave.brightness_min = 0; + Wave.brightness_max = max_brightness; + Wave.brightness = max_brightness; modes.push_back(Wave); } @@ -105,8 +106,8 @@ RGBController_Razer::RGBController_Razer(RazerController* controller_ptr) Reactive.colors_max = 1; Reactive.colors.resize(1); Reactive.brightness_min = 0; - Reactive.brightness_max = 255; - Reactive.brightness = 255; + Reactive.brightness_max = max_brightness; + Reactive.brightness = max_brightness; modes.push_back(Reactive); } diff --git a/Controllers/RazerController/RazerController.cpp b/Controllers/RazerController/RazerController.cpp index f030ecb7d..46302e7a9 100644 --- a/Controllers/RazerController/RazerController.cpp +++ b/Controllers/RazerController/RazerController.cpp @@ -57,6 +57,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha case RAZER_TARTARUS_CHROMA_PID: case RAZER_TARTARUS_V2_PID: case RAZER_DEATHADDER_CHROMA_PID: + case RAZER_DEATHADDER_ESSENTIAL_V2_PID: case RAZER_DEATHADDER_V2_MINI_PID: case RAZER_LAPTOP_STAND_CHROMA_PID: case RAZER_LAPTOP_STAND_CHROMA_V2_PID: @@ -123,6 +124,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha case RAZER_CORE_X_PID: case RAZER_DEATHADDER_ELITE_PID: case RAZER_DEATHADDER_V2_MINI_PID: + case RAZER_DEATHADDER_ESSENTIAL_V2_PID: case RAZER_FIREFLY_V2_PID: case RAZER_GOLIATHUS_CHROMA_EXTENDED_PID: case RAZER_GOLIATHUS_CHROMA_PID: @@ -241,6 +243,7 @@ RazerController::RazerController(hid_device* dev_handle, hid_device* dev_argb_ha case RAZER_CYNOSA_V2_PID: case RAZER_DEATHADDER_ELITE_PID: case RAZER_DEATHADDER_ESSENTIAL_PID: + case RAZER_DEATHADDER_ESSENTIAL_V2_PID: case RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID: case RAZER_DEATHADDER_V2_MINI_PID: case RAZER_DEATHADDER_V2_PID: @@ -367,6 +370,29 @@ void RazerController::SetAddressableZoneSizes(unsigned char zone_1_size, unsigne razer_usb_send(&report); } +unsigned char RazerController::GetMaxBrightness() +{ + /*-----------------------------------------------------*\ + | Max brightness for most devices is 0xFF (255) | + | Add PIDs only for devices that use 0x64 (100) | + | or any another arbitrary value | + \*-----------------------------------------------------*/ + unsigned char max_brightness = 255; + + switch(dev_pid) + { + /*-----------------------------------------------------*\ + | Mice | + \*-----------------------------------------------------*/ + case RAZER_DEATHADDER_ESSENTIAL_V2_PID: + + max_brightness = 100; + break; + } + + return(max_brightness); +} + void RazerController::SetBrightness(unsigned char brightness) { razer_set_brightness(brightness); diff --git a/Controllers/RazerController/RazerController.h b/Controllers/RazerController/RazerController.h index 16e2f6b48..c9d2b8837 100644 --- a/Controllers/RazerController/RazerController.h +++ b/Controllers/RazerController/RazerController.h @@ -168,6 +168,7 @@ public: std::string GetFirmwareString(); std::string GetName(); std::string GetSerialString(); + unsigned char GetMaxBrightness(); void SetBrightness(unsigned char brightness); @@ -263,7 +264,7 @@ private: void razer_set_custom_frame(unsigned char row_index, unsigned char start_col, unsigned char stop_col, unsigned char* rgb_data); void razer_set_device_mode(unsigned char device_mode); - + void razer_set_mode_breathing_random(); void razer_set_mode_breathing_one_color(unsigned char red, unsigned char grn, unsigned char blu); void razer_set_mode_breathing_two_colors(unsigned char r1, unsigned char g1, unsigned char b1, unsigned char r2, unsigned char g2, unsigned char b2); diff --git a/Controllers/RazerController/RazerControllerDetect.cpp b/Controllers/RazerController/RazerControllerDetect.cpp index 4908cdadc..86e71f0a1 100644 --- a/Controllers/RazerController/RazerControllerDetect.cpp +++ b/Controllers/RazerController/RazerControllerDetect.cpp @@ -320,6 +320,7 @@ REGISTER_HID_DETECTOR_IPU("Razer Basilisk V3", Det REGISTER_HID_DETECTOR_IPU("Razer Deathadder Chroma", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_CHROMA_PID, 0x00, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Deathadder Elite", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_ELITE_PID, 0x00, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Deathadder Essential", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_ESSENTIAL_PID, 0x00, 0x01, 0x02); +REGISTER_HID_DETECTOR_IPU("Razer Deathadder Essential V2", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_ESSENTIAL_V2_PID, 0x00, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Deathadder Essential White Edition", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID, 0x00, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Deathadder V2", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_V2_PID, 0x00, 0x01, 0x02); REGISTER_HID_DETECTOR_IPU("Razer Deathadder V2 Mini", DetectRazerControllers, RAZER_VID, RAZER_DEATHADDER_V2_MINI_PID, 0x00, 0x01, 0x02); diff --git a/Controllers/RazerController/RazerDevices.h b/Controllers/RazerController/RazerDevices.h index cf15793f0..8e22b01b1 100644 --- a/Controllers/RazerController/RazerDevices.h +++ b/Controllers/RazerController/RazerDevices.h @@ -111,6 +111,7 @@ #define RAZER_DEATHADDER_CHROMA_PID 0x0043 #define RAZER_DEATHADDER_ELITE_PID 0x005C #define RAZER_DEATHADDER_ESSENTIAL_PID 0x006E +#define RAZER_DEATHADDER_ESSENTIAL_V2_PID 0x0098 #define RAZER_DEATHADDER_ESSENTIAL_WHITE_EDITION_PID 0x0071 #define RAZER_DEATHADDER_V2_MINI_PID 0x008C #define RAZER_DEATHADDER_V2_PID 0x0084 @@ -5297,6 +5298,53 @@ static const razer_device deathadder_essential_device = 0 }; +/*-------------------------------------------------------------*\ +| Razer Deathadder Essential V2 1532:0098 | +| | +| Zone "Logo" | +| Single | +| 1 LED | +| | +| Zone "Scroll Wheel" | +| Single | +| 1 LED | +\*-------------------------------------------------------------*/ +static const razer_zone deathadder_essential_v2_logo_zone = +{ + "Logo", + ZONE_TYPE_SINGLE, + 1, + 1 +}; + +static const razer_zone deathadder_essential_v2_scroll_wheel_zone = +{ + "Scroll Wheel", + ZONE_TYPE_SINGLE, + 1, + 1 +}; + +static const razer_device deathadder_essential_v2_device = +{ + "Razer DeathAdder Essential V2", + RAZER_DEATHADDER_ESSENTIAL_V2_PID, + DEVICE_TYPE_MOUSE, + false, + 1, + 2, + { + &deathadder_essential_v2_logo_zone, + &deathadder_essential_v2_scroll_wheel_zone, + NULL, + NULL, + NULL, + NULL + }, + NULL, + 0 +}; + /*-------------------------------------------------------------*\ | Razer Deathadder Essential White Edition 1532:0071 | | | @@ -8222,6 +8270,7 @@ static const razer_device* device_list[] = &deathadder_chroma_device, &deathadder_elite_device, &deathadder_essential_device, + &deathadder_essential_v2_device, &deathadder_essential_white_edition_device, &deathadder_v2_device, &deathadder_v2_mini_device,