From 8ead2f9c73f5e41698cf2e1392a3b1fc7590a904 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 28 Sep 2020 23:22:01 -0500 Subject: [PATCH] Call the callbacks when redetection starts, move matrix map deletion to individual controllers to avoid attempting to delete const pointers --- RGBController/RGBController.cpp | 16 ------ .../RGBController_CorsairPeripheral.cpp | 11 ++++- RGBController/RGBController_DuckyKeyboard.cpp | 11 ++++- RGBController/RGBController_E131.cpp | 19 +++++++ RGBController/RGBController_E131.h | 1 + .../RGBController_HyperXAlloyOrigins.cpp | 11 ++++- .../RGBController_HyperXKeyboard.cpp | 49 +++++++------------ RGBController/RGBController_HyperXKeyboard.h | 7 ++- RGBController/RGBController_LogitechG810.cpp | 14 ++++++ RGBController/RGBController_LogitechG810.h | 3 +- RGBController/RGBController_OpenRazer.cpp | 19 +++++++ RGBController/RGBController_OpenRazer.h | 1 + .../RGBController_OpenRazerWindows.cpp | 19 +++++++ .../RGBController_OpenRazerWindows.h | 1 + RGBController/RGBController_PoseidonZRGB.cpp | 11 ++++- RGBController/RGBController_RedragonK556.cpp | 14 ++++++ RGBController/RGBController_RedragonK556.h | 3 +- .../RGBController_SteelSeriesApex.cpp | 11 ++++- ResourceManager.cpp | 6 +++ 19 files changed, 171 insertions(+), 56 deletions(-) diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index d97a24b4..6c29a95c 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -14,22 +14,6 @@ RGBController::~RGBController() DeviceThreadRunning = false; DeviceCallThread->join(); delete DeviceCallThread; - - /*---------------------------------------------------------*\ - | Delete the matrix map | - \*---------------------------------------------------------*/ - for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) - { - if(zones[zone_index].matrix_map != NULL) - { - if(zones[zone_index].matrix_map->map != NULL) - { - delete[] zones[zone_index].matrix_map->map; - } - - delete zones[zone_index].matrix_map; - } - } } unsigned char * RGBController::GetDeviceDescription() diff --git a/RGBController/RGBController_CorsairPeripheral.cpp b/RGBController/RGBController_CorsairPeripheral.cpp index 5cdaec9a..4baea209 100644 --- a/RGBController/RGBController_CorsairPeripheral.cpp +++ b/RGBController/RGBController_CorsairPeripheral.cpp @@ -575,7 +575,16 @@ RGBController_CorsairPeripheral::RGBController_CorsairPeripheral(CorsairPeripher RGBController_CorsairPeripheral::~RGBController_CorsairPeripheral() { - + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_CorsairPeripheral::SetupZones() diff --git a/RGBController/RGBController_DuckyKeyboard.cpp b/RGBController/RGBController_DuckyKeyboard.cpp index c6ad3771..5d620298 100644 --- a/RGBController/RGBController_DuckyKeyboard.cpp +++ b/RGBController/RGBController_DuckyKeyboard.cpp @@ -191,7 +191,16 @@ RGBController_DuckyKeyboard::RGBController_DuckyKeyboard(DuckyKeyboardController RGBController_DuckyKeyboard::~RGBController_DuckyKeyboard() { - + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_DuckyKeyboard::SetupZones() diff --git a/RGBController/RGBController_E131.cpp b/RGBController/RGBController_E131.cpp index 0fd81b3d..31d55de1 100644 --- a/RGBController/RGBController_E131.cpp +++ b/RGBController/RGBController_E131.cpp @@ -184,6 +184,25 @@ RGBController_E131::RGBController_E131(std::vector device_list) } } +RGBController_E131::~RGBController_E131() +{ + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + if(zones[zone_index].matrix_map->map != NULL) + { + delete zones[zone_index].matrix_map->map; + } + + delete zones[zone_index].matrix_map; + } + } +} + void RGBController_E131::SetupZones() { /*-----------------------------------------*\ diff --git a/RGBController/RGBController_E131.h b/RGBController/RGBController_E131.h index f149d93a..b4d6ed6c 100644 --- a/RGBController/RGBController_E131.h +++ b/RGBController/RGBController_E131.h @@ -57,6 +57,7 @@ class RGBController_E131 : public RGBController { public: RGBController_E131(std::vector device_list); + ~RGBController_E131(); void SetupZones(); diff --git a/RGBController/RGBController_HyperXAlloyOrigins.cpp b/RGBController/RGBController_HyperXAlloyOrigins.cpp index 8fabf307..1dc2d1be 100644 --- a/RGBController/RGBController_HyperXAlloyOrigins.cpp +++ b/RGBController/RGBController_HyperXAlloyOrigins.cpp @@ -224,7 +224,16 @@ RGBController_HyperXAlloyOrigins::RGBController_HyperXAlloyOrigins(HyperXAlloyOr RGBController_HyperXAlloyOrigins::~RGBController_HyperXAlloyOrigins() { - + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_HyperXAlloyOrigins::SetupZones() diff --git a/RGBController/RGBController_HyperXKeyboard.cpp b/RGBController/RGBController_HyperXKeyboard.cpp index 88a61d75..b4c9a390 100644 --- a/RGBController/RGBController_HyperXKeyboard.cpp +++ b/RGBController/RGBController_HyperXKeyboard.cpp @@ -9,32 +9,8 @@ #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 - using namespace std::chrono_literals; -THREAD keepalive_thread(void *param) -{ - RGBController_HyperXKeyboard* controller = static_cast(param); - controller->KeepaliveThread(); - THREADRETURN -} - //0xFFFFFFFF indicates an unused entry in matrix #define NA 0xFFFFFFFF @@ -253,17 +229,26 @@ RGBController_HyperXKeyboard::RGBController_HyperXKeyboard(HyperXKeyboardControl | 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 + KeepaliveThreadRunning = true; + KeepaliveThread = new std::thread(&RGBController_HyperXKeyboard::KeepaliveThreadFunction, this); } RGBController_HyperXKeyboard::~RGBController_HyperXKeyboard() { + KeepaliveThreadRunning = false; + KeepaliveThread->join(); + delete KeepaliveThread; + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_HyperXKeyboard::SetupZones() @@ -357,9 +342,9 @@ void RGBController_HyperXKeyboard::DeviceUpdateMode() } } -void RGBController_HyperXKeyboard::KeepaliveThread() +void RGBController_HyperXKeyboard::KeepaliveThreadFunction() { - while(1) + while(KeepaliveThreadRunning) { if(active_mode == 0) { diff --git a/RGBController/RGBController_HyperXKeyboard.h b/RGBController/RGBController_HyperXKeyboard.h index ba99237e..1b9c3364 100644 --- a/RGBController/RGBController_HyperXKeyboard.h +++ b/RGBController/RGBController_HyperXKeyboard.h @@ -8,7 +8,9 @@ \*-----------------------------------------*/ #pragma once +#include #include +#include #include "RGBController.h" #include "HyperXKeyboardController.h" @@ -30,10 +32,13 @@ public: void SetCustomMode(); void DeviceUpdateMode(); - void KeepaliveThread(); + void KeepaliveThreadFunction(); private: HyperXKeyboardController* hyperx; + std::atomic KeepaliveThreadRunning; + std::thread* KeepaliveThread; + std::chrono::time_point last_update_time; }; diff --git a/RGBController/RGBController_LogitechG810.cpp b/RGBController/RGBController_LogitechG810.cpp index 7f70c3ca..8ec062fd 100644 --- a/RGBController/RGBController_LogitechG810.cpp +++ b/RGBController/RGBController_LogitechG810.cpp @@ -223,6 +223,20 @@ RGBController_LogitechG810::RGBController_LogitechG810(LogitechG810Controller* l SetupZones(); } +RGBController_LogitechG810::~RGBController_LogitechG810() +{ + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } +} + void RGBController_LogitechG810::SetupZones() { /*---------------------------------------------------------*\ diff --git a/RGBController/RGBController_LogitechG810.h b/RGBController/RGBController_LogitechG810.h index 69276d85..a58b93c0 100644 --- a/RGBController/RGBController_LogitechG810.h +++ b/RGBController/RGBController_LogitechG810.h @@ -15,6 +15,7 @@ class RGBController_LogitechG810 : public RGBController { public: RGBController_LogitechG810(LogitechG810Controller* logitech_ptr); + ~RGBController_LogitechG810(); void SetupZones(); @@ -29,4 +30,4 @@ public: private: LogitechG810Controller* logitech; -}; \ No newline at end of file +}; diff --git a/RGBController/RGBController_OpenRazer.cpp b/RGBController/RGBController_OpenRazer.cpp index e211628d..f41e1db9 100644 --- a/RGBController/RGBController_OpenRazer.cpp +++ b/RGBController/RGBController_OpenRazer.cpp @@ -371,6 +371,25 @@ RGBController_OpenRazer::RGBController_OpenRazer(std::string dev_path) } } +RGBController_OpenRazer::~RGBController_OpenRazer() +{ + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + if(zones[zone_index].matrix_map->map != NULL) + { + delete zones[zone_index].matrix_map->map; + } + + delete zones[zone_index].matrix_map; + } + } +} + void RGBController_OpenRazer::SetupZones() { /*---------------------------------------------------------*\ diff --git a/RGBController/RGBController_OpenRazer.h b/RGBController/RGBController_OpenRazer.h index 2ce7f22d..b3e019ba 100644 --- a/RGBController/RGBController_OpenRazer.h +++ b/RGBController/RGBController_OpenRazer.h @@ -40,6 +40,7 @@ public: public: RGBController_OpenRazer(std::string dev_path); + ~RGBController_OpenRazer(); void SetupZones(); diff --git a/RGBController/RGBController_OpenRazerWindows.cpp b/RGBController/RGBController_OpenRazerWindows.cpp index 529d98e8..7b2df9c7 100644 --- a/RGBController/RGBController_OpenRazerWindows.cpp +++ b/RGBController/RGBController_OpenRazerWindows.cpp @@ -318,6 +318,25 @@ RGBController_OpenRazer::RGBController_OpenRazer(device * razer_device, device_f } +RGBController_OpenRazer::~RGBController_OpenRazer() +{ + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + if(zones[zone_index].matrix_map->map != NULL) + { + delete zones[zone_index].matrix_map->map; + } + + delete zones[zone_index].matrix_map; + } + } +} + void RGBController_OpenRazer::SetupZones() { /*---------------------------------------------------------*\ diff --git a/RGBController/RGBController_OpenRazerWindows.h b/RGBController/RGBController_OpenRazerWindows.h index 33e9239d..be7eea2e 100644 --- a/RGBController/RGBController_OpenRazerWindows.h +++ b/RGBController/RGBController_OpenRazerWindows.h @@ -98,6 +98,7 @@ public: public: RGBController_OpenRazer(device * razer_device, device_fn_type* razer_functions); + ~RGBController_OpenRazer(); void SetupZones(); diff --git a/RGBController/RGBController_PoseidonZRGB.cpp b/RGBController/RGBController_PoseidonZRGB.cpp index 9f4cdda1..6e8e2cac 100644 --- a/RGBController/RGBController_PoseidonZRGB.cpp +++ b/RGBController/RGBController_PoseidonZRGB.cpp @@ -195,7 +195,16 @@ RGBController_PoseidonZRGB::RGBController_PoseidonZRGB(PoseidonZRGBController* p RGBController_PoseidonZRGB::~RGBController_PoseidonZRGB() { - + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_PoseidonZRGB::SetupZones() diff --git a/RGBController/RGBController_RedragonK556.cpp b/RGBController/RGBController_RedragonK556.cpp index ae0a40b3..94108058 100644 --- a/RGBController/RGBController_RedragonK556.cpp +++ b/RGBController/RGBController_RedragonK556.cpp @@ -205,6 +205,20 @@ RGBController_RedragonK556::RGBController_RedragonK556(RedragonK556Controller* r SetupZones(); } +RGBController_RedragonK556::~RGBController_RedragonK556() +{ + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } +} + void RGBController_RedragonK556::SetupZones() { zone new_zone; diff --git a/RGBController/RGBController_RedragonK556.h b/RGBController/RGBController_RedragonK556.h index 6db78a10..d49d43c9 100644 --- a/RGBController/RGBController_RedragonK556.h +++ b/RGBController/RGBController_RedragonK556.h @@ -15,6 +15,7 @@ class RGBController_RedragonK556 : public RGBController { public: RGBController_RedragonK556(RedragonK556Controller* redragon_ptr); + ~RGBController_RedragonK556(); void SetupZones(); @@ -29,4 +30,4 @@ public: private: RedragonK556Controller* redragon; -}; \ No newline at end of file +}; diff --git a/RGBController/RGBController_SteelSeriesApex.cpp b/RGBController/RGBController_SteelSeriesApex.cpp index 76054d67..f992323e 100644 --- a/RGBController/RGBController_SteelSeriesApex.cpp +++ b/RGBController/RGBController_SteelSeriesApex.cpp @@ -284,7 +284,16 @@ RGBController_SteelSeriesApex::RGBController_SteelSeriesApex(SteelSeriesApexCont RGBController_SteelSeriesApex::~RGBController_SteelSeriesApex() { - + /*---------------------------------------------------------*\ + | Delete the matrix map | + \*---------------------------------------------------------*/ + for(unsigned int zone_index = 0; zone_index < zones.size(); zone_index++) + { + if(zones[zone_index].matrix_map != NULL) + { + delete zones[zone_index].matrix_map; + } + } } void RGBController_SteelSeriesApex::SetupZones() diff --git a/ResourceManager.cpp b/ResourceManager.cpp index a075b60b..721a83bb 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -196,8 +196,14 @@ void ResourceManager::DetectDevices() | we shall remove it first | \*-------------------------------------------------*/ detection_percent = 0; + detection_string = ""; + + DetectionProgressChanged(); + Cleanup(); + DeviceListChanged(); + /*-------------------------------------------------*\ | Start the device detection thread | \*-------------------------------------------------*/