Update interface hwapi 3.6

This commit is contained in:
Siegfried Siegert 2023-06-05 12:51:55 +02:00
parent de1dc88e51
commit 2717c614e3
Signed by: SiegfriedSiegert
GPG Key ID: 68371E015E8F0B03
2 changed files with 1757 additions and 1727 deletions

259
include/interfaces.h Normal file → Executable file
View File

@ -2,9 +2,12 @@
#define INTERFACE_H #define INTERFACE_H
#include <QtPlugin> #include <QtPlugin>
#include <QStringList>
struct T_emp {
struct T_emp
{
// Fixdata from EMP: // Fixdata from EMP:
uint8_t shaft; // = changer level uint8_t shaft; // = changer level
uint16_t countryCode; uint16_t countryCode;
@ -21,19 +24,29 @@ struct T_emp {
// dynamic: // dynamic:
uint8_t state; // step counter of EMP (electronic coin checker) FSM (finite state machine): uint8_t state; // step counter of EMP (electronic coin checker) FSM (finite state machine):
// 0=Emp & Bus power off, 1=powered, poll off 2=polling on // 0=start command
// 3=device responded, requesting status // 1=powered, do emp ini, send reset
// 4=waiting for status 5=have status, // 2=delay
// 6: IDLE, have paramters from master, polling running, ready for payment // 3=wait for response, requesting status after response
// Master can stop/start polling and acceptance // 4,5 through, startup
// 7: end of transaction, polling on, accept off, reporting coins, (wait for last coin) // 6: wait for status
// 8: transaction running, polling on, acceptance on, reporting coins, // 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
uint8_t pollingRunning; uint8_t pollingRunning;
uint8_t paymentRunning; uint8_t paymentRunning;
}; };
struct Trtc_DateTime { struct Trtc_DateTime
{
uint8_t rtc_hour; uint8_t rtc_hour;
uint8_t rtc_min; uint8_t rtc_min;
uint8_t rtc_sec; uint8_t rtc_sec;
@ -43,7 +56,8 @@ struct Trtc_DateTime {
uint8_t rtc_dayOfWeek; uint8_t rtc_dayOfWeek;
}; };
struct Tprn_hw_state { struct Tprn_hw_state
{
// hardware (IO's) // hardware (IO's)
bool powerRdBk; // prn pwr is on bool powerRdBk; // prn pwr is on
bool rsSwOk; // serial switch (printer or modem) is set to printer bool rsSwOk; // serial switch (printer or modem) is set to printer
@ -60,7 +74,8 @@ struct Tprn_hw_state {
bool badResponse; bool badResponse;
}; };
struct Tprn_currentSettings { struct Tprn_currentSettings
{
uint8_t currFont; uint8_t currFont;
uint8_t currSize; uint8_t currSize;
uint8_t currHeigth; uint8_t currHeigth;
@ -73,18 +88,23 @@ struct Tprn_currentSettings {
bool nowAligned; bool nowAligned;
}; };
struct T_dynDat { // obsolete
struct T_dynDat
{
uint8_t licensePlate[8]; uint8_t licensePlate[8];
uint8_t vendingPrice[8]; uint8_t vendingPrice[8];
uint8_t parkingEndTime[8]; uint8_t parkingEnd[8];
uint8_t parkingEndDate[8]; uint8_t currentTime[8];
uint8_t currentDate[8]; uint8_t currentDate[8];
uint8_t dynDat5[8]; uint8_t dynDat5[8];
uint8_t dynDat6[8]; uint8_t dynDat6[8];
uint8_t dynDat7[8]; uint8_t dynDat7[8];
}; };
struct T_vaultRecord {
struct T_vaultRecord
{
// Kassenbeleg (Abrechnungsdatensatz = Kassenwechsel-Datensatz) // Kassenbeleg (Abrechnungsdatensatz = Kassenwechsel-Datensatz)
char startbuffer[4]; // Psa> // never move or change this 1st entry char startbuffer[4]; // Psa> // never move or change this 1st entry
uint16_t AccountingNumber; uint16_t AccountingNumber;
@ -111,23 +131,26 @@ struct T_vaultRecord {
//16 //16
char label3buffer[4]; // mw > char label3buffer[4]; // mw >
// Verkauf, Tür zu: // Verkauf, Tür zu:
uint32_t VKcoinsInserted[16]; // nur für Wechsler, soviel wurde eingeworfen uint32_t VKcoinsInserted[16]; // nur für Wechsler, soviel wurde eingeworfen
uint32_t VKcoinsReturned[6]; // nur für Wechsler, Anzahl Münzen pro Typ, soviel wurde zurückgegeben uint32_t VKcoinsReturned[6]; // nur für Wechsler, Anzahl Münzen pro Typ, soviel wurde zurückgegeben
//88 //88
// Service, Tür offen:
uint16_t ServCoinsInserted[16]; // nur für Wechsler, soviel wurde eingeworfen // Service, Tür offen:
uint16_t ServCoinsReturned[6]; // nur für Wechsler, Anzahl Münzen pro Typ, soviel wurde zurückgegeben uint16_t ServCoinsInserted[16]; // nur für Wechsler, soviel wurde eingeworfen
uint16_t ServCoinsReturned[6]; // nur für Wechsler, Anzahl Münzen pro Typ, soviel wurde zurückgegeben
uint16_t resint3; uint16_t resint3;
uint16_t resint4; uint16_t resint4;
uint16_t currentTubeContent[6]; // nur für Wechsler, aktueller Füllstand uint16_t currentTubeContent[6]; // nur für Wechsler, aktueller Füllstand
uint16_t resint5; uint16_t resint5;
uint16_t resint6; uint16_t resint6;
// 56 // 56
char label4buffer[4]; // box> char label4buffer[4]; // box>
uint16_t coinsInVault[16]; uint16_t coinsInVault[16];
uint16_t billsInStacker[8]; uint16_t billsInStacker[8];
// 48 // 48
char label5buffer[4]; // val> char label5buffer[4]; // val>
// actually constant unless exchange rate is changed // actually constant unless exchange rate is changed
uint16_t coinDenomination[16]; // 5..50000 (z.B. 2? sind in Ungarn 760Ft) uint16_t coinDenomination[16]; // 5..50000 (z.B. 2? sind in Ungarn 760Ft)
@ -135,12 +158,17 @@ struct T_vaultRecord {
uint16_t tubeDenom[6]; uint16_t tubeDenom[6];
uint16_t exchangeRate; uint16_t exchangeRate;
uint16_t resint9; uint16_t resint9;
// 64 // 64
char endofblock[4]; // end> char endofblock[4]; // end>
// 316 byte Block im Speicher // 316 byte Block im Speicher
}; };
struct T_moduleCondition { struct T_moduleCondition
{
// store conditon of all system components, hold in RAM // store conditon of all system components, hold in RAM
// 0 means unknown, not yet tested/used // 0 means unknown, not yet tested/used
// 1 means OK // 1 means OK
@ -182,26 +210,41 @@ struct T_moduleCondition {
uint8_t ResetReason; uint8_t ResetReason;
uint8_t allModulesChecked; uint8_t allModulesChecked;
uint8_t alarmState;
uint8_t res11;
uint8_t res12;
uint8_t res13;
}; };
struct T_dynamicCondition { struct T_dynamicCondition
char allDoorsDebounced; // 99: undefined, 0=all closed, bit1=upper door open 2=midlle door open 3=lower door open {
char allDoorsDebounced;
char openedAuthorized; char openedAuthorized;
uint8_t CBinDebounced; uint8_t CBinDebounced; // 0:fehlt 1:drin
char upperDoor; // 99: undefined 0:closed 1:open char upperDoor; // 99: undefined 0:closed 1:open
char middleDoor; // 99: undefined 0:closed 1:open char middleDoor; // 99: undefined 0:closed 1:open
char lowerDoor; // 99: undefined 0:closed 1:open char lowerDoor; // 99: undefined 0:closed 1:open
char reserve; // not used, always 0 char reserve;
char billBox; char billBox;
char modeAbrech; char modeAbrech;
char onAlarm; // 0:alarm aus 1:alarm 2:alarm mit Sirene 3: Sirenentest char onAlarm; // 0:alarm aus 1:alarm 2:alarm mit Sirene 3: Sirenentest
char nowCardTest; char nowCardTest;
char nowPayment; char nowPayment; // not used, always 0
char lastMifCardType; char lastMifCardType;
uint8_t lastSDoorState; uint8_t lastSDoorState;
uint8_t lastVDoorState; uint8_t lastVDoorState;
uint8_t lastCBstate; // 99: undefined 0:not there 1:insered uint8_t lastCBstate;
char paymentInProgress; char 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
char res1; char res1;
uint16_t U_Batt; uint16_t U_Batt;
uint16_t Temperatur; uint16_t Temperatur;
@ -229,10 +272,12 @@ struct T_dynamicCondition {
// bit6: no response bit7: serial rec. error // bit6: no response bit7: serial rec. error
// bit5: printer not ready // bit5: printer not ready
uint8_t startupTestIsRunning; uint8_t startupTestIsRunning;
//54 //54
}; };
struct T_extTime { struct T_extTime
{
uint8_t Hours; uint8_t Hours;
uint8_t Min; uint8_t Min;
uint8_t Sec; uint8_t Sec;
@ -258,8 +303,10 @@ struct T_extTime {
uint8_t res4; uint8_t res4;
uint16_t res5; uint16_t res5;
uint32_t MinutesOfMillenium; uint32_t MinutesOfMillenium;
}; };
typedef uint8_t UCHAR; typedef uint8_t UCHAR;
typedef uint16_t UINT; typedef uint16_t UINT;
@ -268,7 +315,7 @@ struct T_devices
// set by master, used(1) or notused (0) or type 2....20 // set by master, used(1) or notused (0) or type 2....20
UCHAR kindOfPrinter; // 0:off 1:Gebe UCHAR kindOfPrinter; // 0:off 1:Gebe
UCHAR kindOfCoinChecker; // 0: without 1=EMP820 2=EMP900 3=currenza c² (MW) UCHAR kindOfCoinChecker; // 0: without 1=EMP820 2=EMP900 3=currenza c² (MW)
UCHAR kindOfMifareReader; // by now only stronglink SL025 =1 UCHAR kindOfMifareReader; // by now only stronglink SL025 =1
UCHAR suppressSleepMode; // 0:sleep allowed 1: no sleep UCHAR suppressSleepMode; // 0:sleep allowed 1: no sleep
@ -293,14 +340,14 @@ struct T_devices
}; };
class hwinf {
public:
enum class DownloadResult {OK, ERROR, TIMEOUT, NOP};
enum class FileTypeJson {CONFIG=1, DEVICE, CASH, SERIAL, TIME, PRINTER};
class hwinf
{
public:
virtual ~hwinf() {} virtual ~hwinf() {}
virtual QStringList dc_getStatus() const = 0;
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// Use serial interface and protocol stack in Cashagent-Library // Use serial interface and protocol stack in Cashagent-Library
@ -317,7 +364,7 @@ public:
// ComName: for example "COM48" // ComName: for example "COM48"
// connect: 0, 1 // connect: 0, 1
virtual bool dc_closeSerial(void) const = 0; virtual void dc_closeSerial(void) const =0;
// Command: close serial interface in order to save power while power down // Command: close serial interface in order to save power while power down
// or if another port must be used // or if another port must be used
@ -332,21 +379,7 @@ public:
virtual bool test_serialIsOn(void) const =0; virtual bool test_serialIsOn(void) const =0;
virtual bool dc_updateDC(QString binFileName,
QString baudrate,
QString comPort) const = 0;
// download binary file down into device controller
virtual bool dc_updatePrinterTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QVector<QString> fnames,
QString br,
QString serial = QString()) const = 0;
virtual bool dc_printTemplate(enum FileTypeJson type,
QVector<int> templateIdx,
QString br,
QString serial = QString()) const = 0;
virtual void dc_autoRequest(bool on) const =0; virtual void dc_autoRequest(bool on) const =0;
// on = true: select that all READ-Requests are sent automatically // on = true: select that all READ-Requests are sent automatically
@ -363,7 +396,7 @@ public:
// get data back in "payLoad", max 64 byte, can be used for diagnosis // get data back in "payLoad", max 64 byte, can be used for diagnosis
// retval = nr of bytes received. If host buffer too small then // retval = nr of bytes received. If host buffer too small then
// only plBufSiz bytes are copied to "payLoad" // only plBufSiz bytes are copied to "payLoad"
// plBufSiz­z=size of host buffer // plBufSiz­z=size of host buffer
virtual void dc_requTestResponse() const =0; virtual void dc_requTestResponse() const =0;
// tell DC2 to send a test-string, useful to see if cable and baudrate is OK // tell DC2 to send a test-string, useful to see if cable and baudrate is OK
@ -484,10 +517,10 @@ public:
// Analog values: // Analog values:
virtual uint32_t dc_getTemperature(void) const =0; virtual uint32_t dc_getTemperature(void) const =0;
// in Sax-Format 0...400 (0=-50,0°C 100=0,0°C 141=20,5°C 400=150,0°C) // in Sax-Format 0...400 (0=-50,0°C 100=0,0°C 141=20,5°C 400=150,0°C)
virtual QString dc_getTemperaturStr(void) const =0; virtual QString dc_getTemperaturStr(void) const =0;
// as string like "-12,5°C" // as string like "-12,5°C"
virtual uint32_t dc_getVoltage(void) const =0; virtual uint32_t dc_getVoltage(void) const =0;
// as value in mV, 0...65,535V // as value in mV, 0...65,535V
@ -642,7 +675,7 @@ public:
uint8_t kindOfModem, uint8_t kindOfCredit ) const =0; uint8_t kindOfModem, uint8_t kindOfCredit ) const =0;
// enable hardware in device controller: // enable hardware in device controller:
// kindOfPrinter: 0:off 1: GPT4672 (only this one implemented) // kindOfPrinter: 0:off 1: GPT4672 (only this one implemented)
// kindOfCoinChecker: 0:off 1:EMP820 2:EMP900 3: C²_changer // kindOfCoinChecker: 0:off 1:EMP820 2:EMP900 3: C²_changer
// kindOfMifareReader: 0:off 1: SL025 (only this one implemented) // kindOfMifareReader: 0:off 1: SL025 (only this one implemented)
// suppressSleep: 0:sleep allowed 1: sleep surpressed for special reason // suppressSleep: 0:sleep allowed 1: sleep surpressed for special reason
// kindOfModem: 0:off 1: ATB_Sunlink_LTE (not yet implemented) // kindOfModem: 0:off 1: ATB_Sunlink_LTE (not yet implemented)
@ -748,7 +781,7 @@ public:
// send 5 byte: byte 0,1: speed 5...250 mm/s // send 5 byte: byte 0,1: speed 5...250 mm/s
// byte2: density 0....(25)....50 // byte2: density 0....(25)....50
// byte3: alignment 'l', 'c', 'r' = left, center, right // byte3: alignment 'l', 'c', 'r' = left, center, right
// byte4: orientation 0, 90, 180 = 0°, 90°, 180° rotation (by now not supported!) // byte4: orientation 0, 90, 180 = 0°, 90°, 180° rotation (by now not supported!)
// not batched! don't use twice within 100ms // not batched! don't use twice within 100ms
virtual void prn_movePaper(uint8_t wayInMm, uint8_t direction) const =0; virtual void prn_movePaper(uint8_t wayInMm, uint8_t direction) const =0;
@ -806,29 +839,36 @@ public:
// up to 8 dynamic values can be defined in the template ("print val3 here") and will be sent with printing command // up to 8 dynamic values can be defined in the template ("print val3 here") and will be sent with printing command
// example: print current time at this point (the time of printing not the storage time!!) // example: print current time at this point (the time of printing not the storage time!!)
virtual void pri_startTicketDesign(void) const =0; // obsolete
//virtual void pri_startTicketDesign(void) const =0;
// start for every new printer document, reseting collecting buffer // start for every new printer document, reseting collecting buffer
// all further functions write/append text, numbers and command to the ticket-buffer, up to 1278 bytes allowed // all further functions write/append text, numbers and command to the ticket-buffer, up to 1278 bytes allowed
// return val of the appending functions: true=ok false=too long, buffer full // return val of the appending functions: true=ok false=too long, buffer full
virtual int pri_TD_getCurrentSize(void) const =0; // obsolete
//virtual int pri_TD_getCurrentSize(void) const =0;
// retval: 0...1278 // retval: 0...1278
virtual bool pri_TD_addText(QByteArray text) const =0; // obsolete
//virtual bool pri_TD_addText(QByteArray text) const =0;
// example: pri_TD_addText("Hello") const =0; // example: pri_TD_addText("Hello") const =0;
// example: pri_TD_addText(tempStr) const =0; // example: pri_TD_addText(tempStr) const =0;
// retval: true=ok false=too long, buffer full // retval: true=ok false=too long, buffer full
virtual bool pri_TD_addValue(int val) const =0; // obsolete
//virtual bool pri_TD_addValue(int val) const =0;
// +/- 0...2^(31) // +/- 0...2^(31)
virtual bool pri_TD_addNewLine(void) const =0; // obsolete
//virtual bool pri_TD_addNewLine(void) const =0;
virtual bool pri_TD_addSign(char sign) const =0; // obsolete
//virtual bool pri_TD_addSign(char sign) const =0;
// example: '.' ' ' 0x20 'W' '$' // example: '.' ' ' 0x20 'W' '$'
virtual bool pri_TD_addCommand(char group, char attribute, char p1, char p2, char p3, char p4, char p5) const =0; // obsolete
//virtual bool pri_TD_addCommand(char group, char attribute, char p1, char p2, char p3, char p4, char p5) const =0;
// always add 8 byte to the ticket layout: ESC & group & attribute & parameter1...5 // always add 8 byte to the ticket layout: ESC & group & attribute & parameter1...5
/* complete list of possible commands: /* complete list of possible commands:
group 50 : paper group 50 : paper
@ -869,11 +909,13 @@ public:
*/ */
virtual char prn_clearDocument(uint8_t documentNumber) const =0; // obsolete
//virtual char prn_clearDocument(uint8_t documentNumber) const =0;
// clear memory buffer for ONE document // clear memory buffer for ONE document
// function takes a second! don't send right before "store doc" // function takes a second! don't send right before "store doc"
virtual bool prn_store_Document(uint8_t documentNumber ) const =0; // obsolete
//virtual bool prn_store_Document(uint8_t documentNumber ) const =0;
// send the predefined Layout (generated with above TD functions) to DeviceController to save // send the predefined Layout (generated with above TD functions) to DeviceController to save
// documentNumber=0...15 // documentNumber=0...15
// maximal 1280 bytes each // maximal 1280 bytes each
@ -884,7 +926,8 @@ public:
// the place in the ticket layout is predefined (already in DC memory) // the place in the ticket layout is predefined (already in DC memory)
// the dynamics are first calculated at printing time // the dynamics are first calculated at printing time
virtual bool prn_printDocument(uint8_t documentNumber, struct T_dynDat *dynTicketData) const =0; // obsolete
//virtual bool prn_printDocument(uint8_t documentNumber, struct T_dynDat *dynTicketData) const =0;
// 36 // 36
@ -1279,7 +1322,7 @@ public:
virtual void bl_startBL(void) const =0; virtual void bl_startBL(void) const =0;
// send command within 4s after DC power-on, otherwise bl is left // send command within 4s after DC power-on, otherwise bl is left
virtual bool bl_checkBL(void) const = 0; virtual void bl_checkBL(void) const =0;
// send command to verify if bl is up // send command to verify if bl is up
virtual bool bl_isUp(void) const =0; virtual bool bl_isUp(void) const =0;
@ -1316,7 +1359,7 @@ public:
// Komplett-schreib Funktion, noch nicht getestet // Komplett-schreib Funktion, noch nicht getestet
// Nachteil: keine Rückmeldung wie lang's noch dauert // Nachteil: keine Rückmeldung wie lang's noch dauert
//virtual void bl_startSending(void) const=0; //virtual void bl_startSending(void) const=0;
// call once after BL is working and file is loaded // call once after BL is working and file is loaded
//virtual void bl_sendFile(void) const=0; //virtual void bl_sendFile(void) const=0;
@ -1342,7 +1385,7 @@ public:
buf[4]=GlobTime.Month; buf[4]=GlobTime.Month;
buf[5]=GlobTime.Day; buf[5]=GlobTime.Day;
buf[6]=GlobTime.DOW; buf[6]=GlobTime.DOW;
buf[7]=' '; // immer auf 32bit auffüllen sonst Speicherproblem beim Master! buf[7]=' '; // immer auf 32bit auffüllen sonst Speicherproblem beim Master!
uitmp=GlobTime.MinOfDay; uitmp=GlobTime.MinOfDay;
buf[8]=swl_getOneByteFromUint(uitmp, 0); buf[8]=swl_getOneByteFromUint(uitmp, 0);
buf[9]=swl_getOneByteFromUint(uitmp, 1); buf[9]=swl_getOneByteFromUint(uitmp, 1);
@ -1453,6 +1496,15 @@ public:
// 17.4.23TS: extended to 32bit // 17.4.23TS: extended to 32bit
virtual uint8_t cash_paymentProcessing(void) const=0; virtual uint8_t cash_paymentProcessing(void) const=0;
// 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
virtual uint32_t getInsertedAmount(void) const=0; virtual uint32_t getInsertedAmount(void) const=0;
@ -1530,6 +1582,8 @@ public:
*/ */
virtual void sys_getDeviceConditions(struct T_moduleCondition *devCond) const=0; virtual void sys_getDeviceConditions(struct T_moduleCondition *devCond) const=0;
virtual void sys_getDynMachineConditions(uint8_t *leng, uint8_t *data) const=0; virtual void sys_getDynMachineConditions(uint8_t *leng, uint8_t *data) const=0;
/* /*
@ -1602,8 +1656,10 @@ public:
virtual uint16_t cash_getNrCoinsInVault(void) const=0; virtual uint16_t cash_getNrCoinsInVault(void) const=0;
virtual uint8_t prn_getPrintResult() const=0; virtual uint8_t prn_getPrintResult() const=0;
// return: 0: unknown
// 1: OK - last template was printed succesful
// 2: error - last template was not printed
// in case of print-error get detailed error: // in case of print-error get detailed error:
virtual uint8_t prn_getCurrentPrinterState() const=0; virtual uint8_t prn_getCurrentPrinterState() const=0;
@ -1614,61 +1670,27 @@ public:
// bit6: no response bit7: serial rec. error // bit6: no response bit7: serial rec. error
// bit5: printer not ready // bit5: printer not ready
virtual void sys_sendDeviceParameter(struct T_devices *deviceSettings) const=0; virtual void sys_sendDeviceParameter(struct T_devices *deviceSettings) const=0;
virtual void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const=0; virtual void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const=0;
virtual bool sys_areDCdataValid(void) const=0; virtual bool sys_areDCdataValid(void) const=0;
/* --------------------------------------------------------------------------------------------- virtual bool sys_sendingTest(void) const =0;
// ------------ supervise all hardware components
// ------------ assess the machine state
1. check if DC startup test is through, retrigger if not virtual void prn_requestCurrentDynData(void) const =0;
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)
--------------------------------------------------------------------------------------------- */ virtual bool prn_getCurrentDynamicPrnValuesFromDC(uint8_t *dynPrnVal ) const =0;
// which was sent with: bool prn_sendDynamicPrnValues(uint8_t *dynPrnVal ) const override;
virtual uint8_t sys_componentAssessment(void) const=0; virtual bool prn_dynDataAreEqual(uint8_t *buf) const =0;
// this function decides if vending mode is possible, independant from door
// return >0 in case of error
// is inncluded in sys_superviseSystem
virtual uint8_t sys_superviseSystem(void) const=0; virtual bool prn_printKombiticket(uint8_t nrOfKombi) const=0;
// this function proofs if vending is possible depending of doors state // print four of the templates loaded by Json prior
// nr = 1..8
virtual uint8_t sys_getSystemErrors(void) const=0;
// retrigger System-Check with:
// bool hwapi::sys_runCompleteTest(void) const
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------
signals: signals:
virtual void hwapi_templatePrintFinished_OK(void) const=0; virtual void hwapi_templatePrintFinished_OK(void) const=0;
@ -1707,12 +1729,19 @@ signals:
// 14.04.2023: V3.4 new features extended: sys_getDynMachineConditions, sys_getDeviceConditions and // 14.04.2023: V3.4 new features extended: sys_getDynMachineConditions, sys_getDeviceConditions and
// rtc_getExtendedTime return struct in addition. New function to select and get VaultRecord // rtc_getExtendedTime return struct in addition. New function to select and get VaultRecord
// //
// 19.04.2023: V3.5 new function: sys_getWakeReason();
// 17.05.2023: V3.6 new function: cash_isCollectionActive(), cash_isPayProcessActive()
// new signals: hwapi_coinCollectionJustStopped, hwapi_coinCollectionJustStarted
// getAllInsertedCoins() fixed, also in datif and storeINdata
//#define HWINF_iid "Atb.Psa2020.software.HWapi/3.1" //#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.1"
//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.3" //#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.3"
//#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.4" //#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.4"
#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.5" //#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.5"
#define HWINF_iid "Atb.Psa1256ptu5.software.HWapi/3.6"

View File

@ -122,10 +122,11 @@ void ATBDeviceControllerPlugin::requestPrintTicket(const QHash<QString, QVariant
memcpy((char*)dynTicketData->vendingPrice, ba_amount.data(), std::min(ba_amount.size(),8)); memcpy((char*)dynTicketData->vendingPrice, ba_amount.data(), std::min(ba_amount.size(),8));
QByteArray ba_parkingEndTime = codec->fromUnicode(parkingEndDateTime.toString("hh:mm")); QByteArray ba_parkingEndTime = codec->fromUnicode(parkingEndDateTime.toString("hh:mm"));
memcpy((char*)dynTicketData->parkingEndTime, ba_parkingEndTime.data(), std::min(ba_parkingEndTime.size(),8)); memcpy((char*)dynTicketData->parkingEnd, ba_parkingEndTime.data(), std::min(ba_parkingEndTime.size(),8));
QByteArray ba_parkingEndDate = codec->fromUnicode(parkingEndDateTime.toString("dd.MM.yy")); QByteArray ba_parkingEndDate = codec->fromUnicode(parkingEndDateTime.toString("dd.MM.yy"));
memcpy((char*)dynTicketData->parkingEndDate, ba_parkingEndDate.data(), std::min(ba_parkingEndDate.size(),8)); memcpy((char*)dynTicketData->currentTime, ba_parkingEndDate.data(), std::min(ba_parkingEndDate.size(),8));
// ! and yes... 'ParkingEndDate' is 'currentTime'
QByteArray ba_currentDate = codec->fromUnicode(currentDateTime.toString("dd.MM.yy")); QByteArray ba_currentDate = codec->fromUnicode(currentDateTime.toString("dd.MM.yy"));
memcpy((char*)dynTicketData->currentDate, ba_currentDate.data(), std::min(ba_currentDate.size(),8)); memcpy((char*)dynTicketData->currentDate, ba_currentDate.data(), std::min(ba_currentDate.size(),8));