Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
0cc89cefab
|
|||
14755cd5b4
|
|||
d2efe566c5
|
|||
b058b6aee0
|
|||
bdb0f9911b
|
|||
c679b489ba
|
|||
1c643c6caf
|
|||
246e23bffd
|
|||
07bb1bde50
|
|||
81a70bf387
|
|||
012f3430c5
|
|||
80c7992d5b
|
|||
c603313d73
|
|||
b3ad8e1ee9
|
@@ -80,7 +80,8 @@ HEADERS += \
|
||||
src/ATBAPP/support/CashUtils.h \
|
||||
src/ATBAPP/support/DBusControllerInterface.h \
|
||||
src/ATBAPP/support/JSON.h \
|
||||
src/ATBAPP/support/PTUSystem.h
|
||||
src/ATBAPP/support/PTUSystem.h \
|
||||
src/ATBAPP/support/PersistentData.h
|
||||
|
||||
SOURCES += \
|
||||
src/ATBAPP/ATBHealthEvent.cpp \
|
||||
@@ -91,7 +92,8 @@ SOURCES += \
|
||||
src/ATBAPP/support/CashUtils.cpp \
|
||||
src/ATBAPP/support/DBusControllerInterface.cpp \
|
||||
src/ATBAPP/support/JSON.cpp \
|
||||
src/ATBAPP/support/PTUSystem.cpp
|
||||
src/ATBAPP/support/PTUSystem.cpp \
|
||||
src/ATBAPP/support/PersistentData.cpp
|
||||
|
||||
DISTFILES += \
|
||||
generate-version.sh
|
||||
|
@@ -60,11 +60,12 @@ ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent)
|
||||
dynamic_cast<QObject*>(hw)->moveToThread(hwThread);
|
||||
hwThread->start();
|
||||
|
||||
QString persistentDataFile = "/mnt/system_data/dc_persistentData.dat";
|
||||
this->persistentData = new PersistentData(persistentDataFile);
|
||||
|
||||
this->diag = new DeviceControllerDiag(this);
|
||||
this->diag = new DeviceControllerDiag(this->persistentData, this);
|
||||
connect(this->diag, &DeviceControllerDiag::newVoltage, this, &ATBDeviceControllerPlugin::onNewVoltage);
|
||||
|
||||
|
||||
this->currentSelectedTicketType = 0;
|
||||
this->currentCashState = CASH_STATE::CACHE_EMPTY;
|
||||
|
||||
@@ -87,9 +88,10 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con
|
||||
if (this->isMaster) {
|
||||
// open serial port
|
||||
hw->dc_openSerial(5, "115200", this->serialPortName, 1);
|
||||
hw->dc_autoRequest(true);
|
||||
}
|
||||
|
||||
hw->dc_autoRequest(true);
|
||||
|
||||
hw->dc_setNewCustomerNumber(PTUSystem::readCustomerNumber());
|
||||
hw->dc_setNewMachineNumber(PTUSystem::readMachineNumber());
|
||||
hw->dc_setNewZone(PTUSystem::readZoneNumber());
|
||||
@@ -100,6 +102,11 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con
|
||||
// this is necessary to init the CashAgentLib (!)
|
||||
hw->vend_failed();
|
||||
|
||||
// read sw-version and store it in persistentData, if changed
|
||||
QString dc_fw_version = hw->dc_getSWversion().remove(QChar('\0'));
|
||||
qCritical() << "ATBDeviceControllerPlugin: DC firmware version: " << dc_fw_version;
|
||||
this->persistentData->setDCFirmwareVersion(dc_fw_version);
|
||||
this->persistentData->serializeToFile();
|
||||
|
||||
// text encoding for printer
|
||||
this->codec = QTextCodec::codecForName(printerEncoding);
|
||||
@@ -132,6 +139,11 @@ void ATBDeviceControllerPlugin::startPhysicalLayer()
|
||||
return;
|
||||
}
|
||||
|
||||
qCritical() << "ATBDeviceControllerPlugin::startPhysicalLayer() " << endl
|
||||
<< " -> use master lib " << endl
|
||||
<< " -> start physical layer";
|
||||
|
||||
|
||||
// open serial port
|
||||
hw->dc_openSerial(5, "115200", this->serialPortName, 1);
|
||||
|
||||
@@ -140,6 +152,10 @@ void ATBDeviceControllerPlugin::startPhysicalLayer()
|
||||
|
||||
void ATBDeviceControllerPlugin::stopPhysicalLayer()
|
||||
{
|
||||
// store persistent data
|
||||
this->persistentData->serializeToFile();
|
||||
|
||||
// skip, if we use slave lib
|
||||
if (!this->isMaster) return;
|
||||
|
||||
if (this->pluginState == PLUGIN_STATE::NOT_INITIALIZED)
|
||||
@@ -176,20 +192,20 @@ void ATBDeviceControllerPlugin::reset()
|
||||
|
||||
void ATBDeviceControllerPlugin::onChangedProgramModeToSELL()
|
||||
{
|
||||
hw->dc_autoRequest(true);
|
||||
hw->rtc_setDateTime();
|
||||
hw->mdb_switchWake(0); // wakeup MDB components
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onChangedProgramModeToSERVICE()
|
||||
{
|
||||
//hw->dc_autoRequest(true);
|
||||
hw->dc_autoRequest(true);
|
||||
hw->mdb_switchWake(0); // wakeup MDB components
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onChangedProgramModeToIDLE()
|
||||
{
|
||||
//hw->dc_autoRequest(false); // <-- TODO: ???
|
||||
|
||||
hw->dc_autoRequest(true);
|
||||
this->diag->diagRequest();
|
||||
hw->mdb_switchWake(1);
|
||||
|
||||
@@ -438,9 +454,6 @@ void ATBDeviceControllerPlugin::onServiceDoorOpened()
|
||||
|
||||
void ATBDeviceControllerPlugin::onVaultDoorOpened()
|
||||
{
|
||||
// TODO:
|
||||
// - show special screen / message on screen
|
||||
// - create an HealthEvent (-> ISMAS-Event)
|
||||
qCritical() << "ATBDeviceControllerPlugin::onVaultDoorOpened()";
|
||||
|
||||
// ... to detect alarm etc.
|
||||
@@ -451,7 +464,13 @@ void ATBDeviceControllerPlugin::onVaultDoorOpened()
|
||||
// BackgroundTask("ACCOUNT") is finished, if account message is sent to ISMAS!
|
||||
this->dbus->startBackgroundTask("DOOR_OPEN");
|
||||
|
||||
// do not: emit this->requestModeSERVICE();
|
||||
emit this->requestModeACCOUNT();
|
||||
|
||||
// send service message, delayed:
|
||||
QTimer::singleShot(1000, this, [this](){
|
||||
emit this->showServiceText(nsDeviceControllerInterface::SERVICE_TEXT::VAULT_DOOR_OPENED, "Please remove coinbox");
|
||||
hw->prn_cut(3);
|
||||
} );
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onCoinBoxRemoved()
|
||||
@@ -461,12 +480,17 @@ void ATBDeviceControllerPlugin::onCoinBoxRemoved()
|
||||
// BackgroundTask("ACCOUNT") is finished, if account message is sent to ISMAS!
|
||||
this->dbus->startBackgroundTask("ACCOUNT");
|
||||
|
||||
emit this->showServiceText(nsDeviceControllerInterface::SERVICE_TEXT::COIN_BOX_REMOVED, "Please insert coinbox");
|
||||
|
||||
QTimer::singleShot(4000, this, SLOT(private_startAccount()));
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onCoinBoxInserted()
|
||||
{
|
||||
qCritical() << "ATBDeviceControllerPlugin::onCoinBoxInserted()";
|
||||
|
||||
emit this->showServiceText(nsDeviceControllerInterface::SERVICE_TEXT::COIN_BOX_INSERTED, "Please close vault door");
|
||||
// emit this->showServiceText(0x1234);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -609,11 +633,13 @@ void ATBDeviceControllerPlugin::requestPrintTicket(nsDeviceControllerInterface::
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if (!this->hw->dc_isPortOpen()) {
|
||||
qCritical() << " ... serial port is not open!";
|
||||
this->onPrintFinishedERR();
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
// TODO: wird hier nur 'licensePlate' gedruckt?
|
||||
if (!this->hw->prn_sendDynamicPrnValues(dynTicketData->licensePlate)) {
|
||||
@@ -648,6 +674,7 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QString & printingStri
|
||||
{
|
||||
QByteArray ba = printingString.toUtf8();
|
||||
hw->prn_switchPower(true);
|
||||
hw->prn_setFonts(8,12,0,0);
|
||||
hw->prn_sendText(&ba);
|
||||
QTimer::singleShot(4000, this, SLOT(onPrinterWaitForPrintingReceipt()));
|
||||
|
||||
@@ -750,12 +777,13 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
// DEBUG
|
||||
qCritical() << "ATBDeviceControllerPlugin::requestPrintTicket()";
|
||||
|
||||
/*
|
||||
if (!this->hw->dc_isPortOpen()) {
|
||||
qCritical() << " ... serial port is not open!";
|
||||
this->onPrintFinishedERR();
|
||||
return;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// TODO: wird hier nur 'licensePlate' gedruckt?
|
||||
if (!this->hw->prn_sendDynamicPrnValues(dynTicketData->licensePlate)) {
|
||||
@@ -1092,10 +1120,24 @@ void ATBDeviceControllerPlugin::onCashChangerState()
|
||||
amountCoinsChangedInt = amountInt - this->cashStartAmountInt;
|
||||
}
|
||||
else {
|
||||
amountCoinsChangedInt = 0;
|
||||
amountCoinsChangedInt = 0;
|
||||
}
|
||||
QString amountCoinsChangedString = QString::number(amountCoinsChangedInt);
|
||||
|
||||
// if we do not need to give change:
|
||||
if (amountCoinsChangedInt == 0) {
|
||||
emit this->cashPaymentFinished(nsDeviceControllerInterface::RESULT_STATE::SUCCESS,
|
||||
amountString,
|
||||
amountCoinsString, // coins
|
||||
amountNotesString, // notes
|
||||
amountCoinsChangedString, // change
|
||||
"",
|
||||
"");
|
||||
changerStateRequestCounter = 0;
|
||||
lastChangerResult = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// get changer state ------------------------------------------------
|
||||
// Note: 'returnedAmount'-parameter is missleading here!
|
||||
@@ -1281,6 +1323,10 @@ bool ATBDeviceControllerPlugin::private_loadCashAgentLib(QString pluginName)
|
||||
|
||||
qCritical() << "ATBDeviceControllerPlugin: loaded CashAgentLib";
|
||||
|
||||
if (this->isMaster) {
|
||||
QTimer::singleShot(500, this, &ATBDeviceControllerPlugin::startPhysicalLayer);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -10,7 +10,7 @@
|
||||
|
||||
#include "version.h"
|
||||
|
||||
|
||||
#include "support/PersistentData.h"
|
||||
|
||||
#include "interfaces.h"
|
||||
|
||||
@@ -112,6 +112,8 @@ private:
|
||||
|
||||
DeviceControllerDiag* diag;
|
||||
|
||||
PersistentData *persistentData;
|
||||
|
||||
uint32_t cashStartAmountInt;
|
||||
|
||||
|
||||
|
@@ -5,13 +5,14 @@
|
||||
#include <QUuid>
|
||||
#include <QDebug>
|
||||
|
||||
DeviceControllerDiag::DeviceControllerDiag(QObject *parent)
|
||||
DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *parent)
|
||||
: QObject(parent)
|
||||
, coinProcessorType(nsDeviceControllerInterface::COIN_PROCESSOR::ESCROW)
|
||||
, billAcceptor(nsDeviceControllerInterface::BILL_ACCEPTOR::NO)
|
||||
, eventReceiver(nullptr)
|
||||
, isRequestRunning(false)
|
||||
, flagInterruptDiag(false)
|
||||
, pData(pData)
|
||||
{
|
||||
diagRequestTimeoutTimer = new QTimer(this);
|
||||
diagRequestTimeoutTimer->setInterval(1000*20); // 20s
|
||||
@@ -42,6 +43,16 @@ void DeviceControllerDiag::diagRequest()
|
||||
this->diagRequestTimeoutTimer->start();
|
||||
|
||||
this->private_startDiag();
|
||||
|
||||
// read dc-fw-version:
|
||||
/* note: dc_getSWVersion() returns always 32 characters (QString)...
|
||||
* if no version string could be read it will contain 32 null-characters:
|
||||
* "\u0000\u0000..."
|
||||
*/
|
||||
QString dc_fw_version = hw->dc_getSWversion().remove(QChar('\0'));
|
||||
qCritical() << "ATBDeviceControllerPlugin: DC firmware version: " << dc_fw_version;
|
||||
this->pData->setDCFirmwareVersion(dc_fw_version);
|
||||
this->pData->serializeToFile();
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +68,8 @@ void DeviceControllerDiag::private_startDiag()
|
||||
if (this->flagInterruptDiag) {
|
||||
qCritical() << "DeviceControllerDiag::private_startDiag() interrupted!";
|
||||
this->private_sendDiagEvent(DeviceController::State::E255);
|
||||
this->isRequestRunning = false;
|
||||
this->flagInterruptDiag = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -89,6 +102,8 @@ void DeviceControllerDiag::sys_superviseSystem()
|
||||
if (this->flagInterruptDiag) {
|
||||
qCritical() << "DeviceControllerDiag::sys_superviseSystem() interrupted!";
|
||||
this->private_sendDiagEvent(DeviceController::State::E255);
|
||||
this->flagInterruptDiag = false;
|
||||
this->isRequestRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -97,6 +112,8 @@ void DeviceControllerDiag::sys_superviseSystem()
|
||||
// es gibt keinerlei gültige Daten vom DC
|
||||
qCritical() << "DeviceControllerDiag::sys_superviseSystem() no valid data!";
|
||||
this->private_sendDiagEvent(DeviceController::State::E254);
|
||||
this->diagRequestTimeoutTimer->stop();
|
||||
this->isRequestRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -9,6 +9,8 @@
|
||||
#include "interfaces.h"
|
||||
#include "DeviceControllerInterface.h"
|
||||
|
||||
#include "support/PersistentData.h"
|
||||
|
||||
|
||||
namespace DeviceController {
|
||||
Q_NAMESPACE
|
||||
@@ -60,7 +62,7 @@ class DeviceControllerDiag : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DeviceControllerDiag(QObject *parent = nullptr);
|
||||
DeviceControllerDiag(PersistentData *pData, QObject *parent = nullptr);
|
||||
|
||||
void init(hwinf* hw, QObject* eventReceiver);
|
||||
|
||||
@@ -90,7 +92,7 @@ private:
|
||||
|
||||
QSet<DeviceController::State> machineEventSet;
|
||||
|
||||
|
||||
PersistentData* pData;
|
||||
|
||||
private slots:
|
||||
void onDiagRequestTimeoutTimerTimeout();
|
||||
|
@@ -15,6 +15,9 @@ namespace nsDeviceControllerInterface {
|
||||
enum class TICKET_VARIANT : quint8;
|
||||
enum class COIN_PROCESSOR : quint8;
|
||||
enum class BILL_ACCEPTOR : quint8;
|
||||
|
||||
|
||||
enum class SERVICE_TEXT : quint16;
|
||||
}
|
||||
|
||||
|
||||
@@ -146,6 +149,11 @@ signals:
|
||||
*/
|
||||
void requestModeSERVICE();
|
||||
|
||||
/**
|
||||
* emitted e.g. if vault door is opened
|
||||
*/
|
||||
void requestModeACCOUNT();
|
||||
|
||||
/**
|
||||
* emitted e.g. if doors are closed
|
||||
*/
|
||||
@@ -162,7 +170,10 @@ signals:
|
||||
void requestAccountResponse(const QHash<QString, QVariant> & accountData);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* show text messages in service mode
|
||||
*/
|
||||
void showServiceText(nsDeviceControllerInterface::SERVICE_TEXT serviceText, const QString & text);
|
||||
|
||||
|
||||
/**
|
||||
@@ -182,7 +193,7 @@ signals:
|
||||
|
||||
|
||||
Q_DECLARE_INTERFACE(DeviceControllerInterface,
|
||||
"eu.atb.ptu.plugin.DeviceControllerInterface/1.0.3")
|
||||
"eu.atb.ptu.plugin.DeviceControllerInterface/1.1.1")
|
||||
|
||||
|
||||
namespace nsDeviceControllerInterface {
|
||||
@@ -226,6 +237,14 @@ namespace nsDeviceControllerInterface {
|
||||
YES,
|
||||
NO
|
||||
};
|
||||
|
||||
enum class SERVICE_TEXT : quint16 {
|
||||
SERVICE_DOOR_OPENED,
|
||||
VAULT_DOOR_OPENED,
|
||||
COIN_BOX_REMOVED,
|
||||
COIN_BOX_INSERTED
|
||||
/* t.b.d. */
|
||||
};
|
||||
}
|
||||
|
||||
#endif // DEVICECONTROLLERINTERFACE_H
|
||||
|
@@ -39,13 +39,36 @@ uint32_t CashUtils::getAmountOfInsertedCoins(hwinf* hw)
|
||||
uint32_t CashUtils::getAmountOfInsertedNotes(hwinf* hw)
|
||||
{
|
||||
uint32_t result = 0;
|
||||
uint8_t numberOfInsertedNotes;
|
||||
|
||||
uint16_t values[MAX_NOTES];
|
||||
hw->bna_getCurrentNotes(0, values);
|
||||
uint16_t beforeArray = 0;
|
||||
uint16_t currentNotes[4];
|
||||
uint16_t afterArray = 0;
|
||||
numberOfInsertedNotes = hw->bna_getCurrentNotes(0, currentNotes);
|
||||
|
||||
for (int i = 0; i < MAX_COINS; i++) {
|
||||
result += values[i];
|
||||
if ( (beforeArray != 0) || (afterArray != 0) ) {
|
||||
qCritical() << "CashUtils::getAmountOfInsertedNotes() ERROR: Array";
|
||||
}
|
||||
|
||||
if (numberOfInsertedNotes == 99) {
|
||||
// Error
|
||||
qCritical() << "CashUtils::getAmountOfInsertedNotes() ERROR: ";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
qCritical() << " currentNotes[" << i << "] = " << currentNotes[i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
// no error
|
||||
result = currentNotes[3];
|
||||
result = ( result << 16 ) | currentNotes[2];
|
||||
}
|
||||
|
||||
// DEBUG
|
||||
qCritical() << "--------------------------------------------------";
|
||||
qCritical() << "CashUtils::getAmountOfInsertedNotes()";
|
||||
qCritical() << " numberOfInsertedNotes = " << numberOfInsertedNotes;
|
||||
qCritical() << " result = " << result;
|
||||
qCritical() << "--------------------------------------------------";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
140
src/ATBAPP/support/PersistentData.cpp
Normal file
140
src/ATBAPP/support/PersistentData.cpp
Normal file
@@ -0,0 +1,140 @@
|
||||
#include "PersistentData.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QDir>
|
||||
#include <QDateTime>
|
||||
#include <QDataStream>
|
||||
#include <QDebug>
|
||||
|
||||
PersistentData::PersistentData(const QString &datafileName, QObject *parent)
|
||||
: QObject(parent)
|
||||
, isChangedFlag(false)
|
||||
{
|
||||
// load persistant data, if available
|
||||
this->filename = datafileName;
|
||||
|
||||
QFileInfo dataFileInfo(this->filename);
|
||||
QString dataFilePath = dataFileInfo.path();
|
||||
|
||||
QDir dir;
|
||||
if ( ! dir.exists(dataFilePath)) {
|
||||
qCritical() << "Persistent data file does not exist!";
|
||||
qCritical() << " --> create new: " << this->filename;
|
||||
dir.mkpath(dataFilePath);
|
||||
}
|
||||
|
||||
this->read();
|
||||
}
|
||||
|
||||
|
||||
void PersistentData::serializeToFile()
|
||||
{
|
||||
this->save();
|
||||
}
|
||||
|
||||
void PersistentData::save()
|
||||
{
|
||||
QFile fileOut(this->filename);
|
||||
if (fileOut.open(QIODevice::WriteOnly))
|
||||
{
|
||||
QDataStream out(&fileOut);
|
||||
out.setVersion(QDataStream::Qt_4_6);
|
||||
|
||||
out << this->hash;
|
||||
fileOut.flush();
|
||||
fileOut.close();
|
||||
}
|
||||
}
|
||||
|
||||
void PersistentData::read()
|
||||
{
|
||||
QFile fileIn(this->filename);
|
||||
if (fileIn.open(QIODevice::ReadOnly))
|
||||
{
|
||||
QDataStream in(&fileIn);
|
||||
in.setVersion(QDataStream::Qt_4_6);
|
||||
|
||||
in >> hash;
|
||||
|
||||
fileIn.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
QVariant PersistentData::getParameter(const QString & key) const {
|
||||
#if defined (ARCH_DesktopLinux)
|
||||
// note: QVariant.toString() returns empty string for custom types
|
||||
qDebug() << "VendingData::getParameter() key = " << key << " value = " << hash.value(key).toString();
|
||||
#endif
|
||||
return hash.value(key);
|
||||
}
|
||||
|
||||
QVariant PersistentData::getParameter(const QString & key)
|
||||
{
|
||||
#if defined (ARCH_DesktopLinux)
|
||||
// note: QVariant.toString() returns empty string for custom types
|
||||
qDebug() << "VendingData::getParameter() key = " << key << " value = " << hash.value(key).toString();
|
||||
#endif
|
||||
|
||||
return hash.value(key);
|
||||
}
|
||||
|
||||
void PersistentData::setParameter(const QString & key, QVariant value)
|
||||
{
|
||||
this->isChangedFlag = true;
|
||||
|
||||
#if defined (ARCH_DesktopLinux)
|
||||
// note: QVariant.toString() returns empty string for custom types
|
||||
qDebug() << "VendingData::setParameter() key = " << key << " value = " << value.toString();
|
||||
#endif
|
||||
|
||||
this->hash.insert(key, value);
|
||||
}
|
||||
|
||||
void PersistentData::clearParameter(const QString & key)
|
||||
{
|
||||
this->isChangedFlag = true;
|
||||
this->hash.remove(key);
|
||||
}
|
||||
|
||||
bool PersistentData::hasParameter(const QString & key) const
|
||||
{
|
||||
return hash.contains(key);
|
||||
}
|
||||
|
||||
|
||||
uint PersistentData::getUintParameter(const QString & key) const
|
||||
{
|
||||
qDebug() << "PersistentData::getUintParameter() key = " << key << " value = " << hash.value(key).toString();
|
||||
|
||||
uint returnValue = 0;
|
||||
bool ok;
|
||||
|
||||
returnValue = hash.value(key).toString().toUInt(&ok);
|
||||
if (!ok) returnValue = 0;
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
QList<QString> PersistentData::uniqueKeys() const {
|
||||
return hash.uniqueKeys();
|
||||
}
|
||||
|
||||
|
||||
void PersistentData::setDCFirmwareVersion(const QString & fw_version)
|
||||
{
|
||||
// there must be a version string!
|
||||
if (fw_version.size() < 1) return;
|
||||
|
||||
if (this->hash["dc_fw_version"].toString() != fw_version) {
|
||||
this->isChangedFlag = true;
|
||||
this->hash.insert("dc_fw_version", fw_version);
|
||||
}
|
||||
}
|
||||
|
||||
QString PersistentData::getDCFirmwareVersion()
|
||||
{
|
||||
return this->hash["dc_fw_version"].toString();
|
||||
}
|
49
src/ATBAPP/support/PersistentData.h
Normal file
49
src/ATBAPP/support/PersistentData.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef PERSISTENTDATA_H
|
||||
#define PERSISTENTDATA_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QHash>
|
||||
#include <QVariant>
|
||||
#include <QList>
|
||||
#include <QString>
|
||||
|
||||
class PersistentData : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PersistentData(const QString &datafileName, QObject *parent = nullptr);
|
||||
|
||||
void setDCFirmwareVersion(const QString & fw_version);
|
||||
QString getDCFirmwareVersion();
|
||||
|
||||
|
||||
QVariant getParameter(const QString & key);
|
||||
QVariant getParameter(const QString & key) const;
|
||||
void setParameter(const QString & key, QVariant value);
|
||||
void clearParameter(const QString & key);
|
||||
bool hasParameter(const QString & key) const;
|
||||
|
||||
uint getUintParameter(const QString & key) const;
|
||||
QList<QString> uniqueKeys() const;
|
||||
|
||||
|
||||
public slots:
|
||||
void serializeToFile();
|
||||
|
||||
signals:
|
||||
|
||||
|
||||
private:
|
||||
QHash<QString, QVariant> hash;
|
||||
|
||||
QString dc_fw_version;
|
||||
|
||||
QString filename;
|
||||
|
||||
void save();
|
||||
void read();
|
||||
|
||||
bool isChangedFlag;
|
||||
};
|
||||
|
||||
#endif // PERSISTENTDATA_H
|
Reference in New Issue
Block a user