diff --git a/CustomThreads.h b/CustomThreads.h
index 1d99159..7b5f966 100644
--- a/CustomThreads.h
+++ b/CustomThreads.h
@@ -26,28 +26,27 @@ public:
void SetSaveData(bool onOff) {this->isSaveData = onOff;}
void SetScopeMode(bool onOff) {this->isScope = onOff;}
- void go(){
- mutex.lock();
- condition.wakeAll();
- mutex.unlock();
- }
+ // void go(){
+ // mutex.lock();
+ // condition.wakeAll();
+ // mutex.unlock();
+ // }
void run(){
stop = false;
- mutex.lock();
- condition.wait(&mutex);
- mutex.unlock();
+ // mutex.lock();
+ // condition.wait(&mutex);
+ // mutex.unlock();
clock_gettime(CLOCK_REALTIME, &t0);
printf("--- %d, %ld nsec \n", ID, t0.tv_nsec);
ta = t0;
// clock_gettime(CLOCK_REALTIME, &t1);
- digi->StartACQ();
-
- usleep(1000); // wait for some data;
+ // digi->StartACQ();
+ // usleep(1000); // wait for some data;
do{
@@ -106,8 +105,8 @@ private:
bool isScope;
unsigned long readCount;
- QMutex mutex;
- QWaitCondition condition;
+ // QMutex mutex;
+ // QWaitCondition condition;
};
//^#======================================================= Timing Thread
diff --git a/FSUDAQ.cpp b/FSUDAQ.cpp
index 037e7df..ed98fdd 100644
--- a/FSUDAQ.cpp
+++ b/FSUDAQ.cpp
@@ -834,7 +834,8 @@ void MainWindow::StartACQ(){
LogMsg("===================== Start a non-save Run");
}
- for( unsigned int i = 0; i < nDigi ; i++){
+ //assume master board is the 0-th board
+ for( int i = (int) nDigi-1; i >= 0 ; i--){
if( chkSaveData->isChecked() ) {
if( digi[i]->GetData()->OpenSaveFile((rawDataPath + "/" + prefix + "_" + QString::number(runID).rightJustified(3, '0')).toStdString()) == false ) {
LogMsg("Cannot open save file : " + QString::fromStdString(digi[i]->GetData()->GetOutFileName() ) + ". Probably read-only?");
@@ -846,14 +847,16 @@ void MainWindow::StartACQ(){
digi[i]->WriteRegister(DPP::SoftwareClear_W, 1);
digi[i]->GetData()->ClearData();
+ digi[i]->StartACQ();
+
readDataThread[i]->start();
}
if( chkSaveData->isChecked() ) SaveLastRunFile();
- printf("------------ wait for 2 sec \n");
- usleep(2000*1000);
- printf("------------ Go! \n");
- for( unsigned int i = 0; i < nDigi; i++) readDataThread[i]->go();
+ // printf("------------ wait for 2 sec \n");
+ // usleep(1000*1000);
+ // printf("------------ Go! \n");
+ // for( unsigned int i = 0; i < nDigi; i++) readDataThread[i]->go();
scalarThread->start();
@@ -973,14 +976,67 @@ void MainWindow::AutoRun(){ //TODO
void MainWindow::SetSyncMode(){
- // No sync
+ QDialog dialog;
+ dialog.setWindowTitle("Board Synchronization");
- // using external start ( TRG-OUT (S-IN) --> S-IN )
+ QVBoxLayout * layout = new QVBoxLayout(&dialog);
- // using SW ( TRG-OUT(RUN) --> S-IN)
+ QLabel * lbInfo1 = new QLabel("This will reset 0x8100 and 0x811C \nMaster must be the 1st board.", &dialog);
+ lbInfo1->setStyleSheet("color : red;");
- // using external Clock ( TRG-OUT(RUN) --> S-IN )
+ QPushButton * bnNoSync = new QPushButton("No Sync");
+ QPushButton * bnMethod1 = new QPushButton("Software TRG-OUT --> TRG-IN (within 100 ticks)");
+ QPushButton * bnMethod2 = new QPushButton("Software TRG-OUT --> S-IN (within 20 ticks)");
+ QPushButton * bnMethod3 = new QPushButton("External TRG-OUT --> S-IN ");
+ layout->addWidget(lbInfo1, 0);
+ layout->addWidget( bnNoSync, 2);
+ layout->addWidget(bnMethod1, 3);
+ layout->addWidget(bnMethod2, 4);
+ layout->addWidget(bnMethod3, 5);
+
+ bnNoSync->setFixedHeight(40);
+ bnMethod1->setFixedHeight(40);
+ bnMethod2->setFixedHeight(40);
+ bnMethod3->setFixedHeight(40);
+
+ connect(bnNoSync, &QPushButton::clicked, [&](){
+ for(unsigned int i = 0; i < nDigi; i++){
+ digi[i]->WriteRegister(DPP::AcquisitionControl, 0);
+ digi[i]->WriteRegister(DPP::FrontPanelIOControl, 0);
+ }
+ dialog.accept();
+ });
+
+ connect(bnMethod1, &QPushButton::clicked, [&](){
+ digi[0]->WriteRegister(DPP::AcquisitionControl, 0);
+ digi[0]->WriteRegister(DPP::FrontPanelIOControl, 0x10000); //RUN
+ for(unsigned int i = 1; i < nDigi; i++){
+ digi[i]->WriteRegister(DPP::AcquisitionControl, 2);
+ digi[i]->WriteRegister(DPP::FrontPanelIOControl, 0x10000); // S-IN
+ }
+ dialog.accept();
+ });
+
+ connect(bnMethod2, &QPushButton::clicked, [&](){
+ digi[0]->WriteRegister(DPP::AcquisitionControl, 0);
+ digi[0]->WriteRegister(DPP::FrontPanelIOControl, 0x10000); //RUN
+ for(unsigned int i = 1; i < nDigi; i++){
+ digi[i]->WriteRegister(DPP::AcquisitionControl, 1);
+ digi[i]->WriteRegister(DPP::FrontPanelIOControl, 0x30000); // S-IN
+ }
+ dialog.accept();
+ });
+
+ connect(bnMethod3, &QPushButton::clicked, [&](){
+ for(unsigned int i = 0; i < nDigi; i++){
+ digi[i]->WriteRegister(DPP::AcquisitionControl, 1);
+ digi[i]->WriteRegister(DPP::FrontPanelIOControl, 0x30000); // S-IN
+ }
+ dialog.accept();
+ });
+
+ dialog.exec();
}
diff --git a/RegisterAddress.h b/RegisterAddress.h
index 8de2632..443b0c1 100644
--- a/RegisterAddress.h
+++ b/RegisterAddress.h
@@ -393,7 +393,7 @@ namespace DPP {
const std::vector> ListStartStopMode = {{"SW controlled", 0},
{"S-IN/GPI controlled", 1},
- {"1st Trigger", 2},
+ {"1st TRG-IN", 2},
{"LVDS controlled", 3}};
const std::vector> ListACQStartArm = {{"ACQ STOP", 0},