From c8a1363b35041fea13c606adf41e0a55169bca9c Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 3 Sep 2019 20:13:54 -0500 Subject: [PATCH] Use generic interfaces for Razer Chroma SDK, get mouse and Chroma HDK working --- .../RGBController_RazerChromaSDK.cpp | 72 +++++++++- RGBController/RGBController_RazerChromaSDK.h | 129 ++++++++++++++---- RGBController/RazerChromaSDKDetect.cpp | 11 +- 3 files changed, 175 insertions(+), 37 deletions(-) diff --git a/RGBController/RGBController_RazerChromaSDK.cpp b/RGBController/RGBController_RazerChromaSDK.cpp index e3927e7e..5cf593a0 100644 --- a/RGBController/RGBController_RazerChromaSDK.cpp +++ b/RGBController/RGBController_RazerChromaSDK.cpp @@ -34,8 +34,9 @@ RGBController_RazerChromaSDK::RGBController_RazerChromaSDK(unsigned int device_t zone* new_zone = new zone(); new_zone->name = device_list[i]->zones[zone_id]->name; + new_zone->type = device_list[i]->zones[zone_id]->type; - std::vector* new_zone_map = new std::vector(); + std::vector new_zone_map; for (int led_id = 0; led_id < device_list[i]->zones[zone_id]->leds; led_id++) { @@ -46,11 +47,13 @@ RGBController_RazerChromaSDK::RGBController_RazerChromaSDK(unsigned int device_t new_led->name = device_list[i]->zones[zone_id]->name; leds.push_back(*new_led); - new_zone_map->push_back(led_count); + new_zone_map.push_back(led_count); led_count++; } + new_zone->map.push_back(new_zone_map); + zones.push_back(*new_zone); } } @@ -114,17 +117,72 @@ void RGBController_RazerChromaSDK::UpdateLEDs() { switch (device->type) { - case RAZER_FIREFLY_CHROMA: + case RAZER_GENERIC_MOUSE: { - //Firefly Chroma - ChromaSDK::Mousepad::CUSTOM_EFFECT_TYPE FireflyEffect = {}; + ChromaSDK::Mouse::CUSTOM_EFFECT_TYPE2 MouseEffect = {}; + + std::vector left_zone_map = zones[0].map[0]; + + for (int left = 1; left < 8; left++) + { + MouseEffect.Color[left][0] = colors[left_zone_map[left - 1]]; + } + + std::vector right_zone_map = zones[1].map[0]; + + for (int right = 1; right < 8; right++) + { + MouseEffect.Color[right][6] = colors[right_zone_map[right - 1]]; + } + + std::vector bottom_zone_map = zones[2].map[0]; + + for (int bottom = 1; bottom < 6; bottom++) + { + MouseEffect.Color[8][bottom] = colors[bottom_zone_map[bottom - 1]]; + } + + std::vector scroll_wheel_zone_map = zones[3].map[0]; + + MouseEffect.Color[2][3] = colors[scroll_wheel_zone_map[0]]; + + std::vector logo_zone_map = zones[4].map[0]; + + MouseEffect.Color[7][3] = colors[logo_zone_map[0]]; + + std::vector numpad_backlight_zone_map = zones[5].map[0]; + + MouseEffect.Color[4][3] = colors[numpad_backlight_zone_map[0]]; + + CreateMouseEffect(ChromaSDK::Mouse::CHROMA_CUSTOM2, &MouseEffect, NULL); + } + break; + + case RAZER_GENERIC_MOUSEPAD: + { + ChromaSDK::Mousepad::CUSTOM_EFFECT_TYPE MousepadEffect = {}; for (int x = 0; x < 15; x++) { - FireflyEffect.Color[x] = colors[x]; + MousepadEffect.Color[x] = colors[x]; } - CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &FireflyEffect, NULL); + CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &MousepadEffect, NULL); + } + break; + + case RAZER_CHROMA_HDK: + { + ChromaSDK::CUSTOM_EFFECT_TYPE ChromaBoxEffect = {}; + + for (int x = 0; x < 16; x++) + { + for (int y = 0; y < 4; y++) + { + ChromaBoxEffect.Color[y][x] = colors[(y*16) + x]; + } + } + CreateEffect(ChromaSDK::CHROMABOX, ChromaSDK::CHROMA_CUSTOM, &ChromaBoxEffect, NULL); } break; } diff --git a/RGBController/RGBController_RazerChromaSDK.h b/RGBController/RGBController_RazerChromaSDK.h index 8918024e..848d6d3f 100644 --- a/RGBController/RGBController_RazerChromaSDK.h +++ b/RGBController/RGBController_RazerChromaSDK.h @@ -26,29 +26,14 @@ typedef RZRESULT(*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, typedef RZRESULT(*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId); typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId); -#define RAZER_MAX_ZONES 4 -#define RAZER_NUM_DEVICES 2 +#define RAZER_MAX_ZONES 6 +#define RAZER_NUM_DEVICES 3 enum { - RAZER_NO_DEVICE, - RAZER_BLACKWIDOW_CHROMA, - RAZER_DEATHSTALKER_CHROMA, - RAZER_ORNATA_CHROMA, - RAZER_BLADE_STEALTH, - RAZER_BLADE_PRO, - RAZER_TARTARUS_CHROMA, - RAZER_DEATHADDER_CHROMA, - RAZER_DEATHADDER_ELITE, - RAZER_NAGA_CHROMA, - RAZER_DIAMONDBACK_CHROMA, - RAZER_MAMBA_TOURNAMENT_EDITION_CHROMA, - RAZER_FIREFLY_CHROMA, - RAZER_GOLIATHUS_EXTENDED_CHROMA, - RAZER_MUG_HOLDER, - RAZER_CORE, - RAZER_KRAKEN_V1, - RAZER_KRAKEN_V2, + RAZER_GENERIC_KEYBOARD, + RAZER_GENERIC_MOUSE, + RAZER_GENERIC_MOUSEPAD, RAZER_CHROMA_HDK }; @@ -79,25 +64,110 @@ typedef struct } razer_device; /*------------------------------------------------------------ *\ -| Razer Firefly | +| Razer Generic Mouse | +| | +| Zone "Left" | +| Linear | +| 7 LEDs | +| | +| Zone "Right" | +| Linear | +| 7 LEDs | +| | +| Zone "Bottom" | +| Linear | +| 5 LEDs | +| | +| Zone "Scroll Wheel" | +| Single | +| 1 LED | +| | +| Zone "Logo" | +| Single | +| 1 LED | +| | +| Zone "Numpad/Backlight" | +| Single | +| 1 LED | +\*-------------------------------------------------------------*/ +static const razer_zone mouse_left_zone = +{ + "Left LED Strip", + ZONE_TYPE_LINEAR, + 7 +}; + +static const razer_zone mouse_right_zone = +{ + "Right LED Strip", + ZONE_TYPE_LINEAR, + 7 +}; + +static const razer_zone mouse_bottom_zone = +{ + "Bottom LED Strip", + ZONE_TYPE_LINEAR, + 5 +}; + +static const razer_zone mouse_scroll_wheel_zone = +{ + "Scroll Wheel", + ZONE_TYPE_SINGLE, + 1 +}; + +static const razer_zone mouse_logo_zone = +{ + "Logo", + ZONE_TYPE_SINGLE, + 1 +}; + +static const razer_zone mouse_numpad_backlight_zone = +{ + "Numpad/Backlight", + ZONE_TYPE_SINGLE, + 1 +}; + +static const razer_device mouse_device = +{ + "Razer Generic Mouse", + RAZER_GENERIC_MOUSE, + { + &mouse_left_zone, + &mouse_right_zone, + &mouse_bottom_zone, + &mouse_scroll_wheel_zone, + &mouse_logo_zone, + &mouse_numpad_backlight_zone + } +}; + +/*------------------------------------------------------------ *\ +| Razer Generic Mousepad (Firefly, Mug Holder) | | | | Zone "LED Strip" | | Linear | | 15 LEDs | \*-------------------------------------------------------------*/ -static const razer_zone firefly_zone = +static const razer_zone mousepad_zone = { "LED Strip", ZONE_TYPE_LINEAR, 15 }; -static const razer_device firefly_device = +static const razer_device mousepad_device = { - "Razer Firefly", - RAZER_FIREFLY_CHROMA, + "Razer Generic Mousepad", + RAZER_GENERIC_MOUSEPAD, { - &firefly_zone, + &mousepad_zone, + NULL, + NULL, NULL, NULL, NULL @@ -138,13 +208,16 @@ static const razer_device chromahdk_device = &chromahdk_zone, &chromahdk_zone, &chromahdk_zone, - &chromahdk_zone + &chromahdk_zone, + NULL, + NULL } }; static const razer_device* device_list[RAZER_NUM_DEVICES] = { - &firefly_device, + &mouse_device, + &mousepad_device, &chromahdk_device }; diff --git a/RGBController/RazerChromaSDKDetect.cpp b/RGBController/RazerChromaSDKDetect.cpp index bb50aa6a..2ea58067 100644 --- a/RGBController/RazerChromaSDKDetect.cpp +++ b/RGBController/RazerChromaSDKDetect.cpp @@ -40,6 +40,8 @@ typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Eff void DetectRazerChromaSDKControllers(std::vector& rgb_controllers) { + RGBController_RazerChromaSDK* razer_rgb; + // Dynamically loads the Chroma SDK library. hModule = LoadLibrary(CHROMASDKDLL); if (hModule) @@ -52,11 +54,16 @@ void DetectRazerChromaSDKControllers(std::vector& rgb_controller } } - RGBController_RazerChromaSDK* razer_rgb = new RGBController_RazerChromaSDK(RAZER_CHROMA_HDK, &hModule); + + razer_rgb = new RGBController_RazerChromaSDK(RAZER_GENERIC_MOUSE, &hModule); rgb_controllers.push_back(razer_rgb); - razer_rgb = new RGBController_RazerChromaSDK(RAZER_FIREFLY_CHROMA, &hModule); + razer_rgb = new RGBController_RazerChromaSDK(RAZER_GENERIC_MOUSEPAD, &hModule); + + rgb_controllers.push_back(razer_rgb); + + razer_rgb = new RGBController_RazerChromaSDK(RAZER_CHROMA_HDK, &hModule); rgb_controllers.push_back(razer_rgb);