Add persistentData to store dc-fw-version
Reading dc-fw-version is somehow complicated ... Id does not work reliable on startup, so we do read it also on every diagRequest(). Version string is then stored in persistent data. This data can be used e.g. by other tools to show the device-controller-firmware-version.
This commit is contained in:
parent
b058b6aee0
commit
d2efe566c5
@ -80,7 +80,8 @@ HEADERS += \
|
|||||||
src/ATBAPP/support/CashUtils.h \
|
src/ATBAPP/support/CashUtils.h \
|
||||||
src/ATBAPP/support/DBusControllerInterface.h \
|
src/ATBAPP/support/DBusControllerInterface.h \
|
||||||
src/ATBAPP/support/JSON.h \
|
src/ATBAPP/support/JSON.h \
|
||||||
src/ATBAPP/support/PTUSystem.h
|
src/ATBAPP/support/PTUSystem.h \
|
||||||
|
src/ATBAPP/support/PersistentData.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
src/ATBAPP/ATBHealthEvent.cpp \
|
src/ATBAPP/ATBHealthEvent.cpp \
|
||||||
@ -91,7 +92,8 @@ SOURCES += \
|
|||||||
src/ATBAPP/support/CashUtils.cpp \
|
src/ATBAPP/support/CashUtils.cpp \
|
||||||
src/ATBAPP/support/DBusControllerInterface.cpp \
|
src/ATBAPP/support/DBusControllerInterface.cpp \
|
||||||
src/ATBAPP/support/JSON.cpp \
|
src/ATBAPP/support/JSON.cpp \
|
||||||
src/ATBAPP/support/PTUSystem.cpp
|
src/ATBAPP/support/PTUSystem.cpp \
|
||||||
|
src/ATBAPP/support/PersistentData.cpp
|
||||||
|
|
||||||
DISTFILES += \
|
DISTFILES += \
|
||||||
generate-version.sh
|
generate-version.sh
|
||||||
|
@ -60,11 +60,12 @@ ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent)
|
|||||||
dynamic_cast<QObject*>(hw)->moveToThread(hwThread);
|
dynamic_cast<QObject*>(hw)->moveToThread(hwThread);
|
||||||
hwThread->start();
|
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);
|
connect(this->diag, &DeviceControllerDiag::newVoltage, this, &ATBDeviceControllerPlugin::onNewVoltage);
|
||||||
|
|
||||||
|
|
||||||
this->currentSelectedTicketType = 0;
|
this->currentSelectedTicketType = 0;
|
||||||
this->currentCashState = CASH_STATE::CACHE_EMPTY;
|
this->currentCashState = CASH_STATE::CACHE_EMPTY;
|
||||||
|
|
||||||
@ -101,6 +102,11 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con
|
|||||||
// this is necessary to init the CashAgentLib (!)
|
// this is necessary to init the CashAgentLib (!)
|
||||||
hw->vend_failed();
|
hw->vend_failed();
|
||||||
|
|
||||||
|
// read sw-version and store it in persistentData, if changed
|
||||||
|
QString dc_fw_version = hw->dc_getSWversion();
|
||||||
|
qCritical() << "ATBDeviceControllerPlugin: DC firmware version: " << dc_fw_version;
|
||||||
|
this->persistentData->setDCFirmwareVersion(dc_fw_version);
|
||||||
|
this->persistentData->serializeToFile();
|
||||||
|
|
||||||
// text encoding for printer
|
// text encoding for printer
|
||||||
this->codec = QTextCodec::codecForName(printerEncoding);
|
this->codec = QTextCodec::codecForName(printerEncoding);
|
||||||
@ -141,6 +147,10 @@ void ATBDeviceControllerPlugin::startPhysicalLayer()
|
|||||||
|
|
||||||
void ATBDeviceControllerPlugin::stopPhysicalLayer()
|
void ATBDeviceControllerPlugin::stopPhysicalLayer()
|
||||||
{
|
{
|
||||||
|
// store persistent data
|
||||||
|
this->persistentData->serializeToFile();
|
||||||
|
|
||||||
|
// skip, if we use slave lib
|
||||||
if (!this->isMaster) return;
|
if (!this->isMaster) return;
|
||||||
|
|
||||||
if (this->pluginState == PLUGIN_STATE::NOT_INITIALIZED)
|
if (this->pluginState == PLUGIN_STATE::NOT_INITIALIZED)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
#include "support/PersistentData.h"
|
||||||
|
|
||||||
#include "interfaces.h"
|
#include "interfaces.h"
|
||||||
|
|
||||||
@ -112,6 +112,8 @@ private:
|
|||||||
|
|
||||||
DeviceControllerDiag* diag;
|
DeviceControllerDiag* diag;
|
||||||
|
|
||||||
|
PersistentData *persistentData;
|
||||||
|
|
||||||
uint32_t cashStartAmountInt;
|
uint32_t cashStartAmountInt;
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,13 +5,14 @@
|
|||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
DeviceControllerDiag::DeviceControllerDiag(QObject *parent)
|
DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, coinProcessorType(nsDeviceControllerInterface::COIN_PROCESSOR::ESCROW)
|
, coinProcessorType(nsDeviceControllerInterface::COIN_PROCESSOR::ESCROW)
|
||||||
, billAcceptor(nsDeviceControllerInterface::BILL_ACCEPTOR::NO)
|
, billAcceptor(nsDeviceControllerInterface::BILL_ACCEPTOR::NO)
|
||||||
, eventReceiver(nullptr)
|
, eventReceiver(nullptr)
|
||||||
, isRequestRunning(false)
|
, isRequestRunning(false)
|
||||||
, flagInterruptDiag(false)
|
, flagInterruptDiag(false)
|
||||||
|
, pData(pData)
|
||||||
{
|
{
|
||||||
diagRequestTimeoutTimer = new QTimer(this);
|
diagRequestTimeoutTimer = new QTimer(this);
|
||||||
diagRequestTimeoutTimer->setInterval(1000*20); // 20s
|
diagRequestTimeoutTimer->setInterval(1000*20); // 20s
|
||||||
@ -42,6 +43,12 @@ void DeviceControllerDiag::diagRequest()
|
|||||||
this->diagRequestTimeoutTimer->start();
|
this->diagRequestTimeoutTimer->start();
|
||||||
|
|
||||||
this->private_startDiag();
|
this->private_startDiag();
|
||||||
|
|
||||||
|
// read dc-fw-version:
|
||||||
|
QString dc_fw_version = hw->dc_getSWversion();
|
||||||
|
qCritical() << "ATBDeviceControllerPlugin: DC firmware version: " << dc_fw_version;
|
||||||
|
this->pData->setDCFirmwareVersion(dc_fw_version);
|
||||||
|
this->pData->serializeToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#include "interfaces.h"
|
#include "interfaces.h"
|
||||||
#include "DeviceControllerInterface.h"
|
#include "DeviceControllerInterface.h"
|
||||||
|
|
||||||
|
#include "support/PersistentData.h"
|
||||||
|
|
||||||
|
|
||||||
namespace DeviceController {
|
namespace DeviceController {
|
||||||
Q_NAMESPACE
|
Q_NAMESPACE
|
||||||
@ -60,7 +62,7 @@ class DeviceControllerDiag : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DeviceControllerDiag(QObject *parent = nullptr);
|
DeviceControllerDiag(PersistentData *pData, QObject *parent = nullptr);
|
||||||
|
|
||||||
void init(hwinf* hw, QObject* eventReceiver);
|
void init(hwinf* hw, QObject* eventReceiver);
|
||||||
|
|
||||||
@ -90,7 +92,7 @@ private:
|
|||||||
|
|
||||||
QSet<DeviceController::State> machineEventSet;
|
QSet<DeviceController::State> machineEventSet;
|
||||||
|
|
||||||
|
PersistentData* pData;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onDiagRequestTimeoutTimerTimeout();
|
void onDiagRequestTimeoutTimerTimeout();
|
||||||
|
137
src/ATBAPP/support/PersistentData.cpp
Normal file
137
src/ATBAPP/support/PersistentData.cpp
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#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)
|
||||||
|
{
|
||||||
|
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
|
Loading…
Reference in New Issue
Block a user