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 
120  virtual void setReceivedTime(DtTime t) { myReceivedTime = t; }
121  virtual DtTime receivedTime() const { return myReceivedTime; }
122 
126  virtual void setPduLength(unsigned int length);
127 
129  virtual unsigned int pduLength() const;
130 
132  virtual void setPduStatus(int);
133 
135  virtual int pduStatus() const;
136 
140  virtual void setTransferredEntityIndicator(bool difference);
144  virtual bool transferredEntityIndicator() const;
145 
147  virtual void setLvcIndicator(DtPduStatusLVCIndicator lvcIndicator);
149  virtual DtPduStatusLVCIndicator lvcIndicator() const;
150 
154  virtual void setCoupledExtensionIndicator(bool coupled);
158  virtual bool coupledExtensionIndicator() const;
159 
161  virtual void setFireTypeIndicator(DtPduStatusFireTypeIndicator fireTypeIndicator);
163  virtual DtPduStatusFireTypeIndicator fireTypeIndicator() const;
164 
166  virtual void setDetonationTypeIndicator(DtPduStatusDetonationTypeIndicator detonationTypeIndicator);
168  virtual DtPduStatusDetonationTypeIndicator detonationTypeIndicator() const;
169 
171  virtual void setRadioAttachedIndicator(DtPduStatusRadioAttachedIndicator radioAttachedIndicator);
173  virtual DtPduStatusRadioAttachedIndicator radioAttachedIndicator() const;
174 
176  virtual void setIntercomAttachedIndicator(DtPduStatusIntercomAttachedIndicator intercomAttachedIndicator);
178  virtual DtPduStatusIntercomAttachedIndicator intercomAttachedIndicator() const;
179 
181  virtual void setIffSimulationMode(bool interactive);
183  virtual bool iffSimulationMode() const;
184 
186  virtual void setActiveInterrogationIndicator(bool active);
188  virtual bool activeInterrogationIndicator() const;
189 
194  virtual DtTime guessTimeValid(DtTime referenceTime) const;
195 
197  virtual DtNetPduHeader* netHeader() const;
198 
200  virtual void print() const;
201 
204  virtual void printToStream(std::ostream& stream) const;
205 
207  virtual void printHeader() const;
208 
210  virtual void printHeaderToStream(std::ostream& stream) const;
211 
212 
218  virtual void printData() const;
219  virtual void printDataToStream(std::ostream& stream) const;
220  virtual void printDataToString(DtString& str) const;
221 
223  virtual void printPduInHexToStream(std::ostream& stream, unsigned int numberOfColumns) const;
224 
226  virtual void encode();
227 
229  virtual void decode(DtPduFactory* pduFactory);
230 
233  virtual bool isTransientPdu() const;
234 
235 protected:
236 
239  DtPdu();
240 
242  virtual void setStatus(int okStatus);
243 
246  virtual void initPdu(int size, DtBufferPtr buffer);
247 
249  virtual void initPdu(const void* initial, DtBufferPtr buffer, DtPduFactory* pduFactory);
250 
252  virtual DtPduKind internalGetPduKind() const = 0;
253 
255  virtual DtProtocolFamily kindToFamily(DtPduKind kind) const;
256 
258  virtual void sizeChanged(int size);
259 
261  virtual void clearData();
262 
264  virtual void initHeader(DtPduKind kind, int size);
265 
268  virtual bool isTEIApplicable() const;
269  virtual bool isLVCApplicable() const;
270  virtual bool isCEIApplicable() const;
271  virtual bool isFTIApplicable() const;
272  virtual bool isDTIApplicable() const;
273  virtual bool isRAIApplicable() const;
274  virtual bool isIAIApplicable() const;
275  virtual bool isISMApplicable() const;
276  virtual bool isAIIApplicable() const;
277 
278  // This is a virtual method mainly for compliance between other protocols that use this class
279  virtual bool shouldAttributePduBeCoupled() const;
280 
281 protected:
282 
286  DtTime myReceivedTime; // absRealTime when PDU was received into buffer.
287 };
288 
289 #define netPdu packet()
290 
292 {
293  return (DtNetPduHeader*) netRep();
294 }
295 
296 inline void* DtPdu::packet() const
297 {
298  return (void*) netRep();
299 }
300 
301 inline int DtPdu::protocolVersion() const
302 {
303  return netHeader()->version;
304 }
305 
306 inline int DtPdu::exerciseId() const
307 {
308  return netHeader()->DtExercise;
309 }
310 
311 inline DtPduKind DtPdu::kind() const
312 { return DtPduKind(netHeader()->DtKind);
313 }
314 
316 {
317  return DtProtocolFamily(netHeader()->family);
318 }
319 
320 inline DtTime DtPdu::timeStamp() const
321 {
322  return netHeader()->DtTime.time();
323 }
324 
326 {
327  return netHeader()->DtTime.type();
328 }
329 
330 inline void DtPdu::setExerciseId(int id)
331 {
332  netHeader()->DtExercise = id;
333 }
334 
335 inline void DtPdu::setTimeStamp(DtTime time, DtTimeStampType relOrAbs)
336 {
337  DtNetPduHeader* pduH = netHeader();
338  pduH->DtTime.setTime(time);
339  pduH->DtTime.setType(relOrAbs);
340 }
341 
342 
343 inline void DtPdu::setPduLength(unsigned int length)
344 {
346 }
347 
348 inline unsigned int DtPdu::pduLength() const
349 {
350  return netHeader()->DtLength;
351 }
352 
353 
354 inline int DtPdu::pduStatus() const
355 {
356  return netHeader()->pduStatus;
357 }
358 
359 inline void DtPdu::setPduStatus(int pduStatus)
360 {
362 }
363 
364 inline int DtPdu::status() const
365 {
366  return myOKStatus;
367 }
368 
369 inline void DtPdu::setStatus(int okStatus)
370 {
371  myOKStatus = okStatus;
372 }
373 
374 inline void DtPdu::setVersion(int vers)
375 {
376  netHeader()->version = (unsigned char) (DtU32) vers;
377 }
378 

Document ID: Generated on Mon Jun 22 21:18:40 EDT 2020 from SVN revision 213785
Copyright © 2005-2018 MAK Technologies. All Rights Reserved (www.mak.com)