VR-Link API Documentation for DIS
 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 
The DtPduDecoder class provides a base class for all DIS decoders.
Definition: pduDecoder.h:18
DtPduStatusLVCIndicator
Definition: disEnums.h:2911
virtual void setStatus(int okStatus)
Sets the PDU&#39;s status to okStatus.
Definition: pdu.h:369
int DtProtocolVersionToRecvMin
virtual void setVersion(int vers)
Set/Get protocol version from PDU header.
Definition: pdu.h:374
DtNetExerciseId DtExercise
Definition: pduHeader.h:17
virtual DtTime timeStamp() const
Return the time (in seconds past an hour) encoded in the PDU header&#39;s time stamp. ...
Definition: pdu.h:320
#define DT_DLL_VL
Definition: vlMachineTypes.h:108
virtual void sizeChanged(int size)=0
Called by changeSize.
void setTime(DtTime time)
Get the time contained in the timestamp to time % an hour.
DtTimeStampType type() const
virtual const char * netRep() const
Get network representation.
Definition: vlBaseMsg.h:108
DtNetU8 pduStatus
Definition: pduHeader.h:22
int myOKStatus
Definition: pdu.h:285
virtual int protocolVersion() const
Definition: pdu.h:301
virtual DtProtocolFamily protocolFamily() const
Returns protocol family from PDU header.
Definition: pdu.h:315
Definition: pduHeader.h:14
Definition: vlTimeStampType.h:18
The DtPduEncoder class provides a base class for all DIS encoders.
Definition: pduEncoder.h:18
virtual int status() const
Get PDU status.
Definition: pdu.h:364
int DtProtocolVersionToRecvMax
virtual void setPduStatus(int)
Set the PDU Status in the PDU header.
Definition: pdu.h:359
DtPduEncoder * myEncoder
Definition: pdu.h:283
DtTime time() const
Get the time contained in the timestamp (in seconds).
class DtPduFactory:
Definition: pduFactory.h:38
DtPduStatusRadioAttachedIndicator
Definition: disEnums.h:2938
This file provides a declaration of the class DtBaseMsg.
DtPduDecoder * myDecoder
Definition: pdu.h:284
virtual void setExerciseId(int id)
Set/Get exerciseID in PDU header.
Definition: pdu.h:330
virtual void * packet() const
Older function that returns a pointer to the network representation.
Definition: pdu.h:296
virtual void setReceivedTime(DtTime t)
absRealTime when PDU was received into buffer.
Definition: pdu.h:120
A bass class for PDUs and other network messages.
Definition: vlBaseMsg.h:27
DtPdu is the base class for all PDU&#39;s in VR-Link.
Definition: pdu.h:69
DtNetU16 DtLength
Definition: pduHeader.h:21
virtual int exerciseId() const
Definition: pdu.h:306
virtual unsigned int pduLength() const
Return the length of the PDU, as indicated in the PDU header.
Definition: pdu.h:348
virtual void setPduLength(unsigned int length)
Set the PDU header&#39;s length.
Definition: pdu.h:343
void setType(DtTimeStampType type)
Set/Get timestamp type.
virtual int pduStatus() const
Returns the PDU Status from the PDU header.
Definition: pdu.h:354
DtProtocolFamily
([UID 5]) - Protocol Family
Definition: disEnums.h:349
virtual int length() const
Get size of message.
DtNetTimeStamp DtTime
Definition: pduHeader.h:20
DtPduStatusIntercomAttachedIndicator
Definition: disEnums.h:2945
virtual DtTimeStampType timeStampType() const
Return the type of the time stamp, as indicated in PDU header.
Definition: pdu.h:325
DtPduStatusFireTypeIndicator
Definition: disEnums.h:2925
DtBaseMsg & operator=(const DtBaseMsg &msg)
Assignment.
DtTime myReceivedTime
Definition: pdu.h:286
struct DtBufferPlaceHolder * DtBufferPtr
Definition: vlBaseMsg.h:17
#define DtUSE_INTERNAL_BUFFER
Definition: vlBaseMsg.h:22
Contains the standard DIS enumerations.
virtual DtNetPduHeader * netHeader() const
Returns a pointer to the PDU&#39;s header.
Definition: pdu.h:291
DtTimeStampType
Definition: vlTimeStampType.h:16
int DtProtocolVersionToSend
unsigned long DtU32
A 32 bit unsigned integer value.
Definition: vlMachineTypes.h:153
DtNetVersion version
Definition: pduHeader.h:16
DtPduKind
([UID 4]) - PDU Type
Definition: disEnums.h:238
Instances of DtString are used to represent strings.
Definition: vlString.h:29
virtual void setTimeStamp(DtTime time, DtTimeStampType type=DtTimeStampRelative)
Set the PDU header&#39;s time stamp to reflect time and type.
Definition: pdu.h:335
#define DtPDU_STATUS_BIT_SHIFT(attr, val)
Definition: pdu.h:19
DtPduStatusDetonationTypeIndicator
Definition: disEnums.h:2931
virtual DtTime receivedTime() const
Definition: pdu.h:121
virtual DtPduKind kind() const
Returns PDU kind from PDU header.
Definition: pdu.h:311

Document ID: Generated on Tue Feb 2 21:02:17 EST 2021 from SVN revision 223668
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)