Merge branch 'pu/coinIntegration_TS18052023' into pu/integration
This commit is contained in:
commit
88cc71e05f
@ -308,6 +308,8 @@ class T_datif : public QMainWindow
|
||||
QTimer *datif_trigger;
|
||||
uint8_t selectedSlaveAddr;
|
||||
|
||||
int datif_noResponseCtr;
|
||||
|
||||
private slots:
|
||||
char datif_cycleSend();
|
||||
void StoredRecData();
|
||||
|
@ -1,8 +1,30 @@
|
||||
/*
|
||||
matching interfaces.h:
|
||||
|
||||
// History
|
||||
// 11.10.2021: V1.0 222 functions
|
||||
// 23.12.2021: V1.1 added block-parameter to function "read mifare data"
|
||||
// 30.12.2021: V1.2 added function: mif_clearDataBuffer(), mif_isBlockAvailable(uint8_t blkNr) and mif_getAvailableDataBlocks()
|
||||
// 1.1.2022: V1.3 Mifare extended. ( background: read 16 x 48byte from card to DC, read 12 x 64byte from DC to CA)
|
||||
// new: read full card with 768bytes from HWapi without block borders
|
||||
// added: mif_getNrOfAvailableDataBytes mif_getCardData768byteDec(uint8_t *buf, uint16_t bufferSize)
|
||||
// mif_getCardDataDec(uint16_t fromAddr, uint16_t toAddr, uint8_t *buf, uint16_t bufferSize)
|
||||
// mif_getCardDataStr(bool useHexFormat, char seperator)
|
||||
// 29.03.2023: V3.1 some extensions for PSA1256_ptu5,
|
||||
// V3.2 Bootloader improvement
|
||||
// 12.04.2023: V3.3 new features extended: loading and using Json-files, cash-collection, cash-data-logging
|
||||
|
||||
//#define HWINF_iid "Atb.Psa2020.software.HWapi/3.1"
|
||||
//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.1"
|
||||
#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.3"
|
||||
*/
|
||||
|
||||
|
||||
#ifndef hwapi_H
|
||||
#define hwapi_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <QTimer>
|
||||
#include <QObject>
|
||||
#include "interfaces.h"
|
||||
#include "datIf.h"
|
||||
@ -15,6 +37,7 @@ class hwapi : public QObject,
|
||||
Q_INTERFACES(hwinf)
|
||||
private:
|
||||
void sub_storeSendingText(QByteArray *buf) const;
|
||||
QTimer *hwapi_TimerPayment;
|
||||
|
||||
DownloadResult sendNextAddress(int bNum) const;
|
||||
DownloadResult sendNextDataBlock(QByteArray const &b, int bNum) const;
|
||||
@ -161,6 +184,13 @@ public:
|
||||
uint8_t bl_exitBL(uint8_t *sendData) const override;
|
||||
// minimum size of sendData-buffer: 5byte retval: length
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Level 2 DC2-onboard devices
|
||||
// WR: set time
|
||||
@ -963,6 +993,17 @@ public:
|
||||
bool cash_startPayment(uint32_t amount) const override;
|
||||
// 17.4.23TS: extended to 32bit
|
||||
|
||||
uint8_t cash_paymentProcessing(void) const override;
|
||||
// run this function periodically while coin payment process to generate necessary signals
|
||||
// return value:
|
||||
// 0: stopped 1: starting up 2: coin collection
|
||||
// 3: finished by User (Push button) 4: finished, Max-Value collected
|
||||
// 5: finished by escrow
|
||||
// 10,11: error cannot start
|
||||
// 12: timeout while payment, coins returned
|
||||
// 13: stopped by unexpected error
|
||||
|
||||
|
||||
bool cash_cancelPayment(void) const override;
|
||||
// and return coins
|
||||
|
||||
@ -1032,6 +1073,7 @@ public:
|
||||
|
||||
void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const override;
|
||||
|
||||
bool sys_areDCdataValid(void) const override;
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ supervise all hardware components
|
||||
@ -1076,14 +1118,31 @@ public:
|
||||
signals:
|
||||
void hwapi_templatePrintFinished_OK(void) const override;
|
||||
void hwapi_templatePrintFinished_Err(void) const override;
|
||||
|
||||
void hwapi_coinCollectionJustStarted(void) const override;
|
||||
void hwapi_coinCollectionAborted(void) const override;
|
||||
|
||||
void hwapi_gotNewCoin(void) const override;
|
||||
void hwapi_vendStopByMax(void) const override;
|
||||
void hwapi_vendStopByPushbutton(void) const override;
|
||||
void hwapi_payStopByMax(void) const override;
|
||||
void hwapi_payStopByPushbutton(void) const override;
|
||||
|
||||
void hwapi_payStopByEscrow(void) const override;
|
||||
void hwapi_payStopByError(void) const override;
|
||||
void hwapi_payStopByTimeout(void) const override;
|
||||
void hwapi_payCancelled(void) const override;
|
||||
|
||||
void hwapi_coinProcessJustStopped(void) const override;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private slots:
|
||||
void hwapi_slotPrintFinished_OK(void);
|
||||
void hwapi_slotPrintFinished_Err(void);
|
||||
void hwapi_slotGotCoin(void);
|
||||
void hwapi_slotPayProc(void);
|
||||
|
||||
};
|
||||
|
||||
|
@ -1452,6 +1452,8 @@ public:
|
||||
virtual bool cash_startPayment(uint32_t amount) const=0;
|
||||
// 17.4.23TS: extended to 32bit
|
||||
|
||||
virtual uint8_t cash_paymentProcessing(void) const=0;
|
||||
|
||||
virtual uint32_t getInsertedAmount(void) const=0;
|
||||
|
||||
virtual uint16_t getLastInsertedCoin(void) const=0;
|
||||
@ -1616,6 +1618,8 @@ public:
|
||||
|
||||
virtual void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const=0;
|
||||
|
||||
virtual bool sys_areDCdataValid(void) const=0;
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ supervise all hardware components
|
||||
// ------------ assess the machine state
|
||||
@ -1669,9 +1673,20 @@ public:
|
||||
signals:
|
||||
virtual void hwapi_templatePrintFinished_OK(void) const=0;
|
||||
virtual void hwapi_templatePrintFinished_Err(void) const=0;
|
||||
|
||||
virtual void hwapi_coinCollectionJustStarted(void) const=0;
|
||||
virtual void hwapi_coinCollectionAborted(void) const=0;
|
||||
|
||||
virtual void hwapi_gotNewCoin(void) const=0;
|
||||
virtual void hwapi_vendStopByMax(void) const=0;
|
||||
virtual void hwapi_vendStopByPushbutton(void) const=0;
|
||||
virtual void hwapi_payStopByMax(void) const=0;
|
||||
virtual void hwapi_payStopByPushbutton(void) const=0;
|
||||
|
||||
virtual void hwapi_payStopByEscrow(void) const=0;
|
||||
virtual void hwapi_payStopByError(void) const=0;
|
||||
virtual void hwapi_payStopByTimeout(void) const=0;
|
||||
virtual void hwapi_payCancelled(void) const=0;
|
||||
|
||||
virtual void hwapi_coinProcessJustStopped(void) const=0;
|
||||
|
||||
};
|
||||
|
||||
|
@ -227,7 +227,7 @@ struct SharedMemBuffer {
|
||||
uint16_t nrOfCoins;
|
||||
bool dcDataValid;
|
||||
uint8_t wakeReason;
|
||||
|
||||
char curPayNewCoin;
|
||||
} store;
|
||||
|
||||
struct T_globTime {
|
||||
|
@ -418,6 +418,7 @@ uint8_t epi_mifGetCardType(uint8_t const *holder);
|
||||
|
||||
void gpi_storeDcDataValid(bool isVal);
|
||||
bool gpi_areDcDataValid();
|
||||
bool epi_areDcDataValid();
|
||||
|
||||
|
||||
|
||||
|
@ -12,10 +12,15 @@ ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent) : QObject(
|
||||
|
||||
this->hw = new hwapi();
|
||||
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_OK()), this, SLOT(onPrintFinishedOK()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_Err()), this, SLOT(onPrintFinishedERR()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_gotNewCoin()), this, SLOT(onCashGotCoin()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_vendStopByMax()), this, SLOT(onCashVendStopByMax()));
|
||||
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_OK()), this, SLOT(onPrintFinishedOK()));
|
||||
//connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_templatePrintFinished_Err()), this, SLOT(onPrintFinishedERR()));
|
||||
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_gotNewCoin()), this, SLOT(onCashGotCoin()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_payStopByMax()), this, SLOT(onCashPayStopByMax()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_payStopByEscrow()), this, SLOT(onCashPayStopByEscrow()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_payStopByError()), this, SLOT(onCashPayStopByError()));
|
||||
connect(dynamic_cast<QObject*>(hw), SIGNAL(hwapi_payStopByTimeout()), this, SLOT(onCashPayStopByTimeout()));
|
||||
|
||||
}
|
||||
|
||||
ATBDeviceControllerPlugin::~ATBDeviceControllerPlugin() {}
|
||||
@ -29,6 +34,7 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *healthEventReceive
|
||||
QByteArray printerEncoding = settings.value("DEVICE_CONTROLLER/printerEnconding", "ISO 8859-2").toString().toLatin1();
|
||||
|
||||
|
||||
hw->dc_autoRequest(true);
|
||||
|
||||
// open serial port
|
||||
hw->dc_openSerial(5, "115200", serialPort, 1);
|
||||
@ -51,6 +57,9 @@ void ATBDeviceControllerPlugin::requestStartCashInput(const QString & amount)
|
||||
qCritical() << "Start Cash vending with amount = " << amount;
|
||||
|
||||
uint32_t amountInt = static_cast<uint32_t>(amount.toUInt());
|
||||
|
||||
if (amountInt == 0) amountInt = UINT_MAX;
|
||||
|
||||
hw->cash_startPayment(amountInt);
|
||||
}
|
||||
|
||||
@ -127,6 +136,8 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: wird hier nur 'licensePlate' gedruckt?
|
||||
if (!this->hw->prn_sendDynamicPrnValues(dynTicketData->licensePlate)) {
|
||||
this->errorCode = "hwapi::prn_sendDynamicPrnValues";
|
||||
@ -145,7 +156,7 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
return;
|
||||
}
|
||||
|
||||
QTimer::singleShot(500, this, SLOT(onPrinterDataPrepared()));
|
||||
QTimer::singleShot(1000, this, SLOT(onPrinterDataPrepared()));
|
||||
}
|
||||
|
||||
|
||||
@ -178,7 +189,7 @@ void ATBDeviceControllerPlugin::onPrinterPrintNextTemplate()
|
||||
else {
|
||||
// print next template
|
||||
this->currentTemplate++;
|
||||
QTimer::singleShot(1000, this, SLOT(onPrinterPrintNextTemplate()));
|
||||
QTimer::singleShot(2000, this, SLOT(onPrinterPrintNextTemplate()));
|
||||
}
|
||||
|
||||
}
|
||||
@ -234,7 +245,7 @@ void ATBDeviceControllerPlugin::onCashGotCoin()
|
||||
}
|
||||
|
||||
|
||||
void ATBDeviceControllerPlugin::onCashVendStopByMax()
|
||||
void ATBDeviceControllerPlugin::onCashPayStopByMax()
|
||||
{
|
||||
// DEBUG
|
||||
qCritical() << "ATBDeviceControllerPlugin::onCashVendStopByMax()";
|
||||
@ -250,6 +261,55 @@ void ATBDeviceControllerPlugin::onCashVendStopByMax()
|
||||
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onCashPayStopByEscrow()
|
||||
{
|
||||
// DEBUG
|
||||
qCritical() << "ATBDeviceControllerPlugin::onCashPayStopByEscrow()";
|
||||
|
||||
uint32_t amountInt = this->hw->getInsertedAmount();
|
||||
|
||||
QString amountString = QString::number(amountInt);
|
||||
|
||||
emit this->cashInputFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND,
|
||||
amountString,
|
||||
"",
|
||||
"");
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onCashPayStopByError()
|
||||
{
|
||||
// DEBUG
|
||||
qCritical() << "ATBDeviceControllerPlugin::onCashPayStopByError()";
|
||||
|
||||
uint32_t amountInt = this->hw->getInsertedAmount();
|
||||
|
||||
QString amountString = QString::number(amountInt);
|
||||
|
||||
emit this->cashInputFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND,
|
||||
amountString,
|
||||
"",
|
||||
"");
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onCashPayStopByTimeout()
|
||||
{
|
||||
// DEBUG
|
||||
qCritical() << "ATBDeviceControllerPlugin::onCashPayStopByTimeout()";
|
||||
|
||||
uint32_t amountInt = this->hw->getInsertedAmount();
|
||||
|
||||
QString amountString = QString::number(amountInt);
|
||||
|
||||
emit this->cashInputFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND,
|
||||
amountString,
|
||||
"",
|
||||
"");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************************************
|
||||
* Mandatory plugin methods
|
||||
*
|
||||
|
@ -119,7 +119,10 @@ private slots:
|
||||
|
||||
// cash payment
|
||||
void onCashGotCoin();
|
||||
void onCashVendStopByMax();
|
||||
void onCashPayStopByMax();
|
||||
void onCashPayStopByEscrow();
|
||||
void onCashPayStopByError();
|
||||
void onCashPayStopByTimeout();
|
||||
};
|
||||
|
||||
#endif // ATBDEVICECONTROLLERPLUGIN_H
|
||||
|
@ -19,7 +19,7 @@ void T_com::writeToSerial(const QByteArray &data, uint16_t sendLength)
|
||||
sendLen=sendLength;
|
||||
if (CatSerial->isOpen())
|
||||
{
|
||||
//qDebug() << "sending..." << sendBuffer;
|
||||
qCritical() << "sending..." << sendBuffer;
|
||||
CatSerial->write(sendBuffer);
|
||||
} else
|
||||
qDebug() << "error sending, port is not open";
|
||||
|
@ -50,6 +50,7 @@ T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
cycl_running=0;
|
||||
//datif_DCdataValid=0;
|
||||
gpi_storeDcDataValid(0);
|
||||
datif_noResponseCtr=0;
|
||||
}
|
||||
|
||||
void T_datif::resetChain(void)
|
||||
@ -69,6 +70,11 @@ char T_datif::datif_cycleSend()
|
||||
uint8_t length, data[66];
|
||||
bool b_ret;
|
||||
|
||||
datif_noResponseCtr++; // inc every 10ms fehlt noch in SysCont
|
||||
if (datif_noResponseCtr>500) // seit 5s kein Lebenszeichen von DC2
|
||||
gpi_storeDcDataValid(0); // fehlt in SysCont
|
||||
|
||||
|
||||
if (cycl_running)
|
||||
{
|
||||
// request is still running, wait for response before next sending
|
||||
@ -214,7 +220,10 @@ char T_datif::datif_cycleSend()
|
||||
sendINrequestsAutomatic(); // sendCyclicCmd(); // request all cyclic data sequential
|
||||
}
|
||||
else
|
||||
{
|
||||
dif_scanStep=0; // always start from beginning
|
||||
gpi_storeDcDataValid(0); // fehlt in SysCont
|
||||
}
|
||||
}
|
||||
#ifdef USEHANDSHAKES
|
||||
else
|
||||
@ -225,6 +234,7 @@ char T_datif::datif_cycleSend()
|
||||
} else
|
||||
{
|
||||
//qDebug() << "com port not available"; // wird ununterbrochen ausgegeben
|
||||
gpi_storeDcDataValid(0); // fehlt in SysCont
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -842,6 +852,7 @@ char T_datif::isPortOpen(void)
|
||||
|
||||
void T_datif::StoredRecData()
|
||||
{
|
||||
datif_noResponseCtr=0;
|
||||
//qDebug() << "StoreRecData called";
|
||||
// call automatically by T_prot
|
||||
//if (myDCIF->ifDataReceived())
|
||||
@ -876,14 +887,17 @@ char T_datif::loadRecDataFromFrame()
|
||||
ret=myDCIF->getReceivedInData(&SlaveAdr, &readSource, &readAddress, &RdDleng, receivedData);
|
||||
// retval: data valid, only one time true, true if CommandState OK and readState OK
|
||||
gpi_storeResultOfLastRequest(ret);
|
||||
|
||||
if (ret==false)
|
||||
{
|
||||
// qDebug() << "datif: rec data not valid";
|
||||
qCritical() << "datif: rec data not valid";
|
||||
return 0;
|
||||
}
|
||||
|
||||
gpi_storeRecPayLoad(RdDleng, receivedData); // save for host (user of hwapi)
|
||||
|
||||
|
||||
//qCritical() << "loadRecDataFromFrame() readSource = " << readSource;
|
||||
//qDebug() << "\n datif: got valid data, rdsrc:" << readSource << " rdadd:" << readAddress
|
||||
// << " rdlen:" << RdDleng;
|
||||
// qDebug("datif_recData: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ",
|
||||
@ -1201,15 +1215,27 @@ char T_datif::loadRecDataFromFrame()
|
||||
break;
|
||||
|
||||
case CMD2DC_EMP_GET_ALL: //23
|
||||
//qDebug() << "got emp parameters "<< receivedData[1];
|
||||
//qCritical() << "got emp parameters "<< receivedData[1];
|
||||
gpi_storeEmpSettings(64, receivedData);
|
||||
break;
|
||||
|
||||
case CMD2DC_EMP_GOTCOIN: //108
|
||||
|
||||
//qCritical() << "loadRecDataFromFrame() readSource = " << readSource;
|
||||
|
||||
// DB0: 1=coin 0xFF=error 0=got nothing
|
||||
// DB1: last coin signal (value / scale)
|
||||
// DB2,3: last coin value
|
||||
// DB4: lastError from Emp
|
||||
|
||||
// 0: nr of stored coins
|
||||
// 1: got 2:type 3:err 4=valL 5=valH
|
||||
|
||||
// qDebug() << "got emp coin "<< " " << receivedData[0] <<" " << receivedData[1]
|
||||
// << " " << receivedData[2]<< " " << receivedData[3]
|
||||
// << " " << receivedData[4]<< " " << receivedData[5]
|
||||
// << " " << receivedData[6]<< " " << receivedData[7];
|
||||
|
||||
gpi_storeEmpCoinSignal(receivedData[0], &receivedData[1]);
|
||||
break;
|
||||
|
||||
@ -1361,15 +1387,25 @@ char T_datif::loadRecDataFromFrame()
|
||||
break;
|
||||
|
||||
case 112: // get inserted amount in cent in sum
|
||||
|
||||
//qCritical() << "loadRecDataFromFrame() readSource = " << readSource;
|
||||
|
||||
// byte 0..3: amount just paid 4,5:last coin type 6,7: last coin value
|
||||
newInsertedAmount=uchar2ulong(receivedData[3],receivedData[2],receivedData[1],receivedData[0]);
|
||||
uitmp=uchar2uint(receivedData[5],receivedData[4]);
|
||||
uit2=uchar2uint(receivedData[7],receivedData[6]);
|
||||
gpi_storeCurrentPayment(newInsertedAmount, uitmp, uit2);
|
||||
if (newInsertedAmount != lastInsertedAmount)
|
||||
if (uitmp>0) // nur 1x bei neuer Münze
|
||||
{
|
||||
emit datif_gotNewCoin();
|
||||
lastInsertedAmount=newInsertedAmount;
|
||||
gpi_storeCurrentPayment(newInsertedAmount, uitmp, uit2);
|
||||
//void gpi_storeCurrentPayment(uint32_t insertedAmount, uint16_t lastCoinType, uint16_t lastCoinValue)
|
||||
if (newInsertedAmount != lastInsertedAmount)
|
||||
{
|
||||
emit datif_gotNewCoin();
|
||||
//qDebug()<<"emit new coin";
|
||||
|
||||
lastInsertedAmount=newInsertedAmount;
|
||||
}
|
||||
qDebug()<<" store new coin"<<newInsertedAmount<<" "<<uitmp<<" "<<uit2;
|
||||
}
|
||||
|
||||
break;
|
||||
@ -1586,6 +1622,7 @@ struct T_vaultRecord
|
||||
break;
|
||||
|
||||
}
|
||||
readSource=0; // 17.05.2023: to avoid multiple recording
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
237
src/hwapi.cpp
237
src/hwapi.cpp
@ -27,6 +27,8 @@
|
||||
#include "interfaces.h"
|
||||
|
||||
static uint32_t hwapi_lastStartAmount;
|
||||
static uint8_t hwapi_cash_lastCollectionState;
|
||||
static uint8_t hwapi_paymentStarted;
|
||||
|
||||
static const QMap<QString, int> baudrateMap = {
|
||||
{"1200" , 0}, {"9600" , 1}, {"19200" , 2}, {"38400" , 3},
|
||||
@ -51,6 +53,18 @@ hwapi::hwapi(QObject *parent) : QObject(parent) {
|
||||
connect(myDatif, SIGNAL(datif_templatePrintFinished_OK()), this, SLOT(hwapi_slotPrintFinished_OK()));
|
||||
connect(myDatif, SIGNAL(datif_templatePrintFinished_Err()), this, SLOT(hwapi_slotPrintFinished_Err()));
|
||||
connect(myDatif, SIGNAL(datif_gotNewCoin()), this, SLOT(hwapi_slotGotCoin()));
|
||||
|
||||
hwapi_TimerPayment = new QTimer();
|
||||
hwapi_TimerPayment->setSingleShot(true);
|
||||
|
||||
QTimer *hwapi_callPayProc = new QTimer();
|
||||
connect(hwapi_callPayProc, SIGNAL(timeout()), this, SLOT(hwapi_slotPayProc()));
|
||||
hwapi_callPayProc->setSingleShot(false);
|
||||
hwapi_callPayProc->start(100); // in ms
|
||||
|
||||
hwapi_lastStartAmount=0;
|
||||
hwapi_cash_lastCollectionState=0;
|
||||
hwapi_paymentStarted=0;
|
||||
}
|
||||
|
||||
hwapi::~hwapi() {
|
||||
@ -59,6 +73,12 @@ hwapi::~hwapi() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void hwapi::hwapi_slotPayProc(void)
|
||||
{
|
||||
cash_paymentProcessing();
|
||||
}
|
||||
|
||||
void hwapi::hwapi_slotPrintFinished_OK(void) {
|
||||
emit hwapi_templatePrintFinished_OK();
|
||||
}
|
||||
@ -74,7 +94,7 @@ void hwapi::hwapi_slotGotCoin(void) {
|
||||
uint32_t newSum=epi_CurrentPaymentGetAmount();
|
||||
|
||||
if (newSum>=hwapi_lastStartAmount)
|
||||
emit hwapi_vendStopByMax();
|
||||
emit hwapi_payStopByMax();
|
||||
|
||||
}
|
||||
|
||||
@ -1636,6 +1656,20 @@ uint8_t hwapi::coin_escrowFlapOpened(void) const
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Level4 devices are operated by DC
|
||||
// processes with more then one devices
|
||||
// timer controlled or long term processes
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
void hwapi::sendDeviceSettings(uint8_t kindOfPrinter, uint8_t kindOfCoinChecker,
|
||||
uint8_t kindOfMifareReader, uint8_t suppressSleep,
|
||||
uint8_t kindOfModem, uint8_t kindOfCredit) const
|
||||
@ -3507,11 +3541,7 @@ bool hwapi::prn_printTemplate(uint8_t nrOftemplate) const
|
||||
// nr = 1..32
|
||||
{
|
||||
// return true if sending, false if cmd-stack is full
|
||||
|
||||
// 3.5.23: die dynVals und alle templates sollen am stück gesendet
|
||||
uint8_t data[64];
|
||||
data[0]=nrOftemplate;
|
||||
return longFDcmd_set(152, 0,0, 1, data);
|
||||
return sendFDcmd_set(152, 0,0, nrOftemplate,0,0,0);
|
||||
}
|
||||
|
||||
void hwapi::log_getHoldAccountNumbers(uint8_t *nrOfVals, uint16_t *accNr ) const
|
||||
@ -3608,11 +3638,192 @@ bool hwapi::cash_startPayment(uint32_t amount) const
|
||||
dat2=ulong2uchar(amount, 1);
|
||||
dat3=ulong2uchar(amount, 2);
|
||||
dat4=ulong2uchar(amount, 3);
|
||||
hwapi_cash_lastCollectionState=0;
|
||||
sendFDcmd_set(155, 0,0, dat1,dat2,dat3,dat4);
|
||||
|
||||
return sendFDcmd_set(155, 0,0, dat1,dat2,dat3,dat4);
|
||||
hwapi_paymentStarted=1;
|
||||
hwapi_TimerPayment->start(5000); // in ms
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
uint8_t hwapi::cash_paymentProcessing(void) const
|
||||
{
|
||||
// run this function periodically while coin payment process to generate necessary signals:
|
||||
// virtual void hwapi_coinCollectionJustStarted(void) const=0;
|
||||
// virtual void hwapi_coinCollectionAborted(void) const=0;
|
||||
// virtual void hwapi_gotNewCoin(void) const=0; // comes from: hwapi_slotGotCoin()
|
||||
// virtual void hwapi_payStopByMax(void) const=0; // comes from: hwapi_slotGotCoin()
|
||||
// virtual void hwapi_payStopByPushbutton(void) const=0; // comes from cash_stopPayment()
|
||||
// virtual void hwapi_payStopByEscrow(void) const=0;
|
||||
// virtual void hwapi_payStopByError(void) const=0;
|
||||
// virtual void hwapi_payStopByTimeout(void) const=0;
|
||||
// virtual void hwapi_payCancelled(void) const=0;
|
||||
|
||||
// virtual void hwapi_coinProcessJustStopped(void) const=0;
|
||||
|
||||
// return value:
|
||||
// 0: stopped 1: starting up 2: coin collection
|
||||
// 3: finished by User (Push button) 4: finished, Max-Value collected
|
||||
// 5: finished by escrow
|
||||
// 6: money encashed
|
||||
// 7: cancelled
|
||||
// 10,11: error cannot start
|
||||
// 12: timeout while payment, coins returned
|
||||
// 13: stopped by unexpected error
|
||||
|
||||
|
||||
|
||||
struct T_emp empStat;
|
||||
struct T_dynamicCondition myDynMachCond;
|
||||
uint8_t collActiv=0, payInProg, empState;
|
||||
|
||||
if (hwapi_paymentStarted<1)
|
||||
return 0; // off
|
||||
|
||||
collActiv=1; // starting up payment
|
||||
emp_getAllParameters(&empStat);
|
||||
//collActiv=empStat.paymentRunning;
|
||||
|
||||
empState=empStat.state;
|
||||
// 0=start command
|
||||
// 1=powered, do emp ini, send reset
|
||||
// 2=delay
|
||||
// 3=wait for response, requesting status after response
|
||||
// 4,5 through, startup
|
||||
// 6: wait for status
|
||||
// 7: through, startup
|
||||
// 8: IDLE state. EMP is up and ready, polling is running
|
||||
// 9: polling on, payment not yet on
|
||||
// 10: payment, check coins
|
||||
// 11: through
|
||||
// 12: wait 1s for last coin
|
||||
// 90: stop all, 1s delay
|
||||
// 99: off, all stopped
|
||||
|
||||
//qCritical() << "empState = " << empState;
|
||||
|
||||
sys_getDynMachineConditions(&myDynMachCond);
|
||||
payInProg= myDynMachCond.paymentInProgress;
|
||||
// 0: stopped by timeout
|
||||
// 1: running 2: wait4lastCoin
|
||||
// 3: payment stopped manually, coins in Escrow
|
||||
// 4: payment stopped autom, amount collected, coins in Escrow
|
||||
// 5: payment stopped, escrow full, coins in Escrow
|
||||
// 6: coins encashed 7:coins returned
|
||||
// 8: CoinChecker or MDB on Error
|
||||
|
||||
|
||||
if (payInProg==8)
|
||||
{
|
||||
// coin checker faulty, cannot start
|
||||
if (hwapi_paymentStarted==1)
|
||||
{
|
||||
hwapi_paymentStarted=90; // stop due to error
|
||||
emit hwapi_coinCollectionAborted();
|
||||
//sendFDcmd_set(156, 0,0, 2,0,0,0); // cancel payment
|
||||
collActiv=10; // error cannot start
|
||||
}
|
||||
} else
|
||||
|
||||
if (empState>=10 && empState<=12)
|
||||
{
|
||||
// coin acceptance is active now:
|
||||
hwapi_TimerPayment->stop(); // to avoid error signal
|
||||
if (hwapi_paymentStarted==1) // 1=wait for coin checker being ready
|
||||
{
|
||||
hwapi_paymentStarted=2; // coins can be inserted no
|
||||
emit hwapi_coinCollectionJustStarted();
|
||||
}
|
||||
} else
|
||||
{
|
||||
// EMP not (yet) ready
|
||||
|
||||
if (!hwapi_TimerPayment->isActive())
|
||||
{
|
||||
// 5s after start-payment the coin-checker is still not ready
|
||||
hwapi_TimerPayment->stop();
|
||||
if (hwapi_paymentStarted==1)
|
||||
{
|
||||
hwapi_paymentStarted=90; // stop due to error
|
||||
emit hwapi_coinCollectionAborted(); // error cannot start
|
||||
//sendFDcmd_set(156, 0,0, 2,0,0,0); // cancel payment
|
||||
collActiv=11; // error cannot start
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hwapi_paymentStarted==2)
|
||||
{
|
||||
collActiv=2; // coin collection active
|
||||
|
||||
// coins can be inserted now, wait for end
|
||||
if (payInProg==0) // timeout
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=12; // stop by timeout
|
||||
emit hwapi_payStopByTimeout();
|
||||
} else
|
||||
if (payInProg==3) // user pressed "Next/Continue"
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=3;
|
||||
emit hwapi_payStopByPushbutton();
|
||||
} else
|
||||
if (payInProg==4) // max achieved
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=4;
|
||||
emit hwapi_payStopByMax();
|
||||
} else
|
||||
if (payInProg==5) // escrow full
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=5;
|
||||
emit hwapi_payStopByEscrow();
|
||||
} else
|
||||
if (payInProg==6) // encashed
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=6;
|
||||
|
||||
} else
|
||||
if (payInProg==7) // returned, user pressed Cancel button
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=7;
|
||||
emit hwapi_payCancelled();
|
||||
} else
|
||||
|
||||
if (empState<9 || payInProg==8)
|
||||
{
|
||||
hwapi_paymentStarted++;
|
||||
collActiv=13; // stopped by unexpected error
|
||||
emit hwapi_payStopByError();
|
||||
}
|
||||
}
|
||||
|
||||
if (empState<8 || empState>12)
|
||||
epi_clearCurrentPayment(); // to avoid wrong "got-coin" messages
|
||||
|
||||
|
||||
if (hwapi_paymentStarted==90 || hwapi_paymentStarted==3 )
|
||||
{
|
||||
// EMP error, wait till process finished
|
||||
if (empState==99 && (payInProg==0 || payInProg>5) )
|
||||
{
|
||||
// everything stopped, no more coins in escrow
|
||||
hwapi_paymentStarted=0;
|
||||
emit hwapi_coinProcessJustStopped();
|
||||
}
|
||||
}
|
||||
|
||||
return collActiv;
|
||||
}
|
||||
|
||||
|
||||
uint32_t hwapi::getInsertedAmount(void) const
|
||||
{
|
||||
return epi_CurrentPaymentGetAmount();
|
||||
@ -3643,7 +3854,7 @@ bool hwapi::cash_stopPayment(void) const
|
||||
{
|
||||
// DB1: 1=encash 2=cancel & return coins
|
||||
// 3=stop and keep coins in escrow
|
||||
emit hwapi_vendStopByPushbutton();
|
||||
emit hwapi_payStopByPushbutton();
|
||||
return sendFDcmd_set(156, 0,0, 3,0,0,0);
|
||||
|
||||
}
|
||||
@ -3666,6 +3877,11 @@ bool hwapi::vend_failed(void) const
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
uint8_t hwapi::mif_getCardType(QString *cardholder) const
|
||||
// return 1,2,3,4 = upper, lower access card, printer test, coin test
|
||||
// cardholder: 7byte Name-String
|
||||
@ -3886,7 +4102,10 @@ void hwapi::sys_restoreDeviceParameter(struct T_devices *deviceSettings) const
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool hwapi::sys_areDCdataValid(void) const
|
||||
{
|
||||
return epi_areDcDataValid();
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ supervise all hardware components
|
||||
|
@ -433,7 +433,8 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
|
||||
// read from "VCP":
|
||||
mySerialPort->readFromSerial(Indata, recLength);
|
||||
//qDebug()<<"prot: got data " << recLength;
|
||||
//qCritical()<<"prot: got data " << recLength;
|
||||
//qCritical()<<" Indata: " << Indata;
|
||||
if (recLength>FRAME_MAXLEN)
|
||||
recLength=FRAME_MAXLEN;
|
||||
for (int nn=0; nn<recLength; nn++)
|
||||
@ -443,6 +444,9 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
tempStr.clear();
|
||||
//uint8_t result=FramecheckInData(recBuffer, recLength); // check input data (response from slave)
|
||||
uint8_t result=FastCheckInData(recBuffer, recLength); // check input data (response from slave)
|
||||
|
||||
//qCritical()<<" FastCheckInData() result = " << result;
|
||||
|
||||
if (result>0)
|
||||
{
|
||||
// dann anzeige
|
||||
|
@ -24,6 +24,7 @@ bool indat_isPrinterOn() {
|
||||
return indat_savePrnPwr;
|
||||
}
|
||||
|
||||
|
||||
static bool indat_saveMifPwr;
|
||||
|
||||
void indat_storeMifarePower(bool isOn) {
|
||||
@ -34,6 +35,7 @@ bool indat_isMifareOn() {
|
||||
return indat_saveMifPwr;
|
||||
}
|
||||
|
||||
|
||||
static bool indat_MdbIsOn;
|
||||
|
||||
void indat_storeMDBisOn(bool isOn) {
|
||||
@ -44,6 +46,11 @@ bool indat_isMdbOn() {
|
||||
return indat_MdbIsOn;
|
||||
}
|
||||
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
void gpi_storeSlaveSerParams(uint8_t slaveBaudRate, uint8_t NrDataBits,
|
||||
uint8_t parity, uint8_t NrStopBits) {
|
||||
// store numbers
|
||||
@ -95,6 +102,7 @@ void gpi_storeGenerals(uint8_t genNr, QString text) {
|
||||
text.toStdString().c_str(),
|
||||
sizeof(SharedMemBuffer::getDataConst()->genStrings[0]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QString epi_loadGenerals(uint8_t genNr) {
|
||||
@ -108,6 +116,9 @@ QString epi_loadGenerals(uint8_t genNr) {
|
||||
return " ";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// -------------------------------
|
||||
|
||||
void gpi_storeUID(uint8_t const *buf8byteUid) {
|
||||
@ -282,6 +293,7 @@ QString epi_getSlaveTimeDateStr() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ///////////////////////////////////////////////////////////////////////////////////
|
||||
// analog values
|
||||
// ///////////////////////////////////////////////////////////////////////////////////
|
||||
@ -310,6 +322,7 @@ uint16_t epi_loadAIs(uint8_t aiNr) {
|
||||
// ADC0: temp
|
||||
// 1: voltage
|
||||
// 2: brightness
|
||||
#define MAXNROF_MEASURE 4
|
||||
|
||||
uint32_t epi_loadMeasureValue(uint8_t ValueNr) {
|
||||
// ValueNr 0=ADC0, 1=ADC1 aso...
|
||||
@ -989,6 +1002,15 @@ void gpi_storePrinterFonts(uint8_t const *buf) {
|
||||
sizeof(SharedMemBuffer::getData()->Sdata.PRN_FONTS));
|
||||
}
|
||||
|
||||
/*
|
||||
qDebug()<<"printer fonts stored " <<Sdata_PRN_FONTS[0]<<" "<<Sdata_PRN_FONTS[1]<<" " \
|
||||
<<Sdata_PRN_FONTS[2]<<" "<<Sdata_PRN_FONTS[3]<<" " \
|
||||
<<Sdata_PRN_FONTS[4]<<" "<<Sdata_PRN_FONTS[5]<<" " \
|
||||
<<Sdata_PRN_FONTS[6]<<" "<<Sdata_PRN_FONTS[7]<<" " \
|
||||
<<Sdata_PRN_FONTS[8]<<" "<<Sdata_PRN_FONTS[9]<<" " \
|
||||
<<Sdata_PRN_FONTS[10]<<" "<<Sdata_PRN_FONTS[11];
|
||||
*/
|
||||
|
||||
// DB0: mdb_bus_ready (switched on)
|
||||
// DB1: rdBackV12devicePower
|
||||
// DB2: rdBackV5busPwr
|
||||
@ -1072,6 +1094,10 @@ void gpi_storeEmpCoinSignal(uint8_t leng, uint8_t const *data) {
|
||||
{
|
||||
vv=uchar2uint(data[pp+4], data[pp+3]);
|
||||
sub_enterData(data[pp], data[pp+1], data[pp+2], vv );
|
||||
|
||||
//qDebug()<< "emp IN data: " << data[pp] << " " << data[pp+1]
|
||||
// << " " <<data[pp+2] <<" " <<data[pp+3] <<" " <<data[pp+4] <<" ";
|
||||
|
||||
pp+=5;
|
||||
LL--;
|
||||
}
|
||||
@ -1133,6 +1159,11 @@ void epi_clearCurrentPayment(void) {
|
||||
// call at beginning of coin collection
|
||||
SharedMemBuffer::getData()->store.insertedAmount = 0;
|
||||
p_lastCoin = 0;
|
||||
memset((char *)&SharedMemBuffer::getData()->store.lastCoinType[0],
|
||||
0x00, sizeof(SharedMemBuffer::getData()->store.lastCoinType));
|
||||
memset((char *)&SharedMemBuffer::getData()->store.lastCoinValue[0],
|
||||
0x00, sizeof(SharedMemBuffer::getData()->store.lastCoinValue));
|
||||
SharedMemBuffer::getData()->store.curPayNewCoin = 0;
|
||||
}
|
||||
|
||||
void gpi_storeCurrentPayment(uint32_t insertedAmount,
|
||||
@ -1140,7 +1171,9 @@ void gpi_storeCurrentPayment(uint32_t insertedAmount,
|
||||
SharedMemBuffer::getData()->store.insertedAmount = insertedAmount;
|
||||
SharedMemBuffer::getData()->store.lastCoinType[p_lastCoin] = lastCoinType;
|
||||
SharedMemBuffer::getData()->store.lastCoinValue[p_lastCoin] = lastCoinValue;
|
||||
|
||||
p_lastCoin++;
|
||||
SharedMemBuffer::getData()->store.curPayNewCoin++;
|
||||
}
|
||||
|
||||
uint32_t epi_CurrentPaymentGetAmount(void) {
|
||||
@ -1225,6 +1258,8 @@ void epi_restoreDeviceConditions(uint8_t *leng, uint8_t *data) {
|
||||
*leng);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// store dynamic machine conditions
|
||||
void gpi_storeDynMachineConditions(uint8_t leng, uint8_t const *data) {
|
||||
SharedMemBuffer::getData()->store.machCondLen = leng;
|
||||
@ -1329,8 +1364,7 @@ bool gpi_areDcDataValid()
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool epi_areDcDataValid()
|
||||
{
|
||||
return SharedMemBuffer::getData()->store.dcDataValid;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user