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:
Adam Honse 2020-09-28 23:22:01 -05:00
parent 4f43e85139
commit 8ead2f9c73
19 changed files with 171 additions and 56 deletions

View file

@ -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()

View file

@ -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()

View file

@ -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()

View file

@ -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()
{
/*-----------------------------------------*\

View file

@ -57,6 +57,7 @@ class RGBController_E131 : public RGBController
{
public:
RGBController_E131(std::vector<E131Device> device_list);
~RGBController_E131();
void SetupZones();

View file

@ -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()

View file

@ -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)
{

View file

@ -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;
};

View file

@ -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()
{
/*---------------------------------------------------------*\

View file

@ -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;
};
};

View file

@ -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()
{
/*---------------------------------------------------------*\

View file

@ -40,6 +40,7 @@ public:
public:
RGBController_OpenRazer(std::string dev_path);
~RGBController_OpenRazer();
void SetupZones();

View file

@ -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()
{
/*---------------------------------------------------------*\

View file

@ -98,6 +98,7 @@ public:
public:
RGBController_OpenRazer(device * razer_device, device_fn_type* razer_functions);
~RGBController_OpenRazer();
void SetupZones();

View file

@ -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()

View file

@ -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;

View file

@ -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;
};
};

View file

@ -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()

View file

@ -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 |
\*-------------------------------------------------*/