Use generic interfaces for Razer Chroma SDK, get mouse and Chroma HDK working

This commit is contained in:
Adam Honse 2019-09-03 20:13:54 -05:00
parent 0a61e38ee1
commit c8a1363b35
3 changed files with 175 additions and 37 deletions

View file

@ -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<int>* new_zone_map = new std::vector<int>();
std::vector<int> 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<int> 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<int> 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<int> 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<int> scroll_wheel_zone_map = zones[3].map[0];
MouseEffect.Color[2][3] = colors[scroll_wheel_zone_map[0]];
std::vector<int> logo_zone_map = zones[4].map[0];
MouseEffect.Color[7][3] = colors[logo_zone_map[0]];
std::vector<int> 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;
}

View file

@ -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
};

View file

@ -40,6 +40,8 @@ typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Eff
void DetectRazerChromaSDKControllers(std::vector<RGBController*>& 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<RGBController*>& 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);