/*------------------------------------------------------------------------------ -- This file is a part of the LPPMON Software -- Copyright (C) 2011, Laboratory of Plasmas Physic - CNRS -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -------------------------------------------------------------------------------*/ /*-- Author : Alexis Jeandet -- Mail : alexis.jeandet@lpp.polytechnique.fr ----------------------------------------------------------------------------*/ #include "rmapplugin.h" rmapPluginUI::rmapPluginUI(QWidget *parent) : QWidget(parent) { spwTabWidget = new QTabWidget; // QWidget* spwTabWidgetPage0 = new QWidget; QWidget* spwTabWidgetPage2 = new QWidget; QWidget* spwTabWidgetPage3 = new QWidget; QWidget* spwTabWidgetPage4 = new QWidget; QWidget* spwTabWidgetPage5 = new QWidget; QWidget* spwTabWidgetPage6 = new QWidget; // bridgeWidget = new QWidget; mainLayout = new QVBoxLayout; ccsdsLayout = new QVBoxLayout; consoleLayout = new QVBoxLayout; selectionLayout = new QVBoxLayout; connectionLayout = new QGridLayout; bridgeSelection_LAYOUT = new QGridLayout; generalParameters_LAYOUT = new QGridLayout; gresb_GROUPBOX = new QGroupBox(tr("GRESB bridge parameters")); stardundee_GROUPBOX = new QGroupBox(tr("Star Dundee brick parameters")); selection_GROUPBOX = new QGroupBox(tr("Bridge selection")); generalParameters_GROUPBOX = new QGroupBox(tr("General parameters")); //*** QLABEL ***// gresbBridgeIPLabel = new QLabel(tr("Bridge IP: ")); gresbVirtualLinkLabel = new QLabel(tr("Virtual Link: ")); spwLinkLabel = new QLabel(tr("SPW Link: ")); rmapSourceLogicalAddressLabel = new QLabel(tr("RMAP Source Logical Address: ")); rmapTargetLogicalAddressLabel = new QLabel(tr("RMAP Target Logical Address: ")); logFileName = new QLabel; gresbStatusQueryLabel = new QLabel(tr("Status query socket (port 3010): waiting for connection")); gresbStatusQueryDialogLabel = new QLabel(tr("sockets opened but SpaceWire link not running")); nbPacketInStore = new QLabel(tr("nb packets in store: -")); //*** QPUSHBUTTON ***// rmapOpenCommunicationButton = new QPushButton(tr("Open selected bridge")); rmapCloseCommunicationButton = new QPushButton(tr("Close selected bridge")); rmapOpenCommunicationButton->setEnabled(false); rmapCloseCommunicationButton->setEnabled(false); logFileChooseButton = new QPushButton(tr("Choose file")); gresbStatusQueryRetryButton = new QPushButton(tr("Retry")); gresbStatusQueryAbortButton = new QPushButton(tr("Abort")); clearConsoleButton = new QPushButton(tr("Clear")); selectGRESB_BUTTON = new QRadioButton(tr("GRESB")); selectStarDundee_BUTTON = new QRadioButton(tr("Star Dundee")); //*** SPINBOX ***// gresbVirtualLinkSpinBox = new QSpinBox; rmapSourceLogicalAddressSpinBox = new QSpinBox; rmapTargetLogicalAddressSpinBox = new QSpinBox; spwLinkSpinBox = new QSpinBox;; CCSDSTargetLogicalAddressSpinBox = new QSpinBox; gresbVirtualLinkSpinBox->setRange(0, 4); gresbVirtualLinkSpinBox->setValue(1); rmapSourceLogicalAddressSpinBox->setRange(0, 255); rmapTargetLogicalAddressSpinBox->setRange(0, 255); spwLinkSpinBox->setRange(0, 2); spwLinkSpinBox->setValue(0); //*** MISC **// starDundee = new StarDundee; gresbBridge = new gresb; tmEchoBridge = new TMEchoBridge(); console = new QTextEdit; gresbStatusQueryDialog = new QDialog; logEnableCheckBox = new QCheckBox(tr("Enable Logs")); RMAP_write_verify = new QCheckBox(tr("data checked before write\nlimited to 4 bytes\nNOT IMPLEMENTED")); RMAP_write_reply = new QCheckBox(tr("reply to the write command required\nlast reply status: unavailable")); logFile = new QFile(); wfDisplay = new WFDisplay(); tmStatistics = new TMStatistics(); logFileEn = false; connectionLayout->setRowStretch(7, 1); connectionLayout->setColumnStretch(2, 1); bridgeSelection_LAYOUT->addWidget(selectGRESB_BUTTON, 0, 0, 1, 1); bridgeSelection_LAYOUT->addWidget(selectStarDundee_BUTTON, 0, 1, 1, 1); bridgeSelection_LAYOUT->setRowStretch(1, 1); bridgeSelection_LAYOUT->setColumnStretch(2, 1); generalParameters_LAYOUT->addWidget(logEnableCheckBox, 0, 0, 1, 1); generalParameters_LAYOUT->addWidget(logFileChooseButton, 0, 1, 1, 1); generalParameters_LAYOUT->addWidget(rmapSourceLogicalAddressLabel, 1, 0, 0); generalParameters_LAYOUT->addWidget(rmapSourceLogicalAddressSpinBox, 1, 1, 0); generalParameters_LAYOUT->addWidget(rmapTargetLogicalAddressLabel, 2, 0, 0); generalParameters_LAYOUT->addWidget(rmapTargetLogicalAddressSpinBox, 2, 1, 0); generalParameters_LAYOUT->addWidget(rmapOpenCommunicationButton, 3, 0, 1, 1); generalParameters_LAYOUT->addWidget(rmapCloseCommunicationButton, 3, 1, 1, 1); generalParameters_LAYOUT->addWidget(RMAP_write_verify, 4, 0, 1, 2); generalParameters_LAYOUT->addWidget(RMAP_write_reply, 5, 0, 1, 2); generalParameters_LAYOUT->setRowStretch(6, 1); generalParameters_LAYOUT->setColumnStretch(2, 1); gresb_GROUPBOX->setLayout(gresbBridge->layout()); gresb_GROUPBOX->setVisible(false); stardundee_GROUPBOX->setLayout(starDundee->layout()); stardundee_GROUPBOX->setVisible(false); selection_GROUPBOX->setLayout(bridgeSelection_LAYOUT); generalParameters_GROUPBOX->setLayout(generalParameters_LAYOUT); selectionLayout->addWidget(selection_GROUPBOX); selectionLayout->addWidget(generalParameters_GROUPBOX); selectionLayout->addWidget(gresb_GROUPBOX); selectionLayout->addWidget(stardundee_GROUPBOX); //******** // CONSOLE consoleLayout->addWidget(console); consoleLayout->addWidget(clearConsoleButton); consoleLayout->addWidget(nbPacketInStore); connect(this->logFileChooseButton, SIGNAL(clicked()), this, SLOT(chooseLogFile())); connect(this, SIGNAL(setLogFileName(QString)), this->logFileName, SLOT(setText(QString))); connect(this->logEnableCheckBox, SIGNAL(stateChanged(int)), this, SLOT(logFileEnDisable(int))); spwTabWidget->addTab(spwTabWidgetPage0, tr("connection")); spwTabWidget->addTab(spwTabWidgetPage2, tr("status")); spwTabWidget->addTab(spwTabWidgetPage3, tr("console")); spwTabWidget->addTab(spwTabWidgetPage4, tr("TM statistics")); //spwTabWidget->addTab(spwTabWidgetPage5, tr("waveforms")); spwTabWidget->addTab(spwTabWidgetPage6, tr("TM Echo Bridge")); spwTabWidgetPage0->setLayout(selectionLayout); spwTabWidgetPage2->setLayout(this->gresbBridge->spwLinkStatusEnquiry->mainLayout); spwTabWidgetPage3->setLayout(consoleLayout); spwTabWidgetPage4->setLayout(tmStatistics->layout()); spwTabWidgetPage5->setLayout(wfDisplay->layout()); spwTabWidgetPage6->setLayout(tmEchoBridge->layout()); mainLayout->addWidget(spwTabWidget); setLayout(mainLayout); connect(this->clearConsoleButton, SIGNAL(clicked()), this->console, SLOT(clear())); // briges connect(this->selectGRESB_BUTTON, SIGNAL(clicked()), this, SLOT(selectionBetweenGresbAndStarDundee())); connect(this->selectStarDundee_BUTTON, SIGNAL(clicked()), this, SLOT(selectionBetweenGresbAndStarDundee())); connect(this->starDundee, SIGNAL(isOpen(bool)), this, SLOT(isOpen(bool))); connect(this->gresbBridge, SIGNAL(isOpen(bool)), this, SLOT(isOpen(bool))); connect(this->rmapSourceLogicalAddressSpinBox, SIGNAL(valueChanged(int)), this->gresbBridge, SLOT(sourceHasChanged(int))); connect(this->rmapTargetLogicalAddressSpinBox, SIGNAL(valueChanged(int)), this->gresbBridge, SLOT(targetHasChanged(int))); connect(this->rmapSourceLogicalAddressSpinBox, SIGNAL(valueChanged(int)), this->starDundee, SLOT(sourceHasChanged(int))); connect(this->rmapTargetLogicalAddressSpinBox, SIGNAL(valueChanged(int)), this->starDundee, SLOT(targetHasChanged(int))); // command code connect(this->RMAP_write_reply, SIGNAL(clicked()), this, SLOT(getCommandCode())); connect(this->RMAP_write_verify, SIGNAL(clicked()), this, SLOT(getCommandCode())); connect(this, SIGNAL(commandCodeHasChanged(RMAP_command_codes)), this->starDundee, SLOT(commandCodeHasChanged(RMAP_command_codes))); connect(this, SIGNAL(commandCodeHasChanged(RMAP_command_codes)), this->gresbBridge, SLOT(commandCodeHasChanged(RMAP_command_codes))); getCommandCode(); // init the command code value rmapSourceLogicalAddressSpinBox->setValue(DEFAULT_SOURCE); rmapTargetLogicalAddressSpinBox->setValue(DEFAULT_TARGET); } rmapPluginUI::~rmapPluginUI() { //delete ui; } void rmapPluginUI::chooseLogFile() { if(this->logFile->isOpen()) this->logFile->close(); this->logFile->setFileName(QFileDialog::getSaveFileName(this,tr("Open Log file"), QDir::homePath() + "/" + QDate::currentDate().toString() + "_" + QTime::currentTime().toString() + "_rmapPluginUI.log", tr("Log Files (*.txt *.log)"))); if(this->logFile->open(QIODevice::WriteOnly)) { this->logFileStrm = new QTextStream(this->logFile); emit this->setLogFileName(this->logFile->fileName()); } } void rmapPluginUI::logFileEnDisable(int state) { if(state==Qt::Checked) { this->logFileEn = true; } else if(state==Qt::Unchecked) { this->logFileEn = false; } } bool rmapPluginUI::islogfileenable() { return this->logFileEn; } void rmapPluginUI::appendToLogFile(const QString & text) { if(this->logFileEn && this->logFile->isOpen()) { *(this->logFileStrm) << text << endl; } } void rmapPluginUI::closeEvent(QCloseEvent *event) { if(this->logFile->isOpen()) { this->logFileStrm->flush(); this->logFile->waitForBytesWritten(3000); this->logFile->close(); } event->accept(); } RMAP_command_codes rmapPluginUI::getCommandCode() { RMAP_command_codes commandCode = invalid0; if (RMAP_write_verify->isChecked() and RMAP_write_reply->isChecked()) commandCode = writeSingle_ver_rep; if (RMAP_write_verify->isChecked() and !RMAP_write_reply->isChecked()) commandCode = writeSingle_ver_noRep; if (!RMAP_write_verify->isChecked() and RMAP_write_reply->isChecked()) commandCode = writeSingle_noVer_Rep; if (!RMAP_write_verify->isChecked() and !RMAP_write_reply->isChecked()) commandCode = writeSingle_noVer_noRep; emit commandCodeHasChanged(commandCode); return commandCode; } // SLOT void rmapPluginUI::selectionBetweenGresbAndStarDundee() //SLOT { if (selectGRESB_BUTTON->isChecked()) { gresb_GROUPBOX->setVisible(true); stardundee_GROUPBOX->setVisible(false); rmapOpenCommunicationButton->setEnabled(true); emit bridgeHasChanged(selectedBridgeIsGRESB); } if (selectStarDundee_BUTTON->isChecked()) { stardundee_GROUPBOX->setVisible(true); gresb_GROUPBOX->setVisible(false); rmapOpenCommunicationButton->setEnabled(true); emit bridgeHasChanged(selectedBridgeIsStarDundee); } } void rmapPluginUI::isOpen(bool flag) { if (flag == true) { selection_GROUPBOX->setEnabled(false); this->rmapOpenCommunicationButton->setEnabled(false); this->rmapCloseCommunicationButton->setEnabled(true); } if (flag == false) { selection_GROUPBOX->setEnabled(true); this->rmapOpenCommunicationButton->setEnabled(true); this->rmapCloseCommunicationButton->setEnabled(false); } }