##// END OF EJS Templates
Plugin modified to allow the launch of interactiv tests from the python interpreter...
Plugin modified to allow the launch of interactiv tests from the python interpreter the signal processPacketStoreNowSig is sent by the SLOT processPacketStoreLater(unsigned int delay) the SLOT WriteSPWDelay(QList<int> dataList, unsigned int delay) allows the storage of a TC for a sending after "delay" ms

File last commit:

r11:0c9852fa341b default
r11:0c9852fa341b default
Show More
rmappluginui.cpp
298 lines | 13.2 KiB | text/x-c | CppLexer
/*------------------------------------------------------------------------------
-- 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)
{
spectralMatricesDMASimulator = new SpectralMatricesDMASimulator;
spwTabWidget = new QTabWidget;
QWidget* spwTabWidgetPage0 = new QWidget;
QWidget* spwTabWidgetPage1 = new QWidget;
QWidget* spwTabWidgetPage2 = new QWidget;
QWidget* spwTabWidgetPage3 = new QWidget;
QWidget* spwTabWidgetPage4 = new QWidget;
bridgeWidget = new QWidget;
mainLayout = new QVBoxLayout;
connectionLayout = new QGridLayout;
ccsdsLayout = new QVBoxLayout;
consoleLayout = new QVBoxLayout;
selectionLayout = new QVBoxLayout;
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"));
sendCCSDSCommandLabel = new QLabel(tr("Address of the target"));
//*** 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"));
sendCCSDSCommandButton = new QPushButton(tr("Send CCSDS Command"));
send_TC_LFR_UPDATE_TIME_Button = new QPushButton(tr("Send TC_LFR_UPDATE_TIME Packet"));
reset_TC_LFR_UPDATE_TIME_Button = new QPushButton(tr("reset the TC_LFR_UPDATE_TIME Packet coarse and fine times"));
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);
rmapSourceLogicalAddressSpinBox->setValue(0);
rmapTargetLogicalAddressSpinBox->setRange(0, 255);
spwLinkSpinBox->setRange(0, 2);
spwLinkSpinBox->setValue(0);
CCSDSTargetLogicalAddressSpinBox->setRange(0,255);
CCSDSTargetLogicalAddressSpinBox->setValue(0);
//*** MISC **//
starDundee = new StarDundee;
gresbBridge = new gresb;
console = new QTextEdit;
//gresbBridgeIPDialogBox = new QIPDialogBox;
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"));
spwLinkStatusEnquiry = new gresbStatusEnquiry;
logFile = new QFile();
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);
ccsdsLayout->addWidget(sendCCSDSCommandButton);
ccsdsLayout->addWidget(send_TC_LFR_UPDATE_TIME_Button);
ccsdsLayout->addWidget(reset_TC_LFR_UPDATE_TIME_Button);
ccsdsLayout->addWidget(sendCCSDSCommandLabel);
ccsdsLayout->addWidget(CCSDSTargetLogicalAddressSpinBox);
consoleLayout->addWidget(console);
consoleLayout->addWidget(clearConsoleButton);
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(spwTabWidgetPage1, tr("ccsds"));
spwTabWidget->addTab(spwTabWidgetPage2, tr("status"));
spwTabWidget->addTab(spwTabWidgetPage3, tr("console"));
spwTabWidget->addTab(spwTabWidgetPage4, tr("DMA"));
spwTabWidgetPage0->setLayout(selectionLayout);
spwTabWidgetPage1->setLayout(ccsdsLayout);
spwTabWidgetPage2->setLayout(this->spwLinkStatusEnquiry->mainLayout);
spwTabWidgetPage3->setLayout(consoleLayout);
spwTabWidgetPage4->setLayout(spectralMatricesDMASimulator->mainLayout);
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);
}
}