Compare commits

...

11 Commits

Author SHA1 Message Date
91ce1c84d8 be sure to copy not too much data to buf 2024-06-27 13:23:15 +02:00
dda9e4ad8f void epi_clearDynMachineConditions(void)
void gpi_storeDynMachineConditions(void const *data)
void epi_restoreDynMachineConditions(void *data)
	use T_dynamicConditions directly.
2024-06-27 12:48:39 +02:00
81cba7e615 void T_runProc::sub_getDynMachineConditions(struct T_dynamicCondition *dynMachCond):
Use T_dynamicCondition directly.
2024-06-27 12:46:51 +02:00
b4a6d4a073 void hwapi::sys_getDynMachineConditions(): no length info anymore.
void hwapi::sys_getDynMachineConditions(struct T_dynamicCondition *dynMachCond) const:
	no loop, just write to shared mem using struct T_dynamicCondition.
uint8_t hwapi::prn_getCurrentPrinterState() const:
	use struct T_dynamicCondition.lastPrinterStatus.
2024-06-27 12:42:35 +02:00
c8d7f2f904 When receiving dynamic machine data, check if not too much data has been
received: copy only as much data as possible.
2024-06-27 12:40:50 +02:00
0dc38d8908 Changed declarations of
void gpi_storeDynMachineConditions(void const *data);
void epi_restoreDynMachineConditions(void *data);
2024-06-27 12:39:58 +02:00
f28f102ca0 Add struct T_dynamicMachCond directly into shared-mem 2024-06-27 12:39:32 +02:00
d04e9ead89 Changes declaration
virtual void sys_getDynMachineConditions(void *data) const;
2024-06-27 12:38:11 +02:00
9a584713e9 Changed declaration:
void sys_getDynMachineConditions(void *data) const override;
2024-06-27 12:37:02 +02:00
0fca448c53 Added dynamic-machine-conditions.h 2024-06-27 12:36:23 +02:00
a4afc4ced7 To be used later, to replace some parts of interfaces.h 2024-06-27 12:35:46 +02:00
10 changed files with 123 additions and 77 deletions

View File

@ -87,6 +87,7 @@ HEADERS += \
$${PWD}/include/dcBL.h \
$${PWD}/include/hwapi.h \
$${PWD}/include/interfaces.h \
$${PWD}/include/dynamic-machine-conditions.h \
$${PWD}/include/sendWRcmd.h \
$${PWD}/include/storeINdata.h \
$${PWD}/include/tslib.h \

View File

@ -0,0 +1,84 @@
#ifndef DYNAMIC_MACHINE_CONDITIONS_H_INCLUDED
#define DYNAMIC_MACHINE_CONDITIONS_H_INCLUDED
struct T_dynamicCondition
{
char allDoorsDebounced;
char openedAuthorized;
uint8_t CBinDebounced; // 0:fehlt 1:drin
char upperDoor; // 99: undefined 0:closed 1:open
char middleDoor; // 99: undefined 0:closed 1:open
char lowerDoor; // 99: undefined 0:closed 1:open
char coinAttached;
char billBox;
char modeAbrech;
char onAlarm; // 0:alarm aus 1:alarm 2:alarm mit Sirene 3: Sirenentest
char nowCardTest;
char nowPayment; // not used, always 0
char lastMifCardType;
uint8_t lastSDoorState;
uint8_t lastVDoorState;
uint8_t lastCBstate;
char paymentInProgress;
// Version Szeged: aug2023
// 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
// since Schoenau with bill and changer, nov2023
//0 = no payment
//will be set to 1 by cash_startCollection()
//neu 1: wait for devices getting ready for payment
//2 = payment,
//3 = wait for last coin/bill
//4 = Bezahlvorgang manuell beendet
//5 = payment stopped autom, amount collected, coins in Escrow
//6 = Bezahlvorgang beendet weil ZK voll
//4,5,6: payment done, keep on polling, wait for cash or return command
//7 = encash collected money from coin escrow into cash box
//8 = return "amountToReturn", can be complete inserted amount or only overpayment
//9 = wait for changer result
//10= print refund receipt with "amountToReturn"
char res1;
uint16_t U_Batt;
uint16_t Temperatur;
uint16_t nrCoinsInBox;
uint32_t amountInBox;
uint32_t totalTransVolume;
uint32_t totalNrOfVends;
char jsonValid_config;
char jsonValid_device;
char jsonValid_cash;
char jsonValid_print;
// 40
char jsonValid_serial;
char jsonValid_time;
char lastFileType;
uint8_t MifCardHolder[8];
uint8_t resultOfLastTemplPrint;
// 0: unknown or printing in progress
// 1: OK, doc was printed 2: error, doc was not printed
uint8_t lastPrinterStatus;
// 0: printer OK
// bit0: near paper end bit1: no paper
// bit2: temperature error bit3: error head open
// bit4: paper jam in cutter
// bit6: no response bit7: serial rec. error
// bit5: printer not ready
uint8_t startupTestIsRunning;
uint8_t padd01;
uint8_t padd02;
uint8_t padd03;
uint32_t padd04;
uint32_t padd05;
uint32_t padd06;
uint16_t padd07;
};
#endif // DYNAMIC_MACHINE_CONDITIONS_H_INCLUDED

View File

@ -1033,8 +1033,7 @@ public:
void sys_getDeviceConditions(struct T_moduleCondition *devCond) const override;
void sys_getDynMachineConditions(uint8_t *leng, uint8_t *data) const override;
void sys_getDynMachineConditions(void *data) const override;
void sys_getDynMachineConditions(struct T_dynamicCondition *dynMachCond) const override;

View File

@ -3,8 +3,6 @@
#include <QtPlugin>
struct T_emp
{
@ -1858,8 +1856,7 @@ public:
Q_UNUSED(devCond);
}
virtual void sys_getDynMachineConditions(uint8_t *leng, uint8_t *data) const {
Q_UNUSED(leng);
virtual void sys_getDynMachineConditions(void *data) const {
Q_UNUSED(data);
}

View File

@ -7,6 +7,7 @@
#include <QSharedMemory>
#include <QtGlobal>
#include "interfaces.h"
bool shdMem_firstUse(void);
@ -190,8 +191,10 @@ struct SharedMem
uint8_t store_deviceCondLen;
uint8_t store_deviceCond[66];
uint8_t store_machCondLen;
uint8_t store_machCond[66];
// uint8_t store_machCondLen;
// uint8_t store_machCond[66];
struct T_dynamicCondition dynMachCond;
uint8_t store_DcBackupNrOfAccNr;
uint16_t store_DcBackupAccNr[16]; // z.Z. nur 8

View File

@ -488,10 +488,8 @@ void epi_restoreDeviceConditions(uint8_t *leng, uint8_t *data);
void epi_clearDynMachineConditions(void); // new, 24.6.23
void gpi_storeDynMachineConditions(uint8_t leng, uint8_t *data);
void epi_restoreDynMachineConditions(uint8_t *leng, uint8_t *data);
void gpi_storeDynMachineConditions(void const *data);
void epi_restoreDynMachineConditions(void *data);
void gpi_storeDCbackupAccNr(uint8_t leng, uint8_t *data);

View File

@ -14,6 +14,7 @@ History:
#include <QDir>
#include <algorithm> // min/max
@ -1042,9 +1043,19 @@ char T_datif::loadRecDataFromFrame()
epi_setDcDataValid(); // DC-Data are valid as DC responded.
// Could be set to every response but this (31)
// is a very common and very important request
gpi_storeDynMachineConditions(RdDleng, receivedData);
gpi_storeDI_CoinAttach(receivedData[6]); // new, 14.2.24 needed for direct coin insertion
if (RdDleng > sizeof(struct T_dynamicCondition)) {
qCritical() << "!!!WARNING!!! RdDlen too high" << RdDleng;
// only use as many bytes as maximally possible
char buf[sizeof(struct T_dynamicCondition)];
memset(buf, 0, sizeof(buf));
memcpy(buf, receivedData, std::min(sizeof(receivedData), sizeof(struct T_dynamicCondition)));
gpi_storeDynMachineConditions(buf);
} else {
gpi_storeDynMachineConditions(receivedData);
}
gpi_storeDI_CoinAttach(((struct T_dynamicCondition *)receivedData)->coinAttached); // new, 14.2.24 needed for direct coin insertion
}
/* funktioniert, ist aber nicht nötig. Signal wird nach dem shared memory erzeugt

View File

@ -3229,29 +3229,14 @@ void hwapi::sys_getDeviceConditions(struct T_moduleCondition *devCond) const
void hwapi::sys_getDynMachineConditions(uint8_t *leng, uint8_t *data) const
void hwapi::sys_getDynMachineConditions(void *data) const
{
epi_restoreDynMachineConditions(leng, data);
epi_restoreDynMachineConditions(data);
}
void hwapi::sys_getDynMachineConditions(struct T_dynamicCondition *dynMachCond) const
{
uint16_t LL, nn;
char *start;
uint8_t buf[70], leng;
epi_restoreDynMachineConditions(&leng, buf);
// Puffer in struct eintragen:
LL=sizeof(struct T_dynamicCondition);
start = &dynMachCond->allDoorsDebounced;
nn=0;
do
{
*start = buf[nn];
start++;
} while(++nn<LL);
epi_restoreDynMachineConditions(dynMachCond);
}
@ -3288,19 +3273,15 @@ uint8_t hwapi::prn_getCurrentPrinterState() const
// bit4: paper jam in cutter
// bit6: no response bit7: serial rec. error
// bit5: printer not ready
uint8_t lastPrinterStatus;
uint8_t buf[70], leng;
struct T_dynamicCondition dynCond;
memset(&dynCond, 0, sizeof(dynCond));
if (!epi_areDcDataValid()) // was set to 0 with print command
return 0x40; // no response
// 2nd way to get dyn.conditions:
epi_restoreDynMachineConditions(&leng, buf);
lastPrinterStatus=buf[52];
return lastPrinterStatus;
epi_restoreDynMachineConditions(&dynCond);
return dynCond.lastPrinterStatus;
// oder mit:
//struct T_dynamicCondition myDynMachCond;

View File

@ -400,22 +400,7 @@ void T_runProc::changer_getAllParameters(struct T_changer *mw)
void T_runProc::sub_getDynMachineConditions(struct T_dynamicCondition *dynMachCond)
{
uint16_t LL, nn;
char *start;
uint8_t buf[70], leng;
epi_restoreDynMachineConditions(&leng, buf);
// Puffer in struct eintragen:
LL=sizeof(struct T_dynamicCondition);
start = &dynMachCond->allDoorsDebounced;
nn=0;
do
{
*start = buf[nn];
start++;
} while(++nn<LL);
epi_restoreDynMachineConditions(dynMachCond);
}

View File

@ -6,6 +6,8 @@
#include "shared_mem_buffer.h"
#include "datei.h"
#include "interfaces.h" // #include "dynamic-machine-conditions.h"
// gpi: grafical access to PI: access from external devices over device controller FOR GUI
// epi: external access from GUI to PI: FOR external devices (DC)
@ -1932,32 +1934,17 @@ void epi_restoreDeviceConditions(uint8_t *leng, uint8_t *data)
void epi_clearDynMachineConditions(void)
{
uint8_t nn;
SharedMem::write()->store_machCondLen=0;
for (nn=0; nn<64; nn++)
SharedMem::write()->store_machCond[nn] = 0;
memset(&SharedMem::write()->dynMachCond, 0, sizeof(struct T_dynamicCondition));
}
void gpi_storeDynMachineConditions(uint8_t leng, uint8_t *data)
void gpi_storeDynMachineConditions(void const *data)
{
uint8_t nn;
if (leng>64) leng=64;
SharedMem::write()->store_machCondLen=leng;
// tslib_strcpy(data, SharedMem::write()->store_machCond, leng);
for (nn=0; nn<leng; nn++)
SharedMem::write()->store_machCond[nn] = data[nn];
SharedMem::write()->dynMachCond = *(struct T_dynamicCondition const *)(data);
}
}
void epi_restoreDynMachineConditions(uint8_t *leng, uint8_t *data)
void epi_restoreDynMachineConditions(void *data)
{
uint8_t nn, LL;
LL=SharedMem::read()->store_machCondLen;
*leng=LL;
//tslib_strcpy(SharedMem::read()->store_machCond, data, SharedMem::read()->store_machCondLen);
for (nn=0; nn<LL; nn++)
data[nn] = SharedMem::read()->store_machCond[nn];
*(struct T_dynamicCondition *)(data) = SharedMem::read()->dynMachCond;
}