• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

gui/adcwidget.cpp (r4864/r927)

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 

Generated on Tue Dec 10 2013 04:52:22 for ROCsoft by  doxygen 1.7.1