Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Convert SfmMessages to Wls representation and vice versa
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Christian Ehrlicher, SLSE, 2017-01-10
|
||||
*/
|
||||
|
||||
#include "wls_sfm_message_converter.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QSharedPointer>
|
||||
|
||||
#include <LtsUtilsCore/sfm_bytemessage_converter.h>
|
||||
|
||||
#include "logger.h"
|
||||
|
||||
namespace WirelessLocationSystem
|
||||
{
|
||||
|
||||
namespace SfmMessageConverter
|
||||
{
|
||||
|
||||
/**
|
||||
* \brief Alloziiert auf Basis der Parameter ein SfmMessage_rx-Kindobjekt
|
||||
*
|
||||
* \author B. Ziegler
|
||||
*
|
||||
* \param id Die ID der Nachricht
|
||||
*
|
||||
* \return Falls möglich ein entsprechendes Kindobjekt, sonst einen Null-Pointer
|
||||
*/
|
||||
|
||||
static SfmMessage_rx *getSpecificSfmMessage(SfmMessage::MsgId p_id)
|
||||
{
|
||||
switch (p_id)
|
||||
{
|
||||
case SfmMessage::MsgId::SfmRestartNotification:
|
||||
return new SfmMsgSfmRestart_rx;
|
||||
case SfmMessage::MsgId::EquipmentId:
|
||||
return new SfmMsgEquipmentId;
|
||||
case SfmMessage::MsgId::TacticalState:
|
||||
return new SfmMsgTacticalState_rx;
|
||||
case SfmMessage::MsgId::LicenseState:
|
||||
return new SfmMsgLicenseState_rx;
|
||||
case SfmMessage::MsgId::TetraMessage:
|
||||
return new SfmMsgTetra_rx;
|
||||
case SfmMessage::MsgId::Acknowledge:
|
||||
return new Acknowledge_rx;
|
||||
case SfmMessage::MsgId::RequestGpsControl:
|
||||
return new SfmMsgRequestGpsControl_rx;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QByteArray generateTxMessage(const SfmMessage_tx &message)
|
||||
{
|
||||
// Converting to LtsUtils::SfmMessage
|
||||
LtsUtils::SfmMessage msg;
|
||||
|
||||
msg.setId(static_cast<int>(message.getId()) & 0x7FFF);
|
||||
msg.setRtr(static_cast<int>(message.getId()) & 0x8000);
|
||||
msg.setPayload(message.getPayload());
|
||||
|
||||
return LtsUtils::byteStreamFromSfmMessage(msg).toHex();
|
||||
}
|
||||
|
||||
QSharedPointer<SfmMessage_rx> generateRxMessage(const QByteArray &data)
|
||||
{
|
||||
LtsUtils::SfmMessage message;
|
||||
SfmMessage_rx *msg = nullptr;
|
||||
|
||||
try
|
||||
{
|
||||
message = LtsUtils::byteStreamToSfmMessage(QByteArray::fromHex(data));
|
||||
}
|
||||
catch (const LtsUtils::ConversionError &ex)
|
||||
{
|
||||
ERROR_LOG(getLogger("SfmMessageConverter")) << "Error parsing bytestream: " << data << " Exception: " << ex.what();
|
||||
return QSharedPointer<SfmMessage_rx>(msg);
|
||||
}
|
||||
|
||||
/// Erzeugen der entsprechenden Kind-Klasse from LtsUtils::SfmMessage
|
||||
SfmMessage::MsgId msgId = static_cast<SfmMessage::MsgId>(message.id() | (message.rtr() << 15));
|
||||
msg = getSpecificSfmMessage(msgId);
|
||||
if (!msg)
|
||||
{
|
||||
ERROR_LOG(getLogger("SfmMessageConverter")) << "Error creating SfmMessage for message with id: " << message.id()
|
||||
<< ", rtr: " << message.rtr()
|
||||
<< ", combined: 0x" << QString::number(int(msgId));
|
||||
}
|
||||
else if (!msg->setPayload(message.payload()))
|
||||
{
|
||||
delete msg;
|
||||
msg = nullptr;
|
||||
}
|
||||
|
||||
return QSharedPointer<SfmMessage_rx>(msg);
|
||||
}
|
||||
|
||||
} // namespace SfmMessageConverter
|
||||
|
||||
} // namespace WirelessLocationSystem
|
||||
|
||||
Reference in new issue
Block a user