• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

gui/udpwidget.cpp (r4864/r1348)

Go to the documentation of this file.
00001 #include "udpwidget.h"
00002 
00003 #include <QFileDialog>
00004 #include <QTimer>
00005 #include <QApplication>
00006 
00007 UdpWidget::UdpWidget(QWidget* parent, roc::UdpBoard* brd) :
00008    SubWidget(parent),
00009    fBoard(brd)
00010 {
00011    setupUi(this);
00012 
00013 //   QObject::connect(GetLimitsButton, SIGNAL(clicked()), this, SLOT(getLimits()));
00014 //   QObject::connect(SetLimitsButton, SIGNAL(clicked()), this, SLOT(setLimits()));
00015 
00016    QObject::connect(LowSpin, SIGNAL(valueChanged(int)), this, SLOT(setSubChangedOn()));
00017    QObject::connect(HighSpin, SIGNAL(valueChanged(int)), this, SLOT(setSubChangedOn()));
00018 
00019    QObject::connect(UploadSwButton, SIGNAL(clicked()), this, SLOT(uploadSofwtare()));
00020    QObject::connect(UploadFw0Button, SIGNAL(clicked()), this, SLOT(uploadFirmware0()));
00021    QObject::connect(UploadFw1Button, SIGNAL(clicked()), this, SLOT(uploadFirmware1()));
00022    QObject::connect(UploadCfgButton, SIGNAL(clicked()), this, SLOT(uploadConfiguration()));
00023 
00024    QTimer::singleShot(1000, this, SLOT(checkStatistic()));
00025 
00026    UploadLbl->setText("Select file for upload");
00027    UploadProgress->setValue(0);
00028 
00029    fUploadTime = 0;
00030    fUploadSpent = 0;
00031 
00032    getSubConfig();
00033 }
00034 
00035 void UdpWidget::setLimits()
00036 {
00037    int lowWater = LowSpin->value();
00038    int highWater = HighSpin->value();
00039    if (lowWater < highWater)
00040       fBoard->setRocLowHighWater(lowWater, highWater);
00041 
00042    getLimits();
00043 }
00044 
00045 void UdpWidget::getLimits()
00046 {
00047    int lowWater(0), highWater(0);
00048    fBoard->getRocLowHighWater(lowWater, highWater);
00049    LowSpin->setValue(lowWater);
00050    HighSpin->setValue(highWater);
00051 }
00052 
00053 bool UdpWidget::getSubConfig()
00054 {
00055    getLimits();
00056 
00057    takeStatistic();
00058 
00059    return true;
00060 }
00061 
00062 bool UdpWidget::setSubConfig()
00063 {
00064    setLimits();
00065 
00066    return true;
00067 }
00068 
00069 bool UdpWidget::fillCmdFile(FILE* f)
00070 {
00071    fprintf(f, "\n// UDP settings\n");
00072    int lowWater = LowSpin->value();
00073    int highWater = HighSpin->value();
00074    if (lowWater < highWater)
00075       fprintf(f, "setlhwater low=%d,high=%d\n", lowWater, highWater);
00076 
00077    return true;
00078 }
00079 
00080 
00081 void UdpWidget::upload(int kind)
00082 {
00083    if (fUploadTime>0) return;
00084 
00085    QFileDialog fd(this);
00086 
00087    QStringList filters;
00088    switch(kind) {
00089       case 0:
00090          fd.setWindowTitle("Select powerPC software file");
00091          filters << "power-pc image (*.bin)";
00092          break;
00093       case 1:
00094          fd.setWindowTitle("Select FPGA firmware 0 file");
00095          filters << "fpga image (*.bit)";
00096          break;
00097       case 2:
00098          fd.setWindowTitle("Select FPGA firmware 1 file");
00099          filters << "fpga image (*.bit)";
00100          break;
00101       case 3:
00102          fd.setWindowTitle("Select powerPC configuration file");
00103          filters << "Configuration (*.cfg)";
00104          break;
00105    }
00106 
00107    filters << "Any files (*)";
00108    fd.setFilters(filters);
00109 
00110    fd.setFileMode(QFileDialog::ExistingFile);
00111 
00112    if (fd.exec() != QDialog::Accepted) return;
00113 
00114    QStringList flst = fd.selectedFiles();
00115    if (flst.isEmpty()) return;
00116 
00117    int upload_tm(0);
00118    QString lbl;
00119 
00120    switch (kind) {
00121       case 0:
00122          upload_tm = fBoard->uploadSDfile(flst[0].toAscii(), "image.bin");
00123          lbl = "Wait ~%1 s, uploading software ...";
00124          break;
00125       case 1:
00126          upload_tm = fBoard->uploadBitfile(flst[0].toAscii(), 0);
00127          lbl = "Wait ~%1 s, uploading firmware 0 ...";
00128          break;
00129       case 2:
00130          upload_tm = fBoard->uploadBitfile(flst[0].toAscii(), 1);
00131          lbl = "Wait ~%1 s, uploading firmware 1 ...";
00132          break;
00133       case 3:
00134          upload_tm = fBoard->uploadSDfile(flst[0].toAscii(), "ROC1.cfg");
00135          lbl = "Wait ~%1 s, uploading config ...";
00136          break;
00137    }
00138 
00139    UploadProgress->setValue(0);
00140 
00141    if (upload_tm<=0) {
00142       UploadLbl->setText("Uploading: failed");
00143       return;
00144    }
00145 
00146    fUploadTime = upload_tm;
00147    if (fUploadTime>40) fUploadTime-=40;
00148 
00149    UploadLbl->setText(QString(lbl).arg(fUploadTime));
00150 
00151    fUploadSpent = 0;
00152 
00153    QTimer::singleShot(1000, this, SLOT(uploading()));
00154 }
00155 
00156 void UdpWidget::uploading()
00157 {
00158    if (fUploadTime<=0) return;
00159 
00160    fUploadSpent++;
00161 
00162    int value = 99;
00163    if (fUploadSpent<fUploadTime) value = 100*fUploadSpent/fUploadTime;
00164 
00165    UploadProgress->setValue(value);
00166 
00167    int res = fBoard->checkUpload();
00168 
00169    if (res==1) {
00170       QTimer::singleShot(1000, this, SLOT(uploading()));
00171       return;
00172    }
00173 
00174    if (res==2) {
00175       UploadLbl->setText("Uploading: done");
00176       UploadProgress->setValue(100);
00177    } else {
00178       UploadLbl->setText("Uploading: failed");
00179       UploadProgress->setValue(0);
00180    }
00181 
00182    fUploadSpent = 0;
00183    fUploadTime = 0;
00184 
00185 }
00186 
00187 
00188 
00189 void UdpWidget::uploadSofwtare()
00190 {
00191    upload(0);
00192 }
00193 
00194 void UdpWidget::uploadFirmware0()
00195 {
00196    upload(1);
00197 }
00198 
00199 void UdpWidget::uploadFirmware1()
00200 {
00201    upload(2);
00202 }
00203 
00204 void UdpWidget::uploadConfiguration()
00205 {
00206    upload(3);
00207 }
00208 
00209 void UdpWidget::takeStatistic()
00210 {
00211    roc::BoardStatistic* stat = fBoard->takeStat(0.05);
00212 
00213    if (stat==0) return;
00214 
00215    const char* daqmode = "Off";
00216    if (stat->daqState==1) daqmode = "On"; else
00217       if (stat->daqState==2) daqmode = "Suspending";
00218 
00219    StatLbl->setText(
00220          QString("Data rate   \t %1 MB/s\n"
00221                "Send rate   \t %2 MB/s\n"
00222                "Recv rate   \t %3 MB/s\n"
00223                "NOP rate    \t %4 1/s\n"
00224                "Frames rate \t %5 1/s\n"
00225                "Data taking \t %6 %\n"
00226                "Dispatching \t %7 %\n"
00227                "Sending     \t %8 %\n"
00228                "Daq state   \t %9 \n")
00229                .arg(stat->dataRate*1e-6, 5, 'f', 3)
00230                .arg(stat->sendRate*1e-6, 5, 'f', 3)
00231                .arg(stat->recvRate*1e-6, 5, 'f', 3)
00232                .arg(stat->nopRate)
00233                .arg(stat->frameRate)
00234                .arg(stat->takePerf*1e-3, 4, 'f', 1)
00235                .arg(stat->dispPerf*1e-3, 4, 'f', 1)
00236                .arg(stat->sendPerf*1e-3, 4, 'f', 1)
00237                .arg(daqmode)
00238    );
00239 }
00240 
00241 void UdpWidget::checkStatistic()
00242 {
00243    if (EnableStatBox->checkState() == Qt::Checked) takeStatistic();
00244 
00245    QTimer::singleShot(1000, this, SLOT(checkStatistic()));
00246 }

Generated on Tue Dec 10 2013 04:52:22 for ROCsoft by  doxygen 1.7.1