/** * Handler for player data * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2017-02-20 */ #include "settings.h" #include "handler_target_config.h" #include using namespace TargetManagement; HandlerTargetConfig::HandlerTargetConfig(const std::shared_ptr &ddsHandler, QObject *parent) : QObject(parent) , ConfigureTargetRequestHandler(ddsHandler->ftsTgt()) , m_ddsHandler(ddsHandler) , m_dtcTab(ddsHandler->dtcTab()) , m_dtsTgt(ddsHandler->dtsTgt()) , m_logger(getLogger("HandlerTargetConfig")) { } // end of ctor() //----------------------------------------------------------------------------- bool HandlerTargetConfig::init() { INFO_LOG(m_logger) << "init"; connect(m_dtcTab.get(), &TrainingAreaBase::Interface::Dtc::targetDataChanged, this, &HandlerTargetConfig::onTargetDataChanged); return true; } // end of init() //----------------------------------------------------------------------------- void HandlerTargetConfig::onTargetDataChanged(const TrainingAreaBase::TargetData &targetData, DataModification modType) { if (modType == DataModification::eRemoved) return; uint8_t responseCmd = 100; TargetManagement::TargetConfig tgtTargetData; INFO_LOG(m_logger) << "onTargetDataChanged payload.size=" << targetData.payload.size(); tgtTargetData.participantId = m_ddsHandler->equipNo2participantId(targetData.equipmentNumber); for (size_t i = 0; i < targetData.payload.size(); i++) INFO_LOG(m_logger) << "payload[" << i << "]=" << targetData.payload[i]; if (targetData.payload.size() < 6) return; tgtTargetData.id = 0; tgtTargetData.tgtCommand = static_cast (targetData.payload[0] - responseCmd); tgtTargetData.mode = static_cast (targetData.payload[1]); tgtTargetData.weapon = targetData.payload[2]; INFO_LOG(m_logger) << "tgtTargetData.tgtCommand =" << tgtTargetData.tgtCommand << " mode=" << tgtTargetData.mode << " weapon=" << tgtTargetData.weapon; if (!m_dtsTgt->publish(tgtTargetData)) ERROR_LOG(m_logger) << "Error publish targetData"; } // end of onTargetDataChanged void HandlerTargetConfig::onSendTargetDataReply(const Core::FunctionReplyObject &replyObject) { if (replyObject.error()) WARNING_LOG(m_logger) << "Can not send target data to target participant : " << replyObject(); else DEBUG_LOG(m_logger) << "onSendTargetDataReply for id " << replyObject.id() << " success"; } // Send to TAB void HandlerTargetConfig::onConfigureTargetRequest(const rti::core::SampleIdentity &cookie, const ConfigureTargetRequest &request) { INFO_LOG(m_logger) << "onConfigureTargetRequest"; Core::FunctionReplyObject reply = Core::FunctionReplyObject(request.id); DEBUG_LOG(m_logger) << "HandlerTargetConfig onTargetConfigChanged participantId=" << request.participantId; TrainingAreaBase::SendTargetDataRequest tgt; const int participantId = request.participantId; tgt.equipmentNumber = m_ddsHandler->participantId2EquipNo(participantId); tgt.participantId = request.participantId; tgt.payload.push_back(request.tgtCommand); switch (request.tgtCommand) { case TargetManagement::TgtCommand::Unknown: case TargetManagement::TgtCommand::PlaySound: { WARNING_LOG(m_logger) << "onTargetConfigChanged Command =" << request.tgtCommand << " not handled."; m_ddsHandler->ftsTgt()->configureTargetReply(cookie, reply); return; } case TargetManagement::TgtCommand::RequestTechnicalState: case TargetManagement::TgtCommand::RequestParameter: { // No specific data to add to payload break; } case TargetManagement::TgtCommand::SetMode: { if (!request.mode.is_set()) { ERROR_LOG(m_logger) << "Set mode requested, but mode ist not set"; m_ddsHandler->ftsTgt()->configureTargetReply(cookie, Core::FunctionReplyObject(request.participantId, tr_lts("dds", "Set mode requested, but mode is not set"))); return; } tgt.payload.push_back(request.mode.get()); break; } case TargetManagement::TgtCommand::SetWeapon: { if (!request.weapon.is_set()) { ERROR_LOG(m_logger) << "Set weapon requested, but weapon ist not set"; m_ddsHandler->ftsTgt()->configureTargetReply(cookie, Core::FunctionReplyObject(request.participantId, tr_lts("dds", "Set weapon requested, but weapon is not set"))); return; } tgt.payload.push_back(request.weapon.get()); break; } case TargetManagement::TgtCommand::SetParameter: { if (!request.parameterSet.is_set()) { ERROR_LOG(m_logger) << "Set parameterset requested, but parameterset ist not set"; m_ddsHandler->ftsTgt()->configureTargetReply(cookie, Core::FunctionReplyObject(request.participantId, tr_lts("dds", "Set parameterset requested, but parameterset is not set"))); return; } tgt.payload.push_back(request.parameterSet.get()); break; } } m_ddsHandler->ftcTab()->sendTargetDataRequest(tgt, this); // Todo: Wait for Reply and forward? m_ddsHandler->ftsTgt()->configureTargetReply(cookie, reply); } // end of onConfigureTargetRequest