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

440 lines
13 KiB
C++

#include "historydb.h"
#include <QDIR>
#include <QSettings>
#include <QApplication>
#include "mydebug.h"
// cursor pointer used to ensure a single instance of the class.
dbHistory* dbHistory::s_instance = 0;
/* This function is called to create an instance of the class.
* Calling the constructor publicly is not allowed. The constructor
* is private and is only called by this Instance function.
*/
dbHistory* dbHistory::instance()
{
// Only allow one instance of class to be generated.
if (!s_instance)
s_instance = new dbHistory;
return s_instance;
}
dbHistory::dbHistory()
{
history_folder = QApplication::applicationDirPath() + "/" DB_FOLDER_NAME;
history_filedb = history_folder+'/'+DB_FILE_NAME;
}
//***********************************************************************
// read history from a specific folder
// Input parameters:
// Returns:
//***********************************************************************
bool dbHistory::readHistory()
{
return true;
}
//***********************************************************************
// add new entry into db file
// Input parameters: _new = new entry info
// Returns: true = ok
// false = error
//***********************************************************************
bool dbHistory::addToDB(db_item_t _new)
{
unsigned int num_entry = listDBEntry.count();
QSettings settings( history_filedb, QSettings::IniFormat);
if ( settings.status() == QSettings::NoError )
{
//aggiorna il contatore
settings.beginGroup("general");
settings.setValue("num_entry", num_entry);
settings.endGroup();
QString section = QString("entry%1").arg(num_entry-1);
settings.beginGroup(section);
settings.setValue("error", _new.error);
settings.setValue("name", _new.name);
settings.setValue("path", _new.path);
settings.setValue("status", _new.status);
settings.setValue("timestamp", _new.timestamp);
settings.setValue("where", _new.where);
settings.setValue("flash_address",_new.flash_address);
settings.setValue("srio_conn", _new.srio_conn);
settings.setValue("spi", _new.spi);
settings.endGroup();
settings.sync();
if(settings.status() == QSettings::NoError)
return true;
}
return false;
}
//***********************************************************************
// add new file to history
// Input parameters:
// Returns:
//***********************************************************************
bool dbHistory::addNewFile(QString _file,
db_error_t _error,
QString _where,
db_status_t _status,
QString _address,
QString _srio,
unsigned int _spi)
{
if (!QDir(history_folder).exists())
{
MyDebug.logMsg(type_log_info,
origin_msg_history,
"History folder not present, create new one.");
if (!QDir().mkdir(history_folder))
{
MyDebug.logMsg(type_log_error,
origin_msg_history,
QString("ERROR create history folder %1").arg(history_folder));
return false;
}
}
db_item_t entry_info;
entry_info.error = _error;
entry_info.name = QFileInfo(_file).completeBaseName();
QDir d = QFileInfo(_file).absoluteDir();
entry_info.path=d.absolutePath();
entry_info.status = _status;
entry_info.timestamp = QDateTime::currentDateTime().toString("yyyy/MM/dd-hh:mm:ss");
entry_info.where = _where;
entry_info.flash_address = _address;
entry_info.srio_conn = _srio;
entry_info.spi = _spi;
entry_info.errorStr = "";
listDBEntry.append(entry_info);
if (!addToDB(entry_info))
{
MyDebug.logMsg(type_log_error,
origin_msg_history,
QString("ERROR to save new entry %1").arg(entry_info.name));
return false;
}
return true;
}
//***********************************************************************
// add new file to history
// Input parameters:
// Returns:
//***********************************************************************
void dbHistory::setParam(QString _host)
{
hostname = _host;
}
//***********************************************************************
// refresh list
// Input parameters:
// Returns:
//***********************************************************************
void dbHistory::refreshList()
{
listDBEntry.clear();
QSettings settings( history_filedb, QSettings::IniFormat);
if ( settings.status() == QSettings::NoError )
{
settings.beginGroup("general");
int num_entry = settings.value("num_entry", 0).toInt();
settings.endGroup();
if (num_entry!=0)
{
QString section;
for (int i = 0; i<num_entry; i++)
{
section = QString("entry%1").arg(i);
if (settings.childGroups().contains(section))
{
db_item_t entry_info;
settings.beginGroup(section);
entry_info.error = db_error_t(settings.value("error", 0).toInt());
entry_info.name = settings.value("name", "").toString();
entry_info.path = settings.value("path", "").toString();
entry_info.status = db_status_t(settings.value("status", "").toInt());
entry_info.timestamp = settings.value("timestamp", "").toString();
entry_info.where = settings.value("where", "").toString();
entry_info.flash_address = settings.value("flash_address", "").toString();
entry_info.srio_conn = settings.value("srio_conn", "").toString();
entry_info.spi = settings.value("spi", 0).toInt();
entry_info.errorStr = settings.value("error_str", "").toString();
settings.endGroup();
listDBEntry.append(entry_info);
}
}
}
}
}
//***********************************************************************
// getNumEntry
// Input parameters:
// Returns: number of entry present into db
//***********************************************************************
int dbHistory::getNumEntry()
{
return listDBEntry.count();
}
//***********************************************************************
// getEntry
// Input parameters: idx = index of entry to retrive
// Returns: entry in position idx
// itemZero if idx is wrong
//***********************************************************************
db_item_t dbHistory::getEntry(int idx)
{
db_item_t itemZero;
if (idx<listDBEntry.count())
{
itemZero = listDBEntry[idx];
}
return itemZero;
}
//***********************************************************************
// changeStatus at last entry
// Input parameters: newStatus
// Returns: true if ok in change status
// false if error in change status
//***********************************************************************
bool dbHistory::changeStatusLast(db_status_t newStatus)
{
int count = listDBEntry.count();
if (count==0)
return false;
//db_item_t lastItem = listDBEntry[count-1];
listDBEntry[count-1].status = newStatus;
return updateEntryOnFile(count-1);
}
//***********************************************************************
// changeError at last entry
// Input parameters: newError
// Returns: true if ok in change error
// false if error in change error
//***********************************************************************
bool dbHistory::changeErrorLast(db_error_t newError, QString _errorstr)
{
int count = listDBEntry.count();
if (count==0)
return false;
//db_item_t lastItem = listDBEntry[count-1];
listDBEntry[count-1].error = newError;
listDBEntry[count-1].errorStr = _errorstr;
return updateEntryOnFile(count-1);
}
//***********************************************************************
// update info file of idx entry
// Input parameters: idx
// Returns: true if ok
// false if error
//***********************************************************************
bool dbHistory::updateEntryOnFile(int idx)
{
QSettings settings( history_filedb, QSettings::IniFormat);
if (idx>listDBEntry.count())
return false;
db_item_t dbEntry = listDBEntry[idx];
if ( settings.status() == QSettings::NoError )
{
QString section = QString("entry%1").arg(idx);
settings.beginGroup(section);
settings.setValue("error", dbEntry.error);
settings.setValue("name", dbEntry.name);
settings.setValue("path", dbEntry.path);
settings.setValue("status", dbEntry.status);
settings.setValue("timestamp", dbEntry.timestamp);
settings.setValue("where", dbEntry.where);
settings.setValue("flash_address", dbEntry.flash_address);
settings.setValue("srio_conn", dbEntry.srio_conn);
settings.setValue("spi", dbEntry.spi);
settings.setValue("error_str", dbEntry.errorStr);
settings.endGroup();
settings.sync();
if(settings.status() == QSettings::NoError)
return true;
}
else
return false;
}
//***********************************************************************
// getStatusString
// Input parameters: _status to convert into string
// Returns: string description of status
//***********************************************************************
QString dbHistory::getStatusString(db_status_t _status)
{
switch(_status)
{
case db_status_error:
return db_status_error_str;
break;
case db_status_nc:
return db_status_nc_str;
break;
case db_status_started:
return db_status_started_str;
break;
case db_status_erased:
return db_status_erased_str;
break;
case db_status_programmed:
return db_status_programmed_str;
break;
default:
return db_status_nc_str;
break;
}
}
//***********************************************************************
// getErrorString
// Input parameters: _error to convert into string
// Returns: string description of error
//***********************************************************************
QString dbHistory::getErrorString(db_error_t _error)
{
switch(_error)
{
case db_error_no_error:
return db_error_no_error_str;
break;
case db_error_format_file:
return db_error_format_file_str;
break;
case db_error_generic:
return db_error_generic_str;
break;
case db_error_erase:
return db_error_erase_str;
break;
case db_error_program:
return db_error_program_str;
break;
case db_error_tftp:
return db_error_tftp_str;
break;
case db_error_srio:
return db_error_srio_str;
break;
default:
return db_status_nc_str;
break;
}
}
//***********************************************************************
// getSPIString
// Input parameters: _spi to convert into string
// Returns: string description of spi
//***********************************************************************
QString dbHistory::getSPIString(unsigned int _spi)
{
switch(_spi)
{
case 0:
return spi_port_primary_str;
break;
case 1:
return spi_port_secondary_str;
break;
default:
return spi_port_primary_str;
break;
}
}
//***********************************************************************
// get complete path of history file
// Input parameters:
// Returns: return path
//***********************************************************************
QString dbHistory::getFileDB()
{
return history_filedb;
}
//***********************************************************************
// reset history dvìb
// Input parameters:
// Returns:
//***********************************************************************
void dbHistory::reset()
{
listDBEntry.clear();
//deletefileDB
QFile::remove(history_filedb);
}
//***********************************************************************
// save log into filelog in history folder
// Input parameters:
// Returns:
//***********************************************************************
void dbHistory::saveLog()
{
}