457 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			457 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #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);
 | |
|     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;
 | |
| }
 | |
| 
 | |
| 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
 | |
| 
 | |
|     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();
 | |
| 
 | |
| //}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |