VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
radioTransmitterStateComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
11 #include "vrfutil/rwUUID.h"
12 #include <legionStandardOM/sets/readRadioTransmitterRepository.hpp>
13 #include <legionStandardOM/sets/writeRadioTransmitterRepository.hpp>
14 #include <matrix/vlVector.h>
15 #include <vlpi/entityType.h>
16 
17 namespace makVrf
18 {
20  {
22  {
32  Intercom
33  };
34 
36  : myAntennaPatternType(0)
37  , myPseudoNoiseInUse(false)
38  , myTimeHopInUse(false)
39  , myModulationParams(nullptr)
40  , myModulationParamsSize(0)
41  , myRadioId(0)
42  {
43  }
44 
46  : myWorldAntennaLoc(orig.myWorldAntennaLoc)
47  , myRelativeAntennaLoc(orig.myRelativeAntennaLoc)
48  , myAntennaPatternType(orig.myAntennaPatternType)
49  , myPseudoNoiseInUse(orig.myPseudoNoiseInUse)
50  , myTimeHopInUse(orig.myTimeHopInUse)
51  , myModulationParams(nullptr)
52  , myModulationParamsSize(0)
53  , myRadioId(orig.myRadioId)
54  {
55  if (orig.myModulationParams)
56  {
57  myModulationParams = (char*)malloc(orig.myModulationParamsSize);
58  memcpy(myModulationParams, orig.myModulationParams, orig.myModulationParamsSize);
59  myModulationParamsSize = orig.myModulationParamsSize;
60  }
61  }
62 
64  {
65  if (myModulationParams)
66  {
67  free(myModulationParams);
68  }
69  }
70 
72  {
73  myRelativeAntennaLoc = orig.myRelativeAntennaLoc;
74  myWorldAntennaLoc = orig.myWorldAntennaLoc;
75  myRadioId = orig.myRadioId;
76  myAntennaPatternType = orig.myAntennaPatternType;
77  myPseudoNoiseInUse = orig.myPseudoNoiseInUse;
78  myTimeHopInUse = orig.myTimeHopInUse;
79 
80  if (myModulationParams)
81  {
82  free(myModulationParams);
83  myModulationParams = nullptr;
84  myModulationParamsSize = 0;
85  }
86 
87  if (orig.myModulationParams)
88  {
89  myModulationParams = (char*)malloc(orig.myModulationParamsSize);
90  memcpy(myModulationParams, orig.myModulationParams, orig.myModulationParamsSize);
91  myModulationParamsSize = orig.myModulationParamsSize;
92  }
93 
94  return *this;
95  }
96 
97  DEFINE_ACCESSOR_MUTATOR(DtVector, worldAntennaLoc, WorldAntennaLoc)
98  DEFINE_ACCESSOR_MUTATOR(DtVector, relativeAntennaLoc, RelativeAntennaLoc)
99  DEFINE_ACCESSOR_MUTATOR(unsigned int, antennaPatternType, AntennaPatternType)
100  DEFINE_ACCESSOR_MUTATOR(UInt64, radioId, RadioId)
101  DEFINE_ACCESSOR_MUTATOR(bool, pseudoNoiseInUse, PseudoNoiseInUse)
102  DEFINE_ACCESSOR_MUTATOR(bool, timeHopInUse, TimeHopInUse)
103 
104  const char* modulationParams() const { return myModulationParams; };
105  const unsigned char& modulationParamsSize() const { return myModulationParamsSize; };
106 
107  void setModulationParams(const char* p, unsigned char l)
108  {
109  if (myModulationParams)
110  {
111  free(myModulationParams);
112  myModulationParamsSize = 0;
113  myModulationParams = nullptr;
114  }
115 
116  if (p && l)
117  {
118  myModulationParams = (char*)malloc(l);
119  memcpy(myModulationParams, p, l);
120  myModulationParamsSize = l;
121  }
122  }
123 
124  protected:
126  unsigned char myModulationParamsSize;
127 
130  unsigned int myAntennaPatternType;
131 
134 
136  };
137 
141  {
142  public:
144 
146  : DtFrameStateInterface(storage)
147  {
148  }
149 
151  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, transmitState, TransmitState)
152  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtRadioEntityType, radioEntityType, RadioEntityType)
153  virtual const unsigned long long frequency() const { throw DtUnimplementedMethod("The const frequency() method is unimplemented"); };
154  virtual void setFrequency(unsigned long long) { throw DtUnimplementedMethod("The const setFrquency(unsigned long long) method is unimplemented"); };
155  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(float, power, Power)
156  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtVector, relativeAntennaLoc, RelativeAntennaLoc)
157  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, relativePosition, RelativePosition)
158  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtVector, worldAntennaLoc, WorldAntennaLoc)
159  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, inputSource, InputSource)
160  UNDEFINED_RETURNVALUE_ACCESSOR(unsigned long, streamTagUpper)
161  UNDEFINED_RETURNVALUE_ACCESSOR(unsigned long, streamTagLower)
162  virtual const unsigned long long streamTag() const { throw DtUnimplementedMethod("The const streamTag() method is unimplemented"); };
163  virtual void setStreamTag(unsigned long u, unsigned long l) { throw DtUnimplementedMethod("The const setStreamTag() method is unimplemented"); };
164  virtual void setStreamTag(unsigned long long) { throw DtUnimplementedMethod("The const setStreamTag(unsigned long long) method is unimplemented"); };
165  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(unsigned int, antennaPatternType, AntennaPatternType)
167  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, cryptoKey, CryptoKey)
168  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, cryptoMode, CryptoMode)
169  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, cryptoSystem, CryptoSystem)
170  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, detailedModulationType, DetailedModulationType)
171  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(float, frequencyBandwidth, FrequencyBandwidth)
172  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(bool, frequencyHopInUse, FrequencyHopInUse)
173  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(bool, pseudoNoiseInUse, PseudoNoiseInUse)
174  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(bool, timeHopInUse, TimeHopInUse)
175  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, majorModulationType, MajorModulationType)
176  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, modulationSystemType, ModulationSystemType)
177  UNDEFINED_RETURNVALUE_ACCESSOR(char*, modulationParams)
178  UNDEFINED_RETURNREF_ACCESSOR(unsigned char, modulationParamsSize)
179  virtual void setModulationParams(const char* params, unsigned char length) { throw DtUnimplementedMethod("The const setModulationParams() method is unimplemented"); };
180  };
181 
184  {
185  public:
187 
188  virtual ~DtRadioTransmitterStateComponentNextFrame() override;
189 
191  const DtRadioTransmitterStateComponentData& frameState() const { return myData; };
193 
194  virtual const DtUUID hostId() const override;
195 
196  virtual const unsigned int transmitState() const override;
197  virtual void setTransmitState(const unsigned int&) override;
198 
199  virtual const unsigned int& antennaPatternType() const override;
200  virtual void setAntennaPatternType(const unsigned int&) override;
201 
202  virtual const UInt64 radioId() const override;
203  virtual void setRadioId(const UInt64&) override;
204 
205  virtual const DtRadioEntityType radioEntityType() const override;
206  virtual void setRadioEntityType(const DtRadioEntityType&) override;
207 
208  virtual const unsigned long long frequency() const override;
209  virtual void setFrequency(unsigned long long) override;
210 
211  virtual const unsigned long streamTagUpper() const override;
212  virtual const unsigned long streamTagLower() const override;
213  virtual const unsigned long long streamTag() const override;
214  virtual void setStreamTag(unsigned long u, unsigned long l) override;
215  virtual void setStreamTag(unsigned long long tag) override;
216 
217  virtual const float power() const override;
218  virtual void setPower(const float&) override;
219 
220  virtual const char* modulationParams() const override;
221  virtual const unsigned char& modulationParamsSize() const override;
222  virtual void setModulationParams(const char* params, unsigned char length) override;
223 
224  virtual const DtVector& relativeAntennaLoc() const override;
225  virtual void setRelativeAntennaLoc(const DtVector&) override;
226 
227  virtual const DtVector& worldAntennaLoc() const override;
228  virtual void setWorldAntennaLoc(const DtVector&) override;
229 
230  virtual const DtVector relativePosition() const override;
231  virtual void setRelativePosition(const DtVector&) override;
232 
233  virtual const unsigned int inputSource() const override;
234  virtual void setInputSource(const unsigned int&) override;
235 
236  virtual const unsigned int cryptoKey() const override;
237  virtual void setCryptoKey(const unsigned int&) override;
238 
239  virtual const unsigned int cryptoMode() const override;
240  virtual void setCryptoMode(const unsigned int&) override;
241 
242  virtual const unsigned int cryptoSystem() const override;
243  virtual void setCryptoSystem(const unsigned int&) override;
244 
245  virtual const unsigned int majorModulationType() const override;
246  virtual void setMajorModulationType(const unsigned int&) override;
247 
248  virtual const unsigned int modulationSystemType() const override;
249  virtual void setModulationSystemType(const unsigned int&) override;
250 
251  virtual const unsigned int detailedModulationType() const override;
252  virtual void setDetailedModulationType(const unsigned int&) override;
253 
254  virtual const float frequencyBandwidth() const override;
255  virtual void setFrequencyBandwidth(const float&) override;
256 
257  virtual const bool frequencyHopInUse() const override;
258  virtual void setFrequencyHopInUse(const bool&) override;
259 
260  virtual const bool& pseudoNoiseInUse() const override;
261  virtual void setPseudoNoiseInUse(const bool&) override;
262 
263  virtual const bool& timeHopInUse() const override;
264  virtual void setTimeHopInUse(const bool&) override;
265 
267  virtual void makeWritable() override;
268 
270  virtual void makeReadOnly() override;
271 
273  UInt64 globalId() const;
274 
275  virtual Legion::WriteStateInstance writeStateInstance() override;
276  virtual void updateStateData(DtStateData*) override;
277 
278  void cleanupWriteState();
279 
280  void setPublishingOnLegionNetwork(bool b);
281 
282  protected:
284  LOM::WriteRadioTransmitterRepository myWriteRadioTransmitterRepository;
286  };
287 
290  {
291  public:
293 
295  const DtRadioTransmitterStateComponentData& frameState() const { return myData; };
296 
297  virtual const DtUUID hostId() const override;
298  virtual const unsigned int transmitState() const override;
299  virtual const DtRadioEntityType radioEntityType() const override;
300  virtual const unsigned long long frequency() const override;
301  virtual const unsigned long long streamTag() const override;
302  virtual const unsigned long streamTagUpper() const override;
303  virtual const unsigned long streamTagLower() const override;
304  virtual const float power() const override;
305  virtual const DtVector& worldAntennaLoc() const override;
306  virtual const DtVector& relativeAntennaLoc() const override;
307  virtual const DtVector relativePosition() const override;
308  virtual const unsigned int inputSource() const override;
309  virtual const unsigned int& antennaPatternType() const override;
310  virtual const UInt64 radioId() const override;
311  virtual const unsigned int cryptoKey() const override;
312  virtual const unsigned int cryptoMode() const override;
313  virtual const unsigned int cryptoSystem() const override;
314  virtual const unsigned int detailedModulationType() const override;
315  virtual const float frequencyBandwidth() const override;
316  virtual const bool frequencyHopInUse() const override;
317  virtual const bool& pseudoNoiseInUse() const override;
318  virtual const bool& timeHopInUse() const override;
319  virtual const unsigned int majorModulationType() const override;
320  virtual const unsigned int modulationSystemType() const override;
321  virtual const char* modulationParams() const override;
322  virtual const unsigned char& modulationParamsSize() const override;
323 
324  bool readComponentValid() const;
325  bool findReadComponent();
326  virtual Legion::ReadStateInstance readStateInstance() const override;
327 
329  UInt64 globalId() const;
330  virtual void updateStateData(DtStateData*) override;
331 
332  protected:
335  {
336  myData = data;
337  }
338 
339  protected:
340  LOM::ReadRadioTransmitterRepository myReadRadioTransmitterRepository;
342  };
343 
347  {
348  public:
350 
351  bool isDoubleBuffered() { return true; };
352  virtual const DtFrameStateInterface* currentFrameState() const override { return &myCurrentFrameState; }
353  virtual DtFrameStateInterface* nextFrameState() override { return &myNextFrameState; };
354  virtual const DtFrameStateInterface* nextFrameState() const override { return &myNextFrameState; };
355 
356  virtual void updateDataStorage() override
357  {
358  if (!myFoundComponent)
359  {
360  myFoundComponent = myCurrentFrameState.findReadComponent();
361  }
362 
363  if (myNextFrameState.isWritable())
364  {
365  myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
366  }
367 
368  myCurrentFrameState.emitComponentUpdated();
369  }
370 
371  virtual void updateStateData(DtStateData* sd) override
372  {
373  myCurrentFrameState.updateStateData(sd);
374  myNextFrameState.updateStateData(sd);
375  }
376 
378  virtual bool forceAdvance() override;
379 
381  virtual void firstFrameAdvance() override;
382 
383  virtual void aboutToBeDeleted() override
384  {
386  myCurrentFrameState.aboutToBeDeleted();
387  myNextFrameState.aboutToBeDeleted();
388  }
389 
390  virtual void completeSetup() override;
391  virtual void removeAdditionalStateComponents() override;
392  virtual void setPublishingOnLegionNetwork(bool b) override;
393 
394  protected:
398  };
399 
403 }
Definition: radioTransmitterStateComponent.h:27
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtRadioTransmitterStateComponentCurrentFrame myCurrentFrameState
Definition: radioTransmitterStateComponent.h:395
Definition: radioTransmitterStateComponent.h:24
Definition: stateDataTypes.h:23
virtual void aboutToBeDeleted() override
Definition: radioTransmitterStateComponent.h:383
3) Define the current frame class. This will be used for read access.
Definition: radioTransmitterStateComponent.h:289
bool isDoubleBuffered()
Definition: radioTransmitterStateComponent.h:351
1) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: radioTransmitterStateComponent.h:140
CryptoSystem
Definition: radioStateTypes.h:18
DtRadioTransmitterStateComponentData & frameState()
Definition: radioTransmitterStateComponent.h:192
Definition: radioTransmitterStateComponent.h:19
virtual void setFrequency(unsigned long long)
Definition: radioTransmitterStateComponent.h:154
const DtRadioTransmitterStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: radioTransmitterStateComponent.h:295
virtual void setStreamTag(unsigned long long)
Definition: radioTransmitterStateComponent.h:164
Definition: stateComponent.h:269
Definition: radioTransmitterStateComponent.h:30
ModulationSystemType
Definition: radioStateTypes.h:29
Definition: radioTransmitterStateComponent.h:31
virtual DtFrameStateInterface * nextFrameState() override
Definition: radioTransmitterStateComponent.h:353
#define UNDEFINED_RETURNVALUE_ACCESSOR(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:31
TransmitState
Definition: radioStateTypes.h:34
DtRadioTransmitterStateComponentNextFrame myNextFrameState
Definition: radioTransmitterStateComponent.h:396
Contains the DtUUID class declaration.
unsigned long long UInt64
Definition: stateDataTypes.h:17
#define UNDEFINED_RETURNREF_ACCESSOR(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:34
unsigned int myAntennaPatternType
Definition: radioTransmitterStateComponent.h:130
InputSource
Definition: radioStateTypes.h:20
2) Define the next frame class. This will be used for write access.
Definition: radioTransmitterStateComponent.h:183
char * myModulationParams
Definition: radioTransmitterStateComponent.h:125
virtual void updateStateData(DtStateData *sd) override
Implement to update data storage to the new state data.
Definition: radioTransmitterStateComponent.h:371
Definition: radioTransmitterStateComponent.h:25
Definition: radioTransmitterStateComponent.h:23
UInt64 myRadioId
Definition: radioTransmitterStateComponent.h:135
LOM::WriteRadioTransmitterRepository myWriteRadioTransmitterRepository
Definition: radioTransmitterStateComponent.h:284
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:231
const unsigned char & modulationParamsSize() const
Definition: radioTransmitterStateComponent.h:105
CryptoMode
Definition: radioStateTypes.h:17
bool myPseudoNoiseInUse
Definition: radioTransmitterStateComponent.h:132
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:384
void setModulationParams(const char *p, unsigned char l)
Definition: radioTransmitterStateComponent.h:107
#define UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:53
DtVector myRelativeAntennaLoc
Definition: radioTransmitterStateComponent.h:129
unsigned char myModulationParamsSize
Definition: radioTransmitterStateComponent.h:126
virtual void aboutToBeDeleted()
virtual ~DtRadioTransmitterStateComponentData()
Definition: radioTransmitterStateComponent.h:63
DtStateComponentCreator< DtRadioTransmitterStateComponentImplementation > DtRadioTransmitterStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: radioTransmitterStateComponent.h:402
DtVector myWorldAntennaLoc
Definition: radioTransmitterStateComponent.h:128
#define UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:57
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
DtRadioTransmitterStateComponentData()
Definition: radioTransmitterStateComponent.h:35
bool myFoundComponent
Definition: radioTransmitterStateComponent.h:397
RadioInputSource
Definition: radioTransmitterStateComponent.h:21
bool myPublishingOnLegionNetwork
Definition: radioTransmitterStateComponent.h:283
Definition: radioTransmitterStateComponent.h:28
DtRadioTransmitterStateComponentData & operator=(const DtRadioTransmitterStateComponentData &orig)
Definition: radioTransmitterStateComponent.h:71
virtual const DtFrameStateInterface * currentFrameState() const override
Definition: radioTransmitterStateComponent.h:352
virtual void setStreamTag(unsigned long u, unsigned long l)
Definition: radioTransmitterStateComponent.h:163
DT_DLL_VRVCORE double length(const makVrv::DtCoordinateSystem &, const std::vector< DtVector > &vertices)
Returns the total distance of a segmented line defined by the provided vector of vertices. Coordinates are in local database coordinates. The coordinate system is used to convert between the local database coordinates and geocentric. All distance is in 2D – the Z value is ignored.
virtual void updateDataStorage() override
Implement to update data storage. Called from advanceFrame.
Definition: radioTransmitterStateComponent.h:356
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: radioTransmitterStateComponent.h:346
virtual const DtFrameStateInterface * nextFrameState() const override
Definition: radioTransmitterStateComponent.h:354
DtRadioTransmitterStateComponentData(const DtRadioTransmitterStateComponentData &orig)
Definition: radioTransmitterStateComponent.h:45
void advanceFrame(const DtRadioTransmitterStateComponentData &data)
Definition: radioTransmitterStateComponent.h:334
#define DT_DLL_vrfStateData
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfStateDataDefines.h:26
DtRadioTransmitterStateComponentData myData
Definition: radioTransmitterStateComponent.h:341
DtRadioTransmitterStateComponentData myData
Definition: radioTransmitterStateComponent.h:285
Definition: radioTransmitterStateComponent.h:29
AntennaPatternType
Definition: radioStateTypes.h:15
Definition: radioTransmitterStateComponent.h:26
Contains the DtStateComponent class declaration.
const DtRadioTransmitterStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: radioTransmitterStateComponent.h:191
bool myTimeHopInUse
Definition: radioTransmitterStateComponent.h:133
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:294
LOM::ReadRadioTransmitterRepository myReadRadioTransmitterRepository
Definition: radioTransmitterStateComponent.h:340

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)