##// END OF EJS Templates
Minor bugs corrected in wfdisplay
Minor bugs corrected in wfdisplay

File last commit:

r28:66e3fbb189eb default
r43:570fea6226a1 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;
}