ITS
AppDenmResultData.cpp
Go to the documentation of this file.
1 #include "AppDenmResultData.h"
2 
3 #include <QDataStream>
4 
6 {
8 }
9 
10 AppDenmResultData::AppDenmResultData(ActionID_t actionID, bool success, e_failureNotification failureNotification,
11  DENM_t *denm, ParameterDENM *paramDENM)
12 {
13  asn_enc_rval_t rval;
14  char msg[MSG_LENGTH] = {'\0'};
15 
17  if(!success)
18  {
21  }
22  else
24  m_paramDENM = paramDENM;
25 
26  if(success)
27  {
28  rval = uper_encode_to_buffer(&asn_DEF_DENM, denm, msg, MSG_LENGTH);
29  if(rval.encoded > 0)
30  m_denm = QByteArray(msg, (rval.encoded + 7) / 8);
31  else
32  m_denm = QByteArray();
33  }
34  else
35  m_denm = QByteArray();
36 }
37 
39 {
40  char *data = datagram.data();
41  int offset = 1;
42  quint8 options = data[offset++];
43  quint8 denmLength;
44 
46 
47  if(options & (1 << (7 - AppDenmResultData_failureNotification)))
49 
50  m_actionID.originatingStationID = extractUInt(data, 4, &offset);
51  m_actionID.sequenceNumber = extractUInt(data, 2, &offset);
54  else
55  {
56  denmLength = data[offset++];
57  m_denm = QByteArray(&data[offset], denmLength);
58  }
59 }
60 
62 {
63  quint8 options = 0;
64 
66  options |= 1 << (7 - AppDenmResultData_failureNotification);
67 
68  return options;
69 }
70 
72 {
73  QByteArray bin;
74  QDataStream ds(&bin, QIODevice::WriteOnly);
75  quint8 messageType = m_paramDENM->mtAppDENMResult();
76  quint8 options = getOptions();
77  quint8 denmLength = m_denm.length();
78 
79  ds << messageType << options << (quint32)m_actionID.originatingStationID << (quint16)m_actionID.sequenceNumber;
81  ds << *m_failureNotification;
82  else
83  {
84  ds << denmLength;
85  ds.writeRawData(m_denm.data(), denmLength);
86  }
87 
88  return bin;
89 }
AppDenmResultData()
AppDenmResultData AppDenmResultData constructor.
#define MSG_LENGTH
StationID_t originatingStationID
Definition: ActionID.h:24
AppDenmResult definition.
e_failureNotification * failureNotification() const
failureNotification Failure notitfication getter.
e_failureNotification * m_failureNotification
SequenceNumber_t sequenceNumber
Definition: ActionID.h:25
ssize_t encoded
Definition: asn_codecs.h:48
QByteArray toBin()
toBin Encode the AppDenmResultData into a byte array.
quint64 extractUInt(char *data, int l, int *offset)
extractUInt Extract an unsigned integer from byte array.
Definition: apiData.cpp:3
quint8 getOptions()
getOptions Generate the option byte.
enum AppDenmResultData::failureNotification_enum e_failureNotification
The e_failureNotification enum defines the success or failure 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)
Definition: per_encoder.c:33
Definition: DENM.h:23
ParameterDENM * m_paramDENM
quint8 mtAppDENMResult() const
mtAppDENMResult Message type for AppDENM_result getter.
Definition: ParameterDENM.h:53
asn_TYPE_descriptor_t asn_DEF_DENM
Definition: DENM.c:45
ActionID_t actionID() const
actionID ActionID getter.