#include "win04_stat.h" static bool win04_dataAreValid; T_win04::T_win04(hwinf *HWaccess, QWidget *parent) : QWidget(parent) { this->HWaccess = HWaccess; myLayout = new QGridLayout; QFont myTabFont; myTabFont.setPixelSize(PIXELSIZE_LABEL); lab1 =new QLabel(tr("Machine status")); lab1->setFont(myTabFont); myLayout->addWidget(lab1,1,0); myTabFont.setPixelSize(PIXELSIZE_BUTTONS); pb_refresh = new QPushButton("Refresh"); pb_refresh->setFont(myTabFont); pb_refresh->setStyleSheet("background-color: rgb(250,150,150)"); // hell rot myLayout->addWidget(pb_refresh,1,1); connect(pb_refresh, SIGNAL(clicked()), this, SLOT(ButtonRefreshClicked())); myTabFont.setPixelSize(PIXELSIZE_LABEL); lab2 =new QLabel(tr("Error or Warning:")); lab2->setFont(myTabFont); myLayout->addWidget(lab2,2,0); myTabFont.setPixelSize(PIXELSIZE_DATA); win4_showErrors = new QListWidget; win4_showErrors->setFont(myTabFont); myLayout->addWidget(win4_showErrors,3,0); myTabFont.setPixelSize(PIXELSIZE_LABEL); lab3 =new QLabel(tr("Used devices")); lab3->setFont(myTabFont); myLayout->addWidget(lab3,4,0); myTabFont.setPixelSize(PIXELSIZE_DATA); win4_devParameters = new QListWidget; win4_devParameters->setFont(myTabFont); myLayout->addWidget(win4_devParameters,5,0); // rechte Spalte: myTabFont.setPixelSize(PIXELSIZE_LABEL); lab4 =new QLabel(tr("state of each device:")); lab4->setFont(myTabFont); myLayout->addWidget(lab4,2,1); myTabFont.setPixelSize(PIXELSIZE_DATA); win4_showDeviceState = new QListWidget; win4_showDeviceState->setFont(myTabFont); myLayout->addWidget(win4_showDeviceState,3,1); myTabFont.setPixelSize(PIXELSIZE_LABEL); lab5 =new QLabel(tr("dynamic condition:")); lab5->setFont(myTabFont); myLayout->addWidget(lab5,4,1); myTabFont.setPixelSize(PIXELSIZE_DATA); win4_showMachineState = new QListWidget; win4_showMachineState->setFont(myTabFont); myLayout->addWidget(win4_showMachineState,5,1); setLayout(myLayout); myNextStep=0; myStep=0; myTO = new QTimer(); myTO->setSingleShot(true); myTO->start(2000); } T_win04::~T_win04() { close(); } void T_win04::Nav_back(void) { myNextStep=WCS_WIN04BAK; } void T_win04::Nav_home(void) { myNextStep=WCS_WIN04MID; } void T_win04::Nav_next(void) { myNextStep=WCS_WIN04FWD; } void T_win04::ButtonRefreshClicked(void) { win04_dataAreValid=0; pb_refresh->setStyleSheet("background-color: white"); } bool T_win04::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; win04_dataAreValid=0; return false; } void T_win04::entryDevState(QString label, uint8_t val) { QString myStr; myStr.clear(); myStr.append(label); myStr.append(QString::number(val)); win4_showDeviceState->addItem(myStr); } void T_win04::entryMachineCond(QString label, uint32_t val) { QString myStr; myStr.clear(); myStr.append(label); myStr.append(QString::number(val)); win4_showMachineState->addItem(myStr); } void T_win04::entryArray(QString label, uint8_t *buff) { QString myStr; char myChar; int nn; myStr.clear(); myStr.append(label); for (nn=0; nn<8; nn++) { myChar=char(buff[nn]); myStr.append(myChar); } win4_showMachineState->addItem(myStr); } bool T_win04::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" QString myStr; *nextScreen=0; // 0=no change *useNavi=0; struct T_moduleCondition myDevCond; struct T_dynamicCondition myDynMachCond; struct T_devices devPara; // used devices // neu, 24.7.24 static bool win04_dcDataAreValid; bool bget; bget=HWaccess->sys_areDCdataValid(); if (bget && !win04_dcDataAreValid) { // DC soeben ANgesteckt win04_dcDataAreValid=true; win04_dataAreValid=0; // genau jetzt die Geräte Stati einlesen, scheinen nicht immer aktuell zu sein pb_refresh->setStyleSheet("background-color: rgb(150,230,150)"); // hell grün } if (!bget && win04_dcDataAreValid) { // DC soeben ABgesteckt win04_dcDataAreValid=false; win04_dataAreValid=0; pb_refresh->setStyleSheet("background-color: rgb(250,150,150)"); // hell rot } HWaccess->sys_restoreDeviceParameter(&devPara); if (!win04_dataAreValid) { win04_dataAreValid=1; win4_showDeviceState->clear(); HWaccess->sys_getDeviceConditions(&myDevCond); entryDevState("Internal Ram : ", myDevCond.ram ); entryDevState("Internal Eeprom: ", myDevCond.intEe ); entryDevState("External Eeprom: ", myDevCond.extEe ); entryDevState("Real Time Clock: ", myDevCond.rtc ); entryDevState("Board Hardware : ", myDevCond.boardHw ); entryDevState("Printer : ", myDevCond.printer ); entryDevState("Modem : ", myDevCond.modem ); entryDevState("GSM Signal : ", myDevCond.signal ); entryDevState("GSMregistration: ", myDevCond.regist ); entryDevState("MDB Bus : ", myDevCond.mdbBus ); entryDevState("Coin Checker : ", myDevCond.coinChecker ); entryDevState("Coin Escrow : ", myDevCond.coinEscrow ); entryDevState("Mifare Reader : ", myDevCond.mifareReader ); entryDevState("Credit Terminal: ", myDevCond.creditTerm ); entryDevState("Reject Motor : ", myDevCond.coinReject ); entryDevState("Coin Safe : ", myDevCond.coinSafe ); entryDevState("Bill Safe : ", myDevCond.billSafe ); entryDevState("Battery Voltage: ", myDevCond.voltage ); entryDevState("Temperature : ", myDevCond.temper ); entryDevState("Power-On-Test : ", myDevCond.poweronTest ); entryDevState("Doors State : ", myDevCond.doorState ); entryDevState("Door-Was-Opened: ", myDevCond.doorWasOpened ); entryDevState("Coin Changer : ", myDevCond.changer ); entryDevState("Coin Blocker : ", myDevCond.coinBlocker ); entryDevState("Banknote Reader: ", myDevCond.billReader ); entryDevState("Reset Reason : ", myDevCond.ResetReason ); entryDevState("Check Complete : ", myDevCond.allModulesChecked ); entryDevState("Alarm State : ", myDevCond.alarmState ); //entryDevState(": ", myDevCond. ); //entryDevState(": ", myDevCond. ); win4_showMachineState->clear(); HWaccess->sys_getDynMachineConditions(&myDynMachCond); entryMachineCond("All Doors deb.: ", myDynMachCond.allDoorsDebounced); entryMachineCond("open Authorize: ", myDynMachCond.openedAuthorized ); entryMachineCond("CBin debounced: ", myDynMachCond.CBinDebounced ); entryMachineCond("Upper Door : ", myDynMachCond.upperDoor ); entryMachineCond("Middle Door: : ", myDynMachCond.middleDoor ); entryMachineCond("Lower Door : ", myDynMachCond.lowerDoor ); //entryMachineCond("Coin Safe in : ", myDynMachCond.coinBox ); entryMachineCond("Bill Box in : ", myDynMachCond.billBox ); entryMachineCond("Mode Account : ", myDynMachCond.modeAbrech ); entryMachineCond("On Alarm now : ", myDynMachCond.onAlarm ); entryMachineCond("CardTest now : ", myDynMachCond.nowCardTest ); //entryMachineCond("Payment now : ", myDynMachCond.nowPayment ); entryMachineCond("last CardType : ", myDynMachCond.lastMifCardType ); entryMachineCond("last Sdoor st.: ", myDynMachCond.lastSDoorState ); entryMachineCond("last Vdoor st.: ", myDynMachCond.lastVDoorState ); entryMachineCond("last Vault st.: ", myDynMachCond.lastCBstate ); entryMachineCond("PayInProgress : ", myDynMachCond.paymentInProgress ); //entryMachineCond(": ", myDynMachCond.res1 ); entryMachineCond("Voltage now : ", myDynMachCond.U_Batt ); entryMachineCond("Temperature : ", myDynMachCond.Temperatur ); entryMachineCond("Nr Coins now : ", myDynMachCond.nrCoinsInBox ); entryMachineCond("Amount now : ", myDynMachCond.amountInBox ); entryMachineCond("Tot.Trans.Vol.: ", myDynMachCond.totalTransVolume ); entryMachineCond("Tot.Nr.Vends : ", myDynMachCond.totalNrOfVends ); entryMachineCond("jsonConf valid: ", myDynMachCond.jsonValid_config ); entryMachineCond("jsonDev valid : ", myDynMachCond.jsonValid_device ); entryMachineCond("jsonCash valid: ", myDynMachCond.jsonValid_cash ); entryMachineCond("jsonPri valid : ", myDynMachCond.jsonValid_print ); entryMachineCond("jsonSer valid : ", myDynMachCond.jsonValid_serial ); entryMachineCond("jsonTime valid: ", myDynMachCond.jsonValid_time ); entryMachineCond("last File Type: ", myDynMachCond.lastFileType ); entryArray( "Card Holder : ", myDynMachCond.MifCardHolder ); entryMachineCond("Print result : ", myDynMachCond.resultOfLastTemplPrint ); entryMachineCond("last Pri. Stat: ", myDynMachCond.lastPrinterStatus ); entryMachineCond("startup run : ", myDynMachCond.startupTestIsRunning); entryMachineCond("totalNrOfCuts: ", myDynMachCond.totalNrOfCuts ); entryMachineCond("nextAccountNumber: ", myDynMachCond.nextAccountNumber ); entryMachineCond("nrOfBillsInBox: ", myDynMachCond.nrOfBillsInBox ); entryMachineCond("amountInBillbox: ", myDynMachCond.amountInBillbox ); entryMachineCond("UbatAtLastPrint: ", myDynMachCond.UbatAtLastPrint ); entryMachineCond("reserve08: ", myDynMachCond.reserve08 ); entryMachineCond("reserve14: ", myDynMachCond.reserve14); win4_showErrors->clear(); win4_devParameters->clear(); //HWaccess->sys_restoreDeviceParameter(&devPara); // all 0 if (myDevCond.rtc>=200) win4_showErrors->addItem("Error RTC HW"); else if (myDevCond.rtc>=100) win4_showErrors->addItem("Warning RTC time may be wrong"); if (myDevCond.printer==200) win4_showErrors->addItem("Error Printer no response"); if (myDevCond.printer==201) win4_showErrors->addItem("Error Printer HW"); if (myDevCond.printer==202) win4_showErrors->addItem("Error Printer no Paper"); if (myDevCond.coinBlocker>=200) win4_showErrors->addItem("Error Coin Blocker"); if (myDevCond.mdbBus>=200) win4_showErrors->addItem("Error Mdb Bus"); if (myDevCond.intEe>=200) win4_showErrors->addItem("Error int eeprom"); if (myDevCond.coinChecker>=200) win4_showErrors->addItem("Error Coin checker"); if (myDevCond.coinEscrow>=200) win4_showErrors->addItem("Error Coin escrow"); if (devPara.kindOfCoinChecker==3) { if (myDevCond.changer>=200) win4_showErrors->addItem("Error Coin changer"); } if (devPara.kindOfCoinChecker>0) // irgendeiner { if (myDevCond.coinSafe==200) win4_showErrors->addItem("Error no cash box "); if (myDevCond.coinSafe==201) win4_showErrors->addItem("Error cash box full"); } if ( myDevCond.billReader>=200 ) { win4_showErrors->addItem("Error Bill reader"); } if (myDevCond.voltage==200) win4_showErrors->addItem("Error voltage off limits"); if (myDevCond.voltage==201) win4_showErrors->addItem("Error voltage too low"); if (myDevCond.temper==200 ) win4_showErrors->addItem("Error temperature off limits"); if (myDevCond.temper==201 ) win4_showErrors->addItem("Error extrem temperature"); if (myDevCond.printer==100) win4_showErrors->addItem("Warning Printer NearPaperEnd"); if (devPara.kindOfCoinChecker>0) // irgendeiner { if (myDevCond.coinSafe>=100 && myDevCond.coinSafe<200) win4_showErrors->addItem("Warning cash box almost full"); } if (myDevCond.voltage>=100 && myDevCond.voltage<200) win4_showErrors->addItem("Warning voltage low"); if (myDevCond.temper>=100 && myDevCond.temper<200 ) win4_showErrors->addItem("Warning temperature"); } if (myNextStep) { //qDebug()<<"fenster1 working: "<< myNextStep; *nextScreen=myNextStep; myNextStep=0; } return false; } /* uint8_t T_win04::sub_componentAssessment(void) { // 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; HWaccess->sys_getDeviceConditions(modCond); struct T_dynamicCondition *dynMaCond=0; HWaccess->sys_getDynMachineConditions(dynMaCond); struct T_devices *devPara=0; //hwaccess->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; } */ //uint8_t T_win04::sys_getSystemErrors(void) //{ // 0: everything fine 1..15: errors /* 1: real time clock error 2: printer error 3: no paper 4: coin blocker 5: mdb error 6: mem error int.ee. 7: error coin validator 8: coin safe missed or full 9: bill acceptor error 10: alarm / intrusion 11: cash box change is ongoing 12: card test running 13: startup-test is running 14: voltage error 15: temperature error */ // return this->sub_componentAssessment(); //}