Merge commit '6099d07650acb28df1a5c9659479351daa7c2d27'
This commit is contained in:
@@ -324,6 +324,7 @@ public:
|
||||
// Sende Schreibbefehle die bereits vorher asynchron gespeichert wurden
|
||||
void send_requests(uint16_t nextWrCmd);
|
||||
void sendHighLevel(uint16_t nxtHLCmd);
|
||||
bool areDataValid(void);
|
||||
|
||||
signals:
|
||||
void ResponseRecieved();
|
||||
|
35
DCPlugin/include/hwChk.h
Executable file
35
DCPlugin/include/hwChk.h
Executable file
@@ -0,0 +1,35 @@
|
||||
|
||||
#ifndef hwchk_H
|
||||
#define hwchk_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <QTabWidget>
|
||||
#include <QObject>
|
||||
#include "interfaces.h"
|
||||
//#include "datIf.h"
|
||||
#include <QDebug>
|
||||
#include <QSharedMemory>
|
||||
#include "hwapi.h"
|
||||
|
||||
//class QSharedMemory;
|
||||
class hwChk : public QObject,
|
||||
public hwinf
|
||||
{
|
||||
Q_OBJECT
|
||||
// Q_PLUGIN_METADATA(IID "Atb.Psa2020.software.HWapi/1.0" ) //FILE "HWapi.json")
|
||||
// Q_INTERFACES(hwinf)
|
||||
//private:
|
||||
// QSharedMemory *m_sharedMem;
|
||||
|
||||
public:
|
||||
explicit hwChk(QWidget *parent = nullptr);
|
||||
virtual ~hwChk();
|
||||
|
||||
|
||||
public:
|
||||
hwinf *HWaccess;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
@@ -1,94 +1,8 @@
|
||||
/*
|
||||
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"
|
||||
|
||||
|
||||
PSA1259 hardware control using the DeviceController DC2
|
||||
|
||||
covering enclosure (switches and doors) and money devices,
|
||||
controls mifare card to access or program
|
||||
optional it can control printer, modem, bar code reader and credit card
|
||||
|
||||
* API to the PSA1259 Hardware
|
||||
* All data come in from device controller via serial interface and will be stored
|
||||
* in "PI" = peripheral image
|
||||
* PI is updated every 100ms (up to 30ms possible)
|
||||
* This api uses stored pi data and returns them in the following functions
|
||||
* created: Q1/2020 TS
|
||||
*
|
||||
|
||||
The devices, connected to device controller2 (DC2) can be controlled in different access levels.
|
||||
Level 1:
|
||||
direct connection to DC2, check versions, state and parameters
|
||||
control serial interfaces
|
||||
digital/analog IO's
|
||||
read and write to connected devices on lowest level, this is a kind of fall-back-level
|
||||
in case higher levels fail or do not support the needed (new) function
|
||||
Example: send a specific printer command, several bytes that need to be conform to
|
||||
printer manual. This command is routed to the printer through the DC2 without
|
||||
any action of the DC. You can write your own device driver that way.
|
||||
Level 1 is flexible but complicated
|
||||
|
||||
Level 2:
|
||||
The DC controls the connected devices containing a device driver. The DC offers
|
||||
usage of the device by simple commands,
|
||||
Example: "Printer on", "set Font size 3" "print "hello world"", "cut"
|
||||
In opposite to level 1 where you had to send a set of numbers and letters.
|
||||
In other words: you "talk" to the device controller, not to the device itself.
|
||||
|
||||
Level 3:
|
||||
start/stop complete processes.
|
||||
Example: 1) print (predefined) document nr 3 with Text, letter size, font set, cut.
|
||||
Also power up/down the printer, check if paper ok and so on.
|
||||
*/
|
||||
|
||||
/*
|
||||
Another access example: control the coin unit
|
||||
|
||||
Level 1): read digital inputs to detect coin,
|
||||
switch digital output which opens coin slot
|
||||
communicate with coin checker by certain mdb-commands (manual conform)
|
||||
poll coin checker for inserted coins
|
||||
close coin slot after 3seconds by setting DO to 0....
|
||||
|
||||
Level 2): get message of attached coin from DC
|
||||
send command "initialize coin checker" to DC
|
||||
send command "open slot for 3s"
|
||||
poll DC for inserted coins, DC polls coin checker in right way, no need
|
||||
to know the data sheet of the coin checker or mdb-bus
|
||||
command to DC "open coin escrow's return flap for 1s"
|
||||
|
||||
Level 3): send command: "start payment process"
|
||||
all coin devices are started up
|
||||
coin blocker opens for 3s if a coin is attached
|
||||
coin checker summarizes inserted value and reports sum
|
||||
later send command "stop payment process" (puts coins to vault) or
|
||||
send command "cancel payment process" (returns coins to user)
|
||||
|
||||
*/
|
||||
|
||||
#ifndef hwapi_H
|
||||
#define hwapi_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <QTabWidget>
|
||||
#include <QtPlugin>
|
||||
#include <QObject>
|
||||
#include "interfaces.h"
|
||||
#include "datIf.h"
|
||||
@@ -98,7 +12,6 @@ class hwapi : public QObject,
|
||||
public hwinf
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "Atb.Psa2020.software.HWapi/1.0" ) //FILE "HWapi.json")
|
||||
Q_INTERFACES(hwinf)
|
||||
private:
|
||||
void sub_storeSendingText(QByteArray *buf) const;
|
||||
@@ -118,13 +31,13 @@ private:
|
||||
|
||||
QSharedMemory *m_sharedMem;
|
||||
public:
|
||||
explicit hwapi(QWidget *parent = nullptr);
|
||||
explicit hwapi(QObject *parent = nullptr);
|
||||
virtual ~hwapi();
|
||||
|
||||
T_datif *myDatif;
|
||||
|
||||
|
||||
virtual QStringList dc_getStatus() const;
|
||||
virtual QStringList dc_getStatus() const override;
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Level 0 commands, interface
|
||||
@@ -1083,6 +996,16 @@ public:
|
||||
uint64_t sys_getWakeSource(void) const override;
|
||||
// retval: 6 bytes, bit coded, 1=event keeps DC awake
|
||||
|
||||
uint8_t sys_getWakeReason(void) const override;
|
||||
// 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
|
||||
|
||||
void sys_getDeviceConditions(uint8_t *leng, uint8_t *data) const override;
|
||||
|
||||
void sys_getDeviceConditions(struct T_moduleCondition *devCond) const override;
|
||||
@@ -1105,6 +1028,50 @@ public:
|
||||
// bit6: no response bit7: serial rec. error
|
||||
// bit5: printer not ready
|
||||
|
||||
void sys_sendDeviceParameter(struct T_devices *deviceSettings) const override;
|
||||
|
||||
void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const override;
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ 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 sys_componentAssessment(void) const override;
|
||||
// this function decides if vending mode is possible, independant from door
|
||||
// return >0 in case of error
|
||||
// is inncluded in sys_superviseSystem
|
||||
|
||||
uint8_t sys_superviseSystem(void) const override;
|
||||
// this function proofs if vending is possible depending of doors state
|
||||
|
||||
|
||||
uint8_t sys_getSystemErrors(void) const override;
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
|
||||
signals:
|
||||
void hwapi_templatePrintFinished_OK(void) const override;
|
||||
|
@@ -182,29 +182,25 @@ struct T_moduleCondition {
|
||||
uint8_t ResetReason;
|
||||
uint8_t allModulesChecked;
|
||||
|
||||
uint8_t alarmState;
|
||||
uint8_t res11;
|
||||
uint8_t res12;
|
||||
uint8_t res13;
|
||||
};
|
||||
|
||||
struct T_dynamicCondition {
|
||||
char allDoorsDebounced;
|
||||
char allDoorsDebounced; // 99: undefined, 0=all closed, bit1=upper door open 2=midlle door open 3=lower door open
|
||||
char openedAuthorized;
|
||||
uint8_t CBinDebounced;
|
||||
char upperDoor; // 0:fehlt 1:drin
|
||||
char middleDoor;
|
||||
char lowerDoor;
|
||||
char coinBox;
|
||||
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 reserve; // not used, always 0
|
||||
char billBox;
|
||||
char modeAbrech;
|
||||
char onAlarm;
|
||||
char onAlarm; // 0:alarm aus 1:alarm 2:alarm mit Sirene 3: Sirenentest
|
||||
char nowCardTest;
|
||||
char nowPayment;
|
||||
char lastMifCardType;
|
||||
uint8_t lastSDoorState;
|
||||
uint8_t lastVDoorState;
|
||||
uint8_t lastCBstate;
|
||||
uint8_t lastCBstate; // 99: undefined 0:not there 1:insered
|
||||
char paymentInProgress;
|
||||
char res1;
|
||||
uint16_t U_Batt;
|
||||
@@ -232,7 +228,8 @@ struct T_dynamicCondition {
|
||||
// bit4: paper jam in cutter
|
||||
// bit6: no response bit7: serial rec. error
|
||||
// bit5: printer not ready
|
||||
//54
|
||||
uint8_t startupTestIsRunning;
|
||||
//54
|
||||
};
|
||||
|
||||
struct T_extTime {
|
||||
@@ -263,6 +260,39 @@ struct T_extTime {
|
||||
uint32_t MinutesOfMillenium;
|
||||
};
|
||||
|
||||
typedef uint8_t UCHAR;
|
||||
typedef uint16_t UINT;
|
||||
|
||||
struct T_devices
|
||||
{
|
||||
// set by master, used(1) or notused (0) or type 2....20
|
||||
|
||||
UCHAR kindOfPrinter; // 0:off 1:Gebe
|
||||
UCHAR kindOfCoinChecker; // 0: without 1=EMP820 2=EMP900 3=currenza c² (MW)
|
||||
UCHAR kindOfMifareReader; // by now only stronglink SL025 =1
|
||||
UCHAR suppressSleepMode; // 0:sleep allowed 1: no sleep
|
||||
|
||||
UCHAR kindOfModem; // 0:off 1:Sunlink
|
||||
UCHAR kindOfCreditcard; // 0:off 1:Feig NFC
|
||||
UCHAR CoinEscrow;
|
||||
UCHAR CoinRejectUnit;
|
||||
|
||||
UCHAR CoinShutter;
|
||||
UCHAR BillAcceptor;
|
||||
UCHAR usevaultLock;
|
||||
UCHAR autoAlarm; // 1: switch on siren for 1min in doors opened unauthorized
|
||||
|
||||
UCHAR autoOpen; // 1: open door covers after valid ATBcard
|
||||
UCHAR printAccReceipt; // 0/1
|
||||
UCHAR printDoorReceipt;
|
||||
UCHAR printTokenTicket;
|
||||
|
||||
UINT VaultFullWarnLevel;
|
||||
UINT VaultFullErrorLevel;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class hwinf {
|
||||
public:
|
||||
enum class DownloadResult {OK, ERROR, TIMEOUT, NOP};
|
||||
@@ -1451,6 +1481,16 @@ public:
|
||||
virtual uint64_t sys_getWakeSource(void) const =0;
|
||||
// retval: 6 bytes, bit coded, 1=event keeps DC awake
|
||||
|
||||
virtual uint8_t sys_getWakeReason(void) const=0;
|
||||
// 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
|
||||
|
||||
virtual void sys_getDeviceConditions(uint8_t *leng, uint8_t *data) const=0;
|
||||
/*
|
||||
|
||||
@@ -1572,6 +1612,60 @@ public:
|
||||
// bit6: no response bit7: serial rec. error
|
||||
// bit5: printer not ready
|
||||
|
||||
virtual void sys_sendDeviceParameter(struct T_devices *deviceSettings) const=0;
|
||||
|
||||
virtual void sys_restoreDeviceParameter(struct T_devices *deviceSettings) const=0;
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------
|
||||
// ------------ 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)
|
||||
|
||||
--------------------------------------------------------------------------------------------- */
|
||||
|
||||
virtual uint8_t sys_componentAssessment(void) 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;
|
||||
// this function proofs if vending is possible depending of doors state
|
||||
|
||||
virtual uint8_t sys_getSystemErrors(void) const=0;
|
||||
|
||||
|
||||
// retrigger System-Check with:
|
||||
// bool hwapi::sys_runCompleteTest(void) const
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
|
||||
signals:
|
||||
virtual void hwapi_templatePrintFinished_OK(void) const=0;
|
||||
virtual void hwapi_templatePrintFinished_Err(void) const=0;
|
||||
|
@@ -237,6 +237,14 @@ uint8_t check4freeFDlongCmd(void);
|
||||
// returns number of free places in long-command stack
|
||||
|
||||
|
||||
|
||||
uint8_t epi_store64BdevParameter(uint8_t length, uint8_t *buf);
|
||||
// HWapi writes data to be stored
|
||||
|
||||
uint8_t epi_restore64BdevParameter(uint8_t *length, uint8_t *buf);
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@@ -225,6 +225,9 @@ struct SharedMemBuffer {
|
||||
uint8_t vaultrecord[360];
|
||||
uint32_t amount;
|
||||
uint16_t nrOfCoins;
|
||||
bool dcDataValid;
|
||||
uint8_t wakeReason;
|
||||
|
||||
} store;
|
||||
|
||||
struct T_globTime {
|
||||
|
@@ -3,7 +3,7 @@
|
||||
#define STOREINDATA_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "tslib.h"
|
||||
//#include "tslib.h"
|
||||
#include <QString>
|
||||
|
||||
|
||||
@@ -384,6 +384,7 @@ bool epi_CurrentPaymentGetAllCoins(uint16_t *types, uint16_t *values);
|
||||
|
||||
void gpi_storeWakeSources(uint8_t const *receivedData);
|
||||
uint64_t epi_getWakeSources(void);
|
||||
uint8_t epi_getWakeReason(void);
|
||||
|
||||
void gpi_storeExtendedTime(uint8_t leng, uint8_t const *data);
|
||||
void epi_restoreExtendedTime(uint8_t *leng, uint8_t *data);
|
||||
@@ -415,6 +416,11 @@ uint8_t epi_mifGetCardType(uint8_t const *holder);
|
||||
//holder[8] = name of card holder
|
||||
// retval Type of MifareCard, 1=upper door, 2=lower door 3=test printer 4=test coins
|
||||
|
||||
void gpi_storeDcDataValid(bool isVal);
|
||||
bool gpi_areDcDataValid();
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user