#include "mainwindow.h" #include "ui_mainwindow.h" QThread* MainWindow::_uiThread; MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); _uiThread = QThread::currentThread(); this->setFixedSize(this->width(), this->height()); _settings = new QSettings("Hasis", "HwTester"); _usd = new UltraSoundDevice(); _timeout = new QTimer; _bCtrl = new BoardsCtrlMngt(_usd->device); _healStatus = new HealthStatus; _supRbValue = new SupervisorRbValue; _faultStatus = new MpsFaultStatus; _version = new FpgaCodeVersion; _vec = new StatusVec; _emul = new EmulatorProperties; _prb = new PrbCase; _colorMap = new QCPColorMap(ui->plot_2->xAxis, ui->plot_2->yAxis); ui->plot_2->setInteractions(QCP::iRangeZoom | QCP::iRangeDrag); ui->plot_2->axisRect()->setupFullAxesBox(true); ui->plot_2->xAxis->setLabel("Line"); ui->plot_2->yAxis->setLabel("Point"); //ui->prg_adcSim->setVisible(false); //ui->prg_scenarioUpload->setVisible(false); //ui->prg_txDacUpload->setVisible(false); //ui->prg_fpgaProgram->setVisible(false); //ui->prg_adcLoggerFileWr->setVisible(false); //ui->tb_scenarioFile->setReadOnly(true); //ui->tb_paramFile->setReadOnly(true); //ui->tb_txDacFile->setReadOnly(true); ui->tb_fpgaBit->setReadOnly(true); //ui->tb_scenarioFile->setText(_settings->value(SCENARIO_FILE_PATH).value()); //ui->tb_paramFile->setText(_settings->value(PARAM_FILE_PATH).value()); //ui->tb_txDacFile->setText(_settings->value(TX_DAC_FILE_PATH).value()); ui->rbtn_reg->setChecked(_settings->value(REG_ACCESS_SEL).value()); ui->rbtn_offset->setChecked(!_settings->value(REG_ACCESS_SEL).value()); ui->tb_fpgaBit->setText(_settings->value(FPGA_FILE_PATH).value()); ui->tb_scenFilesPath->setText(_settings->value(SCENARIO_FILE_PATH).value()); ui->tb_trxRomId->setPlaceholderText("id(hex)"); ui->tb_trxRomInfo->setPlaceholderText("info"); ui->tb_mpsRomId->setPlaceholderText("id(hex)"); ui->tb_mpsRomInfo->setPlaceholderText("info"); ui->tb_prbCtrlRomId->setPlaceholderText("id(hex)"); ui->tb_prbCtrlRomInfo->setPlaceholderText("info"); ui->tb_prbRomIdRead->setPlaceholderText("id(hex)"); ui->tb_prbRomImpulseRead->setPlaceholderText("impulse"); ui->prg_programming->setVisible(false); //connect(this, &MainWindow::updateBlockProgressValue, this, //&MainWindow::newBlockProgressValue); //connect(this, &MainWindow::updateFpgaProgressValue, this, &MainWindow::newFpgaProgressValue); //connect(this, &MainWindow::updateBlockProgressVisibility, this, //&MainWindow::newBlockProgressVisibility); //connect(this, &MainWindow::updateFpgaProgressVisibility, this, //&MainWindow::newFpgaProgressVisibility); //connect(this, &MainWindow::updateAdcLoggerProgressValue, this, //&MainWindow::newAdcLoggerProgressValue); //connect(this, &MainWindow::updateAdcLoggerProgressVisibility, this, //&MainWindow::newAdcLoggerProgressVisibility); connect(this, &MainWindow::showMessage, this, &MainWindow::newMessage); connect(this, &MainWindow::connectedPrbChange, this, &MainWindow::getPrbChange); connect(this, &MainWindow::frameLostCall, this, &MainWindow::getFrameLost); connect(_timeout, &QTimer::timeout, this, &MainWindow::timeout); connect(this, &MainWindow::scenarioReady, this, &MainWindow::setScenario); connect(this, &MainWindow::labelState, this, &MainWindow::getLabelState); connect(this, &MainWindow::fpgaProgrammer, this, &MainWindow::getFpgaProgrammer); connect(_trx._fpgaProgram,&FpgaProgram::programmingProgress, this, &MainWindow::getProgrammingProgress); //////////////////////// DMA Packet Connections ////////////////////////////// connect(&_trx, &TrxBoard::sendFramePacket, this, &MainWindow::getFramePacket); connect(this, &MainWindow::sendLogCount, this, &MainWindow::catchLogCount); connect(this, &MainWindow::twoDReady, this, &MainWindow::show2d, Qt::BlockingQueuedConnection); connect(this, &MainWindow::threeDReady, this, &MainWindow::show3d, Qt::BlockingQueuedConnection); /////////////////// Scenario Verification Connections ///////////////////////// connect(&_trx, &TrxBoard::sramBinaryCreateFlag, this, &MainWindow::getSramBinaryCreateFlag); connect(&_trx, &TrxBoard::registerCsvCompareFlag, this, &MainWindow::getRegisterCsvCompareFlag); connect(&_trx, &TrxBoard::sramVerifyMessage, this, &MainWindow::getSramVerifyMessage); ui->btn_updateRdbackValue->setText(UPDATE); ui->btn_dmaLogLast->setHidden(true); //uint32_t offsetdbgCmd[3] = {0x140000*4,0x240000*4,0x340000*4}; //auto value = 0; //for (auto i=0 ; i<3;i++) //{ //value = (_usd->readWord(offsetdbgCmd[i], 0)) & 0xC; //if(value != 0) //break; //} //if(value != 0) //ui->ch_testMode->setCheckState(Qt::CheckState::Checked); _dmaLog = false; _dmaRun = false; _dmaShow = false; setAfeConfig(); try { _trx.init(); } catch(SonoException& e) { qDebug() << e.what(); } _timeout->start(1000); //////////////////////////// First Time Probe Detection ////////////////////////////// #ifdef MPS_BOARD emit connectedPrbChange(); #endif QFont fontTitle; fontTitle.setBold(true); fontTitle.setItalic(true); ui->table_probe->verticalHeaderItem(0)->setFont(fontTitle); ui->table_probe->horizontalHeaderItem(0)->setFont(fontTitle); ui->table_probe->horizontalHeaderItem(1)->setFont(fontTitle); ui->table_probe->horizontalHeaderItem(2)->setFont(fontTitle); ui->table_probe->horizontalHeaderItem(3)->setFont(fontTitle); } MainWindow::~MainWindow() { delete ui; delete _settings; delete _usd; delete _timeout; delete _healStatus; delete _bCtrl; delete _supRbValue; delete _faultStatus; delete _version; delete _vec; delete _emul; } ///*************************************************************************************************/ //void MainWindow::binAdcFileUploader(quint32 bar, QString path, QProgressBar* prg) //{ //QFile file(path); //if (!file.open(QFile::ReadOnly)) //{ //MESSAGE_BOX("Could not open binary file, aborting operation"); //return; //} //emit updateBlockProgressVisibility(true, prg); //emit updateBlockProgressValue(0, prg); //const auto actualSize = file.size(); //qint64 readSize = 0; //quint32 addr = 0; //quint32 data = 0; //auto syncNum = 0; //while((readSize < actualSize) & !_csvReadStopFlag) //{ //QByteArray chunk = file.read(8); //auto value = byteArrayTo64LittleEndian(chunk); //try //{ //addr = static_cast(value >> 32); //data = static_cast(value & 0xFFFFFFFF); //_usd->writeWord(addr, bar, data); //if (addr != 3076) //{ //qDebug() << syncNum << "==> " << addr << "::" << data; //syncNum +=1; //} //} catch (myexception e) //{ //MESSAGE_BOX(e.what()); //emit updateBlockProgressVisibility(false, prg); //file.close(); //return; //} //readSize += 8; //auto percentage = (readSize * 100 / actualSize); //emit updateBlockProgressValue(percentage, prg); //} ////MESSAGE_BOX("Binary file upload finished with success"); //emit updateBlockProgressVisibility(false, prg); //file.close(); //} ///*************************************************************************************************/ //#define NO_AFE_CHANNEL 192 //#define NO_LOGGER_SMPL_COUNT 2048 //void MainWindow::AdcLogCsvFileWriter(QString folderPath, QProgressBar* prg) //{ //quint32 bar = 0; //quint32 offset = 0x2000; //uint32_t offsetDbgTrsfr[3] = {0x140002*4,0x240002*4,0x340002*4}; //uint32_t offsetDbgTrsfrDone[3] = {0x14000A*4,0x24000A*4,0x34000A*4}; //_adcLoggerTrnsDone = false; //QTime t = QTime::currentTime(); //QString path = folderPath + "/adcLog_" + //QString("%1_%2_%3.csv").arg(t.hour()).arg(t.minute()).arg(t.second()); //QFile file(path); //file.open(QIODevice::WriteOnly); //emit updateBlockProgressVisibility(true, prg); //emit updateBlockProgressValue(0, prg); //auto timeOut = 0; //quint32 doneFlag = 0; //quint32 value = 0; //quint32 fpgaNum = 0; //offset = 0x4 * 4; //auto gtSndMd = _usd->readWord(offset, bar); //qDebug() << "--- SET GT Send Mode :: ADC Raw Logger --- "; //_usd->writeWord(offset, bar, 0x2); // set GT Send mode (ADC Raw Logger) //for (auto j = 0; j < 3; j+=1) //_usd->writeWord(offsetDbgTrsfr[j], bar,0x0); //for (quint16 i = 0; i < NO_AFE_CHANNEL; i += 1) //{ //fpgaNum = (i / 64); //offset = 0x400*4;// set adc logger stop //value = (fpgaNum << 1); //_usd->writeWord(offset, bar,value); //value = value | 0x01;// set adc logger fpgaSel and start //_usd->writeWord(offset, bar,value); //_usd->writeWord(offsetDbgTrsfr[fpgaNum], bar,0x0); //value = i % 64; //value = static_cast(((static_cast(0X01))) | ((static_cast(value & //0xFF)) << 8)); //_usd->writeWord(offsetDbgTrsfr[fpgaNum], bar,value); //timeOut = 0; //doneFlag = 0; //while (timeOut < 10 && doneFlag == 0 ) //{ //doneFlag = ((_usd->readWord(offsetDbgTrsfrDone[fpgaNum], bar)) & 0x100) >> 8; // wait Until //transfer done //timeOut += 1; //delay(2); //} //if(timeOut == 10) //{ //qDebug() << "Unable to transfer done"; ////MESSAGE_BOX("Unable to transfer done"); ////return; //} //doneFlag = 0; //timeOut = 0; //offset = 0x401*4; //while (timeOut < 10 && doneFlag == 0 ) //{ //doneFlag = (_usd->readWord(offset, bar) & 0x1); // wait until adc logger MemDone Flag true //timeOut += 1; //delay(2); //} //if(timeOut == 10) //{ ////MESSAGE_BOX("Unable to reach adc logger memory done"); //qDebug() << "Unable to reach adc logger memory done :: 0x" << _usd->readWord(offset, bar); ////return; //} //_usd->writeWord(offsetDbgTrsfr[fpgaNum], bar,0); // Stop Debug transfer //offset = 0x2000; //qint16 val = 0; //for(auto j = 0; j < NO_LOGGER_SMPL_COUNT; j += 1) //{ //value = _usd->readWord(offset, bar); // Read Adc logger Bram //val = static_cast(value & 0x3FFF) << 2; //val = val >> 2; //auto str = QStringLiteral("%1,").arg(val); //file.write(str.toStdString().c_str(), str.length()); //offset += 4; //} //file.write("\r\n", 2); //value = (fpgaNum << 1) | 0x00;// set adc logger fpgaSel and Stop //offset = 0x400*4; //_usd->writeWord(offset, bar,value); //emit updateBlockProgressValue(i * 100 / NO_AFE_CHANNEL, prg); //delay(10); //} //offset = 0x400*4; //_usd->writeWord(offset, bar,0x0); //qDebug() << "--- SET GT Send Mode :: Previous Mode --- "; //offset = 0x4 * 4; //_usd->writeWord(offset, bar, gtSndMd); // set GT Send mode //emit updateBlockProgressVisibility(false, prg); //file.close(); //_adcLoggerTrnsDone = true; //} /*************************************************************************************************/ void MainWindow::timeout() { auto pcie_pid = _trx.deviceId(); auto pcie_vid = _trx.vendorId(); auto pcie_id = (pcie_pid << 16) | pcie_vid; ui->l_PCIeID->setText(QString::number(pcie_id, 16)); delay(10); _trx.getHealthStatus(_healStatus); delay(10); /******************* System Monitoring *********************/ float tempSensor = _healStatus->systemTemperature; ui->l_Temp->setText(QString("%1").arg(static_cast(tempSensor))); delay(10); auto adcCh1 = _healStatus->adcMon->mon12Vin; ui->l_adcCh1->setText(QString("%1").arg(static_cast(adcCh1))); delay(10); auto adcCh2 = _healStatus->adcMon->mon5Vin; ui->l_adcCh2->setText(QString("%1").arg(static_cast(adcCh2))); delay(10); auto adcCh3 = _healStatus->adcMon->prbZeroEncoder; ui->l_adcCh3->setText(QString("%1").arg(static_cast(adcCh3))); delay(10); auto adcCh4 = _healStatus->adcMon->prbCtrl3P3V; ui->l_adcCh4->setText(QString("%1").arg(static_cast(adcCh4))); delay(10); auto adcCh5 = _healStatus->adcMon->afeVcntlp; ui->l_adcCh5->setText(QString("%1").arg(static_cast(adcCh5))); delay(10); auto adcCh6 = _healStatus->adcMon->mon3P3V; ui->l_adcCh6->setText(QString("%1").arg(static_cast(adcCh6))); delay(10); auto adcCh7 = _healStatus->adcMon->monAfeA1P8V; ui->l_adcCh7->setText(QString("%1").arg(static_cast(adcCh7))); delay(10); auto adcCh8 = _healStatus->adcMon->monAfeD1P8V; ui->l_adcCh8->setText(QString("%1").arg(static_cast(adcCh8))); delay(10); /******************* Power Good *********************/ auto regAPg = _healStatus->voltsPg->regulatorA; ui->l_pgRegA->setText(enum2String(regAPg)); delay(10); auto regBPg = _healStatus->voltsPg->regulatorB; ui->l_pgRegB->setText(enum2String(regBPg)); delay(10); auto pg12v = _healStatus->voltsPg->mon12Vin; ui->l_pg12Vin->setText(enum2String(pg12v)); delay(10); auto pg5v = _healStatus->voltsPg->mon5Vin; ui->l_pg5Vin->setText(enum2String(pg5v)); delay(10); auto Pg3P3 = _healStatus->voltsPg->mon3P3V; ui->l_pg3P3->setText(enum2String(Pg3P3)); delay(10); auto pgAvdd = _healStatus->voltsPg->monAfeA1P8V; ui->l_pg1P8Avdd->setText(enum2String(pgAvdd)); delay(10); auto pgDvdd = _healStatus->voltsPg->monAfeD1P8V; ui->l_pg1P8Dvdd->setText(enum2String(pgDvdd)); delay(10); auto pgPrbCtrl = _healStatus->voltsPg->prbCtrl3P3V; ui->l_pgPrbCtrl3P3->setText(enum2String(pgPrbCtrl)); delay(10); /******************* Status Vector *********************/ _trx.getTrxStatus(_vec); delay(10); bool pgErr = _vec->pgErr; ui->l_pg->setText(QVariant(pgErr).toString()); auto color = pgErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_pg, color); delay(10); bool mpsErr = _vec->mpsErr; ui->l_mps->setText(QVariant(mpsErr).toString()); color = mpsErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_mps, color); delay(10); bool frameLost = _vec->frameLost; ui->l_frameLost->setText(QVariant(frameLost).toString()); color = frameLost ? Qt::red : Qt::green; changeLabelTextColor(ui->l_frameLost, color); delay(10); bool fanFault = _vec->fanFault; ui->l_fan->setText(QVariant(fanFault).toString()); color = fanFault ? Qt::red : Qt::green; changeLabelTextColor(ui->l_fan, color); delay(10); bool pulserThd = _vec->pulserThd; ui->l_pulserThd->setText(QVariant(pulserThd).toString()); color = pulserThd ? Qt::red : Qt::green; changeLabelTextColor(ui->l_pulserThd, color); delay(10); bool scenGtErr = _vec->scenGtErr; ui->l_scenGt->setText(QVariant(scenGtErr).toString()); color = scenGtErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_scenGt, color); delay(10); bool scenPriErr = _vec->scenPriErr; ui->l_scenPri->setText(QVariant(scenPriErr).toString()); color = scenPriErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_scenPri, color); delay(10); bool thermalErr = _vec->thermalErr; ui->l_thermal->setText(QVariant(thermalErr).toString()); color = thermalErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_thermal, color); delay(10); bool scenSramErr = _vec->scenSramErr; ui->l_scenSram->setText(QVariant(scenSramErr).toString()); color = scenSramErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_scenSram, color); delay(10); bool syncFifoErr = _vec->syncFifoErr; ui->l_syncFifo->setText(QVariant(syncFifoErr).toString()); color = syncFifoErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_syncFifo, color); delay(10); bool syncPointErr = _vec->syncPointErr; ui->l_syncPoint->setText(QVariant(syncPointErr).toString()); color = syncPointErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_syncPoint, color); delay(10); bool dintrlvFifoErr = _vec->dintrlvFifoErr; ui->l_dintrlvFifo->setText(QVariant(dintrlvFifoErr).toString()); color = dintrlvFifoErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_dintrlvFifo, color); delay(10); bool dintrlvPointErr = _vec->dintrlvPointErr; ui->l_dintrlvPoint->setText(QVariant(dintrlvPointErr).toString()); color = dintrlvPointErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_dintrlvPoint, color); delay(10); bool sram1ParityErr = _vec->sram1ParityErr; ui->l_sram1Parity->setText(QVariant(sram1ParityErr).toString()); color = sram1ParityErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_sram1Parity, color); delay(10); bool sram2ParityErr = _vec->sram2ParityErr; ui->l_sram2Parity->setText(QVariant(sram2ParityErr).toString()); color = sram2ParityErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_sram2Parity, color); delay(10); bool dmaCtrlTransferErr = _vec->dmaCtrlTransferErr; ui->l_DmaCtrlTrans->setText(QVariant(dmaCtrlTransferErr).toString()); color = dmaCtrlTransferErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_DmaCtrlTrans, color); delay(10); bool emulDmaTransferErr = _vec->emulDmaTransferErr; ui->l_emulDmaTrans->setText(QVariant(emulDmaTransferErr).toString()); color = emulDmaTransferErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_emulDmaTrans, color); delay(10); bool probeDisconnectErr = _vec->probeDisconnectErr; ui->l_prbDiscon->setText(QVariant(probeDisconnectErr).toString()); color = probeDisconnectErr ? Qt::red : Qt::green; changeLabelTextColor(ui->l_prbDiscon, color); delay(10); bool probeDetChanInterrupt = _vec->probeDetChanInterrupt; ui->l_prbDetChg->setText(QVariant(probeDetChanInterrupt).toString()); color = probeDetChanInterrupt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_prbDetChg, color); if(probeDetChanInterrupt) { emit connectedPrbChange(); } if(frameLost) { emit frameLostCall(); } } /*************************************************************************************************/ void MainWindow::getPrbChange() { const quint32 id9L_D = 0x212; const quint32 idC1_5_D = 0x225; try { _trx.prbState(_prb); } catch(SonoException& e) { qDebug() << e.what(); } try { if(_prb->prbA.ConnectionMode == connected) { QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::green, 0); switch(_prb->prbA.id) { case id9L_D: ui->table_probe->setItem(0, 0, new QTableWidgetItem("9L-D")); break; case idC1_5_D: ui->table_probe->setItem(0, 0, new QTableWidgetItem("C1-5-D")); break; default: ui->table_probe->setItem(0, 0, new QTableWidgetItem("Unknown")); } if(_prb->prbA.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe A eeprom is occured."; } } else { ui->table_probe->setItem(0, 0, new QTableWidgetItem("Disconnected")); QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::red, 0); } } catch(const char* exception) { qDebug() << exception; } try { if(_prb->prbB.ConnectionMode == connected) { QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::green, 1); switch(_prb->prbB.id) { case id9L_D: ui->table_probe->setItem(0, 1, new QTableWidgetItem("9L-D")); break; case idC1_5_D: ui->table_probe->setItem(0, 1, new QTableWidgetItem("C1-5-D")); break; default: ui->table_probe->setItem(0, 1, new QTableWidgetItem("Unknown")); } if(_prb->prbB.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe B eeprom is occured."; } } else { ui->table_probe->setItem(0, 1, new QTableWidgetItem("Disconnected")); QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::red, 1); } } catch(const char* exception) { qDebug() << exception; } try { if(_prb->prbC.ConnectionMode == connected) { QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::green, 2); switch(_prb->prbC.id) { case id9L_D: ui->table_probe->setItem(0, 2, new QTableWidgetItem("9L-D")); break; case idC1_5_D: ui->table_probe->setItem(0, 2, new QTableWidgetItem("C1-5-D")); break; default: ui->table_probe->setItem(0, 2, new QTableWidgetItem("Unknown")); } if(_prb->prbC.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe C eeprom is occured."; } } else { ui->table_probe->setItem(0, 2, new QTableWidgetItem("Disconnected")); QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::red, 2); } } catch(const char* exception) { qDebug() << exception; } try { if(_prb->prbD.ConnectionMode == connected) { QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::green, 3); switch(_prb->prbD.id) { case id9L_D: ui->table_probe->setItem(0, 3, new QTableWidgetItem("9L-D")); break; case idC1_5_D: ui->table_probe->setItem(0, 3, new QTableWidgetItem("C1-5-D")); break; default: ui->table_probe->setItem(0, 3, new QTableWidgetItem("Unknown")); } if(_prb->prbD.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe D eeprom is occured."; } } else { ui->table_probe->setItem(0, 3, new QTableWidgetItem("Disconnected")); QtConcurrent::run(this, &MainWindow::getProbeColor, Qt::red, 3); } } catch(const char* exception) { qDebug() << exception; } } /*************************************************************************************************/ void MainWindow::getFrameLost() { MESSAGE_BOX(QString::number(_trx.getFrameLostCounter(), 10)); //qDebug() << _trx.getFrameLostCounter(); } /*************************************************************************************************/ void MainWindow::getProbeColor(const QBrush brush, const int item) { ui->table_probe->item(0, item)->setBackground(brush); } /*************************************************************************************************/ //void MainWindow::scenarioStart() //{ //auto value = 0x1; //_usd->writeWord(0x800, 0, value); //qDebug() << "--- SET GT Send Mode :: BF --- "; //_usd->writeWord(0x10, 0, 0x1); //auto bar = 0; //uint32_t offsetSlvScenCmd[3] = {0x134000*4,0x234000*4,0x334000*4}; //uint32_t offsetDbgCmd[3] = {0x140000*4,0x240000*4,0x340000*4}; //for (auto i=0 ; i<3;i++) //{ //value = _usd->readWord(offsetSlvScenCmd[i], bar); //_usd->writeWord(offsetSlvScenCmd[i], bar, value | 0x2); //} //for (auto i=0 ; i<3;i++) //{ //auto value = _usd->readWord(offsetDbgCmd[i], 0); //value &= 0xFFFFFFF0; //_usd->writeWord(offsetDbgCmd[i], 0, value); //} //} void MainWindow::changeLabelTextColor(QLabel* label, QColor color) { auto palette = label->palette(); palette.setColor(QPalette::Foreground, color); label->setAutoFillBackground(true); label->setPalette(palette); label->update(); } /*************************************************************************************************/ void MainWindow::on_rbtn_reg_toggled(bool checked) { if(checked) { _settings->setValue(REG_ACCESS_SEL, true); ui->l_regIndicator->setText("Register number: (Hex)"); } } /*************************************************************************************************/ void MainWindow::on_rbtn_offset_toggled(bool checked) { if(checked) { _settings->setValue(REG_ACCESS_SEL, false); ui->l_regIndicator->setText("Register offset: (Hex)"); } } /*************************************************************************************************/ void MainWindow::on_btn_readReg_clicked() { auto bar = ui->cb_regBarNum->currentText().toUInt(); auto offset = ui->tb_regIndicator->text().toUInt(Q_NULLPTR, 16); if(offset == 0 && ui->tb_regIndicator->text() != "0") { MESSAGE_BOX("Invalid input format for offset"); return; } quint64 value = 0; auto width = ui->cb_regWidth->currentIndex(); switch(width) { case 0: if(ui->rbtn_reg->isChecked()) { offset *= 4; } value = _usd->readWord(offset, bar); ui->lcd_regvalue->setDigitCount(8); break; case 1: if(ui->rbtn_reg->isChecked()) { offset *= 8; } value = _usd->readLong(offset, bar); ui->lcd_regvalue->setDigitCount(16); break; } ui->lcd_regvalue->display(QString::number(value, 16)); } /*************************************************************************************************/ void MainWindow::on_btn_writeReg_clicked() { auto bar = ui->cb_regBarNum->currentText().toUInt(); auto offset = ui->tb_regIndicator->text().toUInt(Q_NULLPTR, 16); if(offset == 0 && ui->tb_regIndicator->text() != "0") { MESSAGE_BOX("Invalid input format for offset"); return; } auto value = ui->tb_regValue->text().toULong(Q_NULLPTR, 16); if(value == 0 && ui->tb_regValue->text() != "0") { MESSAGE_BOX("Invalid input format for write value"); return; } auto width = ui->cb_regWidth->currentIndex(); switch(width) { case 0: if(ui->rbtn_reg->isChecked()) { offset *= 4; } _usd->writeWord(offset, bar, static_cast(value)); break; case 1: if(ui->rbtn_reg->isChecked()) { offset *= 8; } _usd->writeLong(offset, bar, value); break; } } /*************************************************************************************************/ //void MainWindow::newBlockProgressValue(int percentage, QProgressBar* prg) //{ //prg->setValue(percentage); //} ///*************************************************************************************************/ //void MainWindow::newFpgaProgressValue(int percentage) //{ //ui->prg_fpgaProgram->setValue(percentage); //} ///*************************************************************************************************/ //void MainWindow::newBlockProgressVisibility(bool show, QProgressBar* prg) //{ //prg->setVisible(show); //} /*************************************************************************************************/ void MainWindow::on_btn_fpgaBrowse_clicked() { QFileDialog fileDialog; fileDialog.setNameFilters({"FPGA program file (*.bit)"}); auto result = fileDialog.exec(); if(result) { auto selectedPath = fileDialog.selectedFiles()[0]; ui->tb_fpgaBit->setText(selectedPath); _settings->setValue(FPGA_FILE_PATH, selectedPath); } } /*************************************************************************************************/ void MainWindow::getProgrammingProgress(qint32 progressValue, qint32 bitFileSize) { ui->prg_programming->setVisible(true); ui->prg_programming->setRange(0, bitFileSize); ui->prg_programming->setValue(progressValue); } /*************************************************************************************************/ void MainWindow::getFpgaProgrammer(QString path) { try { _trx.slaveFpgaProgram(path); ui->prg_programming->setVisible(false); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::getLabelState(QLabel *label, QString str, QColor color) { label->setText(str); changeLabelTextColor(label, color); label->repaint(); qApp->processEvents(); } /*************************************************************************************************/ void MainWindow::on_btn_fpgaProgram_clicked() { auto path = ui->tb_fpgaBit->text(); QString str = "doing"; QColor color = Qt::red; emit labelState(ui->l_programDone, str, color); emit fpgaProgrammer(path); str = "done"; color = Qt::green; emit labelState(ui->l_programDone, str, color); } /*************************************************************************************************/ void MainWindow::newMessage(QString message) { QMessageBox msgBox; msgBox.setText(message); msgBox.exec(); } ///*************************************************************************************************/ //void MainWindow::on_btn_txDacBrowse_clicked() //{ //QFileDialog fileDialog; //fileDialog.setNameFilters({"TxDAC file (*.csv)"}); //auto result = fileDialog.exec(); //if(result) //{ //auto selectedPath = fileDialog.selectedFiles()[0]; //ui->tb_txDacFile->setText(selectedPath); //_settings->setValue(TX_DAC_FILE_PATH, selectedPath); //} //} ///*************************************************************************************************/ //void MainWindow::on_btn_txDacUpload_clicked() //{ //auto bar = 0; //auto offset = 0xE000; //auto path = ui->tb_txDacFile->text(); //_csvReadStopFlag = false; //QFutureWatcher watcher; //connect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //auto future = QtConcurrent::run(this, &MainWindow::CsvFileUploader, bar, path, //ui->prg_txDacUpload); //watcher.setFuture(future); //_dial->exec(); //disconnect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //} ///*************************************************************************************************/ //void MainWindow::on_btn_txDacStartStop_clicked() //{ //auto bar = 0; //auto offset = 0x10000; //auto interval = ui->tb_txDacInterval->text().toUInt(Q_NULLPTR, 16); //if(interval == 0 && ui->tb_txDacInterval->text() != "0") //{ //MESSAGE_BOX("Invalid input format for interval"); //return; //} //uint32_t value = 0; //value = ((interval & 0x000000FF) << 8) ; //auto str = ui->btn_txDacStartStop->text(); //if(str == START) //{ //_usd->writeWord(offset, bar, value | 0x1); //ui->btn_txDacStartStop->setText(STOP); //} //else //{ //_usd->writeWord(offset, bar, value); //ui->btn_txDacStartStop->setText(START); //} //} ///*************************************************************************************************/ //void MainWindow::on_btn_txDacOnOff_clicked() //{ //auto bar = 0; //auto offset = 0x10004; //auto str = ui->btn_txDacOnOff->text(); //if(str == ON) //{ //auto value = 0xf; //_usd->writeWord(offset, bar, value); //ui->btn_txDacOnOff->setText(OFF); //} //else //{ //auto value = 0x0; //_usd->writeWord(offset, bar, value); //ui->btn_txDacOnOff->setText(ON); //} //} /*************************************************************************************************/ void MainWindow::on_cb_selectedProbe_currentIndexChanged(int index) { auto indx = index; if(indx == 0) { _trx.selectProbe(prbA); } else if(indx == 1) { _trx.selectProbe(prbB); } else if(indx == 2) { _trx.selectProbe(prbC); } else { _trx.selectProbe(prbD); } } /*************************************************************************************************/ /*void MainWindow::on_btn_pllClkSt_clicked() { auto bar = 0; auto offset = 0x26000; auto str = ui->btn_pllClkSt->text(); if(str == ON) { auto temp = ui->tb_pllClkSt->text().toUInt(Q_NULLPTR, 10); if(temp == 0 && ui->tb_pllClkSt->text() != "0" || temp < 400 || temp > 2000) { MESSAGE_BOX("Invalid input format for PLL CLK ST"); return; } float halfPeriod = 50000.0f / temp; uint roundHalfPeriod = uint(roundf(halfPeriod)) & 0xFF; float t = roundf(50000.0f / roundHalfPeriod); ui->tb_pllClkSt->setText(QString::number(t, 'f', 0)); auto value = 0; value = roundHalfPeriod | 0x00000300; _usd->writeWord(offset, bar, value ); value = value & 0x000002FF; _usd->writeWord(offset, bar, value ); ui->btn_pllClkSt->setText(OFF); } else { auto value = 0; _usd->writeWord(offset, bar, value); ui->btn_pllClkSt->setText(ON); } } //void MainWindow::on_btn_pllClkTps_clicked() //{ // auto bar = 0; // auto offset = 0x26004; // auto str = ui->btn_pllClkTps->text(); // if(str == ON) // { // auto temp = ui->tb_pllClkTps->text().toUInt(Q_NULLPTR, 10); // if(temp == 0 && ui->tb_pllClkTps->text() != "0" || temp < 400 || temp > 2000) // { // MESSAGE_BOX("Invalid input format for PLL CLK TPS"); // return; // } // float halfPeriod = 50000.0f / temp; // uint roundHalfPeriod = uint(roundf(halfPeriod)) & 0xFF; // float t = roundf(50000.0f / roundHalfPeriod); // ui->tb_pllClkTps->setText(QString::number(t, 'f', 0)); // auto value =0; // value = roundHalfPeriod | 0x00000300; // _usd->writeWord(offset, bar, value ); // value = value & 0x000002FF; // _usd->writeWord(offset, bar, value ); // ui->btn_pllClkTps->setText(OFF); // } // else // { // auto value = 0; // _usd->writeWord(offset, bar, value); // ui->btn_pllClkTps->setText(ON); // } //} //&************************************************************************************************* //void MainWindow::on_btn_mulDacTrig_clicked() //{ // auto bar = 0; // auto offset = 0x86018; // // auto str = ui->btn_mulDacTrig->text(); // //if(str == TRIG_ON) // //{ // auto temp = ui->tb_mlDac->text().toUInt(Q_NULLPTR, 16); // _usd->writeWord(offset, bar, temp ); // if (ui->chk_usrMulDac->isChecked()) // { // _usd->writeWord(offset, bar, temp|0x3000 ); // _usd->writeWord(offset, bar, temp|0x2000 ); // } //// ui->btn_mulDacTrig->setText(TRIG_OFF); // //} // //else // //{ // // auto value = 0; // //_usd->writeWord(offset, bar, value); // // ui->btn_mulDacTrig->setText(TRIG_ON); // //} //}*/ /********************************************************************/ void MainWindow::delay(int ms) { delayTimer.singleShot(ms, &loop, &QEventLoop::quit); loop.exec(); } const QString MainWindow::enum2String(ePg state) const { QString pg; pg = (state) ? "good" : "bad"; return pg; } /*************************************************************************************************/ /*********************************************DMA*************************************************/ /*************************************************************************************************/ void MainWindow::getFramePacket(QByteArray packet) { _mutex.lock(); _dmaBuffer.push_back(packet); _lastBuffer = packet; _mutex.unlock(); } /*************************************************************************************************/ void MainWindow::on_chk_continuousShowing_clicked() { if(_dmaRun && ui->chk_continuousShowing->isChecked()) { QtConcurrent::run(this, &MainWindow::on_btn_dmaShow_clicked); _dmaShow = true; } else { _dmaShow = false; } } /*************************************************************************************************/ void MainWindow::fillRam(QString path) { ui->btn_emulBrowse->setText("Filling RAM..."); _trx.fillRam(path); ui->btn_emulBrowse->setText("Emulator Browse"); } /*************************************************************************************************/ void MainWindow::on_btn_scenStart_clicked() { try { auto str = ui->btn_scenStart->text(); if(str == "Scenario Start") { ui->btn_scenStart->setText("Scenario Stop"); ui->btn_emulator->setText("Emulator Start"); ui->btn_dmaLogLast->setVisible(true); _trx.scenPlayerStart(); _dmaLog = true; _dmaRun = true; //flag _dmaBuffer.clear(); //QtConcurrent::run(this, &MainWindow::logPcie); } else { ui->btn_scenStart->setText("Scenario Start"); ui->btn_dmaLogLast->setHidden(true); _dmaLog = false; _dmaRun = false; _trx.scenPlayerStop(); } } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_emulBrowse_clicked() { auto name = ui->btn_emulBrowse->text(); QFileDialog fileDialog; fileDialog.setNameFilters({"*.bin"}); auto result = fileDialog.exec(); if(result) { _emulFolder = fileDialog.selectedFiles()[0]; } if(name == "Emulator Browse") { QtConcurrent::run(this, &MainWindow::fillRam, _emulFolder); } } /*************************************************************************************************/ void MainWindow::on_btn_emulator_clicked() { auto name = ui->btn_emulator->text(); try { if(name == "Emulator Start") { _emul->transferLength = TRANSFER_LENGTH; _emul->ramBufAddress = RAM_BUFFER_OFFSET; _emul->transferRate = TRANSFER_RATE; _emul->emulOption = functionality; _emul->emulMode = dynamically; _trx.emulatorInit(_emul); ui->btn_emulator->setText("Emulator Stop"); ui->btn_scenStart->setText("Scenario Start"); ui->btn_dmaLogLast->setVisible(true); _trx.emulatorStart(); _dmaLog = true; _dmaRun = true; _dmaBuffer.clear(); //QtConcurrent::run(this, &MainWindow::logPcie); } else { ui->btn_emulator->setText("Emulator Start"); ui->btn_dmaLogLast->setHidden(true); _dmaLog = false; _dmaRun = false; _trx.emulatorStop(); } } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_logBrowse_clicked() { QFileDialog dialog; dialog.setFileMode(QFileDialog::Directory); dialog.setOption(QFileDialog::ShowDirsOnly); auto result = dialog.exec(); if(result) { _logFolder = dialog.selectedFiles()[0]; } } /*************************************************************************************************/ void MainWindow::logPcie() { try { ui->btn_dmaLogLast->setText("Logging..."); _dmaLogCount = 0; quint32 i(0); QProgressDialog* progress = new QProgressDialog(this); progress->show(); while(_dmaLog) { if(_dmaBuffer.size() == 0) { std::this_thread::sleep_for(std::chrono::milliseconds(3)); continue; } QByteArray temp; _mutex.lock(); temp = _dmaBuffer.front(); _dmaBuffer.pop_front(); _mutex.unlock(); _dmaLogCount += 1; if(_dmaLogCount == ULTIMATE_LOG_COUNT) { _dmaLog = false; } quint16 batchId = ((static_cast(temp[128])) & 0x00FF) | (((static_cast(temp[129])) << 8) & 0xFF00); quint8 subBatchId = (static_cast(temp[130])); QString path = _logFolder + QString("/batch(%2)_sbatch(%3)_%1.bin").arg(i++).arg(batchId).arg( subBatchId); QFile file(path); file.open(QIODevice::WriteOnly); //file.write(temp); file.close(); emit sendLogCount(_dmaLogCount, progress); } ui->btn_dmaLogLast->setText("InstantLog"); delete progress; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_dmaLogLast_clicked() { if(_dmaRun && (ui->btn_dmaLogLast->text() == "InstantLog")) { _dmaBuffer.clear(); _dmaLog = true; QtConcurrent::run(this, &MainWindow::logPcie); } } /*************************************************************************************************/ void MainWindow::on_btn_dmaShow_clicked() { do { if(ui->chk_2D_3DPlot->isChecked()) { if(QThread::currentThread() == _uiThread) { show2d(); } else { emit twoDReady(); } } else { if(QThread::currentThread() == _uiThread) { show3d(); } else { emit threeDReady(); } } std::this_thread::sleep_for(std::chrono::milliseconds(5)); }while (_dmaShow); } /*************************************************************************************************/ void MainWindow::show3d() { _mutex.lock(); QByteArray temp = _lastBuffer; _mutex.unlock(); //--------------------------------------------------------------------- //3D Plot //--------------------------------------------------------------------- ui->plot_2->clearGraphs(); //qDebug() << "//3D Frame Plot //////////////////"; //ui->plot_2->setInteractions(QCP::iRangeZoom|QCP::iRangeDrag); ui->plot_2->axisRect()->setupFullAxesBox(true); ui->plot_2->xAxis->setLabel("Line"); ui->plot_2->yAxis->setLabel("Point"); quint16 batchId = ((static_cast(temp[128])) & 0x00FF) | (((static_cast(temp[129])) << 8) & 0xFF00); quint8 subBatchId = (static_cast(temp[130])); quint8 frmType = (static_cast(temp[131])); quint8 cri = (static_cast(temp[132])); quint16 bLine = ((static_cast(temp[136])) & 0x00FF) | (((static_cast(temp[137])) << 8) & 0xFF00); quint16 bPoint = ((static_cast(temp[138])) & 0x00FF) | (((static_cast(temp[139])) << 8) & 0xFF00); quint8 mLine = (static_cast(temp[140])); quint16 mPoint = ((static_cast(temp[141])) & 0x00FF) | (((static_cast(temp[142])) << 8) & 0xFF00); if(bLine > 256) { qDebug() << "ERROR :: (B Line)" << bLine; return; } if(bPoint > 8192) { qDebug() << "ERROR :: (B Point)" << bPoint; return; } if(frmType != 0) { qDebug() << "ERROR :: (Invalid Frame Type)" << frmType; return; } qDebug() << "batchId" << batchId; qDebug() << "subBatchId" << subBatchId; qDebug() << "bLine" << bLine; qDebug() << "bPoint" << bPoint; qDebug() << "frmType" << frmType; qDebug() << "cri" << cri; qDebug() << "mLine" << mLine; qDebug() << "mPoint" << mPoint; _colorMap->data()->clear(); _colorMap->data()->setSize(bLine, bPoint); _colorMap->data()->setRange(QCPRange(1, bLine), QCPRange(1, bPoint)); //double x,y,z; //int xIndex = 0; //int yIndex = 0; quint32 max = 0; auto indx = 0; for(auto line = 0; line < bLine; line += 1) { for(auto pnt = 0; pnt < bPoint; pnt += 1) { indx = (line * bPoint + pnt) * 4 + 160; auto val = ((static_cast(temp[indx])) & 0x000000FF) | (((static_cast(temp[indx + 1])) << 8) & 0x0000FF00) | (((static_cast(temp[indx + 2])) << 16) & 0x00FF0000) | (((static_cast(temp[indx + 3])) << 24) & 0xFF000000); //xIndex = line; //yIndex = pnt; //z = double(val); //colorMap->data()->cellToCoord(xIndex,yIndex,&x,&y); if(max < val) { max = val; } _colorMap->data()->setCell(line, pnt, double(val)); } } //qDebug() << "indx" << indx; //qDebug() << "max" << max; qDebug() << ui->plot_2->plotLayout()->hasElement(0, 1); if(!ui->plot_2->plotLayout()->hasElement(0, 1)) { QCPColorScale* colorScale = new QCPColorScale(ui->plot_2); ui->plot_2->plotLayout()->addElement(0, 1, colorScale); colorScale->setType(QCPAxis::atRight); _colorMap->setColorScale(colorScale); colorScale->axis()->setLabel("Number"); _colorMap->setGradient((QCPColorGradient::gpJet)); //colorMap->rescaleDataRange(); QCPMarginGroup* marginGroup = new QCPMarginGroup(ui->plot_2); ui->plot_2->axisRect()->setMarginGroup(QCP::msBottom | QCP::msTop, marginGroup); colorScale->setMarginGroup(QCP::msBottom | QCP::msTop, marginGroup); } _colorMap->setGradient((QCPColorGradient::gpJet)); _colorMap->rescaleDataRange(); ui->plot_2->rescaleAxes(true); ui->plot_2->replot(); } /*************************************************************************************************/ void MainWindow::show2d() { _mutex.lock(); QByteArray temp = _lastBuffer; _mutex.unlock(); //--------------------------------------------------------------------- //2D Plot //--------------------------------------------------------------------- ui->plot_2->clearGraphs(); ui->plot_2->clearItems(); ui->plot_2->setInteraction(QCP::iRangeZoom); ui->plot_2->setInteraction(QCP::iRangeDrag); ui->plot_2->setInteraction(QCP::iSelectPlottables); ui->plot_2->setSelectionRectMode(QCP::srmZoom); QVector x, y; int i = 0; for(auto j = 0; j < TRANSFER_LENGTH; j += 8) { x.push_back(i++); auto val = ((static_cast(temp[j])) & 0x00000000000000FF) | (((static_cast(temp[j + 1])) << 8) & 0x000000000000FF00) | (((static_cast(temp[j + 2])) << 16) & 0x0000000000FF0000) | (((static_cast(temp[j + 3])) << 24) & 0x00000000FF000000) | (((static_cast(temp[j + 4])) << 32) & 0x000000FF00000000) | (((static_cast(temp[j + 5])) << 40) & 0x0000FF0000000000) | (((static_cast(temp[j + 6])) << 48) & 0x00FF000000000000) | (((static_cast(temp[j + 7])) << 56) & 0xFF00000000000000); y.push_back(val); } ui->plot_2->addGraph(); ui->plot_2->graph(0)->setData(x, y); //give the axes some labels: ui->plot_2->xAxis->setLabel("sample no"); ui->plot_2->yAxis->setLabel("sample value"); //set axes ranges, so we see all data: ui->plot_2->rescaleAxes(); ui->plot_2->replot(); } /*************************************************************************************************/ void MainWindow::catchLogCount(qint32 counter, QProgressDialog* _progress) { _progress->setMinimumSize(300, 100); _progress->setLabelText("Please wait..."); _progress->setWindowTitle("Frame Packets Logging"); _progress->setRange(0, ULTIMATE_LOG_COUNT); _progress->setModal(true); try { _progress->setValue(counter); if(_progress->wasCanceled()) { throw SonoException("Frame Packets Logging is canceled"); } } catch(SonoException& e) { qDebug() << e.what(); } } ///*************************************************************************************************/ ///********************************************Power************************************************/ ///*************************************************************************************************/ //void MainWindow::on_btn_hvRegulatorConfig_clicked() //{ //auto name=ui->btn_hvRegulatorConfig->text(); //auto freq=ui->tb_hvFreq->text().toFloat(Q_NULLPTR); //if(name==ENABLE) //{ //// freq<65.00f ? freq=65.00f : freq=freq; //// freq>130.00f ? freq=130.00f : freq=freq; //// pwr.setHVsRegulator(true, true, freq); //// pwr.setHVsRegulator(true, false, freq); //// auto real_freq=pwr.getHVsRegulatorFreq(); //// ui->tb_hvFreq->setText(QString("%1").arg(real_freq)); //// ui->btn_hvRegulatorConfig->setText(DISABLE); //} //else //{ //// pwr.setHVsRegulator(false, false, freq); //// ui->btn_hvRegulatorConfig->setText(ENABLE); //} //} ///*************************************************************************************************/ //void MainWindow::on_btn_pm5RegulatorConfig_clicked() //{ //auto name=ui->btn_pm5RegulatorConfig->text(); //auto freq=ui->tb_pm5Freq->text().toFloat(Q_NULLPTR); //if(name==ENABLE) //{ //// freq<280.00f ? freq=280.00f : freq=freq; //// freq>400.00f ? freq=400.00f : freq=freq; //// pwr.setPM5vRegulator(true, true, freq); //// pwr.setPM5vRegulator(true, false, freq); //// auto real_freq=pwr.getPM5vRegulatorFreq(); //// ui->tb_pm5Freq->setText(QString("%1").arg(real_freq)); //// ui->btn_pm5RegulatorConfig->setText(DISABLE); //} //else //{ //// pwr.setPM5vRegulator(false, false, freq); //// ui->btn_pm5RegulatorConfig->setText(ENABLE); //} //} ///*************************************************************************************************/ //void MainWindow::on_btn_pwrDacsEnable_clicked() //{ //// bool i2cBusy, i2cDone; //auto hvaValue=ui->tb_hvaDacValue->text().toFloat(Q_NULLPTR); //auto hvbValue=ui->tb_hvbDacValue->text().toFloat(Q_NULLPTR); //auto cwdValue=ui->tb_cwdDacValue->text().toFloat(Q_NULLPTR); //// if (hvaValue>85) { //// MESSAGE_BOX("HVA value is greater than determined limits"); //// hvaValue=85.00f; //// } //// else if (hvaValue<1.53f){ //// MESSAGE_BOX("HVA value is less than determined limits"); //// hvaValue=1.53f; //// } //// if (hvaValue6.90f) { //// MESSAGE_BOX("CWD value is greater than determined limits"); //// cwdValue=6.90f; //// } //// else if (cwdValue<1.54f){ //// MESSAGE_BOX("CWD value is less than determined limits"); //// cwdValue=1.54f; //// } //// auto cwdDacsEnable=pwr.getSetupCmdCwdOnOff(); //// if (cwdDacsEnable){ //// hvbValue=1.53f; //// hvaValue<10.00f ? hvaValue=10.00f : hvaValue=hvaValue; //// } //// i2cBusy=pwr.getI2cBusy(); //// while (i2cBusy==true) { //// i2cBusy=pwr.getI2cBusy(); //// } ////// delay(100); //// pwr.setDAcs(true, cwdValue, hvbValue, hvaValue); //// pwr.setDAcs(false, cwdValue, hvbValue, hvaValue); //// i2cDone=pwr.getI2cCmdDone(); //// while (i2cDone==false){ //// i2cDone=pwr.getI2cCmdDone(); //// } //// auto real_HVaValue=pwr.getHVaDAcs(); //// auto real_HVbValue=pwr.getHVbDAcs(); //// auto real_CWdValue=pwr.getCWdDAcs(); //// ui->tb_hvaDacValue->setText(QString::number(real_HVaValue, 'f', 2)); //// ui->tb_hvbDacValue->setText(QString::number(real_HVbValue, 'f', 2)); //// ui->tb_cwdDacValue->setText(QString::number(real_CWdValue, 'f', 2)); //} void MainWindow::on_btn_setAo_clicked() { auto hvaValue = ui->tb_hvaDacValue->text().toFloat(Q_NULLPTR); auto hvbValue = ui->tb_hvbDacValue->text().toFloat(Q_NULLPTR); //auto cwdValue=ui->tb_cwdDacValue->text().toFloat(Q_NULLPTR); try { _trx.mpsSetAo(hvaValue, hvbValue); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_chk_mpsInit_clicked() { try { if(ui->chk_mpsInit->isChecked()) { _trx.mpsPwrOn(); } else { _trx.mpsPwrOff(); } } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_supJump_clicked() { try { _trx.mpsReset(); //jump ui->chk_mpsInit->setChecked(false); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_updateRdbackValue_clicked() { try { _trx.supervisorRbValue(_supRbValue); } catch(SonoException& e) { qDebug() << e.what(); } auto hvapValue = _supRbValue->hvap; ui->l_hvap->setText(QString::number(static_cast(hvapValue), 'f', 3)); delay(10); auto hvbpValue = _supRbValue->hvbp; ui->l_hvbp->setText(QString::number(static_cast(hvbpValue), 'f', 3)); delay(10); auto cwdpValue = _supRbValue->cwdp; ui->l_cwdp->setText(QString::number(static_cast(cwdpValue), 'f', 3)); delay(10); auto curr24vValue = _supRbValue->curr24V; ui->l_curr24v->setText(QString::number(static_cast(curr24vValue), 'f', 3)); delay(10); auto p24vValue = _supRbValue->p24V; ui->l_p24v->setText(QString::number(static_cast(p24vValue), 'f', 3)); delay(10); auto p12vValue = _supRbValue->p12V; ui->l_p12v->setText(QString::number(static_cast(p12vValue), 'f', 3)); delay(10); auto p5vValue = _supRbValue->p5V; ui->l_p5v->setText(QString::number(static_cast(p5vValue), 'f', 3)); delay(10); auto m5vValue = _supRbValue->m5V; ui->l_m5v->setText(QString::number(static_cast(m5vValue), 'f', 3)); delay(10); auto hvStopValue = _supRbValue->hvStop; ui->l_hvStop->setText(QString::number(static_cast(hvStopValue), 'f', 3)); delay(10); auto p4dValue = _supRbValue->p4D; ui->l_p4d->setText(QString::number(static_cast(p4dValue), 'f', 3)); delay(10); /********************Faults***********************/ try { _trx.mpsFaultStatus(_faultStatus); } catch(SonoException& e) { qDebug() << e.what(); } bool hvapFlt = _faultStatus->hvap; ui->l_hvapFlt->setText(QVariant(hvapFlt).toString()); auto colorHvapFlt = hvapFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_hvapFlt, colorHvapFlt); delay(10); bool hvbpFlt = _faultStatus->hvbp; ui->l_hvbpFlt->setText(QVariant(hvbpFlt).toString()); auto colorHvbpFlt = hvbpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_hvbpFlt, colorHvbpFlt); delay(10); bool cwdpFlt = _faultStatus->cwdp; ui->l_cwdFlt->setText(QVariant(cwdpFlt).toString()); auto colorCwdpFlt = cwdpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_cwdFlt, colorCwdpFlt); delay(10); bool cur24vFlt = _faultStatus->curr24V; ui->l_curr24vFlt->setText(QVariant(cur24vFlt).toString()); auto colorCur24vFlt = cur24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_curr24vFlt, colorCur24vFlt); delay(10); bool p24vFlt = _faultStatus->p24v; ui->l_p24vFlt->setText(QVariant(p24vFlt).toString()); auto colorP24vFlt = p24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_p24vFlt, colorP24vFlt); delay(10); bool p12vFlt = _faultStatus->p12v; ui->l_p12vFlt->setText(QVariant(p12vFlt).toString()); auto colorP12vFlt = p12vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_p12vFlt, colorP12vFlt); delay(10); bool p5vFlt = _faultStatus->p5v; ui->l_p5vFlt->setText(QVariant(p5vFlt).toString()); auto colorP5vFlt = p5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_p5vFlt, colorP5vFlt); delay(10); bool m5vFlt = _faultStatus->m5v; ui->l_m5vFlt->setText(QVariant(m5vFlt).toString()); auto colorM5vFlt = m5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_m5vFlt, colorM5vFlt); delay(10); bool hvFlt = _faultStatus->hvError; ui->l_hvFlt->setText(QVariant(hvFlt).toString()); auto colorHvFlt = hvFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_hvFlt, colorHvFlt); delay(10); bool sup4dFlt = _faultStatus->sup4d; ui->l_p4dFlt->setText(QVariant(sup4dFlt).toString()); auto colorP4dFlt = sup4dFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_p4dFlt, colorP4dFlt); delay(10); /******************Faults_Over*********************/ bool ovrHvapFlt = _faultStatus->overHvap; ui->l_ovrHVapFlt->setText(QVariant(ovrHvapFlt).toString()); auto colorOvrHvapFlt = ovrHvapFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrHVapFlt, colorOvrHvapFlt); delay(10); bool ovrHvbpFlt = _faultStatus->overHvbp; ui->l_ovrHVbpFlt->setText(QVariant(ovrHvbpFlt).toString()); auto colorOvrHvbpFlt = ovrHvbpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrHVbpFlt, colorOvrHvbpFlt); delay(10); bool ovrCwdpFlt = _faultStatus->overCwdp; ui->l_ovrCWdpFlt->setText(QVariant(ovrCwdpFlt).toString()); auto colorOvrCwdpFlt = ovrCwdpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrCWdpFlt, colorOvrCwdpFlt); delay(10); bool ovrCur24vFlt = _faultStatus->overCurr24V; ui->l_ovrCur24vFlt->setText(QVariant(ovrCur24vFlt).toString()); auto colorOvrCur24vFlt = ovrCur24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrCur24vFlt, colorOvrCur24vFlt); delay(10); bool ovrP24vFlt = _faultStatus->overP24v; ui->l_ovrP24vFlt->setText(QVariant(ovrP24vFlt).toString()); auto colorOvrP24vFlt = ovrP24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrP24vFlt, colorOvrP24vFlt); delay(10); bool ovrP12vFlt = _faultStatus->overP12v; ui->l_ovrP12vFlt->setText(QVariant(ovrP12vFlt).toString()); auto colorOvrP12vFlt = ovrP12vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrP12vFlt, colorOvrP12vFlt); delay(10); bool ovrP5vFlt = _faultStatus->overP5v; ui->l_ovrP5vFlt->setText(QVariant(ovrP5vFlt).toString()); auto colorOvrP5vFlt = ovrP5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrP5vFlt, colorOvrP5vFlt); delay(10); bool ovrM5vFlt = _faultStatus->overM5v; ui->l_ovrM5vFlt->setText(QVariant(ovrM5vFlt).toString()); auto colorOvrM5vFlt = ovrM5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrM5vFlt, colorOvrM5vFlt); delay(10); bool ovrHvFlt = _faultStatus->overHvError; ui->l_ovrHvFlt->setText(QVariant(ovrHvFlt).toString()); auto colorOvrHvFlt = ovrHvFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovrHvFlt, colorOvrHvFlt); delay(10); bool ovrSup4dFlt = _faultStatus->overSup4d; ui->l_ovr4dFlt->setText(QVariant(ovrSup4dFlt).toString()); auto colorOvrP4dFlt = ovrSup4dFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_ovr4dFlt, colorOvrP4dFlt); delay(10); /******************Faults_Under*********************/ bool udrHvapFlt = _faultStatus->underHvap; ui->l_udrHVapFlt->setText(QVariant(udrHvapFlt).toString()); auto colorUdrHvapFlt = udrHvapFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrHVapFlt, colorUdrHvapFlt); delay(10); bool udrHvbpFlt = _faultStatus->underHvbp; ui->l_udrHVbpFlt->setText(QVariant(udrHvbpFlt).toString()); auto colorUdrHvbpFlt = udrHvbpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrHVbpFlt, colorUdrHvbpFlt); delay(10); bool udrCwdpFlt = _faultStatus->underCwdp; ui->l_udrCWdpFlt->setText(QVariant(udrCwdpFlt).toString()); auto colorUdrCwdpFlt = udrCwdpFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrCWdpFlt, colorUdrCwdpFlt); delay(10); bool udrCur24vFlt = _faultStatus->underCurr24V; ui->l_udrCurr24vFlt->setText(QVariant(udrCur24vFlt).toString()); auto colorUdrCur24vFlt = udrCur24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrCurr24vFlt, colorUdrCur24vFlt); delay(10); bool udrP24vFlt = _faultStatus->underP24v; ui->l_udrP24vFlt->setText(QVariant(udrP24vFlt).toString()); auto colorUdrP24vFlt = udrP24vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrP24vFlt, colorUdrP24vFlt); delay(10); bool udrP12vFlt = _faultStatus->underP12v; ui->l_udrP12vFlt->setText(QVariant(udrP12vFlt).toString()); auto colorUdrP12vFlt = udrP12vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrP12vFlt, colorUdrP12vFlt); delay(10); bool udrP5vFlt = _faultStatus->underP5v; ui->l_udrP5vFlt->setText(QVariant(udrP5vFlt).toString()); auto colorUdrP5vFlt = udrP5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrP5vFlt, colorUdrP5vFlt); delay(10); bool udrM5vFlt = _faultStatus->underM5v; ui->l_udrM5vFlt->setText(QVariant(udrM5vFlt).toString()); auto colorUdrM5vFlt = udrM5vFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrM5vFlt, colorUdrM5vFlt); delay(10); bool udrHvFlt = _faultStatus->underHvError; ui->l_udrHvFlt->setText(QVariant(udrHvFlt).toString()); auto colorUdrHvFlt = udrHvFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udrHvFlt, colorUdrHvFlt); delay(10); bool udrSup4dFlt = _faultStatus->underSup4d; ui->l_udr4dFlt->setText(QVariant(udrSup4dFlt).toString()); auto colorUdrP4dFlt = udrSup4dFlt ? Qt::red : Qt::green; changeLabelTextColor(ui->l_udr4dFlt, colorUdrP4dFlt); delay(10); } //void MainWindow::on_chk_usrMulDac_stateChanged(int arg1) //{ //auto bar = 0; //auto offset = 0x86018; //auto value = _usd->readWord(offset, bar); //if (!ui->chk_usrMulDac->isChecked()) //_usd->writeWord(offset, bar, value&0xFFF); //} //void MainWindow::on_btn_afeProg_clicked() //{ //auto bar = 0; //uint32_t offsetWr[3] = {0x10F0DA*4,0x20F0DA*4,0x30F0DA*4}; //uint32_t offsetRd[3] = {0x10F0DE*4,0x20F0DE*4,0x30F0DE*4}; //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetWr[i], bar, 0xF0); //_usd->writeWord(offsetWr[i], bar, 0x0F); //} //qDebug() << "--- AFE Registers --- "; //for (int i=0 ; i<3;i++) //{ //auto value = _usd->readWord(offsetRd[i], bar); //qDebug() << QString::number(offsetRd[i], 16) << QString::number(value, 16); //} //qDebug() << "--- ------------- --- "; //} //void MainWindow::on_btn_gtReg_clicked() //{ //auto result = "OK"; //auto bar = 0; //uint32_t offsetRd[24] = {0x14008*4,0x114008*4,0x214008*4,0x314008*4, //0x1400B*4,0x11400B*4,0x21400B*4,0x31400B*4, //0x1400C*4,0x11400C*4,0x21400C*4,0x31400C*4, //0x1400D*4,0x11400D*4,0x21400D*4,0x31400D*4, //0x14010*4,0x114010*4,0x214010*4,0x314010*4, //0x14011*4,0x114011*4,0x214011*4,0x314011*4}; //uint32_t correctVal[24] = {0x0,0xFF43,0xFF43,0xFF43, //0x0,0xFFFF,0xFFFF,0xFFFF, //0x0,0xF0F,0xF0F,0xF0F, //0xFF43,0xF04F,0xFF43,0xFF43, //0xFFFF,0xFF00,0xFFFF,0xFFFF, //0xF0F,0xF00,0xF0F,0xF0F}; //qDebug() << "--- GT Status Registers --- "; //for (auto i=0 ; i<20;i++) //{ //auto value = _usd->readWord(offsetRd[i], bar); //if (value == correctVal[i]) //result = "OK"; //else //result = "NOK"; //qDebug() << QString::number(offsetRd[i]/4, 16) << QString::number(value, 16) << result; //} //qDebug() << "--- ------------------- --- "; //} //void MainWindow::on_btn_browse_clicked() //{ //QFileDialog dialog; //dialog.setFileMode(QFileDialog::Directory); //dialog.setOption(QFileDialog::ShowDirsOnly); //auto result = dialog.exec(); //if(result) //{ ////_adcloggerFolder = dialog.selectedFiles()[0]; //ui->tb_adcLoggerPath->setText(dialog.selectedFiles()[0]); //} //} //void MainWindow::on_btn_dbgTransferStrt_clicked() //{ //ui->btn_dbgTransferStrt->setText("Trans..."); //auto path = ui->tb_adcLoggerPath->text(); //QFutureWatcher watcher; //connect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //auto future = QtConcurrent::run(this, &MainWindow::AdcLogCsvFileWriter, path, //ui->prg_adcLoggerFileWr); //watcher.setFuture(future); //_dial->exec(); //disconnect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //ui->btn_dbgTransferStrt->setText(START); //} //void MainWindow::on_btn_adcLoggerStrt_clicked() //{ //ui->btn_adcLoggerStrt->setText("Log..."); //uint32_t bar = 0; //uint32_t offsetTrnsfrCmdLen[3] = {0x140001*4,0x240001*4,0x340001*4}; //qDebug() << "--- ADC Logger Start --- "; //auto temp = ui->tb_dbgSmplCnt->text().toUInt(Q_NULLPTR, 16); //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, 0x1); //reset Logger //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, 0x0); //reset done //auto value = temp<<8; //value |= 0x4; //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, value); // Start ADC Logger and set Counter //} //QtConcurrent::run(this, &MainWindow::adcLoggerStatusCheck); //} //void MainWindow::on_prg_adcLoggerFileWr_valueChanged(int value) //{ //} //void MainWindow::adcLoggerStatusCheck() //{ //uint32_t offsetTrnsStatus[3] = {0x14000A*4,0x24000A*4,0x34000A*4}; //uint32_t offsetTrnsfrCmdLen[3] = {0x140001*4,0x240001*4,0x340001*4}; //_adcLoggerDone = false; //auto timeOut = 0; //auto doneFlag = 0; //while (timeOut < 1000 && doneFlag < 3 ) //{ //for (auto i=0 ; i<3;i++) //{ //doneFlag += (_usd->readWord(offsetTrnsStatus[i], 0) & 0X1); //} //timeOut += 1; //delay(10); //} //for (auto i=0 ; i<3;i++) //{ //auto value = _usd->readWord(offsetTrnsfrCmdLen[i], 0); //value &= 0xFFFFFFF0; //_usd->writeWord(offsetTrnsfrCmdLen[i], 0, value); //} //ui->btn_adcLoggerStrt->setText(START); //_adcLoggerDone = true; //if(timeOut == 1000) //{ //MESSAGE_BOX("Logger incomplete"); //return; //} //else //qDebug() << "--- ADC Logger done --- "; //} //void MainWindow::on_btn_adcSimBrowse_clicked() //{ //QFileDialog fileDialog; //fileDialog.setNameFilters({"ADC Sim Scenario file (*.bin)"}); //auto result = fileDialog.exec(); //if(result) //{ //auto selectedPath = fileDialog.selectedFiles()[0]; //ui->tb_adcSimPath->setText(selectedPath); //_settings->setValue(ADC_SIM_FILE_PATH, selectedPath); //} //} //void MainWindow::on_btn_adcSimStart_clicked() //{ //auto bar = 0; ////auto offset = 0; //uint32_t offsetDbgCmd[3] = {0x140000*4,0x240000*4,0x340000*4}; //uint32_t offsetSlvScenCmd[3] = {0x134000*4,0x234000*4,0x334000*4}; //auto startIndex = ui->tb_adcSimStartIndex->text().toUInt(Q_NULLPTR, 16); //if(startIndex == 0 && ui->tb_adcSimStartIndex->text() != "0") //{ //MESSAGE_BOX("Invalid input format for start index"); //return; //} //auto stopIndex = ui->tb_adcSimStopIndex->text().toUInt(Q_NULLPTR, 16); //if(stopIndex == 0 && ui->tb_adcSimStopIndex->text() != "0") //{ //MESSAGE_BOX("Invalid input format for stop index"); //return; //} //if((stopIndex < startIndex) || (stopIndex>131071) || (startIndex>131071)) //{ //MESSAGE_BOX("Stop index should be greater than or equal to start index"); //return; //} //_usd->writeWord(0x804, bar, startIndex); //_usd->writeWord(0x808, bar, stopIndex); //auto value = 0; //auto str = ui->btn_adcSimStart->text(); //if(str == START) //{ //qDebug() << "--- SET GT Send Mode :: BF --- "; //_usd->writeWord(0x10, 0, 0x1); //_csvReadStopFlag = false; //ui->btn_adcSimStart->setText(STOP); //for (auto i=0 ; i<3;i++) //{ //value = _usd->readWord(offsetDbgCmd[i], 0); //value |= 0x1; //_usd->writeWord(offsetDbgCmd[i], 0, value); //} //delay(100); //for (auto i=0 ; i<3;i++) //{ //value = _usd->readWord(offsetSlvScenCmd[i], bar); //_usd->writeWord(offsetSlvScenCmd[i], bar, value | 0x2); //} //auto path = ui->tb_adcSimPath->text(); //auto future = QtConcurrent::run(this, &MainWindow::binAdcFileUploader, 0, path , ui->prg_adcSim); //} //else //{ //_csvReadStopFlag = true; //ui->btn_adcSimStart->setText(START); //_usd->writeWord(0x800, bar, 0); //for (auto i=0 ; i<3;i++) //{ //auto value = _usd->readWord(offsetDbgCmd[i], 0); //value &= 0xFFFFFFF0; //_usd->writeWord(offsetDbgCmd[i], 0, value); //} //delay(100); //for (auto i=0 ; i<3;i++) //{ //value = _usd->readWord(offsetSlvScenCmd[i], bar); //_usd->writeWord(offsetSlvScenCmd[i], bar, value & 0x1); //} ////scenarioStop(); //} //} //void MainWindow::on_btn_adcLoggerAutoCount_clicked() //{ //uint32_t bar = 0; //uint32_t offsetTrnsfrCmdLen[3] = {0x140001*4,0x240001*4,0x340001*4}; //auto logCount = ui->tb_dbgAutoLogCount->text().toUInt(); //if(logCount == 0 && ui->tb_dbgAutoLogCount->text() != "0") //{ //MESSAGE_BOX("Invalid input format for logCount"); //return; //} //ui->btn_adcLoggerAutoCount->setText("Log..."); //uint32_t offsetAfePwrDn[3] = {0x10F0C5*4,0x20F0C5*4,0x30F0C5*4}; //uint32_t offsetAfeLpf[3] = {0x10F0C4*4,0x20F0C4*4,0x30F0C4*4}; //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetAfePwrDn[i], bar, 0x0); //_usd->writeWord(offsetAfeLpf[i], bar, 0x0100); //} //qDebug() << "--- AFE Registers --- "; //delay(1); //for (auto j = 0 ; j < logCount ; j++) //{ //qDebug() << "--- ADC Auto Logger Start --- "; //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, 0x1); //reset Logger //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, 0x0); //reset done //auto value = 1<<8; //value |= 0x4; //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, value); // Start ADC Logger and set Counter //value |= 0x8; //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, value); // Set Manual Trig //value &= 0xF7; //_usd->writeWord(offsetTrnsfrCmdLen[i], bar, value); // Set Manual Trig //} //QtConcurrent::run(this, &MainWindow::adcLoggerStatusCheck); //delay(10); //while (!_adcLoggerDone); //auto path = ui->tb_adcLoggerPath->text(); //QFutureWatcher watcher; //connect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //auto future = QtConcurrent::run(this, &MainWindow::AdcLogCsvFileWriter, path, //ui->prg_adcLoggerFileWr); //watcher.setFuture(future); //_dial->exec(); //disconnect(&watcher, &QFutureWatcher::finished, this, &MainWindow::threadFinished); //ui->btn_dbgTransferStrt->setText(START); //delay(10); //while (!_adcLoggerTrnsDone); //} //ui->btn_adcLoggerAutoCount->setText(START); //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetAfePwrDn[i], bar, 0x8000); //} //qDebug() << "--- AFE Registers Power Down --- "; //} //void MainWindow::on_btn_scenRead_clicked() //{ //auto paramPath = ui->tb_paramFile->text(); //auto paramBar = 0; //auto boardParamPath = "/home/hasis/Desktop/TrxBoardFile/_log/readBack.csv"; //QtConcurrent::run(this, &MainWindow::CsvFileChecker,paramBar, paramPath , boardParamPath , //ui->prg_scenarioUpload); //} /*************************************************************************************************/ QString MainWindow::releaseCodeVersion(quint32& value) { QString str = QString::number(value, 10); QList strList; foreach(auto ch, str) { strList.push_back(ch); } str.clear(); str = strList[0] + strList[1] + "/" + strList[2] + strList[3] + "/" + strList[4] + strList[5] + " " + strList[6] + strList[7] + ":" + strList[8] + strList[9]; return str; } /*************************************************************************************************/ void MainWindow::on_btn_getFpgaVersion_clicked() { _trx.getFpgasCodeVersion(_version); auto value = _version->masterCode; ui->l_masterVersion->setText(releaseCodeVersion(value)); value = _version->slave0Code; ui->l_slave0Version->setText(releaseCodeVersion(value)); value = _version->slave1Code; ui->l_slave1Version->setText(releaseCodeVersion(value)); value = _version->slave2Code; ui->l_slave2Version->setText(releaseCodeVersion(value)); } /*************************************************************************************************/ //void MainWindow::on_btn_txTrig_clicked() //{ //auto bar = 0; //uint32_t offsetAfeAdc2[3] = {0x10F002*4,0x20F002*4,0x30F002*4}; //// qDebug() << "--- SET AFE Ramp Count Mode --- "; //// for (auto i=0 ; i<3;i++) //// { //// _usd->writeWord(offsetAfeAdc2[i], bar, 0x1380); //// } //delay(20); //uint32_t offsetAfePwrDn[3] = {0x10F0C5*4,0x20F0C5*4,0x30F0C5*4}; ////uint32_t offsetAfeLpf[3] = {0x10F0C4*4,0x20F0C4*4,0x30F0C4*4}; //qDebug() << "--- SET AFE Power On Mode --- "; //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetAfePwrDn[i], bar, 0x0); ////_usd->writeWord(offsetAfeLpf[i], bar, 0x0100); //} //delay(100); //qDebug() << "--- Set TX Trig --- "; //auto offset = 0x5*4; //auto value = 0x1; //_usd->writeWord(offset,bar,value); //value = 0x5; //_usd->writeWord(offset,bar,value); //value = 0x1; //_usd->writeWord(offset,bar,value); //delay(100); //value = 0x0; //_usd->writeWord(offset,bar,value); //qDebug() << "--- TX Trig Done--- "; //delay(10); //// qDebug() << "--- SET AFE Normal Mode --- "; //// for (auto i=0 ; i<3;i++) //// { //// _usd->writeWord(offsetAfeAdc2[i], bar, 0x1000); //// } //qDebug() << "--- SET AFE Power On Mode --- "; //for (auto i=0 ; i<3;i++) //{ //_usd->writeWord(offsetAfePwrDn[i], bar, 0x8000); ////_usd->writeWord(offsetAfeLpf[i], bar, 0x0100); //} //delay(1); //delay(20); //} /*************************************************************************************************/ /************************************* Scenario Setting ******************************************/ /*************************************************************************************************/ void MainWindow::setScenario(const string& h5Path) { Hdf5 hdf; ScenGenHardwareOutput_t scenParams; ScenPrbDepHardwareParam prbDepParams; QVector lineFilterLut; QVector stbLut; hdf.hdf5Path(h5Path); hdf.scenarioRead(scenParams); hdf.prbDependParamsRead(prbDepParams); prbDepParams.afeCfg = _afeConfig; stbLut = hdf.stbRead(); lineFilterLut = hdf.lineFilterRead(); try { _trx.setScenario(scenParams); _trx.setProbeDependParams(prbDepParams); _trx.setLineFilterCoefficient(lineFilterLut); _trx.setStbCoefficient(stbLut); } catch(SonoException& e) { qDebug() << e.what(); } ui->btn_scenStart->setText("Scenario Start"); ui->btn_emulator->setText("Emulator Start"); auto startIdx = _usd->readWord(0x804, 0); auto endIdx = _usd->readWord(0x808, 0); ui->tb_startIdx->setText(QString::number(startIdx, 16)); ui->tb_endIdx->setText(QString::number(endIdx, 16)); } /*************************************************************************************************/ void MainWindow::on_btn_setScenario_clicked() { QString str = "doing"; QColor color = Qt::red; emit labelState(ui->l_scenFillingDone, str, color); QString sramScenario = "/scenGenOutput/scenario.h5"; QString h5Path = ui->tb_scenFilesPath->text() + sramScenario; emit scenarioReady(h5Path.toStdString()); str = "done"; color = Qt::green; emit labelState(ui->l_scenFillingDone, str, color); } /*************************************************************************************************/ void MainWindow::getSramBinaryCreateFlag() { ui->l_createSramBinary->setText("done"); changeLabelTextColor(ui->l_createSramBinary, Qt::green); } /*************************************************************************************************/ void MainWindow::getRegisterCsvCompareFlag() { ui->l_verifyRegisterParams->setText("done"); changeLabelTextColor(ui->l_verifyRegisterParams, Qt::green); } /*************************************************************************************************/ void MainWindow::getSramVerifyMessage(QString message) { ui->l_verifySramParams->setText("done"); changeLabelTextColor(ui->l_verifySramParams, Qt::green); MESSAGE_BOX(message); } /*************************************************************************************************/ void MainWindow::setScenarioCompare(const QString& scenPath) { try { _trx.setScenarioCompare(scenPath); } catch(SonoException& e) { if(!(ui->l_verifySramParams->text() == "done")) { ui->l_verifySramParams->setText("failed"); changeLabelTextColor(ui->l_verifySramParams, Qt::red); } if(!(ui->l_verifyRegisterParams->text() == "done")) { ui->l_verifyRegisterParams->setText("failed"); changeLabelTextColor(ui->l_verifyRegisterParams, Qt::red); } if(!(ui->l_createSramBinary->text() == "done")) { ui->l_createSramBinary->setText("failed"); changeLabelTextColor(ui->l_createSramBinary, Qt::red); } qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_setScenVerification_clicked() { ui->l_createSramBinary->setText("doing"); changeLabelTextColor(ui->l_createSramBinary, Qt::red); ui->l_verifyRegisterParams->setText("doing"); changeLabelTextColor(ui->l_verifyRegisterParams, Qt::red); ui->l_verifySramParams->setText("doing"); changeLabelTextColor(ui->l_verifySramParams, Qt::red); const QString scenPath = ui->tb_scenFilesPath->text(); QtConcurrent::run(this, &MainWindow::setScenarioCompare, scenPath); } /*************************************************************************************************/ void MainWindow::on_btn_scenBrowse_clicked() { QFileDialog fileDialog; fileDialog.setFileMode(QFileDialog::Directory); fileDialog.setOption(QFileDialog::ShowDirsOnly); auto result = fileDialog.exec(); if(result) { auto selectedPath = fileDialog.selectedFiles()[0]; ui->tb_scenFilesPath->setText(selectedPath); _settings->setValue(SCENARIO_FILE_PATH, selectedPath); } } /*************************************************************************************************/ void MainWindow::on_btn_setAtgcMode_clicked() { auto aTgcMode = ui->cb_aTgcMode->currentIndex(); auto aTgcValue = ui->tb_aTgcValue->text().toUInt(); if(aTgcMode == 0) { _trx.setAtgcMode(Auto, 0); } else { _trx.setAtgcMode(Manual, static_cast(aTgcValue)); } } /*************************************************************************************************/ void MainWindow::on_btn_setIdx_clicked() { quint32 bar(0); auto startIndex = ui->tb_startIdx->text().toUInt(Q_NULLPTR, 16); if(startIndex == 0 && ui->tb_startIdx->text() != "0") { MESSAGE_BOX("Invalid input format for start index"); return; } auto endIndex = ui->tb_endIdx->text().toUInt(Q_NULLPTR, 16); if(endIndex == 0 && ui->tb_endIdx->text() != "0") { MESSAGE_BOX("Invalid input format for stop index"); return; } if((endIndex < startIndex) || (endIndex > 131071) || (startIndex > 131071)) { MESSAGE_BOX("Stop index should be greater than or equal to start index"); return; } _usd->writeWord(0x804, bar, startIndex); _usd->writeWord(0x808, bar, endIndex); } /*************************************************************************************************/ /**************************************** EEPROM *************************************************/ /*************************************************************************************************/ QByteArray MainWindow::str2ByteArray (QString& str) { QByteArray finalArray; QByteArray temp; qint8 value; auto asciiArray = str.toUpper().toUtf8(); foreach(auto i, asciiArray) { if(i <= 0x39 && i >= 0x30) { temp.push_back(i - 0x30); } else if(i <= 0x46 && i >= 0x41) { temp.push_back(i - 0x37); } else { throw"Out of range"; } } for(quint8 k = 0; k < temp.size() / 2; k++) { value = static_cast(((temp.at(2 * k) << 4) & 0xF0) + ((temp.at(2 * k + 1)) & 0xF)); finalArray.push_back(value); } return finalArray; } QString MainWindow::uint2IdString (quint32& id) { QString idStr = QString::number(id, 16); return idStr; } QString MainWindow::byteArray2InfoString (QByteArray& arr) { QString infoStr; foreach(auto j, arr) { quint8 l = static_cast(j); if(l <= 15) { infoStr += "0" + QString::number(l, 16); } else { infoStr += QString::number(l, 16); } } return infoStr; } /*************************************************************************************************/ /*************************************************************************************************/ void MainWindow::on_btn_trxRomIdWrite_clicked() { QString idStr = ui->tb_trxRomId->text(); try { QByteArray sendingArray = str2ByteArray(idStr); trxEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl); } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_trxRomInfoWrite_clicked() { QString infoStr = ui->tb_trxRomInfo->toPlainText(); try { QByteArray sendingArray = infoStr.toLatin1(); trxEepromWrite(sendingArray, EEPROM_INFO_BEGIN, _bCtrl); //QByteArray sendingArray; //unsigned char crcArray[] = {0x4, 0x0, 0x13, 0x0, 0x27, 0x0, 0x28, 0x0, 0xEB, 0x1, //0xAC, 0x5, 0xAC, 0x6, 0x4C, 0x6, 0xB0, 0x6, 0xB2, //0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //for(auto var : crcArray) //sendingArray.push_back(static_cast(var)); //trxEepromWrite(sendingArray, EEPROM_CRC_BEGIN, _bCtrl); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_trxRomIdRead_clicked() { EepromStatus romStatus; try { _trx.trxState(romStatus); if(romStatus.ConnectionMode == connected) { ui->tb_trxRomId->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the trx eeprom is occured."; } } else { MESSAGE_BOX("Trx board is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_trxRomInfoRead_clicked() { try { QString receivingStr = _trx.trxInfo(); ui->tb_trxRomInfo->setText(receivingStr); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_mpsRomIdWrite_clicked() { QString idStr = ui->tb_mpsRomId->text(); try { QByteArray sendingArray = str2ByteArray(idStr); mpsEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl); } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_mpsRomInfoWrite_clicked() { QString infoStr = ui->tb_mpsRomInfo->toPlainText(); try { QByteArray sendingArray = infoStr.toLatin1(); mpsEepromWrite(sendingArray, EEPROM_INFO_BEGIN, _bCtrl); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_mpsRomIdRead_clicked() { EepromStatus romStatus; try { _trx.mpsState(romStatus); if(romStatus.ConnectionMode == connected) { ui->tb_mpsRomId->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the mps eeprom is occured."; } } else { MESSAGE_BOX("Mps board is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_mpsRomInfoRead_clicked() { try { QString receivingStr = _trx.mpsInfo(); ui->tb_mpsRomInfo->setText(receivingStr); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbCtrlRomIdWrite_clicked() { QString idStr = ui->tb_prbCtrlRomId->text(); try { QByteArray sendingArray = str2ByteArray(idStr); prbCtrlEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl); } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbCtrlRomInfoWrite_clicked() { QString infoStr = ui->tb_prbCtrlRomInfo->toPlainText(); try { QByteArray sendingArray = infoStr.toLatin1(); prbCtrlEepromWrite(sendingArray, EEPROM_INFO_BEGIN, _bCtrl); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbCtrlRomIdRead_clicked() { EepromStatus romStatus; try { _trx.prbCtrlState(romStatus); if(romStatus.ConnectionMode == connected) { ui->tb_prbCtrlRomId->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the prbCtrl eeprom is occured."; } } else { MESSAGE_BOX("PrbCtrl board is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbCtrlRomInfoRead_clicked() { try { QString receivingStr = _trx.prbCtrlInfo(); ui->tb_prbCtrlRomInfo->setText(receivingStr); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbRomIdRead_clicked() { auto sel = ui->cb_prbSelRom->currentIndex(); EepromStatus romStatus; try { switch(sel) { case 0: try { _trx.selectedPrbState(romStatus, prbA); if(romStatus.ConnectionMode == connected) { ui->tb_prbRomIdRead->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe A eeprom is occured."; } } else { MESSAGE_BOX("Probe A is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } break; case 1: try { _trx.selectedPrbState(romStatus, prbB); if(romStatus.ConnectionMode == connected) { ui->tb_prbRomIdRead->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe B eeprom is occured."; } } else { MESSAGE_BOX("Probe B is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } break; case 2: try { _trx.selectedPrbState(romStatus, prbC); if(romStatus.ConnectionMode == connected) { ui->tb_prbRomIdRead->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe C eeprom is occured."; } } else { MESSAGE_BOX("Probe C is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } break; case 3: try { _trx.selectedPrbState(romStatus, prbD); if(romStatus.ConnectionMode == connected) { ui->tb_prbRomIdRead->setText(uint2IdString(romStatus.id)); if(romStatus.errorCode == EEPROM_CRC_ERROR) { throw"The crc error of the probe D eeprom is occured."; } } else { MESSAGE_BOX("Probe D is disconnected."); } } catch(const char* exception) { qDebug() << exception; } catch(SonoException& e) { qDebug() << e.what(); } break; } } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ void MainWindow::on_btn_prbRomImpulseRead_clicked() { try { auto sel = ui->cb_prbSelRom->currentIndex(); QByteArray receivingArray = _trx.selectedPrbImpulseResponse(static_cast(sel)); ui->tb_prbRomImpulseRead->setText(byteArray2InfoString(receivingArray)); } catch(SonoException& e) { qDebug() << e.what(); } } /*************************************************************************************************/ /*********************************** AFE Configuration *******************************************/ /*************************************************************************************************/ void MainWindow::on_btn_afeRead_clicked() { auto sel = ui->cb_afeSlaveSelect->currentIndex(); auto offset = ui->tb_afeRegAddr->text().toUInt(nullptr, 16); QList afeArray; afeArray.clear(); ui->tb_afeRegsValueArray->clear(); switch(sel) { case 0: afeArray = _trx.getAfeReg(slave0, offset); break; case 1: afeArray = _trx.getAfeReg(slave1, offset); break; case 2: afeArray = _trx.getAfeReg(slave2, offset); break; } for(quint8 i = 0; i < afeArray.size(); i++) { ui->tb_afeRegsValueArray->appendPlainText(QString::number((afeArray.at(i)), 16)); } } /*************************************************************************************************/ void MainWindow::setAfeConfig() { _afeConfig.lowNf = lowNfDisable; _afeConfig.lnaHpf = lnaHpfEnable; _afeConfig.pgaHpf = pgaHpfEnable; _afeConfig.lpfProg = LpfProg10MHz; _afeConfig.pgaGain = pgaGain30db; _afeConfig.pgaClamp = pgaClampDisable; _afeConfig.powModes = lowNoise; _afeConfig.actTermEn = actTermEnable; _afeConfig.lnaGainGbl = lnaGainGbl24db; _afeConfig.lnaHpfProg = lnaHpfProg200Khz; _afeConfig.gblActiveTerm = gblActiveTerm50; _afeConfig.pgaClampLevel = minus2dbfs; _afeConfig.activeTermIndRes = actTermIndRes0; _afeConfig.activeTermIndResEn = actTermIndResDisable; _afeConfig.inputClampLevel = inputClampLvlAuto; } /*************************************************************************************************/