VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Link-16 Helper Classes Example

VR-Link contains two helper classes, DtLink16Transmitter and DtLink16Signal, which help to fill in RadioTransmitter objects and Signal interactions according to the SISO-STD-002-2006 document.

The values may be filled in the helper class and then a DtSignalInteraction or DtRadioTransmitterRepository may be passed in, so that values will be set in the interaction or state repository. In addition, the helper classes' values may be filled in by a DtSignalInteraction or DtRadioTransmitterRepository that contains Link 16 data.

It should be noted that VR-Link does not provide structures for the actual Link 16 J-words themselves. These can be filled in the data section of the Signal interaction as specified in the Link 16 documentation.

// State Repository/Interaction includes
// Header files Link 16 helper classes
#if DtHLA
// FOM Mapping can be set up on the exercise connection's
// FOM Mapper
#endif
// This function demonstrates how the DtLink16Transmitter object
// can help the user fill the transmitter state repository. When
// initialized, the fidelity level is
void fillInTransmitterValues(DtRadioTransmitterRepository* xsr)
{
// Set the spreadSpectrumType appropriately - this will tell our
// transmitter that we are using link16, and the correct attributes
// will subsequently be encoded and sent. The default values are as
// follows:
// myFidelityLevel(0),
// myPrimaryMode(1),
// mySecondaryMode(0),
// mySynchronizationState(0),
// myNetworkSynchronizationId(0)
// Now that we've got a link16 transmitter, let's set some
// values that are different from the defaults.
}
// This function demonstrates, on the receiving side, how to retrieve
// the Link 16 spreadSpectrum attributes.
void retrieveLink16TransmitterValues(DtRadioTransmitterRepository* xsr)
{
DtU16 tsaLevel = xsr->fidelityLevel();
DtU16 primaryMode = xsr->primaryMode();
DtU16 secondaryMode = xsr->secondaryMode();
DtU16 syncState = xsr->synchronizationState();
int syncId = xsr->networkSynchronizationId();
}
#if DtHLA
// Some extra FOM Mapping is needed for the Link16 signal classes in HLA.
// DtLink16Signal class provides a static method that easily sets up
// FOM Mapping for the user.
void setUpFomMapping(DtExerciseConn* conn)
{
}
#endif
#if DtDIS
// This function demonstrates how to fill Link 16 data into a signal interaction.
// When encode is called on the DtLink16Signal, the encoding type of the signal
// passed in will be filled with the number of J-words (specified by the user).
// The encoding type will be set to raw binary, the TDL type will be set to 100,
// and the sample rate and number of samples will be set to 0. The data passed in
// should be the actual Link16 message, formatted to be sent to the network. The
// Link 16 PDU fields will be set in the signal data preceding the Link 16 message
// passed in by the user.
void fillInLink16Signal(DtSignalInteraction* inter)
{
// Test data
DtLink16Signal link16Signal;
link16Signal.setNpgNumber(2);
link16Signal.setNetNumber(5);
link16Signal.setTsecCvll(12);
link16Signal.setMsecCvll(21);
link16Signal.setTimeIdSlotNumber(1220);
link16Signal.setTimeIdEpochNumber(2);
link16Signal.setPerceivedTransmitTimeInteger(9660);
char fakeData[8] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8};
// The encode call will actually the set values in the
// interaction. The data will come after the Link 16 fields,
// and should normally contain a Link 16 message.
link16Signal.encodeHeader(inter, 4, (void*)fakeData, 8);
}
// This function demonstrates how to retrieve the data from a signal interaction
// and fill it into a DtLink16Singal object. The decode() method
// returns a pointer to the data section, past the Link 16 fields,
// which should contain a Link 16 message.
void retrieveLink16SignalValues(DtSignalInteraction* inter)
{
// The Link 16 fields take up 20 bytes of the data.
int dataSize = inter->numDataBytes() - 20;
DtLink16Signal link16Signal;
void* data = link16Signal.decodeHeader(inter);
// The link16Signal object now holds the Link 16 field values,
// and we have the size of the data, along with a pointer to it,
// so it can be translated to Link 16 messages.
}
#endif

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)