#include "win12_BL.h" #define BUTTONCOLOR0 "background-color: white" #define BUTTONCOLORWAIT "background-color: yellow" #define BUTTONCOLORGOT "background-color: green" #define BUTTONCOLORBAD "background-color: red" #define BUTTONCOLORGOOD "background-color: green" static bool win12_startProgramming; static uint16_t win12_nrOfFWblocks, win12_currentBlkNr; T_win12::T_win12(hwinf *HWaccess, QWidget *parent) : QWidget(parent) { this->HWaccess = HWaccess; myVmainlayer= new QVBoxLayout; myH0layer = new QHBoxLayout; myH1layer = new QHBoxLayout; myVlayer_left = new QVBoxLayout; myVlayer_midd = new QVBoxLayout; myVlayer_right = new QVBoxLayout; myVmainlayer->addLayout(myH0layer); myVmainlayer->addLayout(myH1layer); QFont myTabFont; myTabFont.setPixelSize(22); lab1 =new QLabel(tr("program DC-firmware")); lab1->setFont(myTabFont); myH0layer->addWidget(lab1); lab2 =new QLabel(tr(" ")); lab2->setFont(myTabFont); myH0layer->addWidget(lab2); myH1layer->addLayout(myVlayer_left); myH1layer->addLayout(myVlayer_midd); myH1layer->addLayout(myVlayer_right); // linke Spalte: controls QLabel *lab7 = new QLabel(" "); lab7->setFont(myTabFont); myVlayer_left->addWidget(lab7); but9 = new QPushButton("Starting \nBootloader"); myVlayer_left->addWidget(but9); connect(but9, SIGNAL(clicked()), this, SLOT(slot_b9())); but9->setStyleSheet(BUTTONCOLOR0); but9->setFont(myTabFont); QLabel *lab3 = new QLabel(" "); lab3->setFont(myTabFont); myH0layer->addWidget(lab3); but4 = new QPushButton("load Bin-File"); myVlayer_left->addWidget(but4); connect(but4, SIGNAL(clicked()), this, SLOT(slot_b4())); but4->setStyleSheet(BUTTONCOLOR0); but4->setFont(myTabFont); QLabel *lab4 = new QLabel(" "); lab4->setFont(myTabFont); myH0layer->addWidget(lab4); but5 = new QPushButton(" send file to DC"); myVlayer_left->addWidget(but5); connect(but5, SIGNAL(clicked()), this, SLOT(slot_b5())); but5->setStyleSheet(BUTTONCOLOR0); but5->setFont(myTabFont); QLabel *lab5 = new QLabel(" "); lab5->setFont(myTabFont); myH0layer->addWidget(lab5); /* but6 = new QPushButton(" "); myVlayer_left->addWidget(but6); connect(but6, SIGNAL(clicked()), this, SLOT(slot_b6())); but6->setStyleSheet(BUTTONCOLOR0); but6->setFont(myTabFont); but7 = new QPushButton(" "); myVlayer_left->addWidget(but7); connect(but7, SIGNAL(clicked()), this, SLOT(slot_b7())); but7->setStyleSheet(BUTTONCOLOR0); but7->setFont(myTabFont); but8 = new QPushButton(" "); myVlayer_left->addWidget(but8); connect(but8, SIGNAL(clicked()), this, SLOT(slot_b8())); but8->setStyleSheet(BUTTONCOLOR0); but8->setFont(myTabFont); */ /* but9 = new QPushButton("complete start"); myVlayer_left->addWidget(but9); connect(but9, SIGNAL(clicked()), this, SLOT(slot_b9())); but9->setStyleSheet(BUTTONCOLOR0); but9->setFont(myTabFont); */ myTabFont.setPixelSize(14); but1 = new QPushButton("restart DC: "); myVlayer_left->addWidget(but1); connect(but1, SIGNAL(clicked()), this, SLOT(slot_b1())); but1->setStyleSheet(BUTTONCOLOR0); but1->setFont(myTabFont); but2 = new QPushButton("Start BL: "); myVlayer_left->addWidget(but2); connect(but2, SIGNAL(clicked()), this, SLOT(slot_b2())); but2->setStyleSheet(BUTTONCOLOR0); but2->setFont(myTabFont); but3 = new QPushButton("check BL: "); myVlayer_left->addWidget(but3); connect(but3, SIGNAL(clicked()), this, SLOT(slot_b3())); but3->setStyleSheet(BUTTONCOLOR0); but3->setFont(myTabFont); QLabel *lab6 = new QLabel(" "); lab6->setFont(myTabFont); myH0layer->addWidget(lab6); myTabFont.setPixelSize(22); but10 = new QPushButton("stop BL: "); myVlayer_left->addWidget(but10); connect(but10, SIGNAL(clicked()), this, SLOT(slot_b10())); but10->setStyleSheet(BUTTONCOLOR0); but10->setFont(myTabFont); // Mitte: anzeigen showState =new QLabel("BL is off"); showState->setFont(myTabFont); myVlayer_midd->addWidget(showState); myTabFont.setPixelSize(14); showFile =new QLabel(" --- no file loaded ---"); showFile->setFont(myTabFont); myVlayer_midd->addWidget(showFile); showProgress = new QTextEdit(); myVlayer_midd->addWidget(showProgress); myTabFont.setPixelSize(14); showProgress->setFont(myTabFont); showProgress->setStyleSheet("background-color: white"); showProgress->append(" "); setLayout(myVmainlayer); myTO = new QTimer(); myTO->setSingleShot(true); myTO->start(2); trigger_BLstartup=false; win12_startProgramming=0; win12_nrOfFWblocks=0; win12_currentBlkNr=0; } T_win12::~T_win12() { close(); } void T_win12::Nav_back(void) { myNextStep=WCS_WIN12BAK; } void T_win12::Nav_home(void) { myNextStep=WCS_WIN12MID; } void T_win12::Nav_next(void) { myNextStep=WCS_WIN12FWD; } void T_win12::slot_b1(void) { showProgress->append(" rebooting"); HWaccess->dc_autoRequest(false); HWaccess->bl_rebootDC(); } void T_win12::slot_b2(void) { HWaccess->dc_autoRequest(false); HWaccess->bl_startBL(); } void T_win12::slot_b3(void) { HWaccess->dc_autoRequest(false); showState->setText(" "); HWaccess->bl_checkBL(); myTO->stop(); myTO->start(200); myStep=20; } void T_win12::slot_b4(void) { QString myStr; QString fileName; win12_nrOfFWblocks=0; fileName.clear(); fileName = QFileDialog::getOpenFileName(this, ("Select DC firmware file:"), "C:/own/work2023/PSA1256ptu5/PTU SW", ("binary file(*.bin)")); //qDebug()<<"T_win12: selected file: "<bl_storeFirmware(fileName); win12_nrOfFWblocks = HWaccess->bl_getNrOfFirmwareBlocks(); if (ret) { myStr.clear(); myStr=" file "; myStr.append(fileName); myStr.append(" \n loaded with "); myStr.append(swl_ulong2str(win12_nrOfFWblocks)); myStr.append(" blocks"); showFile->setText(myStr); } else showFile->setText(" cannot load file :-( "); } void T_win12::slot_b5(void) { win12_startProgramming=true; myStep=5; } void T_win12::slot_b6(void) { } void T_win12::slot_b7(void) { } void T_win12::slot_b8(void) { } void T_win12::slot_b9(void) { showState->setText(" Bootloader is off "); showFile->setText(" "); //trigger_BLstartup=true; //myStep=0; // neu, 29.9: Start-Schrittkette jetzt in HWapi: HWaccess->bl_completeStart(); } void T_win12::slot_b10(void) { showState->setText(" Bootloader is off "); showFile->setText(" "); HWaccess->bl_stopBL(); HWaccess->dc_autoRequest(true); } bool T_win12::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_win12::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; //int8_t iresult; if (HWaccess->bl_isUp()) showState->setText(" Bootloader is running"); /* if (myStep==0) { if (trigger_BLstartup) { HWaccess->dc_autoRequest(false); myStep++; } } else if (myStep==1) { //qDebug()<<"win12 chain step 1"; if (trigger_BLstartup) { //qDebug()<<"starting up BL step1"; trigger_BLstartup=false; HWaccess->bl_rebootDC(); myTO->stop(); myTO->start(1000); // restart retryCtr=0; myStep++; //qDebug()<<"win12 chain step 2"; } } else if (myStep==2) { if (!myTO->isActive()) { qDebug()<<"starting BL"; HWaccess->bl_startBL(); myTO->stop(); myTO->start(100); myStep++; //qDebug()<<"win12 chain step 3"; } } else if (myStep==3) { if (!myTO->isActive()) { HWaccess->bl_checkBL(); myTO->stop(); myTO->start(100); myStep++; //qDebug()<<"win12 chain step 4"; } } else if (myStep==4) { if (!myTO->isActive()) { //qDebug()<<"starting up BL step4"; myTO->stop(); if (HWaccess->bl_isUp()) { myStep++; //qDebug()<<"win12 chain step 5"; showState->setText(" --- BL is up and running ---"); //qDebug()<<"BL laeuft!!!"; } else { retryCtr++; // start again if (retryCtr>=15) { myStep=99; //qDebug()<<"win12 chain step 99"; showState->setText(" --- BL error! ---"); //qDebug()<<"BL error!!!"; } else { myStep=3; //qDebug()<<"BL retry..."; //qDebug()<<"win12 chain step 3"; } } } } else if (myStep==5) { if (win12_startProgramming) { win12_nrOfFWblocks = HWaccess->bl_getNrOfFirmwareBlocks(); if (win12_nrOfFWblocks>10) { // qDebug()<<"win12 chain step 6"; myStep++; } win12_currentBlkNr=0; showProgress->append("transfering file:"); win12_startProgramming=0; } } else if (myStep==6) { //qDebug()<<"starting transfer"; HWaccess->bl_blockAutoLoad(win12_currentBlkNr); showProgress->append(swl_int2str(win12_currentBlkNr)); myStep++; //qDebug()<<"win12 chain step 6->7"; } else if (myStep==7) { iresult=HWaccess->bl_blockAutoResponse(); // 0: wait 1: OK, blk was sent 2: OK, transfer complete 3: error if (iresult==1) { win12_currentBlkNr++; if (win12_currentBlkNr <= win12_nrOfFWblocks) { myStep=6; //qDebug()<<"win12 chain step 7->6"; } else { showProgress->append("finished"); //qDebug()<<"win12 chain step 99"; myStep=99; } } else if (iresult==2) { // fertisch showProgress->append("finished"); myStep=99; } else if (iresult==3) { // fehler showProgress->append("cancel due to error"); myStep=99; } } else if (myStep==8) { } else { } if (myStep==20) { if (!myTO->isActive()) { //qDebug()<<"win12 step0"; if (HWaccess->bl_isUp()) showState->setText(" Bootloader is running"); //else // lab7->setText(" Bootloader is off "); myTO->stop(); myStep=99; } } */ if (myNextStep) { *nextScreen=myNextStep; myNextStep=0; } return false; }