Go to the documentation of this file.00001 #include "febwidget.h"
00002
00003 #include <QGridLayout>
00004 #include <QSignalMapper>
00005 #include <QCheckBox>
00006 #include <QTimer>
00007
00008 #include "roctabswidget.h"
00009 #include "nxyterwidget.h"
00010 #include "adcwidget.h"
00011
00012 #include "nxyter/RocNx.h"
00013
00014 FebWidget::FebWidget(QWidget* parent, nxyter::FebBase* feb) :
00015 SubWidget(parent),
00016 fFeb(feb)
00017 {
00018 setupUi(this);
00019
00020 QObject::connect(CloseButton, SIGNAL(clicked()), this, SLOT(pressClose()));
00021
00022 KindLbl->setText(QString("Feb type: %1").arg(fFeb->getFebType()));
00023 NumNxLbl->setText(QString("Num nXYTER: %1").arg(fFeb->numNx()));
00024
00025 QSignalMapper* map = new QSignalMapper(this);
00026
00027 QGridLayout* grid = new QGridLayout(EnableNxGroup);
00028 grid->setMargin(3);
00029 grid->setSpacing(3);
00030
00031 for (int nx=0;nx<fFeb->numNx();nx++) {
00032 QCheckBox* chk = new QCheckBox(this);
00033 chk->setText(QString("Enable NX%1").arg(nx));
00034 grid->addWidget(chk, 0, nx);
00035 fNxEnableChk.push_back(chk);
00036
00037 QObject::connect(chk, SIGNAL(clicked(bool)), map, SLOT(map()));
00038 map->setMapping(chk, nx);
00039 }
00040
00041 EnableNxGroup->adjustSize();
00042
00043 displayMonAdcs();
00044
00045 QObject::connect(map, SIGNAL(mapped(int)), this, SLOT(enableNxClicked(int)));
00046 QObject::connect(MonAdcChk, SIGNAL(clicked(bool)), this, SLOT(displayMonAdcs()));
00047 }
00048
00049 FebWidget::~FebWidget()
00050 {
00051 delete fFeb;
00052 }
00053
00054 void FebWidget::createTabs(RocTabsWidget* tabs)
00055 {
00056 for (int nx=0;nx<fFeb->numNx();nx++) {
00057 NxyterWidget* nxw = new NxyterWidget(tabs, &(fFeb->nx(nx)));
00058 tabs->addTab(nxw, QString("NX%1").arg(nx));
00059 fChilds.push_back(nxw);
00060 }
00061
00062 AdcWidget* adcw = new AdcWidget(tabs, &(fFeb->adc()));
00063 tabs->addTab(adcw, "ADC");
00064 fChilds.push_back(adcw);
00065
00066 getSubConfig();
00067 }
00068
00069 void FebWidget::pressClose()
00070 {
00071 for (unsigned n=0;n<fChilds.size();n++)
00072 delete fChilds[n];
00073 fChilds.clear();
00074
00075 deleteLater();
00076 }
00077
00078 bool FebWidget::getSubConfig()
00079 {
00080 fFeb->getFebState();
00081
00082 for (int nx=0;nx<fFeb->numNx();nx++) {
00083 bool on = !fFeb->getNxOffline(nx);
00084 fNxEnableChk[nx]->setCheckState(on ? Qt::Checked : Qt::Unchecked);
00085 }
00086
00087 return true;
00088 }
00089
00090 bool FebWidget::setSubConfig()
00091 {
00092 fFeb->initRoc();
00093
00094 return true;
00095 }
00096
00097 bool FebWidget::fillCmdFile(FILE* f)
00098 {
00099 fprintf(f, "\n// FEB relevant settings\n");
00100
00101 fprintf(f, "feb %d,%s\n", fFeb->getPortNumber(), nxyter::FebBase::typeToString(fFeb->getFebType()));
00102
00103 for (int nx=0;nx<fFeb->numNx();nx++)
00104 fprintf(f, "setnxoff %d,%d\n", nx, fFeb->getNxOffline(nx));
00105
00106 fprintf(f, "initfeb\n");
00107
00108 return true;
00109 }
00110
00111
00112 void FebWidget::enableNxClicked(int nx)
00113 {
00114 bool on = fNxEnableChk[nx]->checkState() == Qt::Checked;
00115 fFeb->setNxOffline(nx, !on);
00116
00117 setSubChanged(true);
00118 }
00119
00120 void FebWidget::displayMonAdcs()
00121 {
00122 if (!fFeb->monAdcSupport()) {
00123 MonAdcBox->setVisible(false);
00124 return;
00125 }
00126
00127 if (MonAdcTable->rowCount() != fFeb->getNumMonAdc()) {
00128 while (MonAdcTable->rowCount()>0) MonAdcTable->removeRow(0);
00129 for (int n=0;n<fFeb->getNumMonAdc();n++) {
00130 MonAdcTable->insertRow(n);
00131 MonAdcTable->setItem(n, 0, new QTableWidgetItem(QString("#%1").arg(n)));
00132 MonAdcTable->setItem(n, 1, new QTableWidgetItem(QString("---")));
00133 }
00134 }
00135
00136 if (MonAdcChk->isChecked()) {
00137
00138 for (int n=0;n<fFeb->getNumMonAdc();n++) {
00139 uint16_t val(0);
00140 QString str("err");
00141
00142 if (fFeb->getMonAdc(n, val)==0)
00143 str = QString("%1").arg(val);
00144
00145 MonAdcTable->item(n,1)->setText(str);
00146 }
00147
00148 QTimer::singleShot(1000, this, SLOT(displayMonAdcs()));
00149 }
00150 }
00151