diff --git a/digiSettings.cpp b/digiSettings.cpp index 1055725..7d47033 100644 --- a/digiSettings.cpp +++ b/digiSettings.cpp @@ -2,7 +2,7 @@ #include -DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * parent) : QWidget(parent){ +DigiSettings::DigiSettings(Digitizer2Gen ** digi, unsigned short nDigi, QWidget * parent) : QWidget(parent){ qDebug() << "DigiSettings constructor"; @@ -39,7 +39,7 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * scrollArea->setWidgetResizable(true); scrollArea->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - tabWidget->addTab(scrollArea, "Digi-" + QString::number(digi->GetSerialNumber())); + tabWidget->addTab(scrollArea, "Digi-" + QString::number(digi[iDigi]->GetSerialNumber())); QGridLayout *tabLayout = new QGridLayout(tab); tab->setLayout(tabLayout); @@ -54,7 +54,7 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * lab->setAlignment(Qt::AlignRight); QLineEdit * txt = new QLineEdit(tab); txt->setReadOnly(true); - txt->setText(QString::fromStdString(digi->ReadValue(info[j][1].c_str()))); + txt->setText(QString::fromStdString(digi[iDigi]->ReadValue(info[j][1].c_str()))); infoLayout->addWidget(lab, j%nRow, 2*(j/nRow)); infoLayout->addWidget(txt, j%nRow, 2*(j/nRow) +1); } @@ -301,7 +301,7 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * allLayout->setHorizontalSpacing(0); allLayout->setVerticalSpacing(0); - unsigned short ch = digi->GetNChannels(); + unsigned short ch = digi[iDigi]->GetNChannels(); cbCh[iDigi][ch] = new QCheckBox("On/Off", tab); allLayout->addWidget(cbCh[iDigi][ch], 0, 0); onOffMapper->setMapping(cbCh[iDigi][ch], (iDigi << 12) + ch); @@ -327,7 +327,7 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * allLayout->setVerticalSpacing(0); - for( int ch = 0; ch < digi->GetNChannels(); ch++){ + for( int ch = 0; ch < digi[iDigi]->GetNChannels(); ch++){ cbCh[iDigi][ch] = new QCheckBox(QString::number(ch)); allLayout->addWidget(cbCh[iDigi][ch], ch/8, ch%8); cbCh[iDigi][ch]->setLayoutDirection(Qt::RightToLeft); @@ -605,9 +605,9 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * int rowID = 1; int colID = 0; - for(int i = 0; i < digi->GetNChannels(); i++){ + for(int i = 0; i < digi[iDigi]->GetNChannels(); i++){ colID = 0; - for(int j = 0; j < digi->GetNChannels(); j++){ + for(int j = 0; j < digi[iDigi]->GetNChannels(); j++){ bn[i][j] = new QPushButton(tab); bn[i][j]->setFixedSize(QSize(10,10)); @@ -624,7 +624,7 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * colID ++; - if( j%4 == 3 && j!= digi->GetNChannels() - 1){ + if( j%4 == 3 && j!= digi[iDigi]->GetNChannels() - 1){ QFrame * vSeparator = new QFrame(tab); vSeparator->setFrameShape(QFrame::VLine); triggerLayout->addWidget(vSeparator, rowID, colID); @@ -634,10 +634,10 @@ DigiSettings::DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * rowID++; - if( i%4 == 3 && i != digi->GetNChannels() - 1){ + if( i%4 == 3 && i != digi[iDigi]->GetNChannels() - 1){ QFrame * hSeparator = new QFrame(tab); hSeparator->setFrameShape(QFrame::HLine); - triggerLayout->addWidget(hSeparator, rowID, 0, 1, digi->GetNChannels() + 15); + triggerLayout->addWidget(hSeparator, rowID, 0, 1, digi[iDigi]->GetNChannels() + 15); rowID++; } diff --git a/digiSettings.h b/digiSettings.h index 8af28c7..1435159 100644 --- a/digiSettings.h +++ b/digiSettings.h @@ -25,18 +25,18 @@ class DigiSettings : public QWidget{ Q_OBJECT public: - DigiSettings(Digitizer2Gen * digi, unsigned short nDigi, QWidget * parent = nullptr); + DigiSettings(Digitizer2Gen ** digi, unsigned short nDigi, QWidget * parent = nullptr); ~DigiSettings(); private slots: - void onReset(){ - emit sendLogMsg("Reset Digitizer-" + QString::number(digi->GetSerialNumber())); - digi->Reset(); + void onReset(int id){ + emit sendLogMsg("Reset Digitizer-" + QString::number(digi[id]->GetSerialNumber())); + digi[id]->Reset(); } - void onDefault(){ - emit sendLogMsg("Program Digitizer-" + QString::number(digi->GetSerialNumber()) + " to default PHA."); - digi->ProgramPHA(); + void onDefault(int id){ + emit sendLogMsg("Program Digitizer-" + QString::number(digi[id]->GetSerialNumber()) + " to default PHA."); + digi[id]->ProgramPHA(); } void onTriggerClick(int haha){ @@ -64,17 +64,17 @@ private slots: if( (haha & 0xFF) == 64){ if( cbCh[iDig][64]->isChecked() ){ - for( int i = 0 ; i < digi->GetNChannels() ; i++){ + for( int i = 0 ; i < digi[iDig]->GetNChannels() ; i++){ cbCh[iDig][i]->setChecked(true); } }else{ - for( int i = 0 ; i < digi->GetNChannels() ; i++){ + for( int i = 0 ; i < digi[iDig]->GetNChannels() ; i++){ cbCh[iDig][i]->setChecked(false); } } }else{ unsigned int nOn = 0; - for( int i = 0; i < digi->GetNChannels(); i++){ + for( int i = 0; i < digi[iDig]->GetNChannels(); i++){ nOn += (cbCh[iDig][i]->isChecked() ? 1 : 0); } @@ -93,14 +93,13 @@ signals: private: - Digitizer2Gen * digi; + Digitizer2Gen ** digi; unsigned short nDigi; QPushButton *bn[MaxNumberOfChannel][MaxNumberOfChannel]; bool bnClickStatus[MaxNumberOfChannel][MaxNumberOfChannel]; QCheckBox * cbCh[MaxNumberOfDigitizer][MaxNumberOfChannel + 1]; // index = 64 is for all channels - //QCheckBox * cbCh[MaxNumberOfChannel + 1]; // index = 64 is for all channels QSpinBox * sbRecordLength[MaxNumberOfChannel + 1]; QSpinBox * sbPreTrigger[MaxNumberOfChannel + 1]; diff --git a/mainwindow.cpp b/mainwindow.cpp index 926b300..ab13b80 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -12,7 +12,7 @@ #include //------ static memeber -Digitizer2Gen * MainWindow::digi = NULL; +Digitizer2Gen ** MainWindow::digi = NULL; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ @@ -55,11 +55,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ bnOpenScope->setEnabled(false); bnOpenDigitizers = new QPushButton("Open Digitizers", this); - connect(bnOpenDigitizers, SIGNAL(clicked()), this, SLOT(bnOpenDigitizers_clicked())); + connect(bnOpenDigitizers, SIGNAL(clicked()), this, SLOT(OpenDigitizers())); bnCloseDigitizers = new QPushButton("Close Digitizers", this); bnCloseDigitizers->setEnabled(false); - connect(bnCloseDigitizers, SIGNAL(clicked()), this, SLOT(bnCloseDigitizers_clicked())); + connect(bnCloseDigitizers, SIGNAL(clicked()), this, SLOT(CloseDigitizers())); bnDigiSettings = new QPushButton("Digitizers Settings", this); bnDigiSettings->setEnabled(false); @@ -181,15 +181,21 @@ MainWindow::~MainWindow(){ if( digiSetting != NULL ) delete digiSetting; if( digi != NULL ){ - digi->CloseDigitizer(); - delete digi; + for( int i = 0 ; i < nDigi; i++) { + digi[i]->CloseDigitizer(); + delete digi[i]; + } + delete [] digi; } if( readDataThread != NULL){ - readDataThread->Stop(); - readDataThread->quit(); - readDataThread->wait(); - delete readDataThread; + for( int i = 0; i < nDigi; i++){ + readDataThread[i]->Stop(); + readDataThread[i]->quit(); + readDataThread[i]->wait(); + delete readDataThread[i]; + } + delete [] readDataThread; } } @@ -197,16 +203,19 @@ MainWindow::~MainWindow(){ //^################################################################ ACQ control void MainWindow::StartACQ(){ - digi->Reset(); - digi->ProgramPHA(false); - digi->SetPHADataFormat(1);// only save 1 trace - remove("haha_000.sol"); // remove file - digi->OpenOutFile("haha");// haha_000.sol - digi->StartACQ(); - LogMsg("Start Run...."); + for( int i =0 ; i < nDigi; i ++){ + digi[i]->Reset(); + digi[i]->ProgramPHA(false); + digi[i]->SetPHADataFormat(1);// only save 1 trace - readDataThread->start(); + //TODO :: save file + remove("haha_000.sol"); // remove file + digi[i]->OpenOutFile("haha");// haha_000.sol + digi[i]->StartACQ(); + + readDataThread[i]->start(); + } bnStartACQ->setEnabled(false); bnStopACQ->setEnabled(true); @@ -216,80 +225,101 @@ void MainWindow::StartACQ(){ void MainWindow::StopACQ(){ - digi->StopACQ(); - - //readDataThread->Stop(); + for( int i = 0; i < nDigi; i++){ + digi[i]->StopACQ(); + + //readDataThread->Stop(); - readDataThread->quit(); - readDataThread->wait(); + readDataThread[i]->quit(); + readDataThread[i]->wait(); + digi[i]->CloseOutFile(); + + } - digi->CloseOutFile(); - LogMsg("Stop Run"); - bnStartACQ->setEnabled(true); bnStopACQ->setEnabled(false); } +//^###################################################################### open and close digitizer +void MainWindow::OpenDigitizers(){ + + //------- decode IPList + + nDigi = 1; + -void MainWindow::bnOpenDigitizers_clicked(){ LogMsg("Opening digitizer....."); - digi = new Digitizer2Gen(); + digi = new Digitizer2Gen*[nDigi]; + readDataThread = new ReadDataThread*[nDigi]; - digi->OpenDigitizer("dig2://192.168.0.100/"); + for( int i = 0; i < nDigi; i++){ - if(digi->IsConnected()){ + printf("=============================== %d/%d\n" , i, nDigi); - digiSerialNum.push_back(digi->GetSerialNumber()); - nDigi ++; + digi[i] = new Digitizer2Gen(); + digi[i]->OpenDigitizer("dig2://192.168.0.100/"); - LogMsg("Opened digitizer : " + QString::number(digi->GetSerialNumber())); - bnOpenDigitizers->setEnabled(false); - bnOpenDigitizers->setStyleSheet(""); - bnCloseDigitizers->setEnabled(true); - bnDigiSettings->setEnabled(true); - bnStartACQ->setEnabled(true); - bnStopACQ->setEnabled(false); + if(digi[i]->IsConnected()){ - readDataThread = new ReadDataThread(digi, this); - connect(readDataThread, &ReadDataThread::sendMsg, this, &MainWindow::LogMsg); + digiSerialNum.push_back(digi[i]->GetSerialNumber()); - }else{ - LogMsg("Cannot open digitizer"); + LogMsg("Opened digitizer : " + QString::number(digi[i]->GetSerialNumber())); + bnOpenDigitizers->setEnabled(false); + bnOpenDigitizers->setStyleSheet(""); + bnCloseDigitizers->setEnabled(true); + bnDigiSettings->setEnabled(true); + bnStartACQ->setEnabled(true); + bnStopACQ->setEnabled(false); - //LogMsg("use a dummy."); - //digi->SetDummy(); - //digiSerialNum.push_back(0000); - //nDigi ++; + readDataThread[i] = new ReadDataThread(digi[i], this); + connect(readDataThread[i], &ReadDataThread::sendMsg, this, &MainWindow::LogMsg); - delete digi; + }else{ + LogMsg("Cannot open digitizer"); + //LogMsg("use a dummy."); + //digi->SetDummy(); + //digiSerialNum.push_back(0000); + //nDigi ++; + + delete digi; + + } } - } -//^###################################################################### open and close digitizer -void MainWindow::bnCloseDigitizers_clicked(){ - if( digi != NULL ){ - digi->CloseDigitizer(); - delete digi; - digi = NULL; - LogMsg("Closed Digitizer : " + QString::number(digiSerialNum[0])); - - nDigi = 0; - digiSerialNum.clear(); +void MainWindow::CloseDigitizers(){ + + for( int i = 0; i < nDigi; i++){ + if( digi[i] != NULL ){ + digi[i]->CloseDigitizer(); + delete digi[i]; + LogMsg("Closed Digitizer : " + QString::number(digiSerialNum[0])); + + nDigi = 0; + digiSerialNum.clear(); - bnOpenDigitizers->setEnabled(true); - bnCloseDigitizers->setEnabled(false); - bnDigiSettings->setEnabled(false); - bnStartACQ->setEnabled(false); - bnStopACQ->setEnabled(false); + bnOpenDigitizers->setEnabled(true); + bnCloseDigitizers->setEnabled(false); + bnDigiSettings->setEnabled(false); + bnStartACQ->setEnabled(false); + bnStopACQ->setEnabled(false); - if( digiSetting != NULL ) digiSetting->close(); + if( digiSetting != NULL ) digiSetting->close(); + readDataThread[i]->Stop(); + readDataThread[i]->quit(); + readDataThread[i]->wait(); + delete readDataThread[i]; + } } + delete [] digi; + delete [] readDataThread; + digi = NULL; + readDataThread = NULL; } void MainWindow::OpenDigitizersSettings(){ @@ -336,8 +366,8 @@ void MainWindow::ProgramSettings(){ helpInfo->appendHtml("

"); helpInfo->appendHtml("These 2 paths will be used when New/Change/Reload Exp "); helpInfo->appendHtml("

"); - helpInfo->appendHtml(" Digitizers IP Domain is the frist 6 \ - digi of the digitizers IP. The program will search for all digitizers under this domain."); + helpInfo->appendHtml(" Digitizers IP List is the list of IP \ + digi of the digitizers IP. e.g. 192.168.0.100,102 for 2 digitizers, or 192.168.0.100-102 for 3 digitizers."); helpInfo->appendHtml("

"); helpInfo->appendHtml(" Database IP or Elog IP can be empty. In that case, no database and elog will be used."); @@ -376,10 +406,10 @@ void MainWindow::ProgramSettings(){ //-------- IP Domain rowID ++; - QLabel *lbIPDomain = new QLabel("Digitizers IP Domain", &dialog); + QLabel *lbIPDomain = new QLabel("Digitizers IP List", &dialog); lbIPDomain->setAlignment(Qt::AlignRight | Qt::AlignCenter); layout->addWidget(lbIPDomain, rowID, 0); - lIPDomain = new QLineEdit("192.168.0", &dialog); layout->addWidget(lIPDomain, rowID, 1, 1, 2); + lIPDomain = new QLineEdit("192.168.0.100", &dialog); layout->addWidget(lIPDomain, rowID, 1, 1, 2); //-------- DataBase IP rowID ++; QLabel *lbDatbaseIP = new QLabel("Database IP", &dialog); @@ -459,7 +489,7 @@ bool MainWindow::OpenProgramSettings(){ case 0 : settingFilePath = line; break; case 1 : analysisPath = line; break; case 2 : dataPath = line; break; - case 3 : IPDomain = line; break; + case 3 : IPList = line; break; case 4 : DatabaseIP = line; break; case 5 : DatabaseName = line; break; case 6 : ElogIP = line; break; @@ -474,7 +504,7 @@ bool MainWindow::OpenProgramSettings(){ LogMsg("Setting File Path : " + settingFilePath); LogMsg(" Analysis Path : " + analysisPath); LogMsg(" Data Path : " + dataPath); - LogMsg(" Digi. IP Domain : " + IPDomain); + LogMsg(" Digi. IP Domain : " + IPList); LogMsg(" Database IP : " + DatabaseIP); LogMsg(" Database Name : " + DatabaseName); LogMsg(" ElogIP : " + ElogIP); @@ -503,7 +533,7 @@ bool MainWindow::OpenProgramSettings(){ void MainWindow::SaveProgramSettings(){ - IPDomain = lIPDomain->text(); + IPList = lIPDomain->text(); DatabaseIP = lDatbaseIP->text(); DatabaseName = lDatbaseName->text(); ElogIP = lElogIP->text(); @@ -519,7 +549,7 @@ void MainWindow::SaveProgramSettings(){ file.write((settingFilePath+"\n").toStdString().c_str()); file.write((analysisPath+"\n").toStdString().c_str()); file.write((dataPath+"\n").toStdString().c_str()); - file.write((IPDomain+"\n").toStdString().c_str()); + file.write((IPList+"\n").toStdString().c_str()); file.write((DatabaseIP+"\n").toStdString().c_str()); file.write((DatabaseName+"\n").toStdString().c_str()); file.write((ElogIP+"\n").toStdString().c_str()); diff --git a/mainwindow.h b/mainwindow.h index 9afc04c..97cca99 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -94,8 +94,8 @@ public: private slots: - void bnOpenDigitizers_clicked(); - void bnCloseDigitizers_clicked(); + void OpenDigitizers(); + void CloseDigitizers(); void OpenDigitizersSettings(); @@ -133,14 +133,14 @@ private: QPlainTextEdit * logInfo; - static Digitizer2Gen * digi; + static Digitizer2Gen ** digi; unsigned short nDigi; std::vector digiSerialNum; void StartACQ(); void StopACQ(); - ReadDataThread * readDataThread; + ReadDataThread ** readDataThread; void LogMsg(QString msg); bool logMsgHTMLMode = true; @@ -158,7 +158,7 @@ private: QString settingFilePath; QString analysisPath; QString dataPath; - QString IPDomain; + QString IPList; QString DatabaseIP; QString DatabaseName; QString ElogIP;