Go to the documentation of this file.00001 #include "adcwidget.h"
00002
00003 #include <QLabel>
00004 #include <QGridLayout>
00005 #include <QSignalMapper>
00006 #include <QInputDialog>
00007
00008 AdcWidget::AdcWidget(QWidget* parent, nxyter::MainAdc* adc) :
00009 SubWidget(parent),
00010 fAdc(adc)
00011 {
00012 setupUi(this);
00013
00014 fClockDelay = 0xffff;
00015
00016 QGridLayout* grid = new QGridLayout(RegsGroup);
00017 grid->setMargin(3);
00018 grid->setSpacing(3);
00019
00020 QSignalMapper* map = new QSignalMapper(this);
00021
00022 int nrow = 0;
00023
00024 for (int n=0;n<NumRegs;n++) {
00025 fRegSpins[n] = 0;
00026 const char* regname = nxyter::MainAdc::registerName(n);
00027 if ((regname==0) || (regname[0] == 0)) continue;
00028
00029 grid->addWidget(new QLabel(QString("#%1: %2").arg(n).arg(regname), this), nrow, 0);
00030
00031 fRegSpins[n] = new QSpinBox(this);
00032 fRegSpins[n]->setMinimum(0);
00033 fRegSpins[n]->setMaximum(255);
00034 fRegSpins[n]->setMinimumWidth(70);
00035 QObject::connect(fRegSpins[n], SIGNAL(valueChanged(int)), map, SLOT(map()));
00036 map->setMapping(fRegSpins[n], n);
00037
00038 grid->addWidget(fRegSpins[n], nrow, 1);
00039
00040 nrow++;
00041 }
00042
00043 QObject::connect(map, SIGNAL(mapped(int)), this, SLOT(regChanged(int)));
00044
00045 QObject::connect(setClockDelayButton, SIGNAL(clicked()), this, SLOT(setClockDelay()));
00046
00047
00048 getSubConfig();
00049 }
00050
00051 bool AdcWidget::getSubConfig()
00052 {
00053 for (int n=0;n<NumRegs;n++) {
00054 if (fRegSpins[n] == 0) continue;
00055 uint8_t value = 0;
00056 fAdc->getRegister(n, value);
00057 fRegSpins[n]->setValue(value);
00058 }
00059
00060 getOnlyDelayRegs();
00061
00062 return true;
00063 }
00064
00065 bool AdcWidget::setSubConfig()
00066 {
00067 for (int n=0;n<NumRegs;n++) {
00068 if (fRegSpins[n] == 0) continue;
00069 uint8_t value = fRegSpins[n]->value();
00070 fAdc->setRegister(n, value);
00071 }
00072
00073 return true;
00074 }
00075
00076 void AdcWidget::getOnlyDelayRegs()
00077 {
00078 uint32_t sr_init(0);
00079 fAdc->getClockDelaySrInit(sr_init);
00080 SrInitLbl->setText(QString("SR_INT : %1").arg(sr_init));
00081
00082 uint32_t bufg_select(0);
00083 fAdc->getClockDelayBufg(bufg_select);
00084 BufgLbl->setText(QString("BUFF_SELECT : %1").arg(bufg_select));
00085
00086 displayClockDelay(sr_init, bufg_select);
00087 }
00088
00089 void AdcWidget::displayClockDelay(uint32_t sr_init, uint32_t bufg_select)
00090 {
00091 fClockDelay = nxyter::MainAdc::findClockDelay(sr_init, bufg_select);
00092
00093 if (fClockDelay<32)
00094 clockDelayLabel->setText(QString("Clock delay : %1").arg(fClockDelay));
00095 else
00096 clockDelayLabel->setText(QString("Clock delay : undefined"));
00097 }
00098
00099 bool AdcWidget::setSubToDefault()
00100 {
00101 fAdc->setToDefault();
00102
00103 fAdc->setClockDelay(15);
00104
00105 return getSubConfig();
00106 }
00107
00108 bool AdcWidget::fillCmdFile(FILE* f)
00109 {
00110 fprintf(f, "\n// ADC relevant settings\n");
00111
00112 for (int n=0;n<NumRegs;n++) {
00113 if (fRegSpins[n] == 0) continue;
00114 fprintf(f, "setadc %d,%d\n", n, fRegSpins[n]->value());
00115 }
00116
00117 if (fClockDelay<32)
00118 fprintf(f,"setadcclock %u\n", fClockDelay);
00119 else
00120 fprintf(f,"// setadcclock ???\n");
00121
00122 return true;
00123 }
00124
00125
00126 void AdcWidget::regChanged(int nreg)
00127 {
00128 int value = fRegSpins[nreg]->value();
00129
00130 fAdc->setRegister(nreg, value, true);
00131 }
00132
00133 void AdcWidget::setClockDelay()
00134 {
00135 bool ok = false;
00136 int delay = QInputDialog::getInteger(this, "Input ADC clock delay", "Value", 10, 0, 31, 1, &ok);
00137
00138 if (!ok) return;
00139
00140 if (fAdc->setClockDelay(delay)==0) getOnlyDelayRegs();
00141 }
00142