Files
CuboBmsTool/configurationpage.cpp
2022-08-01 21:53:36 +03:00

536 lines
17 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "configurationpage.h"
#include "ui_configurationpage.h"
#include <QScrollBar>
#include "connectandenterpage.h"
ConfigurationPage::ConfigurationPage(QWidget *parent) :
QFrame(parent),
ui(new Ui::ConfigurationPage)
{
ui->setupUi(this);
connect( ui->pbLinkSerialNumber , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosSerialNumber ); } );
connect( ui->pbLinkConfiguration , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosConfiguration ); } );
connect( ui->pbLinkSoc , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosSoc ); } );
connect( ui->pbLinkRestrictions , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosRestrictions ); } );
connect( ui->pbLinkCellsConfiguration , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosCellsConfiguration ); } );
connect( ui->pbLinkBalancingConfiguration, &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosBalancingConfiguration); } );
connect( ui->pbLinkOutputsSetting , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosOutputsSetting ); } );
connect( ui->pbLinkClaibrateZero , &QPushButton::clicked, this, [=]() { setPositionInPixelsToScrollTo(PosClaibrateZero ); } );
connect( ui->pbReadDefaultSettingsFromFile , &QPushButton::clicked, this, &ConfigurationPage::onPbReadDefaultSettingsFromFileClicked);
connect( ui->pbReadCurrentSettingsFromBms , &QPushButton::clicked, this, &ConfigurationPage::onPbReadCurrentSettingsFromBmsClicked);
connect( ui->pbWriteCurrentValuesToBms , &QPushButton::clicked, this, &ConfigurationPage::onPbWriteCurrentValuesToBmsClicked);
connect( ui->pbWriteToNonVolatileBmsMemory , &QPushButton::clicked, this, &ConfigurationPage::onPbWriteToNonVolatileBmsMemoryClicked);
connect(ui->bmsSettings, &BmsSettings::showStatusInfo, this, &ConfigurationPage::showStatusInfo);
connect(ui->bmsSettings, &BmsSettings::showMessageDialog, this, &ConfigurationPage::showMessageDialog);
connect(ui->bmsSettings, &BmsSettings::sendMessage, this, &ConfigurationPage::sendMessage);
connect(this, &ConfigurationPage::loadParams, ui->bmsSettings, &BmsSettings::onLoadParams);
initTimerForStatusBar();
initTimerForProgressBar();
initTimerForOneSecondDelayAfterButtonClick();
checkIfButtonTextFitsInButton();
}
BMSInterface *ConfigurationPage::bms() const
{
return mDieBieMS;
}
void ConfigurationPage::setDieBieMS(BMSInterface *dieBieMS)
{
mDieBieMS = dieBieMS;
ui->bmsSettings->setDieBieMS(mDieBieMS);
// SEND_STATUS_INFO //
connect(mDieBieMS, &BMSInterface::statusMessage, this, &ConfigurationPage::showStatusInfo);
connect(mDieBieMS->bmsConfig(), &ConfigParams::updateRequested, ui->bmsSettings, &BmsSettings::onBmsconfUpdateRequested);
connect(mDieBieMS->bmsConfig(), &ConfigParams::updateRequestDefault, ui->bmsSettings, &BmsSettings::onBmsconfUpdateRequestDefault);
connect(mDieBieMS->bmsConfig(), &ConfigParams::updated, ui->bmsSettings, &BmsSettings::onBmsconfUpdated);
connect(mDieBieMS->bmsConfig(), &ConfigParams::updated, this, &ConfigurationPage::onBmsconfUpdatedOrStored);
connect(mDieBieMS->bmsConfig(), &ConfigParams::stored, ui->bmsSettings, &BmsSettings::onBmsconfStored);
connect(mDieBieMS->bmsConfig(), &ConfigParams::stored, this, &ConfigurationPage::onBmsconfUpdatedOrStored);
//connect(mDieBieMS->bmsConfig(), &ConfigParams::updated, this, &ConfigurationPage::bmsconfUpdated);
//void ConfigParams::requestUpdate() => emit updateRequested();
//void ConfigParams::requestUpdateDefault() => emit updateRequestDefault();
//void ConfigParams::updateDone() => emit updated();
//void ConfigParams::storingDone() => emit stored();
//void sigBmsconfUpdateRequested();
//void sigBmsconfUpdateRequestDefault();
//void sigBmsconfUpdated();
//void sigBmsconfStored();
//connect(ui->bmsSettings, &BmsSettings::sendMessage, this, &ConfigurationPage::sendMessage);
//connect(this, &ConfigurationPage::loadParams, ui->bmsSettings, &BmsSettings::onLoadParams);
/*
connect(mPacket, (dataToSend(QByteArray&)),this, (packetDataToSend(QByteArray&)));
connect(mPacket, (packetReceived(QByteArray&)),this, (packetReceived(QByteArray&)));
connect(mCommands, (dataToSend(QByteArray&)),this, (cmdDataToSend(QByteArray&)));
connect(mCommands, (fwVersionReceived(int,int,QString,QByteArray)),this, SLOT(fwVersionReceived(int,int,QString,QByteArray)));
connect(mCommands, (ackReceived(QString)), this, (ackReceived(QString)));
connect(mbmsConfig, (updated()), this, (bmsconfUpdated()));
connect(mbmsConfig, (stored()), this, (bmsconfStored()));
connect(mTimer, (timeout()), this, (timerSlot()));
*/
}
ConfigurationPage::~ConfigurationPage()
{
delete ui;
}
void ConfigurationPage::checkIfButtonTextFitsInButton()
{
int textWidth = QFontMetrics(ui->pbWriteCurrentValuesToBms->font()).width(ui->pbWriteCurrentValuesToBms->text());
int btnWidth = ui->pbWriteCurrentValuesToBms->width();
if(btnWidth <= textWidth)
ui->pbWriteCurrentValuesToBms->setText(tr("Записать текущие значения\nв BMS"));
}
void ConfigurationPage::setPositionInPixelsToScrollTo(int positionInPixelsToScrollTo)
{
if(positionInPixelsToScrollTo != PosSerialNumber)
positionInPixelsToScrollTo -= 15;
ui->scrollAreaBmsSettings->verticalScrollBar()->setValue(positionInPixelsToScrollTo);
}
//void ConfigurationPage::bmsconfUpdated()
//{
// //mMcConfRead = false;
//}
#if 0
void ConfigurationPage::onTimerSlot()
{
// Update status label
if (mStatusInfoTime) {
mStatusInfoTime--;
if (!mStatusInfoTime) {
//mStatusLabel->setStyleSheet(qApp->styleSheet());
}
}
/*else {
QString str = mDieBieMS->getConnectedPortName();
if (str != mStatusLabel->text()) {
mStatusLabel->setText(mDieBieMS->getConnectedPortName());
static QString statusLast = "";
if (str != statusLast) {
mPageDebugPrint->printConsole("Status: " + str + "<br>");
statusLast = str;
}
}
}*/
/* // CAN fwd
if (ui->actionCanFwd->isChecked() != mDieBieMS->commands()->getSendCan()) {
ui->actionCanFwd->setChecked(mDieBieMS->commands()->getSendCan());
}
// RT data only every 5 iterations
if (ui->actionRtData->isChecked()) {
static int values_cnt = 0;
static int cells_cnt = 0;
values_cnt++;
if (values_cnt >= 5) {
values_cnt = 0;
mDieBieMS->commands()->getValues();
}
cells_cnt++;
if (cells_cnt >= 20) {
cells_cnt = 0;
mDieBieMS->commands()->getCells();
}
}
// Send alive command once every 10 iterations
if (ui->actionSendAlive->isChecked()) {
static int alive_cnt = 0;
alive_cnt++;
if (alive_cnt >= 10) {
alive_cnt = 0;
mDieBieMS->commands()->sendAlive();
}
}
*/
// Read configuration it isn't read since starting VESC Tool
if (mDieBieMS->isPortConnected()) {
static int conf_cnt = 0;
conf_cnt++;
if (conf_cnt >= 20) {
conf_cnt = 0;
if (!mMcConfRead) {
mDieBieMS->commands()->getBMSconf();
mMcConfRead = true;
}
}
}
/* // Disable all data streaming when uploading firmware
if (mDieBieMS->commands()->getFirmwareUploadProgress() > 0.1) {
ui->actionSendAlive->setChecked(false);
ui->actionRtData->setChecked(false);
}
// Run startup checks
static bool has_run_start_checks = false;
if (!has_run_start_checks) {
has_run_start_checks = true;
checkUdev();
Utility::checkVersion(mDieBieMS);
}
*/
}
#endif
/*
{
// connect(mTimer, SIGNAL(timeout()),this, SLOT(timerSlot()));
connect(mDieBieMS, &BMSInterface::statusMessage, this, &ConnectAndEnterPage::showStatusInfo);
connect(mDieBieMS, &BMSInterface::messageDialog, this, &ConnectAndEnterPage::showMessageDialog);
connect(mDieBieMS, &BMSInterface::serialPortNotWritable, this, &ConnectAndEnterPage::serialPortNotWritable);
connect(mDieBieMS->commands(), &Commands::bmsConfigCheckResult, this, &ConnectAndEnterPage::bmsConfigCheckResult);
// connect(ui->actionAboutQt, SIGNAL(triggered(bool)),qApp, SLOT(aboutQt()));
// Remove the menu with the option to hide the toolbar
// ui->mainToolBar->setContextMenuPolicy(Qt::PreventContextMenu);
mDieBieMS->bmsConfig()->loadParamsXml("://res/config.xml");
mDieBieMS->infoConfig()->loadParamsXml("://res/info.xml");
// reloadPages();
connect(mDieBieMS->bmsConfig(), SIGNAL(updated()), this, SLOT(bmsconfUpdated()));
}
//*/
void ConfigurationPage::onTimerSlot()
{
// Update status label
if (mStatusInfoTime) {
mStatusInfoTime--;
if (!mStatusInfoTime) {
// clear Status Label
ui->lbStatus->setText("");
ui->lbStatus->setStyleSheet(qApp->styleSheet());
}
}
}
void ConfigurationPage::showStatusInfo(QString info, bool isGood)
{
if (isGood) {
ui->lbStatus->setStyleSheet("QLabel { background-color : lightgreen; color : black; }");
mPageDebugPrint->printConsole("Status: " + info + "<br>");
} else {
ui->lbStatus->setStyleSheet("QLabel { background-color : red; color : black; }");
mPageDebugPrint->printConsole("<font color=\"red\">Status: " + info + "</font><br>");
}
mStatusInfoTime = 160;
ui->lbStatus->setText(info);
}
// pbLoadSettingsFromFile
//void ConfigurationPage::on_pbLoadSettingsFromFile_clicked()
//{
// bool NOTHING_IS_CONNECTED_HERE_ACCORDING_SPECIFICATION_FROM_CUSTOMER = true;
//}
//// pbLoadCurrentSettingsFromBms
//void ConfigurationPage::on_pbLoadCurrentSettingsFromBms_clicked()
//{
// // Загрузить настройки из файла
// // Загрузить текущие настройки\nиз BMS
// // actionReadBMScconf
// mDieBieMS->commands()->getBMSconf();
// // ? // mDieBieMS->commands()->getBMSconfDefault();
//}
//// pbWriteToNonVolatileBmsMemory
//void ConfigurationPage::on_pbWriteToNonVolatileBmsMemory_clicked()
//{
// // Записать в энергонезависимую\nпамять BMS
// // actionStoreBMScconf
// mDieBieMS->commands()->storeBMSConfig();
//}
// pbWriteCurrentValuesToBms
////////////////////////////////////////////////////////////
/*
start 0 12 = Default that is not in bms it's in somekind of real offline file (we do NOT have connection to bms but there parameters show up somehow)
connect 8 8 Config updated with default params not from file, but from default params of bms
deflt bms edit | bms edit
^ - 8 8 7 | 8 8 read bms conf
-> - 8 7 7 | 7 8 read default 8 is defaul - that was on the start
v - 8 8 7 | 7 7 write bms config
S - 8 ? ? | ? ? save currect config from bms into outside file to the flash card
before | after
*/
void ConfigurationPage::onPbReadDefaultSettingsFromFileClicked()
{
if(mIsOneSedondPassed)
{
mOneSecondWait->start();
mIsOneSedondPassed = false;
if(mIsOperationFinished)
{
mIsOperationFinished = false;
onStartPercents();
// bms edit | bms edit
//-> - 7 7 | 7 8 read default 8 is defaul - that was on the start
// Загрузить настройки\nпо умолчанию
mDieBieMS->commands()->getBMSconfDefault();
}
}
}
void ConfigurationPage::onPbReadCurrentSettingsFromBmsClicked()
{
if(mIsOneSedondPassed)
{
mOneSecondWait->start();
mIsOneSedondPassed = false;
if(mIsOperationFinished)
{
mIsOperationFinished = false;
onStartPercents();
// bms edit | bms edit
//^ - 7 8 | 7 7 read bms conf
mDieBieMS->commands()->getBMSconf();
}
}
}
//// pbLoadCurrentSettingsFromBms
void ConfigurationPage::onPbWriteCurrentValuesToBmsClicked()
{
if(mIsOneSedondPassed)
{
mOneSecondWait->start();
mIsOneSedondPassed = false;
if(mIsOperationFinished)
{
mIsOperationFinished = false;
onStartPercents();
// Записать текущие значения в BMS
// actionWriteBMScconf
mDieBieMS->commands()->setBMSconf();
}
}
}
//// pbWriteToNonVolatileBmsMemory
void ConfigurationPage::onPbWriteToNonVolatileBmsMemoryClicked()
{
if(mIsOneSedondPassed)
{
mOneSecondWait->start();
mIsOneSedondPassed = false;
if(mIsOperationFinished)
{
mIsOperationFinished = false;
onStartPercents();
// Записать в энергонезависимую\nпамять BMS
// actionStoreBMScconf
mDieBieMS->commands()->storeBMSConfig();
}
}
}
/*
void ConfigurationPage::onPbReadDefaultSettingsFromFileClicked()
{
// bms edit | bms edit
//-> - 7 7 | 7 8 read default 8 is defaul - that was on the start
// Загрузить настройки\nпо умолчанию
mDieBieMS->commands()->getBMSconfDefault();
}
void ConfigurationPage::onPbReadCurrentSettingsFromBmsClicked()
{
// bms edit | bms edit
//^ - 7 8 | 7 7 read bms conf
mDieBieMS->commands()->getBMSconf();
}
//// pbLoadCurrentSettingsFromBms
void ConfigurationPage::onPbWriteCurrentValuesToBmsClicked()
{
// Записать текущие значения в BMS
// actionWriteBMScconf
mDieBieMS->commands()->setBMSconf();
}
//// pbWriteToNonVolatileBmsMemory
void ConfigurationPage::onPbWriteToNonVolatileBmsMemoryClicked()
{
// Записать в энергонезависимую\nпамять BMS
// actionStoreBMScconf
mDieBieMS->commands()->storeBMSConfig();
}
*/
//
//
//
void ConfigurationPage::onBmsconfUpdatedOrStored()
{
mIsOperationFinished = true;
//onFinishPercents();
}
void ConfigurationPage::initTimerForStatusBar()
{
mTimer = new QTimer(this);
connect(mTimer, &QTimer::timeout, this, &ConfigurationPage::onTimerSlot);
mTimer->start(20);
}
void ConfigurationPage::initTimerForProgressBar()
{
mTimerProgress = new QTimer(this);
mTimerProgress->setSingleShot(false);
mTimerProgress->setInterval(100);
connect(mTimerProgress, &QTimer::timeout, this, &ConfigurationPage::processPercents);
// timer->start(1000);
ui->progressBar->setValue(0);
}
void ConfigurationPage::initTimerForOneSecondDelayAfterButtonClick()
{
mOneSecondWait = new QTimer(this);
mOneSecondWait->setSingleShot(true);
mOneSecondWait->setInterval(10000);
connect(mOneSecondWait, &QTimer::timeout, this, [this]()
{
mIsOneSedondPassed = true;
});
mIsOneSedondPassed = true;
mIsOperationFinished = true;
}
void ConfigurationPage::processPercents()
{
mSeconds++;
int percents = mSeconds * (100.0 / mMaxSecs);
ui->progressBar->setValue(percents);
auto val = ui->progressBar->value();
if (val >= 0 && val < 50)
{
ui->progressBar->setStyleSheet("QProgressBar::chunk { background-color:lime; };");
}
else if (val >= 50 && val < 85)
{
if(mIsOperationFinished)
{
mIsOneSedondPassed = true;
mIsOperationFinished = true;
onStopPercents();
}
ui->progressBar->setStyleSheet("QProgressBar::chunk { background-color:yellow; };");
}
else if (val >= 85 && val < 95)
{
ui->progressBar->setStyleSheet("QProgressBar::chunk { background-color:red; };");
}
else if (val >= 95)
{
ui->progressBar->setStyleSheet("QProgressBar::chunk { background-color:red; };");
mIsOneSedondPassed = true;
mIsOperationFinished = true;
onStopPercents();
showStatusInfo("ERROR! SOMETHING WENT WRONG", false);
}
//if (ui->progressBar->value() == 100)
// onFinishPercents();
}
void ConfigurationPage::onStartPercents()
{
onStopPercents();
mTimerProgress->start();
}
void ConfigurationPage::onStopPercents()
{
mSeconds = 0;
mTimerProgress->stop();
ui->progressBar->setValue(0);
//mIsOneSedondPassed = true;
//mIsOperationFinished = true;
}
void ConfigurationPage::onFinishPercents()
{
mTimerProgress->stop();
mSeconds = 0;
ui->progressBar->setValue(100);
}