Merge with TS 21.04.23
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
#include "src/ATBAPP/ATBDeviceControllerPlugin.h"
|
||||
#include "src/ATBAPP/ATBHealthEvent.h"
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
|
||||
ATBDeviceControllerPlugin::ATBDeviceControllerPlugin(QObject *parent) : QObject(parent),
|
||||
pluginState(PLUGIN_STATE::NOT_INITIALIZED)
|
||||
@@ -58,6 +60,14 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
{
|
||||
struct T_dynDat *dynTicketData = new T_dynDat;
|
||||
|
||||
qCritical() << "ATBDeviceControllerPlugin::requestPrintTicket( " << endl
|
||||
<< " licenseplate = " << printingData["licenseplate"] << endl
|
||||
<< " amount = " << printingData["amount"] << endl
|
||||
<< " parkingEnd = " << printingData["parkingEnd"] << endl
|
||||
<< " currentTime = " << printingData["currentTime"] << endl
|
||||
<< " currentDate = " << printingData["currentDate"] << endl;
|
||||
|
||||
|
||||
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);
|
||||
@@ -71,9 +81,11 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
emit this->onPrintFinishedERR();
|
||||
}
|
||||
|
||||
if (!this->hw->prn_printDocument(1, dynTicketData)) {
|
||||
this->errorCode = "hwapi::prn_printDocument";
|
||||
this->errorDescription = "hwapi method 'hwapi::prn_printDocument' result is false";
|
||||
|
||||
// TODO: wird hier nur 'licensePlate' gedruckt?
|
||||
if (!this->hw->prn_sendDynamicPrnValues(dynTicketData->licensePlate)) {
|
||||
this->errorCode = "hwapi::prn_sendDynamicPrnValues";
|
||||
this->errorDescription = "hwapi method 'hwapi::prn_sendDynamicPrnValues' result is false";
|
||||
|
||||
qCritical() << "ERROR:";
|
||||
qCritical() << "ATBDeviceControllerPlugin::requestPrintTicket( " << endl
|
||||
@@ -85,10 +97,30 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
|
||||
|
||||
|
||||
emit this->onPrintFinishedERR();
|
||||
return;
|
||||
}
|
||||
|
||||
QTimer::singleShot(1000, this, SLOT(onPrinterDataPrepared()));
|
||||
}
|
||||
|
||||
void ATBDeviceControllerPlugin::onPrinterDataPrepared()
|
||||
{
|
||||
for (int i = 1; i <= 3; ++i) {
|
||||
|
||||
qCritical() << " ... print template " << i;
|
||||
|
||||
if (!this->hw->prn_printTemplate(i)) {
|
||||
this->errorCode = "hwapi::prn_printTemplate";
|
||||
this->errorDescription = QString("hwapi method 'hwapi::prn_printTemplate(%1)' result is false").arg(i);
|
||||
emit this->onPrintFinishedERR();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************************************
|
||||
* private slots, interface to low level hwapi
|
||||
*
|
||||
|
@@ -103,6 +103,7 @@ private:
|
||||
|
||||
|
||||
private slots:
|
||||
void onPrinterDataPrepared();
|
||||
void onPrintFinishedOK();
|
||||
void onPrintFinishedERR();
|
||||
void onGotCoin();
|
||||
|
@@ -17,6 +17,8 @@ static uint16_t datif_OutCmdpara5;
|
||||
static uint32_t datif_OutCmdpara6;
|
||||
static uint8_t cycl_running;
|
||||
|
||||
//static bool datif_DCdataValid;
|
||||
|
||||
T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
{
|
||||
|
||||
@@ -46,6 +48,8 @@ T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
dif_scanStep=0;
|
||||
selectedSlaveAddr=FIX_SLAVE_ADDR;
|
||||
cycl_running=0;
|
||||
//datif_DCdataValid=0;
|
||||
gpi_storeDcDataValid(0);
|
||||
}
|
||||
|
||||
void T_datif::resetChain(void)
|
||||
@@ -1478,6 +1482,10 @@ char T_datif::loadRecDataFromFrame()
|
||||
|
||||
*/
|
||||
|
||||
if (RdDleng>40)
|
||||
//datif_DCdataValid=1; // das hier sind die wichtigsten Daten, deshalb hierrein!
|
||||
gpi_storeDcDataValid(1);
|
||||
|
||||
gpi_storeDynMachineConditions(RdDleng, receivedData);
|
||||
|
||||
prnResult=receivedData[52];
|
||||
|
25
src/hwChk.cpp
Executable file
25
src/hwChk.cpp
Executable file
@@ -0,0 +1,25 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include "hwChk.h"
|
||||
|
||||
|
||||
hwChk::hwChk(QWidget *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
// myDCIF = new T_prot();
|
||||
// h: T_prot *myDCIF;
|
||||
|
||||
//myDatif = new T_datif();
|
||||
HWaccess = new hwinf();
|
||||
|
||||
struct T_moduleCondition dcModCond;
|
||||
sys_getDeviceConditions(dcModCond);
|
||||
|
||||
|
||||
}
|
||||
|
||||
hwChk::~hwChk()
|
||||
{
|
||||
|
||||
}
|
||||
|
235
src/hwapi.cpp
235
src/hwapi.cpp
@@ -24,7 +24,6 @@
|
||||
#include "shared_mem_buffer.h"
|
||||
#include <QDebug>
|
||||
#include <QSharedMemory>
|
||||
|
||||
#include "interfaces.h"
|
||||
|
||||
static uint32_t hwapi_lastStartAmount;
|
||||
@@ -1637,20 +1636,6 @@ 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
|
||||
@@ -3702,6 +3687,20 @@ uint64_t hwapi::sys_getWakeSource(void) const
|
||||
return epi_getWakeSources();
|
||||
}
|
||||
|
||||
uint8_t hwapi::sys_getWakeReason(void) const
|
||||
{
|
||||
// Master was woken by following reason:
|
||||
// 1: MDB Event
|
||||
// 2: Coin Event
|
||||
// ( 3: Master Event) - will not set the wake line
|
||||
// ( 4: 32s pulse) - will not set the wake line
|
||||
// 5: Door Event
|
||||
// ( 6: Diag Event) - will not set the wake line
|
||||
// 7: 30min-Pulse for HB
|
||||
|
||||
return epi_getWakeReason();
|
||||
}
|
||||
|
||||
|
||||
void hwapi::sys_getDeviceConditions(uint8_t *leng, uint8_t *data) const
|
||||
{
|
||||
@@ -3837,3 +3836,209 @@ uint8_t hwapi::prn_getCurrentPrinterState() const
|
||||
}
|
||||
|
||||
|
||||
// 21.4.23TS: change function "sendDeviceSettings()" to use this struct: "struct T_devices"
|
||||
void hwapi::sys_sendDeviceParameter(struct T_devices *deviceSettings) const
|
||||
{
|
||||
// same as "sendDeviceSettings()" but with much more data
|
||||
uint8_t buf[64];
|
||||
uint16_t LL, nn;
|
||||
tslib_strclr(buf,0,64);
|
||||
uint8_t *start;
|
||||
|
||||
// den gesamten struct in einen Puffer kopieren
|
||||
LL=sizeof(struct T_devices);
|
||||
start = &deviceSettings->kindOfPrinter;
|
||||
nn=0;
|
||||
do
|
||||
{
|
||||
buf[nn] = *start;
|
||||
start++;
|
||||
} while(++nn<LL);
|
||||
|
||||
epi_store64BdevParameter(LL,buf); // this buffer holds the device settings to be used here in hwapi
|
||||
epi_store64ByteSendData(LL, buf); // this buffer holds sending data temporarely
|
||||
sendWRcmd_setSendCommand0(SENDDIRCMD_DEVICE_PARA);
|
||||
|
||||
}
|
||||
|
||||
void hwapi::sys_restoreDeviceParameter(struct T_devices *deviceSettings) const
|
||||
{
|
||||
uint8_t buf[64];
|
||||
uint8_t LL, nn;
|
||||
tslib_strclr(buf,0,64);
|
||||
uint8_t *start;
|
||||
|
||||
epi_restore64BdevParameter(&LL, buf);
|
||||
|
||||
// Puffer in struct eintragen:
|
||||
start = &deviceSettings->kindOfPrinter;
|
||||
nn=0;
|
||||
do
|
||||
{
|
||||
*start = buf[nn];
|
||||
start++;
|
||||
} while(++nn<LL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ supervise all hardware components
|
||||
// ------------ assess the machine state
|
||||
|
||||
1. check if DC startup test is through, retrigger if not
|
||||
2. get results and find errors
|
||||
3. in case of error check if component is used (e.g. billreader is seldom used)
|
||||
4: check doors
|
||||
5. return value: 0: no response from DC
|
||||
1: no Test results and Test not running. need retrigger!
|
||||
2: state not clear by now, test ongoing, wait
|
||||
3: Service or battery door is open, goto INTRUSION MODE
|
||||
from here: after valid ID-card goto SERVICE MODE
|
||||
4: vault door is open, goto INTRUSION MODE
|
||||
from here: after valid ID-card and vault door closed goto TEST MODE
|
||||
in TEST MODE: complete system check decides if vending mode allowed
|
||||
5: All doors are closed but errors found,
|
||||
goto OOO MODE (out-of-order)
|
||||
from here: run system test until problem is fixed
|
||||
6: All doors are closed, no error, maybe warnings,
|
||||
goto VENDING MODE (normal operation)
|
||||
(priority sinks from 0 to 6)
|
||||
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
|
||||
uint8_t hwapi::sys_componentAssessment(void) const
|
||||
{
|
||||
// this function decides if vending mode is possible, independant from door
|
||||
// return >0 in case of error
|
||||
// is inncluded in sys_superviseSystem
|
||||
|
||||
struct T_moduleCondition *modCond=0;
|
||||
sys_getDeviceConditions(modCond);
|
||||
|
||||
struct T_dynamicCondition *dynMaCond=0;
|
||||
sys_getDynMachineConditions(dynMaCond);
|
||||
|
||||
struct T_devices *devPara=0;
|
||||
sys_restoreDeviceParameter(devPara);
|
||||
|
||||
if (modCond->rtc>=200)
|
||||
return 1;
|
||||
if (modCond->printer==200 || modCond->printer==201) // 200: not connected 201: printer-HW-error 202: no paper
|
||||
return 2;
|
||||
if (modCond->printer==202)
|
||||
return 3;
|
||||
|
||||
if (modCond->coinBlocker>=200)
|
||||
return 4;
|
||||
if (modCond->mdbBus>=200)
|
||||
return 5;
|
||||
if (modCond->intEe>=200)
|
||||
return 6;
|
||||
|
||||
if (devPara->kindOfCoinChecker==1 || devPara->kindOfCoinChecker==2) // 0: without 1=EMP820 2=EMP900 3=currenza c² (MW)
|
||||
{
|
||||
if (modCond->coinChecker>=200 || modCond->coinEscrow>=200)
|
||||
{
|
||||
// Fehler Münzver.
|
||||
return 7;
|
||||
}
|
||||
if (modCond->coinSafe>200) // 200: kasse fehlt 201: voll 100:fast voll 1:ok
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
} else
|
||||
if (devPara->kindOfCoinChecker==3)
|
||||
{
|
||||
if (modCond->changer>=200)
|
||||
{
|
||||
// Fehler Münzver.
|
||||
return 7;
|
||||
}
|
||||
if (modCond->coinSafe>200) // 200: kasse fehlt 201: voll 100:fast voll 1:ok
|
||||
{
|
||||
return 8;
|
||||
}
|
||||
}
|
||||
|
||||
if ( modCond->billReader>=200 && devPara->BillAcceptor>0)
|
||||
{
|
||||
// Fehler BNA
|
||||
return 9;
|
||||
}
|
||||
|
||||
if (dynMaCond->onAlarm>0)
|
||||
return 10;
|
||||
|
||||
if (dynMaCond->modeAbrech>0)
|
||||
return 11;
|
||||
|
||||
if (dynMaCond->nowCardTest>0)
|
||||
return 12;
|
||||
|
||||
if (dynMaCond->startupTestIsRunning>0)
|
||||
return 13;
|
||||
|
||||
if (modCond->voltage>=200)
|
||||
return 14;
|
||||
if (modCond->temper>=200)
|
||||
return 15;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// retrigger System-Check with:
|
||||
// bool hwapi::sys_runCompleteTest(void) const
|
||||
|
||||
|
||||
uint8_t hwapi::sys_superviseSystem(void) const
|
||||
{
|
||||
// this function proofs if vending is possible depending of doors state
|
||||
|
||||
struct T_dynamicCondition *dynMaCond=0;
|
||||
struct T_moduleCondition *modCond=0;
|
||||
|
||||
if (!gpi_areDcDataValid())
|
||||
{
|
||||
// es gibt keinerlei gültige Daten vom DC
|
||||
return 0;
|
||||
}
|
||||
|
||||
// jetzt sind die DC-Daten aktuell, also reinholen:
|
||||
sys_getDynMachineConditions(dynMaCond);
|
||||
sys_getDeviceConditions(modCond);
|
||||
|
||||
if (!modCond->allModulesChecked)
|
||||
{
|
||||
// noch keine Testergebnisse
|
||||
if (dynMaCond->startupTestIsRunning)
|
||||
return 2; // Starttest läuft gerade
|
||||
else
|
||||
return 1; // Starttest ist noch nicht gelaufen
|
||||
}
|
||||
|
||||
// all doors: 99: undefined 0:closed 1:open
|
||||
if (dynMaCond->lowerDoor || dynMaCond->upperDoor)
|
||||
return 3;
|
||||
if (dynMaCond->middleDoor)
|
||||
return 4;
|
||||
|
||||
if (sys_componentAssessment() >0)
|
||||
return 5; // errors found
|
||||
|
||||
return 6; // everything fine
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint8_t hwapi::sys_getSystemErrors(void) const
|
||||
{
|
||||
|
||||
return sys_componentAssessment();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@@ -671,3 +671,34 @@ uint8_t check4freeFDlongCmd(void)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static uint8_t Sdata_DeviceParameter[64];
|
||||
static uint8_t Sdata_DevParaLen;
|
||||
|
||||
uint8_t epi_store64BdevParameter(uint8_t length, uint8_t *buf)
|
||||
{
|
||||
// HWapi writes data to be stored
|
||||
uint8_t nn;
|
||||
for (nn=0; nn<length; nn++)
|
||||
Sdata_DeviceParameter[nn]=buf[nn];
|
||||
for (nn=length; nn<64; nn++)
|
||||
Sdata_DeviceParameter[nn]=0;
|
||||
|
||||
Sdata_DevParaLen=length;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t epi_restore64BdevParameter(uint8_t *length, uint8_t *buf)
|
||||
{
|
||||
|
||||
for (uint8_t nn=0; nn<Sdata_DevParaLen; nn++)
|
||||
buf[nn]=Sdata_DeviceParameter[nn];
|
||||
*length=Sdata_DevParaLen;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1172,17 +1172,26 @@ bool epi_CurrentPaymentGetAllCoins(uint16_t *types, uint16_t *values) {
|
||||
|
||||
void gpi_storeWakeSources(uint8_t const *receivedData) {
|
||||
SharedMemBuffer::getData()->store.wakeSrc = 0;
|
||||
for (int nn=7; nn>=0; nn--) {
|
||||
for (int nn=5; nn>=0; nn--) {
|
||||
uint8_t const uctmp = receivedData[nn];
|
||||
SharedMemBuffer::getData()->store.wakeSrc |= uctmp;
|
||||
SharedMemBuffer::getData()->store.wakeSrc <<= 8;
|
||||
}
|
||||
SharedMemBuffer::getData()->store.wakeReason = receivedData[6];
|
||||
|
||||
}
|
||||
|
||||
uint64_t epi_getWakeSources(void) {
|
||||
return SharedMemBuffer::getDataConst()->store.wakeSrc;
|
||||
}
|
||||
|
||||
uint8_t epi_getWakeReason(void)
|
||||
{
|
||||
return SharedMemBuffer::getDataConst()->store.wakeReason;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void gpi_storeExtendedTime(uint8_t leng, uint8_t const *data) {
|
||||
leng = std::min(leng, (uint8_t)(64));
|
||||
SharedMemBuffer::getData()->store.rbDevParamLen = leng;
|
||||
@@ -1303,3 +1312,25 @@ uint32_t epi_getCashBoxContent(void) {
|
||||
uint16_t epi_getNrOfCoinsInCashBox(void) {
|
||||
return SharedMemBuffer::getDataConst()->store.nrOfCoins;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void gpi_storeDcDataValid(bool isVal)
|
||||
{
|
||||
SharedMemBuffer::getData()->store.dcDataValid = isVal;
|
||||
}
|
||||
|
||||
|
||||
bool gpi_areDcDataValid()
|
||||
{
|
||||
return SharedMemBuffer::getDataConst()->store.dcDataValid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user