#ifndef APPCONTROL_H #define APPCONTROL_H #include #include "version.h" #include "atb_system.h" #include "ATBAPP.h" #include "plugins/PluginManager.h" #include "plugins/CC/CCInterface.h" #include "plugins/CalculatePrice/CalculatePriceInterface.h" #include "support/VendingData.h" #include "CalculatePrice/CalculatePriceDefault.h" class VMC; class ATBHMIconfig; class VendingData; class QTimer; class AppControl : public QObject { Q_OBJECT public: explicit AppControl(QObject *parent = nullptr); PROGRAM_MODE getCurrentProgramMode(); bool requestProgramMode(PROGRAM_MODE newProgramMode); bool isProgramModeSELL(); bool isProgramModeSELL_ENABLE(); bool isProgramModeSERVICE(); bool isProgramModeIDLE(); bool isProgramModeOOO(); public slots: void onRequestOfflineProcessing(); // e.g. by button event, // by vmc screen command, // by vmc data display command // ... void restartSellModeTimeoutTimer(); // slots for LED configuration: void LEDs_default(); void LEDs_ooo(); // CC-Plugin void onCCStartTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCConfirmTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCCancelTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCRevertTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCPreAuthTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCBookTotalTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCCancelPreAuthTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result); void onCCRequestCardInfoResult(nsCCInterface::RESULT_STATE resultState, QString & result); // CalculatePricePlugin #ifdef USE_CALCULATEPRICE_PLUGIN void onCalculatePrice(QString & licensePlate); void onCalculatePrice(uint parktime); void onCalculatePrice(QString & cardInfo, QString & cardTransactionInfo); void onCalculatePrice(); void onCalculatedPrice(nsCalculatePriceInterface::RESULT_STATE resultState, const QString & accessInformation, const QString & accessInformationType, const QString & amountDuePeriodStart, const QString & amountDuePeriodEnd, const PriceInfo & priceInfo, const QString & errorCode, const QString & errorDescription); void onProcessTransaction(nsCalculatePriceInterface::RESULT_STATE resultState, const QString & errorCode, const QString & errorDescription); QChar private_getAccessInformationField(const QString & accessInformationType); QString private_calculatedPrice(nsCalculatePriceInterface::RESULT_STATE resultState, const QString & accessInformation, const QString & accessInformationType, const QString & amountDuePeriodStart, const QString & amountDuePeriodEnd, const PriceInfo & priceInfo, const QString & errorCode, const QString & errorDescription); #endif // USE_CALCULATEPRICE_PLUGIN // vmc control void onVMCFormatedString(FormatedStringList data); void onVMCSellData(quint8 nr,QString data); // deprecated vmc control for cc // this allows cc control by screens void onVMC_ccStartTransaction(); void onVMC_ccCancelTransaction(); void onVMC_ccConfirmTransaction(); void onVMC_ccStartPreauthorisation(); void onVMC_ccCancelPreauthorisation(); void onVMC_ccConfirmPreauthorisation(); void onVMC_ccStartReadCard(); // new control interface void onControl_switchMode(quint16 mode); void onControl_switchScreen(quint16 screen); void onControl_setText(quint16 screenNr, quint16 textNr, quint16 lang, QString text); void onShowCurrentIdle(); void onShowCurrentOOO(); // vendingData void onSetVendingData(QString key, QByteArray value); signals: // signals for signaling a mode change to sub-modules: void changedProgramMode(PROGRAM_MODE newProgramMode); void changedModeToSELL(); void changedModeToSERVICE(); void changedModeToIDLE(); void changedModeToOOO(); void doOfflineProcessing(); // cc protected: bool eventFilter(QObject *obj, QEvent *ev); private: PROGRAM_MODE programmode; ATBHMIconfig *config; ATB_system *system; VMC *vmc; VendingData *vendingData; PluginManager *pluginManager; void private_setupProgramModeSELL(); void private_setupProgramModeSELL_ENABLE(); void private_setupProgramModeSERVICE(); void private_setupProgramModeIDLE(); void private_setupProgramModeOOO(); void private_unsetProgramModeSERVICE(); void private_unsetProgramModeOOO(); // plugins CCInterface *cc; CalculatePriceInterface *calcPriceBackend; // init methods called from constructor void private_initCCPlugin(); void private_initCalculatePricePlugin(); void private_initSimulationPlugin(); // timers QTimer *sellModeTimeoutTimer; // flag to prepare for OOO in next idle quint8 prepareInternalOOO; // action processing quint8 startAction(APP_ACTION action); #if defined (ARCH_DesktopLinux) void private_screenshot(); #endif #if defined (CUST00318) // hack for 00318/Nexobility void private_CUST00318_handle_CC_ERROR_0x13(); #endif // mouse detection #if defined (ARCH_PTU4) QFileSystemWatcher *pInputDeviceWatcher; void setMouse(const QString & mouseDeviceFile, const QString & touchDeviceFile); void closeMouse(const QString & mouseDeviceFile, const QString & touchDeviceFile); bool mousePresent; #endif private slots: // firstRun -> things done with running event loop void firstRun(); // timers void onSellModeTimerTimeout(); /******************************************** * CC - Slots */ void onCCStartTransaction(); void onCCStartConfirmTransaction(); void onCCCancelTransaction(); void onCCStartPreauthorisation(); void onCCConfirmPreauthorisation(); void onCCCancelPreauthorisationRequest(); void onCCPrintReceipt(); void onCCErrorBackend(QString & result); void onCCStartReadCard(); /*******************************************/ // called, if system was woken up void onWakeUp(); /******************************************** * Barcode / QR-Code - Slots */ #ifdef USE_BARCODESCANNER // called, if a barcode was read from scanner void onReadBarcode(QString & barcode); // called, if a new barcode should be created and sent to vmc void onRequestNewBarcode(); #endif /*******************************************/ #if defined (Q_WS_QWS) void onInputDeviceWatcher_directoryChanged(const QString& path); #endif /******************************************** * ISMAS */ void onProcessed_QRCode(QHash data); /******************************************** * Signal System Errors */ void onSignalSystemErrors(const QString & errorCode, const QString & errorDescription); }; #endif // APPCONTROL_H