ITS
UpperTester.cpp
Go to the documentation of this file.
1 #include "UpperTester.h"
2 
8 static QByteArray privateRequest;
9 
11 {
12 
13 }
14 
16 {
17  m_mutex = mutex;
18  if(m_mutex != 0)
19  m_mutex->lock();
20 
21  m_manager = man;
22  m_gpsProvider = gps;
23  m_canProvider = can;
24  m_geonet = gn;
25  m_facilities = fac;
26  m_paramConf = (ParameterConfiguration*) man->hashMap["Configuration"];
27  m_paramUpperTester = (ParameterUpperTester*) man->hashMap["UpperTester"];
28 
29  privateManager = man;
30  privateGeoNet = gn;
31  privateFac = fac;
32  privateGPS = gps;
33 
34  memset(m_req, 0, NB_REQUEST);
38 
42 
56 
62 
63  m_writeSocket = new QUdpSocket(this);
65  m_readSocket = new QUdpSocket(this);
67  m_readEventIndicationSocket = new QUdpSocket(this);
69  QObject::connect(m_readSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
70  QObject::connect(m_readEventIndicationSocket, SIGNAL(readyRead()), this, SLOT(readInternalDatagrams()));
71 
72  m_appSocket = new QUdpSocket(this);
73  m_appSocket->bind();
74  ((ParameterNetwork*)(man->hashMap["Network"]))->addPort("UpperTester", m_appSocket->localPort());
75  m_appPort = ((ParameterNetwork*)(man->hashMap["Network"]))->internalPort("ApplicationUT");
76 
77  if(m_mutex != 0)
78  m_mutex->unlock();
79 }
80 
81 UpperTester::UpperTester(const UpperTester &other) : QObject()
82 {
83  this->m_manager = other.m_manager;
84  this->m_gpsProvider = other.m_gpsProvider;
85  this->m_canProvider = other.m_canProvider;
86  this->m_geonet = other.m_geonet;
87  this->m_facilities = other.m_facilities;
88 }
89 
91 {
92  while(m_readSocket->hasPendingDatagrams())
93  {
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());
99  privateRequest = req;
100  QByteArray res;
101 
102  if(m_req[request])
103  res = (this->*m_req[request])();
104  else
105  {
106  quint8 result = 0;
107  QDataStream ds(&res, QIODevice::WriteOnly);
108  ds << req << result;
109  }
110  printf("result : ");
111  print_hexa((const unsigned char*)res.data(), res.length());
112  m_lastSenderAddress = datagram.senderAddress();
113  m_lastSenderPort = datagram.senderPort();
114  m_writeSocket->writeDatagram(res, datagram.senderAddress(), datagram.senderPort());
115  }
116 }
117 
119 {
120  while(m_readEventIndicationSocket->hasPendingDatagrams())
121  {
122  QNetworkDatagram datagram = m_readEventIndicationSocket->receiveDatagram();
123  qDebug() << datagram.data().toHex() << "received in UT" << m_readEventIndicationSocket->localPort();
124  m_writeSocket->writeDatagram(datagram.data(), m_lastSenderAddress, m_lastSenderPort);
125  qDebug() << datagram.data().toHex() << "sent by UT to" << m_lastSenderPort;
126  }
127 }
128 
129 /* Common Upper Tester Primitives */
130 
132 {
133  printf("\n\n\ncalling utInit\n");
134 
135  if(privateGeoNet != 0)
136  QTimer::singleShot(0, privateGeoNet, SLOT(utInitialize()));
137  if(privateFac != 0)
139 
140  uchar mid[6];
141  foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
142  {
143  // Return only the first non-loopback MAC Address
144  if (!(netInterface.flags() & QNetworkInterface::IsLoopBack))
145  {
146  int last = -1;
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());
152  }
153  }
154 
161 
162  sleep(1);
163  printf("utInit called\n\n\n");
164  return utInitializeResult(true);
165 }
166 
167 QByteArray UpperTester::utInitializeResult(bool success)
168 {
170  quint8 result = success;
171  QByteArray res;
172  QDataStream ds(&res, QIODevice::WriteOnly);
173  ds << mt << result;
174  return res;
175 }
176 
178 {
179  uchar* data = (uchar*)privateRequest.data();
180  quint64 offset = 1;
181  qint32 deltaLatitude;
182  offset += get_INT32(data + offset, &deltaLatitude);
183  qint32 deltaLongitude;
184  offset += get_INT32(data + offset, &deltaLongitude);
185  qint8 deltaAltitude;
186  offset += get_INT8(data + offset, &deltaAltitude);
187  privateGPS->changePosition(deltaLatitude, deltaLongitude, deltaAltitude);
188  return utChangePositionResult(true);
189 }
190 
192 {
194  quint32 originatingStationID = paramAppli->data().stationID();
195  quint32 stationID = rand() % 0x100000000;
196 
197  while(stationID == originatingStationID)
198  stationID = rand() % 0x100000000;
199 
200  paramAppli->setStationID(stationID);
201 
202  return utChangePseudonymResult(true);
203 }
204 
205 QByteArray UpperTester::utChangePseudonymResult(bool success)
206 {
208  quint8 result = success;
209  QByteArray res;
210  QDataStream ds(&res, QIODevice::WriteOnly);
211 
212  ds << mt << result;
213 
214  return res;
215 }
216 
217 QByteArray UpperTester::utChangePositionResult(bool success)
218 {
220  quint8 result = success;
221  QByteArray res;
222  QDataStream ds(&res, QIODevice::WriteOnly);
223  ds << mt << result;
224  return res;
225 }
226 
227 /* DENM Upper Tester Primitives */
228 
230 {
231  quint8 mt = (quint8)messageType;
232  quint8 result = success;
233  QByteArray res;
234  QDataStream ds(&res, QIODevice::WriteOnly);
235 
236  ds << mt << result << (quint32)actionID.originatingStationID << (quint16)actionID.sequenceNumber;
237 
238  return res;
239 }
240 
241 QByteArray UpperTester::utDenmTriggerResult(bool success, ActionID_t actionID)
242 {
244 }
245 
247 {
248  ParameterDENM* paramDENM = (ParameterDENM*) privateManager->hashMap["DENM"];
249  ParameterUpperTester* paramUT = (ParameterUpperTester*) privateManager->hashMap["UpperTester"];
250  AppDenmTriggerData trigger(paramDENM);
251 
252  char* data = privateRequest.data();
253 
254  int offset = 1;
255  quint8 flags = extractUInt(data, 1, &offset);
256 
257  bool flagValidityDuration = 0, flagRepetitionDuration = 0, flagRelevanceTrafficDirection = 0,
258  flagsTransmissionInterval = 0, flagRepetitionInterval = 0;
259 
260  flagValidityDuration |= flags &0x80;
261  flagRepetitionDuration |= flags &0x40;
262  flagRelevanceTrafficDirection |= flags &0x10;
263  flagsTransmissionInterval |= flags &0x04;
264  flagRepetitionInterval |= flags &0x02;
265 
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;
273 
274  trigger.setEventDetectionTime(extractUInt(data, 6, &offset));
275  qDebug() << " DetectionTime ::= " << trigger.eventDetectionTime();
276 
277  if(flagValidityDuration)
278  {
279  trigger.setValidityDuration(extractUInt(data, 3, &offset));
280  qDebug() << " ValidityDuration ::= " << *trigger.validityDuration();
281  }
282  else
283  {
284  offset += 3;
285  qDebug() << " ValidityDuration ::= omit";
286  }
287  if(flagRepetitionDuration)
288  {
289  trigger.setRepetitionDuration(extractUInt(data, 3, &offset));
290  qDebug() << " RepetitionDuration ::= " << *trigger.repetitionDuration();
291  }
292  else
293  {
294  offset += 3;
295  qDebug() << " RepetitionDuration ::= omit";
296  }
297 
298  SituationContainer_t situationContainer;
299 
300  memset(&situationContainer, 0, sizeof situationContainer);
301  situationContainer.informationQuality = extractUInt(data, 1, &offset);
302  situationContainer.eventType.causeCode = extractUInt(data, 1, &offset);
303  situationContainer.eventType.subCauseCode = extractUInt(data, 1, &offset);
304 
305  char situationContainer_uper[MSG_LENGTH] = {'\0'};
306  asn_enc_rval_t rval = uper_encode_to_buffer(&asn_DEF_SituationContainer, &situationContainer, situationContainer_uper, MSG_LENGTH);
307  asn_fprint(NULL, &asn_DEF_SituationContainer, &situationContainer);
308 
309  if(rval.encoded < 1)
310  {
311  qCritical() << "Unable to encode " << rval.failed_type->name;
312  ActionID_t fail;
313  fail.originatingStationID = fail.sequenceNumber = 0;
314  return utDenmTriggerResult(false, fail);
315  }
316 
317  trigger.setSituation(QByteArray(situationContainer_uper, (rval.encoded + 7) / 8));
318  trigger.setRelevanceDistance(extractUInt(data, 1, &offset));
319 
320  if(flagRelevanceTrafficDirection)
321  {
322  trigger.setRelevanceTrafficDirection(extractUInt(data, 1, &offset));
323  qDebug() << " RelevanceTrafficDirection ::= " << trigger.relevanceTrafficDirection();
324  }
325  else
326  {
327  offset++;
328  qDebug() << " RelevanceTrafficDirection ::= omit";
329  }
330  if(flagsTransmissionInterval)
331  {
332  trigger.setTransmissionInterval(extractUInt(data, 2, &offset));
333  qDebug() << " TransmissionInterval ::= " << trigger.transmissionInterval();
334  }
335  else
336  {
337  offset += 2;
338  qDebug() << " TransmissionInterval ::= omit";
339  }
340  if(flagRepetitionInterval)
341  {
342  trigger.setRepetitionInterval(extractUInt(data, 2, &offset));
343  qDebug() << " RepetitionInterval ::= " << *trigger.repetitionInterval();
344  }
345  else
346  {
347  offset += 2;
348  qDebug() << " RepetitionInterval ::= omit";
349  }
350 
351  if(data[offset])
352  {
353  qDebug() << " Alacarte of length " << (quint8)data[offset];
354  trigger.setAlacarte(QByteArray((char*)(data + offset + 1), data[offset]));
355  AlacarteContainer_t *alacarte = 0;
356  uper_decode_complete(NULL, &asn_DEF_AlacarteContainer, (void**)&alacarte, (data + offset + 1), data[offset]);
357  asn_fprint(NULL, &asn_DEF_AlacarteContainer, alacarte);
359  }
360 
362  trigger.setDestinationArea(paramUT->destinationArea());
363 
364  QByteArray msg = trigger.toBin();
365 
366  qDebug() << msg.toHex() << "sent from UT to" << m_appPort << "by" << m_appSocket->localPort();
367  m_appSocket->writeDatagram(msg, QHostAddress::LocalHost, m_appPort);
368 
369  int msgLen = -1;
370  char msgRep[MSG_LENGTH];
371  QElapsedTimer timer;
372  ActionID_t defaultAID;
373 
374  defaultAID.originatingStationID = 0;
375  defaultAID.sequenceNumber = 0;
376 
377  timer.start();
378 
379  while(msgLen == -1 && timer.elapsed() < 10000)
380  msgLen = m_appSocket->readDatagram(msgRep, MSG_LENGTH);
381 
382  if(msgLen != -1)
383  {
384  AppDenmResultData result(QByteArray(msgRep, msgLen));
385  qDebug() << result.actionID().originatingStationID << result.actionID().sequenceNumber << QByteArray(msgRep, msgLen).toHex()
386  << "received in UT Trigger DENM";
387 
388  if(result.failureNotification())
389  return utDenmTriggerResult(false, result.actionID());
390 
391  return utDenmTriggerResult(true, result.actionID());
392  }
393  return utDenmTriggerResult(false, defaultAID);
394 }
395 
396 QByteArray UpperTester::utDenmUpdateResult(bool success, ActionID_t actionID)
397 {
399 }
400 
402 {
403  ParameterDENM* paramDENM = (ParameterDENM*) privateManager->hashMap["DENM"];
404  ParameterUpperTester* paramUT = (ParameterUpperTester*) privateManager->hashMap["UpperTester"];
405  AppDenmUpdateData update(paramDENM);
406 
407  char* data = privateRequest.data();
408 
409  int offset = 1;
410  quint8 flags = extractUInt(data, 1, &offset);
411 
412  bool flagValidityDuration = 0, flagRelevanceTrafficDirection = 0, flagsTransmissionInterval = 0,
413  flagRepetitionInterval = 0, flagSituation = 0, flagRelevanceDistance = 0, flagTrafficClass = 0;
414 
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;
422 
423 
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;
433 
434  update.setActionID(ActionIDData(data, &offset));
435  qDebug() << " ActionID :";
436  qDebug() << " StationID ::=" << update.actionID().originatingStationID();
437  qDebug() << " SequenceNumber ::=" << update.actionID().sequenceNumber();
438 
439  update.setEventUpdateDetectionTime(extractUInt(data, 6, &offset));
440  qDebug() << " DetectionTime ::= " << update.eventUpdateDetectionTime();
441 
442  if(flagValidityDuration)
443  {
444  update.setValidityDuration(extractUInt(data, 3, &offset));
445  qDebug() << " ValidityDuration ::= " << *update.validityDuration();
446  }
447  else
448  {
449  offset += 3;
450  qDebug() << " ValidityDuraiton ::= omit";
451  }
452  if(flagSituation)
453  {
454  SituationContainer_t situation;
455  asn_enc_rval_t rval;
456  char situationUper[MSG_LENGTH] = {'\0'};
457 
458  memset(&situation, 0, sizeof situation);
459  situation.informationQuality = extractUInt(data, 1, &offset);
460  situation.eventType.causeCode = extractUInt(data, 1, &offset);
461  situation.eventType.subCauseCode = extractUInt(data, 1, &offset);
462 
463  rval = uper_encode_to_buffer(&asn_DEF_SituationContainer, &situation, situationUper, MSG_LENGTH);
464  update.setSituation(QByteArray(situationUper, (rval.encoded + 7) / 8));
465  qDebug() << " SituationContainer :";
466  qDebug() << " InformationQuality ::=" << situation.informationQuality;
467  qDebug() << " EventType :";
468  qDebug() << " CauseCode ::=" << situation.eventType.causeCode;
469  qDebug() << " SubCauseCode ::=" << situation.eventType.subCauseCode;
470  }
471  else
472  {
473  offset += 3;
474  qDebug() << " SituationContainer ::= omit";
475  }
476  if(flagRelevanceDistance)
477  {
478  update.setRelevanceDistance(extractUInt(data, 1, &offset));
479  qDebug() << " RelevanceDistance ::=" << update.relevanceDistance();
480  }
481  else
482  {
483  offset++;
484  qDebug() << " RelevanceDistance ::= omit";
485  }
486  if(flagRelevanceTrafficDirection)
487  {
488  update.setRelevanceTrafficDirection(extractUInt(data, 1, &offset));
489  qDebug() << " RelevanceTrafficDirection ::=" << update.relevanceTrafficDirection();
490  }
491  else
492  {
493  offset++;
494  qDebug() << " RelevanceTrafficDirection ::= omit";
495  }
496  if(flagTrafficClass)
497  {
499  qDebug() << " TrafficClass ::=" << update.trafficClass()->toInt();
500  }
501  else
502  qDebug() << " TrafficClass ::= omit";
503  if(flagsTransmissionInterval)
504  {
505  update.setTransmissionInterval(extractUInt(data, 2, &offset));
506  qDebug() << " TransmissionInterval ::=" << update.transmissionInterval();
507  }
508  else
509  {
510  offset += 2;
511  qDebug() << " TransmissionInterval ::= omit";
512  }
513  if(flagRepetitionInterval)
514  {
515  update.setRepetitionDuration(extractUInt(data, 2, &offset));
516  qDebug() << " RepetitionInterval ::=" << update.repetitionDuration();
517  }
518  else
519  {
520  offset += 2;
521  qDebug() << " RepetitionInterval ::= omit";
522  }
523  if(data[offset])
524  {
525  update.setAlacarte(QByteArray((char*)(data + offset + 1), data[offset]));
526  AlacarteContainer_t *alacarte = 0;
527  uper_decode_complete(NULL, &asn_DEF_AlacarteContainer, (void**)&alacarte, (data + offset + 1), data[offset]);
528  qDebug() << " AlacarteContainer :";
529  asn_fprint(NULL, &asn_DEF_AlacarteContainer, alacarte);
531  }
532  else
533  qDebug() << " AlacarteContainer ::= omit";
534 
535  update.setDestinationArea(paramUT->destinationArea());
536 
537  QByteArray request = update.toBin();
538 
539  qDebug() << "UT Update DENM sends" << request.toHex() << "to" << m_appPort;
540  m_appSocket->writeDatagram(request, QHostAddress::LocalHost, m_appPort);
541 
542  int msgLen = -1;
543  char msgRep[MSG_LENGTH];
544 
545  QElapsedTimer timer;
546  ActionID_t defaultAID;
547 
548  defaultAID.originatingStationID = 0;
549  defaultAID.sequenceNumber = 0;
550  timer.start();
551 
552  while(msgLen == -1 && timer.elapsed() < 10000)
553  msgLen = m_appSocket->readDatagram(msgRep, MSG_LENGTH);
554 
555  if(msgLen != -1)
556  {
557  AppDenmResultData result(QByteArray(msgRep, msgLen));
558  qDebug() << result.actionID().originatingStationID << result.actionID().sequenceNumber << QByteArray(msgRep, msgLen).toHex()
559  << "received in UT Update DENM";
560 
561  if(result.failureNotification())
562  return utDenmUpdateResult(false, result.actionID());
563  return utDenmUpdateResult(true, result.actionID());
564  }
565 
566  return utDenmUpdateResult(false, defaultAID);
567 }
568 
570 {
571  ParameterDENM* paramDENM = (ParameterDENM*) privateManager->hashMap["DENM"];
572  ParameterUpperTester* paramUT = (ParameterUpperTester*) privateManager->hashMap["UpperTester"];
573  AppDenmTerminationData terminate(paramDENM);
574 
575  char* data = privateRequest.data();
576 
577  int offset = 1;
578  ActionIDData actionID(data, &offset);
580 
581  ref.latitude = paramUT->destinationArea().geoAreaPosLatitude();
582  ref.longitude = paramUT->destinationArea().geoAreaPosLongitude();
588 
589  terminate.setActionID(actionID);
590  terminate.setDestinationArea(paramUT->destinationArea());
592  terminate.setEventPosition(ref);
593 
594  QByteArray request = terminate.toBin();
595 
596  qDebug() << "UT Terminate DENM sends" << request.toHex() << "to" << m_appPort;
597  m_appSocket->writeDatagram(request, QHostAddress::LocalHost, m_appPort);
598 
599  int msgLen = -1;
600  char msgRep[MSG_LENGTH];
601 
602  QElapsedTimer timer;
603  ActionID_t defaultAID;
604 
605  defaultAID.originatingStationID = 0;
606  defaultAID.sequenceNumber = 0;
607 
608  timer.start();
609 
610  while(msgLen == -1 && timer.elapsed() < 10000)
611  msgLen = m_appSocket->readDatagram(msgRep, MSG_LENGTH);
612 
613  if(msgLen != -1)
614  {
615  AppDenmResultData result(QByteArray(msgRep, msgLen));
616 
617  if(result.failureNotification())
618  return utDenmTerminateResult(false, result.actionID());
619  return utDenmTerminateResult(true, result.actionID());
620  }
621  return utDenmTerminateResult(false, defaultAID);
622 }
623 
624 QByteArray UpperTester::utDenmTerminateResult(bool success, ActionID_t actionID)
625 {
627 }
628 
629 /* CAM Upper Tester Primitives */
630 
631 QByteArray UpperTester::utCamTriggerResult(bool success)
632 {
634  quint8 result = success;
635  QByteArray res;
636  QDataStream ds(&res, QIODevice::WriteOnly);
637  ds << mt << result;
638  return res;
639 }
640 
642 {
643  uchar* data = (uchar*)privateRequest.data();
644  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
645  qint16 curvature;
646  get_INT16(data + 1, &curvature);
647  paramCAN->changeCurvature(curvature);
648  return utCamTriggerResult(true);
649 }
650 
652 {
653  uchar* data = (uchar*)privateRequest.data();
654  qint16 speed;
655  get_INT16(data + 1, &speed);
656  privateGPS->changeSpeed(speed);
657  return utCamTriggerResult(true);
658 }
659 
661 {
662  uchar* data = (uchar*)privateRequest.data();
663  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
664  quint8 accelerationControl = 0;
665  get_UINT8(data + 1, &accelerationControl);
666  paramCAN->setAccelerationControl(accelerationControl);
667  return utCamTriggerResult(true);
668 }
669 
671 {
672  uchar* data = (uchar*)privateRequest.data();
673  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
674  quint8 exteriorLights = 0;
675  get_UINT8(data + 1, &exteriorLights);
676  paramCAN->setExteriorLights(exteriorLights);
677  return utCamTriggerResult(true);
678 }
679 
681 {
682  uchar* data = (uchar*)privateRequest.data();
683  quint16 heading;
684  get_UINT16(data + 1, &heading);
685  privateGPS->changeHeading(heading);
686  return utCamTriggerResult(true);
687 }
688 
690 {
691  uchar* data = (uchar*)privateRequest.data();
692  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
693  quint8 driveDirection;
694  get_UINT8(data + 1, &driveDirection);
695  paramCAN->setDriveDirection(driveDirection);
696  return utCamTriggerResult(true);
697 }
698 
700 {
701  uchar* data = (uchar*)privateRequest.data();
702  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
703  qint16 yawRate;
704  get_INT16(data + 1, &yawRate);
705  paramCAN->changeYawRate(yawRate);
706  return utCamTriggerResult(true);
707 }
708 
710 {
711  uchar* data = (uchar*)privateRequest.data();
713  quint8 stationType;
714  get_UINT8(data + 1, &stationType);
715  paramAppli->setStationType(stationType);
716  return utCamTriggerResult(true);
717 }
718 
720 {
721  uchar* data = (uchar*)privateRequest.data();
723  quint8 vehicleRole;
724  get_UINT8(data + 1, &vehicleRole);
725  paramAppli->setVehicleRole(vehicleRole);
726  return utCamTriggerResult(true);
727 }
728 
730 {
731  uchar* data = (uchar*)privateRequest.data();
733  quint8 embarkationStatus;
734  get_UINT8(data + 1, &embarkationStatus);
735  embarkationStatus = embarkationStatus>1?1:0;
736  paramAppli->setEmbarkationStatus(embarkationStatus);
737  return utCamTriggerResult(true);
738 }
739 
741 {
742  uchar* data = (uchar*)privateRequest.data();
744  quint64 offset = 1;
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);
752  return utCamTriggerResult(true);
753 }
754 
756 {
757  uchar* data = (uchar*)privateRequest.data();
759  quint8 dangerousGoods;
760  get_UINT8(data + 1, &dangerousGoods);
761  paramAppli->setDangerousGoods(dangerousGoods);
762  return utCamTriggerResult(true);
763 }
764 
766 {
767  uchar* data = (uchar*)privateRequest.data();
768  FakeCANProvider* paramCAN = (FakeCANProvider*) privateManager->hashMap["CAN"];
769  quint8 lightBarSiren = 0;
770  get_UINT8(data + 1, &lightBarSiren);
771  paramCAN->setLightBarSirenInUse(lightBarSiren);
772  return utCamTriggerResult(true);
773 }
774 
775 /* GeoNetworking Upper Tester Primitives */
776 
777 QByteArray UpperTester::utGnTriggerResult(bool success)
778 {
780  quint8 result = success;
781  QByteArray res;
782  QDataStream ds(&res, QIODevice::WriteOnly);
783  ds << mt << result;
784  return res;
785 }
786 
788 {
789  printf("\n\n\n\n\ncalling sendGUC\n");
790  gnDataRequest_t gnDR;
791  uchar* data = (uchar*)privateRequest.data();
792  quint64 offset = 1;
793 
796 
797  gnDR.destinationPort = 0;
798  gnDR.destinationPortInfo = 0;
800  gnDR.repetitionInterval = 0;
801  gnDR.maximumRepetitionTime = 0;
802  gnDR.maximumHopLimit = 0;
803 
805 
807 
808  for(int i=0; i<6; i++)
809  {
810  gnDR.destinationAddress.choice.gnAddr.mid[i] = data[offset];
811  offset++;
812  }
813 
814  quint16 totalLt;
815  offset += get_UINT16(data + offset, &totalLt);
816 
817  LifeTime lt;
818 
819  if(totalLt%100000 == 0)
820  {
821  lt = LifeTime(totalLt / 100000, LifeTime::base_100_s);
822  }
823  else if(totalLt%10000 == 0)
824  {
825  lt = LifeTime(totalLt / 10000, LifeTime::base_10_s);
826  }
827  else if(totalLt/1000 == 0)
828  {
829  lt = LifeTime(totalLt % 1000, LifeTime::base_1_s);
830  }
831  else if(totalLt%50 == 0)
832  {
833  lt = LifeTime(totalLt / 50, LifeTime::base_50_ms);
834  }
835  else
836  {
837  printf("UpperTester : Fail to send GUC -> lifeTime error\n");
838  return utGnTriggerResult(false);
839  }
840 
841  gnDR.maximumPacketLifeTime = (LifeTime*)calloc(1, sizeof lt);
842  *gnDR.maximumPacketLifeTime = lt;
843 
844  quint8 tmpTc;
845  offset += get_UINT8(data + offset, &tmpTc);
846 
847  gnDR.trafficClass = TrafficClass(tmpTc);
848 
849  quint16 payloadLen;
850  offset += get_UINT16(data + offset, &payloadLen);
851  gnDR.payload = QByteArray((char*)data + offset, payloadLen);
852 
854 
855  int res = privateGeoNet->send(gnDR);
856  printf("sendGUC result : %s\n\n\n\n\n\n", privateGeoNet->geonetErrors[res].toStdString().c_str());
858 }
859 
861 {
862  printf("\n\n\n\n\ncalling sendGBC\n");
863  gnDataRequest_t gnDR;
864  uchar* data = (uchar*)privateRequest.data();
865  quint64 offset = 1;
866 
868  quint8 shape;
869  offset += get_UINT8(data + offset, &shape);
870  switch(shape)
871  {
872  case upperTester_circle:
874  break;
877  break;
878  case upperTester_ellipse:
880  break;
881  default:
882  printf("UpperTester : Fail to send GBC -> headerSubType error\n");
883  return utGnTriggerResult(false);
884  break;
885  }
886 
887  quint16 totalLt;
888  offset += get_UINT16(data + offset, &totalLt);
889 
890  LifeTime lt;
891 
892  if(totalLt%100000 == 0)
893  {
894  lt = LifeTime(totalLt / 100000, LifeTime::base_100_s);
895  }
896  else if(totalLt%10000 == 0)
897  {
898  lt = LifeTime(totalLt / 10000, LifeTime::base_10_s);
899  }
900  else if(totalLt/1000 == 0)
901  {
902  lt = LifeTime(totalLt % 1000, LifeTime::base_1_s);
903  }
904  else if(totalLt%50 == 0)
905  {
906  lt = LifeTime(totalLt / 50, LifeTime::base_50_ms);
907  }
908  else
909  {
910  printf("UpperTester : Fail to send GBC -> lifeTime error\n");
911  return utGnTriggerResult(false);
912  }
913 
914  gnDR.maximumPacketLifeTime = (LifeTime*)calloc(1, sizeof lt);
915  *gnDR.maximumPacketLifeTime = lt;
916 
917  quint8 tmpTc;
918  offset += get_UINT8(data + offset, &tmpTc);
919 
920  gnDR.trafficClass = TrafficClass(tmpTc);
921  offset += 3;
922 
923  gnDR.destinationPort = 0;
924  gnDR.destinationPortInfo = 0;
926  gnDR.repetitionInterval = 0;
927  gnDR.maximumRepetitionTime = 0;
928  gnDR.maximumHopLimit = 0;
929 
931  offset += get_INT32(data + offset, &gnDR.destinationAddress.choice.destinationArea.geoAreaPosLatitude);
933  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.distanceA);
934  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.distanceB);
935  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.angle);
936  quint16 payloadLen;
937  offset += get_UINT16(data + offset, &payloadLen);
938  gnDR.payload = QByteArray((char*)data + offset, payloadLen);
939 /*
940  print_hexa((const unsigned char*)DestinationArea(gnDR.destinationAddress.choice.destinationArea).toHex().data(), DestinationArea(gnDR.destinationAddress.choice.destinationArea).toHex().length());
941  printf("Lt :");
942  print_hexa((const unsigned char*)gnDR.maximumPacketLifeTime->toHex().toStdString().c_str(), gnDR.maximumPacketLifeTime->toHex().length());
943  printf("subType : %x\n", gnDR.packetTransportSubType);
944  printf("TC : %s\n", gnDR.trafficClass.toHex().toStdString().c_str());
945  printf("payload : %s\n", gnDR.payload.toHex().toStdString().c_str());
946 */
948 
949  int res = privateGeoNet->send(gnDR);
950  printf("sendGBC result : %s\n\n\n\n\n\n", privateGeoNet->geonetErrors[res].toStdString().c_str());
952 }
953 
955 {
956  printf("\n\n\n\n\ncalling sendGAC\n");
957  gnDataRequest_t gnDR;
958  uchar* data = (uchar*)privateRequest.data();
959  quint64 offset = 1;
960 
962  quint8 shape;
963  offset += get_UINT8(data + offset, &shape);
964  switch(shape)
965  {
966  case upperTester_circle:
968  break;
971  break;
972  case upperTester_ellipse:
974  break;
975  default:
976  printf("UpperTester : Fail to send GAC -> headerSubType error\n");
977  return utGnTriggerResult(false);
978  break;
979  }
980 
981  quint16 totalLt;
982  offset += get_UINT16(data + offset, &totalLt);
983 
984  LifeTime lt;
985 
986  if(totalLt%100000 == 0)
987  {
988  lt = LifeTime(totalLt / 100000, LifeTime::base_100_s);
989  }
990  else if(totalLt%10000 == 0)
991  {
992  lt = LifeTime(totalLt / 10000, LifeTime::base_10_s);
993  }
994  else if(totalLt/1000 == 0)
995  {
996  lt = LifeTime(totalLt % 1000, LifeTime::base_1_s);
997  }
998  else if(totalLt%50 == 0)
999  {
1000  lt = LifeTime(totalLt / 50, LifeTime::base_50_ms);
1001  }
1002  else
1003  {
1004  printf("UpperTester : Fail to send GAC -> lifeTime error\n");
1005  return utGnTriggerResult(false);
1006  }
1007 
1008  gnDR.maximumPacketLifeTime = (LifeTime*)calloc(1, sizeof lt);
1009  *gnDR.maximumPacketLifeTime = lt;
1010 
1011  quint8 tmpTc;
1012  offset += get_UINT8(data + offset, &tmpTc);
1013 
1014  gnDR.trafficClass = TrafficClass(tmpTc);
1015  offset += 3;
1016 
1017  gnDR.destinationPort = 0;
1018  gnDR.destinationPortInfo = 0;
1020  gnDR.repetitionInterval = 0;
1021  gnDR.maximumRepetitionTime = 0;
1022  gnDR.maximumHopLimit = 0;
1023 
1025  offset += get_INT32(data + offset, &gnDR.destinationAddress.choice.destinationArea.geoAreaPosLatitude);
1026  offset += get_INT32(data + offset, &gnDR.destinationAddress.choice.destinationArea.geoAreaPosLongitude);
1027  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.distanceA);
1028  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.distanceB);
1029  offset += get_UINT16(data + offset, &gnDR.destinationAddress.choice.destinationArea.angle);
1030  quint16 payloadLen;
1031  offset += get_UINT16(data + offset, &payloadLen);
1032  gnDR.payload = QByteArray((char*)data + offset, payloadLen);
1033 /*
1034  print_hexa((const unsigned char*)DestinationArea(gnDR.destinationAddress.choice.destinationArea).toHex().data(), DestinationArea(gnDR.destinationAddress.choice.destinationArea).toHex().length());
1035  printf("Lt :");
1036  print_hexa((const unsigned char*)gnDR.maximumPacketLifeTime->toHex().toStdString().c_str(), gnDR.maximumPacketLifeTime->toHex().length());
1037  printf("subType : %x\n", gnDR.packetTransportSubType);
1038  printf("TC : %s\n", gnDR.trafficClass.toHex().toStdString().c_str());
1039  printf("payload : %s\n", gnDR.payload.toHex().toStdString().c_str());
1040 */
1042 
1043  int res = privateGeoNet->send(gnDR);
1044  printf("sendGAC result : %s\n\n\n\n\n\n", privateGeoNet->geonetErrors[res].toStdString().c_str());
1046 }
1047 
1049 {
1050  printf("\n\n\n\n\ncalling sendSHB\n");
1051  gnDataRequest_t gnDR;
1052  uchar* data = (uchar*)privateRequest.data();
1053  quint64 offset = 1;
1054 
1057 
1058  gnDR.maximumPacketLifeTime = 0;
1059 
1060  quint8 tmpTc;
1061  offset += get_UINT8(data + offset, &tmpTc);
1062  gnDR.trafficClass = TrafficClass(tmpTc);
1063 
1064  gnDR.destinationPort = 0;
1065  gnDR.destinationPortInfo = 0;
1067  gnDR.repetitionInterval = 0;
1068  gnDR.maximumRepetitionTime = 0;
1069  gnDR.maximumHopLimit = 0;
1070 
1072 
1073  quint16 payloadLen;
1074  offset += get_UINT16(data + offset, &payloadLen);
1075  gnDR.payload = QByteArray((char*)data + offset, payloadLen);
1076 
1078 
1079  int res = privateGeoNet->send(gnDR);
1080  printf("sendSHB result : %d\n\n\n\n\n\n", res);
1082 }
1083 
1085 {
1086  printf("\n\n\n\n\ncalling sendTSB\n");
1087  gnDataRequest_t gnDR;
1088  uchar* data = (uchar*)privateRequest.data();
1089  quint64 offset = 1;
1090 
1093 
1094  gnDR.maximumPacketLifeTime = 0;
1095 
1096  quint8 tmpNbHop;
1097  offset += get_UINT8(data + offset, &tmpNbHop);
1098  gnDR.maximumHopLimit = (quint8*)calloc(1, sizeof tmpNbHop);
1099  *gnDR.maximumHopLimit = tmpNbHop;
1100 
1101  quint16 totalLt;
1102  offset += get_UINT16(data + offset, &totalLt);
1103 
1104  LifeTime lt;
1105 
1106  if(totalLt%100000 == 0)
1107  {
1108  lt = LifeTime(totalLt / 100000, LifeTime::base_100_s);
1109  }
1110  else if(totalLt%10000 == 0)
1111  {
1112  lt = LifeTime(totalLt / 10000, LifeTime::base_10_s);
1113  }
1114  else if(totalLt/1000 == 0)
1115  {
1116  lt = LifeTime(totalLt % 1000, LifeTime::base_1_s);
1117  }
1118  else if(totalLt%50 == 0)
1119  {
1120  lt = LifeTime(totalLt / 50, LifeTime::base_50_ms);
1121  }
1122  else
1123  {
1124  printf("UpperTester : Fail to send GBC -> lifeTime error\n");
1125  return utGnTriggerResult(false);
1126  }
1127 
1128  gnDR.maximumPacketLifeTime = (LifeTime*)calloc(1, sizeof lt);
1129  *gnDR.maximumPacketLifeTime = lt;
1130 
1131  quint8 tmpTc;
1132  offset += get_UINT8(data + offset, &tmpTc);
1133  gnDR.trafficClass = TrafficClass(tmpTc);
1134 
1135  gnDR.destinationPort = 0;
1136  gnDR.destinationPortInfo = 0;
1138  gnDR.repetitionInterval = 0;
1139  gnDR.maximumRepetitionTime = 0;
1140  gnDR.maximumHopLimit = 0;
1141 
1143 
1144  quint16 payloadLen;
1145  offset += get_UINT16(data + offset, &payloadLen);
1146  gnDR.payload = QByteArray((char*)data + offset, payloadLen);
1147 
1149 
1150  int res = privateGeoNet->send(gnDR);
1151  printf("sendTSB result : %d\n\n\n\n\n\n", res);
1153 }
void readPendingDatagrams()
readPendingDatagrams Slot used when receiving a primitive.
Definition: UpperTester.cpp:90
void setDriveDirection(quint8 driveDirection)
setDriveDirection Set the drive direction.
quint16 m_appPort
Definition: UpperTester.h:372
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.
Definition: apiNetwork.cpp:81
TrafficClassData * trafficClass() const
trafficClass Traffic class getter.
gnDataRequest_t structure is the GN data request definition.
Definition: GNDataRequest.h:46
LifeTime * maximumPacketLifeTime
Definition: GNDataRequest.h:55
quint16 * repetitionInterval
Definition: GNDataRequest.h:56
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
Definition: UpperTester.cpp:7
struct asn_TYPE_descriptor_s * failed_type
Definition: asn_codecs.h:55
QByteArray utSetAccelerationControlStatus()
utSetAccelerationControlStatus UtSetAccelerationControlStatus primitive
void setActionID(ActionIDData a)
setActionID ActionID setter
#define MSG_LENGTH
QByteArray utGnTriggerResult(bool success)
utGnTriggerResult utGnTriggerResult result primitive.
void setDangerousGoods(quint8 dangerousGoods)
setDangerousgoods DangerousGoods setter.
sniff_destinationArea_t destinationArea
Definition: GNDataRequest.h:39
quint16 * transmissionInterval() const
transmissionInterval Transmission interval getter.
QByteArray utCamTriggerResult(bool success)
utCamTriggerResult UtCamTrigger result primitive.
quint16 * maximumRepetitionTime
Definition: GNDataRequest.h:57
void changeYawRate(qint16 yawRate)
changeYawRate Change the yaw rate.
StationID_t originatingStationID
Definition: ActionID.h:24
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
Definition: UpperTester.h:362
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)
Definition: per_decoder.c:11
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.
Definition: apiNetwork.cpp:55
void print_hexa(const unsigned char *msg, int l, FILE *stream=stdout)
print_hexa Print a byte array.
Definition: api.cpp:89
Facilities * m_facilities
Definition: UpperTester.h:369
void setDestinationArea(DestinationAreaData d)
setDestinationArea Destination area setter.
HeadingValue_t semiMajorOrientation
QUdpSocket * m_readSocket
Definition: UpperTester.h:356
void updateGnAddr(uchar *mid)
updateGnAddr Update the GN-ADDR
Definition: Manager.cpp:41
QByteArray utDenmTriggerResult(bool success, ActionID_t actionID)
utDenmTriggerResult UtDenmTriggerResult primitive.
ActionIDData actionID() const
actionID ActionID getter.
QHash< QString, void * > hashMap
Definition: Manager.h:53
quint32 * repetitionDuration() const
repetitionDuration Repetition duration getter.
ParameterUpperTester * m_paramUpperTester
Definition: UpperTester.h:371
SequenceNumber_t sequenceNumber
Definition: ActionID.h:25
static FakeGPSProvider * privateGPS
Definition: UpperTester.cpp:6
ssize_t encoded
Definition: asn_codecs.h:48
quint64 get_INT32(u_char *field, qint32 *int32)
get_INT32 Extract an integer encoded in 32 bits from a byte array.
Definition: apiNetwork.cpp:29
void setPtActivation(quint8 ptActivationType, quint8 ptActivationLength, uchar *ptActivationData)
setPtActivation PtActivation setter.
FakeCANProvider * m_canProvider
Definition: UpperTester.h:367
InformationQuality_t informationQuality
UpperTesterPrimitive m_req[NB_REQUEST]
Definition: UpperTester.h:361
Manager * m_manager
Definition: UpperTester.h:365
QByteArray toBin()
toBin Byte array encoder of the AppDenmUpdate.
QHash< int, QString > geonetErrors
Definition: Geonet.h:344
QByteArray utSetVehicleRole()
utSetVehicleRole UtSetVehicleRole primitive.
static QByteArray privateRequest
Definition: UpperTester.cpp:8
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
Definition: UpperTester.cpp:3
quint16 sequenceNumber() const
sequenceNumber Sequence number getter.
Definition: ActionIDData.h:43
QByteArray utInitialize()
utInitialize UtInitialize primitive.
QByteArray sendGAC()
sendGUC GenerateGeoAnycast primitive.
SemiAxisLength_t semiMajorConfidence
UpperTester definition.
PosConfidenceEllipse_t positionConfidenceEllipse
ParameterGPS & data()
data GPS data getter.
CommonHeader::e_upperProtocolEntity upperProtocolEntity
Definition: GNDataRequest.h:48
QByteArray utSetPtActivation()
utSetPtActivation UtSetPtActivation primitive.
quint64 extractUInt(char *data, int l, int *offset)
extractUInt Extract an unsigned integer from byte array.
Definition: apiData.cpp:3
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)
Definition: constr_TYPE.h:56
void setEventTerminationDetectionTime(quint64 e)
setEventTerminationDetectionTime Detection time setter.
CauseCodeType_t causeCode
Definition: CauseCode.h:24
void readInternalDatagrams()
readInternalDatagrams Slot used when receiving a result or an event indication.
QUdpSocket * m_readEventIndicationSocket
Definition: UpperTester.h:357
quint8 * relevanceTrafficDirection() const
relevanceTrafficDirection Relevance traffic direction getter.
void utInitialize()
utInitialize Initialize the Facilities layer.
Definition: Facilities.cpp:94
AltitudeConfidence_t altitudeConfidence
Definition: Altitude.h:25
#define NB_REQUEST
Definition: UpperTester.h:24
QByteArray utChangeCurvature()
utChangeCurvature UtChangecurvature primitive.
UpperTester()
UpperTester UpperTester constructor.
Definition: UpperTester.cpp:10
AltitudeValue_t altitudeValue
Definition: Altitude.h:24
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
Definition: GNDataRequest.h:53
quint8 packetTransportSubType
Definition: GNDataRequest.h:50
QByteArray utChangePosition()
utChangePosition UtChangePosition primitive.
static Facilities * privateFac
Definition: UpperTester.cpp:5
quint8 * maximumHopLimit
Definition: GNDataRequest.h:58
quint64 timestamp() const
timestamp Timestamp since 01/01/2004 getter.
Definition: ParameterGPS.h:91
QUdpSocket * m_writeSocket
Definition: UpperTester.h:358
QByteArray utChangeSpeed()
utChangeSpeed UtChangeSpeed primitive.
void changePosition(qint32 deltaLatitude, qint32 deltaLongitude, qint8 deltaAltitude)
changePosition Change the GPS position.
quint16 stationType_StationCountryCode
Definition: GnAddr.h:24
quint64 get_UINT8(u_char *field, quint8 *uint8)
get_UINT8 Extract an unsigned integer encoded in 64 bits from a byte array.
Definition: apiNetwork.cpp:88
QByteArray utChangePseudonymResult(bool success)
utChangePseudonymResult UtChangePseudonym result primitive.
QByteArray utChangePseudonym()
utChangePseudonym UtChangePseudonym primitive.
int m_lastSenderPort
Definition: UpperTester.h:363
quint64 eventUpdateDetectionTime() const
eventUpdateDetectionTime Detection time getter.
sniff_gnAddr_t gnAddr
Definition: GNDataRequest.h:38
quint16 destinationPort
Definition: GNDataRequest.h:51
void setTransmissionInterval(quint16 t)
setTransmissionInterval Transmission interval setter.
ReferencePosition_t referencePosition() const
referencePosition ITS-S position getter.
Definition: ParameterGPS.h:81
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)
Definition: per_encoder.c:33
int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr)
Definition: constr_TYPE.c:36
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.
Definition: apiNetwork.cpp:69
QByteArray utSetDriveDirection()
utSetDriveDirection UtSetDriverDirection primitive.
static GeoNet * privateGeoNet
Definition: UpperTester.cpp:4
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.
QUdpSocket * m_appSocket
Definition: UpperTester.h:373
ParameterApplication & data()
data Returns the vehicle status.
CommonHeader::e_headerType packetTransportType
Definition: GNDataRequest.h:49
QByteArray utDenmTrigger()
utDenmTrigger GenerateDenmEvent primitive.
e_destinationAddress_PR_present present
Definition: GNDataRequest.h:32
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
Definition: GNDataRequest.h:52
quint32 originatingStationID() const
originatingStationID Originating station ID getter.
Definition: ActionIDData.h:38
int send(gnDataRequest_t gnDR)
send Creates the BTP and then select the correct packet send option.
Definition: Geonet.cpp:497
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.
GeoNet * m_geonet
Definition: UpperTester.h:368
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
Definition: CauseCode.h:25
void setDestinationArea(DestinationAreaData d)
setDestinationArea Destination area setter.
ActionID_t actionID() const
actionID ActionID getter.
QByteArray payload
Definition: GNDataRequest.h:60
void setEventDetectionTime(quint64 e)
setEventDetectionTime Detection time setter.
quint32 * repetitionDuration() const
repetitionDuration Repetition duration getter.
e_gnCommunicationProfile gnCommunicationProfile
Definition: GNDataRequest.h:54
void setTrafficClass(TrafficClassData t)
setTrafficClass Traffic class setter.
ParameterConfiguration * m_paramConf
Definition: UpperTester.h:370
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
Definition: UpperTester.h:366
Definition: Geonet.h:42
QMutex * m_mutex
Definition: UpperTester.h:360
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
Definition: GNDataRequest.h:59
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.
quint8 mid[6]
Definition: GnAddr.h:25
void setAccelerationControl(quint8 accelerationControl)
setAccelerationControl Set the acceleration control.