ITS
AppDenmIndication.cpp
Go to the documentation of this file.
2 
3 #include <QDataStream>
4 
5 AppDenmIndication::AppDenmIndication(DENM_t denm, quint32 validityDuration)
6 {
9  m_causeCode = 0;
10  m_subCauseCode = 0;
11 
16  {
17  m_relevanceDistance = (quint8*)calloc(1, sizeof *m_relevanceDistance);
19  }
21  {
22  m_relevanceTrafficDirection = (quint8*)calloc(1, sizeof *m_relevanceTrafficDirection);
24  }
25  if(denm.denm.situation)
26  {
27  m_causeCode = (quint8*)calloc(1, sizeof *m_causeCode);
28  m_subCauseCode = (quint8*)calloc(1, sizeof *m_subCauseCode);
31  }
32  m_detectionTime = 0;
34 }
35 
37 {
38  quint8 options = 0;
39 
41  options |= 1 << (7 - AppDenmIndication_relevanceDistance);
43  options |= 1 << (7 - AppDenmIndication_relevanceTrafficDirection);
45  options |= 1 << (7 - AppDenmIndication_situationContainer);
46 
47  return options;
48 }
49 
51 {
52  QByteArray bin;
53  QDataStream ds(&bin, QIODevice::WriteOnly);
54  quint8 options = getOptions();
55  quint8 zero8 = 0;
56  quint16 zero16 = 0;
57 
58  ds << (quint8)0x17 << options;
59  ds.writeRawData(m_actionID.toBin().data(), m_actionID.toBin().length());
60  ds.writeRawData(m_eventPosition.toBin().data(), m_eventPosition.toBin().length());
61  ds << m_validityDuration;
63  ds << *m_relevanceDistance;
64  else
65  ds << zero8;
68  else
69  ds << zero8;
70  ds << m_detectionTime;
72  ds << *m_causeCode << *m_subCauseCode;
73  else
74  ds << zero16;
75 
76  return bin;
77 }
78 
80 {
81  printf("%s", QString("AppDenmIndication ::= {\n"
82  "\tD ::= %1\n"
83  "\tT ::= %2\n"
84  "\tS ::= %3\n"
85  "ActionID ::= {\n"
86  "%4\n"
87  "\t}\n"
88  "\tEventPosition ::= {\n"
89  "\t%5\n"
90  "\t}\n"
91  "\tValidityDuration ::= %6\n"
92  "\tRelevanceDistance ::= %7\n"
93  "\tRelevanceTrafficDirection ::= %8\n"
94  "\tDetectionTime ::= %11\n"
95  "\tCauseCode ::= %9\n"
96  "\tSubCauseCode ::= %10\n"
97  "}\n")
98  .arg(m_relevanceDistance != NULL)
99  .arg(m_relevanceTrafficDirection != NULL)
100  .arg(m_causeCode != NULL && m_subCauseCode != NULL)
101  .arg(m_actionID.toString())
102  .arg(m_eventPosition.toString())
103  .arg(m_validityDuration)
104  .arg(m_relevanceDistance ? QString::number(*m_relevanceDistance) : QString("omit"))
105  .arg(m_relevanceTrafficDirection ? QString::number(*m_relevanceTrafficDirection) : QString("omit"))
106  .arg(m_causeCode && m_subCauseCode ? QString::number(*m_causeCode) : QString("omit"))
107  .arg(m_causeCode && m_subCauseCode ? QString::number(*m_subCauseCode) : QString("omit"))
108  .arg(m_detectionTime)
109  .toStdString().c_str());
110 
111 }
112 
113 QByteArray AppDenmIndication::toBluetooth(DENM_t denm, quint32 validityDuration)
114 {
116  app.toString();
117  return app.toBin();
118 }
AppDenmIndication definition.
RelevanceTrafficDirection_t * relevanceTrafficDirection
DecentralizedEnvironmentalNotificationMessage_t denm
Definition: DENM.h:25
QByteArray toBin()
toBin ReferencePositionData encoder.
void toString()
toString Print a human readable version of the AppDenmIndication.
static QByteArray toBluetooth(DENM_t denm, quint32 validityDuration)
toBluetooth Encode an AppDenmIndication understable by the HMI.
ActionIDData m_actionID
ReferencePositionData m_eventPosition
quint32 validityDuration() const
validityDuration Validity duration getter.
int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l)
Definition: INTEGER.c:825
QString toString()
toString Human readable encoding.
CauseCodeType_t causeCode
Definition: CauseCode.h:24
TimestampIts_t detectionTime
RelevanceDistance_t * relevanceDistance
quint8 * m_relevanceTrafficDirection
AppDenmIndication(DENM_t denm, quint32 validityDuration)
AppDenmIndication AppDenmIndication constructor.
QByteArray toBin()
toBin Byte array encoding.
QString toString()
toString Human readable ReferencePositionData encoder.
ReferencePosition_t eventPosition
Definition: DENM.h:23
QByteArray toBin()
toBin Encode the AppDenmIndication into a byte array.
SubCauseCodeType_t subCauseCode
Definition: CauseCode.h:25
quint8 getOptions()
getOptions Generate the option byte.