ITS
AppDenmTerminationData.cpp
Go to the documentation of this file.
2 
3 #include <QDataStream>
4 
6 {
14  m_paramDENM = paramDENM;
15 }
16 
18 {
19  char *data = datagram.data();
20  int offset = 1;
21  quint8 options = extractUInt(data, 1, &offset);
22 
30 
31  if(options & (1 << (7 - AppDenmTerminationData_validityDuration)))
32  m_validityDuration = (quint32*)calloc(1, sizeof *m_validityDuration);
33  if(options & (1 << (7 - AppDenmTerminationData_repetitionDuration)))
34  m_repetitionDuration = (quint32*)calloc(1, sizeof *m_repetitionDuration);
35  if(options & (1 << (7 - AppDenmTerminationData_transmissionInterval)))
36  m_transmissionInterval = (quint16*)calloc(1, sizeof *m_transmissionInterval);
37  if(options & (1 << (7 - AppDenmTerminationData_transmissionDuration)))
38  m_transmissionDuration = (quint16*)calloc(1, sizeof *m_transmissionDuration);
39  if(options & (1 << (7 - AppDenmTerminationData_relevanceDistance)))
40  m_relevanceDistance = (quint8*)calloc(1, sizeof *m_relevanceDistance);
41  if(options & (1 << (7 - AppDenmTerminationData_relevanceTrafficDirection)))
42  m_relevanceTrafficDirection = (quint8*)calloc(1, sizeof *m_relevanceTrafficDirection);
43 
44  m_actionID = ActionIDData(data, &offset);
45  m_eventTerminationDetectionTime = extractUInt(data, 8, &offset);
46  m_eventPosition = ReferencePositionData(data, &offset);
48  *m_validityDuration = extractUInt(data, 4, &offset);
49  else
50  passBytes(&offset, 4);
52  *m_repetitionDuration = extractUInt(data, 4, &offset);
53  else
54  passBytes(&offset, 4);
56  *m_transmissionInterval = extractUInt(data, 2, &offset);
57  else
58  passBytes(&offset, 2);
60  *m_transmissionDuration = extractUInt(data, 2, &offset);
61  else
62  passBytes(&offset, 2);
64  *m_relevanceDistance = extractUInt(data, 1, &offset);
65  else
66  passBytes(&offset, 1);
68  *m_relevanceTrafficDirection = extractUInt(data, 1, &offset);
69  else
70  passBytes(&offset, 1);
71  m_destinationArea = DestinationAreaData(data, &offset);
72  m_trafficClass = TrafficClassData(data, &offset);
73 }
74 
76 {
77  quint8 options = 0;
78 
80  options |= 1 << (7 - AppDenmTerminationData_validityDuration);
82  options |= 1 << (7 - AppDenmTerminationData_repetitionDuration);
84  options |= 1 << (7 - AppDenmTerminationData_transmissionInterval);
86  options |= 1 << (7 - AppDenmTerminationData_transmissionDuration);
88  options |= 1 << (7 - AppDenmTerminationData_relevanceDistance);
91 
92  return options;
93 }
94 
96 {
97  QByteArray bin;
98  QDataStream ds(&bin, QIODevice::WriteOnly);
99  quint8 messageType = m_paramDENM->mtAppDENMTermination();
100  quint8 options = getOptions();
101  quint32 zero32 = 0;
102  quint16 zero16 = 0;
103  quint8 zero8 = 0;
104 
105  ds << messageType << options;
106  ds.writeRawData(m_actionID.toBin().toStdString().c_str(), m_actionID.toBin().length());
108  ds.writeRawData(m_eventPosition.toBin().toStdString().c_str(), m_eventPosition.toBin().length());
110  ds << *m_validityDuration;
111  else
112  ds << zero32;
114  ds << *m_repetitionDuration;
115  else
116  ds << zero32;
118  ds << *m_transmissionInterval;
119  else
120  ds << zero16;
122  ds << *m_transmissionDuration;
123  else
124  ds << zero16;
126  ds << *m_relevanceDistance;
127  else
128  ds << zero8;
131  else
132  ds << zero8;
133  ds.writeRawData(m_destinationArea.toBin().toStdString().c_str(), m_destinationArea.toBin().length());
134  ds.writeRawData(m_trafficClass.toBin().toStdString().c_str(), m_trafficClass.toBin().length());
135 
136  return bin;
137 }
QByteArray toBin()
toBin Encode AppDenmTermination into a byte array.
QByteArray toBin()
toBin ReferencePositionData encoder.
AppDenmTermination definition.
quint8 getOptions()
getOptions Generate the byte option.
void passBytes(int *offset, int l)
passBytes Increase the offset.
Definition: apiData.cpp:41
quint64 extractUInt(char *data, int l, int *offset)
extractUInt Extract an unsigned integer from byte array.
Definition: apiData.cpp:3
AppDenmTerminationData(ParameterDENM *paramDENM)
AppDenmTerminationData AppDenmTermination constructor.
QByteArray toBin()
toBin Byte array encoding.
ReferencePositionData m_eventPosition
QByteArray toBin()
toBin TrafficClassData encoder.
DestinationAreaData m_destinationArea
quint8 mtAppDENMTermination() const
mtAppDENMTermination Message type for AppDENM_termination getter.
Definition: ParameterDENM.h:48
QByteArray toBin()
toBin Byte array encoder of the destination area.