##// END OF EJS Templates
QSettings used in the lfrsgse to store the IP address of the echo bridge
QSettings used in the lfrsgse to store the IP address of the echo bridge

File last commit:

r28:66e3fbb189eb default
r28:66e3fbb189eb default
Show More
tmechobridge.cpp
207 lines | 6.9 KiB | text/x-c | CppLexer
#include "tmechobridge.h"
TMEchoBridge::TMEchoBridge(QWidget *parent) :
QWidget(parent)
{
totalOfBytes = 0;
totalOfPackets = 0;
totalOfPacketsDropped = 0;
tmEchoBridgeServer = new QTcpServer();
tmEchoBridgeSocket = new QTcpSocket();
xmlWriter = new QXmlStreamWriter();
console = new QTextEdit();
label_TMServerPort = new QLabel(tr("TM Server Port:"));
label_totalOfBytes = new QLabel(tr("Number of TM bytes sent: -"));
label_totalOfPackets = new QLabel(tr("Number of TM packets sent: -"));
label_totalOfPacketsDropped = new QLabel(tr("Number of TM packets dropped: -"));
spinbox_TMServerPort = new QSpinBox();
spinbox_TMServerPort->setRange(59002, 65535);
button_openServerTCTM = new QPushButton(tr("Open Port"));
button_testServerTCTM = new QPushButton(tr("Test Port"));
button_sendTestPacket = new QPushButton(tr("Send a test packet"));
button_clearConsole = new QPushButton(tr("Clear console"));
button_resetTMStatistics = new QPushButton(tr("Reset TM Statistics"));
groupbox_ports = new QGroupBox(tr("Port of the TM Echo Bridge"));
layout_ports = new QGridLayout();
mainLayout = new QGridLayout();
initSocketStatesList();
layout_ports->addWidget(label_TMServerPort, 0, 0, 1, 1);
layout_ports->addWidget(spinbox_TMServerPort, 0, 1, 1, 1);
layout_ports->addWidget(button_openServerTCTM, 2, 0, 1, 2);
layout_ports->addWidget(button_testServerTCTM, 3, 0, 1, 2);
layout_ports->addWidget(button_sendTestPacket, 4, 0, 1, 2);
layout_ports->addWidget(label_totalOfPackets, 5, 0, 1, 2);
layout_ports->addWidget(label_totalOfBytes, 6, 0, 1, 2);
layout_ports->addWidget(label_totalOfPacketsDropped, 7, 0, 1, 2);
layout_ports->addWidget(button_resetTMStatistics, 8, 0, 1, 2);
layout_ports->setRowStretch(9, 1);
layout_ports->setColumnStretch(2, 1);
groupbox_ports->setLayout(layout_ports);
mainLayout->addWidget(groupbox_ports, 0, 0, 1, 1);
mainLayout->addWidget(console, 0, 1, 1, 1);
mainLayout->addWidget(button_clearConsole, 1, 1, 1, 1);
this->setLayout(mainLayout);
connect(this->tmEchoBridgeServer, SIGNAL(newConnection()), this, SLOT(newConnectionOnTMEchoBridgeServer()));
connect(this->button_openServerTCTM, SIGNAL(clicked()), this, SLOT(listenOnTMEchoBridgePort()));
connect(this->button_testServerTCTM, SIGNAL(clicked()), this, SLOT(testTMEchoBridgePort()));
connect(this->button_sendTestPacket, SIGNAL(clicked()), this, SLOT(sendXML_GSE_HK()));
connect(this->button_clearConsole, SIGNAL(clicked()), this, SLOT(clearConsole()));
connect(this->button_resetTMStatistics, SIGNAL(clicked()), this, SLOT(resetTMStatistics()));
}
void TMEchoBridge::listenOnTMEchoBridgePort()
{
QString str;
tmEchoBridgeServer->listen(QHostAddress::Any, this->getTMPort());
str = tmEchoBridgeServer->errorString();
if (!str.isEmpty())
{
this->displayOnConsole(str);
}
this->displayOnConsole("Listening TM on port "
+ QString::number(this->getTMPort())
);
}
void TMEchoBridge::testTMEchoBridgePort()
{
if (tmEchoBridgeSocket != NULL)
{
this->displayOnConsole("TM socket *** " + socketStates.at(tmEchoBridgeSocket->state()) );
}
else
{
this->displayOnConsole("TC socket *** not tested, (socketTC) is NULL" );
}
}
void TMEchoBridge::newConnectionOnTMEchoBridgeServer()
{
this->displayOnConsole("got new connection on TM port");
tmEchoBridgeSocket = tmEchoBridgeServer->nextPendingConnection();
this->displayOnConsole("TM socket *** " + socketStates.at(tmEchoBridgeSocket->state()) );
xmlWriter->setDevice(this->tmEchoBridgeSocket);
}
int TMEchoBridge::getTMPort()
{
return spinbox_TMServerPort->value();
}
void TMEchoBridge::displayOnConsole(QString message)
{
console->append(message);
}
void TMEchoBridge::initSocketStatesList()
{
socketStates.append("The socket is not connected");
socketStates.append("The socket is performing a host name lookup");
socketStates.append("The socket has started establishing a connection");
socketStates.append("A connection is established");
socketStates.append("The socket is bound to an address and port (for servers)");
socketStates.append("The socket is about to close (data may still be waiting to be written)");
socketStates.append("For internal use only");
}
void TMEchoBridge::sendXML_GSE_HK()
{
char data[10];
for (int i = 0; i <10; i++)
{
data[i] = i;
}
if (tmEchoBridgeSocket->state() == QAbstractSocket::ConnectedState)
{
xmlWriter->writeStartDocument();
xmlWriter->writeStartElement("Event");
// EventDate
xmlWriter->writeStartElement("EventDate");
xmlWriter->writeEndElement();
// Event Time
xmlWriter->writeStartElement("EventTime");
xmlWriter->writeEndElement();
// EventBinary
xmlWriter->writeStartElement("EventBinary");
xmlWriter->writeCharacters("FFFFCC0099");
xmlWriter->writeCharacters(QString::fromLocal8Bit(data, 10));
xmlWriter->writeEndElement();
xmlWriter->writeEndElement();
xmlWriter->writeEndDocument();
}
else
{
this->displayOnConsole("TM socket *** " + socketStates.at(tmEchoBridgeSocket->state()) );
}
}
void TMEchoBridge::sendTMPacket(TMPacketToRead *tmPacketToRead)
{
QByteArray ccsdsArray;
QTime echoBridgeTimeout;
if (tmEchoBridgeSocket->state() == QAbstractSocket::ConnectedState)
{
ccsdsArray.append("<Event>");
ccsdsArray.append("<EventDate>");
ccsdsArray.append("</EventDate>");
ccsdsArray.append("<EventTime>");
ccsdsArray.append("</EventTime>");
ccsdsArray.append("<EventBinary>");
ccsdsArray.append(QByteArray::fromRawData( (char*) tmPacketToRead->Value, tmPacketToRead->size).toHex());
ccsdsArray.append("</EventBinary>");
ccsdsArray.append("</Event>");
tmEchoBridgeSocket->write(ccsdsArray);
tmEchoBridgeSocket->flush();
totalOfBytes = totalOfBytes + tmPacketToRead->size;
totalOfPackets = totalOfPackets + 1;
label_totalOfBytes->setText("Number of TM bytes sent: " + QString::number(totalOfBytes));
label_totalOfPackets->setText("Number of TM packets sent: " + QString::number(totalOfPackets));
}
else
{
totalOfPacketsDropped = totalOfPacketsDropped + 1;
label_totalOfPacketsDropped->setText("Number of TM packets dropped: " + QString::number(totalOfPacketsDropped));
}
}
void TMEchoBridge::clearConsole()
{
this->console->clear();
}
void TMEchoBridge::resetTMStatistics()
{
label_totalOfBytes->setText("Number of TM bytes sent: -");
label_totalOfPackets->setText("Number of TM packets sent: -");
label_totalOfPacketsDropped->setText("Number of TM packets dropped: -");
totalOfBytes = 0;
totalOfPackets = 0;
totalOfPacketsDropped = 0;
}