Start writing an RGBController interface for the Razer Chroma SDK on Windows
This commit is contained in:
parent
b5f687c402
commit
0a61e38ee1
11 changed files with 1697 additions and 5 deletions
131
RGBController/RGBController_RazerChromaSDK.cpp
Normal file
131
RGBController/RGBController_RazerChromaSDK.cpp
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_RazerChromaSDK.h |
|
||||
| |
|
||||
| Generic RGB Interface for official Razer |
|
||||
| Chroma SDK |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 9/2/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController_RazerChromaSDK.h"
|
||||
|
||||
CREATEEFFECT RGBController_RazerChromaSDK::CreateEffect = NULL;
|
||||
CREATEKEYBOARDEFFECT RGBController_RazerChromaSDK::CreateKeyboardEffect = NULL;
|
||||
CREATEMOUSEEFFECT RGBController_RazerChromaSDK::CreateMouseEffect = NULL;
|
||||
CREATEMOUSEPADEFFECT RGBController_RazerChromaSDK::CreateMousepadEffect = NULL;
|
||||
CREATEHEADSETEFFECT RGBController_RazerChromaSDK::CreateHeadsetEffect = NULL;
|
||||
CREATECHROMALINKEFFECT RGBController_RazerChromaSDK::CreateChromaLinkEffect = NULL;
|
||||
|
||||
RGBController_RazerChromaSDK::RGBController_RazerChromaSDK(unsigned int device_type, HMODULE* hModule)
|
||||
{
|
||||
unsigned int led_count = 0;
|
||||
|
||||
for (int i = 0; i < RAZER_NUM_DEVICES; i++)
|
||||
{
|
||||
if (device_list[i]->type == device_type)
|
||||
{
|
||||
name = device_list[i]->name;
|
||||
|
||||
for (int zone_id = 0; zone_id < RAZER_MAX_ZONES; zone_id++)
|
||||
{
|
||||
if (device_list[i]->zones[zone_id] != NULL)
|
||||
{
|
||||
device = device_list[i];
|
||||
|
||||
zone* new_zone = new zone();
|
||||
new_zone->name = device_list[i]->zones[zone_id]->name;
|
||||
|
||||
std::vector<int>* new_zone_map = new std::vector<int>();
|
||||
|
||||
for (int led_id = 0; led_id < device_list[i]->zones[zone_id]->leds; led_id++)
|
||||
{
|
||||
RGBColor new_color = 0x00000000;
|
||||
colors.push_back(new_color);
|
||||
|
||||
led* new_led = new led();
|
||||
new_led->name = device_list[i]->zones[zone_id]->name;
|
||||
leds.push_back(*new_led);
|
||||
|
||||
new_zone_map->push_back(led_count);
|
||||
|
||||
led_count++;
|
||||
}
|
||||
|
||||
zones.push_back(*new_zone);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(CreateEffect == NULL) CreateEffect = (CREATEEFFECT)GetProcAddress(*hModule, "CreateEffect");
|
||||
if(CreateKeyboardEffect == NULL) CreateKeyboardEffect = (CREATEKEYBOARDEFFECT)GetProcAddress(*hModule, "CreateKeyboardEffect");
|
||||
if(CreateMouseEffect == NULL) CreateMouseEffect = (CREATEMOUSEEFFECT)GetProcAddress(*hModule, "CreateMouseEffect");
|
||||
if(CreateMousepadEffect == NULL) CreateMousepadEffect = (CREATEMOUSEPADEFFECT)GetProcAddress(*hModule, "CreateMousepadEffect");
|
||||
if(CreateHeadsetEffect == NULL) CreateHeadsetEffect = (CREATEHEADSETEFFECT)GetProcAddress(*hModule, "CreateHeadsetEffect");
|
||||
if(CreateChromaLinkEffect == NULL) CreateChromaLinkEffect = (CREATECHROMALINKEFFECT)GetProcAddress(*hModule, "CreateChromaLinkEffect");
|
||||
}
|
||||
|
||||
int RGBController_RazerChromaSDK::GetMode()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::SetMode(int mode)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::SetCustomMode()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::SetAllLEDs(RGBColor color)
|
||||
{
|
||||
for (int i = 0; i < colors.size(); i++)
|
||||
{
|
||||
colors[i] = color;
|
||||
}
|
||||
|
||||
UpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::SetAllZoneLEDs(int zone, RGBColor color)
|
||||
{
|
||||
for (int x = 0; x < zones[zone].map.size(); x++)
|
||||
{
|
||||
for (int y = 0; y < zones[zone].map[x].size(); y++)
|
||||
{
|
||||
colors[zones[zone].map[x][y]] = color;
|
||||
}
|
||||
}
|
||||
|
||||
UpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::SetLED(int led, RGBColor color)
|
||||
{
|
||||
colors[led] = color;
|
||||
|
||||
UpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_RazerChromaSDK::UpdateLEDs()
|
||||
{
|
||||
switch (device->type)
|
||||
{
|
||||
case RAZER_FIREFLY_CHROMA:
|
||||
{
|
||||
//Firefly Chroma
|
||||
ChromaSDK::Mousepad::CUSTOM_EFFECT_TYPE FireflyEffect = {};
|
||||
|
||||
for (int x = 0; x < 15; x++)
|
||||
{
|
||||
FireflyEffect.Color[x] = colors[x];
|
||||
}
|
||||
|
||||
CreateMousepadEffect(ChromaSDK::Mousepad::CHROMA_CUSTOM, &FireflyEffect, NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
172
RGBController/RGBController_RazerChromaSDK.h
Normal file
172
RGBController/RGBController_RazerChromaSDK.h
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_RazerChromaSDK.h |
|
||||
| |
|
||||
| Generic RGB Interface for official Razer |
|
||||
| Chroma SDK |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 9/2/2019 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#include "RGBController.h"
|
||||
#include <Windows.h>
|
||||
|
||||
#include "RzChromaSDKDefines.h"
|
||||
#include "RzChromaSDKTypes.h"
|
||||
#include "RzErrors.h"
|
||||
|
||||
using namespace ChromaSDK::Keyboard;
|
||||
|
||||
typedef RZRESULT(*INIT)(void);
|
||||
typedef RZRESULT(*UNINIT)(void);
|
||||
typedef RZRESULT(*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
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
|
||||
|
||||
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_CHROMA_HDK
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
RAZER_MODE_CUSTOM,
|
||||
RAZER_MODE_OFF,
|
||||
RAZER_MODE_STATIC,
|
||||
RAZER_MODE_BREATHING,
|
||||
RAZER_MODE_SPECTRUM_CYCLE,
|
||||
RAZER_MODE_WAVE,
|
||||
RAZER_MODE_REACTIVE,
|
||||
RAZER_NUM_MODES
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
std::string name;
|
||||
unsigned int type;
|
||||
unsigned int leds;
|
||||
} razer_zone;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
std::string name;
|
||||
unsigned int type;
|
||||
const razer_zone* zones[RAZER_MAX_ZONES];
|
||||
} razer_device;
|
||||
|
||||
/*------------------------------------------------------------ *\
|
||||
| Razer Firefly |
|
||||
| |
|
||||
| Zone "LED Strip" |
|
||||
| Linear |
|
||||
| 15 LEDs |
|
||||
\*-------------------------------------------------------------*/
|
||||
static const razer_zone firefly_zone =
|
||||
{
|
||||
"LED Strip",
|
||||
ZONE_TYPE_LINEAR,
|
||||
15
|
||||
};
|
||||
|
||||
static const razer_device firefly_device =
|
||||
{
|
||||
"Razer Firefly",
|
||||
RAZER_FIREFLY_CHROMA,
|
||||
{
|
||||
&firefly_zone,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
/*------------------------------------------------------------ *\
|
||||
| Razer Chroma HDK |
|
||||
| |
|
||||
| Zone "LED Strip" |
|
||||
| Linear |
|
||||
| 16 LEDs |
|
||||
| |
|
||||
| Zone "LED Strip" |
|
||||
| Linear |
|
||||
| 16 LEDs |
|
||||
| |
|
||||
| Zone "LED Strip" |
|
||||
| Linear |
|
||||
| 16 LEDs |
|
||||
| |
|
||||
| Zone "LED Strip" |
|
||||
| Linear |
|
||||
| 16 LEDs |
|
||||
\*-------------------------------------------------------------*/
|
||||
static const razer_zone chromahdk_zone =
|
||||
{
|
||||
"LED Strip",
|
||||
ZONE_TYPE_LINEAR,
|
||||
16
|
||||
};
|
||||
|
||||
static const razer_device chromahdk_device =
|
||||
{
|
||||
"Razer Chroma HDK",
|
||||
RAZER_CHROMA_HDK,
|
||||
{
|
||||
&chromahdk_zone,
|
||||
&chromahdk_zone,
|
||||
&chromahdk_zone,
|
||||
&chromahdk_zone
|
||||
}
|
||||
};
|
||||
|
||||
static const razer_device* device_list[RAZER_NUM_DEVICES] =
|
||||
{
|
||||
&firefly_device,
|
||||
&chromahdk_device
|
||||
};
|
||||
|
||||
class RGBController_RazerChromaSDK : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_RazerChromaSDK(unsigned int device_type, HMODULE* hModule);
|
||||
int GetMode();
|
||||
void SetMode(int mode);
|
||||
void SetCustomMode();
|
||||
void SetAllLEDs(RGBColor color);
|
||||
void SetAllZoneLEDs(int zone, RGBColor color);
|
||||
void SetLED(int led, RGBColor color);
|
||||
void UpdateLEDs();
|
||||
|
||||
private:
|
||||
const razer_device* device;
|
||||
|
||||
static CREATEEFFECT CreateEffect;
|
||||
static CREATEKEYBOARDEFFECT CreateKeyboardEffect;
|
||||
static CREATEMOUSEEFFECT CreateMouseEffect;
|
||||
static CREATEMOUSEPADEFFECT CreateMousepadEffect;
|
||||
static CREATEHEADSETEFFECT CreateHeadsetEffect;
|
||||
static CREATECHROMALINKEFFECT CreateChromaLinkEffect;
|
||||
};
|
||||
63
RGBController/RazerChromaSDKDetect.cpp
Normal file
63
RGBController/RazerChromaSDKDetect.cpp
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#include "RGBController.h"
|
||||
#include "RGBController_RazerChromaSDK.h"
|
||||
#include <vector>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
|
||||
static HMODULE hModule;
|
||||
|
||||
#include "RzChromaSDKDefines.h"
|
||||
#include "RzChromaSDKTypes.h"
|
||||
#include "RzErrors.h"
|
||||
|
||||
using namespace ChromaSDK::Keyboard;
|
||||
|
||||
typedef RZRESULT(*INIT)(void);
|
||||
typedef RZRESULT(*UNINIT)(void);
|
||||
typedef RZRESULT(*CREATEEFFECT)(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEKEYBOARDEFFECT)(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
typedef RZRESULT(*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID* pEffectId);
|
||||
|
||||
#ifdef _WIN64
|
||||
#define CHROMASDKDLL ("RzChromaSDK64.dll")
|
||||
#else
|
||||
#define CHROMASDKDLL ("RzChromaSDK.dll")
|
||||
#endif
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
* DetectRazerChromaSDKControllers *
|
||||
* *
|
||||
* Detect devices supported by the Razer Chroma SDK *
|
||||
* * *
|
||||
\******************************************************************************************/
|
||||
|
||||
void DetectRazerChromaSDKControllers(std::vector<RGBController*>& rgb_controllers)
|
||||
{
|
||||
// Dynamically loads the Chroma SDK library.
|
||||
hModule = LoadLibrary(CHROMASDKDLL);
|
||||
if (hModule)
|
||||
{
|
||||
INIT Init = (INIT)GetProcAddress(hModule, "Init");
|
||||
if (Init)
|
||||
{
|
||||
//Initialize the SDK
|
||||
Init();
|
||||
}
|
||||
}
|
||||
|
||||
RGBController_RazerChromaSDK* razer_rgb = new RGBController_RazerChromaSDK(RAZER_CHROMA_HDK, &hModule);
|
||||
|
||||
rgb_controllers.push_back(razer_rgb);
|
||||
|
||||
razer_rgb = new RGBController_RazerChromaSDK(RAZER_FIREFLY_CHROMA, &hModule);
|
||||
|
||||
rgb_controllers.push_back(razer_rgb);
|
||||
|
||||
} /* DetectRazerChromaSDKControllers() */
|
||||
Loading…
Add table
Add a link
Reference in a new issue