All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
PDU
can be cloned via theKDIS::PDU::clone(pdu)
function- Clone example, named
clone
, demonstrating how aPDU
can be cloned KDIS::UTIL::format
utility function to simulatestd::format
(C++20): Format arguments according to the format string, and return the result as a stringCMake
optionKDIS_BUILD_DOCS
(defaultFALSE
) to specify whether or not to build documentation
- Extension of header files changed from
.h
to.hpp
C++
minimum supported standard isC++11
CMake
minimum supported version is3.14
- Enum
KDIS::ErrorCodes
is aclass enum
and has been renamed toKDIS::ErrorCode
- Enum
KDIS::Endian
is aclass enum
. Renamed valueLittle_Endian
toLITTLE
, and valueBig_Endian
toBIG
KDIS::KException
two parameters' constructor has been inverted to accepts error code and message instead of message and error codeKException
inherits fromstd::runtime_error
instead ofstd::exception
.KDIS
library can be linked to a target more easily:target_link_libraries(executable PRIVATE KDIS::KDIS)
- Renamed
CMake
option fromBUILD_EXAMPLES
toKDIS_BUILD_EXAMPLES
- Renamed
CMake
option fromBUILD_TESTS
toKDIS_BUILD_TESTS
KDIS_Change_Log.htm
file has been replaced withCHANGELOG.md
and is based on the format Keep a Changelog- Overall code and repository structure have been reworked to improve maintainability
KDIS:KException
generic constructorCMake
optionBUILD_EXAMPLES_TO_LINK_TO_LIB
. To determine whether to build astatic
orshared
library, use the officialBUILD_SHARED_LIBS
flag optionCMake
optionEXAMPLES_USE_STATIC_OR_SHARED_LIB
. To determine whether to build astatic
orshared
library, use the officialBUILD_SHARED_LIBS
flag optionCMake
optionUSE_SOLUTION_FOLDERS
KDIS_Change_Log.htm
file
ApplyFilterBeforeDecodingPDUBody
toPDU_Factory_Filter
. It can be used to reject PDU's before the body has been decoded enhancing performance or for rejecting custom or non-standard PDU'sRadioAppearance
structSupplyAppearance
structVariableParameter
typeSeparationPart
BeamStateEnum
to theEnumEmitter
file based on theUID 318
contents ofSISO-REF-010-2016-v22
document- Additional enums (
SISO 10-2015
) forModulationType
,BeamAntennaPatternReferenceSystem
,ModulationSystem
,TDLType
,SystemType
,SystemMode
, andSystemName
DIS 7
support added forSystemIdentifier
,BeamAntennaPattern
, andExpendableDescriptor
SendOnly
option toConnection
class.Connection
will not bind if this istrue
- Support for
unique_ptr
whenC++11
is supported - Implementation of getter and setter running lights to
SubSurfacePlatformAppearance
- More unit tests
- Guard in case
_USE_MATH_DEFINES
is already defined inKUtils.h
CMAKE_INSTALL_PREFIX
to define alternative install location (defaults to/usr/include/KDIS
)- Non-Human Life Form Appearance
Simulation_Management_Header
explicit constructor and copy constructor- Missing enums
16
and17
forEventTypeEnum
(#89) - Additional Time Shared enums (#103)
- Incorrect conversion from bits to bytes in
Signal_PDU
EmitterBeam
class to useDIS_VERSION
definition when defining or declaring member variables and method. ForDIS 7
, introduced theBeamStatus
andJammingTechnique
classes to replicate the v7 PDU structurePDU_Factory_Filter
virtual destructor to prevent undefined behaviorLifeFormAppearance
struct with additional fieldsAirPlatformAppearance
struct with additional fieldsGuidedMunitionAppearance
struct with additional fields- Improved
GetAsString
function forNonHumanLifeFormAppearance
CulturalFeatureAppearance
incorrectly supports Engine Smoke bit. Modified the struct to eliminate bit-6 trackingConnection
functions to bevirtual
allowing further derivation
EllipsoidRecord2::Decode
should not have includedEllipsoidRecord1::Decode
- Inaccuracy in
GeocentricToGeodetic
calculations - Unit test compilation issues on Linux
- Corrected some old tutorial links
- Ordering of orientation and
dt
sigma fields inEllipsoidRecord2
- Whitespace and comment cleaning
- Incorrect PDU length calculation when calling
Comment_PDU::SetVariableDatum
Action_Response_PDU
constructor not populating all fields and incorrect length calculation- Incorrect erasing loop in
Connection::RemoveSubscriber
where duplicates were not always removed (#49) - Rounding error in
GeocentricToGeodetic
- Incorrect PDU length comment (#50)
AttributeRecordSet::GetRecordLength
not including all fields in size calculation (#51)- Divide by
0
inDeadReckoningCalculator::computeRotationAxis
when axis were0
- Bug in
Connection::GetNextPDU
when a PDU was not decoded. Now the stream is cleared and flow continues - Bug in
OrientationError::SetElevationError
ndue to no value was assigned Minefield_Data_PDU::Encode
not correctly increment the detonation wires- Memory leak in
PDU_Factory
when applyFilters rejected the PDU - Memory leak in
Entity_State_PDU::operator=
when assigning a newDeadReckoningCalculator
- Conversion Near Poles and Casting in
KCOnversion.h
(thanks Kyle) - Logic error in detecting polar regions for the coordinate conversion code
- Bug in
Intercom_Control_PDU::Decode
- Type mismatch between
EntityAppearance
types (class to structs) - Memory leak in
Entity_State_PDU
when callingSetDeadReckoningCalculator
CryptoSystem
byte orderingMarkXTransponder
negative altitude detection- Potential stream overrun in
DetonationPDU
Layer2
andLayer3
incorrectly double decoding the header due to constructors not ignoring the header even when one is provided- Enum functions not being exported to
dll
(#94) - Incorrect enums for Beam Function (#103)
- Unit tests via
googletest
framework - Bool operator for convenience to
KRef_Ptr
Connection::SetBlockingTimeOut
allowing for setting a timeout for blocking mode- Copy constructor and assignment operator to
Entity_State_PDU
- Getter and setter functions to
EntityKind
that support integers as well as enums for kind, domain and country simplifying the overall usage GetEnumSize
andGetEnumDescriptor
exposing the internalEnumDescriptor
arrays used forGetEnumAsString
andGetEnumFromString
allowing to iterate through an enumeration using these two functions- Implicit conversion support to
KRef_Ptr
- Implementation of
LifeFormAppearance::SetEntityLifeformState
PDU_FactoryLink16
toLink 16
example- Padding to
SilentAggregateSystem
- Padding to
Mode5TransponderBasicData
- Format in
RelativeWorldCoordinates::GetAsString()
- Improved
Connection
socket error messages - Improved debugging information in header when a PDU has a buffer that is too small
Link 16
example is built as a dynamic libraryLink16
example code to support partial decoding
- Incorrect size was assigned to
LE_VECTOR_SIZE
KRef_Ptr
compilation bug when using weak referencesAggregateMarking::Decode
not setting the last char to\0
inm_sAggregateMarkingString
casuing comparison issues- Bug decode and encode functions in
Entity_State_Update_PDU
that not handled padding correctly - Bug in
Appearance_PDU
decode function when no flags were used - Bug in
AttachedPart
not encoding and decoding the part type - Bug in
FixedDatum:GetDatumValue
was usingstrncpy
to return data which causes issues when the data was not astring
- Bug in
IFF_PDU::Decode
- Bug in
Intercom Control
PDU andIntercomCommunicationParameters
where some values were not initialized causing unexpected behaviours during encoding and deconding - Bug in
Underwater_Acoustic_PDU::Decode
was encoding by mistake - Bug in
SphereRecord2::Encode()
was calling the wrong encoding function internally - Bug in
GED_BasicFixedWingAircraft
andGED_BasicFixedWingAircraft
that used8 bit
int instead of16 bit
for speed CMake
forKDIS_LIB
that was causing building a shared library instead of staticCMake
forMinGW
when buildinglib
anddll
version ofKDIS
- Comparison operator
==
inSet_Data_R_PDU
- Comparison operator
==
inKFIXED
- Decoding bug in
Intercom_Control_PDU
- Deconding bug when handling padding in
Aggregate_State_PDU
- Encoding bug in
Receiver_PDU
- Encoding and deconding bug in
Entity_Damage_Status_PDU
was not including padding - Exception handling bug in
Connection
andIsGroupOf_PDU
- Incorrect PDU minimum size for
GridDataType
0
and1
- Incorrect PDU size in
Underwater_Acoustic_PDU
- Incorrect PDU size in
IFF_ATC_NAVAIDS_FundamentalParameterData
- Missing padding in
IO_Report_PDU
null
reference crash when encodingIntercomCommunicationParameters
with no record- Protocol version not being set in
Intercom_Control_PDU
SilentEntitySystem
not initializingm_ui16NumOfAppearanceRecords
to0
casuing enconding and deconding failure- Size calculation in
SetFixedDatum
andSetVariableDatum
TSPI_PDU::m_ui8SSDLen
not being initialised to0
in some constructors- Uninitialized variables in
SetData_R_PDU
VariableDatum::GetPDULength
returning the incorrect value- Several fixes for
LE_FIRE_PDU
andLE_Detonation_PDU
from public submission (thanks G�ran)
IFF_PDU
PDU which replacesIFF_ATC_NAVAIDS_L1_PDU
PDUIFF_Layer3Transponder
andIFF_Layer3Interrogator
classesVariableParamaters
class. This replaces allArticulationParamaters
classes as the base classAttachedPart
classCryptoSystem::SetKeyID
andCryptoSystem::GetKeyID
- Implementations of
LinearVelocity
,EntityLocation
,EntityOrientation
,EntityAppearance
inEntity_State_Update_PDU
- Implementation of
SetPDUStatusFireType
andGetPDUStatusFireType
inFire_PDU
- Getter and setter for
ResponseCode
,ResponsePowerReduction
, andResponseRadarEnhancement
inFundamentalOperationalData_RRB
- Getter and setter for
NumBurst
inPointObjectAppearance
- Getter and setter for
AttackerEntityID
toAttackerEntityID
WorldCoordinates::Set
to set all values in one callVector::Set
to set all values in one callVector::Lerp
WorldCoordinates::Lerp
SystemDesignator
andSystemSpecificData
toIFF_ATC_NAVAIDS_L1_PDU
SetTCASVersion
toFundamentalOperationalData_MarkXTransponder
andFundamentalOperationalData_MarkXInterrogator
- Missing enums to
StationName
- Missing enums to
WarfareType
- Missing enums to
EncodingType
Automatic Dependent Surveillance
broadcast toEntityCapabilities
make install
target for Linux (thanks Bud Davis)
- Renamed
ArticulationParamaters
toArticulatedPart
BurstDescriptor
inLE Fire
andLE Detonation
PDU withMunitionDescriptor
. This class is the same except for theSetMunition
andGetMunition
functions which are now namedSetType
andGetType
- Renamed
ArticulationParameters
toArticulatedPart
- Renamed
TypeVariantHighBits
toTypeVariantClass
inArticulatedPart
- Renamed
TypeVariantLowBits
toTypeVariantMetric
inArticulatedPart
FactoryDecoder
usesKRef_Ptr
class- Renamed
EnumFundamentalOperationalData.h
toEnumIFF.h
andEnumFundamentalOperationalData.cpp
toEnumIFF.cpp
- Renamed enum
WarheadType::GlassBladsWarhead
toWarheadType::GlassBeadsWarhead
- Renamed enum
EncodingType::_16_bit_linear_PCM
toEncodingType::_16_bit_linear_PCM2sComplementBigEndian
- From defintion
COMM_CHANNEL_TYPE
tostatic KUINT16 COMM_CHANNEL_TYPE_SIZE
- Cleaned namespaces
- Cleaned
GetAsString
for many classes - Performance improvements in decoding. Parameter
ignoreHeader
added toDecode
function on PDU's, this will help performance by not decoding the Header twice each time a PDU is received.PDU_Factory
uses this technique - Improved comments
- Copyright 2013 KDIS to Copyright 2013 Karl Jones
UNLICENSE
statement to examples exceptsLink16
BurstDescriptor
. Fire PDU and Detonation PDU now use the Descriptor class. Fire PDU has Munition and Expendable descriptor. Detonation has Munition, Expendable or Explosion descriptor. This is in line with theDIS 7
standard. To support< DIS 7
then use the Munition Descriptor classIFF_ATC_NAVAIDS_L2_PDU
PDU. Now a data type class calledIFF_Layer2
which is a property ofIFF_PDU
- Removed
OtherCollision
from enumCollisionType
- Macro
KDIS_VERSION
- No operation bug in
CryptoSystem::SetCryptoSystemType
- No operation bug in
Aggregate_State_PDU::SetAggregateState
- Incorrect size values for
DATA_R_PDU
,SET_RECORD_R_PDU_SIZE
, andSTOP_FREEZE_R_PDU_SIZE
- Bug in
Set_Record_R_PDU::Decode
andSet_Record_R_PDU::Encode
due to not enough padding - Error checking bug in
Resupply_Received_PDU::Decode
andService_Request_PDU::Decode
- Bug in
Transmitter_PDU::Transmitter_PDU
whereAntennaPatternLength
was using the wrong data type - Bug in
Data_Query_PDU::SetVariableDatum
where the length had a wrong value - Bug in
MinePaintScheme
due to not using the correct variable forSetPaintScheme
andGetPaintScheme
ArticulatedPart
parameter type variant field had incorrect high and low bitsArticulatedPart
Parameter type value field should have beenKFLOAT32
and notKUINT64
- Bug in
TimeStamp::SetTimeStampType
- Bug in
EmitterBeam::SetEmitterBeamFunction
due to missing implementation - Bug in
EmitterBeam::ClearTrackedJammedTargets
due to invalid length value - Bug with
EmissionSystem
data length being set to bytes and not words - Enum
CollisionType
had inelastic and elastic values mixed up - Bug compiling
Link 16
example when using thedll
version ofKDIS
Data_PDU::RequestID
was not set to0
by default causing junk values- Bug in
Directed_Energy_Fire_PDU
encode and decode functions were not including padding - Bug in
FactoryDecoder
when calling the clear function. If a single object was used to handle more than 1 enum it would attempt to delete it multiple times(one per enum) - Bug with
GuidedMunitionsAppearance
when using thedll
version ofKDIS
- Bug in
GetNextPDU
function when an error occurs, the next call was using corrupted data - Incorrect function name in
EllipsoidRecord2
. FunctionGetSigma
should have beenGetDOverDt
- Invalid symbolic names
- Compilation bug when using Visual Studio 2010 Express due to
WIN32
was not defined - Comment you have to cmake . cmake . before building (thanks Bud Davis)
- Missing license header in some files
- License from
LGPL
toFreeBSD
- Renamed
COLLISION_THRSH_DFLT
toCOLLISION_THRSH
andEE_EL_THRSH_DFLT
toEE_EL_THRSH
inKSynmbolicNames.h
- Default
DIS
version isDIS 7
when usingCMake
- From
ProtocolVersion IEEE_1278_1_200x
toIEEE_1278_1_2012
inEnumHeader.h
KDIS::PDU::Bundle
class to support sending PDU BundlesExample_Bundle
to show how to send PDU Bundles- Support to
Connection
class to handle PDU Bundles viaGetNextPDU
function. - Operators
==
and!=
toKDataStream
Send(const KDataStream& stream)
function inConnection
class- Comment in
SetProtocolVersion
function to clear some common questions about howKDIS
sets theProtocolVersion
Example_PDUFactory
to support PDU BundlesCopyFromBuffer
parameterSerialData
isconst
- Bug in
CulturalFeatureAppearance::SetEntityExteriorLights
where an invalid value was being assigned - Bug in
Transmitter_PDU::Encode
function
Cultural
andSensor/Emitter
appearances
- Extended the appearance type classes so they now contain all the appearance data instead of just the specific in
EntityAppearance
. The general appearance data was not always used in the same way Data_Query_PDU
andData_Query_R_PDU
time interval field to use theTimeStamp
class instead of aKUINT32
- Removed General and Specific Appearance classes from
EntityAppearance
-
Bug in
EnumDetonationResult
-
Bug in
TimeStamp::CalculateTimeStamp
where theLinux
version was not usingnano secs
Link16_Signal_PDU
PDULink16_Transmitter_PDU
PDUGetEnumFromString<Enum Name>
function allowing to convert an enum string to value and value to enum- Added missing enums in
EmitterName
- Examples are now sorted in sub directories by their category
CMake
files to generate solution directories to better organize projects. Mainly a Visual Studio Pro (not Visual Studio Express) feature. Controlled by theCMake
flagUSE_SOLUTION_FOLDERS
- Renamed enum descriptors in
EnumInformationOperations.cpp
to align with naming convention used in other enum files
- Bug in
Data_Query_PDU
andData_Query_R_PDU
where variable and fixed Datum's were being used instead of just ID's - Improvements to
DeadReckoningCalculator::GenerateSmoothingPoints
- Bug in
CMake
forDIS 7
when usingKDIS
as aDLL
since it was includingEnumInformationOperations.cpp
- Bug in Collision PDU where the variable
m_f32Mass
was not being encoded/decoded - Bug in several
GetEnumAsString<Enum Name>
functions where the size of their descriptors was using the incorrect value - Some classes were not setting variables to
0
by default - Bug in
EncodingScheme
due to incorrect size - Invalid enums in
EmitterName
Directed_Energy_Fire_PDU
PDUEntity_Damage_Status_PDU
PDUEntityMarking
support forstring
instead ofchar[]
Vector::GetMagnitude
,Vector::GetDistance
, andWorldCoordinates::GetDistance
functions- Missing PDUs in
PDU_Factory
- Function
send
inConnection
returns the number of bytes sent instead ofvoid
LGPL
licence header from examples. All examples are unlicenced
APA
classpublic
union should have beenprivate
- Memory leak in
Connection
class where thePDU_Factory
was not being deleted
Attribute_PDU
PDUFactoryDecoder
class to add custom decoders. Current data types that now support this feature areVariableDatum
,FixedDatum
,EnvironmentRecord
, andStandardVariable
- Further enumerations for
DatumID
field, taken fromSISO-REF-010-2010 RC3
Header6
andHeader7
, based on theDIS_VERSION
, alias ofHeader
Header7
features all PDU Status fields and codes fromDIS 7
standardConnectionAddressFilter
class, inNETWORK
namespace, allowing for filtering by IP addressConnectionAddressFilter
exampleFactoryDecode
function toEnvironmentRecord
. All derived classes can now be decoded using this functionClearVariableDatumList
toAggregate_State_PDU
CMake
optionBUILD_EXAMPLES
astyle
to fix code format
- In order to support custom data types some PDU now store internal objects as pointers. Some PDU interfaces have been changed to reflect this. StandardVariable Factory Decode functions have also been changed
- Performance improvements (~20%) to
KDataStream
encode and decode functions - Renamed LE directory to Live_Entity for better naming style with other PDU family directories
Environment_Process_PDU
decode function to use the newFactoryDecode
function fromEnvironmentRecord
- From
#if DIS_VERSION >= 7
to#if DIS_VERSION > 6
for compiling withMinGW
PDUStatusTEILVC
- Bug in
Transmitter_PDU::GetAsString
where the length of Modulation Param was not being output correctly - Bug in
PDU_Factory
decode function that prevented PDU bundling - Compilation error in
Connection.cpp
, for some versions of Linux, due toConnection::SendPDU(Header *H)
did not match the header signature - When using none blocking sockets in
Connection::GetNextPDU
theOnDataReceived
event was called even when no data is received - Corrected
DetonationType
enum values - Compilation warning with some compilers due to files not ending with a newline
SendPDU
function toConnection
class
- Example
Env Proc PDU
to show the usage ofSendPDU
function ConnectionSubscriber
to allow for making changes on pdu transmit
IO_Action_PDU
PDU- Namespace called
NETWORK
where is available the newConnection
class, a cross platformDIS
centric socket - Example
Example_PduFactory2
to show the usagew of the newConnection
class Decode
function toPDU_Factory
. It is now simple to add support for custom PDU classes by overriding the function in custom factory classes- Missing
GetEnumAsString
calls for various enums KDataStream::GetBufferPtr
function to improve performance over usingCopyIntoBuffer
function- Missing function
GetEnumAsStringDetailAmplitude
- Improved clarity and appearance of various
GetAsString
functions - Examples to use the new
KDataStream::GetBufferPtr
function KException
to inherit fromstd::exception
allowing for catchingKDIS
exceptions with standard exceptions- Examples to use
KException
as a standard excpetion - Renamed all example projects to start with
Example_
except for thedll
andlib
examples
KSockets
- Redundant code from
KDataStream::CopyFromBuffer
- Unused variables in
VaiableDatum.cpp
- Bug in
EntityType::ReadFromTokenisedString
where the string being passed was unexpectedly changed by thestrtok
function - Bug in
Point_Object_State_PDU
where the final padding field had not been included - Bug in
GetEnumAsStringEmitterName
where some values were not sorted correctly - Bug when using
bitset
inMS Visual Studio 2010
SetSupplies
function toResupply_Received_PDU
- Code refactor. Removed unnecessary
using namespace
statements and replaced withusing
statements to allow for Intelisense to correctly display the contents of a namespace - Moved
EMITTER_BEAM_SIZE
,EMITTER_SYSTEM_SIZE
,OBJECT_TYPE_SIZE
,POINT_OBJECT_APPEARANCE_SIZE
, andSUPPLIES_SIZE
to class scope ENTITY_DESTINATION_RECORD
,GROUP_DESTINATION_RECORD
,GROUP_ASSIGNMENT_RECORD
from a macro tostatic const KUINT16
- Rename
ENTITY_DESTINATION_RECORD
,GROUP_DESTINATION_RECORD
, andGROUP_ASSIGNMENT_RECORD
to[NAME]_SIZE
- Moved
GEDItem
,GEDList
,GridAxisDescriptor
,GridDataPtr
,EnvironmentRecordPtr
, andEnvironmentRecordLst
fromPDU
namespace toDATA_TYPE
- Minor typos
- All
DIS 6
(IEEE 1278.1a) PDUs TSPI_PDU
PDUAppearance_PDU
PDUArticulated_Parts_PDU
PDULE_Fire_PDU
PDULE_Detonation_PDU
PDU- Missing PDUs in
PDU_Factory
GetAsString
functions to improve formatting
- Bug in point, linear and areal appearance classes. The endian was not being swapped when encoding/decoding
- Bug in
Entity_State_Update_PDU
decode function - Bug in
DecimalToDMS
when passing negative values
Minefield_Query_PDU
PDUMinefield_Data_PDU
PDUMinefield_Response_NACK_PDU
PDU- Missing PDUs in
PDU_Factory
- Clear functions to some of the variable fields
- Postfix
d
for debuglib
anddll
example binaries. The postfix value can be changed viaCMake
variableCMAKE_DEBUG_POSTFIX
- Entity state pdu throw exception if
InitDeadReckoning
is not called beforeApplyDeadReckoning
- All
GetAsString<Enum Name>
functions ofEnumMinefield
to use the optimizedGetAsString
function instead of the old linear search algorithm
- Bug in
VariableDatum
decode where the datum value vector was not being cleared on each decode Minefield_Header
protocol family and version were not being set- Bug in
CreateTokenisedString
where the extra value was not being added to the string - Functions
GetEnumAsString<Enum Name>
for all minefield enums were not correctly defined - Invalid values (over 135) for
PDUType
enum. This affected linear, object and point state PDU from theSynthetic_Environment
family - Bug in
LinearObjectAppearance
andArealObjectAppearance
encode and decode functions where 1 extra octet was being encoded/decoded - Typo from
SIMULATION_IDENTIFER_SIZE
toSIMULATION_IDENTIFIER_SIZE
- Bug in
SpecificAppearance::GetAsString
was usingKind
value instead ofDomain
(thanks David) - Bug in minefield state pdu where the PDU type was incorrect
- Bug in
RecordSet::SetRecordValues
where the length was incorrect
- PDU length in
Minefield_State_PDU
- Bug in
MinefieldAppearance
where the struct and union were in wrong order
Areal_Object_State_PDU
PDUMinefield_State_PDU
PDU- Change kind value of
EnvironmentType
- Filters to
PDU_Factory
. It is now possible to filter what PDU get through - Missing PDUs in
PDU_Factory
PDU_Factory
filter examplesReadFromTokenisedString
andCreateTokenisedString
toEntityType
. This allows for a tokenized string (such ascsv
) to be parsed into the entity type- Improved timestamps automatic calculation to include milliseconds for Windows and Linux
- Additional operator overloads to
Vector
,EulerAngles
, andWorldCoordinates
- All PDU size macros have been moved into the relevant classes namespace with
public
attribute and type changed tostatic const KUINT32
- Renamed
GENERAL_APPEARANCE__SIZE
toGENERAL_APPEARANCE_SIZE
- All entity specific appearance classes to invert/negate the Entity State Active value. In this case the
DIS
standard actually states that0
indicates the statetrue
and1
the statefalse
- Dead reckoning is no longer done through static functions. Each entity must have a dead reckoning calculator class to perform the dead reckoning correctly
GED_BasicFixedWingAircraftt
- PDU length in
Linear_Object_State_PDU::SetLinearSegmentParameters
- Bug in all
EnvironmentRecords
where the length value should not include the length of theEnvironmentRecord
header CMake
bug that caused exampleEnvironmental_Process_PDU
to only be included inDIS 7
; should have beenDI 6
andDIS 7
- Mismatch between entity location and world location in
Detonation_PDU
constructor - Typo
m_EntiyCapabilities
inEntity_State_PDU
- Public accessibility on Param Type Variant union in
ArticulationParameters
Linear_Object_State_PDU
PDU
- PDU factory example avoid closing on PDU exceptions. It now prints the error and continues
- Bug in
AggregateMarking
encode and decode functions 1 octet offset causing problems with Aggregate State PDU's - Bug in
EncodingScheme
when compiling to Linux. This change was reported in1.13.0
but not included
Point_Object_State_PDU
PDUEulerToHeadingPitchRoll
conversion toKConversions.h
SetTimeStampAutoCalculate
,IsTimeStampAutoCalculate
, andCalculateTimeStamp
toTimeStamp
. Attempts to automatically calculate the timestamp when the encode function is called
- Renamed variables of
HeadingPitchRollToEuler
fromEulX
,EulY
, andEulZ
toPsi
,Theta
, andPhi
Entity_State_PDU
andEnvironmental_Process_PDU
examples to use the new automatic timestamp calculation
- Bug in
HeadingPitchRollToEuler
conversion - Typo from
Entity_Infomation_Interaction
toEntity_Information_Interaction
- Bug in
EncodingScheme
when compiling to Linux
Gridded_Data_PDU
new constructor
EntityIdentifier
andAggregateIdentifier
derive fromSimulationIdentifier
VariableDatum
to passconst KString
references (thanks Anthony)SimulationIdentifier
functionGetAsString
write Object instead of Entity
- Bug in
Gridded_Data_PDU
whereGRIDDED_DATA_PDU_SIZE
was incorrectly set to32
instead of64
- Bug where all protected PDU status member variables belonging to the
Header
class to becomepublic
. Caused by using anonymous unions - Compilation error Compiler Error C2635 when casting from
Header
to a derived class. Caused byvirtual
inheritance
Gridded_Data_PDU
PDU- Missing PDUs in
PDU_Factory
- All
GetEnumAsString
functions use a single optimized search function - Renamed
Send
example toEntity_State_PDU
- Bugs in some
GetEnumAsString
functions - Bug in
Intercom_Control_PDU::GetAsString
andIntercom_Control_PDU::Encode
iterators - Incorrect
null
termination text inEntityMarking
(thanks Anthony)
- Macro to
PDUStatusTEILVC
to only include ifDIS 7
- Obsolete files (
BoundSphere.h
andBoundSphere.cpp
) inDataTypes
directory
CMake
not includesEnvironmental_Process_PDU
whenDIS 5
is defined- Bug in
Radio_Communications_Header
whereDIS 7
macros are not defined in the correct place - Bug in
LineRecord2
andPointRecord2
where the comparison operator would cause an infinite loop
Environmental_Process_PDU
PDUEnvironmental_Process_PDU
exampleDecimalToDMS
andDMSTODecimal
toKConversions.h
- Initial support for
DIS
version7
.DIS
version can be specified viaCMake
or pre-processor definitions PDUStatus
inHeader
(DIS 7
).PDUStatus
includes getters and setters forPDUStatusTransferredEntityIndicator
andPDUStatusLVCIndicator
toEntity_State_PDU
,Electromagnetic_Emission_PDU
,Designator_PDU
,Radio_Communications_Header
,IFF_ATC_NAVAIDS_PDU
,Electromagnetic_Emission_PDU
, andEntity_State_Update_PDU
. Getter and setters forPDUStatusFireType
toFire_PDU
. Getter and setter forPDUStatusDetonationType
toDetonation_PDU
. Getter and setter forPDUStatusAttachedIndicator
toTransmitter_PDU
,Signal_PDU
,Receiver_PDU
,Intercom_System_PDU
, andIntercom_Control_PDU
SetWritePosition
andGetWritePosition
functions toKDataStream
allowing data "peaking"- Missing PDUs in
PDU_Factory
KException
new constructor allowing for more details to be added
Send
example uses a while loop to continuously send the PDU. Some applications do not always pick up the first PDU
- Some of the
Vector
operators would return the referenced objects and not the new copy of the object. This effected operators*
,+
and-
(thanks Michael) - Typo in
VariableDatum::GetAsString()
function. "Fixed Datum:" should have been "Variable Datum:" - Timer in
Logger
playback is not started until the log is fully loaded
Dead Reckoning
implementation in classDeadReckoningCalculator
. This class calculates dead reckoning transformations for all dead reckoning algorithms. This feature is currently inBETA
until all algorithms are verified to work correctly<
operator toEntityType
,AggregateType
,AggregateIdentifier
, andClockTime
*
,+
,+=
,-
,-=
, and[]
operators toEulerAngles
,WorldCoordinates
, andVector
ApplyDeadReckoning
function toEntity_State_PDU
- Namespaces are no longer global when included in a KDIS header. This prevents KDIS from conflicting with other class/struct/enums that have the same name
- Missing destructor implementation to
Action_Response_R_PDU
virtual
to all destructors to it is called even when a base pointer is deleted==
and!=
operators to all data types and PDUs<
operator toEntityIdentifier
, andTimeStamp
- More comments
- Incorrect namespace references in function comments
- Additional comments to several PDUs to help further explain each field
GetEnumAsString<Enum Name>(KINT32 Value)
function to all enumerations. These functions return the string value for an enumeration (99
->"Value"
). It can be enabled/disabled by declaring the macroKDIS_USE_ENUM_DESCRIPTORS
in the pre-processor definitions or inKDefines.h
file. This feature makes the library significantly larger: disable if not used. When disabled theGetEnumAsString<Enum Name>
functions return the enumerated value as a string (99
->"99"
).- Website based on
MediaWiki
available at https://sourceforge.net/p/kdis/wiki/Main_Page
- Moved remaining enumerations from
KDISEnums.h
toEnumEntityInfoInteraction.h
- Replaced all uses of
strnset
withmemset
- Default constructor initialize all data types to zero (if not already)
Send
example shows how to correctly use the timestamp
- Self-explanatory comments to several PDUs
vc2008.zip
file
- Bug in
FixedDatum
whereKDIS_EXPORT
is defined inside the template functions causing problem if compiling as a DLL shared library
IsGroupOf_PDU
PDUIsPartOf_PDU
PDUMAX_PDU_SIZE
of8192
from1278.1-200X
standardKRef_Ptr
class. This is an implementation of referenced pointer, designed to prevent memory leaks where memory needs to be dynamically allocatedHeadingPitchRollToEuler
toKConversions.h
- Country Type in
EntityType
constructor fromKUINT8
toKUINT16
using namespace std
directives from header files to preventstd
attributes being exposed in the global namespace causing potential clashes
- Some catch blocks catch all exception types rather than just
KException
Linux
support (thanks Anthony)- Reference from
UINT16
toKUINT16
- From
sizeof DataType
tosizeof(DataType)
#include
use forward slash (/
) instead of back slash (\
)#include
match the case of the file name#include
added./
to all relative paths
- Additonal
IntercomCommunicationsParameter
includes fromCMake
file - Reference to
winsock2.h
inKEncoderDecoders
DIS_Logger_Record.cpp
throw qualifier missing onwriteToFile
function- Bug in
SystemIdentifier
where the union and struct were in the wrong order
- Bug in
SwapBytes
that caused the endian to not be correctly swapped
Record_R_PDU
PDURecord_Query_R_PDU
PDUSet_Record_R_PDU
PDU
RecordSpecification
data type. Record Sets are now placed directly into a PDU. When a change is made to aRecordSpecification
parameter it was not always possible to update the PDU size. RemovingRecordSpecification
fixes this problem. This only effectsTransfer_Control_PDU
- Bug in
FixedDatum
that caused template functions to give linker errors due implementation in source file instead of header file
Data_Query_R_PDU
PDUSet_Data_R_PDU
PDUData_R_PDU
PDUEvent_Report_R_PDU
PDUSet_Data_PDU
new constructorData_Query_PDU
new constructorSet_Data_PDU
new constructorEvent_Report_PDU
new constructorPDU_Factory
support for all PDUs- Comments to existing PDU's to further explain their usage
Data_PDU
constructor from(KUINT32 RequestID)
to(const EntityIdentifier, OriginatingEntityID)
, and(const EntityIdentifier, ReceivingEntityID, KUINT32 RequestID)
Action_Request_PDU
changed constructor from(KUINT32 RequestID, KUINT32 ActionID)
to(const EntityIdentifier, OriginatingEntityID)
,(const EntityIdentifier, ReceivingEntityID)
, and(KUINT32 RequestID, KUINT32 ActionID)
- Duplicate includes in
CMake
file - Missing
Intercom_Control_PDU
entry
Transfer_Control_Request_PDU
PDUCreate_Entity_R_PDU
PDURemove_Entity_R_PDU
PDUStart_Resume_R_PDU
PDUStop_Freeze_R_PDU
PDUAcknowledge_R_PDU
PDUAction_Request_R_PDU
PDUAction_Response_R_PDU
PDUComment_R_PDU
PDUIFF_ATC_NAVAIDS_L2_PDU
PDU missing fundamental parts- Added additional enumeration values taken from
SISO-REF-010 Changes
Start_Resume_PDU
new constructorsStop_Freeze_R_PDU
new constructorsElectromagnetic_Emission_PDU
two new constructorsIFF_ATC_NAVAIDS_L1_PDU
new constructor
- Moved all enumerations that belong to Entity Info/Interaction into
EnumEntityInfoInteraction.h
- Moved all enumerations that belong to Simulation Management Info/Interaction into
EnumSimulationManagement.h
DatumID
enumerations are now appended withRecord
instead ofDatum
- All PDU automatically set the Protocol Version
KDIS_NEWORK_ENDIAN
fromKDefines.h
- Removed line in
Example_Send
that sets the Protocol Family as this is now done automatically in the constructor
- Bug in
GetData
function ofSignal_PDU
- Bug in
Decode
function ofCreate_Entity_PDU
- Bug in
CMakeLists.txt
where fileEntity_State_Update_PDU.h
was not being included - Bug in
Simulation_Management_Header
constructor where protocol family is not set - Bug in
SEES
constructor where protocol family is not set
- Bug in
GetData
function ofSignal_PDU
- Interface in
VariableDatum
for setting an arbitrary binary stream
VariableDatum
encoding and decodingVariableDatum
bits/bytes mix up- Typos in comments
- Because of needless
Microsoft Word
garbage, the changelog has been rewritten
Comment_PDU
constructor where the PDU type and length were not initializedDESIGNATOR_PDU_SIZE
was incorrect, should be88
, due to a typo in theIEEE
standardEncodingScheme
bits were incorrect on Big Endian machines
- Support for
DIS
version5
inPDU_Factory
FuseType
enumeration has previously incorrect valuesCMake
bugs when building withDIS
version5
Intercom_Control_PDU
PDUAggregate_State_PDU
PDUKDIS_LIB
(static library) andKDIS_DLL
(shared library) examplesCMake
which is a cross-platform, open-source build system. TheCMake
file has certain options that allow to specify the version ofDIS
to use (5
or6
) and if to link against astatic
orshared
library. Any future examples will require the use ofCMake
KDataStream
only acceptsKUINT16
rather thanKUINT32
, which could have resulted in various buffer overrun problemsKDIS_EXPORT
macro now searches the project for preproccesor deflagrate. Use eitherEXPORT_KDIS
orIMPORT_KDIS
. E.g:/D "EXPORT_KDIS"
Intercom_Signal_PDU
PDUDIS_Logger_Record
andDIS_Logger_Playback
, which logs PDUs to a text file so that they can be replayed, have been added toExtras
DIS_Logger_Record
andDIS_Logger_Playback
examples. Included captured data is generated byMAK VR-Forces 3.10
GetAsString
andReadFromString
functions toKDataStream
.GetAsString
converts the data stream into a hex string, whereasReadFromString
converts the string into aKDataStream
. These two functions allow DIS data to be logged to a file and viewed at a later time
- References to the incomplete
Intercom_Signal_PDU
fromPDU_Factory
, which should not have been accessible
- Bugs in
Signal_PDU
whereSetData
did not set theDataSize
andGetData
was returning the padding that was added to the data - Bug in
Entity_State_PDU
whereEntityAppearance
was being encoded incorrectly - Typo in
SurfacePlatformAppearance::GetAsString
from Space Platform Appearance instead of Surface Platform Appearance
Collision_Elastic_PDU
PDUEntity_State_Update_PDU
PDUFF_ATC_NAVAIDS_PDU
PDU- Class
PDU_Factory
that converts a data stream into the correct PDU and returns anauto_ptr
to the new PDU - Example to show how to use
PDU_Factory
- Namespace
UTILS
KConversions.h
, which includesRadToDeg
,DegToRad
,MetersToFeet
,FeetToMeters
, andGeodeticToGeocentric
, has been added toUTILS
DIS
version a PDU belongs to in the header comments
- All
GetFunctions
that previously returned an object now return a reference/const reference - All examples have been integrated into a single directory
- All examples now use an updated version of
KSOCKETS
. However, it is still recommended to use your own socket library - Renamed
Electronmagnetic_Emission_PDU
toElectromagnetic_Emission_PDU
- Licence from
GPL
toLGPL
- Changelog in HTML format
IsMachineBigEndian
use static variables providing a very small performance boost
#ifdef _win32
for primitive data types inKDefines.h
that was prevented any other OS from working
- Bug in
Comment_PDU
where the PDU length was incorrect while reading variable datum lengths since the returned variable datum lengths value was in bits
vc9
send example
AntennaLocation
new constructorBurstDescriptor
new constructorDeadReckoningParameter
new constructorEmissionSystem
new constructorEmitterBeam
new constructorEncodingScheme
2 new constructorsGeneralAppearance
new constructorTimeStamp
new constructorEntity_State_PDU
new constructorCollision_PDU
new constructorRepair_Complete_PDU
new constructorRepair_Response_PDU
new constructorRadio_Communications_Header
new constructorReceiver_PDU
new constructorSignal_PDU
new constructorTransmitter_PDU
new constructorAcknowledge_PDU
new constructors to auto generate a response depending on the PDU
BurstDescriptor
functionSetMunition
pass by referenceDeadReckoningParameter
functionsetDeadReckoningAlgorithm
pass by value- Renamed
m_ui16Fire
tom_ui16Fuse
EmitterBeam
removed typing error inSet6BeamParamIndex
andGet6BeamParamIndex
- Bug in
vc9
example that checked forData_PDU
instead ofEntity_State_PDU
Signal_PDU
data length is number of bits instead of octets