Invité Posté(e) le 2 février 2016 Signaler Posté(e) le 2 février 2016 Possédant des périphériques Razer équipés du module de couleurs "Chroma", je me suis intéressé à l'API, disponible sur le site officielle de la marque, pour faire des tests et tenter d’interagir avec les périphériques. Grâce à leur doc doxygen et quelques "snippets" de code, j'ai réussi à changer la couleur de mon clavier comme ceci: L'appli dans la démo est extrêmement simple, j'ai du faire ça en 10 minutes mais cela montre le potentiel que l'on peut faire (pouvoir régler dynamiquement la couleur avec des sliders, ou inventer des effets customs...) Le SDK de Chroma est écrit en C++, le mieux serait donc de coder votre appli avec le même langage. J'ai malgré tout réussi à trouver des projets sur le net où des devs indépendants ont transcrit le SDK sur d'autres langages (genre java il me semble). Pour les devs, on peut le télécharger ici: http://developer.razerzone.com/chroma/download/ Voici le code que je vous propose, pour initialiser l'API et un exemple de fonction pour appliquer une couleur: .cpp #include "stdafx.h" CChroma* g_pChroma; CChroma::CChroma() { bInitialized = false; hModule = NULL; initFn = NULL; unInitFn = NULL; createEffectFn = NULL; createKeyboardEffectFn = NULL; createMouseEffectFn = NULL; } CChroma::~CChroma() { if (hModule) { unInitFn = (UNINIT)GetProcAddress(hModule, "UnInit"); if (unInitFn) { unInitFn(); } FreeLibrary(hModule); hModule = NULL; } } bool CChroma::Init() { do { hModule = LoadLibrary(CHROMASDKDLL); Sleep(200); } while (!hModule); if (hModule) { initFn = (INIT)GetProcAddress(hModule, "Init"); if (initFn) { RZRESULT result = initFn(); if (result == RZRESULT_SUCCESS) { createEffectFn = (CREATEEFFECT)GetProcAddress(hModule, "CreateEffect"); createKeyboardEffectFn = (CREATEKEYBOARDEFFECT)GetProcAddress(hModule, "CreateKeyboardEffect"); createMouseEffectFn = (CREATEMOUSEEFFECT)GetProcAddress(hModule, "CreateMouseEffect"); queryDeviceFn = (QUERYDEVICE)GetProcAddress(hModule, "QueryDevice"); if (createEffectFn && createKeyboardEffectFn && createMouseEffectFn && queryDeviceFn) { printf("init: ok \n"); bInitialized = true; return true; } else return false; } } } return false; } bool CChroma::ApplyEffect(COLORREF dwColor) { if (!bInitialized) return false; RZEFFECTID Frame0 = GUID_NULL; ChromaSDK::Keyboard::CUSTOM_EFFECT_TYPE DeathStalkerEffect; for (int i = 0; i < ChromaSDK::Keyboard::MAX_ROW; i++) { for (int j = 0; j < ChromaSDK::Keyboard::MAX_COLUMN; j++) { DeathStalkerEffect.Color[i][j] = dwColor; //COLORREF_RGBA(255, 0, 0, 255); } } createEffectFn(ChromaSDK::DEATHSTALKER_CHROMA, ChromaSDK::CHROMA_CUSTOM, &DeathStalkerEffect, NULL); createKeyboardEffectFn(ChromaSDK::Keyboard::CHROMA_CUSTOM, &DeathStalkerEffect, &Frame0); printf("Created \n"); return true; } .h #pragma once // Inclusion du chroma sdk #include "ChromaSDK/RzChromaSDKDefines.h" #include "ChromaSDK/RzChromaSDKTypes.h" #include "ChromaSDK/RzErrors.h" using namespace ChromaSDK; 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(*QUERYDEVICE)(RZDEVICEID DeviceId, ChromaSDK::DEVICE_INFO_TYPE &DeviceInfo); #ifdef _WIN64 #define CHROMASDKDLL "RzChromaSDK64.dll" #else #define CHROMASDKDLL "RzChromaSDK.dll" #endif #define COLORREF_ARGB(a,r,g,b) ((COLORREF)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) #define COLORREF_RGBA(r,g,b,a) ((COLORREF)((((r)&0xff)<<24)|(((g)&0xff)<<16)|(((b)&0xff)<<8)|((a)&0xff))) #define COLORANGE COLORREF_RGBA(255, 100, 000, 255) #define COLYELLOW COLORREF_RGBA(255, 255, 0, 255) #define COLPURPLE COLORREF_RGBA(55, 25, 128, 255) #define COLRED COLORREF_RGBA(255, 0, 0, 255) #define COLGREEN COLORREF_RGBA(0, 255, 0, 255) #define COLBLUE COLORREF_RGBA(0, 0, 255, 255) #define COLBLACK COLORREF_RGBA(0, 0, 0, 255) #define COLWHITE COLORREF_RGBA(255, 255, 255, 255) #define COLGREY COLORREF_RGBA(47, 79, 79, 255) class CChroma { public: CChroma(); ~CChroma(); bool Init(); bool ApplyEffect(COLORREF dwColor); private: HMODULE hModule; INIT initFn; UNINIT unInitFn; CREATEEFFECT createEffectFn; CREATEKEYBOARDEFFECT createKeyboardEffectFn; CREATEMOUSEEFFECT createMouseEffectFn; QUERYDEVICE queryDeviceFn; bool bInitialized; }; extern CChroma* g_pChroma; La fonction Init() va chercher dans la .dll de Razer, les fonctions principales et les "stock" dans des variables qui font office de pointeurs. On peut par la suite, les appeler si besoin. Dans le SDK de Razer, dans le cas d'un clavier, un effet est modélisé par une structure contenant une matrice de couleur, représentant le clavier. //! 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; Il suffit alors d'instancier un CUSTOM_EFFECT_TYPE, remplir la matrice Color, créer l'effet avec la fonction createEffect() comme ceci: createEffectFn(ChromaSDK::DEATHSTALKER_CHROMA, ChromaSDK::CHROMA_CUSTOM, &DeathStalkerEffect, NULL); puis l'appliquer au clavier avec la fonction createKeyboardEffect() createKeyboardEffectFn(ChromaSDK::Keyboard::CHROMA_CUSTOM, &DeathStalkerEffect, &Frame0); Dans votre main, il faut instancier un objet CChroma comme ceci: g_pChroma = new CChroma(); if (!g_pChroma->Init()) return 1; Après, il suffit d'appeler la fonction ApplyEffect(dwColor) pour changer la couleur du clavier DeathStalker par exemple (dans mon code). Pour appliquer la couleur sur votre souris, ou le tapis ou le casque ou tout autre modèle, il faut regarder dans la doc comment init un effet pour tel ou tel modèle. Comprendra qui pourra
Minstery Posté(e) le 2 février 2016 Signaler Posté(e) le 2 février 2016 Il y a 3 heures, Nitrix a dit : Comprendra qui pourra J'ai bien rigolé ^^ Perso, j'ai juste un casque razer qui n'a aucune led pour changer de couleur donc ça ne va pas trop me servir mais c'est super de partager ça avec ceux qui en ont ^^
darkbibni Posté(e) le 17 février 2016 Signaler Posté(e) le 17 février 2016 Le 2/2/2016à23:35, Gameuse Minstery a dit : J'ai bien rigolé ^^ Perso, j'ai juste un casque razer qui n'a aucune led pour changer de couleur donc ça ne va pas trop me servir mais c'est super de partager ça avec ceux qui en ont ^^ Ben suffit de lire un peu la doc est le tour est joué =D Dommage que j'ai qu'un casque SteelSeries ^^ (même si je suis sûr qu'en cherchant un peu j'aurai une API)
Invité Posté(e) le 18 février 2016 Signaler Posté(e) le 18 février 2016 Le 17/2/2016à01:39, darkbibni a dit : Ben suffit de lire un peu la doc est le tour est joué =D Dommage que j'ai qu'un casque SteelSeries ^^ (même si je suis sûr qu'en cherchant un peu j'aurai une API) Faut quand même s'y connaitre en C++ obviously et au sujet de la WinAPI pour savoir comment aller chercher un module et ou
darkbibni Posté(e) le 18 février 2016 Signaler Posté(e) le 18 février 2016 il y a 7 minutes, Nitrix a dit : Faut quand même s'y connaitre en C++ obviously et au sujet de la WinAPI pour savoir comment aller chercher un module et ou Je m'y connais un tout petit peu en C++ et j'ai touché à la winApi pour les sockets ça doit être la même chose ^^ ? Mais pour l'instant ça ne m'intéresse pas tant que ça ^^'
Invité Posté(e) le 18 février 2016 Signaler Posté(e) le 18 février 2016 Le 18/2/2016à13:11, darkbibni a dit : Je m'y connais un tout petit peu en C++ et j'ai touché à la winApi pour les sockets ça doit être la même chose ^^ ? Mais pour l'instant ça ne m'intéresse pas tant que ça ^^' Ouais c'est un aspect (réseau) de la winApi
Messages recommandés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant