00001 #include "rocfeetwidget.h"
00002
00003 #include "feet/defines_feet.h"
00004 #include <unistd.h>
00005
00006
00007 RocFeetWidget::RocFeetWidget(QWidget* parent, roc::Board* brd) :
00008 SubWidget(parent),
00009 fBoard(brd)
00010 {
00011 setupUi(this);
00012
00013 QObject::connect(FallingEdgeEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00014 QObject::connect(Epoch250EnCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setEpoch250En()));
00015 QObject::connect(SupressEpochsEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00016 QObject::connect(ReceiveMaskEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00017 QObject::connect(ResetFifoButton, SIGNAL(clicked()), this, SLOT(resetFifo()));
00018
00019 QObject::connect(DatagenMaskEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00020 QObject::connect(DatagenInitEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00021 QObject::connect(DatagenEnablePushButton, SIGNAL(clicked()), this, SLOT(enableDatagen()));
00022
00023 QObject::connect(TransmitMaskEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setSubChangedOn()));
00024 QObject::connect(InitFeetButton, SIGNAL(clicked()), this, SLOT(initFeet()));
00025 QObject::connect(CmdToFeetButton, SIGNAL(clicked()), this, SLOT(sendCmdToFeet()));
00026
00027 QObject::connect(ResetFrontendButton, SIGNAL(clicked()), this, SLOT(resetFrontend()));
00028
00029 getSubConfig();
00030 }
00031
00032 bool RocFeetWidget::getSubConfig()
00033 {
00034 base::OperList lst;
00035
00036 lst.addGet(ROC_FEET_HWV);
00037 lst.addGet(ROC_FEET_RECEIVE_MASK);
00038 lst.addGet(ROC_FEET_TRANSMIT_MASK);
00039 lst.addGet(ROC_FEET_SAMPLE_FALLING_EDGE);
00040 lst.addGet(ROC_FEET_RADTOL);
00041 lst.addGet(ROC_FEET_NR_OF_FEETS);
00042 lst.addGet(ROC_FEET_SUPRESS_EPOCHS);
00043 lst.addGet(ROC_FEET_DATAGEN_MASK);
00044 lst.addGet(ROC_FEET_DATAGEN_INIT);
00045 lst.addGet(ROC_FEET_EPOCH250_EN);
00046
00047 fBoard->operGen(lst);
00048
00049 fHwVers = lst.oper(0).value;
00050 VersionLbl->setText(QString("FEET version: %1").arg(roc::Board::versionToString(fHwVers), 0, 16));
00051
00052 NrOfFeetsLbl->setText(QString("Number of FEETs: %1").arg(lst.oper(5).value, 0, 16));
00053
00054 fRadTol = (lst.oper(4).value==1);
00055
00056 SupressEpochsEdit->setText(QString("%1").arg(lst.oper(6).value, 0, 16));
00057
00058 ReceiveMaskEdit->setText(QString("%1").arg(lst.oper(1).value, 0, 16));
00059
00060 TransmitMaskEdit->setText(QString("%1").arg(lst.oper(2).value, 0, 16));
00061
00062 DatagenMaskEdit->setText(QString("%1").arg(lst.oper(7).value, 0, 16));
00063
00064 DatagenInitEdit->setText(QString("%1").arg(lst.oper(8).value, 0, 16));
00065
00066 FallingEdgeEdit->setText(QString("%1").arg(lst.oper(3).value, 0, 16));
00067
00068 Epoch250EnCheckBox->setChecked(lst.oper(9).value==1);
00069
00070 if (fRadTol){
00071 RadTolLbl->setText(QString("Radiation mitigated: Yes"));
00072 Epoch250EnCheckBox->setChecked(false);
00073 Epoch250EnCheckBox->setEnabled(false);
00074 DatagenMaskLabel->setEnabled(false);
00075 DatagenInitLabel->setEnabled(false);
00076 DatagenMaskEdit->setEnabled(false);
00077 DatagenInitEdit->setEnabled(false);
00078 DatagenEnablePushButton->setEnabled(false);
00079 groupBox_2->setEnabled(false);
00080 } else {
00081 RadTolLbl->setText(QString("Radiation mitigated: No"));
00082 }
00083
00084 return true;
00085
00086 }
00087
00088 bool RocFeetWidget::setSubConfig()
00089 {
00090 base::OperList lst;
00091
00092 uint32_t value;
00093 bool ok(false);
00094
00095 value = ReceiveMaskEdit->text().toUInt(&ok, 16);
00096 if (!ok) return false;
00097 lst.addPut(ROC_FEET_RECEIVE_MASK, value);
00098
00099 value = TransmitMaskEdit->text().toUInt(&ok, 16);
00100 if (!ok) return false;
00101 lst.addPut(ROC_FEET_TRANSMIT_MASK, value);
00102
00103 value = FallingEdgeEdit->text().toUInt(&ok, 16);
00104 if (!ok) return false;
00105 lst.addPut(ROC_FEET_SAMPLE_FALLING_EDGE, value);
00106
00107 value = SupressEpochsEdit->text().toUInt(&ok, 16);
00108 if (!ok) return false;
00109 lst.addPut(ROC_FEET_SUPRESS_EPOCHS, value);
00110
00111 value = DatagenMaskEdit->text().toUInt(&ok, 16);
00112 if (!ok) return false;
00113 if(!fRadTol) lst.addPut(ROC_FEET_DATAGEN_MASK, value);
00114
00115 value = DatagenInitEdit->text().toUInt(&ok, 16);
00116 if (!ok) return false;
00117 if(!fRadTol) lst.addPut(ROC_FEET_DATAGEN_INIT, value);
00118
00119
00120 fBoard->operGen(lst);
00121
00122 return true;
00123 }
00124
00125 bool RocFeetWidget::setSubToDefault()
00126 {
00127 SupressEpochsEdit->setText("0");
00128 ReceiveMaskEdit->setText("0");
00129 TransmitMaskEdit->setText("ffffffff");
00130 DatagenMaskEdit->setText("ffffffff");
00131 DatagenInitEdit->setText("e555555f");
00132 FallingEdgeEdit->setText("0");
00133 Epoch250EnCheckBox->setChecked(!fRadTol);
00134
00135 setSubChangedOn();
00136
00137 return true;
00138 }
00139
00140 bool RocFeetWidget::fillCmdFile(FILE* f)
00141 {
00142 fprintf(f, "\n// ROC-FEET relevant settings\n");
00143
00144 return true;
00145 }
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 void RocFeetWidget::setEpoch250En()
00156 {
00157 if(!fRadTol)
00158 if(Epoch250EnCheckBox->isChecked())
00159 fBoard->put(ROC_FEET_EPOCH250_EN,1);
00160 else
00161 fBoard->put(ROC_FEET_EPOCH250_EN,0);
00162 }
00163
00164 void RocFeetWidget::initFeet()
00165 {
00166 fBoard->put(ROC_FEET_CMD_TO_FEET, 0);
00167
00168 usleep(10000);
00169
00170 fBoard->put(ROC_FEET_CMD_TO_FEET, 0x10);
00171 }
00172
00173 void RocFeetWidget::resetFifo()
00174 {
00175 fBoard->operPP(ROC_FEET_FIFO_RESET, 1,
00176 ROC_FEET_FIFO_RESET, 0);
00177 }
00178
00179 void RocFeetWidget::resetFrontend()
00180 {
00181 fBoard->put(ROC_FEET_RESET, 0);
00182 }
00183
00184 void RocFeetWidget::enableDatagen()
00185 {
00186
00187 if (DatagenEnablePushButton->isChecked()) {
00188 fBoard->put(ROC_FEET_DATAGEN_EN, 1);
00189 DatagenMaskEdit->setEnabled(false);
00190 DatagenInitEdit->setEnabled(false);
00191 } else {
00192 fBoard->put(ROC_FEET_DATAGEN_EN, 0);
00193 DatagenMaskEdit->setEnabled(true);
00194 DatagenInitEdit->setEnabled(true);
00195 }
00196 }
00197
00198 void RocFeetWidget::sendCmdToFeet()
00199 {
00200 uint32_t value;
00201 bool ok(false);
00202
00203 value = CmdToFeetEdit->text().toUInt(&ok, 16);
00204 if (!ok) return;
00205 fBoard->put(ROC_FEET_CMD_TO_FEET, value);
00206 }
00207
00208