|
|
#include "tmechobridge.h"
|
|
|
|
|
|
TMEchoBridge::TMEchoBridge(QWidget *parent) :
|
|
|
QWidget(parent)
|
|
|
{
|
|
|
totalOfBytes = 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: -"));
|
|
|
|
|
|
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"));
|
|
|
|
|
|
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_totalOfBytes, 5, 0, 1, 2);
|
|
|
layout_ports->setRowStretch(6, 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()));
|
|
|
}
|
|
|
|
|
|
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->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();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this->displayOnConsole("TM socket *** " + socketStates.at(tmEchoBridgeSocket->state()) );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void TMEchoBridge::sendTMPacket(TMPacketToRead *tmPacketToRead)
|
|
|
{
|
|
|
if (tmEchoBridgeSocket->state() == QAbstractSocket::ConnectedState)
|
|
|
{
|
|
|
// <Event>
|
|
|
xmlWriter->writeStartElement("Event");
|
|
|
|
|
|
// EventDate
|
|
|
xmlWriter->writeStartElement("EventDate");
|
|
|
xmlWriter->writeEndElement();
|
|
|
|
|
|
// Event Time
|
|
|
xmlWriter->writeStartElement("EventTime");
|
|
|
xmlWriter->writeEndElement();
|
|
|
|
|
|
// EventBinary
|
|
|
xmlWriter->writeStartElement("EventBinary");
|
|
|
xmlWriter->writeCharacters(
|
|
|
QByteArray::fromRawData( (char*) tmPacketToRead->Value, tmPacketToRead->size).toHex()
|
|
|
);
|
|
|
//tmEchoBridgeSocket->write(QByteArray::fromRawData( (char*) tmPacketToRead->Value, tmPacketToRead->size));
|
|
|
xmlWriter->writeEndElement();
|
|
|
|
|
|
// </event>
|
|
|
xmlWriter->writeEndElement();
|
|
|
|
|
|
totalOfBytes = totalOfBytes + tmPacketToRead->size;
|
|
|
label_totalOfBytes->setText("Number of TM bytes sent: " + QString::number(totalOfBytes));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this->displayOnConsole("TM socket *** " + socketStates.at(tmEchoBridgeSocket->state()) );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void TMEchoBridge::clearConsole()
|
|
|
{
|
|
|
this->console->clear();
|
|
|
}
|
|
|
|