VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pdu.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *********************************************************************/
5 #pragma once
6 
9 
10 
11 
12 #include <stdlib.h>
13 #include "packets/pduHeader.h"
14 #include <vlpi/disEnums.h>
15 #include <vlutil/vlTimeStampType.h>
16 #include <vlutil/vlBaseMsg.h>
17 
18 
19 #define DtPDU_STATUS_BIT_SHIFT(attr, val) \
20  const unsigned int DtPduStatus##attr##BitShift = val;
21 
22 DtPDU_STATUS_BIT_SHIFT(TransferredEntityIndicator, 0);
23 DtPDU_STATUS_BIT_SHIFT(LVCIndicator, 1);
24 DtPDU_STATUS_BIT_SHIFT(CoupledExtensionIndicator, 3);
25 DtPDU_STATUS_BIT_SHIFT(FireTypeIndicator, 4);
26 DtPDU_STATUS_BIT_SHIFT(DetonationTypeIndicator, 4);
27 DtPDU_STATUS_BIT_SHIFT(RadioAttachedIndicator, 4);
28 DtPDU_STATUS_BIT_SHIFT(IntercomAttachedIndicator, 4);
29 DtPDU_STATUS_BIT_SHIFT(IFFSimulationMode, 4);
30 DtPDU_STATUS_BIT_SHIFT(ActiveInterrogationIndicator, 5);
31 
32 #define DtPDU_STATUS_UNSET_INDICATOR_ONE_BIT(attr) \
33  val &= ~(0x1 << DtPduStatus##attr##BitShift)
34 
35 #define DtPDU_STATUS_SET_INDICATOR_ONE_BIT(attr, indicator) \
36  DtPDU_STATUS_UNSET_INDICATOR_ONE_BIT(attr); \
37  val |= DtPduStatus##attr##indicator << DtPduStatus##attr##BitShift
38 
39 #define DtPDU_STATUS_GET_BOOL_ONE_BIT(attr) \
40  (((val >> DtPduStatus##attr##BitShift) & 0x1) == 0x1)
41 
42 #define DtPDU_STATUS_GET_ENUM_ONE_BIT(attr) \
43  DtPduStatus##attr((val >> DtPduStatus##attr##BitShift) & 0x1)
44 
45 #define DtPDU_STATUS_SET_INDICATOR_TWO_BIT(attr, indicator) \
46  DtPDU_STATUS_UNSET_INDICATOR_TWO_BIT(attr); \
47  val |= indicator << DtPduStatus##attr##BitShift
48 
49 #define DtPDU_STATUS_UNSET_INDICATOR_TWO_BIT(attr) \
50  val &= ~(0x3 << DtPduStatus##attr##BitShift)
51 
52 #define DtPDU_STATUS_GET_ENUM_TWO_BIT(attr) \
53  DtPduStatus##attr((val >> DtPduStatus##attr##BitShift) & 0x3)
54 
55 #define DtSTATUS_OK 0
56 #define DtSTATUS_NOT_OK 1
57 
61 
62 class DtPduEncoder;
63 class DtPduDecoder;
64 class DtPduFactory;
65 
69 class DT_DLL_VL DtPdu : public DtBaseMsg
70 {
71 public:
72 
74  virtual ~DtPdu();
75 
77  DtPdu(const DtPdu &pdu,
79 
81  DtPdu &operator=(const DtPdu &pdu);
82 
83 
86  virtual void* packet() const;
87 
90  virtual int status() const;
91 
93  virtual void setVersion(int vers);
94  virtual int protocolVersion() const;
95 
97  virtual void setExerciseId(int id);
98  virtual int exerciseId() const;
99 
101  virtual DtPduKind kind() const;
102 
104  virtual DtProtocolFamily protocolFamily() const;
105 
109  virtual void setTimeStamp(DtTime time,
111 
114  virtual DtTime timeStamp() const;
115 
117  virtual DtTimeStampType timeStampType() const;
118 
122  virtual void setPduLength(unsigned int length);
123 
125  virtual unsigned int pduLength() const;
126 
128  virtual void setPduStatus(int);
129 
131  virtual int pduStatus() const;
132 
136  virtual void setTransferredEntityIndicator(bool difference);
140  virtual bool transferredEntityIndicator() const;
141 
143  virtual void setLvcIndicator(DtPduStatusLVCIndicator lvcIndicator);
145  virtual DtPduStatusLVCIndicator lvcIndicator() const;
146 
150  virtual void setCoupledExtensionIndicator(bool coupled);
154  virtual bool coupledExtensionIndicator() const;
155 
157  virtual void setFireTypeIndicator(DtPduStatusFireTypeIndicator fireTypeIndicator);
159  virtual DtPduStatusFireTypeIndicator fireTypeIndicator() const;
160 
162  virtual void setDetonationTypeIndicator(DtPduStatusDetonationTypeIndicator detonationTypeIndicator);
164  virtual DtPduStatusDetonationTypeIndicator detonationTypeIndicator() const;
165 
167  virtual void setRadioAttachedIndicator(DtPduStatusRadioAttachedIndicator radioAttachedIndicator);
169  virtual DtPduStatusRadioAttachedIndicator radioAttachedIndicator() const;
170 
172  virtual void setIntercomAttachedIndicator(DtPduStatusIntercomAttachedIndicator intercomAttachedIndicator);
174  virtual DtPduStatusIntercomAttachedIndicator intercomAttachedIndicator() const;
175 
177  virtual void setIffSimulationMode(bool interactive);
179  virtual bool iffSimulationMode() const;
180 
182  virtual void setActiveInterrogationIndicator(bool active);
184  virtual bool activeInterrogationIndicator() const;
185 
190  virtual DtTime guessTimeValid(DtTime referenceTime) const;
191 
193  virtual DtNetPduHeader* netHeader() const;
194 
196  virtual void print() const;
197 
200  virtual void printToStream(std::ostream& stream) const;
201 
203  virtual void printHeader() const;
204 
206  virtual void printHeaderToStream(std::ostream& stream) const;
207 
208 
214  virtual void printData() const;
215  virtual void printDataToStream(std::ostream& stream) const;
216  virtual void printDataToString(DtString& str) const;
217 
219  virtual void printPduInHexToStream(std::ostream& stream, unsigned int numberOfColumns) const;
220 
222  virtual void encode();
223 
225  virtual void decode(DtPduFactory* pduFactory);
226 
229  virtual bool isTransientPdu() const;
230 
231 protected:
232 
235  DtPdu();
236 
238  virtual void setStatus(int okStatus);
239 
242  virtual void initPdu(int size, DtBufferPtr buffer);
243 
245  virtual void initPdu(const void* initial, DtBufferPtr buffer, DtPduFactory* pduFactory);
246 
248  virtual DtPduKind internalGetPduKind() const = 0;
249 
251  virtual DtProtocolFamily kindToFamily(DtPduKind kind) const;
252 
254  virtual void sizeChanged(int size);
255 
257  virtual void clearData();
258 
260  virtual void initHeader(DtPduKind kind, int size);
261 
264  virtual bool isTEIApplicable() const;
265  virtual bool isLVCApplicable() const;
266  virtual bool isCEIApplicable() const;
267  virtual bool isFTIApplicable() const;
268  virtual bool isDTIApplicable() const;
269  virtual bool isRAIApplicable() const;
270  virtual bool isIAIApplicable() const;
271  virtual bool isISMApplicable() const;
272  virtual bool isAIIApplicable() const;
273 
274 protected:
275 
279 };
280 
281 #define netPdu packet()
282 
284 {
285  return (DtNetPduHeader*) netRep();
286 }
287 
288 inline void* DtPdu::packet() const
289 {
290  return (void*) netRep();
291 }
292 
293 inline int DtPdu::protocolVersion() const
294 {
295  return netHeader()->version;
296 }
297 
298 inline int DtPdu::exerciseId() const
299 {
300  return netHeader()->DtExercise;
301 }
302 
303 inline DtPduKind DtPdu::kind() const
304 { return DtPduKind(netHeader()->DtKind);
305 }
306 
308 {
309  return DtProtocolFamily(netHeader()->family);
310 }
311 
312 inline DtTime DtPdu::timeStamp() const
313 {
314  return netHeader()->DtTime.time();
315 }
316 
318 {
319  return netHeader()->DtTime.type();
320 }
321 
322 inline void DtPdu::setExerciseId(int id)
323 {
324  netHeader()->DtExercise = id;
325 }
326 
327 inline void DtPdu::setTimeStamp(DtTime time, DtTimeStampType relOrAbs)
328 {
329  netHeader()->DtTime = DtNetTimeStamp(time, relOrAbs);
330 }
331 
332 
333 inline void DtPdu::setPduLength(unsigned int length)
334 {
336 }
337 
338 inline unsigned int DtPdu::pduLength() const
339 {
340  return netHeader()->DtLength;
341 }
342 
343 
344 inline int DtPdu::pduStatus() const
345 {
346  return netHeader()->pduStatus;
347 }
348 
349 inline void DtPdu::setPduStatus(int pduStatus)
350 {
352 }
353 
354 inline int DtPdu::status() const
355 {
356  return myOKStatus;
357 }
358 
359 inline void DtPdu::setStatus(int okStatus)
360 {
361  myOKStatus = okStatus;
362 }
363 
364 inline void DtPdu::setVersion(int vers)
365 {
366  netHeader()->version = (unsigned char) (DtU32) vers;
367 }
368 

Document ID: Generated on Thu Feb 22 04:26:36 EST 2018 from SVN revision 186468
Copyright © 2005-2016 VT MÄK. All Rights Reserved (www.mak.com)