Browse Source

E2prom format changing for version controll handling.

Arash Aletayeb 1 year ago
parent
commit
9890db6077
  1. 2
      developHw.pro.user
  2. 12
      include/model/hardware/core/lowLevelApi/TrxBoard.h
  3. 1
      include/model/hardware/core/lowLevelApi/TrxBoardUtils/TrxBoardStructures.h
  4. 30
      include/model/hardware/core/lowLevelApi/TrxBoardUtils/e2promFormat.h
  5. 125
      mainwindow.cpp
  6. 10
      mainwindow.h
  7. 266
      mainwindow.ui
  8. 266
      src/model/hardware/core/lowLevelApi/TrxBoard.cpp

2
developHw.pro.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.10.0, 2023-12-09T10:56:57. -->
<!-- Written by QtCreator 4.10.0, 2023-12-12T15:55:00. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

12
include/model/hardware/core/lowLevelApi/TrxBoard.h

@ -55,6 +55,7 @@ private:
QList<quint32> _afeModuleOffset;
QList<quint32> _fpgaOffset;
QByteArray _eepromCrc;
QList<QList<quint32>> _systemLut;
const quint32 _offsetSlave0;
const quint32 _offsetSlave1;
const quint32 _offsetSlave2;
@ -169,6 +170,14 @@ private:
void scenParamsFilling(eScenParams cmd);
//QList<quint32> signedVector2unsignedList(QVector<qint32>& sgnVec);
QList<quint32> systemStructure2List(systemE2proms &systemRoms);
void systemLutCompletion(void);
void systemCompare(QList<quint32> &system) const;
void crcCheck (const QByteArray array, quint8 crcRom) const;
void trxCrcCheck(const QByteArray array, quint32 offset) const;
void prbCtrlCrcCheck(const QByteArray array, quint32 offset) const;
void mpsCrcCheck(const QByteArray array, quint32 offset) const;
#ifndef DEVELOP_UI
void afeAdcsSync(const quint8& slaveMounted);
void gtReadReset(void);
@ -254,6 +263,9 @@ public:
quint32 deviceId(void) const;
quint32 vendorId(void) const;
void checkSystemCompatibility(void);
quint8 crcGenerator(QByteArray inputByteArray) const;
QByteArray trxRomHeader(void) const;
QByteArray trxRomId(void) const;
QByteArray trxRomPid(void) const;

1
include/model/hardware/core/lowLevelApi/TrxBoardUtils/TrxBoardStructures.h

@ -41,7 +41,6 @@ struct EepromStatus
quint32 boardSerialNumber;
quint32 firstMbedCodeVersion;
quint32 secondMbedCodeVersion;
quint16 crc16;
quint8 errorCode;
};

30
include/model/hardware/core/lowLevelApi/TrxBoardUtils/e2promFormat.h

@ -2,27 +2,37 @@
#define E2PROMFORMAT_H
#include <QObject>
#include "TrxBoardStructures.h"
#define CRC_POLYNOMIAL 0x07 // x^8 + x^2 + x + 1
#define CRC8_BYTE_NUMBER 1U
#define EEPROM_HEADER_BEGIN 0U
#define EEPROM_HEADER_NUMBER 3U
#define EEPROM_ID_BEGIN 19U
#define EEPROM_ID_NUMBER 2U
#define EEPROM_ID_CRC 21U
#define EEPROM_PID_BEGIN 21U
#define EEPROM_PID_BEGIN 22U
#define EEPROM_PID_NUMBER 2U
#define EEPROM_PID_CRC 24U
#define EEPROM_PCB_VERSION_BEGIN 23U
#define EEPROM_PCB_VERSION_BEGIN 25U
#define EEPROM_PCB_VERSION_NUMBER 2U
#define EEPROM_PCB_VERSION_CRC 27U
#define EEPROM_BOARD_SERIAL_NO_BEGIN 25U
#define EEPROM_BOARD_SERIAL_NO_BEGIN 28U
#define EEPROM_BOARD_SERIAL_NO_NUMBER 4U
#define EEPROM_BOARD_SERIAL_NO_CRC 32U
#define EEPROM_FIRST_MBED_CODE_VERSION_BEGIN 29U
#define EEPROM_FIRST_MBED_CODE_VERSION_BEGIN 33U
#define EEPROM_FIRST_MBED_CODE_VERSION_NUMBER 4U
#define EEPROM_FIRST_MBED_CODE_VERSION_CRC 37U
#define EEPROM_SECOND_MBED_CODE_VERSION_BEGIN 33U
#define EEPROM_SECOND_MBED_CODE_VERSION_BEGIN 38U
#define EEPROM_SECOND_MBED_CODE_VERSION_NUMBER 4U
#define EEPROM_SECOND_MBED_CODE_VERSION_CRC 42U
#define EEPROM_INFO_BEGIN 30U
#define EEPROM_INFO_NUMBER 100U
@ -30,7 +40,6 @@
#define EEPROM_IMPULSE_RESPONSE_BEGIN 428U
#define EEPROM_IMPULSE_RESPONSE_NUMBER 1024U
#define EEPROM_CRC_BEGIN 0U
#define EEPROM_CRC_NUMBER 19U
@ -40,9 +49,16 @@
const QByteArray headerArray = QByteArray::fromHex("AA55F0");
const quint32 trxId = 0x1030;
const quint32 prbCntlId = 0x1020;
const quint32 prbCtrlId = 0x1020;
const quint32 mpsId = 0x1010;
const quint32 pid = 0x0001;
struct systemE2proms
{
EepromStatus trx;
EepromStatus prbCtrl;
EepromStatus mps;
};
#endif // E2PROMFORMAT_H

125
mainwindow.cpp

@ -2998,21 +2998,26 @@ QString bigEndianByteArray2Str(QByteArray btArr, int base)
QByteArray str2BigEndianByteArray4SerialNo(QString str)
{
QStringRef strByte1(&str, 0, 2);
QStringRef strByte2(&str, 2, 2);
QStringRef strByte34(&str, 4, 3);
if(str.length() == 7)
{
QStringRef strByte1(&str, 0, 2);
QStringRef strByte2(&str, 2, 2);
QStringRef strByte34(&str, 4, 3);
QByteArray qbInt;
QByteArray qbInt;
qbInt.append(static_cast<qint8>(strByte1.toInt()));
qbInt.append(static_cast<qint8>(strByte2.toInt()));
qbInt.append(static_cast<qint8>(strByte1.toInt()));
qbInt.append(static_cast<qint8>(strByte2.toInt()));
for(qint8 i = 1; i >= 0; i--)
{
qbInt.append(static_cast<qint8>(((strByte34.toShort()) >> (i*8)) & 0xFF));
}
for(qint8 i = 1; i >= 0; i--)
{
qbInt.append(static_cast<qint8>(((strByte34.toShort()) >> (i*8)) & 0xFF));
}
return qbInt;
return qbInt;
}
else
throw SonoException("Invalid board serial number.");
}
QString bigEndianByteArray2Str4SerialNo(QByteArray btArr)
@ -3085,15 +3090,27 @@ QString MainWindow::byteArray2InfoString (QByteArray& arr)
return infoStr;
}
QByteArray MainWindow::crcWrite(const QList<quint8>& crcArray)
QByteArray MainWindow::crcCalc(const QByteArray array)
{
QByteArray crcByteArray;
foreach(auto byte, crcArray)
{
crcByteArray.push_back(static_cast<qint8>(byte));
}
quint8 crcValue = _trx.crcGenerator(array);
QByteArray crc;
crc.append(static_cast<qint8>(crcValue));
return crc;
}
return crcByteArray;
void MainWindow::trxCrcWrite(const QByteArray array, quint32 offset)
{
trxEepromWrite(crcCalc(array), offset, _bCtrl);
}
void MainWindow::prbCtrlCrcWrite(const QByteArray array, quint32 offset)
{
prbCtrlEepromWrite(crcCalc(array), offset, _bCtrl);
}
void MainWindow::mpsCrcWrite(const QByteArray array, quint32 offset)
{
mpsEepromWrite(crcCalc(array), offset, _bCtrl);
}
QByteArray MainWindow::e2promClear(quint32 length)
@ -3128,6 +3145,8 @@ void MainWindow::on_btn_trxRomId_clicked()
QByteArray sendingArray = str2BigEndianByteArray(idStr, 16, 2);
trxEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_ID_CRC);
}
else
{
@ -3161,6 +3180,8 @@ void MainWindow::on_btn_trxRomPid_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pidStr, 16, 2);
trxEepromWrite(sendingArray, EEPROM_PID_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_PID_CRC);
}
else
{
@ -3194,6 +3215,8 @@ void MainWindow::on_btn_trxRomPcbVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pcbVesionStr, 10, 2);
trxEepromWrite(sendingArray, EEPROM_PCB_VERSION_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_PCB_VERSION_CRC);
}
else
{
@ -3227,6 +3250,8 @@ void MainWindow::on_btn_trxRomSerialNumber_clicked()
QByteArray sendingArray = str2BigEndianByteArray4SerialNo(serialNoStr);
trxEepromWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_CRC);
}
else
{
@ -3260,11 +3285,13 @@ void MainWindow::on_btn_trxRomMasterCodeVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(masterCodeVersionStr, 10, 4);
trxEepromWrite(sendingArray, EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_FIRST_MBED_CODE_VERSION_CRC);
}
else
{
QString firstMbedStr = bigEndianByteArray2Str(_trx.trxRomFirstMbedCode(), 10);
ui->tb_trxRomMasterCodeVersion->setText(firstMbedStr);
ui->tb_trxRomMasterCodeVersion->setText("MFV." + firstMbedStr);
}
}
catch(SonoException& e)
@ -3293,11 +3320,13 @@ void MainWindow::on_btn_trxRomSlaveCodeVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(slaveCodeVersionWrStr, 10, 4);
trxEepromWrite(sendingArray, EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, _bCtrl);
trxCrcWrite(sendingArray, EEPROM_SECOND_MBED_CODE_VERSION_CRC);
}
else
{
QString secondMbedStr = bigEndianByteArray2Str(_trx.trxRomSecondMbedCode(), 10);
ui->tb_trxRomSlaveCodeVersion->setText(secondMbedStr);
ui->tb_trxRomSlaveCodeVersion->setText("SFV." + secondMbedStr);
}
}
catch(SonoException& e)
@ -3311,7 +3340,11 @@ void MainWindow::on_chk_writeHeaderTrxRom_clicked(bool checked)
{
if(checked)
{
QByteArray clearHeader = e2promClear(EEPROM_HEADER_NUMBER);
trxEepromWrite(clearHeader, EEPROM_HEADER_BEGIN, _bCtrl);
trxEepromWrite(headerArray, EEPROM_HEADER_BEGIN, _bCtrl);
qDebug() << _trx.trxRomHeader();
}
}
@ -3377,6 +3410,8 @@ void MainWindow::on_btn_mpsRomId_clicked()
QByteArray sendingArray = str2BigEndianByteArray(idStr, 16, 2);
mpsEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_ID_CRC);
}
else
{
@ -3410,6 +3445,8 @@ void MainWindow::on_btn_mpsRomPid_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pidStr, 16, 2);
mpsEepromWrite(sendingArray, EEPROM_PID_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_PID_CRC);
}
else
{
@ -3443,6 +3480,8 @@ void MainWindow::on_btn_mpsRomPcbVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pcbVesionStr, 10, 2);
mpsEepromWrite(sendingArray, EEPROM_PCB_VERSION_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_PCB_VERSION_CRC);
}
else
{
@ -3476,6 +3515,8 @@ void MainWindow::on_btn_mpsRomSerialNumber_clicked()
QByteArray sendingArray = str2BigEndianByteArray4SerialNo(serialNoStr);
mpsEepromWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_CRC);
}
else
{
@ -3509,11 +3550,13 @@ void MainWindow::on_btn_mpsRomUcCodeVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(ucCodeVersionStr, 10, 4);
mpsEepromWrite(sendingArray, EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_FIRST_MBED_CODE_VERSION_CRC);
}
else
{
QString firstMbedStr = bigEndianByteArray2Str(_trx.mpsRomFirstMbedCode(), 10);
ui->tb_mpsRomUcCodeVersion->setText(firstMbedStr);
ui->tb_mpsRomUcCodeVersion->setText("UCV." + firstMbedStr);
}
}
catch(SonoException& e)
@ -3542,11 +3585,13 @@ void MainWindow::on_btn_mpsRomSupCodeVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(supCodeVersionWrStr, 10, 4);
mpsEepromWrite(sendingArray, EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, _bCtrl);
mpsCrcWrite(sendingArray, EEPROM_SECOND_MBED_CODE_VERSION_CRC);
}
else
{
QString secondMbedStr = bigEndianByteArray2Str(_trx.mpsRomSecondMbedCode(), 10);
ui->tb_mpsRomSupCodeVersion->setText(secondMbedStr);
ui->tb_mpsRomSupCodeVersion->setText("SVV." + secondMbedStr);
}
}
catch(SonoException& e)
@ -3560,7 +3605,11 @@ void MainWindow::on_chk_writeHeaderMpsRom_clicked(bool checked)
{
if(checked)
{
QByteArray clearHeader = e2promClear(EEPROM_HEADER_NUMBER);
mpsEepromWrite(clearHeader, EEPROM_HEADER_BEGIN, _bCtrl);
mpsEepromWrite(headerArray, EEPROM_HEADER_BEGIN, _bCtrl);
qDebug() << _trx.mpsRomHeader();
}
}
@ -3626,6 +3675,8 @@ void MainWindow::on_btn_prbCtrlRomId_clicked()
QByteArray sendingArray = str2BigEndianByteArray(idStr, 16, 2);
prbCtrlEepromWrite(sendingArray, EEPROM_ID_BEGIN, _bCtrl);
prbCtrlCrcWrite(sendingArray, EEPROM_ID_CRC);
}
else
{
@ -3658,6 +3709,8 @@ void MainWindow::on_btn_prbCntlRomPid_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pidStr, 16, 2);
prbCtrlEepromWrite(sendingArray, EEPROM_PID_BEGIN, _bCtrl);
prbCtrlCrcWrite(sendingArray, EEPROM_PID_CRC);
}
else
{
@ -3691,6 +3744,8 @@ void MainWindow::on_btn_prbCntlRomPcbVersion_clicked()
QByteArray sendingArray = str2BigEndianByteArray(pcbVesionStr, 10, 2);
prbCtrlEepromWrite(sendingArray, EEPROM_PCB_VERSION_BEGIN, _bCtrl);
prbCtrlCrcWrite(sendingArray, EEPROM_PCB_VERSION_CRC);
}
else
{
@ -3724,6 +3779,8 @@ void MainWindow::on_btn_prbCntlRomSerialNumber_clicked()
QByteArray sendingArray = str2BigEndianByteArray4SerialNo(serialNoStr);
prbCtrlEepromWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_BEGIN, _bCtrl);
prbCtrlCrcWrite(sendingArray, EEPROM_BOARD_SERIAL_NO_CRC);
}
else
{
@ -3742,7 +3799,11 @@ void MainWindow::on_chk_writeHeaderPrbCtrlRom_clicked(bool checked)
{
if(checked)
{
QByteArray clearHeader = e2promClear(EEPROM_HEADER_NUMBER);
prbCtrlEepromWrite(clearHeader, EEPROM_HEADER_BEGIN, _bCtrl);
prbCtrlEepromWrite(headerArray, EEPROM_HEADER_BEGIN, _bCtrl);
qDebug() << _trx.prbCtrlRomHeader();
}
}
@ -3787,6 +3848,26 @@ void MainWindow::on_chk_clearPrbCtrlRom_clicked(bool checked)
// }
//}
/*************************************************************************************************/
/*************************************************************************************************/
void MainWindow::on_chk_sysCompatibilityCheck_clicked(bool checked)
{
try
{
if(checked)
{
_trx.checkSystemCompatibility();
}
}
catch(SonoException& e)
{
qDebug() << e.what();
MESSAGE_BOX("Failed! \n\r"
"The system parameters are not compatible.");
}
}
/*************************************************************************************************/
/*************************************************************************************************/
/*************************************************************************************************/
void MainWindow::on_btn_prbRomIdRead_clicked()

10
mainwindow.h

@ -198,7 +198,13 @@ private:
QString byteArray2InfoString (QByteArray& arr);
QByteArray crcWrite (const QList<quint8> &crcArray);
QByteArray crcCalc (const QByteArray array);
void trxCrcWrite (const QByteArray array, quint32 offset);
void prbCtrlCrcWrite (const QByteArray array, quint32 offset);
void mpsCrcWrite (const QByteArray array, quint32 offset);
QByteArray e2promClear(quint32 length);
@ -547,6 +553,8 @@ private slots:
void on_btn_mpsRomSupCodeVersion_clicked();
void on_chk_sysCompatibilityCheck_clicked(bool checked);
signals:
void showMessage(QString message);
void threeDReady();

266
mainwindow.ui

@ -2052,46 +2052,10 @@
<property name="title">
<string>TRX</string>
</property>
<widget class="QCheckBox" name="chk_clearTrxRom">
<property name="geometry">
<rect>
<x>700</x>
<y>50</y>
<width>91</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
</widget>
<widget class="QCheckBox" name="chk_writeHeaderTrxRom">
<property name="geometry">
<rect>
<x>700</x>
<y>30</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
</property>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_25">
<property name="geometry">
<rect>
<x>200</x>
<x>300</x>
<y>20</y>
<width>151</width>
<height>61</height>
@ -2176,7 +2140,7 @@
<widget class="QWidget" name="verticalLayoutWidget_28">
<property name="geometry">
<rect>
<x>360</x>
<x>460</x>
<y>20</y>
<width>131</width>
<height>61</height>
@ -2261,7 +2225,7 @@
<widget class="QWidget" name="verticalLayoutWidget_31">
<property name="geometry">
<rect>
<x>500</x>
<x>600</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -2346,7 +2310,7 @@
<widget class="QWidget" name="verticalLayoutWidget_32">
<property name="geometry">
<rect>
<x>600</x>
<x>700</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -2431,7 +2395,7 @@
<widget class="QWidget" name="verticalLayoutWidget_22">
<property name="geometry">
<rect>
<x>0</x>
<x>100</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -2516,7 +2480,7 @@
<widget class="QWidget" name="verticalLayoutWidget_35">
<property name="geometry">
<rect>
<x>100</x>
<x>200</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -2598,6 +2562,45 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_6">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>97</width>
<height>61</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QCheckBox" name="chk_writeHeaderTrxRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chk_clearTrxRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_11">
<property name="geometry">
@ -2876,46 +2879,10 @@
<property name="title">
<string>Probe Control</string>
</property>
<widget class="QCheckBox" name="chk_writeHeaderPrbCtrlRom">
<property name="geometry">
<rect>
<x>700</x>
<y>30</y>
<width>101</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
</property>
</widget>
<widget class="QCheckBox" name="chk_clearPrbCtrlRom">
<property name="geometry">
<rect>
<x>700</x>
<y>50</y>
<width>90</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_7">
<property name="geometry">
<rect>
<x>0</x>
<x>100</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3000,7 +2967,7 @@
<widget class="QWidget" name="verticalLayoutWidget_26">
<property name="geometry">
<rect>
<x>200</x>
<x>300</x>
<y>20</y>
<width>151</width>
<height>61</height>
@ -3085,7 +3052,7 @@
<widget class="QWidget" name="verticalLayoutWidget_29">
<property name="geometry">
<rect>
<x>360</x>
<x>460</x>
<y>20</y>
<width>131</width>
<height>61</height>
@ -3170,7 +3137,7 @@
<widget class="QWidget" name="verticalLayoutWidget_23">
<property name="geometry">
<rect>
<x>100</x>
<x>200</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3252,59 +3219,80 @@
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_14">
<property name="geometry">
<rect>
<x>10</x>
<y>170</y>
<width>801</width>
<height>81</height>
</rect>
</property>
<property name="title">
<string>MPS</string>
</property>
<widget class="QCheckBox" name="chk_clearMpsRom">
<widget class="QWidget" name="verticalLayoutWidget_36">
<property name="geometry">
<rect>
<x>700</x>
<y>50</y>
<width>91</width>
<height>23</height>
<x>0</x>
<y>20</y>
<width>97</width>
<height>61</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QCheckBox" name="chk_writeHeaderPrbCtrlRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chk_clearPrbCtrlRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QCheckBox" name="chk_writeHeaderMpsRom">
<widget class="QCheckBox" name="chk_sysCompatibilityCheck">
<property name="geometry">
<rect>
<x>700</x>
<y>30</y>
<width>101</width>
<height>23</height>
<x>600</x>
<y>40</y>
<width>151</width>
<height>20</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>9</pointsize>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
<string>Compatibility Check</string>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_14">
<property name="geometry">
<rect>
<x>10</x>
<y>170</y>
<width>801</width>
<height>81</height>
</rect>
</property>
<property name="title">
<string>MPS</string>
</property>
<widget class="QWidget" name="verticalLayoutWidget_20">
<property name="geometry">
<rect>
<x>0</x>
<x>100</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3389,7 +3377,7 @@
<widget class="QWidget" name="verticalLayoutWidget_24">
<property name="geometry">
<rect>
<x>100</x>
<x>200</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3474,7 +3462,7 @@
<widget class="QWidget" name="verticalLayoutWidget_27">
<property name="geometry">
<rect>
<x>200</x>
<x>300</x>
<y>20</y>
<width>151</width>
<height>61</height>
@ -3559,7 +3547,7 @@
<widget class="QWidget" name="verticalLayoutWidget_30">
<property name="geometry">
<rect>
<x>360</x>
<x>460</x>
<y>20</y>
<width>131</width>
<height>61</height>
@ -3644,7 +3632,7 @@
<widget class="QWidget" name="verticalLayoutWidget_33">
<property name="geometry">
<rect>
<x>500</x>
<x>600</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3729,7 +3717,7 @@
<widget class="QWidget" name="verticalLayoutWidget_34">
<property name="geometry">
<rect>
<x>600</x>
<x>700</x>
<y>20</y>
<width>95</width>
<height>61</height>
@ -3811,6 +3799,42 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_38">
<property name="geometry">
<rect>
<x>0</x>
<y>20</y>
<width>97</width>
<height>61</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QCheckBox" name="chk_writeHeaderMpsRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Write Header</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chk_clearMpsRom">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Clear All</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
<widget class="QWidget" name="tab">

266
src/model/hardware/core/lowLevelApi/TrxBoard.cpp

@ -319,6 +319,72 @@ void TrxBoard::setFpgaOffset()
_fpgaOffset << 0x100000 << 0x200000 << 0x300000;
}
QList<quint32> TrxBoard::systemStructure2List(systemE2proms &systemRoms)
{
QList<quint32> dataset;
dataset.append(systemRoms.trx.id);
dataset.append(systemRoms.prbCtrl.id);
dataset.append(systemRoms.mps.id);
dataset.append(systemRoms.trx.pid);
dataset.append(systemRoms.prbCtrl.pid);
dataset.append(systemRoms.mps.pid);
dataset.append(systemRoms.trx.pcbVersion);
dataset.append(systemRoms.prbCtrl.pcbVersion);
dataset.append(systemRoms.mps.pcbVersion);
dataset.append(systemRoms.trx.firstMbedCodeVersion);
dataset.append(systemRoms.mps.firstMbedCodeVersion);
dataset.append(systemRoms.trx.secondMbedCodeVersion);
dataset.append(systemRoms.mps.secondMbedCodeVersion);
return dataset;
}
void TrxBoard::systemLutCompletion()
{
_systemLut.clear();
systemE2proms systemRoms;
systemRoms.trx.id = trxId;
systemRoms.prbCtrl.id = prbCtrlId;
systemRoms.mps.id = mpsId;
systemRoms.trx.pid = pid;
systemRoms.prbCtrl.pid = pid;
systemRoms.mps.pid = pid;
systemRoms.trx.pcbVersion = 1;
systemRoms.prbCtrl.pcbVersion = 1;
systemRoms.mps.pcbVersion = 1;
systemRoms.trx.firstMbedCodeVersion = 1;
systemRoms.mps.firstMbedCodeVersion = 1;
systemRoms.trx.secondMbedCodeVersion = 1;
systemRoms.mps.secondMbedCodeVersion = 1;
_systemLut.append(systemStructure2List(systemRoms));
systemRoms.trx.pcbVersion = 2;
systemRoms.prbCtrl.pcbVersion = 2;
systemRoms.mps.pcbVersion = 2;
systemRoms.trx.firstMbedCodeVersion = 1;
systemRoms.mps.firstMbedCodeVersion = 1;
systemRoms.trx.secondMbedCodeVersion = 1;
systemRoms.mps.secondMbedCodeVersion = 1;
_systemLut.append(systemStructure2List(systemRoms));
systemRoms.trx.pcbVersion = 2;
systemRoms.prbCtrl.pcbVersion = 2;
systemRoms.mps.pcbVersion = 2;
systemRoms.trx.firstMbedCodeVersion = 1;
systemRoms.mps.firstMbedCodeVersion = 1;
systemRoms.trx.secondMbedCodeVersion = 2;
systemRoms.mps.secondMbedCodeVersion = 1;
_systemLut.append(systemStructure2List(systemRoms));
}
//QList<quint32> TrxBoard::signedVector2unsignedList (QVector<qint32>& sgnVec)
//{
//_unsignedQntzrList.clear();
@ -368,6 +434,7 @@ TrxBoard::TrxBoard() : _offsetSlave0(0), _offsetSlave1(0x400000), _offsetSlave2(
setRomCrc();
setFpgaOffset();
setAfeModuleOffset();
systemLutCompletion();
}
TrxBoard::ScenHwRegister::ScenHwRegister()
@ -1646,39 +1713,137 @@ quint32 TrxBoard::vendorId() const
return vid;
}
void TrxBoard::systemCompare(QList<quint32> &system) const
{
foreach(auto &lut, _systemLut)
{
if(lut == system)
{
return;
}
}
throw SonoException("The system parameters are not compatible.");
}
void TrxBoard::checkSystemCompatibility()
{
EepromStatus trxE2prom, prbCtrlE2prom, mpsE2prom;
this->trxState(trxE2prom);
this->prbCtrlState(prbCtrlE2prom);
this->mpsState(mpsE2prom);
systemE2proms currentSystemRoms;
currentSystemRoms.trx = trxE2prom;
currentSystemRoms.prbCtrl = prbCtrlE2prom;
currentSystemRoms.mps = mpsE2prom;
QList<quint32> currentSystem = systemStructure2List(currentSystemRoms);
systemCompare(currentSystem);
}
quint8 TrxBoard::crcGenerator(QByteArray inputByteArray) const
{
quint8 arrayLength = static_cast<quint8>(inputByteArray.length());
quint8 *input = new quint8[arrayLength];
memcpy(input, inputByteArray, arrayLength);
quint8 crcInitialValue(0x00);
int i;
while(arrayLength--)
{
crcInitialValue = crcInitialValue ^ *input++; // Apply Byte
for(i=0; i<8; i++) // Eight rounds of 1-bit
{
if (crcInitialValue & 0x80)
crcInitialValue = static_cast<quint8>((crcInitialValue << 1) ^ CRC_POLYNOMIAL);
else
crcInitialValue = static_cast<quint8>(crcInitialValue << 1); // Left Shifting
}
}
return(crcInitialValue);
}
void TrxBoard::crcCheck(const QByteArray array, quint8 crcRom) const
{
quint8 crcGen = crcGenerator(array);
if(crcGen != crcRom)
{
throw SonoException("CRC check error is happend.");
}
}
void TrxBoard::trxCrcCheck(const QByteArray array, quint32 offset) const
{
quint8 crcRom = static_cast<quint8>((this->_bCtrlMngt->trxEepromRead(offset, CRC8_BYTE_NUMBER)).at(0));
crcCheck(array, crcRom);
}
void TrxBoard::prbCtrlCrcCheck(const QByteArray array, quint32 offset) const
{
quint8 crcRom = static_cast<quint8>((this->_bCtrlMngt->prbCtrlEepromRead(offset, CRC8_BYTE_NUMBER)).at(0));
crcCheck(array, crcRom);
}
void TrxBoard::mpsCrcCheck(const QByteArray array, quint32 offset) const
{
quint8 crcRom = static_cast<quint8>((this->_bCtrlMngt->mpsEepromRead(offset, CRC8_BYTE_NUMBER)).at(0));
crcCheck(array, crcRom);
}
QByteArray TrxBoard::trxRomHeader() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
QByteArray header = (this->_bCtrlMngt->trxEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
if(headerArray != header)
{
throw SonoException("The header checksum of the TRX e2prom is corrupted.");
}
return header;
}
QByteArray TrxBoard::trxRomId() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
QByteArray id = (this->_bCtrlMngt->trxEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
trxCrcCheck(id, EEPROM_ID_CRC);
return id;
}
QByteArray TrxBoard::trxRomPid() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
QByteArray pid = (this->_bCtrlMngt->trxEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
trxCrcCheck(pid, EEPROM_PID_CRC);
return pid;
}
QByteArray TrxBoard::trxRomPcbVersion() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
QByteArray pcb = (this->_bCtrlMngt->trxEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
trxCrcCheck(pcb, EEPROM_PCB_VERSION_CRC);
return pcb;
}
QByteArray TrxBoard::trxRomSerialNo() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
QByteArray serial = (this->_bCtrlMngt->trxEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
trxCrcCheck(serial, EEPROM_BOARD_SERIAL_NO_CRC);
return serial;
}
QByteArray TrxBoard::trxRomFirstMbedCode() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, EEPROM_FIRST_MBED_CODE_VERSION_NUMBER));
QByteArray mbed1 = (this->_bCtrlMngt->trxEepromRead(EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, EEPROM_FIRST_MBED_CODE_VERSION_NUMBER));
trxCrcCheck(mbed1, EEPROM_FIRST_MBED_CODE_VERSION_CRC);
return mbed1;
}
QByteArray TrxBoard::trxRomSecondMbedCode() const
{
return(this->_bCtrlMngt->trxEepromRead(EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, EEPROM_SECOND_MBED_CODE_VERSION_NUMBER));
QByteArray mbed2 = (this->_bCtrlMngt->trxEepromRead(EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, EEPROM_SECOND_MBED_CODE_VERSION_NUMBER));
trxCrcCheck(mbed2, EEPROM_SECOND_MBED_CODE_VERSION_CRC);
return mbed2;
}
void TrxBoard::trxState(EepromStatus& romStatus) const
@ -1690,7 +1855,6 @@ void TrxBoard::trxState(EepromStatus& romStatus) const
QByteArray serialNo;
QByteArray firstMbedCode;
QByteArray secondMbedCode;
QByteArray crc16;
romStatus.ConnectionMode = connected;
romStatus.errorCode = EEPROM_NO_ERROR;
@ -1715,51 +1879,58 @@ void TrxBoard::trxState(EepromStatus& romStatus) const
secondMbedCode = trxRomSecondMbedCode();
romStatus.secondMbedCodeVersion = byteArray2UintBigEndian<quint32>(secondMbedCode);
// crcChk = this->_bCtrlMngt->trxEepromRead(EEPROM_CRC_BEGIN, EEPROM_CRC_NUMBER);
// if(crcChk == _eepromCrc)
// {
// romStatus.errorCode = EEPROM_NO_ERROR;
// }
// else
// {
// romStatus.errorCode = EEPROM_CRC_ERROR;
// }
}
QByteArray TrxBoard::mpsRomHeader() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
QByteArray header = (this->_bCtrlMngt->mpsEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
if(headerArray != header)
{
throw SonoException("The header checksum of the MPS e2prom is corrupted.");
}
return header;
}
QByteArray TrxBoard::mpsRomId() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
QByteArray id = (this->_bCtrlMngt->mpsEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
mpsCrcCheck(id, EEPROM_ID_CRC);
return id;
}
QByteArray TrxBoard::mpsRomPid() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
QByteArray pid = (this->_bCtrlMngt->mpsEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
mpsCrcCheck(pid, EEPROM_PID_CRC);
return pid;
}
QByteArray TrxBoard::mpsRomPcbVersion() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
QByteArray pcb = (this->_bCtrlMngt->mpsEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
mpsCrcCheck(pcb, EEPROM_PCB_VERSION_CRC);
return pcb;
}
QByteArray TrxBoard::mpsRomSerialNo() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
QByteArray serial = (this->_bCtrlMngt->mpsEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
mpsCrcCheck(serial, EEPROM_BOARD_SERIAL_NO_CRC);
return serial;
}
QByteArray TrxBoard::mpsRomFirstMbedCode() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, EEPROM_FIRST_MBED_CODE_VERSION_NUMBER));
QByteArray mbed1 = (this->_bCtrlMngt->mpsEepromRead(EEPROM_FIRST_MBED_CODE_VERSION_BEGIN, EEPROM_FIRST_MBED_CODE_VERSION_NUMBER));
mpsCrcCheck(mbed1, EEPROM_FIRST_MBED_CODE_VERSION_CRC);
return mbed1;
}
QByteArray TrxBoard::mpsRomSecondMbedCode() const
{
return(this->_bCtrlMngt->mpsEepromRead(EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, EEPROM_SECOND_MBED_CODE_VERSION_NUMBER));
QByteArray mbed2 = (this->_bCtrlMngt->mpsEepromRead(EEPROM_SECOND_MBED_CODE_VERSION_BEGIN, EEPROM_SECOND_MBED_CODE_VERSION_NUMBER));
mpsCrcCheck(mbed2, EEPROM_SECOND_MBED_CODE_VERSION_CRC);
return mbed2;
}
void TrxBoard::mpsState(EepromStatus& romStatus) const
@ -1771,7 +1942,6 @@ void TrxBoard::mpsState(EepromStatus& romStatus) const
QByteArray serialNo;
QByteArray firstMbedCode;
QByteArray secondMbedCode;
QByteArray crc16;
romStatus.ConnectionMode = connected;
romStatus.errorCode = EEPROM_NO_ERROR;
@ -1796,41 +1966,44 @@ void TrxBoard::mpsState(EepromStatus& romStatus) const
secondMbedCode = mpsRomSecondMbedCode();
romStatus.secondMbedCodeVersion = byteArray2UintBigEndian<quint32>(secondMbedCode);
// crcChk = this->_bCtrlMngt->mpsEepromRead(EEPROM_CRC_BEGIN, EEPROM_CRC_NUMBER);
// if(crcChk == _eepromCrc)
// {
// romStatus.errorCode = EEPROM_NO_ERROR;
// }
// else
// {
// romStatus.errorCode = EEPROM_CRC_ERROR;
// }
}
QByteArray TrxBoard::prbCtrlRomHeader() const
{
return(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
QByteArray header = (this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_HEADER_BEGIN, EEPROM_HEADER_NUMBER));
if(headerArray != header)
{
throw SonoException("The header checksum of the relay e2prom is corrupted.");
}
return header;
}
QByteArray TrxBoard::prbCtrlRomId() const
{
return(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
QByteArray id = (this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_ID_BEGIN, EEPROM_ID_NUMBER));
prbCtrlCrcCheck(id, EEPROM_ID_CRC);
return id;
}
QByteArray TrxBoard::prbCtrlRomPid() const
{
return(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
QByteArray pid = (this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_PID_BEGIN, EEPROM_PID_NUMBER));
prbCtrlCrcCheck(pid, EEPROM_PID_CRC);
return pid;
}
QByteArray TrxBoard::prbCtrlRomPcbVersion() const
{
return(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
QByteArray pcb = (this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_PCB_VERSION_BEGIN, EEPROM_PCB_VERSION_NUMBER));
prbCtrlCrcCheck(pcb, EEPROM_PCB_VERSION_CRC);
return pcb;
}
QByteArray TrxBoard::prbCtrlRomSerialNo() const
{
return(this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
QByteArray serial = (this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_BOARD_SERIAL_NO_BEGIN, EEPROM_BOARD_SERIAL_NO_NUMBER));
prbCtrlCrcCheck(serial, EEPROM_BOARD_SERIAL_NO_CRC);
return serial;
}
void TrxBoard::prbCtrlState(EepromStatus& romStatus) const
@ -1842,7 +2015,6 @@ void TrxBoard::prbCtrlState(EepromStatus& romStatus) const
QByteArray serialNo;
QByteArray firstMbedCode;
QByteArray secondMbedCode;
QByteArray crc16;
romStatus.ConnectionMode = connected;
romStatus.errorCode = EEPROM_NO_ERROR;
@ -1861,16 +2033,6 @@ void TrxBoard::prbCtrlState(EepromStatus& romStatus) const
serialNo = prbCtrlRomSerialNo();
romStatus.boardSerialNumber = byteArray2UintBigEndian<quint32>(serialNo);
// crcChk = this->_bCtrlMngt->prbCtrlEepromRead(EEPROM_CRC_BEGIN, EEPROM_CRC_NUMBER);
// if(crcChk == _eepromCrc)
// {
// romStatus.errorCode = EEPROM_NO_ERROR;
// }
// else
// {
// romStatus.errorCode = EEPROM_CRC_ERROR;
// }
}
void TrxBoard::selectedPrbState(EepromStatus& romStatus, eSelectProbe prbSel) const

Loading…
Cancel
Save