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 }