##// END OF EJS Templates
plugin updated, TM packet store reworked to store any TM continuously...
plugin updated, TM packet store reworked to store any TM continuously test done in NORMAL mode

File last commit:

r13:482a184909ef default
r13:482a184909ef default
Show More
rmappluginui.cpp
301 lines | 13.3 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"));
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"));
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);
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(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);
}
}