From b1ca8b2eb3b364a27d4416528022c9772d8806b3 Mon Sep 17 00:00:00 2001 From: Arash Aletayeb Date: Wed, 7 Feb 2024 15:50:59 +0330 Subject: [PATCH] AFEs HV DACs could be controlled seperatelly. --- developHw.pro.user | 2 +- .../hardware/core/lowLevelApi/TrxBoard.h | 7 +- .../TrxBoardUtils/PreProcessorDef.h | 2 +- mainwindow.cpp | 1 + mainwindow.ui | 2 +- .../hardware/core/lowLevelApi/TrxBoard.cpp | 179 +++++++++++++++++- 6 files changed, 187 insertions(+), 6 deletions(-) diff --git a/developHw.pro.user b/developHw.pro.user index b2abcd8..8996766 100644 --- a/developHw.pro.user +++ b/developHw.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/include/model/hardware/core/lowLevelApi/TrxBoard.h b/include/model/hardware/core/lowLevelApi/TrxBoard.h index b721985..eed5ed0 100644 --- a/include/model/hardware/core/lowLevelApi/TrxBoard.h +++ b/include/model/hardware/core/lowLevelApi/TrxBoard.h @@ -161,7 +161,6 @@ private: void setAfesHeartBeat(const bool heartBeat) const; void afesHeartBeatDisable(const bool mode) const; void sonoLiveTimeout(); - void sonoHeartBeatsEnable(void) const; void sendPacket(void); void delay(quint16 ms) const; @@ -211,6 +210,9 @@ signals: public: #ifndef DEVELOP_UI HardwarePacketEngine packetEngine; + void scenPlayerStart(int count, bool afeHvPwrOn = false); + void readLimitedData(int count); + void scenStopAfterReadLimited(); #else void afeAdcsSync(const quint8& slaveMounted); void gtReadReset(void); @@ -232,6 +234,8 @@ public: void setStbCoefficient(QVector& stbLut); void setDtgcLut(QVector& dtgcLut); + void afesHvDacsOn(void) const; + void afesHvDacsOff(void) const; void scenPlayerStart(bool afeHvPwrOn = false); void scenPlayerStop(bool afeHvPwrOff = false); //void scenPlayerPause (bool pause) const; @@ -243,6 +247,7 @@ public: void setAfesPwr(eAfePwrdnMode pwrMode) const; void setAfesFastPwr(eAfePwrdnMode pwrMode) const; void sonoHeartBeatsDisable(void) const; + void sonoHeartBeatsEnable(void) const; /////////////////////////////// Built-in Test API ///////////////////////////// void setBiteDacData(const QByteArray& iData, const QByteArray& qData) const; diff --git a/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h b/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h index ed2d061..2063672 100644 --- a/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h +++ b/include/model/hardware/core/lowLevelApi/TrxBoardUtils/PreProcessorDef.h @@ -2,6 +2,6 @@ #define PREPROCESSORDEF_H #define MPS_BOARD -#define DEVELOP_UI +//#define DEVELOP_UI #endif //PREPROCESSORDEF_H diff --git a/mainwindow.cpp b/mainwindow.cpp index f8a0fc1..7b34452 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1086,6 +1086,7 @@ void MainWindow::programThreadFinish() #ifdef DEVELOP_UI _trx.afeAdcsSync(MOUNTED_SLAVE_FPGA); _trx.gtReadReset(); + _trx.sonoHeartBeatsEnable(); #endif QString str = "done"; diff --git a/mainwindow.ui b/mainwindow.ui index 1928e1d..7807206 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -7933,7 +7933,7 @@ - 11 + 9 75 true true diff --git a/src/model/hardware/core/lowLevelApi/TrxBoard.cpp b/src/model/hardware/core/lowLevelApi/TrxBoard.cpp index d98fbd5..c007061 100644 --- a/src/model/hardware/core/lowLevelApi/TrxBoard.cpp +++ b/src/model/hardware/core/lowLevelApi/TrxBoard.cpp @@ -475,7 +475,6 @@ TrxBoard::TrxBoard() : _offsetSlave0(0), _offsetSlave1(0x400000), _offsetSlave2( setFpgaOffset(); setAfeModuleOffset(); systemLutCompletion(); - sonoHeartBeatsEnable(); } TrxBoard::ScenHwRegister::ScenHwRegister() @@ -1559,6 +1558,7 @@ void TrxBoard::slaveFpgaProgram(const QString path) #ifndef DEVELOP_UI afeAdcsSync(MOUNTED_SLAVE_FPGA); gtReadReset(); + sonoHeartBeatsEnable(); #endif } @@ -1567,6 +1567,177 @@ void TrxBoard::setBeamFormerMode(eClkMode mode) const this->_clkDistributer->clockMode(CLOCK_DIVISION, mode); } +void TrxBoard::afesHvDacsOn() const +{ + setAfesPwr(afePwrdnDisable); +// setAfesFastPwr(afePwrdnDisable); + +#ifdef MPS_BOARD + this->_bCtrlMngt->mpsDacsOn(); +#endif +} + +void TrxBoard::afesHvDacsOff() const +{ + setAfesPwr(afePwrdnEnable); +// setAfesFastPwr(afePwrdnEnable); + +#ifdef MPS_BOARD + this->_bCtrlMngt->mpsDacsOff(); +#endif +} + +#ifndef DEVELOP_UI +void TrxBoard::scenPlayerStart(int count, bool afeHvPwrOn) +{ + if(_allow) + { + _run = false; + + this->_beamFormerSlave0->regValid(true); + this->_beamFormerSlave1->regValid(true); + this->_beamFormerSlave2->regValid(true); + + this->_misc->setGtSendMode(bfMode); + + this->_misc->setSyncMode(bfSyncMode); + + this->_emul->setEmulatorDis(); + + this->_device.resetCounter(); + + this->_device.startDma(); + + if(afeHvPwrOn) + { + this->_afeSlave0->setAfeGblPwr(afePwrdnDisable); + this->_afeSlave1->setAfeGblPwr(afePwrdnDisable); + this->_afeSlave2->setAfeGblPwr(afePwrdnDisable); + //quint32 afeFastPdn = 0x43C36C; + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0, static_cast(0)); + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x400000, + //static_cast(0)); + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x800000, + //static_cast(0)); +#ifdef MPS_BOARD + this->_bCtrlMngt->mpsDacsOn(); +#endif + + this->delay(170); + } + + this->_scenPlayer->control.setCommand(true); + _sonoLiveTimer->start(5000); + _sonoHeartBeats = true; + this->_scenPlayer->control.setHeartBeats(_sonoHeartBeats); + this->setAfesHeartBeat(_sonoHeartBeats); + + packetEngine.init(); + + _run = true; + + QtConcurrent::run(this, &TrxBoard::readLimitedData, count); + //QtConcurrent::run(this, &TrxBoard::sendPacket); + } + else + { + throw SonoException("Total scenario luts and sram parameters are not written compeletely"); + } +} + +void TrxBoard::readLimitedData(int count) +{ + int generatedFrame = 0; + preBatch = 0; + _swCounter = _device.getCounter(); + do + { + auto cnt = _device.getCounter(); + + if(cnt == 0) + { + _hwCounter = 0; + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + continue; + } + else if(cnt != _hwCounter) + { + _hwCounter++; + + if(_hwCounter > HW_BUFFER_NUM) + { + _hwCounter = 1; + } + + _device.copy(_hwCounter - 1, _swCounter); + + auto framePacket = + QByteArray::fromRawData(_device.getBufferPtr(_swCounter), BUFFER_SIZE); + + auto batch = ((static_cast(framePacket[128])) & 0x00FF) | + (((static_cast(framePacket[129])) << 8) & 0xFF00); + auto subBbatch = ((static_cast(framePacket[130])) & 0x00FF); + + if((batch == preBatch && subBbatch - preSubBatch != 1) || + (preSubBatch == -1 && (batch != 0 || subBbatch != 0)) || + (batch - preBatch > 1) || + (batch - preBatch == 1 && subBbatch != 0)) + { +//throw; + } + if(batch != preBatch) + { + generatedFrame++; + } + qDebug() << "*******************batch " << batch << "|geteratedFrame " << + generatedFrame; + preBatch = batch; + preSubBatch = subBbatch; + packetEngine.newData(framePacket); + + _swCounter++; + if(_swCounter >= SW_BUFFER_NUM) + { + _swCounter = 0; + } + } + }while (generatedFrame < count); + scenStopAfterReadLimited(); +} + +void TrxBoard::scenStopAfterReadLimited() +{ + _run = false; + + this->_device.stopDma(); + + //uncrustify off + while(_device.isDmaBusy()); + //uncrustify on + + _sonoLiveTimer->stop(); + _sonoHeartBeats = false; + this->_scenPlayer->control.setHeartBeats(_sonoHeartBeats); + this->setAfesHeartBeat(_sonoHeartBeats); + + this->_scenPlayer->control.setCommand(false); + + this->_afeSlave0->setAfeGblPwr(afePwrdnEnable); + this->_afeSlave1->setAfeGblPwr(afePwrdnEnable); + this->_afeSlave2->setAfeGblPwr(afePwrdnEnable); + //quint32 afeFastPdn = 0x43C36C; + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0, static_cast(1)); + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x400000, static_cast(1)); + //this->_device.device.writeWord(BAR_REG, afeFastPdn + 0x800000, static_cast(1)); +#ifdef MPS_BOARD + this->_bCtrlMngt->mpsDacsOff(); +#endif + + QThread::msleep(140); +} + +#endif + /* set afeHvPwrOn true when unfreeze happen */ void TrxBoard::scenPlayerStart(bool afeHvPwrOn) { @@ -1597,7 +1768,9 @@ void TrxBoard::scenPlayerStart(bool afeHvPwrOn) this->_bCtrlMngt->mpsDacsOn(); #endif +#ifdef DEVELOP_UI this->delay(170); +#endif } this->_scenPlayer->control.setCommand(true); @@ -1648,7 +1821,9 @@ void TrxBoard::scenPlayerStop(bool afeHvPwrOff) this->_bCtrlMngt->mpsDacsOff(); #endif - this->delay(140); +#ifdef DEVELOP_UI + this->delay(140); +#endif } }