diff --git a/RGBController/RGBController_HyperXKeyboard.cpp b/RGBController/RGBController_HyperXKeyboard.cpp index e1204683..85ecbf8a 100644 --- a/RGBController/RGBController_HyperXKeyboard.cpp +++ b/RGBController/RGBController_HyperXKeyboard.cpp @@ -9,6 +9,41 @@ #include "RGBController_HyperXKeyboard.h" +//Include thread libraries for Windows or Linux +#ifdef WIN32 +#include +#else +#include "pthread.h" +#include "unistd.h" +#endif + +//Thread functions have different types in Windows and Linux +#ifdef WIN32 +#define THREAD static void +#define THREADRETURN +#else +#define THREAD static void* +#define THREADRETURN return(NULL); +#endif + +#ifdef WIN32 +#include +#else +#include + +static void Sleep(unsigned int milliseconds) +{ + usleep(1000 * milliseconds); +} +#endif + +THREAD keepalive_thread(void *param) +{ + RGBController_HyperXKeyboard* controller = static_cast(param); + controller->KeepaliveThread(); + THREADRETURN +} + static const char* zone_names[] = { "Keyboard", @@ -223,6 +258,19 @@ RGBController_HyperXKeyboard::RGBController_HyperXKeyboard(HyperXKeyboardControl zones.push_back(new_zone); } + + /*-----------------------------------------------------*\ + | The Corsair Lighting Node Pro requires a packet within| + | 20 seconds of sending the lighting change in order | + | to not revert back into rainbow mode. Start a thread | + | to continuously send a keepalive packet every 5s | + \*-----------------------------------------------------*/ +#ifdef WIN32 + _beginthread(keepalive_thread, 0, this); +#else + pthread_t thread; + pthread_create(&thread, NULL, &keepalive_thread, this); +#endif } RGBController_HyperXKeyboard::~RGBController_HyperXKeyboard() @@ -269,3 +317,15 @@ void RGBController_HyperXKeyboard::UpdateMode() hyperx->SetMode(modes[active_mode].value, modes[active_mode].direction, modes[active_mode].speed, temp_colors); } } + +void RGBController_HyperXKeyboard::KeepaliveThread() +{ + while(1) + { + if(active_mode == 0) + { + hyperx->SetLEDsDirect(colors); + } + Sleep(100); + } +} diff --git a/RGBController/RGBController_HyperXKeyboard.h b/RGBController/RGBController_HyperXKeyboard.h index 7837d8ca..5a936cdc 100644 --- a/RGBController/RGBController_HyperXKeyboard.h +++ b/RGBController/RGBController_HyperXKeyboard.h @@ -23,6 +23,8 @@ public: void SetCustomMode(); void UpdateMode(); + void KeepaliveThread(); + private: HyperXKeyboardController* hyperx; };