ITS
denBasicService.cpp
Go to the documentation of this file.
1 #include "denBasicService.h"
2 
5 {
6 
7  m_denm2app = new QUdpSocket(this);
8  m_denm2app->bind();
9  network->addPort("DENM", m_denm2app->localPort());
10  QObject::connect(m_denm2app, SIGNAL(readyRead()), this, SLOT(getAppRequest()));
11  m_appliPort = network->internalPort("Application");
12 
13  m_paramAppli = appli;
14  m_paramDENM = denm;
15 
16  m_denmReception = new denReceptionManagement(gps, appli, denm, gn, conf, can, network);
17  m_denmReceptionThread = new QThread;
18  m_denmTriggering = new denTriggeringManagement(gps, appli, denm, gn, conf, can, network);
19  m_denmTriggeringThread = new QThread;
20  if(m_paramDENM->kaf())
21  {
22  m_denKAF = new denKAFManagement(gps, appli, gn);
23  m_denKAFThread = new QThread;
24  m_denKAF->moveToThread(m_denKAFThread);
25  QObject::connect(m_denmReception, SIGNAL(kaf(DENM_t*)), m_denKAF, SLOT(kaf(DENM_t*)));
26  QObject::connect(this, SIGNAL(utInitializeSignal()), m_denKAF, SLOT(utInitialize()));
27  m_denKAFThread->start();
28  }
29  else
30  {
31  m_denKAF = 0;
32  m_denKAFThread = 0;
33  }
34 
37 
38  QObject::connect(m_denmReceptionThread, SIGNAL(started()), m_denmReception, SLOT(execute()));
39  QObject::connect(m_denmTriggering, SIGNAL(setSequenceNumberSignal(quint16)),
40  m_denmReception, SLOT(setSequenceNumberSlot(quint16)));
41  QObject::connect(m_denmReception, SIGNAL(setSequenceNumberSignal(quint16)),
42  m_denmTriggering, SLOT(setSequenceNumberSlot(quint16)));
43  QObject::connect(this, SIGNAL(utInitializeSignal()), m_denmReception, SLOT(utInitialize()));
44  QObject::connect(this, SIGNAL(utInitializeSignal()), m_denmTriggering, SLOT(utInitialize()));
45  QObject::connect(m_denmReception, SIGNAL(appendTriggeredDenm(denMessageTableSource*)),
46  m_denmTriggering, SLOT(appendTriggeredDenm(denMessageTableSource*)));
47  QObject::connect(m_denmReception, SIGNAL(appDenmResult(QByteArray)), this, SLOT(appDenmResult(QByteArray)));
48  QObject::connect(m_denmTriggering, SIGNAL(appDenmResult(QByteArray)), this, SLOT(appDenmResult(QByteArray)));
49 
50  m_denmReceptionThread->start();
51  m_denmTriggeringThread->start();
52 }
53 
54 void denBasicService::appDenmResult(QByteArray msg)
55 {
56  qDebug() << msg.toHex() << "sent to" << m_appliAddr << m_appliPort;
57  m_denm2app->writeDatagram(msg, QHostAddress::LocalHost, m_appliPort);
58 }
59 
61 {
62  sleep(1);
65  if(m_denKAF)
67  QThread::sleep(1);
68  qDebug() << "denUtInitialize ended";
69 }
70 
72 {
73 
74  while(m_denm2app->hasPendingDatagrams())
75  {
76  QNetworkDatagram datagram = m_denm2app->receiveDatagram();
77 
78  qInfo() << "DEN Basic service (" << m_denm2app->localPort() << ") received" << datagram.data().toHex() << "from" << datagram.senderPort();
79 
80  m_appliPort = datagram.senderPort();
81  m_appliAddr = datagram.senderAddress();
82 
83  if(datagram.data().at(0) == m_paramDENM->mtAppDENMTrigger())
84  m_denmTriggering->AppDENM_trigger(datagram.data());
85  else if(datagram.data().at(0) == m_paramDENM->mtAppDENMUpdate())
86  m_denmTriggering->AppDENM_update(datagram.data());
87  else if(datagram.data().at(0) == m_paramDENM->mtAppDENMTermination())
88  AppDENM_terminate(datagram.data());
89  qInfo() << "DEN Basic service finished";
90  }
91 }
92 
93 
94 
95 void denBasicService::AppDENM_terminate(QByteArray datagram)
96 {
97  AppDenmTerminationData termination(datagram);
98  ActionID_t actionID;
99 
100  actionID.originatingStationID = termination.actionID().originatingStationID();
101  actionID.sequenceNumber = termination.actionID().sequenceNumber();
102 
103  if(actionID.originatingStationID == m_paramAppli->data().stationID())
104  m_denmTriggering->AppDENM_cancellation(termination, actionID);
105  else
106  m_denmReception->AppDENM_negation(termination, actionID);
107 }
denTriggeringManagement * m_denmTriggering
QThread * m_denKAFThread
denBasicService(FakeGPSProvider *gps, FakeApplicationProvider *appli, ParameterDENM *denm, GeoNet *gn, ParameterConfiguration *conf, FakeCANProvider *can, ParameterNetwork *network)
denBasicService denBasicService constructor.
void AppDENM_negation(AppDenmTerminationData termination, ActionID_t actionID)
AppDENM_negation Negation of a DENM.
void AppDENM_cancellation(AppDenmTerminationData termination, ActionID_t actionID)
AppDENM_cancellation Cancels a DENM.
void utInitialize()
utInitialize Slot used to initialize the DEN Reception Management.
StationID_t originatingStationID
Definition: ActionID.h:24
void utInitialize()
utInitialize Initializes the DEN Triggering Management.
QThread * m_denmReceptionThread
SequenceNumber_t sequenceNumber
Definition: ActionID.h:25
void AppDENM_trigger(QByteArray datagram)
AppDENM_trigger Triggers a DENM.
void utInitialize()
utInitialize Initialize the DEN KAF Management.
void utInitializeSignal()
utInitializeSignal Signal used when receiving an UtInitialize.
void appDenmResult(QByteArray)
appDenmResult Notify request result to the Application layer.
quint16 sequenceNumber() const
sequenceNumber Sequence number getter.
Definition: ActionIDData.h:43
void getAppRequest()
getAppRequest Slot used when receiving an Application request.
denReceptionManagement * m_denmReception
quint16 internalPort(QString service)
internalPort Get the internal BTP port from service name.
void AppDENM_terminate(QByteArray datagram)
AppDENM_terminate Terminate a DENM.
denKAFManagement * m_denKAF
void addPort(QString service, quint16 port)
addPort Add BTP port to the internal BTP ports from service name.
quint8 mtAppDENMUpdate() const
mtAppDENMUpdate Message type for AppDENM_update getter.
Definition: ParameterDENM.h:43
DEN Basic Service.
QUdpSocket * m_denm2app
FakeApplicationProvider * m_paramAppli
ParameterDENM * m_paramDENM
quint8 mtAppDENMTrigger()
mtAppDENMTrigger Message type for AppDENM_trigger getter.
Definition: ParameterDENM.h:38
StationID_t stationID() const
stationID Station ID getter.
Definition: DENM.h:23
ParameterApplication & data()
data Returns the vehicle status.
QThread * m_denmTriggeringThread
void AppDENM_update(QByteArray datagram)
AppDENM_update Updates a DENM.
ActionIDData actionID() const
actionID ActionID getter.
void utInitialize()
utInitialize Initialize the ITS-S.
quint32 originatingStationID() const
originatingStationID Originating station ID getter.
Definition: ActionIDData.h:38
QHostAddress m_appliAddr
Definition: Geonet.h:42
bool kaf() const
kaf Is the KAF used?
Definition: ParameterDENM.h:58
quint8 mtAppDENMTermination() const
mtAppDENMTermination Message type for AppDENM_termination getter.
Definition: ParameterDENM.h:48