You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

712 lines
23 KiB

4 years ago
#include "model/hardware/core/TrxBoard.h"
#include <QtConcurrent/QtConcurrent>
#include <chrono>
#include <thread>
4 years ago
void TrxBoard::readData()
4 years ago
{
4 years ago
while(_run)
{
auto cnt = _device.getCounter();
4 years ago
4 years ago
if(cnt == 0)
{
std::this_thread::sleep_for(std::chrono::milliseconds(3));
_hwCounter = 0;
continue;
}
else
if(cnt != _hwCounter)
{
_hwCounter++;
4 years ago
4 years ago
_device.copy(_hwCounter - 1, _swCounter);
4 years ago
4 years ago
auto temp = QByteArray::fromRawData(_device.getBufferPtr(_swCounter), BUFFER_SIZE);
//packetEngine.newData(temp);
4 years ago
4 years ago
_swCounter++;
if(_swCounter >= SW_BUFFER_NUM)
{
_swCounter = 0;
}
}
}
4 years ago
}
void TrxBoard::scenParamsFilling(TrxBoard::eScenParams cmd)
{
static quint8 scenParams = 0;
scenParams = cmd ? (scenParams+cmd) : (cmd);
if (scenParams >= TOTAL_SCEN_LUT_SRAM)
{
scenParams = TOTAL_SCEN_LUT_SRAM;
_allow = true;
}
else
_allow = false;
}
void TrxBoard::setSwapVector()
{
_swapVec.clear();
_swapVec << 0 << 113 << 98 << 19 << 4 << 117 << 102 << 23 << 8 << 121 << 106 << 27 << 12 << 125 << 110 << 31 << 16 << 1 << 114 << 99
<< 20 << 5 << 118 << 103 << 24 << 9 << 122 << 107 << 28 << 13 << 126 << 111 << 96 << 17 << 2 << 115 << 100 << 21 << 6 << 119
<< 104 << 25 << 10 << 123 << 108 << 29 << 14 << 127 << 112 << 97 << 18 << 3 << 116 << 101 << 22 << 7 << 120 << 105 << 26 << 11
<< 124 << 109 << 30 << 15 << 32 << 145 << 130 << 51 << 36 << 149 << 134 << 55 << 40 << 153 << 138 << 59 << 44 << 157 << 142 << 63
<< 48 << 33 << 146 << 131 << 52 << 37 << 150 << 135 << 56 << 41 << 154 << 139 << 60 << 45 << 158 << 143 << 128 << 49 << 34 << 147
<< 132 << 53 << 38 << 151 << 136 << 57 << 42 << 155 << 140 << 61 << 46 << 159 << 144 << 129 << 50 << 35 << 148 << 133 << 54 << 39
<< 152 << 137 << 58 << 43 << 156 << 141 << 62 << 47 << 64 << 177 << 162 << 83 << 68 << 181 << 166 << 87 << 72 << 185 << 170 << 91
<< 76 << 189 << 174 << 95 << 80 << 65 << 178 << 163 << 84 << 69 << 182 << 167 << 88 << 73 << 186 << 171 << 92 << 77 << 190 << 175
<< 160 << 81 << 66 << 179 << 164 << 85 << 70 << 183 << 168 << 89 << 74 << 187 << 172 << 93 << 78 << 191 << 176 << 161 << 82 << 67
<< 180 << 165 << 86 << 71 << 184 << 169 << 90 << 75 << 188 << 173 << 94 << 79;
}
4 years ago
//QList<quint32> TrxBoard::signedVector2unsignedList (QVector<qint32>& sgnVec)
//{
// _unsignedQntzrList.clear();
//// std::list<uint> _usgnList (sgnVec.begin(), sgnVec.end());
//// _unsignedQntzrList.fromStdList(_usgnList);
// foreach (auto i, sgnVec)
// {
// _unsignedQntzrList.push_back(static_cast<quint32>(i));
// }
// return _unsignedQntzrList;
//}
TrxBoard::TrxBoard() : _offsetSlave0(0), _offsetSlave1(0x400000), _offsetSlave2(0x800000)
4 years ago
{
4 years ago
_beamFormerSlave0 = new BeamFormer (&_device, _offsetSlave0);
_beamFormerSlave1 = new BeamFormer (&_device, _offsetSlave1);
_beamFormerSlave2 = new BeamFormer (&_device, _offsetSlave2);
_clkDistributer = new ClockDistributer(&_device);
_fpgaProgram = new FpgaProgram (&_device);
_scenPlayer = new ScenPalyer (&_device);
_bCtrlMngt = new BoardsCtrlMngt (&_device);
_bpiFlash = new BpiFlash (&_device);
4 years ago
_emul = new Emulator (&_device);
_misc = new Misc (&_device);
_sram = new Sram (&_device);
4 years ago
_dsp = new Dsp (&_device);
4 years ago
_adc = new AdcVoltages;
_pg = new VoltagesPg;
scenParams = new ScenGenHardwareOutput;
4 years ago
setSwapVector();
_allow = false;
_run = true;
_device.init();
4 years ago
}
TrxBoard::HwRegister::HwRegister(){
configLut = new ReceiverConfiguration;
elementPosition = new ProbeElementPosition;
rxBeamformer = new RxBeamformerProperties;
pulse = new PulseProperties;
//afe = new AfeProperties;
}
4 years ago
4 years ago
TrxBoard::ScenGenHardwareOutput::ScenGenHardwareOutput()
{
hwRegister = new HwRegister;
indexParams = new SramIndex;
rxParams = new SramRx;
txParams = new SramTx;
4 years ago
}
4 years ago
4 years ago
TrxBoard::~TrxBoard()
{
delete _beamFormerSlave0;
delete _beamFormerSlave1;
delete _beamFormerSlave2;
delete _clkDistributer;
delete _fpgaProgram;
delete _scenPlayer;
delete _bCtrlMngt;
delete _bpiFlash;
4 years ago
delete _emul;
delete _misc;
delete _sram;
4 years ago
delete _dsp;
delete _adc;
delete _pg;
4 years ago
delete scenParams;
}
TrxBoard::HwRegister::~HwRegister(){
delete configLut;
delete rxBeamformer;
delete elementPosition;
delete pulse;
//delete afe;
}
TrxBoard::ScenGenHardwareOutput::~ScenGenHardwareOutput()
{
delete hwRegister;
delete indexParams;
delete rxParams;
delete txParams;
4 years ago
}
4 years ago
void TrxBoard::setScenario(ScenGenHardwareOutput_t scenGenHw)
4 years ago
{
4 years ago
scenParams->focusTypeNumber = scenGenHw.focusTypeNumber;
scenParams->totalTxShotNumber = scenGenHw.totalTxShotNumber;
scenParams->rxBeamFormerNumber = scenGenHw.rxBeamFormerNumber;
scenParams->scenarioStartIndex = scenGenHw.hwRegister.scenarioStartIndex;
scenParams->scenarioEndIndex = scenGenHw.hwRegister.scenarioEndIndex;
//scenParams->hwRegister->lpfLut = scenGenHw.hwRegister.lpfLut;
//scenParams->hwRegister->atgcLut=scenGenHw.hwRegister.atgcLut;
//scenParams->hwRegister->apodization=scenGenHw.hwRegister.apodizationLut;
scenParams->hwRegister->blendWeight=scenGenHw.hwRegister.blendWeight;
scenParams->hwRegister->elementPosition->xPosition=scenGenHw.hwRegister.elementXPosition;
scenParams->hwRegister->elementPosition->yPosition=scenGenHw.hwRegister.elementYPosition;
scenParams->hwRegister->elementPosition->zPosition=scenGenHw.hwRegister.elementZPosition;
scenParams->hwRegister->freqLut=scenGenHw.hwRegister.freqLut;
scenParams->hwRegister->dtgcLut=scenGenHw.hwRegister.dtgcLut;
scenParams->hwRegister->pulseTypeNumber=scenGenHw.hwRegister.pulseTypeNumber;
scenParams->hwRegister->rxBeamFormerTypeNumber=scenGenHw.hwRegister.rxBeamFormerTypeNumber;
scenParams->hwRegister->receiverConfigTypeNumber=scenGenHw.hwRegister.receiverConfigTypeNumber;
scenParams->hwRegister->pulse->clear();
foreach (auto i, scenGenHw.hwRegister.pulseProps)
{
scenParams->hwRegister->pulse->halfPeriod.append(i.halfPeriod);
scenParams->hwRegister->pulse->startPhase.append(i.startPhase);
scenParams->hwRegister->pulse->halfCycleNo.append(i.halfCycleNo);
scenParams->hwRegister->pulse->pulseVoltSel.append(i.pulseVoltSel);
scenParams->hwRegister->pulse->dampingPulseWidth.append(i.dampingPulseWidth);
}
scenParams->hwRegister->rxBeamformer->clear();
foreach (auto j, scenGenHw.hwRegister.rxBeamFormerProps)
{
scenParams->hwRegister->rxBeamformer->lag.append(j.lag);
scenParams->hwRegister->rxBeamformer->mla.append(j.mla);
scenParams->hwRegister->rxBeamformer->apodization.append(j.apodizationSel);
}
scenParams->hwRegister->configLut->clear();
// foreach (auto k, scenGenHw.hwRegister.receiverConfigProps)
// {
// }
scenParams->indexParams->dLineNum=scenGenHw.indexParams.dLineNum;
//scenParams->indexParams->frameType=scenGenHw.indexParams.
scenParams->indexParams->dEnsembleNum=scenGenHw.indexParams.dEnsembleNum;
scenParams->indexParams->lastLineInFrame=scenGenHw.indexParams.lastLineInFrame;
scenParams->indexParams->firstLineInFrame=scenGenHw.indexParams.firstLineInFrame;
scenParams->indexParams->shotPropertiesIndex=scenGenHw.indexParams.shotPropertiesIndex;
scenParams->indexParams->pulsePropertiesIndex=scenGenHw.indexParams.pulsePropertiesIndex;
scenParams->indexParams->receiverConfigurationIndex=scenGenHw.indexParams.receiverConfigurationIndex;
scenParams->txParams->maxDelayQ=scenGenHw.txParams.maxDelayQ;
scenParams->txParams->txFocusXPos=scenGenHw.txParams.txFocusXPos;
scenParams->txParams->txFocusYPos=scenGenHw.txParams.txFocusYPos;
scenParams->txParams->txFocusZPos=scenGenHw.txParams.txFocusZPos;
scenParams->txParams->pulseInterval=scenGenHw.pulseInterval;
scenParams->txParams->txActiveElementNumber=scenGenHw.txParams.txActiveElementNumber;
scenParams->txParams->txStartActiveElementNumber=scenGenHw.txParams.txStartActiveElementNumber;
scenParams->rxParams->phiCos=scenGenHw.rxParams.phiCos;
scenParams->rxParams->phiSin=scenGenHw.rxParams.phiSin;
scenParams->rxParams->thetaCos=scenGenHw.rxParams.thetaCos;
scenParams->rxParams->thetaSin=scenGenHw.rxParams.thetaSin;
scenParams->rxParams->r0Position=scenGenHw.rxParams.r0Position;
scenParams->rxParams->interceptXPos=scenGenHw.rxParams.interceptXPos;
scenParams->rxParams->interceptYPos=scenGenHw.rxParams.interceptYPos;
scenParams->rxParams->interceptZPos=scenGenHw.rxParams.interceptZPos;
scenParams->rxParams->rxR0MaxDelayQ=scenGenHw.rxParams.rxR0MaxDelayQ;
scenParams->rxParams->rxR0MinDelayQ=scenGenHw.rxParams.rxR0MinDelayQ;
scenParams->rxParams->txR0MinDelayQ=scenGenHw.rxParams.txR0MinDelayQ;
scenParams->rxParams->rxFocusPointNumber=scenGenHw.rxParams.rxFocusPointNumber;
scenParams->rxParams->rxActiveElementStep=scenGenHw.rxParams.rxActiveElementStep;
scenParams->rxParams->rxR0ActiveElementNumber=scenGenHw.rxParams.rxR0ActiveElementNumber;
scenParams->rxParams->interceptPointFiringTime=scenGenHw.rxParams.interceptPointFiringTime;
scenParams->rxParams->rxR0CenterActiveElementNumber=scenGenHw.rxParams.rxR0CenterActiveElementNumber;
this->setScenario(scenParams);
}
void TrxBoard::setScenario (ScenGenHardwareOutput* scenParams)
{
///////////////////////////////// BeamFormer setting ///////////////////////////////
4 years ago
QList<QList<quint32>> elementPosition;
QList<quint32> x;
QList<quint32> y;
QList<quint32> z;
4 years ago
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(scenParams->hwRegister->elementPosition->xPosition, 1, 18, 0, 0, true, true, true);
QList<quint32> xPosQ = _unsignedQntzrVec.toList();
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(scenParams->hwRegister->elementPosition->yPosition, 1, 18, 0, 0, true, true, true);
QList<quint32> yPosQ = _unsignedQntzrVec.toList();
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(scenParams->hwRegister->elementPosition->zPosition, 0, 17, 0, 0, true, true, true);
QList<quint32> zPosQ = _unsignedQntzrVec.toList();
4 years ago
for (quint8 i=0; i<3; i++)
{
for (quint8 j=0; j<SLAVE_ELEMENT_SEGMENT; j++)
{
4 years ago
x.append(xPosQ.at(_swapVec.at(j + i * SLAVE_ELEMENT_SEGMENT)));
y.append(yPosQ.at(_swapVec.at(j + i * SLAVE_ELEMENT_SEGMENT)));
z.append(zPosQ.at(_swapVec.at(j + i * SLAVE_ELEMENT_SEGMENT)));
4 years ago
}
elementPosition.append(x);
elementPosition.append(y);
elementPosition.append(z);
switch (i)
{
case 0 : this->_beamFormerSlave0->probeElementPosition(elementPosition); break;
case 1 : this->_beamFormerSlave1->probeElementPosition(elementPosition); break;
case 2 : this->_beamFormerSlave2->probeElementPosition(elementPosition); break;
}
x.clear();
y.clear();
z.clear();
elementPosition.clear();
}
scenParamsFilling(set);
4 years ago
this->_beamFormerSlave0->rxBeamformerProperties(scenParams->hwRegister->rxBeamFormerTypeNumber ,scenParams->hwRegister->rxBeamformer);
this->_beamFormerSlave1->rxBeamformerProperties(scenParams->hwRegister->rxBeamFormerTypeNumber ,scenParams->hwRegister->rxBeamformer);
this->_beamFormerSlave2->rxBeamformerProperties(scenParams->hwRegister->rxBeamFormerTypeNumber ,scenParams->hwRegister->rxBeamformer);
4 years ago
scenParamsFilling(set);
4 years ago
this->_beamFormerSlave0->pulseProperties(scenParams->hwRegister->pulseTypeNumber ,scenParams->hwRegister->pulse);
this->_beamFormerSlave1->pulseProperties(scenParams->hwRegister->pulseTypeNumber ,scenParams->hwRegister->pulse);
this->_beamFormerSlave2->pulseProperties(scenParams->hwRegister->pulseTypeNumber ,scenParams->hwRegister->pulse);
4 years ago
scenParamsFilling(set);
4 years ago
QList<QList<quint32>> apodizationQ;
foreach (auto vec, scenParams->hwRegister->apodization)
{
apodizationQ.push_back(vec.toList());
}
this->_beamFormerSlave0->apodizationLut(apodizationQ);
this->_beamFormerSlave1->apodizationLut(apodizationQ);
this->_beamFormerSlave2->apodizationLut(apodizationQ);
4 years ago
scenParamsFilling(set);
4 years ago
// this->_beamFormerSlave0->afeLut(scenParams->hwRegister->afe);
// this->_beamFormerSlave1->afeLut(scenParams->hwRegister->afe);
// this->_beamFormerSlave2->afeLut(scenParams->hwRegister->afe);
// scenParamsFilling(set);
4 years ago
4 years ago
///////////////////////////////// DSP setting ///////////////////////////////
this->_dsp->receiverConfigurationLut(scenParams->hwRegister->receiverConfigTypeNumber, scenParams->hwRegister->configLut);
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(scenParams->hwRegister->freqLut, 0, 24, 0, 0, true);
QList<quint32> freqLutQ = _unsignedQntzrVec.toList();
this->_dsp->frequencyLut(freqLutQ);
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(scenParams->hwRegister->dtgcLut, 0, 12, 8, 0, true, false);
QList<quint32> dtgcLutQ = _unsignedQntzrVec.toList();
this->_dsp->dtgcLut(dtgcLutQ);
QList<quint32> temp;
QList<QList<quint32>> blendWeightQ;
_unsignedQntzrVec.clear();
foreach (auto vec, scenParams->hwRegister->blendWeight)
{
temp.clear();
_unsignedQntzrVec = Register::qntzr(vec, 0, 9, 8, 0, true, false, true);
temp = _unsignedQntzrVec.toList();
blendWeightQ.push_back(temp);
}
this->_dsp->blendWeight(blendWeightQ);
QList<QList<quint32>> atgcLutQ;
foreach (auto vec, scenParams->hwRegister->atgcLut)
{
atgcLutQ.push_back(vec.toList());
}
this->_dsp->atgcLut(atgcLutQ);
QList<QList<quint32>> lpfLutQ;
foreach (auto vec, scenParams->hwRegister->lpfLut)
{
lpfLutQ.push_back(vec.toList());
}
this->_dsp->lpfLut(lpfLutQ);
///////////////////////////////// Sram setting ///////////////////////////////
this->_sram->setSramIndex(scenParams->totalTxShotNumber, scenParams->indexParams);
this->_sram->setSramTx(scenParams->focusTypeNumber, scenParams->txParams);
this->_sram->setSramRx(scenParams->rxBeamFormerNumber, scenParams->focusTypeNumber, scenParams->rxParams);
scenParamsFilling(set);
////////////////////////////// Scen Index setting ////////////////////////////
if (scenParams->scenarioEndIndex >= scenParams->scenarioStartIndex)
{
this->_scenPlayer->setStartIndex(scenParams->scenarioStartIndex);
this->_scenPlayer->setEndIndex(scenParams->scenarioEndIndex);
}
else
throw SonoException("The scenario end index must be greater than or equal to the scenario start index");
4 years ago
}
4 years ago
void TrxBoard::setLineFilterCoefficient(QVector<float> &lineFilterLut)
4 years ago
{
4 years ago
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(lineFilterLut, 0, 9, 8, 0, true, false);
QList<quint32> lineFilterLutQ = _unsignedQntzrVec.toList();
this->_dsp->lineFilterCoefficient(lineFilterLutQ);
4 years ago
}
4 years ago
void TrxBoard::setStbCoefficient(QVector<quint32> &stbLut)
4 years ago
{
4 years ago
QList<quint32> stbLutQ = stbLut.toList();
this->_dsp->stbCoefficient(stbLutQ);
4 years ago
}
void TrxBoard::setAtgcMode(eAtgcMode mode, quint16 value) const
{
this->_dsp->atgcMode(mode, value);
}
4 years ago
void TrxBoard::setDtgcLut(QVector<float> &dtgcLut)
4 years ago
{
4 years ago
_unsignedQntzrVec.clear();
_unsignedQntzrVec = Register::qntzr(dtgcLut, 0, 12, 8, 0, true, false);
QList<quint32> dtgcLutQ = _unsignedQntzrVec.toList();
this->_dsp->dtgcLut(dtgcLutQ);
4 years ago
}
4 years ago
void TrxBoard::setAfePwrdnMode(eAfePwrdnMode cmd) const
4 years ago
{
4 years ago
4 years ago
}
4 years ago
void TrxBoard::setAfeConfig(AfeProperties *afe) const
4 years ago
{
4 years ago
4 years ago
}
void TrxBoard::slaveFpgaProgram(QString path)
{
QByteArray bitFileData;
4 years ago
QFile bitFile(path);
bitFileData.clear();
4 years ago
if (bitFile.fileName().isEmpty())
{
throw SonoException("No file is selected");
}
if (!bitFile.open(QIODevice::ReadOnly))
{
throw SonoException("Couldn't open bit file programming");
}
bitFileData = bitFile.readAll();
4 years ago
bitFile.close();
this->_fpgaProgram->program(bitFileData, SLAVE_FPGA_NUMBER);
4 years ago
scenParamsFilling(clear);
}
void TrxBoard::setBeamFormerMode(eClkMode mode) const
{
this->_clkDistributer->clockMode(CLOCK_DIVISION, mode);
}
void TrxBoard::scenPlayerStart(void) const
4 years ago
{
if (_allow)
{
this->_beamFormerSlave0->regValid(true);
this->_beamFormerSlave1->regValid(true);
this->_beamFormerSlave2->regValid(true);
}
else
{
throw SonoException("Total scenario luts and sram parameters are not written compeletely");
}
4 years ago
this->_misc->setGtSendMode(BfMode);
this->_misc->setSyncMode(BfSyncMode);
4 years ago
this->_scenPlayer->control.command(true);
4 years ago
}
//void TrxBoard::scenPlayerPause(bool pause) const
//{
// this->_scenPlayer->control.pause(pause);
//}
4 years ago
void TrxBoard::scenPlayerStop(void) const
4 years ago
{
this->_scenPlayer->control.command(false);
4 years ago
}
4 years ago
void TrxBoard::emulatorInit(EmulatorProperties *config) const
{
this->_emul->setTransferMode(config->emulOption, config->emulMode, config->transferLength);
this->_emul->setRamOffsetAddress(config->ramBufAddress);
this->_emul->setTransferRate(config->transferRate);
}
void TrxBoard::emulatorEnable() const
{
this->_emul->setEmulatorEn();
}
void TrxBoard::emulatorDisable() const
{
this->_emul->setEmulatorDis();
}
4 years ago
quint32 TrxBoard::deviceId() const
{
auto pid = this->_bCtrlMngt->getPid();
return pid;
}
quint32 TrxBoard::vendorId() const
{
auto vid = this->_bCtrlMngt->getVid();
return vid;
}
quint32 TrxBoard::trxId() const
{
QByteArray id = this->_bCtrlMngt->trxEepromRead(EEPROM_ID_BYTE_BEGIN, EEPROM_ID_BYTE_NUMBER);
return byteArray2Uint32BigEndian(id);
}
quint32 TrxBoard::mpsId() const
{
QByteArray id = this->_bCtrlMngt->mpsEepromRead(EEPROM_ID_BYTE_BEGIN, EEPROM_ID_BYTE_NUMBER);
return byteArray2Uint32BigEndian(id);
}
quint32 TrxBoard::prbCtrlId() const
{
QByteArray id = this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_ID_BYTE_BEGIN, EEPROM_ID_BYTE_NUMBER);
return byteArray2Uint32BigEndian(id);
}
quint32 TrxBoard::prbId(quint8 prbSel) const
{
QByteArray id = this->_bCtrlMngt->prbEepromRead(EEPROM_ID_BYTE_BEGIN, EEPROM_ID_BYTE_NUMBER, prbSel);
return byteArray2Uint32BigEndian(id);
}
void TrxBoard::getConnectedPrbId(ConnectedPrbId* prbId) const
4 years ago
{
QVector<bool> vec;
QByteArray id;
vec.clear();
id.clear();
4 years ago
vec = this->_bCtrlMngt->getConnectedPrb();
for (quint8 i=0; i < vec.size(); i++)
{
if (vec.at(i))
id = this->_bCtrlMngt->prbEepromRead(EEPROM_ID_BYTE_BEGIN, EEPROM_ID_BYTE_NUMBER, i);
else
id.append(nullptr);
switch (i)
{
case 0: prbId->prbA = byteArray2Uint32BigEndian(id);break;
case 1: prbId->prbB = byteArray2Uint32BigEndian(id);break;
case 2: prbId->prbC = byteArray2Uint32BigEndian(id);break;
case 3: prbId->prbD = byteArray2Uint32BigEndian(id);break;
}
4 years ago
}
}
QString TrxBoard::trxInfo() const
{
QString str = QString(this->_bCtrlMngt->trxEepromRead(EEPROM_INFO_BYTE_BEGIN, EEPROM_INFO_BYTE_NUMBER));
return str;
}
QString TrxBoard::mpsInfo() const
{
QString str = QString(this->_bCtrlMngt->mpsEepromRead(EEPROM_INFO_BYTE_BEGIN, EEPROM_INFO_BYTE_NUMBER));
return str;
}
QString TrxBoard::prbCtrlInfo() const
{
QString str = QString(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_INFO_BYTE_BEGIN, EEPROM_INFO_BYTE_NUMBER));
return str;
}
QByteArray TrxBoard::prbInfo(quint8 prbSel) const
4 years ago
{
return this->_bCtrlMngt->prbEepromRead(EEPROM_INFO_BYTE_BEGIN, EEPROM_INFO_BYTE_NUMBER, prbSel);
4 years ago
}
void TrxBoard::getConnectedPrbInfo(ConnectedPrbInfo* prbInfo) const
4 years ago
{
QByteArray info;
4 years ago
QVector<bool> vec;
info.clear();
4 years ago
vec.clear();
vec = this->_bCtrlMngt->getConnectedPrb();
for (quint8 i=0; i < vec.size(); i++)
{
if (vec.at(i))
info = this->_bCtrlMngt->prbEepromRead(EEPROM_INFO_BYTE_BEGIN, EEPROM_INFO_BYTE_NUMBER, i);
else
info.append(nullptr);
switch (i)
4 years ago
{
case 0: prbInfo->prbA = info;break;
case 1: prbInfo->prbB = info;break;
case 2: prbInfo->prbC = info;break;
case 3: prbInfo->prbD = info;break;
4 years ago
}
4 years ago
}
}
void TrxBoard::supervisorRbValue(SupervisorRbValue *sValue) const
{
this->_bCtrlMngt->getSupervisorValue(sValue);
}
void TrxBoard::mpsFaultStatus(MpsFaultStatus *faultStatus) const
{
this->_bCtrlMngt->getMpsFault(faultStatus);
}
void TrxBoard::mpsReset() const
{
this->_bCtrlMngt->setMpsReset();
}
void TrxBoard::mpsSetAo(float voltA, float voltB) const
{
this->_bCtrlMngt->mpsHvSet(voltA, voltB);
}
void TrxBoard::selectProbe(eSelectProbe prbSel) const
{
this->_bCtrlMngt->setProbeSelect(prbSel);
}
void TrxBoard::getHealthStatus(HealthStatus* healStat) const
{
// healStat->criticalComponentTemperature = this->_bCtrlMngt->getTrxFpgaTemp();
healStat->systemTemperature = this->_bCtrlMngt->getTrxTempSensor();
this->_bCtrlMngt->getTrxBoardVoltages(_adc, _pg);
this->_bCtrlMngt->getTrxVoltagesPg(_pg);
healStat->adcMon = _adc;
healStat->voltsPg = _pg;
4 years ago
}
void TrxBoard::init() const
{
this->_bCtrlMngt->mpsInit();
this->_bCtrlMngt->prbCtrlInit();
}
void TrxBoard::mcsProgram(QString path)
{
QFile mcsFile(path);
if (mcsFile.fileName().isEmpty())
4 years ago
throw SonoException("No file is selected");
4 years ago
if (!mcsFile.open(QIODevice::ReadOnly))
4 years ago
throw SonoException("Couldn't open mcs file programming");
4 years ago
QByteArray mcsFileData = mcsFile.readAll();
this->_bpiFlash->writeMcs(mcsFileData);
mcsFileData.clear();
mcsFile.close();
scenParamsFilling(clear);
}
void TrxBoard::mcsVerify(QString path) const
{
QFile mcsFile(path);
if (mcsFile.fileName().isEmpty())
4 years ago
throw SonoException("No file is selected");
4 years ago
if (!mcsFile.open(QIODevice::WriteOnly))
4 years ago
throw SonoException("Couldn't open mcs file programming");
4 years ago
QTextStream save(&mcsFile);
4 years ago
(*_mcsList).clear();
this->_bpiFlash->readMcs(_mcsList);
4 years ago
for (auto i=0; i < MCS_FILE_SIZE; i++)
{
4 years ago
save << (*_mcsList).at(i);
4 years ago
}
mcsFile.flush();
mcsFile.close();
}
4 years ago
void TrxBoard::getTrxStatus(StatusVec *status) const
{
this->_misc->getStatusVector(status);
}
void TrxBoard::getFpgasCodeVersion(FpgaCodeVersion *version) const
{
this->_misc->getFpgaVersion(version);
}
4 years ago