First compiling version for high level vending interface
This commit is contained in:
parent
3029b8da04
commit
01f8c1e49c
10
DCPlugin.pro
10
DCPlugin.pro
@ -71,8 +71,16 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
|||||||
#else: unix:!android: target.path = /opt/$${TARGET}/bin
|
#else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
#!isEmpty(target.path): INSTALLS += target
|
#!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
# ATBAPP interface
|
||||||
|
HEADERS += \
|
||||||
|
src/ATBAPP/ATBAPPplugin.h \
|
||||||
|
src/ATBAPP/DeviceControllerInterface.h \
|
||||||
|
src/ATBAPP/ATBHealthEvent.h \
|
||||||
|
src/ATBAPP/ATBDeviceControllerPlugin.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
src/ATBAPP/ATBHealthEvent.cpp \
|
||||||
|
src/ATBAPP/ATBDeviceControllerPlugin.cpp
|
||||||
|
|
||||||
DISTFILES += \
|
DISTFILES += \
|
||||||
generate-version.sh
|
generate-version.sh
|
||||||
|
@ -99,7 +99,6 @@ class hwapi : public QObject,
|
|||||||
public hwinf
|
public hwinf
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PLUGIN_METADATA(IID "Atb.Psa2020.software.HWapi/1.0" ) //FILE "HWapi.json")
|
|
||||||
Q_INTERFACES(hwinf)
|
Q_INTERFACES(hwinf)
|
||||||
|
|
||||||
DownloadResult sendNextAddress(int bNum) const;
|
DownloadResult sendNextAddress(int bNum) const;
|
||||||
|
22
src/ATBAPP/ATBAPPplugin.h
Normal file
22
src/ATBAPP/ATBAPPplugin.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef ATBAPPPLUGIN_H
|
||||||
|
#define ATBAPPPLUGIN_H
|
||||||
|
|
||||||
|
/***********************************************************
|
||||||
|
* a simple class with only one method for plugin info
|
||||||
|
*/
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class ATBAPPplugin
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual const QString & getPluginInfo() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_INTERFACE(ATBAPPplugin,
|
||||||
|
"eu.atb.ptu.plugin.ATBAPPplugin/0.9")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // ATBAPPPLUGIN_H
|
129
src/ATBAPP/ATBDeviceControllerPlugin.cpp
Normal file
129
src/ATBAPP/ATBDeviceControllerPlugin.cpp
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
#include "src/ATBAPP/ATBDeviceControllerPlugin.h"
|
||||||
|
#include "src/ATBAPP/ATBHealthEvent.h"
|
||||||
|
|
||||||
|
|
||||||
|
ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent) : QObject(parent),
|
||||||
|
pluginState(PLUGIN_STATE::NOT_INITIALIZED)
|
||||||
|
{
|
||||||
|
this->pluginInfo = QString::fromUtf8(pluginInfoString.c_str());
|
||||||
|
|
||||||
|
this->hw = new hwapi();
|
||||||
|
}
|
||||||
|
|
||||||
|
ATBDeviceControllerPlugin::~ATBDeviceControllerPlugin() {}
|
||||||
|
|
||||||
|
PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *healthEventReceiver, const QSettings & settings)
|
||||||
|
{
|
||||||
|
this->healthEventReceiver = healthEventReceiver;
|
||||||
|
|
||||||
|
// Read a sample variable from setting
|
||||||
|
QString sampleSetting = settings.value("DEVICE_CONTROLLER/sampleVariable", "defaultValue").toString();
|
||||||
|
|
||||||
|
this->pluginState = PLUGIN_STATE::INITIALIZED;
|
||||||
|
|
||||||
|
return pluginState;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TASKS: Cash handling -------------------------------------------------------
|
||||||
|
void ATBDeviceControllerPlugin::requestStartCashInput(const QString & amount)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ATBDeviceControllerPlugin::requestStopCashInput()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ATBDeviceControllerPlugin::cashCollect()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ATBDeviceControllerPlugin::cashAbort()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TASKS: printing ------------------------------------------------------------
|
||||||
|
void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant> & printingData)
|
||||||
|
{
|
||||||
|
struct T_dynDat *dynTicketData = new T_dynDat;
|
||||||
|
|
||||||
|
strncpy((char*)dynTicketData->licensePlate, printingData["licenseplate"].toByteArray().data(), 7);
|
||||||
|
strncpy((char*)dynTicketData->vendingPrice, printingData["amount"].toByteArray().data(), 7);
|
||||||
|
strncpy((char*)dynTicketData->parkingEnd, printingData["parkingend"].toByteArray().data(), 7);
|
||||||
|
strncpy((char*)dynTicketData->currentTime, printingData["currentTime"].toByteArray().data(), 7);
|
||||||
|
strncpy((char*)dynTicketData->currentDate, printingData["currentDate"].toByteArray().data(), 7);
|
||||||
|
|
||||||
|
this->hw->prn_printDocument(1, dynTicketData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************************
|
||||||
|
* Mandatory plugin methods
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
PLUGIN_STATE ATBDeviceControllerPlugin::getState()
|
||||||
|
{
|
||||||
|
return this->pluginState;
|
||||||
|
}
|
||||||
|
|
||||||
|
quint32 ATBDeviceControllerPlugin::getLastError()
|
||||||
|
{
|
||||||
|
return this->errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString & ATBDeviceControllerPlugin::getLastErrorDescription()
|
||||||
|
{
|
||||||
|
return this->errorDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString & ATBDeviceControllerPlugin::getPluginInfo()
|
||||||
|
{
|
||||||
|
return this->pluginInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const QString ATBDeviceControllerPlugin::getString(nsDeviceControllerInterface::RESULT_STATE resultState)
|
||||||
|
{
|
||||||
|
QString str;
|
||||||
|
|
||||||
|
switch (resultState) {
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::SUCCESS:
|
||||||
|
str = QString("RESULT_STATE::SUCCESS");
|
||||||
|
break;
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND:
|
||||||
|
str = QString("RESULT_STATE::ERROR_BACKEND");
|
||||||
|
break;
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::ERROR_TIMEOUT:
|
||||||
|
str = QString("RESULT_STATE::ERROR_TIMEOUT");
|
||||||
|
break;
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::ERROR_PROCESS:
|
||||||
|
str = QString("RESULT_STATE::ERROR_PROCESS");
|
||||||
|
break;
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::ERROR_RETRY:
|
||||||
|
str = QString("RESULT_STATE::ERROR_RETRY");
|
||||||
|
break;
|
||||||
|
case nsDeviceControllerInterface::RESULT_STATE::INFO:
|
||||||
|
str = QString("RESULT_STATE::INFO");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************************************
|
||||||
|
* ... end
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if QT_VERSION < 0x050000
|
||||||
|
Q_EXPORT_PLUGIN2( ATBDeviceControllerPlugin, ATBDeviceControllerPlugin )
|
||||||
|
#endif
|
108
src/ATBAPP/ATBDeviceControllerPlugin.h
Normal file
108
src/ATBAPP/ATBDeviceControllerPlugin.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
#ifndef ATBDEVICECONTROLLERPLUGIN_H
|
||||||
|
#define ATBDEVICECONTROLLERPLUGIN_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "src/ATBAPP/DeviceControllerInterface.h"
|
||||||
|
#include "src/ATBAPP/ATBAPPplugin.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "interfaces.h"
|
||||||
|
#include "hwapi.h"
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <thread>
|
||||||
|
#include <memory>
|
||||||
|
#include <QSharedMemory>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
using namespace nsDeviceControllerInterface;
|
||||||
|
|
||||||
|
class QSettings;
|
||||||
|
|
||||||
|
class ATBDeviceControllerPlugin : public QObject,
|
||||||
|
public DeviceControllerInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(ATBAPPplugin)
|
||||||
|
Q_INTERFACES(DeviceControllerInterface)
|
||||||
|
#if QT_VERSION >= 0x050000
|
||||||
|
Q_PLUGIN_METADATA( IID "ATBDeviceControllerPlugin" )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ATBDeviceControllerPlugin(QObject *parent = nullptr);
|
||||||
|
~ATBDeviceControllerPlugin();
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// interface:
|
||||||
|
PLUGIN_STATE initDCPlugin(QObject *healthEventReceiver, const QSettings & settings);
|
||||||
|
|
||||||
|
// TASKS: Cash handling -------------------------------------------------------
|
||||||
|
void requestStartCashInput(const QString & amount);
|
||||||
|
void requestStopCashInput();
|
||||||
|
void cashCollect();
|
||||||
|
void cashAbort();
|
||||||
|
|
||||||
|
// TASKS: printing ------------------------------------------------------------
|
||||||
|
void requestPrintTicket(const QHash<QString, QVariant> & printingData);
|
||||||
|
|
||||||
|
// mandantory ATBAPP plugin methods: ------------------------------------------
|
||||||
|
nsDeviceControllerInterface::PLUGIN_STATE getState();
|
||||||
|
quint32 getLastError();
|
||||||
|
const QString & getLastErrorDescription();
|
||||||
|
|
||||||
|
const QString & getPluginInfo();
|
||||||
|
|
||||||
|
// helpers e.g. for debug / log
|
||||||
|
const QString getString(nsDeviceControllerInterface::RESULT_STATE resultState);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void printTicketFinished(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription);
|
||||||
|
|
||||||
|
void cashInputEvent(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
nsDeviceControllerInterface::CASH_STATE cashState,
|
||||||
|
const QString & newCashValue,
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription);
|
||||||
|
|
||||||
|
void cashInputFinished(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
const QString & newCashValue,
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription);
|
||||||
|
|
||||||
|
void requestServiceMode();
|
||||||
|
|
||||||
|
void Error(
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
quint32 errorCode;
|
||||||
|
QString errorCodeString;
|
||||||
|
QString errorDescription;
|
||||||
|
QString pluginInfo;
|
||||||
|
|
||||||
|
bool useDebug;
|
||||||
|
|
||||||
|
PLUGIN_STATE pluginState;
|
||||||
|
|
||||||
|
QObject* healthEventReceiver;
|
||||||
|
|
||||||
|
hwinf* hw;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ATBDEVICECONTROLLERPLUGIN_H
|
25
src/ATBAPP/ATBHealthEvent.cpp
Normal file
25
src/ATBAPP/ATBHealthEvent.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "src/ATBAPP/ATBHealthEvent.h"
|
||||||
|
|
||||||
|
ATBHealthEvent::ATBHealthEvent(ATB_HEALTH_MODE mode, const QString & errorNumber, const QString & errorDescription) :
|
||||||
|
QEvent(ATB_HEALTH_EVENT),
|
||||||
|
healthMode(mode),
|
||||||
|
errorNumber(errorNumber),
|
||||||
|
errorDescription(errorDescription)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ATBHealthEvent::getErrorNumber()
|
||||||
|
{
|
||||||
|
return this->errorNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ATBHealthEvent::getErrorDescription()
|
||||||
|
{
|
||||||
|
return this->errorDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
ATB_HEALTH_MODE ATBHealthEvent::getMode()
|
||||||
|
{
|
||||||
|
return this->healthMode;
|
||||||
|
}
|
44
src/ATBAPP/ATBHealthEvent.h
Normal file
44
src/ATBAPP/ATBHealthEvent.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef ATBHEALTHEVENT_H
|
||||||
|
#define ATBHEALTHEVENT_H
|
||||||
|
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
enum class ATB_HEALTH_MODE : quint8;
|
||||||
|
|
||||||
|
const QEvent::Type ATB_HEALTH_EVENT = static_cast<QEvent::Type>(QEvent::User + 1);
|
||||||
|
|
||||||
|
|
||||||
|
class ATBHealthEvent : public QEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
ATBHealthEvent(ATB_HEALTH_MODE mode, const QString & errorNumber, const QString & errorDescription);
|
||||||
|
|
||||||
|
QString getErrorNumber();
|
||||||
|
QString getErrorDescription();
|
||||||
|
ATB_HEALTH_MODE getMode();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
ATB_HEALTH_MODE healthMode;
|
||||||
|
QString errorNumber;
|
||||||
|
QString errorDescription;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum class ATB_HEALTH_MODE : quint8 {
|
||||||
|
WARNING,
|
||||||
|
ERROR,
|
||||||
|
WARNING_CORRECTION,
|
||||||
|
ERROR_CORRECTION,
|
||||||
|
DEBUG,
|
||||||
|
STATE,
|
||||||
|
UNSPECIFIED
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ATBHEALTHEVENT_H
|
142
src/ATBAPP/DeviceControllerInterface.h
Normal file
142
src/ATBAPP/DeviceControllerInterface.h
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
#ifndef DEVICECONTROLLERINTERFACE_H
|
||||||
|
#define DEVICECONTROLLERINTERFACE_H
|
||||||
|
|
||||||
|
#include <QtPlugin>
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include "ATBAPPplugin.h"
|
||||||
|
|
||||||
|
namespace nsDeviceControllerInterface {
|
||||||
|
enum class PLUGIN_STATE : quint8;
|
||||||
|
enum class RESULT_STATE : quint8;
|
||||||
|
enum class CASH_STATE : quint8;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceControllerInterface : public ATBAPPplugin
|
||||||
|
{
|
||||||
|
Q_INTERFACES(ATBAPPplugin)
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~DeviceControllerInterface() {}
|
||||||
|
|
||||||
|
virtual nsDeviceControllerInterface::PLUGIN_STATE initDCPlugin(QObject *healthEventReceiver,
|
||||||
|
const QSettings & settings) = 0;
|
||||||
|
|
||||||
|
// TASKS: Cash handling -------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* enables coin input
|
||||||
|
* amount = "0": pay-up
|
||||||
|
* amount > "0": pay-down
|
||||||
|
*/
|
||||||
|
virtual void requestStartCashInput(const QString & amount) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called e.g. on Button "NEXT" in pay-up (direct coin input)
|
||||||
|
*/
|
||||||
|
virtual void requestStopCashInput() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called e.g. on Button "NEXT" in pay-up (direct coin input)
|
||||||
|
*/
|
||||||
|
virtual void cashCollect() = 0;
|
||||||
|
virtual void cashAbort() = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TASKS: printing ------------------------------------------------------------
|
||||||
|
virtual void requestPrintTicket(const QHash<QString, QVariant> & printingData) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// mandantory ATBAPP plugin methods:
|
||||||
|
virtual nsDeviceControllerInterface::PLUGIN_STATE getState() = 0;
|
||||||
|
virtual quint32 getLastError() = 0;
|
||||||
|
virtual const QString & getLastErrorDescription() = 0;
|
||||||
|
|
||||||
|
// return a plugin description in JSON or XML
|
||||||
|
// -> ATBAPPplugin::getPluginInfo()
|
||||||
|
|
||||||
|
// helpers e.g. for debug / log
|
||||||
|
virtual const QString getString(nsDeviceControllerInterface::RESULT_STATE resultState) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
signals:
|
||||||
|
virtual void printTicketFinished(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* emitted on e.g. a coin input
|
||||||
|
*/
|
||||||
|
virtual void cashInputEvent(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
nsDeviceControllerInterface::CASH_STATE cashState,
|
||||||
|
const QString & newCashValue,
|
||||||
|
/* additional variables? */
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* emitted if cashInput has been stopped, e.g. in result to task requestStopCashInput():
|
||||||
|
* -> shutter is blocked
|
||||||
|
* -> no cash input is possible
|
||||||
|
* -> coins are in cache
|
||||||
|
*/
|
||||||
|
virtual void cashInputFinished(nsDeviceControllerInterface::RESULT_STATE resultState,
|
||||||
|
const QString & newCashValue,
|
||||||
|
/* additional variables? */
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* emitted e.g. if service door is opened
|
||||||
|
*/
|
||||||
|
virtual void requestServiceMode() = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* emitted on error
|
||||||
|
* depending on errorCode:
|
||||||
|
* -> interrupt selling process
|
||||||
|
* -> machine can go to state OOO
|
||||||
|
* -> send error event to ISMAS
|
||||||
|
* -> ...
|
||||||
|
*/
|
||||||
|
virtual void Error(
|
||||||
|
/* additional variables? */
|
||||||
|
const QString & errorCode,
|
||||||
|
const QString & errorDescription) = 0;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Q_DECLARE_INTERFACE(DeviceControllerInterface,
|
||||||
|
"eu.atb.ptu.plugin.DeviceControllerInterface/1.0")
|
||||||
|
|
||||||
|
|
||||||
|
namespace nsDeviceControllerInterface {
|
||||||
|
|
||||||
|
enum class PLUGIN_STATE : quint8 {
|
||||||
|
NOT_INITIALIZED = 0,
|
||||||
|
INITIALIZED = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class RESULT_STATE : quint8 {
|
||||||
|
SUCCESS = 1, // operation was successfull
|
||||||
|
ERROR_BACKEND, // error from backend (e.g. backend replies with error)
|
||||||
|
ERROR_TIMEOUT, // the operation timed out
|
||||||
|
ERROR_PROCESS, // internal plugin error, should not occur (this is a bug in implementation)
|
||||||
|
ERROR_RETRY, // retry operation
|
||||||
|
INFO // informational (e.g. display a message, log something etc.)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class CASH_STATE : quint8 {
|
||||||
|
CACHE_EMPTY, // Cache still empty, default state
|
||||||
|
CACHE_INPUT, // Coins are in Cache
|
||||||
|
OVERPAYED,
|
||||||
|
/* t.b.d. */
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // DEVICECONTROLLERINTERFACE_H
|
Loading…
Reference in New Issue
Block a user