/** C++ Include Headers */
#include "sls_detector_defs.h"
@@ -39,12 +40,6 @@ public:
void Refresh();
private:
- /** The sls detector object */
- multiSlsDetector *myDet;
-
- /** detector type */
- slsDetectorDefs::detectorType detType;
-
/** Sets up the widget
*/
void SetupWidgetWindow();
@@ -54,6 +49,50 @@ private:
void Initialization();
+
+private slots:
+ /** Updates the module list depending on current detector
+ */
+ void UpdateModuleList();
+
+ /** Updates the status depending on current detector
+ */
+ void UpdateStatus();
+
+ /** Gets id and versions etc
+ */
+ void GetInfo();
+
+ /** Sets id and versions on the display widget
+ */
+ void SetParameters(QTreeWidgetItem *item);
+
+ /** Test detector and module
+ */
+ void TestDetector();
+
+private:
+ /** The multi sls detector object */
+ multiSlsDetector *myDet;
+
+ /** detector type */
+ slsDetectorDefs::detectorType detType;
+
+ /**sls detecctor object */
+ slsDetector *det;
+
+ /** Tree Widget displaying the detectors, modules */
+ QTreeWidget *treeDet;
+ /** Widget displaying the serial numbers, mac addresses etc */
+ QFrame *dispFrame;
+ QLabel *lblDetectorId;
+ QLabel *lblDetectorSerial;
+ QLabel *lblDetectorFirmware;
+ QLabel *lblDetectorSoftware;
+ QLabel *lblModuleId;
+ QLabel *lblModuleFirmware;
+ QLabel *lblModuleSerial;
+ QPalette *blue;
};
diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp
index 4ca7cd356..8d13a7265 100644
--- a/slsDetectorGui/src/qDetectorMain.cpp
+++ b/slsDetectorGui/src/qDetectorMain.cpp
@@ -352,11 +352,6 @@ void qDetectorMain::ExecuteUtilities(QAction *action){
else qDefs::Message(qDefs::WARNING,string("Could not save the Setup Parameters from file:\n")+fName.toAscii().constData(),"Main");
}
}
- else if(action==actionMeasurementWizard){
-#ifdef VERBOSE
- cout << "Measurement Wizard" << endl;
-#endif
- }
else if(action==actionOpenConfiguration){
#ifdef VERBOSE
cout << "Loading Configuration" << endl;
@@ -461,13 +456,18 @@ void qDetectorMain::ExecuteHelp(QAction *action){
#ifdef VERBOSE
cout << "About: Common GUI for Mythen, Eiger, Gotthard and Agipd detectors" << endl;
#endif
+ char version[200];
+ sprintf(version,"%llx",myDet->getId(slsDetectorDefs::THIS_SOFTWARE_VERSION));
+ string thisClientVersion = string(version);
//A heading
- qDefs::Message(qDefs::INFORMATION,"SLS Detector GUI version: 1.0
"
+ qDefs::Message(qDefs::INFORMATION,"
"
+ "SLS Detector GUI version: 1.0
"
+ "SLS Detector Client version: "+thisClientVersion+"
"
"Common GUI to control the SLS Detectors: "
"Mythen, Eiger, Gotthard and Agipd.
"
"It can be operated in parallel with the command line interface:
"
"sls_detector_put,
sls_detector_get,
sls_detector_acquire and
sls_detector_help.
"
- "The software is still in progress. "
+ "The GUI Software is still in progress. "
"Please report bugs to dhanya.maliakal@psi.ch.<\\p>","About SLS Detector GUI");
}
}
diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp
index e0278443e..b98cfb571 100644
--- a/slsDetectorGui/src/qDrawPlot.cpp
+++ b/slsDetectorGui/src/qDrawPlot.cpp
@@ -1220,7 +1220,7 @@ int qDrawPlot::UpdateTrimbitPlot(bool fromDetector,bool Histogram){
for(i=0;iaddButton(btnRefresh,0);
btnGroup->addButton(btnGetTrimbits,1);
+
+
+
+ Initialization();
}
}
diff --git a/slsDetectorGui/src/qTabDebugging.cpp b/slsDetectorGui/src/qTabDebugging.cpp
index e599fb4c5..93d512f91 100644
--- a/slsDetectorGui/src/qTabDebugging.cpp
+++ b/slsDetectorGui/src/qTabDebugging.cpp
@@ -9,6 +9,9 @@
// Project Class Headers
#include "slsDetector.h"
#include "multiSlsDetector.h"
+// Qt Include Headers
+#include
+#include
// C++ Include Headers
#include
using namespace std;
@@ -18,7 +21,8 @@ using namespace std;
//-------------------------------------------------------------------------------------------------------------------------------------------------
-qTabDebugging::qTabDebugging(QWidget *parent,multiSlsDetector*& detector):QWidget(parent),myDet(detector){
+qTabDebugging::qTabDebugging(QWidget *parent,multiSlsDetector*& detector):
+ QWidget(parent),myDet(detector),treeDet(NULL){
setupUi(this);
SetupWidgetWindow();
Initialization();
@@ -37,41 +41,443 @@ qTabDebugging::~qTabDebugging(){
void qTabDebugging::SetupWidgetWindow(){
+
+ blue = new QPalette();
+ blue->setColor(QPalette::Active,QPalette::WindowText,Qt::darkBlue);
+
+
// Detector Type
detType=myDet->getDetectorsType();
-
- //status
- int detStatus = (int)myDet->getRunStatus();
- string status = slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detStatus));
- lblStatus->setText(QString(status.c_str()).toUpper());
-
- if(detType==slsDetectorDefs::EIGER) lblModule->setText("Half Module Number:");
- else lblModule->setText("Module Number:");
-
- // loading combo box module numbers
- int max = myDet->setNumberOfModules();
+ ///change module label
+ switch(detType){
+ case slsDetectorDefs::EIGER:
+ lblDetector->setText("Half Module:");
+ chkDetectorFirmware->setText("Half Module Firmware:");
+ chkDetectorSoftware->setText("Half Module Software:");
+ chkDetectorMemory->setText("Half Module Memory:");
+ chkDetectorBus->setText("Half Module Bus:");
+ lblModule->hide();
+ comboModule->hide();
+ chkModuleFirmware->hide();
+ chkChip->setEnabled(false);
+ chkModuleFirmware->setEnabled(false);
+ break;
+ case slsDetectorDefs::GOTTHARD:
+ lblDetector->setText("Module:");
+ chkDetectorFirmware->setText("Module Firmware:");
+ chkDetectorSoftware->setText("Module Software:");
+ chkDetectorMemory->setText("Module Memory:");
+ chkDetectorBus->setText("Module Bus:");
+ lblModule->hide();
+ comboModule->hide();
+ chkModuleFirmware->hide();
+ chkChip->setEnabled(false);
+ chkModuleFirmware->setEnabled(false);
+ break;
+ case slsDetectorDefs::MYTHEN:
+ break;
+ default:
+ //leave everything as it is(mythen is default)
+ break;
+ }
-/* for(int i=0;igetSlsDetector(i);
- if(s->setTCPSocket()!=slsDetectorDefs::FAIL){
- comboModule->addItem(QString::number(i));
- }
- }*/
+ //add detectors
+ for(int i=0;igetNumberOfDetectors();i++){
+ comboDetector->addItem(QString(myDet->getHostname(i).c_str()));
+ }
+
+
+ //add modules and status for current detector
+ if(detType==slsDetectorDefs::MYTHEN) UpdateModuleList();
+ UpdateStatus();
+
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qTabDebugging::Initialization(){
+ if(detType==slsDetectorDefs::MYTHEN)
+ connect(comboDetector, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateModuleList()));
+
+ connect(comboDetector, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateStatus()));
+ connect(btnGetInfo, SIGNAL(clicked()), this, SLOT(GetInfo()));
+ connect(btnTest, SIGNAL(clicked()), this, SLOT(TestDetector()));
}
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+void qTabDebugging::UpdateModuleList(){
+ det = myDet->getSlsDetector(comboDetector->currentIndex());
+ //deletes all modules except "all modules"
+ for(int i=0;icount()-1;i++)
+ comboModule->removeItem(i);
+ for(int i=0;igetNMods();i++){
+ comboModule->addItem(QString("Module %1").arg(i));
+ }
+
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+void qTabDebugging::UpdateStatus(){
+ det = myDet->getSlsDetector(comboDetector->currentIndex());
+ int detStatus = (int)det->getRunStatus();
+ string status = slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detStatus));
+ lblStatus->setText(QString(status.c_str()).toUpper());
+
+
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+void qTabDebugging::GetInfo(){
+ //window
+ QFrame* popup1 = new QFrame(this, Qt::Popup | Qt::SubWindow );
+ QList items;
+
+
+
+ //layout
+ QGridLayout *layout = new QGridLayout(popup1);
+ //treewidget
+ treeDet = new QTreeWidget(popup1);
+ layout->addWidget(treeDet,0,0);
+ //display the details
+ dispFrame = new QFrame(popup1);
+ QGridLayout *formLayout = new QGridLayout(dispFrame);
+ lblDetectorId = new QLabel(""); lblDetectorId->setPalette(*blue);
+ lblDetectorSerial = new QLabel(""); lblDetectorSerial->setPalette(*blue);
+ lblDetectorFirmware = new QLabel(""); lblDetectorFirmware->setPalette(*blue);
+ lblDetectorSoftware = new QLabel(""); lblDetectorSoftware->setPalette(*blue);
+ lblModuleId = new QLabel(""); lblModuleId->setPalette(*blue);
+ lblModuleSerial = new QLabel(""); lblModuleSerial->setPalette(*blue);
+ lblModuleFirmware = new QLabel(""); lblModuleFirmware->setPalette(*blue);
+ //to make sure the size is constant
+ lblDetectorFirmware->setFixedWidth(100);
+ layout->addWidget(dispFrame,0,1);
+
+ switch(detType){
+
+ case slsDetectorDefs::MYTHEN:{
+ //display widget
+ formLayout->addWidget(new QLabel("Readout:"),0,0);
+ formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
+ formLayout->addWidget(lblDetectorId,0,2);
+ formLayout->addWidget(new QLabel("Readout MAC Address:"),1,0);
+ formLayout->addWidget(lblDetectorSerial,1,2);
+ formLayout->addWidget(new QLabel("Readout Firmware Version:"),2,0);
+ formLayout->addWidget(lblDetectorFirmware,2,2);
+ formLayout->addWidget(new QLabel("Readout Software Version:"),3,0);
+ formLayout->addWidget(lblDetectorSoftware,3,2);
+ formLayout->addWidget(new QLabel("Module:"),4,0);
+ formLayout->addWidget(lblModuleId,4,2);
+ formLayout->addWidget(new QLabel("Module Serial Number:"),5,0);
+ formLayout->addWidget(lblModuleSerial,5,2);
+ formLayout->addWidget(new QLabel("Module Firmware Version:"),6,0);
+ formLayout->addWidget(lblModuleFirmware,6,2);
+
+
+ //tree widget
+ treeDet->setHeaderLabel("Mythen Detector");
+ //gets det names
+ for (int i=0;icount();i++)
+ items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Readout (%1)").arg(comboDetector->itemText(i)))));
+ treeDet->insertTopLevelItems(0, items);
+ //gets module names
+ for (int i=0;icount();i++){
+ QList childItems;
+ det = myDet->getSlsDetector(i);
+ for(int j=0;jgetNMods();j++)
+ childItems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Module %1").arg(j))));
+ treeDet->topLevelItem(i)->insertChildren(0,childItems);
+ }
+
+ break;
+ }
+
+
+
+ case slsDetectorDefs::EIGER:{
+ //display widget
+ formLayout->addWidget(new QLabel("Half Module:"),0,0);
+ formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
+ formLayout->addWidget(lblDetectorId,0,2);
+ formLayout->addWidget(new QLabel("Half Module MAC Address:"),1,0);
+ formLayout->addWidget(lblDetectorSerial,1,2);
+ formLayout->addWidget(new QLabel("Half Module Firmware Version:"),2,0);
+ formLayout->addWidget(lblDetectorFirmware,2,2);
+ formLayout->addWidget(new QLabel("Half Module Software Version:"),3,0);
+ formLayout->addWidget(lblDetectorSoftware,3,2);
+
+ //tree widget
+ treeDet->setHeaderLabel("Eiger Detector");
+ //get num modules
+ for (int i=0;icount()/2;i++)
+ items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Module %1").arg(i))));
+ treeDet->insertTopLevelItems(0, items);
+ //gets det names
+ for (int i=0;icount();i++){
+ QList childItems;
+ childItems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Half Module (%1)").arg(comboDetector->itemText(i)))));
+ treeDet->topLevelItem(i*2)->insertChildren(0,childItems);
+ }
+ break;
+ }
+
+
+
+ case slsDetectorDefs::GOTTHARD:{
+
+ //display widget
+ formLayout->addWidget(new QLabel("Module:"),0,0);
+ formLayout->addItem(new QSpacerItem(15,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1);
+ formLayout->addWidget(lblDetectorId,0,2);
+ formLayout->addWidget(new QLabel("Module MAC Address:"),1,0);
+ formLayout->addWidget(lblDetectorSerial,1,2);
+ formLayout->addWidget(new QLabel("Module Firmware Version:"),2,0);
+ formLayout->addWidget(lblDetectorFirmware,2,2);
+ formLayout->addWidget(new QLabel("Module Software Version:"),3,0);
+ formLayout->addWidget(lblDetectorSoftware,3,2);
+ //tree widget
+ treeDet->setHeaderLabel("Gotthard Detector");
+ //gets det names
+ for (int i=0;icount();i++)
+ items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("Module (%1)").arg(comboDetector->itemText(i)))));
+ treeDet->insertTopLevelItems(0, items);
+
+ break;
+ }
+
+
+
+ default:
+ break;
+ }
+
+ //show and center widget
+
+ int x = ((parentWidget()->width()) - (popup1->frameGeometry().width())) / 2;
+ int y = ((parentWidget()->height()) - (popup1->frameGeometry().height())) / 2;
+ QDesktopWidget *desktop = QApplication::desktop();
+ int screen = desktop->screenNumber(this);
+ popup1->setWindowModality(Qt::WindowModal);
+ popup1->move( (desktop->screenGeometry(screen).x())+x, (desktop->screenGeometry(screen).y())+y );
+ popup1->show();
+
+ //put the first parameters
+ SetParameters(treeDet->topLevelItem(0));
+
+ //initializations
+ connect(treeDet, SIGNAL(itemDoubleClicked(QTreeWidgetItem *,int)) , this, SLOT(SetParameters(QTreeWidgetItem *)));
+
+}
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+void qTabDebugging::SetParameters(QTreeWidgetItem *item){
+ char value[200];
+ int i;
+
+
+ switch(detType){
+
+ case slsDetectorDefs::MYTHEN:{
+ if(item->text(0).contains("Readout")){
+ //find index
+ for(i=0;icount();i++)
+ if(item== treeDet->topLevelItem(i))
+ break;
+
+ det = myDet->getSlsDetector(i);
+ lblDetectorId->setText(comboDetector->itemText(i));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SERIAL_NUMBER));
+ lblDetectorSerial->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION));
+ lblDetectorFirmware ->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION));
+ lblDetectorSoftware->setText(QString(value));
+
+ lblModuleId->setText("");
+ lblModuleSerial->setText("");
+ lblModuleFirmware->setText("");
+ }else{
+ //find index
+ for(i=0;icount();i++)
+ if(item->parent() == treeDet->topLevelItem(i))
+ break;
+ int im = item->parent()->indexOfChild(item);
+
+ det = myDet->getSlsDetector(i);
+ lblDetectorId->setText(comboDetector->itemText(i));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SERIAL_NUMBER));
+ lblDetectorSerial->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION));
+ lblDetectorFirmware ->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION));
+ lblDetectorSoftware->setText(QString(value));
+
+ lblModuleId->setText(QString("%1").arg(im));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::MODULE_SERIAL_NUMBER,im));
+ lblModuleSerial->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::MODULE_FIRMWARE_VERSION,im));
+ lblModuleFirmware->setText(QString(value));
+ }
+ break;
+ }
+
+
+
+
+ case slsDetectorDefs::EIGER:{
+ //only if half module clicked
+ if(item->text(0).contains("Half Module")){
+ //find index
+ for(i=0;icount();i++)
+ if(item== treeDet->topLevelItem(i))
+ break;
+
+ det = myDet->getSlsDetector(i);
+ lblDetectorId->setText(comboDetector->itemText(i));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SERIAL_NUMBER));
+ lblDetectorSerial->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION));
+ lblDetectorFirmware ->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION));
+ lblDetectorSoftware->setText(QString(value));
+ }
+ break;
+ }
+
+
+
+
+ case slsDetectorDefs::GOTTHARD:{
+ //find index
+ for(i=0;icount();i++)
+ if(item== treeDet->topLevelItem(i))
+ break;
+
+ det = myDet->getSlsDetector(i);
+ lblDetectorId->setText(comboDetector->itemText(i));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SERIAL_NUMBER));
+ lblDetectorSerial->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_FIRMWARE_VERSION));
+ lblDetectorFirmware ->setText(QString(value));
+ sprintf(value,"%llx",det->getId(slsDetectorDefs::DETECTOR_SOFTWARE_VERSION));
+ lblDetectorSoftware->setText(QString(value));
+ break;
+ }
+
+
+
+ default:
+ break;
+ }
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
+void qTabDebugging::TestDetector(){
+#ifdef VERBOSE
+ cout << "Testing" << endl;
+#endif
+
+ int retval=slsDetectorDefs::FAIL;
+ QString message;
+ QString Detector = "Detector";
+
+ //main messagebox title
+ switch(detType){
+ case slsDetectorDefs::MYTHEN:
+ message = QString("Test Results for %1 and %2:
").arg(comboDetector->currentText(),comboModule->currentText());
+ break;
+ case slsDetectorDefs::EIGER: Detector = "Half Module"; break;
+ case slsDetectorDefs::GOTTHARD: Detector = "Module"; break;
+ default: break;
+ }
+
+
+ if(detType==slsDetectorDefs::MYTHEN)
+ message = QString("Test Results for %1 and %2:
").arg(comboDetector->currentText(),comboModule->currentText());
+ else message = QString("Test Results for %1:
").arg(comboDetector->currentText());
+
+ //get sls det object
+ det = myDet->getSlsDetector(comboDetector->currentIndex());
+
+ //detector firmware
+ if(chkDetectorFirmware->isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::DETECTOR_FIRMWARE_TEST);
+ if(retval== slsDetectorDefs::FAIL) message.append(QString("%1 Firmware: FAIL
").arg(Detector));
+ else message.append(QString("%1 Firmware: %2
").arg(Detector,QString::number(retval)));
+#ifdef VERBOSE
+ cout<<"Detector Firmware: "<isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::DETECTOR_SOFTWARE_TEST);
+ if(retval== slsDetectorDefs::FAIL) message.append(QString("%1 Software: FAIL
").arg(Detector));
+ else message.append(QString("%1 Software: %2
").arg(Detector,QString::number(retval)));
+#ifdef VERBOSE
+ cout<<"Detector Software: "<isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::DETECTOR_BUS_TEST);
+ if(retval== slsDetectorDefs::FAIL) message.append(QString("%1 Bus: FAIL
").arg(Detector));
+ else message.append(QString("%1 Bus: %2
").arg(Detector,QString::number(retval)));
+#ifdef VERBOSE
+ cout<<"Detector Bus: "<isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::DETECTOR_MEMORY_TEST);
+ if(retval== slsDetectorDefs::FAIL) message.append(QString("%1 Memory: FAIL
").arg(Detector));
+ else message.append(QString("%1 Memory: %2
").arg(Detector,QString::number(retval)));
+#ifdef VERBOSE
+ cout<<"Detector Memory: "<isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::CHIP_TEST,comboModule->currentIndex());
+ if(retval== slsDetectorDefs::FAIL) message.append("
Chip: FAIL
");
+ else message.append(QString("Chip: %1
").arg(retval));
+#ifdef VERBOSE
+ cout<<"Chip: "<isChecked()){
+ retval = det->digitalTest(slsDetectorDefs::MODULE_FIRMWARE_TEST,comboModule->currentIndex());
+ if(retval== slsDetectorDefs::FAIL) message.append("Module Firmware: FAIL
");
+ else message.append(QString("Module Firmware: %1
").arg(retval));
+#ifdef VERBOSE
+ cout<<"Module Firmware: "<setFixedWidth(100);
btnClear->setIcon(QIcon( ":/icons/images/erase.png" ));
- gridLayout->addWidget(btnSave,0,0,1,1);
- gridLayout->addWidget(btnClear,0,4,1,1);
- gridLayout->addWidget(dispLog,1,0,1,5);
+ gridLayout->addItem(new QSpacerItem(15,10,QSizePolicy::Fixed,QSizePolicy::Fixed),0,0);
+ gridLayout->addWidget(btnSave,1,0,1,1);
+ gridLayout->addWidget(btnClear,1,4,1,1);
+ gridLayout->addItem(new QSpacerItem(15,10,QSizePolicy::Fixed,QSizePolicy::Fixed),2,0);
+ gridLayout->addWidget(dispLog,3,0,1,5);
qout=new qDebugStream(std::cout,this);
}