diff --git a/src/ATBAPP/UnifiedDCInterface.cpp b/src/ATBAPP/UnifiedDCInterface.cpp new file mode 100644 index 0000000..3423228 --- /dev/null +++ b/src/ATBAPP/UnifiedDCInterface.cpp @@ -0,0 +1,19 @@ +#include "DeviceControllerInterface.h" + + +using UNIFIED_PLUGIN_STATE = UnifiedDCVMCInterface::UNIFIED_PLUGIN_STATE; + + +template<> +UNIFIED_PLUGIN_STATE UnifiedDCVMCInterface::initPlugin(QObject *eventReceiver, QSettings const &settings) { + + + switch(static_cast(this)->initDCPlugin(eventReceiver, settings)) { + case nsDeviceControllerInterface::PLUGIN_STATE::INITIALIZED: + return UNIFIED_PLUGIN_STATE::INITIALIZED; + case nsDeviceControllerInterface::PLUGIN_STATE::NOT_INITIALIZED: + return UNIFIED_PLUGIN_STATE::NOT_INITIALIZED; + } + + return UNIFIED_PLUGIN_STATE::NOT_INITIALIZED; +} diff --git a/src/ATBAPP/UnifiedDCVMCInterface.h b/src/ATBAPP/UnifiedDCVMCInterface.h new file mode 100644 index 0000000..ce924a4 --- /dev/null +++ b/src/ATBAPP/UnifiedDCVMCInterface.h @@ -0,0 +1,147 @@ +#ifndef UNIFIED_DCVMC_INTERFACE_H_INCLUDED +#define UNIFIED_DCVMC_INTERFACE_H_INCLUDED + +#include +#include + +#include + +#include +#include + +#include "ATBAPPplugin.h" + +class UnifiedDCVMCInterface : public QObject, public ATBAPPplugin { + + Q_OBJECT + Q_INTERFACES(ATBAPPplugin) + +public: + 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. */ + }; + enum class TICKET_VARIANT : quint8 { + PARKING_TICKET, + RECEIPT, + ERROR_RECEIPT, + START_RECEIPT, // e.g. Szeged Start + STOP_RECEIPT, // e.g. Szeged Stop + }; + + explicit UnifiedDCVMCInterface() = default; + virtual ~UnifiedDCVMCInterface() {} + + virtual PLUGIN_STATE initPlugin(QObject *eventReceiver, QSettings const &settings) = 0; + + // mandantory ATBAPP plugin methods: + virtual PLUGIN_STATE getState() = 0; + virtual QString getLastError() = 0; + virtual QString getLastErrorDescription() = 0; + + virtual QString getString(RESULT_STATE resultState) = 0; + +public slots: + virtual void onChangedProgramModeToSELL() = 0; + virtual void onChangedProgramModeToSERVICE() = 0; + virtual void onChangedProgramModeToIDLE() = 0; + virtual void onChangedProgramModeToOOO() = 0; + + virtual void startPhysicalLayer() = 0; + virtual void stopPhysicalLayer() = 0; + virtual void reboot() = 0; + virtual void reset() = 0; + +signals: + void printTicketFinished(RESULT_STATE resultState, + const QString & errorCode, + const QString & errorDescription); + void printReceiptFinished(RESULT_STATE resultState, + const QString & errorCode, + const QString & errorDescription); + + /** + * emitted on e.g. a coin input + */ + void cashInputEvent(RESULT_STATE resultState, + CASH_STATE cashState, + const QString & newCashValue, + /* additional variables? */ + const QString & errorCode, + const QString & errorDescription); + + /** + * 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 + */ + void cashInputFinished(RESULT_STATE resultState, + const QString & newCashValue, + /* additional variables? */ + const QString & errorCode, + const QString & errorDescription); + + + /** + * emitted e.g. if service door is opened + */ + void requestModeSERVICE(); + + /** + * emitted e.g. if doors are closed + */ + void requestModeIDLE(); + + /** + * emitted e.g. on severe errors + */ + void requestModeOOO(); + + /** + * emitted e.g. if service door is opened + */ + void requestAccountResponse(const QHash & accountData); + + + + + + /** + * emitted on error + * depending on errorCode: + * -> interrupt selling process + * -> machine can go to state OOO + * -> send error event to ISMAS + * -> ... + */ + void Error( + /* additional variables? */ + const QString & errorCode, + const QString & errorDescription); + +}; + +Q_DECLARE_INTERFACE(UnifiedDCVMCInterface, + "eu.atb.ptu.plugin.UnifiedDCVMCInterface/1.0") + +using PLUGIN_STATE = UnifiedDCVMCInterface::PLUGIN_STATE; +using RESULT_STATE = UnifiedDCVMCInterface::RESULT_STATE; +using CASH_STATE = UnifiedDCVMCInterface::CASH_STATE; +using TICKET_VARIANT = UnifiedDCVMCInterface::TICKET_VARIANT; + +#endif // UNIFIED_DCVMC_INTERFACE_H_INCLUDED