basic integration of chroma sdk

This commit is contained in:
tdixon 2017-07-09 14:39:29 -03:00
parent 7ae0b4e977
commit d4645c694c
9 changed files with 1580 additions and 2 deletions

View file

@ -0,0 +1,55 @@
#include "binding-util.h"
#include "binding-types.h"
#include "debugwriter.h"
#include "chromasdk/ChromaSDKImpl.h"
bool INIT_SUCCESS = false;
CChromaSDKImpl* chromaImpl = NULL;
void _attemptLinkSdk() {
#if !defined(_WIN32) && !defined(_WIN64)
// currently razr chroma is windows-only.
// so, if we are not building for windows platform
// then don't bother with chroma stuff
return;
#endif
chromaImpl = new CChromaSDKImpl();
chromaImpl->Initialize();
INIT_SUCCESS = true;
}
RB_METHOD(chromaSetBase) {
RB_UNUSED_PARAM;
if (INIT_SUCCESS) {
ChromaSDK::Keyboard::CUSTOM_EFFECT_TYPE effect = {};
for (unsigned int y = 0; y < ChromaSDK::Keyboard::MAX_ROW; y++) {
for (unsigned int x = 0; x < ChromaSDK::Keyboard::MAX_COLUMN; x++) {
effect.Color[y][x] = RGB(0xFF, 0, 0xFF);
}
}
chromaImpl->CreateKeyboardEffectImpl(
ChromaSDK::Keyboard::CHROMA_CUSTOM,
&effect,
NULL);
}
return Qnil;
}
void chromaBindingInit() {
_attemptLinkSdk();
VALUE module = rb_define_module("Chroma");
_rb_define_module_function(module, "setBase", chromaSetBase);
}
void chromaBindingRelease() {
if (chromaImpl) {
chromaImpl->UnInitialize();
delete chromaImpl;
chromaImpl = NULL;
INIT_SUCCESS = false;
}
}

351
chromasdk/ChromaSDKImpl.cpp Normal file
View file

@ -0,0 +1,351 @@
//! \example ChromaSDKImpl.cpp
#include <map>
#include <vector>
#include <windows.h>
#include "ChromaSDKImpl.h"
#include "FrameController.h"
CChromaSDKImpl g_ChromaSDKImpl;
#ifdef _WIN64
#define CHROMASDKDLL L"RzChromaSDK64.dll"
#else
#define CHROMASDKDLL L"RzChromaSDK.dll"
#endif
using namespace std;
using namespace ChromaSDK;
using namespace ChromaSDK::Keyboard;
using namespace ChromaSDK::Keypad;
using namespace ChromaSDK::Mouse;
using namespace ChromaSDK::Mousepad;
using namespace ChromaSDK::Headset;
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 (*CREATEHEADSETEFFECT)(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT (*CREATEMOUSEPADEFFECT)(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT (*CREATEMOUSEEFFECT)(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT (*CREATEKEYPADEFFECT)(ChromaSDK::Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT (*CREATECHROMALINKEFFECT)(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId);
typedef RZRESULT (*SETEFFECT)(RZEFFECTID EffectId);
typedef RZRESULT (*DELETEEFFECT)(RZEFFECTID EffectId);
typedef RZRESULT (*REGISTEREVENTNOTIFICATION)(HWND hWnd);
typedef RZRESULT (*UNREGISTEREVENTNOTIFICATION)(void);
typedef RZRESULT (*QUERYDEVICE)(RZDEVICEID DeviceId, ChromaSDK::DEVICE_INFO_TYPE &DeviceInfo);
INIT Init = NULL;
UNINIT UnInit = NULL;
CREATEEFFECT CreateEffect = NULL;
CREATEKEYBOARDEFFECT CreateKeyboardEffect = NULL;
CREATEMOUSEEFFECT CreateMouseEffect = NULL;
CREATEHEADSETEFFECT CreateHeadsetEffect = NULL;
CREATEMOUSEPADEFFECT CreateMousematEffect = NULL;
CREATEKEYPADEFFECT CreateKeypadEffect = NULL;
CREATECHROMALINKEFFECT CreateChromaLinkEffect = NULL;
SETEFFECT SetEffect = NULL;
DELETEEFFECT DeleteEffect = NULL;
QUERYDEVICE QueryDevice = NULL;
#define EVENT_NAME L"{4784D90A-1179-4F7D-8558-52511D809190}"
#define MAX_EFFECTS 100
typedef struct _EFFECTDATATYPE
{
long numEffects;
BOOL repeat;
HANDLE thread;
struct _EFFECT
{
RZEFFECTID id;
long delay;
} Effect[MAX_EFFECTS];
} EFFECTDATATYPE;
struct GUIDCompare
{
BOOL operator()(const GUID & Left, const GUID & Right) const
{
return memcmp(&Left , &Right,sizeof(Right)) < 0;
}
};
std::map<RZEFFECTID, EFFECTDATATYPE, GUIDCompare> g_Effects;
DWORD WINAPI Thread_RenderEffects(LPVOID lpParameter)
{
RZEFFECTID *pEffectId = (RZEFFECTID*)lpParameter;
auto iterator = g_Effects.find(*pEffectId);
if(iterator != g_Effects.end())
{
EFFECTDATATYPE *pEffectData = &iterator->second;
CFrameController FrameControl(30);
if(pEffectData->repeat == FALSE)
{
for(int i=0; i<pEffectData->numEffects; i++)
{
FrameControl.Begin();
SetEffect(pEffectData->Effect[i].id);
Sleep(pEffectData->Effect[i].delay);
FrameControl.End();
}
}
else
{
while(pEffectData->repeat)
{
for(int i=0; i<pEffectData->numEffects; i++)
{
FrameControl.Begin();
SetEffect(pEffectData->Effect[i].id);
Sleep(pEffectData->Effect[i].delay);
FrameControl.End();
}
};
}
}
return 0;
}
// CChromaSDKImpl
CChromaSDKImpl::CChromaSDKImpl():
m_hModule(NULL),
m_hEvent(NULL)
{
}
CChromaSDKImpl::~CChromaSDKImpl()
{
}
void CChromaSDKImpl::Initialize()
{
if(m_hModule == NULL)
{
m_hModule =::LoadLibrary(CHROMASDKDLL);
if(m_hModule != NULL)
{
INIT Init = (INIT)::GetProcAddress(m_hModule, "Init");
if(Init != NULL)
{
RZRESULT rzResult = Init();
if(rzResult == RZRESULT_SUCCESS)
{
CreateEffect = (CREATEEFFECT)::GetProcAddress(m_hModule, "CreateEffect");
CreateKeyboardEffect = (CREATEKEYBOARDEFFECT)::GetProcAddress(m_hModule, "CreateKeyboardEffect");
CreateMouseEffect = (CREATEMOUSEEFFECT)::GetProcAddress(m_hModule, "CreateMouseEffect");
CreateMousematEffect = (CREATEMOUSEPADEFFECT)::GetProcAddress(m_hModule, "CreateMousepadEffect");
CreateKeypadEffect = (CREATEKEYPADEFFECT)::GetProcAddress(m_hModule, "CreateKeypadEffect");
CreateHeadsetEffect = (CREATEHEADSETEFFECT)::GetProcAddress(m_hModule, "CreateHeadsetEffect");
CreateChromaLinkEffect = (CREATECHROMALINKEFFECT)::GetProcAddress(m_hModule, "CreateChromaLinkEffect");
SetEffect = (SETEFFECT)GetProcAddress(m_hModule, "SetEffect");
DeleteEffect = (DELETEEFFECT)GetProcAddress(m_hModule, "DeleteEffect");
}
}
}
}
if(m_hEvent == NULL)
{
m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, EVENT_NAME);
}
}
void CChromaSDKImpl::UnInitialize()
{
// Free memeory
while(!g_Effects.empty())
{
auto iterator = g_Effects.begin();
for(int i=0; i<iterator->second.numEffects; i++)
{
DeleteEffect(iterator->second.Effect[i].id);
}
g_Effects.erase(iterator);
};
if(m_hEvent != NULL)
{
::CloseHandle(m_hEvent);
m_hEvent = NULL;
}
if(m_hModule != NULL)
{
UNINIT UnInit = (UNINIT)::GetProcAddress(m_hModule, "UnInit");
if(UnInit != NULL)
{
RZRESULT rzResult = UnInit();
if(rzResult != RZRESULT_SUCCESS)
{
// Some error here
}
}
::FreeLibrary(m_hModule);
m_hModule = NULL;
}
}
void CChromaSDKImpl::CreateEffectImpl(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateEffect == NULL) return;
CreateEffect(DeviceId, Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateKeyboardEffectImpl(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateKeyboardEffect == NULL) return;
CreateKeyboardEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateMouseEffectImpl(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateMouseEffect == NULL) return;
CreateMouseEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateMousematEffectImpl(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateMousematEffect == NULL) return;
CreateMousematEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateKeypadEffectImpl(ChromaSDK::Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateKeypadEffect == NULL) return;
CreateKeypadEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateHeadsetEffectImpl(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateHeadsetEffect == NULL) return;
CreateHeadsetEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::CreateChromaLinkEffectImpl(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId)
{
if(CreateChromaLinkEffect == NULL) return;
CreateChromaLinkEffect(Effect, pParam, pEffectId);
}
void CChromaSDKImpl::SetEffectImpl(RZEFFECTID EffectId)
{
auto iterator = g_Effects.find(EffectId);
if(iterator != g_Effects.end())
{
if(iterator->second.repeat == FALSE)
{
HANDLE hThread = CreateThread(NULL, 0, Thread_RenderEffects, (LPVOID)&iterator->first, 0, NULL);
if(hThread != NULL)
{
CloseHandle(hThread);
}
}
else
{
HANDLE hThread = CreateThread(NULL, 0, Thread_RenderEffects, (LPVOID)&iterator->first, 0, NULL);
if(hThread != NULL)
{
iterator->second.thread = hThread;
}
}
}
else
{
if(SetEffect == NULL) return;
SetEffect(EffectId);
}
}
void CChromaSDKImpl::DeleteEffectImpl(RZEFFECTID EffectId)
{
auto iterator = g_Effects.find(EffectId);
if(iterator != g_Effects.end())
{
EFFECTDATATYPE EffectData = iterator->second;
for(int i=0; i<EffectData.numEffects; i++)
{
DeleteEffect(EffectData.Effect[i].id);
}
g_Effects.erase(iterator);
}
else
{
if(DeleteEffect == NULL) return;
DeleteEffect(EffectId);
}
}
void CChromaSDKImpl::StopEffectImpl(RZEFFECTID EffectId)
{
auto iterator = g_Effects.find(EffectId);
if(iterator != g_Effects.end())
{
if((iterator->second.repeat == TRUE) &&
(iterator->second.thread != NULL))
{
iterator->second.repeat = FALSE;
CloseHandle(iterator->second.thread);
iterator->second.thread = NULL;
}
}
}
void CChromaSDKImpl::CreateEffectGroup(RZEFFECTID *pGroupEffectId, BOOL Repeat)
{
RZEFFECTID EffectId = GUID_NULL;
if(SUCCEEDED(::CoCreateGuid(&EffectId)))
{
EFFECTDATATYPE EffectData = {};
EffectData.numEffects = 0;
EffectData.repeat = Repeat;
g_Effects.insert(make_pair(EffectId, EffectData));
*pGroupEffectId = EffectId;
}
}
void CChromaSDKImpl::AddToGroup(RZEFFECTID GroupEffectId, RZEFFECTID EffectId, long DelayMS)
{
auto iterator = g_Effects.find(GroupEffectId);
if(iterator != g_Effects.end())
{
long lIndex = iterator->second.numEffects;
iterator->second.Effect[lIndex].id = EffectId;
iterator->second.Effect[lIndex].delay = DelayMS;
iterator->second.numEffects++;
}
}

56
chromasdk/ChromaSDKImpl.h Normal file
View file

@ -0,0 +1,56 @@
#ifndef _CHROMASDKIMPL2_H_
#define _CHROMASDKIMPL2_H_
#pragma once
#include "RzChromaSDKDefines.h"
#include "RzChromaSDKTypes.h"
#include "RzErrors.h"
const COLORREF BLACK = RGB(0,0,0);
const COLORREF WHITE = RGB(255,255,255);
const COLORREF RED = RGB(255,0,0);
const COLORREF GREEN = RGB(0,255,0);
const COLORREF BLUE = RGB(0,0,255);
const COLORREF YELLOW = RGB(255,255,0);
const COLORREF PURPLE = RGB(128,0,128);
const COLORREF CYAN = RGB(00,255,255);
const COLORREF ORANGE = RGB(255,165,00);
const COLORREF PINK = RGB(255,192,203);
const COLORREF GREY = RGB(125, 125, 125);
class CChromaSDKImpl
{
public:
CChromaSDKImpl();
~CChromaSDKImpl();
public:
void Initialize();
void UnInitialize();
void CreateEffectImpl(RZDEVICEID DeviceId, ChromaSDK::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateKeyboardEffectImpl(ChromaSDK::Keyboard::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateMouseEffectImpl(ChromaSDK::Mouse::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateMousematEffectImpl(ChromaSDK::Mousepad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateKeypadEffectImpl(ChromaSDK::Keypad::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateHeadsetEffectImpl(ChromaSDK::Headset::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void CreateChromaLinkEffectImpl(ChromaSDK::ChromaLink::EFFECT_TYPE Effect, PRZPARAM pParam, RZEFFECTID *pEffectId=NULL);
void SetEffectImpl(RZEFFECTID EffectId);
void DeleteEffectImpl(RZEFFECTID EffectId);
void StopEffectImpl(RZEFFECTID EffectId);
void CreateEffectGroup(RZEFFECTID *pGroupEffectId, BOOL Repeat=FALSE);
void AddToGroup(RZEFFECTID GroupEffectId, RZEFFECTID EffectId, LONG DelayMS=100);
private:
HMODULE m_hModule;
HANDLE m_hEvent;
};
extern CChromaSDKImpl g_ChromaSDKImpl;
#endif

View file

@ -0,0 +1,54 @@
#include "FrameController.h"
#include <windows.h>
int g_dwCurrentTickCount = 0;
// CFrameController
CFrameController::CFrameController():
m_FramesPerSec(-1),
m_OneFrame(0)
{
}
CFrameController::CFrameController(long FramePerSec):
m_FramesPerSec(FramePerSec),
m_OneFrame(1000.0/m_FramesPerSec)
{
}
CFrameController::~CFrameController()
{
}
void CFrameController::Begin()
{
g_dwCurrentTickCount = GetTickCount();
}
void CFrameController::End()
{
static int dwSleep = 0;
static int dwDiff = 0;
dwDiff = GetTickCount() - g_dwCurrentTickCount;
dwSleep = (int)(m_OneFrame - (double)dwDiff);
if (dwDiff < m_OneFrame)
{
Sleep(dwSleep);
}
}
void CFrameController::SetRate(long FramePerSec)
{
m_FramesPerSec = FramePerSec;
m_OneFrame = 1000.0 / m_FramesPerSec;
}
long CFrameController::GetRate(void)
{
return m_FramesPerSec;
}

View file

@ -0,0 +1,23 @@
#ifndef _FRAMECONTROLLER_H_
#define _FRAMECONTROLLER_H_
#pragma once
class CFrameController
{
public:
CFrameController();
CFrameController(long FramePerSec);
~CFrameController();
void Begin();
void End();
void SetRate(long FramePerSec);
long GetRate();
private:
long m_FramesPerSec;
double m_OneFrame;
};
#endif

View file

@ -0,0 +1,172 @@
//! \file RzChromaSDKDefines.h
//! \brief Definitions of global and static variables.
#ifndef _RZSCHROMADKDEFINES_H_
#define _RZSCHROMADKDEFINES_H_
#pragma once
#ifndef GUID_DEFINED
#include <guiddef.h>
#endif
namespace ChromaSDK
{
// Keyboards
//! Razer Blackwidow Chroma device.
// {2EA1BB63-CA28-428D-9F06-196B88330BBB}
static const GUID BLACKWIDOW_CHROMA =
{ 0x2ea1bb63, 0xca28, 0x428d, { 0x9f, 0x06, 0x19, 0x6b, 0x88, 0x33, 0x0b, 0xbb } };
//! Razer Blackwidow Chroma Tournament Edition device.
// {ED1C1B82-BFBE-418F-B49D-D03F05B149DF}
static const GUID BLACKWIDOW_CHROMA_TE =
{ 0xed1c1b82, 0xbfbe, 0x418f, { 0xb4, 0x9d, 0xd0, 0x3f, 0x5, 0xb1, 0x49, 0xdf } };
//! Razer Deathstalker device.
// {18C5AD9B-4326-4828-92C4-2669A66D2283}
static const GUID DEATHSTALKER_CHROMA =
{ 0x18c5ad9b, 0x4326, 0x4828, { 0x92, 0xc4, 0x26, 0x69, 0xa6, 0x6d, 0x22, 0x83 } };
//! Overwatch Keyboard.
// {872AB2A9-7959-4478-9FED-15F6186E72E4}
static const GUID OVERWATCH_KEYBOARD =
{ 0x872ab2a9, 0x7959, 0x4478, { 0x9f, 0xed, 0x15, 0xf6, 0x18, 0x6e, 0x72, 0xe4 } };
//! Razer Blackwidow X Chroma device.
// {5AF60076-ADE9-43D4-B574-52599293B554}
static const GUID BLACKWIDOW_X_CHROMA =
{ 0x5af60076, 0xade9, 0x43d4, { 0xb5, 0x74, 0x52, 0x59, 0x92, 0x93, 0xb5, 0x54 } };
//! Razer Blackwidow X TE Chroma device.
// {2D84DD51-3290-4AAC-9A89-D8AFDE38B57C}
static const GUID BLACKWIDOW_X_TE_CHROMA =
{ 0x2d84dd51, 0x3290, 0x4aac, { 0x9a, 0x89, 0xd8, 0xaf, 0xde, 0x38, 0xb5, 0x7c } };
//! Razer Omata Chroma
// {803378C1-CC48-4970-8539-D828CC1D420A}
static const GUID OMATA_CHROMA =
{ 0x803378c1, 0xcc48, 0x4970,{ 0x85, 0x39, 0xd8, 0x28, 0xcc, 0x1d, 0x42, 0xa } };
//! Razer Blade Stealth.
// {C83BDFE8-E7FC-40E0-99DB-872E23F19891}
static const GUID BLADE_STEALTH =
{ 0xc83bdfe8, 0xe7fc, 0x40e0, { 0x99, 0xdb, 0x87, 0x2e, 0x23, 0xf1, 0x98, 0x91 } };
//! Razer Blade
// {F2BEDFAF-A0FE-4651-9D41-B6CE603A3DDD}
static const GUID BLADE =
{ 0xf2bedfaf, 0xa0fe, 0x4651, { 0x9d, 0x41, 0xb6, 0xce, 0x60, 0x3a, 0x3d, 0xdd } };
//! Razer Blade Pro
// {A73AC338-F0E5-4BF7-91AE-DD1F7E1737A5}
static const GUID BLADE_PRO =
{ 0xa73ac338, 0xf0e5, 0x4bf7,{ 0x91, 0xae, 0xdd, 0x1f, 0x7e, 0x17, 0x37, 0xa5 } };
//! Razer Blackwidow Chroma v2
// {608E743F-B402-44BD-A7A6-7AA9F574ECF4}
static const GUID BLACKWIDOW_CHROMA2 =
{ 0x608e743f, 0xb402, 0x44bd,{ 0xa7, 0xa6, 0x7a, 0xa9, 0xf5, 0x74, 0xec, 0xf4 } };
// Mice
//! Razer Deathadder Chroma device.
// {AEC50D91-B1F1-452F-8E16-7B73F376FDF3}
static const GUID DEATHADDER_CHROMA =
{ 0xaec50d91, 0xb1f1, 0x452f, { 0x8e, 0x16, 0x7b, 0x73, 0xf3, 0x76, 0xfd, 0xf3 } };
//! Razer Mamba Chroma Tournament Edition device.
// {7EC00450-E0EE-4289-89D5-0D879C19061A}
static const GUID MAMBA_CHROMA_TE =
{ 0x7ec00450, 0xe0ee, 0x4289, { 0x89, 0xd5, 0xd, 0x87, 0x9c, 0x19, 0x6, 0x1a } };
//! Razer Diamondback device.
// {FF8A5929-4512-4257-8D59-C647BF9935D0}
static const GUID DIAMONDBACK_CHROMA =
{ 0xff8a5929, 0x4512, 0x4257, { 0x8d, 0x59, 0xc6, 0x47, 0xbf, 0x99, 0x35, 0xd0 } };
//! Razer Mamba device.
// {D527CBDC-EB0A-483A-9E89-66D50463EC6C}
static const GUID MAMBA_CHROMA =
{ 0xd527cbdc, 0xeb0a, 0x483a, { 0x9e, 0x89, 0x66, 0xd5, 0x4, 0x63, 0xec, 0x6c } };
//! Razer Naga Epic device.
// {D714C50B-7158-4368-B99C-601ACB985E98}
static const GUID NAGA_EPIC_CHROMA =
{ 0xd714c50b, 0x7158, 0x4368, { 0xb9, 0x9c, 0x60, 0x1a, 0xcb, 0x98, 0x5e, 0x98 } };
//! Razer Naga device.
// {F1876328-6CA4-46AE-BE04-BE812B414433}
static const GUID NAGA_CHROMA =
{ 0xf1876328, 0x6ca4, 0x46ae, { 0xbe, 0x4, 0xbe, 0x81, 0x2b, 0x41, 0x44, 0x33 } };
//! Razer Orochi Chroma device.
// {52C15681-4ECE-4DD9-8A52-A1418459EB34}
static const GUID OROCHI_CHROMA =
{ 0x52c15681, 0x4ece, 0x4dd9, { 0x8a, 0x52, 0xa1, 0x41, 0x84, 0x59, 0xeb, 0x34 } };
//! Razer Naga Hex Chroma device.
// {195D70F5-F285-4CFF-99F2-B8C0E9658DB4}
static const GUID NAGA_HEX_CHROMA =
{ 0x195d70f5, 0xf285, 0x4cff, { 0x99, 0xf2, 0xb8, 0xc0, 0xe9, 0x65, 0x8d, 0xb4 } };
//! Razer DeathAdder Elite Chroma device.
// {77834867-3237-4A9F-AD77-4A46C4183003}
static const GUID DEATHADDER_ELITE_CHROMA =
{ 0x77834867, 0x3237, 0x4a9f,{ 0xad, 0x77, 0x4a, 0x46, 0xc4, 0x18, 0x30, 0x3 } };
// Headsets
//! Razer Kraken 7.1 Chroma device.
// {CD1E09A5-D5E6-4A6C-A93B-E6D9BF1D2092}
static const GUID KRAKEN71_CHROMA =
{ 0xcd1e09a5, 0xd5e6, 0x4a6c, { 0xa9, 0x3b, 0xe6, 0xd9, 0xbf, 0x1d, 0x20, 0x92 } };
//! Razer ManO'War device.
// {DF3164D7-5408-4A0E-8A7F-A7412F26BEBF}
static const GUID MANOWAR_CHROMA =
{ 0xdf3164d7, 0x5408, 0x4a0e, { 0x8a, 0x7f, 0xa7, 0x41, 0x2f, 0x26, 0xbe, 0xbf } };
//! Razer Kraken 7.1 Chroma Refresh headset.
// {7FB8A36E-9E74-4BB3-8C86-CAC7F7891EBD}
static const GUID KRAKEN71_REFRESH_CHROMA =
{ 0x7fb8a36e, 0x9e74, 0x4bb3,{ 0x8c, 0x86, 0xca, 0xc7, 0xf7, 0x89, 0x1e, 0xbd } };
// Mouse mat
//! Razer Firefly device.
// {80F95A94-73D2-48CA-AE9A-0986789A9AF2}
static const GUID FIREFLY_CHROMA =
{ 0x80f95a94, 0x73d2, 0x48ca, { 0xae, 0x9a, 0x9, 0x86, 0x78, 0x9a, 0x9a, 0xf2 } };
// Keypads
//! Razer Tartarus device.
// {00F0545C-E180-4AD1-8E8A-419061CE505E}
static const GUID TARTARUS_CHROMA =
{ 0xf0545c, 0xe180, 0x4ad1, { 0x8e, 0x8a, 0x41, 0x90, 0x61, 0xce, 0x50, 0x5e } };
//! Razer Orbweaver device.
// {9D24B0AB-0162-466C-9640-7A924AA4D9FD}
static const GUID ORBWEAVER_CHROMA =
{ 0x9d24b0ab, 0x162, 0x466c, { 0x96, 0x40, 0x7a, 0x92, 0x4a, 0xa4, 0xd9, 0xfd } };
// Chroma Linked devices
// {35F6F18D-1AE5-436C-A575-AB44A127903A}
static const GUID LENOVO_Y900 =
{ 0x35f6f18d, 0x1ae5, 0x436c, { 0xa5, 0x75, 0xab, 0x44, 0xa1, 0x27, 0x90, 0x3a } };
// {47DB1FA7-6B9B-4EE6-B6F4-4071A3B2053B}
static const GUID LENOVO_Y27 =
{ 0x47db1fa7, 0x6b9b, 0x4ee6, { 0xb6, 0xf4, 0x40, 0x71, 0xa3, 0xb2, 0x5, 0x3b } };
// {0201203B-62F3-4C50-83DD-598BABD208E0}
static const GUID CORE_CHROMA =
{ 0x201203b, 0x62f3, 0x4c50, { 0x83, 0xdd, 0x59, 0x8b, 0xab, 0xd2, 0x8, 0xe0 } };
}
#endif

View file

@ -0,0 +1,813 @@
//! \file RzChromaSDKTypes.h
//! \brief Data types.
#ifndef _RZCHROMASDKTYPES_H_
#define _RZCHROMASDKTYPES_H_
#pragma once
typedef LONG RZRESULT; //!< Return result.
typedef GUID RZEFFECTID; //!< Effect Id.
typedef GUID RZDEVICEID; //!< Device Id.
typedef unsigned int RZDURATION; //!< Milliseconds.
typedef size_t RZSIZE; //!< Size.
typedef void* PRZPARAM; //!< Context sensitive pointer.
typedef DWORD RZID; //!< Generic data type for Identifier.
typedef DWORD RZCOLOR; //!< Color data. 1st byte = Red; 2nd byte = Green; 3rd byte = Blue; 4th byte = Alpha (if applicable)
namespace ChromaSDK
{
//! Event notification Window message
const UINT WM_CHROMA_EVENT = WM_APP+0x2000;
//! Chroma generic effects. Note: Not all devices supported the listed effects.
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_WAVE, //!< Wave effect (This effect type has deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect type has deprecated and should not be used).
CHROMA_BREATHING, //!< Breathing effect (This effect type has deprecated and should not be used).
CHROMA_BLINKING, //!< Blinking effect (This effect type has deprecated and should not be used).
CHROMA_REACTIVE, //!< Reactive effect (This effect type has deprecated and should not be used).
CHROMA_STATIC, //!< Static effect.
CHROMA_CUSTOM, //!< Custom effect. For mice, please see Mouse::CHROMA_CUSTOM2.
CHROMA_RESERVED, //!< Reserved
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Device info.
typedef struct DEVICE_INFO_TYPE
{
//! Device types.
enum DeviceType
{
DEVICE_KEYBOARD = 1, //!< Keyboard device.
DEVICE_MOUSE = 2, //!< Mouse device.
DEVICE_HEADSET = 3, //!< Headset device.
DEVICE_MOUSEPAD = 4, //!< Mousepad device.
DEVICE_KEYPAD = 5, //!< Keypad device.
DEVICE_SYSTEM = 6, //!< System device.
DEVICE_INVALID //!< Invalid device.
} DeviceType;
DWORD Connected; //!< Number of devices connected.
} DEVICE_INFO_TYPE;
const RZSIZE MAX_ROW = 30; //!< Maximum rows for custom effects.
const RZSIZE MAX_COLUMN = 30; //!< Maximum columns for custom effects.
//! Blinking effect (This effect type has deprecated and should not be used).
typedef struct BLINKING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(BLINKING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
COLORREF Color; //!< Blinking color
} BLINKING_EFFECT_TYPE;
//! Breathing effect (This effect type has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of ths structure. Size = sizeof(BREATHING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Breathing effect types.
enum _Type
{
ONE_COLOR = 1, //!< 1 color (Only fill Color1).
TWO_COLORS, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect (This effect type has deprecated and should not be used).
typedef struct CUSTOM_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(CUSTOM_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
RZCOLOR Color[MAX_ROW][MAX_COLUMN];
} CUSTOM_EFFECT_TYPE;
//! No effect.
typedef struct NO_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(NO_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
} NO_EFFECT_TYPE;
//! Reactive effect (This effect type has deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(REACTIVE_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect.
} REACTIVE_EFFECT_TYPE;
//! Spectrum cycling effect (This effect type has deprecated and should not be used).
typedef struct SPECTRUMCYCLING_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
} SPECTRUMCYCLING_EFFECT_TYPE;
//! Starlight effect (This effect type has deprecated and should not be used).
typedef struct STARLIGHT_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(SPECTRUMCYCLING_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Starlight effect types.
enum _Type
{
TWO_COLORS = 1, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
} STARLIGHT_EFFECT_TYPE;
//! Static effect (This effect type has deprecated and should not be used).
typedef struct STATIC_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(STATIC_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Wave effect (This effect type has deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
RZSIZE Size; //!< Size of the structure. Size = sizeof(WAVE_EFFECT_TYPE)
DWORD Param; //!< Extra parameters.
//! Direction of effect.
enum _Direction
{
DIRECTION_LEFT_TO_RIGHT = 1, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_FRONT_TO_BACK, //!< Front to back
DIRECTION_BACK_TO_FRONT //!< Back top front
} Direction;
} WAVE_EFFECT_TYPE;
//! Keyboards
namespace Keyboard
{
//! Definitions of keys.
typedef enum RZKEY
{
RZKEY_ESC = 0x0001, /*!< Esc (VK_ESCAPE) */
RZKEY_F1 = 0x0003, /*!< F1 (VK_F1) */
RZKEY_F2 = 0x0004, /*!< F2 (VK_F2) */
RZKEY_F3 = 0x0005, /*!< F3 (VK_F3) */
RZKEY_F4 = 0x0006, /*!< F4 (VK_F4) */
RZKEY_F5 = 0x0007, /*!< F5 (VK_F5) */
RZKEY_F6 = 0x0008, /*!< F6 (VK_F6) */
RZKEY_F7 = 0x0009, /*!< F7 (VK_F7) */
RZKEY_F8 = 0x000A, /*!< F8 (VK_F8) */
RZKEY_F9 = 0x000B, /*!< F9 (VK_F9) */
RZKEY_F10 = 0x000C, /*!< F10 (VK_F10) */
RZKEY_F11 = 0x000D, /*!< F11 (VK_F11) */
RZKEY_F12 = 0x000E, /*!< F12 (VK_F12) */
RZKEY_1 = 0x0102, /*!< 1 (VK_1) */
RZKEY_2 = 0x0103, /*!< 2 (VK_2) */
RZKEY_3 = 0x0104, /*!< 3 (VK_3) */
RZKEY_4 = 0x0105, /*!< 4 (VK_4) */
RZKEY_5 = 0x0106, /*!< 5 (VK_5) */
RZKEY_6 = 0x0107, /*!< 6 (VK_6) */
RZKEY_7 = 0x0108, /*!< 7 (VK_7) */
RZKEY_8 = 0x0109, /*!< 8 (VK_8) */
RZKEY_9 = 0x010A, /*!< 9 (VK_9) */
RZKEY_0 = 0x010B, /*!< 0 (VK_0) */
RZKEY_A = 0x0302, /*!< A (VK_A) */
RZKEY_B = 0x0407, /*!< B (VK_B) */
RZKEY_C = 0x0405, /*!< C (VK_C) */
RZKEY_D = 0x0304, /*!< D (VK_D) */
RZKEY_E = 0x0204, /*!< E (VK_E) */
RZKEY_F = 0x0305, /*!< F (VK_F) */
RZKEY_G = 0x0306, /*!< G (VK_G) */
RZKEY_H = 0x0307, /*!< H (VK_H) */
RZKEY_I = 0x0209, /*!< I (VK_I) */
RZKEY_J = 0x0308, /*!< J (VK_J) */
RZKEY_K = 0x0309, /*!< K (VK_K) */
RZKEY_L = 0x030A, /*!< L (VK_L) */
RZKEY_M = 0x0409, /*!< M (VK_M) */
RZKEY_N = 0x0408, /*!< N (VK_N) */
RZKEY_O = 0x020A, /*!< O (VK_O) */
RZKEY_P = 0x020B, /*!< P (VK_P) */
RZKEY_Q = 0x0202, /*!< Q (VK_Q) */
RZKEY_R = 0x0205, /*!< R (VK_R) */
RZKEY_S = 0x0303, /*!< S (VK_S) */
RZKEY_T = 0x0206, /*!< T (VK_T) */
RZKEY_U = 0x0208, /*!< U (VK_U) */
RZKEY_V = 0x0406, /*!< V (VK_V) */
RZKEY_W = 0x0203, /*!< W (VK_W) */
RZKEY_X = 0x0404, /*!< X (VK_X) */
RZKEY_Y = 0x0207, /*!< Y (VK_Y) */
RZKEY_Z = 0x0403, /*!< Z (VK_Z) */
RZKEY_NUMLOCK = 0x0112, /*!< Numlock (VK_NUMLOCK) */
RZKEY_NUMPAD0 = 0x0513, /*!< Numpad 0 (VK_NUMPAD0) */
RZKEY_NUMPAD1 = 0x0412, /*!< Numpad 1 (VK_NUMPAD1) */
RZKEY_NUMPAD2 = 0x0413, /*!< Numpad 2 (VK_NUMPAD2) */
RZKEY_NUMPAD3 = 0x0414, /*!< Numpad 3 (VK_NUMPAD3) */
RZKEY_NUMPAD4 = 0x0312, /*!< Numpad 4 (VK_NUMPAD4) */
RZKEY_NUMPAD5 = 0x0313, /*!< Numpad 5 (VK_NUMPAD5) */
RZKEY_NUMPAD6 = 0x0314, /*!< Numpad 6 (VK_NUMPAD6) */
RZKEY_NUMPAD7 = 0x0212, /*!< Numpad 7 (VK_NUMPAD7) */
RZKEY_NUMPAD8 = 0x0213, /*!< Numpad 8 (VK_NUMPAD8) */
RZKEY_NUMPAD9 = 0x0214, /*!< Numpad 9 (VK_ NUMPAD9*/
RZKEY_NUMPAD_DIVIDE = 0x0113, /*!< Divide (VK_DIVIDE) */
RZKEY_NUMPAD_MULTIPLY = 0x0114, /*!< Multiply (VK_MULTIPLY) */
RZKEY_NUMPAD_SUBTRACT = 0x0115, /*!< Subtract (VK_SUBTRACT) */
RZKEY_NUMPAD_ADD = 0x0215, /*!< Add (VK_ADD) */
RZKEY_NUMPAD_ENTER = 0x0415, /*!< Enter (VK_RETURN - Extended) */
RZKEY_NUMPAD_DECIMAL = 0x0514, /*!< Decimal (VK_DECIMAL) */
RZKEY_PRINTSCREEN = 0x000F, /*!< Print Screen (VK_PRINT) */
RZKEY_SCROLL = 0x0010, /*!< Scroll Lock (VK_SCROLL) */
RZKEY_PAUSE = 0x0011, /*!< Pause (VK_PAUSE) */
RZKEY_INSERT = 0x010F, /*!< Insert (VK_INSERT) */
RZKEY_HOME = 0x0110, /*!< Home (VK_HOME) */
RZKEY_PAGEUP = 0x0111, /*!< Page Up (VK_PRIOR) */
RZKEY_DELETE = 0x020f, /*!< Delete (VK_DELETE) */
RZKEY_END = 0x0210, /*!< End (VK_END) */
RZKEY_PAGEDOWN = 0x0211, /*!< Page Down (VK_NEXT) */
RZKEY_UP = 0x0410, /*!< Up (VK_UP) */
RZKEY_LEFT = 0x050F, /*!< Left (VK_LEFT) */
RZKEY_DOWN = 0x0510, /*!< Down (VK_DOWN) */
RZKEY_RIGHT = 0x0511, /*!< Right (VK_RIGHT) */
RZKEY_TAB = 0x0201, /*!< Tab (VK_TAB) */
RZKEY_CAPSLOCK = 0x0301, /*!< Caps Lock(VK_CAPITAL) */
RZKEY_BACKSPACE = 0x010E, /*!< Backspace (VK_BACK) */
RZKEY_ENTER = 0x030E, /*!< Enter (VK_RETURN) */
RZKEY_LCTRL = 0x0501, /*!< Left Control(VK_LCONTROL) */
RZKEY_LWIN = 0x0502, /*!< Left Window (VK_LWIN) */
RZKEY_LALT = 0x0503, /*!< Left Alt (VK_LMENU) */
RZKEY_SPACE = 0x0507, /*!< Spacebar (VK_SPACE) */
RZKEY_RALT = 0x050B, /*!< Right Alt (VK_RMENU) */
RZKEY_FN = 0x050C, /*!< Function key. */
RZKEY_RMENU = 0x050D, /*!< Right Menu (VK_APPS) */
RZKEY_RCTRL = 0x050E, /*!< Right Control (VK_RCONTROL) */
RZKEY_LSHIFT = 0x0401, /*!< Left Shift (VK_LSHIFT) */
RZKEY_RSHIFT = 0x040E, /*!< Right Shift (VK_RSHIFT) */
RZKEY_MACRO1 = 0x0100, /*!< Macro Key 1 */
RZKEY_MACRO2 = 0x0200, /*!< Macro Key 2 */
RZKEY_MACRO3 = 0x0300, /*!< Macro Key 3 */
RZKEY_MACRO4 = 0x0400, /*!< Macro Key 4 */
RZKEY_MACRO5 = 0x0500, /*!< Macro Key 5 */
RZKEY_OEM_1 = 0x0101, /*!< ~ (tilde/半角/全角) (VK_OEM_3) */
RZKEY_OEM_2 = 0x010C, /*!< -- (minus) (VK_OEM_MINUS) */
RZKEY_OEM_3 = 0x010D, /*!< = (equal) (VK_OEM_PLUS) */
RZKEY_OEM_4 = 0x020C, /*!< [ (left sqaure bracket) (VK_OEM_4) */
RZKEY_OEM_5 = 0x020D, /*!< ] (right square bracket) (VK_OEM_6) */
RZKEY_OEM_6 = 0x020E, /*!< \ (backslash) (VK_OEM_5) */
RZKEY_OEM_7 = 0x030B, /*!< ; (semi-colon) (VK_OEM_1) */
RZKEY_OEM_8 = 0x030C, /*!< ' (apostrophe) (VK_OEM_7) */
RZKEY_OEM_9 = 0x040A, /*!< , (comma) (VK_OEM_COMMA) */
RZKEY_OEM_10 = 0x040B, /*!< . (period) (VK_OEM_PERIOD) */
RZKEY_OEM_11 = 0x040C, /*!< / (forward slash) (VK_OEM_2) */
RZKEY_EUR_1 = 0x030D, /*!< "#" (VK_OEM_5) */
RZKEY_EUR_2 = 0x0402, /*!< \ (VK_OEM_102) */
RZKEY_JPN_1 = 0x0015, /*!< ¥ (0xFF) */
RZKEY_JPN_2 = 0x040D, /*!< \ (0xC1) */
RZKEY_JPN_3 = 0x0504, /*!< 無変換 (VK_OEM_PA1) */
RZKEY_JPN_4 = 0x0509, /*!< 変換 (0xFF) */
RZKEY_JPN_5 = 0x050A, /*!< ひらがな/カタカナ (0xFF) */
RZKEY_KOR_1 = 0x0015, /*!< | (0xFF) */
RZKEY_KOR_2 = 0x030D, /*!< (VK_OEM_5) */
RZKEY_KOR_3 = 0x0402, /*!< (VK_OEM_102) */
RZKEY_KOR_4 = 0x040D, /*!< (0xC1) */
RZKEY_KOR_5 = 0x0504, /*!< (VK_OEM_PA1) */
RZKEY_KOR_6 = 0x0509, /*!< 한/영 (0xFF) */
RZKEY_KOR_7 = 0x050A, /*!< (0xFF) */
RZKEY_INVALID = 0xFFFF /*!< Invalid keys. */
} RZKEY;
//! Definition of LEDs.
typedef enum RZLED
{
RZLED_LOGO = 0x0014 /*!< Razer logo */
} RZLED;
//! Maximum number of rows in a keyboard.
const RZSIZE MAX_ROW = 6;
//! Maximum number of columns in a keyboard.
const RZSIZE MAX_COLUMN = 22;
//! Maximum number of keys.
const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN;
//! Maximum number of custom effects.
const RZSIZE MAX_CUSTOM_EFFECTS = MAX_KEYS;
//! Keyboard LED layout.
const COLORREF RZKEY_LAYOUT[MAX_ROW][MAX_COLUMN] = {};
//! Chroma keyboard effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_REACTIVE, //!< Reactive effect (This effect has deprecated and should not be used).
CHROMA_STATIC, //!< Static effect.
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect has deprecated and should not be used).
CHROMA_WAVE, //!< Wave effect (This effect has deprecated and should not be used).
CHROMA_RESERVED, //!< Reserved.
CHROMA_CUSTOM_KEY, //!< Custom effects with keys.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma keyboard effects
//! Breathing effect type (This effect has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect using a matrix type.
typedef struct CUSTOM_EFFECT_TYPE
{
COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns.
} CUSTOM_EFFECT_TYPE;
//! Custom effect with keys.
typedef struct CUSTOM_KEY_EFFECT_TYPE
{
COLORREF Color[MAX_ROW][MAX_COLUMN]; //!< Grid layout. 6 rows by 22 columns.
COLORREF Key[MAX_ROW][MAX_COLUMN]; //!< Keys information. 6 rows by 22 columns. To indidate there is a key effect, OR with 0x01000000. i.e. Key[0][1] = 0x01000000 | Color;
} CUSTOM_KEY_EFFECT_TYPE;
//! Reactive effect type (This effect has deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG, //!< Long duration.
DURATION_INVALID //!< Invalid duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect
} REACTIVE_EFFECT_TYPE;
//! Starlight effect (This effect has deprecated and should not be used).
typedef struct STARLIGHT_EFFECT_TYPE
{
//! Starlight effect types.
enum _Type
{
TWO_COLORS = 1, //!< 2 colors.
RANDOM_COLORS //!< Random colors
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
//! Duration of the effect.
enum _Duration
{
DURATION_SHORT = 1, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration; //!< The time taken for the effect to fade away.
} STARLIGHT_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect
} STATIC_EFFECT_TYPE;
//! Wave effect type (This effect has deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Mice
namespace Mouse
{
//! Maximum number of custom LEDs (old definition to maintain backward compatibility).
const RZSIZE MAX_LEDS = 30;
//! Mice LED layout (old definition to maintain backward compatibility).
const RZCOLOR RZLED_LAYOUT[MAX_LEDS] = {};
//! Maximum number of rows of the virtual grid.
const RZSIZE MAX_ROW = 9;
//! Maximum number of columns of the virtual grid.
const RZSIZE MAX_COLUMN = 7;
//! Maximum number of LEDs of the virtual grid.
const RZSIZE MAX_LEDS2 = MAX_ROW * MAX_COLUMN;
//! Mice LED virtual grid layout.
const RZCOLOR RZLED_LAYOUT2[MAX_ROW][MAX_COLUMN] = {};
//! Mouse LED Id defintion (This effect type has deprecated and should not be used).
typedef enum RZLED
{
RZLED_NONE = 0, //!< No LED.
RZLED_SCROLLWHEEL = 1, //!< Scroll Wheel LED.
RZLED_LOGO = 2, //!< Logo LED.
RZLED_BACKLIGHT = 3, //!< Backlight or numpad.
RZLED_SIDE_STRIP1 = 4, //!< Side strip LED 1. (For Mamba TE, starts from top left hand)
RZLED_SIDE_STRIP2 = 5, //!< Side strip LED 2. (For Mamba TE)
RZLED_SIDE_STRIP3 = 6, //!< Side strip LED 3. (For Mamba TE)
RZLED_SIDE_STRIP4 = 7, //!< Side strip LED 4. (For Mamba TE)
RZLED_SIDE_STRIP5 = 8, //!< Side strip LED 5. (For Mamba TE)
RZLED_SIDE_STRIP6 = 9, //!< Side strip LED 6. (For Mamba TE)
RZLED_SIDE_STRIP7 = 10, //!< Side strip LED 7. (For Mamba TE)
RZLED_SIDE_STRIP8 = 11, //!< Side strip LED 8. (For Mamba TE)
RZLED_SIDE_STRIP9 = 12, //!< Side strip LED 9. (For Mamba TE)
RZLED_SIDE_STRIP10 = 13, //!< Side strip LED 10. (For Mamba TE)
RZLED_SIDE_STRIP11 = 14, //!< Side strip LED 11. (For Mamba TE)
RZLED_SIDE_STRIP12 = 15, //!< Side strip LED 12. (For Mamba TE)
RZLED_SIDE_STRIP13 = 16, //!< Side strip LED 13. (For Mamba TE)
RZLED_SIDE_STRIP14 = 17, //!< Side strip LED 14. (For Mamba TE)
RZLED_ALL = 0xFFFF
} RZLED;
//! Mouse LED Id defintion for the virtual grid.
typedef enum RZLED2
{
RZLED2_SCROLLWHEEL = 0x0203, //!< Scroll Wheel LED.
RZLED2_LOGO = 0x0703, //!< Logo LED.
RZLED2_BACKLIGHT = 0x0403, //!< Backlight LED.
RZLED2_LEFT_SIDE1 = 0x0100, //!< Left LED 1.
RZLED2_LEFT_SIDE2 = 0x0200, //!< Left LED 2.
RZLED2_LEFT_SIDE3 = 0x0300, //!< Left LED 3.
RZLED2_LEFT_SIDE4 = 0x0400, //!< Left LED 4.
RZLED2_LEFT_SIDE5 = 0x0500, //!< Left LED 5.
RZLED2_LEFT_SIDE6 = 0x0600, //!< Left LED 6.
RZLED2_LEFT_SIDE7 = 0x0700, //!< Left LED 7.
RZLED2_BOTTOM1 = 0x0801, //!< Bottom LED 1.
RZLED2_BOTTOM2 = 0x0802, //!< Bottom LED 2.
RZLED2_BOTTOM3 = 0x0803, //!< Bottom LED 3.
RZLED2_BOTTOM4 = 0x0804, //!< Bottom LED 4.
RZLED2_BOTTOM5 = 0x0805, //!< Bottom LED 5.
RZLED2_RIGHT_SIDE1 = 0x0106, //!< Right LED 1.
RZLED2_RIGHT_SIDE2 = 0x0206, //!< Right LED 2.
RZLED2_RIGHT_SIDE3 = 0x0306, //!< Right LED 3.
RZLED2_RIGHT_SIDE4 = 0x0406, //!< Right LED 4.
RZLED2_RIGHT_SIDE5 = 0x0506, //!< Right LED 5.
RZLED2_RIGHT_SIDE6 = 0x0606, //!< Right LED 6.
RZLED2_RIGHT_SIDE7 = 0x0706 //!< Right LED 7.
} RZLED2;
//! Chroma mouse effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BLINKING, //!< Blinking effect (This effect has deprecated and should not be used).
CHROMA_BREATHING, //!< Breathing effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect (old definition to maintain backward compatibility).
CHROMA_REACTIVE, //!< Reactive effect (This effect has deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect has deprecated and should not be used).
CHROMA_STATIC, //!< Static effect.
CHROMA_WAVE, //!< Wave effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM2, //!< Custom effects using a virtual grid.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Blinking effect type (This effect has deprecated and should not be used).
typedef struct BLINKING_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
COLORREF Color; //!< Color.
} BLINKING_EFFECT_TYPE;
//! Breathing effect (This effect has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
//! Breathing type.
enum Type
{
ONE_COLOR = 1, //!< 1 color (Only fill Color1).
TWO_COLORS, //!< 2 colors.
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect (This effect type has deprecated and should not be used).
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
//! Custom effect using virtual grid.
//! Indexes of the LED are defined in RZLED2.i.e. Row = HIBYTE(RZLED2_SCROLLWHEEL), Column = LOBYTE(RZLED2_SCROLLWHEEL)
typedef struct CUSTOM_EFFECT_TYPE2
{
RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE2;
//! Reactive effect (This effect has deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG //!< Long duration.
} Duration;
RZCOLOR Color; //!< Color of the effect.
} REACTIVE_EFFECT_TYPE;
//! No effect (This effect has deprecated and should not be used).
typedef struct NO_EFFECT_TYPE
{
RZLED LEDId; //!< LED Id
} NO_EFFECT_TYPE;
//! Spectrum cycling (This effect has deprecated and should not be used).
typedef struct SPECTRUMCYCLING_EFFECT_TYPE
{
RZLED LEDId; //!< LED id.
} SPECTRUMCYCLING_EFFECT_TYPE;
//! Wave effect (This effect has deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
FRONT_TO_BACK, //!< Front to back
BACK_TO_FRONT //!< Back to front
} Direction;
} WAVE_EFFECT_TYPE;
}
//! Headsets
namespace Headset
{
//! Maximum number of LEDs
const RZSIZE MAX_LEDS = 5;
//! Chroma headset effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_STATIC, //!< Static effect.
CHROMA_BREATHING, //!< Breathing effect (This effect has deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effects.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Breathing effect type (This effect has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
COLORREF Color; //!< Color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type.
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
}
//! Mousepads
namespace Mousepad
{
//! Maximum number of LEDs
const RZSIZE MAX_LEDS = 15;
//! Chroma mousepad effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect has deprecated and should not be used).
CHROMA_STATIC, //!< Static effect.
CHROMA_WAVE, //!< Wave effect (This effect has deprecated and should not be used).
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma mousepad effects
//! Breathing effect type (This effect has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type.
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< An array of colors for all the sides of the mousepad. First LED starts from top-right corner.
//!< LED 0-4 right side, 5-9 bottom side, 10-14 left side.
} CUSTOM_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
COLORREF Color; //!< Color of the effect
} STATIC_EFFECT_TYPE;
//! Wave effect type
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Keypads
namespace Keypad
{
//! Maximum number of rows.
const RZSIZE MAX_ROW = 4;
//! Maximum number of columns.
const RZSIZE MAX_COLUMN = 5;
//! Total number of keys.
const RZSIZE MAX_KEYS = MAX_ROW * MAX_COLUMN;
//! Chroma keypad effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_BREATHING, //!< Breathing effect (This effect has deprecated and should not be used).
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_REACTIVE, //!< Reactive effect (This effect has deprecated and should not be used).
CHROMA_SPECTRUMCYCLING, //!< Spectrum cycling effect (This effect has deprecated and should not be used).
CHROMA_STATIC, //!< Static effect.
CHROMA_WAVE, //!< Wave effect (This effect has deprecated and should not be used).
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
// Chroma keypad effects
//! Breathing effect type (This effect has deprecated and should not be used).
typedef struct BREATHING_EFFECT_TYPE
{
//! Breathing effects.
enum Type
{
TWO_COLORS = 1, //!< 2 colors
RANDOM_COLORS, //!< Random colors
INVALID //!< Invalid type
} Type;
COLORREF Color1; //!< First color.
COLORREF Color2; //!< Second color.
} BREATHING_EFFECT_TYPE;
//! Custom effect type
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_ROW][MAX_COLUMN]; //!< Custom effect.
//!< For Razer Tartarus Chroma only Color[0] is valid. Use index '0' to change the keypad color.
} CUSTOM_EFFECT_TYPE;
//! Reactive effect type (This effect has deprecated and should not be used).
typedef struct REACTIVE_EFFECT_TYPE
{
//! Duration of the effect.
enum Duration
{
DURATION_NONE=0, //!< No duration.
DURATION_SHORT, //!< Short duration.
DURATION_MEDIUM, //!< Medium duration.
DURATION_LONG, //!< Long duration.
DURATION_INVALID //!< Invalid duration.
} Duration; //!< The time taken for the effect to fade away.
COLORREF Color; //!< Color of the effect
} REACTIVE_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
RZCOLOR Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
//! Wave effect type (This effect has deprecated and should not be used).
typedef struct WAVE_EFFECT_TYPE
{
//! Direction of the wave effect.
enum Direction
{
DIRECTION_NONE=0, //!< No direction.
DIRECTION_LEFT_TO_RIGHT, //!< Left to right.
DIRECTION_RIGHT_TO_LEFT, //!< Right to left.
DIRECTION_INVALID //!< Invalid direction.
} Direction; //!< Direction of the wave.
} WAVE_EFFECT_TYPE;
}
//! Chroma Link
namespace ChromaLink
{
//! Maximum number of elements/LEDs
const RZSIZE MAX_LEDS = 5;
//! Chroma Link effect types
typedef enum EFFECT_TYPE
{
CHROMA_NONE = 0, //!< No effect.
CHROMA_CUSTOM, //!< Custom effect.
CHROMA_STATIC, //!< Static effect.
CHROMA_INVALID //!< Invalid effect.
} EFFECT_TYPE;
//! Custom effect type
typedef struct CUSTOM_EFFECT_TYPE
{
RZCOLOR Color[MAX_LEDS]; //!< Array of colors.
} CUSTOM_EFFECT_TYPE;
//! Static effect type
typedef struct STATIC_EFFECT_TYPE
{
RZCOLOR Color; //!< Color of the effect.
} STATIC_EFFECT_TYPE;
}
}
#endif

46
chromasdk/RzErrors.h Normal file
View file

@ -0,0 +1,46 @@
//! \file RzErrors.h
//! \brief Error codes for Chroma SDK. If the error is not defined here, refer to WinError.h from the Windows SDK.
#ifndef _RZERRORS_H_
#define _RZERRORS_H_
#pragma once
// Error codes
//! Invalid
#define RZRESULT_INVALID -1L
//! Success
#define RZRESULT_SUCCESS 0L
//! Access denied
#define RZRESULT_ACCESS_DENIED 5L
//! Invalid handle
#define RZRESULT_INVALID_HANDLE 6L
//! Not supported
#define RZRESULT_NOT_SUPPORTED 50L
//! Invalid parameter.
#define RZRESULT_INVALID_PARAMETER 87L
//! The service has not been started
#define RZRESULT_SERVICE_NOT_ACTIVE 1062L
//! Cannot start more than one instance of the specified program.
#define RZRESULT_SINGLE_INSTANCE_APP 1152L
//! Device not connected
#define RZRESULT_DEVICE_NOT_CONNECTED 1167L
//! Element not found.
#define RZRESULT_NOT_FOUND 1168L
//! Request aborted.
#define RZRESULT_REQUEST_ABORTED 1235L
//! An attempt was made to perform an initialization operation when initialization has already been completed.
#define RZRESULT_ALREADY_INITIALIZED 1247L
//! Resource not available or disabled
#define RZRESULT_RESOURCE_DISABLED 4309L
//! Device not available or supported
#define RZRESULT_DEVICE_NOT_AVAILABLE 4319L
//! The group or resource is not in the correct state to perform the requested operation.
#define RZRESULT_NOT_VALID_STATE 5023L
//! No more items
#define RZRESULT_NO_MORE_ITEMS 259L
//! General failure.
#define RZRESULT_FAILED 2147500037L
#endif

View file

@ -156,7 +156,12 @@ HEADERS += \
src/rgssad.h \ src/rgssad.h \
src/sdl-util.h \ src/sdl-util.h \
src/oneshot.h \ src/oneshot.h \
src/pipe.h src/pipe.h \
chromasdk/FrameController.h \
chromasdk/ChromaSDKImpl.h \
chromasdk/RzChromaSDKDefines.h \
chromasdk/RzChromaSDKTypes.h \
chromasdk/RzErrors.h
SOURCES += \ SOURCES += \
src/main.cpp \ src/main.cpp \
@ -197,7 +202,10 @@ SOURCES += \
src/vorbissource.cpp \ src/vorbissource.cpp \
src/oneshot.cpp \ src/oneshot.cpp \
src/screen.cpp \ src/screen.cpp \
binding-mri/journal-binding.cpp binding-mri/journal-binding.cpp \
chromasdk/FrameController.cpp \
chromasdk/ChromaSdkImpl.cpp \
binding-mri/chroma-binding.cpp
STEAM { STEAM {
HEADERS += src/steam.h steamshim/steamshim_child.h HEADERS += src/steam.h steamshim/steamshim_child.h