Profile save and load test

This commit is contained in:
Adam Honse
2020-02-25 20:43:35 -06:00
parent f844c2fb07
commit 25c829ac2a
7 changed files with 146 additions and 2 deletions

View File

@@ -310,7 +310,7 @@ void DetectRGBFusion2Controllers(std::vector<RGBController*> &rgb_controllers);
* Detect and populate RGB Controllers vector *
* *
\******************************************************************************************/
#include "RGBController_Dummy.h"
void DetectRGBControllers(void)
{
DetectI2CBusses();

View File

@@ -26,6 +26,7 @@ unsigned char * RGBController::GetDeviceDescription()
unsigned short *zone_map_rows = new unsigned short[num_zones];
data_size += sizeof(data_size);
data_size += sizeof(device_type);
data_size += name_len + sizeof(name_len);
data_size += description_len + sizeof(description_len);
@@ -94,6 +95,12 @@ unsigned char * RGBController::GetDeviceDescription()
\*---------------------------------------------------------*/
unsigned char *data_buf = new unsigned char[data_size];
/*---------------------------------------------------------*\
| Copy in data size |
\*---------------------------------------------------------*/
memcpy(&data_buf[data_ptr], &data_size, sizeof(data_size));
data_ptr += sizeof(data_size);
/*---------------------------------------------------------*\
| Copy in type |
\*---------------------------------------------------------*/
@@ -357,6 +364,8 @@ void RGBController::ReadDeviceDescription(unsigned char* data_buf)
{
unsigned int data_ptr = 0;
data_ptr += sizeof(unsigned int);
/*---------------------------------------------------------*\
| Copy in type |
\*---------------------------------------------------------*/

View File

@@ -613,6 +613,15 @@ void Ui::OpenRGBDevicePage::SetDevice(unsigned char red, unsigned char green, un
on_SetDeviceButton_clicked();
}
void Ui::OpenRGBDevicePage::UpdateDevice()
{
ui->ModeBox->blockSignals(true);
ui->ModeBox->setCurrentIndex(device->active_mode);
ui->ModeBox->blockSignals(false);
UpdateModeUi();
UpdateMode();
}
void Ui::OpenRGBDevicePage::SetCustomMode()
{
device->SetCustomMode();

View File

@@ -20,6 +20,7 @@ public:
void SetDevice(unsigned char red, unsigned char green, unsigned char blue);
void SetCustomMode();
void UpdateDevice();
void UpdateMode();
void UpdateModeUi();

View File

@@ -1,7 +1,9 @@
#include <fstream>
#include "OpenRGBDialog2.h"
#include "OpenRGBDevicePage.h"
#include "OpenRGBDeviceInfoPage.h"
#include "OpenRGBSystemInfoPage.h"
#include "RGBController_Dummy.h"
#include <QLabel>
#include <QTabBar>
@@ -276,4 +278,111 @@ void OpenRGBDialog2::on_ShowHide()
{
hide();
}
}
}
void Ui::OpenRGBDialog2::on_ButtonSaveProfile_clicked()
{
for(int controller_index = 0; controller_index < controllers.size(); controller_index++)
{
char filename[128];
snprintf(filename, 128, "controller_%d.bin", controller_index);
std::ofstream controller_file(filename, std::ios::out | std::ios::binary);
unsigned char *controller_data = controllers[controller_index]->GetDeviceDescription();
unsigned int controller_size;
memcpy(&controller_size, controller_data, sizeof(controller_size));
controller_file.write((const char *)controller_data, controller_size);
controller_file.close();
}
}
void Ui::OpenRGBDialog2::on_ButtonLoadProfile_clicked()
{
for(int controller_index = 0; controller_index < controllers.size(); controller_index++)
{
char filename[128];
snprintf(filename, 128, "controller_%d.bin", controller_index);
std::ifstream controller_file(filename, std::ios::in | std::ios::binary);
unsigned int controller_size;
controller_file.read((char *)&controller_size, sizeof(controller_size));
unsigned char *controller_data = new unsigned char[controller_size];
controller_file.seekg(0);
controller_file.read((char *)controller_data, controller_size);
RGBController_Dummy temp_controller;
temp_controller.ReadDeviceDescription(controller_data);
delete[] controller_data;
RGBController *controller_ptr = controllers[controller_index];
/*---------------------------------------------------------*\
| Test if saved controller data matches this controller |
\*---------------------------------------------------------*/
if((temp_controller.type == controller_ptr->type )
&&(temp_controller.name == controller_ptr->name )
&&(temp_controller.description == controller_ptr->description)
&&(temp_controller.version == controller_ptr->version )
&&(temp_controller.serial == controller_ptr->serial )
&&(temp_controller.location == controller_ptr->location ))
{
/*---------------------------------------------------------*\
| Update all modes |
\*---------------------------------------------------------*/
if(temp_controller.modes.size() == controller_ptr->modes.size())
{
for(int mode_index = 0; mode_index < temp_controller.modes.size(); mode_index++)
{
if((temp_controller.modes[mode_index].name == controller_ptr->modes[mode_index].name )
&&(temp_controller.modes[mode_index].value == controller_ptr->modes[mode_index].value )
&&(temp_controller.modes[mode_index].flags == controller_ptr->modes[mode_index].flags )
&&(temp_controller.modes[mode_index].speed_min == controller_ptr->modes[mode_index].speed_min )
&&(temp_controller.modes[mode_index].speed_max == controller_ptr->modes[mode_index].speed_max )
&&(temp_controller.modes[mode_index].colors_min == controller_ptr->modes[mode_index].colors_min)
&&(temp_controller.modes[mode_index].colors_max == controller_ptr->modes[mode_index].colors_max))
{
controller_ptr->modes[mode_index].speed = temp_controller.modes[mode_index].speed;
controller_ptr->modes[mode_index].direction = temp_controller.modes[mode_index].direction;
controller_ptr->modes[mode_index].color_mode = temp_controller.modes[mode_index].color_mode;
controller_ptr->modes[mode_index].colors.resize(temp_controller.modes[mode_index].colors.size());
for(int mode_color_index = 0; mode_color_index < temp_controller.modes[mode_index].colors.size(); mode_color_index++)
{
controller_ptr->modes[mode_index].colors[mode_color_index] = temp_controller.modes[mode_index].colors[mode_color_index];
}
}
}
controller_ptr->active_mode = temp_controller.active_mode;
}
/*---------------------------------------------------------*\
| Update all colors |
\*---------------------------------------------------------*/
if(temp_controller.colors.size() == controller_ptr->colors.size())
{
for(int color_index = 0; color_index < temp_controller.colors.size(); color_index++)
{
controller_ptr->colors[color_index] = temp_controller.colors[color_index];
}
}
}
}
for(int device = 0; device < ui->DevicesTabBar->count(); device++)
{
qobject_cast<OpenRGBDevicePage *>(ui->DevicesTabBar->widget(device))->UpdateDevice();
}
}

View File

@@ -48,6 +48,8 @@ private slots:
void on_QuickWhite();
void on_SetAllDevices(unsigned char red, unsigned char green, unsigned char blue);
void on_ShowHide();
void on_ButtonSaveProfile_clicked();
void on_ButtonLoadProfile_clicked();
};
#endif // OPENRGBDIALOG2_H

View File

@@ -16,6 +16,13 @@
<widget class="QWidget" name="centralWidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QPushButton" name="ButtonSaveProfile">
<property name="text">
<string>Save Profile</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QTabWidget" name="MainTabBar">
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
@@ -79,6 +86,13 @@
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="ButtonLoadProfile">
<property name="text">
<string>Load Profile</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>