SXXXXXXX_PyDownloadFwViaSRIO/_OLD/Vecchia_app/FpgaBeamMeUpBuilder/mainwindow.cpp
2026-01-22 17:10:05 +01:00

283 lines
7.7 KiB
C++

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostInfo>
#include <QSettings>
#include <QDebug>
#include "fpgaflashxml.h"
#include "QG/qzip.h"
#include <QMessageBox>
#include <QDebug>
#define APP_NAME "FpgaBeamMuUpBuilder"
#define APP_FILE_INI "./grifo_beamupbuilder.ini"
#define APP_XML_TEMP "./info.xml"
#define ERROR_STR "Error into process"
#define FILE_ZIP_PREFIX "FLASH_FPGA"
#define MODEL_1 "GOLDEN"
#define MODEL_2 "USER"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QCoreApplication::setOrganizationName("Leonardo");
QCoreApplication::setOrganizationDomain("Leonardo.com");
QHostInfo hi=QHostInfo::fromName(QHostInfo::localHostName());
setWindowTitle(QString("Host: %1").arg(hi.hostName()));
QStyle* st=QApplication::style();
ui->tbFilePrimary->setIcon(st->standardIcon(QStyle::SP_FileIcon) );
ui->tbFileSecondary->setIcon(st->standardIcon(QStyle::SP_FileIcon) );
ui->btnCreateZipFile->setIcon(st->standardIcon(QStyle::SP_MediaPlay) );
fileSelector.setObjectName("GrifoBeamUpBuilderFileSelector");
fileSelector.setOption(QFileDialog::ReadOnly, true);
fileSelector.setViewMode(QFileDialog::Detail);
fileSelector.setNameFilters(
QStringList()<<"Binary (*.bin)");
connect(ui->tbFilePrimary, &QToolButton::clicked, this,
[this](bool)
{
QString tmp=fileSelector.directory().absolutePath();
fileSelector.setOption(QFileDialog::ReadOnly, true);
fileSelector.setFileMode(QFileDialog::AnyFile);
fileSelector.setDirectory(tmp);
if (fileSelector.exec())
{
ui->leFilePrimary->setText(fileSelector.selectedFiles().at(0));
}
}
);
connect(ui->tbFileSecondary, &QToolButton::clicked, this,
[this](bool)
{
QString tmp=fileSelector.directory().absolutePath();
fileSelector.setOption(QFileDialog::ReadOnly, true);
fileSelector.setFileMode(QFileDialog::AnyFile);
fileSelector.setDirectory(tmp);
if (fileSelector.exec())
{
ui->leFileSecondary->setText(fileSelector.selectedFiles().at(0));
}
}
);
progressBar = new QProgressBar(ui->statusBar);
progressBar->setAlignment(Qt::AlignRight);
progressBar->setMaximumSize(180, 19);
ui->statusBar->addPermanentWidget(progressBar);
progressBar->setValue(0);
progressBar->hide();
flashTargets = flashTargetClass::instance();
if (flashTargets->readTargets())
{
QStringList list = flashTargets->getInfoLists();
ui->cbTgt->addItems(list);
}
else
{
qDebug()<<"Error read targets file config!";
}
readConfig();
}
MainWindow::~MainWindow()
{
writeConfig();
delete ui;
}
void MainWindow::readConfig()
{
//general configuration of app
QSettings s(APP_FILE_INI, QSettings::IniFormat);
if ( s.status() == QSettings::NoError )
{
s.beginGroup("general");
ui->cbTgt->setCurrentIndex(s.value("model", 0).toInt());
ui->cbArea->setCurrentIndex(s.value("area", 1).toInt());
//ui->cbModel->setCurrentIndex(s.value("model", 0).toInt());
ui->leFilePrimary->setText(s.value("primary", "").toString());
ui->leFileSecondary->setText(s.value("secondary", "").toString());
lastOutputFolder = s.value("lastOutputFolder", "").toString();
s.endGroup();
}
}
void MainWindow:: writeConfig()
{
QSettings s(APP_FILE_INI, QSettings::IniFormat);
if ( s.status() == QSettings::NoError )
{
s.beginGroup("general");
s.setValue("model", ui->cbTgt->currentIndex() );
s.setValue("area", ui->cbArea->currentIndex() );
s.setValue("primary",ui->leFilePrimary->text() );
s.setValue("secondary",ui->leFileSecondary->text() );
s.setValue("lastOutputFolder", lastOutputFolder);
s.endGroup();
s.sync();
}
}
bool addFileToZip(QZipWriter* _zip, QString _file)
{
QFile file(_file);
if (!file.exists())
{
return false;
}
QFileInfo finfo(_file);
file.open(QIODevice::ReadOnly);
_zip->addFile(finfo.fileName(), file.readAll());
file.close();
return true;
}
void MainWindow::on_btnCreateZipFile_clicked()
{
QFileDialog *dialog = new QFileDialog();
dialog->setObjectName("Select output folder for zip file");
dialog->setDirectory(lastOutputFolder);
dialog->setViewMode(QFileDialog::List);
dialog->setFileMode(QFileDialog::DirectoryOnly);
//dialog->setOption(QFileDialog::ShowDirsOnly);
if (!dialog->exec())
{
return;
}
lastOutputFolder = dialog->selectedFiles().at(0);
progressBar->setValue(0);
progressBar->show();
ui->statusBar->showMessage("Create file in progress...");
if (!QFile::exists(ui->leFilePrimary->text()))
{
qCritical()<<"File primary is not exists!";
QMessageBox::information(0, ERROR_STR, "File primary is not exists!");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
if (!QFile::exists(ui->leFileSecondary->text()))
{
qCritical()<<"File secondary is not exists!";
QMessageBox::information(0, ERROR_STR, "File secondary is not exists!");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
//extract tgt info
targetItem tgt = flashTargets->getTarget(ui->cbTgt->currentIndex());
fpagFlashXmlClass fpagFlashXml;
fpagFlashXml.setTarget(tgt.idTgt);
fpagFlashXml.setPrimary(ui->leFilePrimary->text());
fpagFlashXml.setSecondary(ui->leFileSecondary->text());
fpagFlashXml.setArea(ui->cbArea->currentIndex()); //only user flash region
fpagFlashXml.setXmlFile(APP_XML_TEMP);
if (!fpagFlashXml.writeXML())
{
qCritical()<<"XML not writed!";
QMessageBox::information(0, ERROR_STR, "XML not writed!");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
else
{
qInfo()<<"XML is OK!";
}
//filename for zip
//QString fileNameZip = "file_zip.zip";
QString flash_area;
if (ui->cbArea->currentIndex()==0)
{
flash_area = MODEL_1;
}
else
{
flash_area = MODEL_2;
}
QString fileNameZip = QString("%1_%2_%3.zip").arg(tgt.filePrefix).arg(flash_area).arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
QZipWriter zip(lastOutputFolder+"/"+fileNameZip);
//zip.setCompressionPolicy(CompressionPolicy::NeverCompress);
progressBar->setValue(30);
if (!addFileToZip(&zip, ui->leFilePrimary->text()))
{
qCritical()<<"Primary NOT zipped";
QMessageBox::information(0, ERROR_STR, "Primary NOT zipped");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
progressBar->setValue(60);
if (!addFileToZip(&zip, ui->leFileSecondary->text()))
{
qCritical()<<"Secondary NOT zipped";
QMessageBox::information(0, ERROR_STR, "Secondary NOT zipped");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
progressBar->setValue(90);
if (!addFileToZip(&zip, APP_XML_TEMP))
{
qCritical()<<"XMP NOT zipped";
QMessageBox::information(0, ERROR_STR, "XMP NOT zipped");
ui->statusBar->showMessage("");
progressBar->hide();
return;
}
zip.close();
progressBar->setValue(100);
QMessageBox::information(0, APP_NAME, QString("File zip created: \n %1").arg(lastOutputFolder+"/"+fileNameZip));
ui->statusBar->showMessage("");
progressBar->setValue(0);
progressBar->hide();
}