Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
5a999a0494
|
|||
ec18ac45e4
|
|||
560b6d3221
|
|||
b946dc5a92
|
|||
ea7542a248
|
|||
4541699ec3
|
|||
87d50a05dd
|
|||
379a5d4e3e
|
|||
6a08cf0b62
|
|||
849305bc8f
|
|||
a5c900b9fe
|
|||
70b488de66
|
@@ -30,13 +30,31 @@ ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent)
|
|||||||
this->setParent(parent);
|
this->setParent(parent);
|
||||||
|
|
||||||
this->pluginInfo = QString::fromUtf8(pluginInfoString.c_str());
|
this->pluginInfo = QString::fromUtf8(pluginInfoString.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
ATBDeviceControllerPlugin::~ATBDeviceControllerPlugin() {}
|
||||||
|
|
||||||
|
PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, const QSettings & settings)
|
||||||
|
{
|
||||||
|
this->eventReceiver = eventReceiver;
|
||||||
|
|
||||||
|
// read variables from setting
|
||||||
|
this->serialPortName = settings.value("ATBDeviceControllerPlugin/serialPort", "ttymxc2").toString();
|
||||||
|
QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1();
|
||||||
|
QString printerLocaleString = settings.value("ATBDeviceControllerPlugin/printerLocale", "de_DE").toString().toLatin1();
|
||||||
|
this->printerLocale = QLocale(printerLocaleString);
|
||||||
|
|
||||||
if (!this->private_loadCashAgentLib("")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->init_sc_dbus();
|
this->init_sc_dbus();
|
||||||
|
|
||||||
|
QString persistentDataFile = "/mnt/system_data/dc_persistentData.dat";
|
||||||
|
this->persistentData = new PersistentData(persistentDataFile);
|
||||||
|
|
||||||
|
|
||||||
|
// setup libCA:
|
||||||
|
if (!this->private_loadCashAgentLib("")) {
|
||||||
|
return PLUGIN_STATE::NOT_INITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_OK()), this, SLOT(onPrintFinishedOK()), Qt::QueuedConnection);
|
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_OK()), this, SLOT(onPrintFinishedOK()), Qt::QueuedConnection);
|
||||||
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_Err()), this, SLOT(onPrintFinishedERR()), Qt::QueuedConnection);
|
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_Err()), this, SLOT(onPrintFinishedERR()), Qt::QueuedConnection);
|
||||||
@@ -61,9 +79,6 @@ 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->persistentData, this);
|
this->diag = new DeviceControllerDiag(this->persistentData, this);
|
||||||
connect(this->diag, &DeviceControllerDiag::newVoltage, this, &ATBDeviceControllerPlugin::onNewVoltage);
|
connect(this->diag, &DeviceControllerDiag::newVoltage, this, &ATBDeviceControllerPlugin::onNewVoltage);
|
||||||
|
|
||||||
@@ -75,19 +90,7 @@ ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent)
|
|||||||
this->currentCashState = CASH_STATE::CACHE_EMPTY;
|
this->currentCashState = CASH_STATE::CACHE_EMPTY;
|
||||||
|
|
||||||
this->cashStartAmountInt = 0;
|
this->cashStartAmountInt = 0;
|
||||||
}
|
|
||||||
|
|
||||||
ATBDeviceControllerPlugin::~ATBDeviceControllerPlugin() {}
|
|
||||||
|
|
||||||
PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, const QSettings & settings)
|
|
||||||
{
|
|
||||||
this->eventReceiver = eventReceiver;
|
|
||||||
|
|
||||||
// read variables from setting
|
|
||||||
this->serialPortName = settings.value("ATBDeviceControllerPlugin/serialPort", "ttymxc2").toString();
|
|
||||||
QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1();
|
|
||||||
QString printerLocaleString = settings.value("ATBDeviceControllerPlugin/printerLocale", "de_DE").toString().toLatin1();
|
|
||||||
this->printerLocale = QLocale(printerLocaleString);
|
|
||||||
|
|
||||||
|
|
||||||
if (this->isMaster) {
|
if (this->isMaster) {
|
||||||
@@ -134,6 +137,37 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ATBDeviceControllerPlugin::sendDeviceParameter(const QJsonObject &jsonObject)
|
||||||
|
{
|
||||||
|
|
||||||
|
qCritical() << "ATBDeviceControllerPlugin::sendDeviceParameter:";
|
||||||
|
|
||||||
|
|
||||||
|
// extract location info and store location info in persistent data:
|
||||||
|
QJsonValue jsonSubVal;
|
||||||
|
jsonSubVal = jsonObject["Location"];
|
||||||
|
|
||||||
|
QString locationString = jsonSubVal.toString("");
|
||||||
|
|
||||||
|
if (locationString == "") {
|
||||||
|
|
||||||
|
qCritical() << " --> locationString NULL";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t customerNr = PTUSystem::readCustomerNumber();
|
||||||
|
uint16_t machineNr = PTUSystem::readMachineNumber();
|
||||||
|
uint16_t borough = PTUSystem::readZoneNumber();
|
||||||
|
uint16_t zone = PTUSystem::readGroupNumber();
|
||||||
|
uint16_t alias = 0;
|
||||||
|
QByteArray locationBa = locationString.toLocal8Bit();
|
||||||
|
|
||||||
|
this->hw->sendMachineID(customerNr, machineNr, borough, zone, alias, locationBa.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ATBDeviceControllerPlugin::startPhysicalLayer()
|
void ATBDeviceControllerPlugin::startPhysicalLayer()
|
||||||
{
|
{
|
||||||
if (!this->isMaster) return;
|
if (!this->isMaster) return;
|
||||||
@@ -196,20 +230,20 @@ void ATBDeviceControllerPlugin::reset()
|
|||||||
// Handle Mode-Changes --------------------------------------------------------
|
// Handle Mode-Changes --------------------------------------------------------
|
||||||
|
|
||||||
void ATBDeviceControllerPlugin::onChangedProgramModeToSELL()
|
void ATBDeviceControllerPlugin::onChangedProgramModeToSELL()
|
||||||
{
|
{
|
||||||
hw->dc_autoRequest(true);
|
hw->dc_autoRequest(true);
|
||||||
hw->rtc_setDateTime();
|
hw->rtc_setDateTime();
|
||||||
hw->mdb_switchWake(0); // wakeup MDB components
|
hw->mdb_switchWake(0); // wakeup MDB components
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATBDeviceControllerPlugin::onChangedProgramModeToSERVICE()
|
void ATBDeviceControllerPlugin::onChangedProgramModeToSERVICE()
|
||||||
{
|
{
|
||||||
hw->dc_autoRequest(true);
|
hw->dc_autoRequest(true);
|
||||||
hw->mdb_switchWake(0); // wakeup MDB components
|
hw->mdb_switchWake(0); // wakeup MDB components
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATBDeviceControllerPlugin::onChangedProgramModeToIDLE()
|
void ATBDeviceControllerPlugin::onChangedProgramModeToIDLE()
|
||||||
{
|
{
|
||||||
hw->dc_autoRequest(true);
|
hw->dc_autoRequest(true);
|
||||||
this->diag->diagRequest();
|
this->diag->diagRequest();
|
||||||
hw->mdb_switchWake(1);
|
hw->mdb_switchWake(1);
|
||||||
@@ -519,10 +553,14 @@ void ATBDeviceControllerPlugin::onAllDoorsClosed()
|
|||||||
{
|
{
|
||||||
qCritical() << "ATBDeviceControllerPlugin::onAllDoorsClosed()";
|
qCritical() << "ATBDeviceControllerPlugin::onAllDoorsClosed()";
|
||||||
|
|
||||||
emit this->requestModeIDLE();
|
if (this->diag->isErrorState()) {
|
||||||
this->dbus->finishedBackgroundTask("DOOR_OPEN");
|
emit this->requestModeOOO();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emit this->requestModeIDLE();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: check for errors and create a machine event
|
this->dbus->finishedBackgroundTask("DOOR_OPEN");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ATBDeviceControllerPlugin::onNewVoltage(uint32_t voltage)
|
void ATBDeviceControllerPlugin::onNewVoltage(uint32_t voltage)
|
||||||
@@ -616,6 +654,7 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QString & printingStri
|
|||||||
hw->prn_switchPower(true);
|
hw->prn_switchPower(true);
|
||||||
hw->prn_setFonts(8,12,0,0);
|
hw->prn_setFonts(8,12,0,0);
|
||||||
hw->prn_sendText(&ba);
|
hw->prn_sendText(&ba);
|
||||||
|
this->printResultCheckCounter = 0;
|
||||||
QTimer::singleShot(4000, this, SLOT(onPrinterWaitForPrintingReceipt()));
|
QTimer::singleShot(4000, this, SLOT(onPrinterWaitForPrintingReceipt()));
|
||||||
|
|
||||||
//QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } );
|
//QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } );
|
||||||
@@ -664,7 +703,8 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingReceipt()
|
|||||||
|
|
||||||
void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant> & printingData)
|
void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant> & printingData)
|
||||||
{
|
{
|
||||||
struct T_dynDat *dynTicketData = new T_dynDat;
|
struct T_dynDat dynamicTicketData;
|
||||||
|
struct T_dynDat *dynTicketData = &dynamicTicketData;
|
||||||
memset(dynTicketData, 0, sizeof(*dynTicketData));
|
memset(dynTicketData, 0, sizeof(*dynTicketData));
|
||||||
|
|
||||||
qCritical() << "ATBDeviceControllerPlugin::requestPrintTicket( " << endl
|
qCritical() << "ATBDeviceControllerPlugin::requestPrintTicket( " << endl
|
||||||
@@ -805,6 +845,7 @@ void ATBDeviceControllerPlugin::onPrinterDataPrepared()
|
|||||||
|
|
||||||
// note: calling prn_getPrintResult() immediately may result in wrong answer!
|
// note: calling prn_getPrintResult() immediately may result in wrong answer!
|
||||||
// We have to wait "about some seconds" until calling this function!
|
// We have to wait "about some seconds" until calling this function!
|
||||||
|
this->printResultCheckCounter = 0;
|
||||||
QTimer::singleShot(4000, this, SLOT(onPrinterWaitForPrintingTicket()));
|
QTimer::singleShot(4000, this, SLOT(onPrinterWaitForPrintingTicket()));
|
||||||
|
|
||||||
// old: use printer templates:
|
// old: use printer templates:
|
||||||
@@ -828,8 +869,17 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingTicket()
|
|||||||
this->onPrintFinishedERR();
|
this->onPrintFinishedERR();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
qCritical() << "DC Error: wait for printing";
|
// result value is not defined (-> workaround for DC misbehaviour)
|
||||||
this->onPrintFinishedERR();
|
if (this->printResultCheckCounter < 10) {
|
||||||
|
this->printResultCheckCounter++;
|
||||||
|
qCritical() << "DC print result undefined: " << printerResult;
|
||||||
|
QTimer::singleShot(1000, this, SLOT(onPrinterWaitForPrintingTicket()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qCritical() << "DC Error: wait for printing";
|
||||||
|
this->onPrintFinishedERR();
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -857,6 +907,7 @@ void ATBDeviceControllerPlugin::onPrinterPrintNextTemplate()
|
|||||||
|
|
||||||
if (this->currentTicket->templateList()->isEmpty()) {
|
if (this->currentTicket->templateList()->isEmpty()) {
|
||||||
// all templates are printed
|
// all templates are printed
|
||||||
|
this->printResultCheckCounter = 0;
|
||||||
QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingTicket()));
|
QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingTicket()));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -908,7 +959,8 @@ void ATBDeviceControllerPlugin::onPrinterPrepareDynTemplateData()
|
|||||||
}
|
}
|
||||||
void ATBDeviceControllerPlugin::prepareDynTemplateData()
|
void ATBDeviceControllerPlugin::prepareDynTemplateData()
|
||||||
{
|
{
|
||||||
struct T_dynDat *dynTicketData = new T_dynDat;
|
struct T_dynDat dynamicTicketData;
|
||||||
|
struct T_dynDat *dynTicketData = &dynamicTicketData;
|
||||||
memset(dynTicketData, 0, sizeof(*dynTicketData));
|
memset(dynTicketData, 0, sizeof(*dynTicketData));
|
||||||
|
|
||||||
// setup dynTicketData dependent on currentTicket
|
// setup dynTicketData dependent on currentTicket
|
||||||
@@ -1466,7 +1518,7 @@ int ATBDeviceControllerPlugin::init_sc_dbus()
|
|||||||
|
|
||||||
void ATBDeviceControllerPlugin::onWokeUp(uchar source)
|
void ATBDeviceControllerPlugin::onWokeUp(uchar source)
|
||||||
{
|
{
|
||||||
if (source == 0x01) {
|
if (source == 0x01 || source == 0xFE) {
|
||||||
// woke up from device controller
|
// woke up from device controller
|
||||||
this->diag->diagRequest();
|
this->diag->diagRequest();
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,8 @@ public:
|
|||||||
// interface:
|
// interface:
|
||||||
PLUGIN_STATE initDCPlugin(QObject *eventReceiver, const QSettings & settings);
|
PLUGIN_STATE initDCPlugin(QObject *eventReceiver, const QSettings & settings);
|
||||||
|
|
||||||
|
void sendDeviceParameter(const QJsonObject & jsonObject);
|
||||||
|
|
||||||
// TASKS: Cash handling -------------------------------------------------------
|
// TASKS: Cash handling -------------------------------------------------------
|
||||||
void requestStartCashInput(const QString & amount);
|
void requestStartCashInput(const QString & amount);
|
||||||
void requestStopCashInput();
|
void requestStopCashInput();
|
||||||
@@ -127,6 +129,9 @@ private:
|
|||||||
// counts failed hw->log_chkIfVaultRecordAvailable()
|
// counts failed hw->log_chkIfVaultRecordAvailable()
|
||||||
int accountCheckCounter;
|
int accountCheckCounter;
|
||||||
|
|
||||||
|
// counts faild hw->prn-getPrintResult()
|
||||||
|
int printResultCheckCounter;
|
||||||
|
|
||||||
// dbus
|
// dbus
|
||||||
int init_sc_dbus();
|
int init_sc_dbus();
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@ class ATBMachineEvent : public QEvent
|
|||||||
public:
|
public:
|
||||||
explicit ATBMachineEvent(const QString & id,
|
explicit ATBMachineEvent(const QString & id,
|
||||||
const QString & deviceName, // PTU/PRINTER/DC/...
|
const QString & deviceName, // PTU/PRINTER/DC/...
|
||||||
EVENT_CLASS eventClass, // reason of event: Error/Warning/Alarm
|
EVENT_CLASS eventClass, // reason of event: Error/Warning/Alarm
|
||||||
const QString & name, // 'Event': "E001", "W003"
|
const QString & name, // 'Event': "E001", "W003"
|
||||||
const int state,
|
const int state,
|
||||||
const QString & parameter,
|
const QString & parameter,
|
||||||
|
@@ -5,6 +5,9 @@
|
|||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include "support/JSON.h"
|
||||||
|
|
||||||
|
|
||||||
DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *parent)
|
DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, coinProcessorType(nsDeviceControllerInterface::COIN_PROCESSOR::ESCROW)
|
, coinProcessorType(nsDeviceControllerInterface::COIN_PROCESSOR::ESCROW)
|
||||||
@@ -12,6 +15,8 @@ DeviceControllerDiag::DeviceControllerDiag(PersistentData *pData, QObject *paren
|
|||||||
, eventReceiver(nullptr)
|
, eventReceiver(nullptr)
|
||||||
, isRequestRunning(false)
|
, isRequestRunning(false)
|
||||||
, flagInterruptDiag(false)
|
, flagInterruptDiag(false)
|
||||||
|
, lastState(DeviceController::State::INITIAL_STATE)
|
||||||
|
, _isErrorState(false)
|
||||||
, pData(pData)
|
, pData(pData)
|
||||||
{
|
{
|
||||||
diagRequestTimeoutTimer = new QTimer(this);
|
diagRequestTimeoutTimer = new QTimer(this);
|
||||||
@@ -62,6 +67,24 @@ void DeviceControllerDiag::onDiagRequestTimeoutTimerTimeout()
|
|||||||
this->flagInterruptDiag = true;
|
this->flagInterruptDiag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool DeviceControllerDiag::isErrorState()
|
||||||
|
{
|
||||||
|
return this->_isErrorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeviceControllerDiag::isOperatingState()
|
||||||
|
{
|
||||||
|
return !this->_isErrorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSet<DeviceController::State> DeviceControllerDiag::getCurrentMachineState()
|
||||||
|
{
|
||||||
|
return this->machineEventSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DeviceControllerDiag::private_startDiag()
|
void DeviceControllerDiag::private_startDiag()
|
||||||
{
|
{
|
||||||
// check for DiagRequestTimeoutTimerTimeout:
|
// check for DiagRequestTimeoutTimerTimeout:
|
||||||
@@ -365,7 +388,6 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
|
|||||||
{
|
{
|
||||||
qCritical() << "DeviceControllerDiag::private_sendDiagEvent() result: " << result;
|
qCritical() << "DeviceControllerDiag::private_sendDiagEvent() result: " << result;
|
||||||
|
|
||||||
|
|
||||||
if (this->eventReceiver == nullptr) {
|
if (this->eventReceiver == nullptr) {
|
||||||
qCritical() << "DeviceControllerDiag: no eventReceiver";
|
qCritical() << "DeviceControllerDiag: no eventReceiver";
|
||||||
return;
|
return;
|
||||||
@@ -388,61 +410,77 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
|
|||||||
QString parameter;
|
QString parameter;
|
||||||
switch (result) {
|
switch (result) {
|
||||||
|
|
||||||
|
case DeviceController::State::INITIAL_STATE:
|
||||||
|
break;
|
||||||
case DeviceController::State::A000: // alarm / intrusion
|
case DeviceController::State::A000: // alarm / intrusion
|
||||||
eventClass = EVENT_CLASS::ALARM;
|
eventClass = EVENT_CLASS::ALARM;
|
||||||
parameter = "alarm / intrusion";
|
parameter = "alarm / intrusion";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E002: // real time clock error
|
case DeviceController::State::E002: // real time clock error
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "real time clock error";
|
parameter = "real time clock error";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E003: // voltage error
|
case DeviceController::State::E003: // voltage error
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "voltage error";
|
parameter = "voltage error";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E004: // temperature error
|
case DeviceController::State::E004: // temperature error
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "temperature error";
|
parameter = "temperature error";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E007: // coin safe full
|
case DeviceController::State::E007: // coin safe full
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "coin safe full";
|
parameter = "coin safe full";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E008: // bill acceptor full
|
case DeviceController::State::E008: // bill acceptor full
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "bill acceptor full";
|
parameter = "bill acceptor full";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E009: // no cash box
|
case DeviceController::State::E009: // no cash box
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "no cash box";
|
parameter = "no cash box";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E010: // coin escrow
|
case DeviceController::State::E010: // coin escrow
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "coin escrow";
|
parameter = "coin escrow";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E011: // mem error int.ee.
|
case DeviceController::State::E011: // mem error int.ee.
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "mem error int.ee.";
|
parameter = "mem error int.ee.";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E018: // no paper
|
case DeviceController::State::E018: // no paper
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "no paper";
|
parameter = "no paper";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E020: // printer error
|
case DeviceController::State::E020: // printer error
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "printer error";
|
parameter = "printer error";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E025: // coin blocker
|
case DeviceController::State::E025: // coin blocker
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "coin blocker";
|
parameter = "coin blocker";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E026: // error coin validator
|
case DeviceController::State::E026: // error coin validator
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "error coin validator";
|
parameter = "error coin validator";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E034: // mdb error
|
case DeviceController::State::E034: // mdb error
|
||||||
eventClass = EVENT_CLASS::ERROR;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "mdb error";
|
parameter = "mdb error";
|
||||||
|
this->_isErrorState = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DeviceController::State::E071: // cash box change is ongoing
|
case DeviceController::State::E071: // cash box change is ongoing
|
||||||
@@ -471,16 +509,21 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
|
|||||||
parameter = "no valid data from DeviceController";
|
parameter = "no valid data from DeviceController";
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::E255: // no valid data from DeviceController
|
case DeviceController::State::E255: // no valid data from DeviceController
|
||||||
eventClass = EVENT_CLASS::STATE;
|
eventClass = EVENT_CLASS::ERROR;
|
||||||
parameter = "";
|
parameter = "no valid data from DeviceController";
|
||||||
qCritical() << " ... ignore " << QMetaEnum::fromType<DeviceController::State>().valueToKey(result);
|
|
||||||
return;
|
|
||||||
break;
|
break;
|
||||||
case DeviceController::State::O000: // everything is fine
|
case DeviceController::State::O000: // everything is fine
|
||||||
this->machineEventSet.clear();
|
this->machineEventSet.clear();
|
||||||
|
this->_isErrorState = false;
|
||||||
eventClass = EVENT_CLASS::OPERATE;
|
eventClass = EVENT_CLASS::OPERATE;
|
||||||
parameter = "";
|
parameter = "";
|
||||||
qCritical() << " ... everything fine";
|
if (this->lastState == DeviceController::State::O000) {
|
||||||
|
qCritical() << " ... everything fine, no state change -> skip sending";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qCritical() << " ... everything fine";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DeviceController::State::W001: // paper low
|
case DeviceController::State::W001: // paper low
|
||||||
@@ -501,6 +544,17 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->lastState = result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variant: send 'parameter' as JSON:
|
||||||
|
*
|
||||||
|
JSON::setPrettySerialize(false);
|
||||||
|
JSON::JsonObject json = JSON::objectBuilder()
|
||||||
|
->set("description", parameter)
|
||||||
|
->create();
|
||||||
|
QString parameterJsonString = JSON::serialize(json);
|
||||||
|
*/
|
||||||
|
|
||||||
ATBMachineEvent *machineEvent = new ATBMachineEvent(
|
ATBMachineEvent *machineEvent = new ATBMachineEvent(
|
||||||
eventId,
|
eventId,
|
||||||
@@ -512,8 +566,6 @@ void DeviceControllerDiag::private_sendDiagEvent(DeviceController::State result)
|
|||||||
"" // second level info
|
"" // second level info
|
||||||
);
|
);
|
||||||
|
|
||||||
//emit diagResponse(machineEvent);
|
|
||||||
|
|
||||||
QCoreApplication::postEvent(eventReceiver, machineEvent);
|
QCoreApplication::postEvent(eventReceiver, machineEvent);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -52,7 +52,9 @@ namespace DeviceController {
|
|||||||
W001,
|
W001,
|
||||||
W002,
|
W002,
|
||||||
W003,
|
W003,
|
||||||
W004
|
W004,
|
||||||
|
|
||||||
|
INITIAL_STATE
|
||||||
};
|
};
|
||||||
Q_ENUM_NS(State)
|
Q_ENUM_NS(State)
|
||||||
}
|
}
|
||||||
@@ -70,6 +72,13 @@ public:
|
|||||||
nsDeviceControllerInterface::COIN_PROCESSOR coinProcessorType;
|
nsDeviceControllerInterface::COIN_PROCESSOR coinProcessorType;
|
||||||
nsDeviceControllerInterface::BILL_ACCEPTOR billAcceptor;
|
nsDeviceControllerInterface::BILL_ACCEPTOR billAcceptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return true, if machineEventSet contains an error
|
||||||
|
*/
|
||||||
|
bool isErrorState();
|
||||||
|
bool isOperatingState();
|
||||||
|
QSet<DeviceController::State> getCurrentMachineState();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void diagRequest();
|
void diagRequest();
|
||||||
|
|
||||||
@@ -91,7 +100,9 @@ private:
|
|||||||
|
|
||||||
int lastVoltage;
|
int lastVoltage;
|
||||||
|
|
||||||
|
DeviceController::State lastState;
|
||||||
QSet<DeviceController::State> machineEventSet;
|
QSet<DeviceController::State> machineEventSet;
|
||||||
|
bool _isErrorState;
|
||||||
|
|
||||||
PersistentData* pData;
|
PersistentData* pData;
|
||||||
|
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QJsonObject>
|
||||||
|
|
||||||
#include "ATBAPPplugin.h"
|
#include "ATBAPPplugin.h"
|
||||||
|
|
||||||
@@ -39,6 +40,12 @@ public:
|
|||||||
virtual nsDeviceControllerInterface::PLUGIN_STATE initDCPlugin(QObject *eventReceiver,
|
virtual nsDeviceControllerInterface::PLUGIN_STATE initDCPlugin(QObject *eventReceiver,
|
||||||
const QSettings & settings) = 0;
|
const QSettings & settings) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* e.g. send location
|
||||||
|
*/
|
||||||
|
virtual void sendDeviceParameter(const QJsonObject & jsonObject) = 0;
|
||||||
|
|
||||||
|
|
||||||
// TASKS: Cash handling -------------------------------------------------------
|
// TASKS: Cash handling -------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* enables coin input
|
* enables coin input
|
||||||
@@ -196,7 +203,7 @@ signals:
|
|||||||
|
|
||||||
|
|
||||||
Q_DECLARE_INTERFACE(DeviceControllerInterface,
|
Q_DECLARE_INTERFACE(DeviceControllerInterface,
|
||||||
"eu.atb.ptu.plugin.DeviceControllerInterface/1.1.3")
|
"eu.atb.ptu.plugin.DeviceControllerInterface/1.1.4")
|
||||||
|
|
||||||
|
|
||||||
namespace nsDeviceControllerInterface {
|
namespace nsDeviceControllerInterface {
|
||||||
|
Reference in New Issue
Block a user