61 QNetworkDatagram data;
65 qDebug() <<
"Receiving DENM";
90 fprintf(stderr,
"DENM received has wrong message ID: %ld instead of %d\n", d->header.messageID,
messageID_denm);
94 printf(
"DENM decoded :\n");
99 qDebug() <<
"New received DENM added size" <<
m_receivedDENM.size();
107 quint64 receivedDetectionTime;
111 expiration = receivedDetectionTime + validity * 1000;
115 if(expiration < m_paramGPS->timestamp())
117 qDebug() <<
"Received DENM is expired expiration =" << expiration <<
"now = " <<
m_paramGPS->
timestamp()
118 <<
"diff =" << (qint64)(expiration -
m_paramGPS->
timestamp()) <<
"received =" << receivedDetectionTime
119 <<
"validity =" << validity;
139 qDebug() <<
"Received DENM is a terminated DENM of an unknown DENM";
153 entry->moveToThread(entry->
m_thread);
155 qDebug() <<
"145 thread start";
159 qDebug() <<
"New received DENM added size" <<
m_receivedDENM.size();
165 quint64 receivedReferenceTime, tableDetectionTime, tableReferenceTime;
170 if(receivedReferenceTime < tableReferenceTime || receivedDetectionTime < tableDetectionTime)
173 qDebug() <<
"Received DENM has wrong detectionTime or referenceTime:\n" 174 <<
"Received DT =" << receivedDetectionTime <<
"Table DT =" << tableDetectionTime <<
"diff =" <<
175 (qint64)(receivedDetectionTime - tableDetectionTime) <<
"\n" 176 <<
"Received RT =" << receivedReferenceTime <<
"Table RT =" << tableReferenceTime <<
"diff =" <<
177 (qint64)(receivedReferenceTime - tableReferenceTime);
183 if(receivedReferenceTime == tableReferenceTime &&
184 receivedDetectionTime == tableDetectionTime)
192 qDebug() <<
"Received DENM is a repeated DENM";
205 qDebug() <<
"Start/Restart T_R_Validity";
211 QDataStream ds(&resUt, QIODevice::WriteOnly);
214 ds << (quint8)0x17 << (quint16)((erval.
encoded + 7) >> 3);
215 ds.writeRawData(QByteArray(msg, (erval.
encoded + 7) >> 3), (erval.
encoded + 7) >> 3);
218 qDebug() << resUt.toHex() <<
"sent to" << QHostAddress::LocalHost <<
appPort;
245 quint64 expirationTime;
247 memset(&denm, 0,
sizeof denm);
272 qDebug() <<
"Unable to pass DENM to N&T";
307 memset(&denmToSend, 0,
sizeof denmToSend);
330 qDebug() <<
"Unable to pass DENM to N&T";
344 dr.
payload = QByteArray(msg, denmLength);
349 qDebug() <<
"error " << foo;
359 msg = result.
toBin();
374 denm2app->writeDatagram(termination.toBin(), QHostAddress::LocalHost,
appPort);
385 "not found in the received message table";
#define ASN_SEQUENCE_ADD(headptr, ptr)
denMessageTableReceptionThread * m_reception
gnDataRequest_t structure is the GN data request definition.
struct AlacarteContainer * alacarte
void setSequenceNumberSlot(quint16)
setSequenceNumberSlot Slot used when a new sequenceNumber is made.
QMutex * m_mutexReception
TrafficClassData trafficClass() const
trafficClass Traffic class getter.
struct asn_TYPE_descriptor_s * failed_type
DecentralizedEnvironmentalNotificationMessage_t denm
void discardDENM(int index)
discardDENM Discard DENM from DEN Message Table Reception.
void AppDENM_negation(AppDenmTerminationData termination, ActionID_t actionID)
AppDENM_negation Negation of a DENM.
bool fill_AlacarteContainer(AppDenmTriggerData data, AlacarteContainer_t *alacarte)
fill_AlacarteContainer Fills the AlacarteContainer.
void utInitialize()
utInitialize Slot used to initialize the DEN Reception Management.
StationID_t originatingStationID
struct SituationContainer * situation
Termination_t * termination
asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const void *buffer, size_t size)
void print_hexa(const unsigned char *msg, int l, FILE *stream=stdout)
print_hexa Print a byte array.
struct ImpactReductionContainer * impactReduction
gnDataRequest_t gnDataRequestFromAppDenmTriggerData(AppDenmTriggerData data, ParameterGPS gps)
gnDataRequestFromAppDenmTriggerData Generate a GN Data Request from an AppDenmTriggerData.
void setActionID(ActionID_t a)
setActionID DENM's ActionID setter.
~denReceptionManagement()
quint64 timestamp()
timestamp Timestamp getter.
SequenceNumber_t sequenceNumber
FakeApplicationProvider * m_paramAppli
ParameterConfiguration * m_paramConf
QByteArray toBin()
toBin Encode an AppDenmTerminationIndication into a byte array.
ParameterCAN & data()
data CAN bus data getter.
FakeCANProvider * m_paramCan
int asn_long2INTEGER(INTEGER_t *i, long l)
void setT_R_Validity(qint64 t)
setT_R_Validity Set the T_R_Validity.
quint8 toInt()
toInt TrafficClassData encoder in a byte.
ParameterDENM * m_paramDENM
void setDENM(DENM_t d)
setDENM Set the DENM
TimestampIts_t referenceTime
void addBTPPort(quint16 port, quint16 portInfo, quint16 internal)
addBTPPort Add BTP port to the internal BTP ports.
QByteArray toBin()
toBin Encode the AppDenmResultData into a byte array.
DestinationAreaData destinationArea() const
destinationArea Destination area getter.
ValidityDuration_t * validityDuration
DEN Reception Management.
int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l)
quint16 internalPort(QString service)
internalPort Get the internal BTP port from service name.
void setT_O_Validity(qint64 t)
setT_O_Validity T_O_Validity setter.
ParameterGPS & data()
data GPS data getter.
QUdpSocket * m_internalSocket
denReceptionManagement(FakeGPSProvider *gps, FakeApplicationProvider *appli, ParameterDENM *denm, GeoNet *gn, ParameterConfiguration *conf, FakeCANProvider *can, ParameterNetwork *network)
denReceptionManagement denReceptionManagement constructor.
bool fill_ManagementContainer(AppDenmTriggerData data, ManagementContainer_t *management, ParameterApplication *appli, ParameterGPS gps)
fill_ManagementContainer Fills the ManagementContainer.
void addPort(QString service, quint16 port)
addPort Add BTP port to the internal BTP ports from service name.
TimestampIts_t detectionTime
quint16 internalBTPPort(quint16 port, quint16 portInfo)
internalBTPPort Get the internal BTP port.
enum AppDenmResultData::failureNotification_enum e_failureNotification
The e_failureNotification enum defines the success or failure code.
void discardDENMFromReceivedTable(ActionID_t)
discardDENMFromReceivedTable Slot used when a DENM is discarded from Received Table.
void setActionID(ActionID_t a)
setActionID Set the DENM's ActionID.
enum asn_dec_rval_code_e code
asn_enc_rval_t uper_encode_to_buffer(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, void *buffer, size_t buffer_size)
int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr)
void killReceptionThreads()
killReceptionThreads Kills active threads.
RequestResponseIndication_t requestResponseIndication
StationID_t stationID() const
stationID Station ID getter.
struct LocationContainer * location
ParameterApplication & data()
data Returns the vehicle status.
void setSequenceNumberSignal(quint16)
setSequenceNumberSignal Signal used when a new sequenceNumber is set.
void kaf(DENM_t *)
kaf Signal used to invoke KAF.
SequenceNumber_t m_sequenceNumber
bool PassDenmToNetworkAndTransportLayerTrigger(AppDenmTriggerData data, char *msg, int denmLength)
PassDenmToNetworkAndTransportLayerTrigger Pass the response DENM to the N&T layer.
void denmReception(DENM_t *)
denmReception Reception of a DENM.
void decodeDenm(QByteArray data)
decodeDenm Decode DENM.
ManagementContainer_t management
int send(gnDataRequest_t gnDR)
send Creates the BTP and then select the correct packet send option.
asn_TYPE_descriptor_t asn_DEF_DENM
void AppDENM_result(ActionID_t actionID, bool success, AppDenmResultData::e_failureNotification failureNotification, DENM_t *denm)
AppDENM_result Notification to the Application layer of the success of DENM sent. ...
quint16 denmDestinationPortInfo() const
denmDestinationPortInfo DENM destination port info getter.
FakeGPSProvider * m_paramGPS
ItsPduHeader_t fill_ItsPduHeader(StationID_t stationID)
fill_ItsPduHeader Fills the ItsPduHeader.
quint16 denmDestinationPort() const
denmDestinationPort DENM destination port getter.
void readDatagram()
readDatagram Slot used to receive DENM.
void setDENM(DENM_t d)
setDENM DENM setter.
QVector< denMessageTableReception * > m_receivedDENM
void sendRequestResponseIndication_Response(SituationContainer_t *s, ActionID_t originatingActionID)
sendRequestResponseIndication_Response Sends a RequestResponIndication DENM of type Response when a D...
int haveDENM(ActionID_t actionID, QVector< denMessageTableSource *> table)
haveDENM Check if the DENM exists in the denMessageTableSource
void setTrafficClass(quint8 t)
setTrafficClass DENM's traffic class setter.
void appDenmResult(QByteArray)
appDenmResult Signal used when notification is made to the Application layer.