#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; if (tmEchoBridgeSocket->state() == QAbstractSocket::ConnectedState) { ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(QByteArray::fromRawData( (char*) tmPacketToRead->Value, tmPacketToRead->size).toHex()); ccsdsArray.append(""); ccsdsArray.append(""); 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::sendTMPacketLESIA(TMPacketToRead *tmPacketToRead) { QByteArray ccsdsArray; if (tmEchoBridgeSocket->state() == QAbstractSocket::ConnectedState) { ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(""); ccsdsArray.append(QByteArray::fromRawData( (char*) &tmPacketToRead->Value[4], tmPacketToRead->size-4).toHex()); ccsdsArray.append(""); ccsdsArray.append(""); 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; }