94 QNetworkDatagram datagram =
m_readSocket->receiveDatagram();
95 unsigned char request = datagram.data().at(0);
96 QByteArray req = datagram.data();
97 printf(
"request : %X, senderAddr : %s, senderPort : %d\n", request,
98 datagram.senderAddress().toString().toStdString().c_str(), datagram.senderPort());
103 res = (this->*
m_req[request])();
107 QDataStream ds(&res, QIODevice::WriteOnly);
111 print_hexa((
const unsigned char*)res.data(), res.length());
114 m_writeSocket->writeDatagram(res, datagram.senderAddress(), datagram.senderPort());
133 printf(
"\n\n\ncalling utInit\n");
141 foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
144 if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
147 int rc = sscanf(netInterface.hardwareAddress().toStdString().c_str(),
"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
148 mid + 0, mid + 1, mid + 2, mid + 3, mid + 4, mid + 5, &last);
149 if(rc != 6 || netInterface.hardwareAddress().toStdString().size() > (
unsigned int)last)
150 fprintf(stderr,
"invalid mac address format %s", netInterface.hardwareAddress().toStdString().c_str());
163 printf(
"utInit called\n\n\n");
170 quint8 result = success;
172 QDataStream ds(&res, QIODevice::WriteOnly);
181 qint32 deltaLatitude;
182 offset +=
get_INT32(data + offset, &deltaLatitude);
183 qint32 deltaLongitude;
184 offset +=
get_INT32(data + offset, &deltaLongitude);
186 offset +=
get_INT8(data + offset, &deltaAltitude);
194 quint32 originatingStationID = paramAppli->
data().
stationID();
195 quint32 stationID = rand() % 0x100000000;
197 while(stationID == originatingStationID)
198 stationID = rand() % 0x100000000;
208 quint8 result = success;
210 QDataStream ds(&res, QIODevice::WriteOnly);
220 quint8 result = success;
222 QDataStream ds(&res, QIODevice::WriteOnly);
231 quint8 mt = (quint8)messageType;
232 quint8 result = success;
234 QDataStream ds(&res, QIODevice::WriteOnly);
257 bool flagValidityDuration = 0, flagRepetitionDuration = 0, flagRelevanceTrafficDirection = 0,
258 flagsTransmissionInterval = 0, flagRepetitionInterval = 0;
260 flagValidityDuration |= flags &0x80;
261 flagRepetitionDuration |= flags &0x40;
262 flagRelevanceTrafficDirection |= flags &0x10;
263 flagsTransmissionInterval |= flags &0x04;
264 flagRepetitionInterval |= flags &0x02;
266 qDebug() <<
"utDenmTrigger received :";
267 qDebug() <<
" flags :";
268 qDebug() <<
" V ::= " << flagValidityDuration;
269 qDebug() <<
" R ::= " << flagRepetitionDuration;
270 qDebug() <<
" T ::= " << flagRelevanceTrafficDirection;
271 qDebug() <<
" K ::= " << flagsTransmissionInterval;
272 qDebug() <<
" I ::= " << flagRepetitionInterval;
277 if(flagValidityDuration)
285 qDebug() <<
" ValidityDuration ::= omit";
287 if(flagRepetitionDuration)
295 qDebug() <<
" RepetitionDuration ::= omit";
300 memset(&situationContainer, 0,
sizeof situationContainer);
305 char situationContainer_uper[
MSG_LENGTH] = {
'\0'};
320 if(flagRelevanceTrafficDirection)
328 qDebug() <<
" RelevanceTrafficDirection ::= omit";
330 if(flagsTransmissionInterval)
338 qDebug() <<
" TransmissionInterval ::= omit";
340 if(flagRepetitionInterval)
348 qDebug() <<
" RepetitionInterval ::= omit";
353 qDebug() <<
" Alacarte of length " << (quint8)data[offset];
354 trigger.
setAlacarte(QByteArray((
char*)(data + offset + 1), data[offset]));
364 QByteArray msg = trigger.
toBin();
379 while(msgLen == -1 && timer.elapsed() < 10000)
386 <<
"received in UT Trigger DENM";
412 bool flagValidityDuration = 0, flagRelevanceTrafficDirection = 0, flagsTransmissionInterval = 0,
413 flagRepetitionInterval = 0, flagSituation = 0, flagRelevanceDistance = 0, flagTrafficClass = 0;
415 flagValidityDuration |= flags & 0x80;
416 flagSituation |= flags & 0x40;
417 flagRelevanceDistance |= flags & 0x20;
418 flagRelevanceTrafficDirection |= flags & 0x10;
419 flagTrafficClass |= flags & 0x08;
420 flagsTransmissionInterval |= flags & 0x04;
421 flagRepetitionInterval |= flags & 0x02;
424 qDebug() <<
"utDenmUpdate received :";
425 qDebug() <<
" flags :";
426 qDebug() <<
" V ::=" << flagValidityDuration;
427 qDebug() <<
" S ::=" << flagSituation;
428 qDebug() <<
" D ::=" << flagRelevanceDistance;
429 qDebug() <<
" T ::=" << flagRelevanceTrafficDirection;
430 qDebug() <<
" C ::=" << flagTrafficClass;
431 qDebug() <<
" K ::=" << flagsTransmissionInterval;
432 qDebug() <<
" I ::=" << flagRepetitionInterval;
435 qDebug() <<
" ActionID :";
442 if(flagValidityDuration)
450 qDebug() <<
" ValidityDuraiton ::= omit";
458 memset(&situation, 0,
sizeof situation);
465 qDebug() <<
" SituationContainer :";
467 qDebug() <<
" EventType :";
474 qDebug() <<
" SituationContainer ::= omit";
476 if(flagRelevanceDistance)
484 qDebug() <<
" RelevanceDistance ::= omit";
486 if(flagRelevanceTrafficDirection)
494 qDebug() <<
" RelevanceTrafficDirection ::= omit";
502 qDebug() <<
" TrafficClass ::= omit";
503 if(flagsTransmissionInterval)
511 qDebug() <<
" TransmissionInterval ::= omit";
513 if(flagRepetitionInterval)
521 qDebug() <<
" RepetitionInterval ::= omit";
525 update.
setAlacarte(QByteArray((
char*)(data + offset + 1), data[offset]));
528 qDebug() <<
" AlacarteContainer :";
533 qDebug() <<
" AlacarteContainer ::= omit";
537 QByteArray request = update.
toBin();
539 qDebug() <<
"UT Update DENM sends" << request.toHex() <<
"to" <<
m_appPort;
552 while(msgLen == -1 && timer.elapsed() < 10000)
559 <<
"received in UT Update DENM";
581 ref.
latitude = paramUT->destinationArea().geoAreaPosLatitude();
582 ref.
longitude = paramUT->destinationArea().geoAreaPosLongitude();
594 QByteArray request = terminate.
toBin();
596 qDebug() <<
"UT Terminate DENM sends" << request.toHex() <<
"to" <<
m_appPort;
610 while(msgLen == -1 && timer.elapsed() < 10000)
634 quint8 result = success;
636 QDataStream ds(&res, QIODevice::WriteOnly);
664 quint8 accelerationControl = 0;
665 get_UINT8(data + 1, &accelerationControl);
674 quint8 exteriorLights = 0;
693 quint8 driveDirection;
733 quint8 embarkationStatus;
735 embarkationStatus = embarkationStatus>1?1:0;
745 quint8 ptActivationType;
746 offset +=
get_UINT8(data + offset, &ptActivationType);
747 quint8 ptActivationLength;
748 offset +=
get_UINT8(data + offset, &ptActivationLength);
749 uchar* ptActivationData = (uchar*)calloc(1,ptActivationLength);
750 ptActivationData = data + offset;
751 paramAppli->
setPtActivation(ptActivationType, ptActivationLength, ptActivationData);
759 quint8 dangerousGoods;
769 quint8 lightBarSiren = 0;
780 quint8 result = success;
782 QDataStream ds(&res, QIODevice::WriteOnly);
789 printf(
"\n\n\n\n\ncalling sendGUC\n");
808 for(
int i=0; i<6; i++)
815 offset +=
get_UINT16(data + offset, &totalLt);
819 if(totalLt%100000 == 0)
823 else if(totalLt%10000 == 0)
827 else if(totalLt/1000 == 0)
831 else if(totalLt%50 == 0)
837 printf(
"UpperTester : Fail to send GUC -> lifeTime error\n");
845 offset +=
get_UINT8(data + offset, &tmpTc);
850 offset +=
get_UINT16(data + offset, &payloadLen);
851 gnDR.
payload = QByteArray((
char*)data + offset, payloadLen);
862 printf(
"\n\n\n\n\ncalling sendGBC\n");
869 offset +=
get_UINT8(data + offset, &shape);
882 printf(
"UpperTester : Fail to send GBC -> headerSubType error\n");
888 offset +=
get_UINT16(data + offset, &totalLt);
892 if(totalLt%100000 == 0)
896 else if(totalLt%10000 == 0)
900 else if(totalLt/1000 == 0)
904 else if(totalLt%50 == 0)
910 printf(
"UpperTester : Fail to send GBC -> lifeTime error\n");
918 offset +=
get_UINT8(data + offset, &tmpTc);
937 offset +=
get_UINT16(data + offset, &payloadLen);
938 gnDR.
payload = QByteArray((
char*)data + offset, payloadLen);
956 printf(
"\n\n\n\n\ncalling sendGAC\n");
963 offset +=
get_UINT8(data + offset, &shape);
976 printf(
"UpperTester : Fail to send GAC -> headerSubType error\n");
982 offset +=
get_UINT16(data + offset, &totalLt);
986 if(totalLt%100000 == 0)
990 else if(totalLt%10000 == 0)
994 else if(totalLt/1000 == 0)
998 else if(totalLt%50 == 0)
1004 printf(
"UpperTester : Fail to send GAC -> lifeTime error\n");
1012 offset +=
get_UINT8(data + offset, &tmpTc);
1031 offset +=
get_UINT16(data + offset, &payloadLen);
1032 gnDR.
payload = QByteArray((
char*)data + offset, payloadLen);
1050 printf(
"\n\n\n\n\ncalling sendSHB\n");
1061 offset +=
get_UINT8(data + offset, &tmpTc);
1074 offset +=
get_UINT16(data + offset, &payloadLen);
1075 gnDR.
payload = QByteArray((
char*)data + offset, payloadLen);
1080 printf(
"sendSHB result : %d\n\n\n\n\n\n", res);
1086 printf(
"\n\n\n\n\ncalling sendTSB\n");
1097 offset +=
get_UINT8(data + offset, &tmpNbHop);
1102 offset +=
get_UINT16(data + offset, &totalLt);
1106 if(totalLt%100000 == 0)
1110 else if(totalLt%10000 == 0)
1114 else if(totalLt/1000 == 0)
1118 else if(totalLt%50 == 0)
1124 printf(
"UpperTester : Fail to send GBC -> lifeTime error\n");
1132 offset +=
get_UINT8(data + offset, &tmpTc);
1145 offset +=
get_UINT16(data + offset, &payloadLen);
1146 gnDR.
payload = QByteArray((
char*)data + offset, payloadLen);
1151 printf(
"sendTSB result : %d\n\n\n\n\n\n", res);
void readPendingDatagrams()
readPendingDatagrams Slot used when receiving a primitive.
void setDriveDirection(quint8 driveDirection)
setDriveDirection Set the drive direction.
qint32 geoAreaPosLatitude
QByteArray utDenmTerminateResult(bool success, ActionID_t actionID)
utDenmTerminationResult UtDenmTerminationResult primitive.
QByteArray toBin()
toBin Encode the AppDenmTrigger in a byte array.
quint64 get_INT8(u_char *field, qint8 *int8)
get_INT8 Extract an integer encoded in 8 bits from a byte array.
TrafficClassData * trafficClass() const
trafficClass Traffic class getter.
gnDataRequest_t structure is the GN data request definition.
LifeTime * maximumPacketLifeTime
quint16 * repetitionInterval
SemiAxisLength_t semiMinorConfidence
void setTransmissionInterval(quint16 t)
setTransmissionInterval Transmission interval setter.
QByteArray toBin()
toBin Encode AppDenmTermination into a byte array.
quint64 eventDetectionTime() const
eventDetectionTime Detection time getter.
quint32 * validityDuration() const
validityDuration Validity duration getter.
quint8 * relevanceTrafficDirection() const
relevanceTrafficDirection Relevance traffic direction getter.
void setActionID(ActionIDData a)
setActionID ActionID setter.
int upperTesterEventIndicationListenPort() const
upperTesterEventIndicationListenPort Port used to listen for event indication getter.
static UpperTester privateUT
struct asn_TYPE_descriptor_s * failed_type
QByteArray utSetAccelerationControlStatus()
utSetAccelerationControlStatus UtSetAccelerationControlStatus primitive
void setActionID(ActionIDData a)
setActionID ActionID setter
QByteArray utGnTriggerResult(bool success)
utGnTriggerResult utGnTriggerResult result primitive.
void setDangerousGoods(quint8 dangerousGoods)
setDangerousgoods DangerousGoods setter.
sniff_destinationArea_t destinationArea
quint16 * transmissionInterval() const
transmissionInterval Transmission interval getter.
QByteArray utCamTriggerResult(bool success)
utCamTriggerResult UtCamTrigger result primitive.
quint16 * maximumRepetitionTime
void changeYawRate(qint16 yawRate)
changeYawRate Change the yaw rate.
StationID_t originatingStationID
quint16 * transmissionInterval() const
transmissionInterval Transmission interval getter.
QByteArray utSetDangerousGoods()
utSetDangerousGoods UtSetDangerousGoods primitive.
QByteArray utDenmUpdateResult(bool success, ActionID_t actionID)
utDenmUpdateResult UtDenmUpdateResult primitive.
QByteArray utSetExteriorLightsStatus()
utSetExteriorLightsStatus UtSetExteriorLightsStatus primitive.
QByteArray sendGBC()
sendGUC GenerateGeoBroadcast primitive.
QHostAddress m_lastSenderAddress
void setRepetitionDuration(quint32 r)
setRepetitionDuration Repetition duration setter.
e_failureNotification * failureNotification() const
failureNotification Failure notitfication getter.
QByteArray utChangePositionResult(bool success)
utChangePositionResult UtChangePosition result primitive.
void setEventUpdateDetectionTime(quint64 e)
setEventUpdateDetectionTime Detection time setter.
QByteArray utInitializeResult(bool success)
utInitializeResult UtInitialize result primitive.
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 setRepetitionInterval(quint16 r)
setRepetitionInterval Repetition interval setter.
void setStationType(quint8 stationType)
setStationType StationType setter.
quint64 get_INT16(u_char *field, qint16 *int16)
get_INT16 Extract an integer encoded in 16 bits from a byte array.
void print_hexa(const unsigned char *msg, int l, FILE *stream=stdout)
print_hexa Print a byte array.
Facilities * m_facilities
void setDestinationArea(DestinationAreaData d)
setDestinationArea Destination area setter.
HeadingValue_t semiMajorOrientation
QUdpSocket * m_readSocket
void updateGnAddr(uchar *mid)
updateGnAddr Update the GN-ADDR
QByteArray utDenmTriggerResult(bool success, ActionID_t actionID)
utDenmTriggerResult UtDenmTriggerResult primitive.
ActionIDData actionID() const
actionID ActionID getter.
QHash< QString, void * > hashMap
quint32 * repetitionDuration() const
repetitionDuration Repetition duration getter.
ParameterUpperTester * m_paramUpperTester
SequenceNumber_t sequenceNumber
static FakeGPSProvider * privateGPS
quint64 get_INT32(u_char *field, qint32 *int32)
get_INT32 Extract an integer encoded in 32 bits from a byte array.
void setPtActivation(quint8 ptActivationType, quint8 ptActivationLength, uchar *ptActivationData)
setPtActivation PtActivation setter.
FakeCANProvider * m_canProvider
InformationQuality_t informationQuality
UpperTesterPrimitive m_req[NB_REQUEST]
QByteArray toBin()
toBin Byte array encoder of the AppDenmUpdate.
QHash< int, QString > geonetErrors
QByteArray utSetVehicleRole()
utSetVehicleRole UtSetVehicleRole primitive.
static QByteArray privateRequest
void setSituation(QByteArray s)
setSituation Situation container setter.
void setLightBarSirenInUse(quint8 lightBarSiren)
setLightBarSirenInUse Set the light bar and siren status.
quint32 * validityDuration() const
validityDuration Validity duration getter.
quint8 toInt()
toInt TrafficClassData encoder in a byte.
void setEmbarkationStatus(quint8 embarkationStatus)
setEmbarkationStatus EmbarkationStatus setter.
asn_TYPE_descriptor_t asn_DEF_SituationContainer
static Manager * privateManager
quint16 sequenceNumber() const
sequenceNumber Sequence number getter.
QByteArray utInitialize()
utInitialize UtInitialize primitive.
QByteArray sendGAC()
sendGUC GenerateGeoAnycast primitive.
SemiAxisLength_t semiMajorConfidence
PosConfidenceEllipse_t positionConfidenceEllipse
ParameterGPS & data()
data GPS data getter.
CommonHeader::e_upperProtocolEntity upperProtocolEntity
QByteArray utSetPtActivation()
utSetPtActivation UtSetPtActivation primitive.
quint64 extractUInt(char *data, int l, int *offset)
extractUInt Extract an unsigned integer from byte array.
void setAlacarte(QByteArray a)
setAlacarte Alacarte container setter.
void setRepetitionDuration(quint32 r)
setRepetitionDuration Repetition duration setter.
void setExteriorLights(quint8 exteriorLights)
setExteriorLights Set the exterior lights status.
#define ASN_STRUCT_FREE(asn_DEF, ptr)
void setEventTerminationDetectionTime(quint64 e)
setEventTerminationDetectionTime Detection time setter.
CauseCodeType_t causeCode
void readInternalDatagrams()
readInternalDatagrams Slot used when receiving a result or an event indication.
QUdpSocket * m_readEventIndicationSocket
quint8 * relevanceTrafficDirection() const
relevanceTrafficDirection Relevance traffic direction getter.
void utInitialize()
utInitialize Initialize the Facilities layer.
AltitudeConfidence_t altitudeConfidence
QByteArray utChangeCurvature()
utChangeCurvature UtChangecurvature primitive.
UpperTester()
UpperTester UpperTester constructor.
AltitudeValue_t altitudeValue
QByteArray utSetEmbarkationStatus()
utSetEmbarkationStatus UtSetEmbarkationStatus primitive.
asn_TYPE_descriptor_t asn_DEF_AlacarteContainer
QByteArray utChangeHeading()
utChangeHeading UtChangeHeading primitive.
QByteArray sendTSB()
sendGUC GenerateTSB primitive.
void changeSpeed(quint16 speed)
changeSpeed Change the speed.
destinationAddress_t destinationAddress
quint8 packetTransportSubType
QByteArray utChangePosition()
utChangePosition UtChangePosition primitive.
static Facilities * privateFac
quint64 timestamp() const
timestamp Timestamp since 01/01/2004 getter.
QUdpSocket * m_writeSocket
QByteArray utChangeSpeed()
utChangeSpeed UtChangeSpeed primitive.
void changePosition(qint32 deltaLatitude, qint32 deltaLongitude, qint8 deltaAltitude)
changePosition Change the GPS position.
quint16 stationType_StationCountryCode
quint64 get_UINT8(u_char *field, quint8 *uint8)
get_UINT8 Extract an unsigned integer encoded in 64 bits from a byte array.
QByteArray utChangePseudonymResult(bool success)
utChangePseudonymResult UtChangePseudonym result primitive.
QByteArray utChangePseudonym()
utChangePseudonym UtChangePseudonym primitive.
qint32 geoAreaPosLongitude
quint64 eventUpdateDetectionTime() const
eventUpdateDetectionTime Detection time getter.
void setTransmissionInterval(quint16 t)
setTransmissionInterval Transmission interval setter.
ReferencePosition_t referencePosition() const
referencePosition ITS-S position getter.
QByteArray sendGUC()
sendGUC GenerateGeoUnicast primitive.
void setDestinationArea(DestinationAreaData d)
setDestinationArea Destination area setter.
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 setStationID(quint32 stationID)
setStationID StationID setter.
quint64 get_UINT16(u_char *field, quint16 *uint16)
get_INT64 Extract an integer encoded in 64 bits from a byte array.
QByteArray utSetDriveDirection()
utSetDriveDirection UtSetDriverDirection primitive.
static GeoNet * privateGeoNet
void setValidityDuration(quint32 v)
setValidityDuration Validity duration setter.
QByteArray utSetStationType()
utSetStationType UtSetStationType primitive.
void setVehicleRole(quint8 vehicleRole)
setVehicleRole VehicleRole setter.
StationID_t stationID() const
stationID Station ID getter.
ParameterApplication & data()
data Returns the vehicle status.
CommonHeader::e_headerType packetTransportType
QByteArray utDenmTrigger()
utDenmTrigger GenerateDenmEvent primitive.
e_destinationAddress_PR_present present
QByteArray utSetLightBarSiren()
utSetLightBarSiren UtSetLightBarSiren primitive.
QByteArray utDenmTerminate()
utDenmTerminate TerminateDenmEvent primitive.
void setRelevanceTrafficDirection(quint8 r)
setRelevanceTrafficDirection Relevance traffic direction setter.
QByteArray utDenmUpdate()
utDenmUpdate UpdateDenmEvent primitive.
void changeHeading(quint16 heading)
changeHeading Change the heading.
quint16 destinationPortInfo
quint32 originatingStationID() const
originatingStationID Originating station ID getter.
int send(gnDataRequest_t gnDR)
send Creates the BTP and then select the correct packet send option.
void setAlacarte(QByteArray a)
setAlacarte Alacarte container setter.
union destinationAddress_s::@2 choice
The choice union is composed by a GN_ADDR or a destination area.
quint16 * repetitionInterval() const
repetitionInterval Repetition interval getter.
QByteArray sendSHB()
sendGUC GenerateSHB primitive.
void setRelevanceTrafficDirection(quint8 r)
setRelevanceTrafficDirection Relevance traffic direction setter.
enum UpperTesterPrimitives::DENMUpperTesterPrimitives_enum e_DENMUpperTesterPrimitives
The e_DENMUpperTesterPrimitives enum defines the DENM UpperTester primitives message types...
SubCauseCodeType_t subCauseCode
void setDestinationArea(DestinationAreaData d)
setDestinationArea Destination area setter.
ActionID_t actionID() const
actionID ActionID getter.
void setEventDetectionTime(quint64 e)
setEventDetectionTime Detection time setter.
quint32 * repetitionDuration() const
repetitionDuration Repetition duration getter.
e_gnCommunicationProfile gnCommunicationProfile
void setTrafficClass(TrafficClassData t)
setTrafficClass Traffic class setter.
ParameterConfiguration * m_paramConf
int upperTesterListenPort() const
upperTesterListenPort Port used to listen getter.
void changeCurvature(qint16 curvature)
changeCurvature Change the curvature.
QByteArray utChangeYawRate()
utChangeYawRate UtChangeYawRate primitive.
FakeGPSProvider * m_gpsProvider
void setEventPosition(ReferencePositionData e)
setEventPosition Event position setter.
quint8 * relevanceDistance() const
relevanceDistance Relevance distance getter.
void setValidityDuration(quint32 v)
setValidityDuration Validity duration setter.
int upperTesterWritePort() const
upperTesterWritePort Port used to write getter.
TrafficClass trafficClass
void setEventPosition(ReferencePositionData e)
setEventPosition Event position setter.
void setSituation(QByteArray s)
setSituation Situation container setter.
QByteArray utDenmResult(UpperTesterPrimitives::e_DENMUpperTesterPrimitives messageType, bool success, ActionID_t actionID)
utDenmResult Result of a DENM primitive.
void setRelevanceDistance(quint8 r)
setRelevanceDistance Relevance distance setter.
void setRelevanceDistance(quint8 r)
setRelevanceDistance Relevance distance setter.
void setAccelerationControl(quint8 accelerationControl)
setAccelerationControl Set the acceleration control.