2023-11-14 09:32:56 +01:00
|
|
|
#include "win16.h"
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
static char generalState=0;
|
2023-11-14 09:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
|
T_win16::T_win16(hwinf *HWaccess, QWidget *parent) : QWidget(parent)
|
|
|
|
{
|
|
|
|
this->HWaccess = HWaccess;
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
//myLayout = new QGridLayout;
|
|
|
|
myH0layer = new QHBoxLayout;
|
|
|
|
myVlayer_left = new QVBoxLayout;
|
|
|
|
myVlayer_midd = new QVBoxLayout;
|
|
|
|
myVlayer_right = new QVBoxLayout;
|
|
|
|
myH0layer->addLayout(myVlayer_left);
|
|
|
|
myH0layer->addLayout(myVlayer_midd);
|
|
|
|
myH0layer->addLayout(myVlayer_right);
|
|
|
|
// myVlayer_left->addWidget(lab1);
|
|
|
|
|
2023-11-14 09:32:56 +01:00
|
|
|
|
|
|
|
QFont myTabFont;
|
2024-07-08 10:34:47 +02:00
|
|
|
myTabFont.setPixelSize(PIXELSIZE_BIGFONT);
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
lab1 =new QLabel(tr("PSA1256DC Doors"));
|
2023-11-14 09:32:56 +01:00
|
|
|
lab1->setFont(myTabFont);
|
2024-07-08 10:34:47 +02:00
|
|
|
myVlayer_left->addWidget(lab1);
|
|
|
|
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
myTabFont.setPixelSize(PIXELSIZE_DATA);
|
|
|
|
win16_showDoors = new QListWidget;
|
|
|
|
win16_showDoors->setFont(myTabFont);
|
|
|
|
myVlayer_left->addWidget(win16_showDoors);
|
|
|
|
win16_showDoors->clear();
|
|
|
|
win16_showDoors->addItem(" - ");
|
|
|
|
|
|
|
|
myTabFont.setPixelSize(PIXELSIZE_BIGFONT);
|
2023-11-14 09:32:56 +01:00
|
|
|
lab2 =new QLabel(tr(" "));
|
|
|
|
lab2->setFont(myTabFont);
|
2024-07-08 10:34:47 +02:00
|
|
|
myVlayer_left->addWidget(lab2);
|
|
|
|
|
|
|
|
lab3 =new QLabel(tr("PSA1256DC Status"));
|
2023-11-14 09:32:56 +01:00
|
|
|
lab3->setFont(myTabFont);
|
2024-07-08 10:34:47 +02:00
|
|
|
myVlayer_left->addWidget(lab3);
|
|
|
|
|
|
|
|
myTabFont.setPixelSize(PIXELSIZE_DATA);
|
|
|
|
win16_showErrors = new QListWidget;
|
|
|
|
win16_showErrors->setFont(myTabFont);
|
|
|
|
myVlayer_left->addWidget(win16_showErrors);
|
|
|
|
win16_showErrors->clear();
|
|
|
|
win16_showErrors->addItem("no errors, no warnings");
|
|
|
|
|
|
|
|
lab4 =new QLabel(tr(" "));
|
|
|
|
lab4->setFont(myTabFont);
|
|
|
|
myVlayer_midd->addWidget(lab4);
|
|
|
|
|
|
|
|
myTabFont.setPixelSize(PIXELSIZE_BUTTONS);
|
|
|
|
pb1 = new QPushButton("S E R V I C E");
|
|
|
|
pb1->setFont(myTabFont);
|
|
|
|
myVlayer_right->addWidget(pb1);
|
|
|
|
connect(pb1, SIGNAL(clicked()), this, SLOT(Button1Clicked()));
|
|
|
|
|
|
|
|
pb2 = new QPushButton(" D E M O ");
|
|
|
|
pb2->setFont(myTabFont);
|
|
|
|
myVlayer_right->addWidget(pb2);
|
|
|
|
connect(pb2, SIGNAL(clicked()), this, SLOT(Button2Clicked()));
|
|
|
|
|
|
|
|
pb3 = new QPushButton(" E X I T ");
|
|
|
|
pb3->setFont(myTabFont);
|
|
|
|
myVlayer_right->addWidget(pb3);
|
|
|
|
connect(pb3, SIGNAL(clicked()), this, SLOT(Button3Clicked()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//setLayout(myLayout);
|
|
|
|
setLayout(myH0layer);
|
2023-11-14 09:32:56 +01:00
|
|
|
|
|
|
|
myNextStep=0;
|
|
|
|
myStep=0;
|
|
|
|
|
|
|
|
myTO = new QTimer();
|
|
|
|
myTO->setSingleShot(true);
|
|
|
|
myTO->start(2000);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
T_win16::~T_win16()
|
|
|
|
{
|
|
|
|
close();
|
|
|
|
}
|
|
|
|
|
|
|
|
void T_win16::Nav_back(void)
|
|
|
|
{
|
|
|
|
myNextStep=WCS_WIN16BAK;
|
|
|
|
}
|
|
|
|
void T_win16::Nav_home(void)
|
|
|
|
{
|
|
|
|
myNextStep=WCS_WIN16MID;
|
|
|
|
}
|
|
|
|
void T_win16::Nav_next(void)
|
|
|
|
{
|
|
|
|
myNextStep=WCS_WIN16FWD;
|
|
|
|
}
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
void T_win16::Button1Clicked(void)
|
|
|
|
{
|
|
|
|
myNextStep=PAGE_SERVICEMAIN;
|
|
|
|
}
|
|
|
|
|
|
|
|
void T_win16::Button2Clicked(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
myNextStep=PAGE_SERVICEMAIN;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void T_win16::Button3Clicked(void)
|
|
|
|
{
|
|
|
|
//emit quitMyApp();
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
|
|
|
bool T_win16::work_ini(uint16_t *nextScreen, uint8_t *useNavi)
|
|
|
|
{
|
|
|
|
// one state of the vending/operating FSM
|
|
|
|
// called ONE time after selecting this state (initialization)
|
|
|
|
// useNavi=0: no change
|
|
|
|
// bit0,1: enable/disable button "next"
|
|
|
|
// bit2,3: enable/disable button "home"
|
|
|
|
// bit4,5: enable/disable button "back"
|
|
|
|
|
|
|
|
*nextScreen=0; // needed 0=no change
|
|
|
|
*useNavi=SWITCH_BACK_ON | SWITCH_HOME_ON | SWITCH_NEXT_ON;
|
|
|
|
myNextStep=0;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool T_win16::working(uint16_t *nextScreen, uint8_t *useNavi)
|
|
|
|
{
|
|
|
|
// one state of the vending/operating FSM
|
|
|
|
// called cyclic until this state changes intentionally to another state
|
|
|
|
// display informations for human operator, react on operators inputs or wait for payment media
|
|
|
|
|
|
|
|
// useNavi=0: no change
|
|
|
|
// bit0,1: enable/disable button "next"
|
|
|
|
// bit2,3: enable/disable button "home"
|
|
|
|
// bit4,5: enable/disable button "back"
|
|
|
|
|
|
|
|
*nextScreen=0; // 0=no change
|
|
|
|
*useNavi=0;
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (generalState==0)
|
|
|
|
{
|
|
|
|
win16_showErrors->setStyleSheet("background-color: green");
|
|
|
|
win16_showErrors->clear();
|
|
|
|
win16_showErrors->addItem(" *** machine OK ***");
|
|
|
|
} else
|
|
|
|
if (generalState==1)
|
|
|
|
{
|
|
|
|
win16_showErrors->setStyleSheet("background-color: yellow");
|
|
|
|
} else
|
|
|
|
if (generalState==2)
|
|
|
|
{
|
|
|
|
win16_showErrors->setStyleSheet("background-color: red");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (HWaccess->sys_areDCdataValid())
|
|
|
|
{
|
|
|
|
showDoorState();
|
|
|
|
showErrAndWarn();
|
|
|
|
win16_showDoors->setStyleSheet(COLORGREY);
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
win16_showDoors->setStyleSheet(COLOR_LIGHTRED);
|
|
|
|
win16_showErrors->setStyleSheet(COLOR_LIGHTRED);
|
|
|
|
win16_showDoors->clear();
|
|
|
|
win16_showDoors->addItem(" DC not connected");
|
|
|
|
win16_showErrors->clear();
|
|
|
|
win16_showErrors->addItem(" DC not connected");
|
|
|
|
}
|
|
|
|
if (myNextStep)
|
|
|
|
{
|
|
|
|
*nextScreen=myNextStep;
|
|
|
|
myNextStep=0;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void T_win16::showErrAndWarn(void)
|
|
|
|
{
|
|
|
|
static struct T_moduleCondition myDevCond;
|
|
|
|
static struct T_devices devPara; // used devices
|
|
|
|
uint8_t uctmp;
|
|
|
|
|
|
|
|
myDevCond.rtc=0;
|
|
|
|
myDevCond.changer=0;
|
|
|
|
devPara.autoAlarm=0;
|
|
|
|
|
|
|
|
HWaccess->sys_getDeviceConditions(&myDevCond);
|
|
|
|
HWaccess->sys_restoreDeviceParameter(&devPara);
|
|
|
|
qDebug()<<"win16 changer: "<<myDevCond.changer;
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
win16_showErrors->clear();
|
|
|
|
generalState=0;
|
|
|
|
|
|
|
|
if ( myDevCond.rtc>=200)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error RTC HW");
|
2023-11-14 09:32:56 +01:00
|
|
|
} else
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.rtc>=100)
|
|
|
|
{
|
|
|
|
if (generalState==0) generalState=1;
|
|
|
|
win16_showErrors->addItem("Warning RTC time may be wrong");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.printer==200)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Printer no response");
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
if (myDevCond.printer==201)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Printer HW");
|
|
|
|
} else
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.printer==202)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Printer no Paper");
|
|
|
|
} else
|
|
|
|
if (myDevCond.printer>=100)
|
|
|
|
{
|
|
|
|
if (generalState==0) generalState=1;
|
|
|
|
win16_showErrors->addItem("Warning Printer NearPaperEnd");
|
|
|
|
}
|
|
|
|
|
2023-11-14 09:32:56 +01:00
|
|
|
}
|
2024-07-08 10:34:47 +02:00
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.coinBlocker>=200)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Coin Blocker");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.mdbBus>=200)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Mdb Bus");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (myDevCond.intEe>=200)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error int eeprom");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.coinChecker>=200)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Coin checker");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.coinEscrow>=200)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Coin escrow");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (devPara.kindOfCoinChecker==3)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
uctmp = myDevCond.changer;
|
|
|
|
if (uctmp>=200)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Coin changer");
|
|
|
|
}
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (devPara.kindOfCoinChecker>0)
|
|
|
|
{
|
|
|
|
if (myDevCond.coinSafe==200)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error no cash box ");
|
|
|
|
}
|
|
|
|
if (myDevCond.coinSafe==201)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error cash box full");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( myDevCond.billReader>=200 )
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error Bill reader");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.voltage==200)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error voltage off limits");
|
|
|
|
}
|
|
|
|
if (myDevCond.voltage==201)
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error voltage too low");
|
|
|
|
}
|
|
|
|
if (myDevCond.temper==200 )
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error temperature off limits");
|
|
|
|
}
|
|
|
|
if (myDevCond.temper==201 )
|
|
|
|
{
|
|
|
|
generalState=2;
|
|
|
|
win16_showErrors->addItem("Error extrem temperature");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (devPara.kindOfCoinChecker>0)
|
|
|
|
{
|
|
|
|
if (myDevCond.coinSafe>=100 && myDevCond.coinSafe<200)
|
|
|
|
{
|
|
|
|
if (generalState==0) generalState=1;
|
|
|
|
win16_showErrors->addItem("Warning cash box almost full");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (myDevCond.voltage>=100 && myDevCond.voltage<200)
|
|
|
|
{
|
|
|
|
if (generalState==0) generalState=1;
|
|
|
|
win16_showErrors->addItem("Warning voltage low");
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (myDevCond.temper>=100 && myDevCond.temper<200 )
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
if (generalState==0) generalState=1;
|
|
|
|
win16_showErrors->addItem("Warning temperature");
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
void T_win16::showDoorState(void)
|
|
|
|
{
|
|
|
|
static struct T_dynamicCondition dynCond;
|
|
|
|
static char acc_stat;
|
|
|
|
|
|
|
|
win16_showDoors->clear();
|
|
|
|
HWaccess->sys_getDynMachineConditions(&dynCond);
|
|
|
|
if (dynCond.upperDoor==0) // 99: undefined 0:closed 1:open
|
|
|
|
win16_showDoors->addItem("service door closed");
|
|
|
|
else
|
|
|
|
if (dynCond.upperDoor==1)
|
|
|
|
win16_showDoors->addItem("service door open");
|
|
|
|
|
|
|
|
if (dynCond.middleDoor==0) // 99: undefined 0:closed 1:open
|
|
|
|
{
|
|
|
|
win16_showDoors->addItem("vault door closed");
|
|
|
|
lab2->setText(" ");
|
|
|
|
acc_stat=0;
|
2023-11-14 09:32:56 +01:00
|
|
|
} else
|
2024-07-08 10:34:47 +02:00
|
|
|
if (dynCond.middleDoor==1)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
win16_showDoors->addItem("vault door open");
|
|
|
|
if (dynCond.onAlarm==0)
|
|
|
|
{
|
|
|
|
if (dynCond.CBinDebounced==1) // drin
|
|
|
|
{
|
|
|
|
if (acc_stat==2)
|
|
|
|
{
|
|
|
|
lab2->setText("close vault door please");
|
|
|
|
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
lab2->setText("cash box can be removed now...");
|
|
|
|
acc_stat=1;
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
if (acc_stat==1 )
|
|
|
|
{
|
|
|
|
lab2->setText("insert cash box please");
|
|
|
|
acc_stat=2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-11-14 09:32:56 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
if (dynCond.lowerDoor==0) // 99: undefined 0:closed 1:open
|
|
|
|
win16_showDoors->addItem("battery door closed");
|
|
|
|
else
|
|
|
|
if (dynCond.lowerDoor==1)
|
|
|
|
win16_showDoors->addItem("battery door open");
|
|
|
|
|
|
|
|
if (dynCond.CBinDebounced==0)
|
|
|
|
win16_showDoors->addItem("no cash box");
|
|
|
|
else
|
|
|
|
if (dynCond.CBinDebounced==1)
|
|
|
|
win16_showDoors->addItem("cash box inserted");
|
|
|
|
|
|
|
|
|
|
|
|
if (dynCond.modeAbrech)
|
|
|
|
win16_showDoors->addItem("cash box change ongoing...");
|
|
|
|
|
|
|
|
if (dynCond.onAlarm)
|
|
|
|
win16_showDoors->addItem("on alarm");
|
|
|
|
|
|
|
|
if (dynCond.lastMifCardType==1)
|
2023-11-14 09:32:56 +01:00
|
|
|
{
|
2024-07-08 10:34:47 +02:00
|
|
|
win16_showDoors->addItem("valid card Service door");
|
|
|
|
lab2->setText(" service door may be opened now...");
|
2023-11-14 09:32:56 +01:00
|
|
|
}
|
2024-07-08 10:34:47 +02:00
|
|
|
|
|
|
|
if (dynCond.lastMifCardType==2)
|
|
|
|
{
|
|
|
|
win16_showDoors->addItem("valid card Vault door");
|
|
|
|
lab2->setText(" vault door may be opened now...");
|
|
|
|
}
|
|
|
|
|
2023-11-14 09:32:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-07-08 10:34:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|