00001 #include <QtGui> 00002 00003 #include <stdio.h> 00004 #include <string.h> 00005 00006 #include <QMainWindow> 00007 #include <QStatusBar> 00008 #include <QPushButton> 00009 00010 #include "roc/Board.h" 00011 #include "roc/UdpBoard.h" 00012 #include "roc/I2cDevice.h" 00013 #include "base/Gpio.h" 00014 #include "nxyter/RocNx.h" 00015 #include "nxyter/MainAdc.h" 00016 #include "feet/RocFeet.h" 00017 00018 #include "roctabswidget.h" 00019 #include "boardwidget.h" 00020 #include "rocmainwidget.h" 00021 #include "datawidget.h" 00022 #include "gpiowidget.h" 00023 #include "udpwidget.h" 00024 #include "opticwidget.h" 00025 #include "rocnxwidget.h" 00026 #include "rocfeetwidget.h" 00027 00028 00029 int main(int argc, char *argv[]) 00030 { 00031 printf("rocGui v2.0, S.Linev, December 2009\n"); 00032 00033 if (argc<2) { 00034 printf("No board address was specified\n\n"); 00035 00036 printf("Usage: \n"); 00037 printf(" rocGui brdaddr [-feb [febname]] [-detect]\n"); 00038 printf(" brdaddr - address of the board like cbmtest01, or optic://abb1, or udp://ip.addr\n"); 00039 printf(" -feb - create widget for feb configuration\n"); 00040 printf(" febname - name of the feb like 'Feb1nxGenB:0' or 'Feb1nxGenC:1' or 'Feb4nxBT'\n"); 00041 printf(" -detect - detecting connected febs automatically\n"); 00042 return 1; 00043 } 00044 00045 const char* brdname = argv[1]; 00046 00047 printf("Connecting to %s\n", brdname); 00048 00049 base::Board* gbrd = base::Board::Connect(brdname, base::roleControl); 00050 00051 if (gbrd==0) { 00052 printf("Cannot connect to board %s\n", brdname); 00053 return 1; 00054 } 00055 00056 uint32_t hw_kind = gbrd->getFrontendKind(); 00057 00058 uint32_t hw_ver = gbrd->getHardwareVersion(); 00059 00060 roc::Board* brd = dynamic_cast<roc::Board*> (gbrd); 00061 00062 roc::I2cDevice::addAddrMap(gbrd); 00063 base::Gpio::addAddrMap(gbrd); 00064 00065 nxyter::RocNx::addAddrMap(gbrd, hw_kind); 00066 nxyter::MainAdc::addAddrMap(gbrd); 00067 00068 feet::RocFeet::addAddrMap(gbrd, hw_kind); 00069 00070 int appargc = 1; 00071 00072 QApplication app(appargc, argv); 00073 00074 QMainWindow main; 00075 main.resize(800,600); 00076 00077 QStatusBar* status = new QStatusBar(&main); 00078 main.setStatusBar(status); 00079 00080 QPushButton* btn1 = new QPushButton("&Get", status); 00081 btn1->setMaximumHeight(20); btn1->setMaximumWidth(50); 00082 btn1->setToolTip("Get registers values for current selected widget (Alt+G)"); 00083 btn1->setShortcut(Qt::ALT + Qt::Key_G); 00084 status->addPermanentWidget(btn1); 00085 00086 QPushButton* btn2 = new QPushButton("&Set", status); 00087 btn2->setMaximumHeight(20); btn2->setMaximumWidth(50); 00088 btn2->setToolTip("Set registers values for current selected widget (Alt+S)"); 00089 btn2->setShortcut(Qt::ALT + Qt::Key_S); 00090 status->addPermanentWidget(btn2); 00091 00092 QPushButton* btn3 = new QPushButton("&Dflt", status); 00093 btn3->setMaximumHeight(20); btn3->setMaximumWidth(50); 00094 btn3->setToolTip("Set registers in current widget to default values (Alt-D)"); 00095 btn3->setShortcut(Qt::ALT + Qt::Key_D); 00096 status->addPermanentWidget(btn3); 00097 00098 QPushButton* btn4 = new QPushButton("Get &all", status); 00099 btn4->setMaximumHeight(20); 00100 btn4->setToolTip("Get registers values for all widgets (Alt-A)"); 00101 btn4->setShortcut(Qt::ALT + Qt::Key_A); 00102 status->addPermanentWidget(btn4); 00103 00104 QPushButton* btn5 = new QPushButton("Se&t all", status); 00105 btn5->setMaximumHeight(20); 00106 btn5->setToolTip("Set registers values for all widgets (Alt-T)"); 00107 btn5->setShortcut(Qt::ALT + Qt::Key_T); 00108 status->addPermanentWidget(btn5); 00109 00110 QPushButton* btn6 = new QPushButton("Sav&e", status); 00111 btn6->setMaximumHeight(20); btn6->setMaximumWidth(50); 00112 btn6->setToolTip("&Export registers values in form of rocutil macro (Alt-E)"); 00113 btn6->setShortcut(Qt::ALT + Qt::Key_E); 00114 status->addPermanentWidget(btn6); 00115 00116 status->showMessage("Test"); 00117 00118 RocTabsWidget* tabs = new RocTabsWidget(&main, brd); 00119 00120 BoardWidget* bw = new BoardWidget(tabs, gbrd); 00121 tabs->addTab(bw, "Board"); 00122 00123 RocNxWidget* nxwidg = 0; 00124 RocFeetWidget* feetwidg = 0; 00125 00126 if (brd!=0) { 00127 00128 RocMainWidget* roc_mw = new RocMainWidget(tabs, brd); 00129 00130 tabs->addTab(roc_mw,"ROC"); 00131 00132 roc::UdpBoard* udp = dynamic_cast<roc::UdpBoard*> (brd); 00133 if (udp!=0) tabs->addTab(new UdpWidget(tabs, udp), "UDP"); 00134 00135 roc::OpticBoard* optic = dynamic_cast<roc::OpticBoard*> (brd); 00136 if (optic!=0) tabs->addTab(new OpticWidget(tabs, optic), "Optics"); 00137 } 00138 00139 if ((hw_kind == base::kind_nXYTER) || (hw_kind == base::kind_newNX)) { 00140 tabs->addTab(new GpioWidget(tabs, gbrd), "GPIO"); 00141 nxwidg = new RocNxWidget(tabs, gbrd); 00142 tabs->addTab(nxwidg, "RocNx"); 00143 } 00144 00145 if ((hw_kind == base::kind_FEET) || (hw_kind == base::kind_oldFEET)) 00146 if (brd!=0) { 00147 feetwidg = new RocFeetWidget(tabs, brd); 00148 if (feetwidg->isSupportGpio()) 00149 tabs->addTab(new GpioWidget(tabs, brd), "GPIO"); 00150 tabs->addTab(feetwidg, "RocFeet"); 00151 tabs->addTab(new DataWidget(tabs, brd), "FeetData"); 00152 } 00153 00154 main.setCentralWidget(tabs); 00155 00156 main.setWindowTitle(brdname); 00157 00158 tabs->connect(btn1, SIGNAL(clicked()), tabs, SLOT(getCurrConfig())); 00159 tabs->connect(btn2, SIGNAL(clicked()), tabs, SLOT(setCurrConfig())); 00160 tabs->connect(btn3, SIGNAL(clicked()), tabs, SLOT(setCurrDefault())); 00161 00162 tabs->connect(btn4, SIGNAL(clicked()), tabs, SLOT(getFullConfig())); 00163 tabs->connect(btn5, SIGNAL(clicked()), tabs, SLOT(setFullConfig())); 00164 tabs->connect(btn6, SIGNAL(clicked()), tabs, SLOT(saveFullConfig())); 00165 00166 tabs->setStatusBar(status); 00167 00168 00169 int num = 2; 00170 while (num < argc) { 00171 if ((strcmp(argv[num],"-feb")==0) && (nxwidg!=0)) { 00172 num++; 00173 00174 if ((num<argc) && (argv[num][0] != '-')) 00175 nxwidg->selectFeb(argv[num++]); 00176 00177 nxwidg->addFeb(); 00178 continue; 00179 } 00180 00181 if ((strcmp(argv[num],"-detect")==0) && (nxwidg!=0)) { 00182 num++; 00183 nxwidg->detectFebs(); 00184 continue; 00185 } 00186 00187 printf("Unknown argument %s\n", argv[num]); 00188 num++; 00189 } 00190 00191 00192 main.show(); 00193 00194 int ret = app.exec(); 00195 00196 printf("Close connection to %s\n", brdname); 00197 roc::Board::Close(brd); 00198 00199 return ret; 00200 }