Call the callbacks when redetection starts, move matrix map deletion to individual controllers to avoid attempting to delete const pointers
This commit is contained in:
parent
4f43e85139
commit
8ead2f9c73
19 changed files with 171 additions and 56 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -184,6 +184,25 @@ RGBController_E131::RGBController_E131(std::vector<E131Device> 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()
|
||||
{
|
||||
/*-----------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ class RGBController_E131 : public RGBController
|
|||
{
|
||||
public:
|
||||
RGBController_E131(std::vector<E131Device> device_list);
|
||||
~RGBController_E131();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -9,32 +9,8 @@
|
|||
|
||||
#include "RGBController_HyperXKeyboard.h"
|
||||
|
||||
//Include thread libraries for Windows or Linux
|
||||
#ifdef WIN32
|
||||
#include <process.h>
|
||||
#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<RGBController_HyperXKeyboard*>(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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@
|
|||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "HyperXKeyboardController.h"
|
||||
|
|
@ -30,10 +32,13 @@ public:
|
|||
void SetCustomMode();
|
||||
void DeviceUpdateMode();
|
||||
|
||||
void KeepaliveThread();
|
||||
void KeepaliveThreadFunction();
|
||||
|
||||
private:
|
||||
HyperXKeyboardController* hyperx;
|
||||
|
||||
std::atomic<bool> KeepaliveThreadRunning;
|
||||
std::thread* KeepaliveThread;
|
||||
|
||||
std::chrono::time_point<std::chrono::steady_clock> last_update_time;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ public:
|
|||
|
||||
public:
|
||||
RGBController_OpenRazer(std::string dev_path);
|
||||
~RGBController_OpenRazer();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ public:
|
|||
|
||||
public:
|
||||
RGBController_OpenRazer(device * razer_device, device_fn_type* razer_functions);
|
||||
~RGBController_OpenRazer();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
\*-------------------------------------------------*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue