3 All notable changes to this project will be documented in this file.
5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0),
6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
18 ## 2.10.0 - 2023-10-12
22 - `ApplyFilterBeforeDecodingPDUBody` to `PDU_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's
23 - `RadioAppearance` struct
24 - `SupplyAppearance` struct
25 - `VariableParameter` type `SeparationPart`
26 - `BeamStateEnum` to the `EnumEmitter` file based on the `UID 318` contents of `SISO-REF-010-2016-v22` document
27 - Additional enums (`SISO 10-2015`) for `ModulationType`, `BeamAntennaPatternReferenceSystem`, `ModulationSystem`, `TDLType`, `SystemType`, `SystemMode`, and `SystemName`
28 - `DIS 7` support added for `SystemIdentifier`,`BeamAntennaPattern`, and `ExpendableDescriptor`
29 - `SendOnly` option to `Connection` class. `Connection` will not bind if this is `true`
30 - Support for `unique_ptr` when `C++11` is supported
31 - Implementation of getter and setter running lights to `SubSurfacePlatformAppearance`
33 - Guard in case `_USE_MATH_DEFINES` is already defined in `KUtils.h`
34 - `CMAKE_INSTALL_PREFIX` to define alternative install location (defaults to `/usr/include/KDIS`)
35 - Non-Human Life Form Appearance
36 - `Simulation_Management_Header` explicit constructor and copy constructor
37 - Missing enums `16` and `17` for `EventTypeEnum` ([#89](https://sourceforge.net/p/kdis/bugs/89))
38 - Additional Time Shared enums ([#103](https://sourceforge.net/p/kdis/bugs/103))
39 - Incorrect conversion from bits to bytes in `Signal_PDU`
43 - `EmitterBeam` class to use `DIS_VERSION` definition when defining or declaring member variables and method. For `DIS 7`, introduced the `BeamStatus` and `JammingTechnique` classes to replicate the v7 PDU structure
44 - `PDU_Factory_Filter` virtual destructor to prevent undefined behavior
45 - `LifeFormAppearance` struct with additional fields
46 - `AirPlatformAppearance` struct with additional fields
47 - `GuidedMunitionAppearance` struct with additional fields
48 - Improved `GetAsString` function for `NonHumanLifeFormAppearance`
49 - `CulturalFeatureAppearance` incorrectly supports Engine Smoke bit. Modified the struct to eliminate bit-6 tracking
50 - `Connection` functions to be `virtual` allowing further derivation
58 - `EllipsoidRecord2::Decode` should not have included `EllipsoidRecord1::Decode`
59 - Inaccuracy in `GeocentricToGeodetic` calculations
60 - Unit test compilation issues on Linux
61 - Corrected some old tutorial links
62 - Ordering of orientation and `dt` sigma fields in `EllipsoidRecord2`
63 - Whitespace and comment cleaning
64 - Incorrect PDU length calculation when calling `Comment_PDU::SetVariableDatum`
65 - `Action_Response_PDU` constructor not populating all fields and incorrect length calculation
66 - Incorrect erasing loop in `Connection::RemoveSubscriber` where duplicates were not always removed ([#49](https://sourceforge.net/p/kdis/bugs/49))
67 - Rounding error in `GeocentricToGeodetic`
68 - Incorrect PDU length comment ([#50](https://sourceforge.net/p/kdis/bugs/50))
69 - `AttributeRecordSet::GetRecordLength` not including all fields in size calculation ([#51](https://sourceforge.net/p/kdis/bugs/51))
70 - Divide by `0` in `DeadReckoningCalculator::computeRotationAxis` when axis were `0`
71 - Bug in `Connection::GetNextPDU` when a PDU was not decoded. Now the stream is cleared and flow continues
72 - Bug in `OrientationError::SetElevationError` ndue to no value was assigned
73 - `Minefield_Data_PDU::Encode` not correctly increment the detonation wires
74 - Memory leak in `PDU_Factory` when applyFilters rejected the PDU
75 - Memory leak in `Entity_State_PDU::operator=` when assigning a new `DeadReckoningCalculator`
76 - Conversion Near Poles and Casting in `KCOnversion.h` (thanks Kyle)
77 - Logic error in detecting polar regions for the coordinate conversion code
78 - Bug in `Intercom_Control_PDU::Decode`
79 - Type mismatch between `EntityAppearance` types (class to structs)
80 - Memory leak in `Entity_State_PDU` when calling `SetDeadReckoningCalculator`
81 - `CryptoSystem` byte ordering
82 - `MarkXTransponder` negative altitude detection
83 - Potential stream overrun in `DetonationPDU`
84 - `Layer2` and `Layer3` incorrectly double decoding the header due to constructors not ignoring the header even when one is provided
85 - Enum functions not being exported to `dll` ([#94](https://sourceforge.net/p/kdis/bugs/94))
86 - Incorrect enums for Beam Function ([#103](https://sourceforge.net/p/kdis/bugs/103))
94 - Unit tests via [`googletest`](https://github.com/google/googletest) framework
95 - Bool operator for convenience to `KRef_Ptr`
96 - `Connection::SetBlockingTimeOut` allowing for setting a timeout for blocking mode
97 - Copy constructor and assignment operator to `Entity_State_PDU`
98 - Getter and setter functions to `EntityKind` that support integers as well as enums for kind, domain and country simplifying the overall usage
99 - `GetEnumSize` and `GetEnumDescriptor` exposing the internal `EnumDescriptor` arrays used for `GetEnumAsString` and `GetEnumFromString` allowing to iterate through an enumeration using these two functions
100 - Implicit conversion support to `KRef_Ptr`
101 - Implementation of `LifeFormAppearance::SetEntityLifeformState`
102 - `PDU_FactoryLink16` to `Link 16` example
103 - Padding to `SilentAggregateSystem`
104 - Padding to `Mode5TransponderBasicData`
108 - Format in `RelativeWorldCoordinates::GetAsString()`
109 - Improved `Connection` socket error messages
110 - Improved debugging information in header when a PDU has a buffer that is too small
111 - `Link 16` example is built as a dynamic library
112 - `Link16` example code to support partial decoding
116 - Incorrect size was assigned to `LE_VECTOR_SIZE`
117 - `KRef_Ptr` compilation bug when using weak references
118 - `AggregateMarking::Decode` not setting the last char to `\0` in `m_sAggregateMarkingString` casuing comparison issues
119 - Bug decode and encode functions in `Entity_State_Update_PDU` that not handled padding correctly
120 - Bug in `Appearance_PDU` decode function when no flags were used
121 - Bug in `AttachedPart` not encoding and decoding the part type
122 - Bug in `FixedDatum:GetDatumValue` was using `strncpy` to return data which causes issues when the data was not a `string`
123 - Bug in `IFF_PDU::Decode`
124 - Bug in `Intercom Control` PDU and `IntercomCommunicationParameters` where some values were not initialized causing unexpected behaviours during encoding and deconding
125 - Bug in `Underwater_Acoustic_PDU::Decode` was encoding by mistake
126 - Bug in `SphereRecord2::Encode()` was calling the wrong encoding function internally
127 - Bug in `GED_BasicFixedWingAircraft` and `GED_BasicFixedWingAircraft` that used `8 bit` int instead of `16 bit` for speed
128 - `CMake` for `KDIS_LIB` that was causing building a shared library instead of static
129 - `CMake` for `MinGW` when building `lib` and `dll` version of `KDIS`
130 - Comparison operator `==` in `Set_Data_R_PDU`
131 - Comparison operator `==` in `KFIXED`
132 - Decoding bug in `Intercom_Control_PDU`
133 - Deconding bug when handling padding in `Aggregate_State_PDU`
134 - Encoding bug in `Receiver_PDU`
135 - Encoding and deconding bug in `Entity_Damage_Status_PDU` was not including padding
136 - Exception handling bug in `Connection` and `IsGroupOf_PDU`
137 - Incorrect PDU minimum size for `GridDataType` `0` and `1`
138 - Incorrect PDU size in `Underwater_Acoustic_PDU`
139 - Incorrect PDU size in `IFF_ATC_NAVAIDS_FundamentalParameterData`
140 - Missing padding in `IO_Report_PDU`
141 - `null` reference crash when encoding `IntercomCommunicationParameters` with no record
142 - Protocol version not being set in `Intercom_Control_PDU`
143 - `SilentEntitySystem` not initializing `m_ui16NumOfAppearanceRecords` to `0` casuing enconding and deconding failure
144 - Size calculation in `SetFixedDatum` and `SetVariableDatum`
145 - `TSPI_PDU::m_ui8SSDLen` not being initialised to `0` in some constructors
146 - Uninitialized variables in `SetData_R_PDU`
147 - `VariableDatum::GetPDULength` returning the incorrect value
148 - Several fixes for `LE_FIRE_PDU` and `LE_Detonation_PDU` from public submission (thanks G�ran)
150 ## 2.8.0 - 2014-06-27
154 - `IFF_PDU` PDU which replaces `IFF_ATC_NAVAIDS_L1_PDU` PDU
155 - `IFF_Layer3Transponder` and `IFF_Layer3Interrogator` classes
156 - `VariableParamaters` class. This replaces all `ArticulationParamaters` classes as the base class
157 - `AttachedPart` class
158 - `CryptoSystem::SetKeyID` and `CryptoSystem::GetKeyID`
159 - Implementations of `LinearVelocity`, `EntityLocation`, `EntityOrientation`, `EntityAppearance` in `Entity_State_Update_PDU`
160 - Implementation of `SetPDUStatusFireType` and `GetPDUStatusFireType` in `Fire_PDU`
161 - Getter and setter for `ResponseCode`, `ResponsePowerReduction`, and `ResponseRadarEnhancement` in `FundamentalOperationalData_RRB`
162 - Getter and setter for `NumBurst` in `PointObjectAppearance`
163 - Getter and setter for `AttackerEntityID` to `AttackerEntityID`
164 - `WorldCoordinates::Set` to set all values in one call
165 - `Vector::Set` to set all values in one call
167 - `WorldCoordinates::Lerp`
168 - `SystemDesignator` and `SystemSpecificData` to `IFF_ATC_NAVAIDS_L1_PDU`
169 - `SetTCASVersion` to `FundamentalOperationalData_MarkXTransponder` and `FundamentalOperationalData_MarkXInterrogator`
170 - Missing enums to `StationName`
171 - Missing enums to `WarfareType`
172 - Missing enums to `EncodingType`
173 - `Automatic Dependent Surveillance` broadcast to `EntityCapabilities`
174 - `make install` target for Linux (thanks Bud Davis)
178 - Renamed `ArticulationParamaters` to `ArticulatedPart`
179 - `BurstDescriptor` in `LE Fire` and `LE Detonation` PDU with `MunitionDescriptor`. This class is the same except for the `SetMunition` and `GetMunition` functions which are now named `SetType` and `GetType`
180 - Renamed `ArticulationParameters` to `ArticulatedPart`
181 - Renamed `TypeVariantHighBits` to `TypeVariantClass` in `ArticulatedPart`
182 - Renamed `TypeVariantLowBits` to `TypeVariantMetric` in `ArticulatedPart`
183 - `FactoryDecoder` uses `KRef_Ptr` class
184 - Renamed `EnumFundamentalOperationalData.h` to `EnumIFF.h` and `EnumFundamentalOperationalData.cpp` to `EnumIFF.cpp`
185 - Renamed enum `WarheadType::GlassBladsWarhead` to `WarheadType::GlassBeadsWarhead`
186 - Renamed enum `EncodingType::_16_bit_linear_PCM` to `EncodingType::_16_bit_linear_PCM2sComplementBigEndian`
187 - From defintion `COMM_CHANNEL_TYPE` to `static KUINT16 COMM_CHANNEL_TYPE_SIZE`
189 - Cleaned `GetAsString` for many classes
190 - Performance improvements in decoding. Parameter `ignoreHeader` added to `Decode` 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
192 - _Copyright 2013 KDIS_ to _Copyright 2013 Karl Jones_
193 - `UNLICENSE` statement to examples excepts `Link16`
197 - `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 the `DIS 7` standard. To support `< DIS 7` then use the Munition Descriptor class
198 - `IFF_ATC_NAVAIDS_L2_PDU` PDU. Now a data type class called `IFF_Layer2` which is a property of `IFF_PDU`
199 - Removed `OtherCollision` from enum `CollisionType`
200 - Macro `KDIS_VERSION`
204 - No operation bug in `CryptoSystem::SetCryptoSystemType`
205 - No operation bug in `Aggregate_State_PDU::SetAggregateState`
206 - Incorrect size values for `DATA_R_PDU`, `SET_RECORD_R_PDU_SIZE`, and `STOP_FREEZE_R_PDU_SIZE`
207 - Bug in `Set_Record_R_PDU::Decode` and `Set_Record_R_PDU::Encode` due to not enough padding
208 - Error checking bug in `Resupply_Received_PDU::Decode` and `Service_Request_PDU::Decode`
209 - Bug in `Transmitter_PDU::Transmitter_PDU` where `AntennaPatternLength` was using the wrong data type
210 - Bug in `Data_Query_PDU::SetVariableDatum` where the length had a wrong value
211 - Bug in `MinePaintScheme` due to not using the correct variable for `SetPaintScheme` and `GetPaintScheme`
212 - `ArticulatedPart` parameter type variant field had incorrect high and low bits
213 - `ArticulatedPart` Parameter type value field should have been `KFLOAT32` and not `KUINT64`
214 - Bug in `TimeStamp::SetTimeStampType`
215 - Bug in `EmitterBeam::SetEmitterBeamFunction` due to missing implementation
216 - Bug in `EmitterBeam::ClearTrackedJammedTargets` due to invalid length value
217 - Bug with `EmissionSystem` data length being set to bytes and not words
218 - Enum `CollisionType` had inelastic and elastic values mixed up
219 - Bug compiling `Link 16` example when using the `dll` version of `KDIS`
220 - `Data_PDU::RequestID` was not set to `0` by default causing junk values
221 - Bug in `Directed_Energy_Fire_PDU` encode and decode functions were not including padding
222 - 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)
223 - Bug with `GuidedMunitionsAppearance` when using the `dll` version of `KDIS`
224 - Bug in `GetNextPDU` function when an error occurs, the next call was using corrupted data
225 - Incorrect function name in `EllipsoidRecord2`. Function `GetSigma` should have been `GetDOverDt`
226 - Invalid symbolic names
227 - Compilation bug when using _Visual Studio 2010 Express_ due to `WIN32` was not defined
228 - Comment _you have to cmake . cmake . before building_ (thanks Bud Davis)
229 - Missing license header in some files
231 ## 2.7.0 - 2013-01-31
235 - License from `LGPL` to `FreeBSD`
236 - Renamed `COLLISION_THRSH_DFLT` to `COLLISION_THRSH` and `EE_EL_THRSH_DFLT` to `EE_EL_THRSH` in `KSynmbolicNames.h`
237 - Default `DIS` version is `DIS 7` when using `CMake`
238 - From `ProtocolVersion IEEE_1278_1_200x` to `IEEE_1278_1_2012` in `EnumHeader.h`
240 ## 2.6.0 - 2012-12-18
244 - `KDIS::PDU::Bundle` class to support sending PDU Bundles
245 - `Example_Bundle` to show how to send PDU Bundles
246 - Support to `Connection` class to handle PDU Bundles via `GetNextPDU` function.
247 - Operators `==` and `!=` to `KDataStream`
248 - `Send(const KDataStream& stream)` function in `Connection` class
249 - Comment in `SetProtocolVersion` function to clear some common questions about how `KDIS` sets the `ProtocolVersion`
253 - `Example_PDUFactory` to support PDU Bundles
254 - `CopyFromBuffer` parameter `SerialData` is `const`
258 - Bug in `CulturalFeatureAppearance::SetEntityExteriorLights` where an invalid value was being assigned
259 - Bug in `Transmitter_PDU::Encode` function
261 ## 2.5.0 - 2012-08-08
265 - `Cultural` and `Sensor/Emitter` appearances
269 - 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
270 - `Data_Query_PDU` and `Data_Query_R_PDU` time interval field to use the `TimeStamp` class instead of a `KUINT32`
274 - Removed General and Specific Appearance classes from `EntityAppearance`
278 - Bug in `EnumDetonationResult`
280 - Bug in `TimeStamp::CalculateTimeStamp` where the `Linux` version was not using `nano secs`
282 ## 2.4.0 - 2011-12-14
286 - `Link16_Signal_PDU` PDU
287 - `Link16_Transmitter_PDU` PDU
288 - `GetEnumFromString<Enum Name>` function allowing to convert an enum string to value and value to enum
289 - Added missing enums in `EmitterName`
293 - Examples are now sorted in sub directories by their category
294 - `CMake` files to generate solution directories to better organize projects. Mainly a _Visual Studio Pro_ (not _Visual Studio Express_) feature. Controlled by the `CMake` flag `USE_SOLUTION_FOLDERS`
295 - Renamed enum descriptors in `EnumInformationOperations.cpp` to align with naming convention used in other enum files
299 - Bug in `Data_Query_PDU` and `Data_Query_R_PDU` where variable and fixed Datum's were being used instead of just ID's
300 - Improvements to `DeadReckoningCalculator::GenerateSmoothingPoints`
301 - Bug in `CMake` for `DIS 7` when using `KDIS` as a `DLL` since it was including `EnumInformationOperations.cpp`
302 - Bug in Collision PDU where the variable `m_f32Mass` was not being encoded/decoded
303 - Bug in several `GetEnumAsString<Enum Name>` functions where the size of their descriptors was using the incorrect value
304 - Some classes were not setting variables to `0` by default
305 - Bug in `EncodingScheme` due to incorrect size
306 - Invalid enums in `EmitterName`
308 ## 2.3.0 - 2011-07-27
312 - `Directed_Energy_Fire_PDU` PDU
313 - `Entity_Damage_Status_PDU` PDU
314 - `EntityMarking` support for `string` instead of `char[]`
315 - `Vector::GetMagnitude`, `Vector::GetDistance`, and `WorldCoordinates::GetDistance` functions
316 - Missing PDUs in `PDU_Factory`
320 - Function `send` in `Connection` returns the number of bytes sent instead of `void`
324 - `LGPL` licence header from examples. All examples are unlicenced
328 - `APA` class `public` union should have been `private`
329 - Memory leak in `Connection` class where the `PDU_Factory` was not being deleted
331 ## 2.2.0 - 2011-05-30
335 - `Attribute_PDU` PDU
336 - `FactoryDecoder` class to add custom decoders. Current data types that now support this feature are `VariableDatum`, `FixedDatum`, `EnvironmentRecord`, and `StandardVariable`
337 - Further enumerations for `DatumID` field, taken from `SISO-REF-010-2010 RC3`
338 - `Header6` and `Header7`, based on the `DIS_VERSION`, alias of `Header`
339 - `Header7` features all PDU Status fields and codes from `DIS 7` standard
340 - `ConnectionAddressFilter` class, in `NETWORK` namespace, allowing for filtering by IP address
341 - `ConnectionAddressFilter` example
342 - `FactoryDecode` function to `EnvironmentRecord`. All derived classes can now be decoded using this function
343 - `ClearVariableDatumList` to `Aggregate_State_PDU`
344 - `CMake` option `BUILD_EXAMPLES`
345 - [`astyle`](https://sourceforge.net/projects/astyle) to fix code format
349 - 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
350 - Performance improvements (_~20%_) to `KDataStream` encode and decode functions
351 - Renamed _LE_ directory to _Live_Entity_ for better naming style with other PDU family directories
352 - `Environment_Process_PDU` decode function to use the new `FactoryDecode` function from `EnvironmentRecord`
353 - From `#if DIS_VERSION >= 7` to `#if DIS_VERSION > 6` for compiling with `MinGW`
361 - Bug in `Transmitter_PDU::GetAsString` where the length of Modulation Param was not being output correctly
362 - Bug in `PDU_Factory` decode function that prevented PDU bundling
363 - Compilation error in `Connection.cpp`, for some versions of Linux, due to `Connection::SendPDU(Header *H)` did not match the header signature
364 - When using none blocking sockets in `Connection::GetNextPDU` the `OnDataReceived` event was called even when no data is received
365 - Corrected `DetonationType` enum values
366 - Compilation warning with some compilers due to files not ending with a newline
368 ## 2.1.1 - 2010-12-23
372 - `SendPDU` function to `Connection` class
376 - Example `Env Proc PDU` to show the usage of `SendPDU` function
377 - `ConnectionSubscriber` to allow for making changes on pdu transmit
379 ## 2.1.0 - 2010-12-22
383 - `IO_Action_PDU` PDU
384 - Namespace called `NETWORK` where is available the new `Connection` class, a cross platform `DIS` centric socket
385 - Example `Example_PduFactory2` to show the usagew of the new `Connection` class
386 - `Decode` function to `PDU_Factory`. It is now simple to add support for custom PDU classes by overriding the function in custom factory classes
387 - Missing `GetEnumAsString` calls for various enums
388 - `KDataStream::GetBufferPtr` function to improve performance over using `CopyIntoBuffer` function
389 - Missing function `GetEnumAsStringDetailAmplitude`
393 - Improved clarity and appearance of various `GetAsString` functions
394 - Examples to use the new `KDataStream::GetBufferPtr` function
395 - `KException` to inherit from `std::exception` allowing for catching `KDIS` exceptions with standard exceptions
396 - Examples to use `KException` as a standard excpetion
397 - Renamed all example projects to start with `Example_` except for the `dll` and `lib` examples
402 - Redundant code from `KDataStream::CopyFromBuffer`
403 - Unused variables in `VaiableDatum.cpp`
407 - Bug in `EntityType::ReadFromTokenisedString` where the string being passed was unexpectedly changed by the `strtok` function
408 - Bug in `Point_Object_State_PDU` where the final padding field had not been included
409 - Bug in `GetEnumAsStringEmitterName` where some values were not sorted correctly
410 - Bug when using `bitset` in `MS Visual Studio 2010`
412 ## 2.0.1 - 2010-09-01
416 - `SetSupplies` function to `Resupply_Received_PDU`
420 - Code refactor. Removed unnecessary `using namespace` statements and replaced with `using` statements to allow for _Intelisense_ to correctly display the contents of a namespace
421 - Moved `EMITTER_BEAM_SIZE`, `EMITTER_SYSTEM_SIZE`, `OBJECT_TYPE_SIZE`, `POINT_OBJECT_APPEARANCE_SIZE`, and `SUPPLIES_SIZE` to class scope
422 - `ENTITY_DESTINATION_RECORD`, `GROUP_DESTINATION_RECORD`, `GROUP_ASSIGNMENT_RECORD` from a macro to `static const KUINT16`
423 - Rename `ENTITY_DESTINATION_RECORD`, `GROUP_DESTINATION_RECORD`, and `GROUP_ASSIGNMENT_RECORD` to `[NAME]_SIZE`
424 - Moved `GEDItem`, `GEDList`, `GridAxisDescriptor`, `GridDataPtr`, `EnvironmentRecordPtr`, and `EnvironmentRecordLst` from `PDU` namespace to `DATA_TYPE`
430 ## 2.0.0 - 2010-08-31
434 - All `DIS 6` (_IEEE 1278.1a_) PDUs
436 - `Appearance_PDU` PDU
437 - `Articulated_Parts_PDU` PDU
439 - `LE_Detonation_PDU` PDU
440 - Missing PDUs in `PDU_Factory`
444 - `GetAsString` functions to improve formatting
448 - Bug in point, linear and areal appearance classes. The endian was not being swapped when encoding/decoding
449 - Bug in `Entity_State_Update_PDU` decode function
450 - Bug in `DecimalToDMS` when passing negative values
452 ## 1.16.0 - 2010-06-28
456 - `Minefield_Query_PDU` PDU
457 - `Minefield_Data_PDU` PDU
458 - `Minefield_Response_NACK_PDU` PDU
459 - Missing PDUs in `PDU_Factory`
460 - Clear functions to some of the variable fields
464 - Postfix `d` for debug `lib` and `dll` example binaries. The postfix value can be changed via `CMake` variable `CMAKE_DEBUG_POSTFIX`
465 - Entity state pdu throw exception if `InitDeadReckoning` is not called before `ApplyDeadReckoning`
466 - All `GetAsString<Enum Name>` functions of `EnumMinefield` to use the optimized `GetAsString` function instead of the old linear search algorithm
470 - Bug in `VariableDatum` decode where the datum value vector was not being cleared on each decode
471 - `Minefield_Header` protocol family and version were not being set
472 - Bug in `CreateTokenisedString` where the extra value was not being added to the string
473 - Functions `GetEnumAsString<Enum Name>` for all minefield enums were not correctly defined
474 - Invalid values (over 135) for `PDUType` enum. This affected linear, object and point state PDU from the `Synthetic_Environment` family
475 - Bug in `LinearObjectAppearance` and `ArealObjectAppearance` encode and decode functions where 1 extra octet was being encoded/decoded
476 - Typo from `SIMULATION_IDENTIFER_SIZE` to `SIMULATION_IDENTIFIER_SIZE`
477 - Bug in `SpecificAppearance::GetAsString` was using `Kind` value instead of `Domain` (thanks David)
478 - Bug in minefield state pdu where the PDU type was incorrect
479 - Bug in `RecordSet::SetRecordValues` where the length was incorrect
481 ## 1.15.1 - 2010-05-17
485 - PDU length in `Minefield_State_PDU`
486 - Bug in `MinefieldAppearance` where the struct and union were in wrong order
488 ## 1.15.0 - 2010-05-11
492 - `Areal_Object_State_PDU` PDU
493 - `Minefield_State_PDU` PDU
494 - Change kind value of `EnvironmentType`
495 - Filters to `PDU_Factory`. It is now possible to filter what PDU get through
496 - Missing PDUs in `PDU_Factory`
497 - `PDU_Factory` filter examples
498 - `ReadFromTokenisedString` and `CreateTokenisedString` to `EntityType`. This allows for a tokenized string (such as `csv`) to be parsed into the entity type
499 - Improved timestamps automatic calculation to include milliseconds for Windows and Linux
500 - Additional operator overloads to `Vector`, `EulerAngles`, and `WorldCoordinates`
504 - All PDU size macros have been moved into the relevant classes namespace with `public` attribute and type changed to `static const KUINT32`
505 - Renamed `GENERAL_APPEARANCE__SIZE` to `GENERAL_APPEARANCE_SIZE`
506 - All entity specific appearance classes to invert/negate the _Entity State Active_ value. In this case the `DIS` standard actually states that `0` indicates the state `true` and `1` the state `false`
507 - Dead reckoning is no longer done through static functions. Each entity must have a dead reckoning calculator class to perform the dead reckoning correctly
511 - `GED_BasicFixedWingAircraftt`
515 - PDU length in `Linear_Object_State_PDU::SetLinearSegmentParameters`
516 - Bug in all `EnvironmentRecords` where the length value should not include the length of the `EnvironmentRecord` header
517 - `CMake` bug that caused example `Environmental_Process_PDU` to only be included in `DIS 7`; should have been `DI 6` and `DIS 7`
518 - Mismatch between entity location and world location in `Detonation_PDU` constructor
519 - Typo `m_EntiyCapabilities` in `Entity_State_PDU`
520 - Public accessibility on Param Type Variant union in `ArticulationParameters`
522 ## 1.14.0 - 2010-03-17
526 - `Linear_Object_State_PDU` PDU
530 - PDU factory example avoid closing on PDU exceptions. It now prints the error and continues
534 - Bug in `AggregateMarking` encode and decode functions 1 octet offset causing problems with Aggregate State PDU's
535 - Bug in `EncodingScheme` when compiling to Linux. This change was reported in `1.13.0` but not included
537 ## 1.13.0 - 2010-02-26
541 - `Point_Object_State_PDU` PDU
542 - `EulerToHeadingPitchRoll` conversion to `KConversions.h`
543 - `SetTimeStampAutoCalculate`, `IsTimeStampAutoCalculate`, and `CalculateTimeStamp` to `TimeStamp`. Attempts to automatically calculate the timestamp when the encode function is called
547 - Renamed variables of `HeadingPitchRollToEuler` from `EulX`, `EulY`, and `EulZ` to `Psi`, `Theta`, and `Phi`
548 - `Entity_State_PDU` and `Environmental_Process_PDU` examples to use the new automatic timestamp calculation
552 - Bug in `HeadingPitchRollToEuler` conversion
553 - Typo from `Entity_Infomation_Interaction` to `Entity_Information_Interaction`
554 - Bug in `EncodingScheme` when compiling to Linux
556 ## 1.12.1 - 2009-12-16
560 - `Gridded_Data_PDU` new constructor
564 - `EntityIdentifier` and `AggregateIdentifier` derive from `SimulationIdentifier`
565 - `VariableDatum` to pass `const KString` references (thanks Anthony)
566 - `SimulationIdentifier` function `GetAsString` write _Object_ instead of _Entity_
570 - Bug in `Gridded_Data_PDU` where `GRIDDED_DATA_PDU_SIZE` was incorrectly set to `32` instead of `64`
571 - Bug where all protected PDU status member variables belonging to the `Header` class to become `public`. Caused by using anonymous unions
572 - Compilation error _Compiler Error C2635_ when casting from `Header` to a derived class. Caused by `virtual` inheritance
574 ## 1.12.0 - 2009-11-23
578 - `Gridded_Data_PDU` PDU
579 - Missing PDUs in `PDU_Factory`
583 - All `GetEnumAsString` functions use a single optimized search function
584 - Renamed `Send` example to `Entity_State_PDU`
588 - Bugs in some `GetEnumAsString` functions
589 - Bug in `Intercom_Control_PDU::GetAsString` and `Intercom_Control_PDU::Encode` iterators
590 - Incorrect `null` termination text in `EntityMarking` (thanks Anthony)
592 ## 1.11.1 - 2009-09-21
596 - Macro to `PDUStatusTEILVC` to only include if `DIS 7`
600 - Obsolete files (`BoundSphere.h` and `BoundSphere.cpp`) in `DataTypes` directory
604 - `CMake` not includes `Environmental_Process_PDU` when `DIS 5` is defined
605 - Bug in `Radio_Communications_Header` where `DIS 7` macros are not defined in the correct place
606 - Bug in `LineRecord2` and `PointRecord2` where the comparison operator would cause an infinite loop
608 ## 1.11.0 - 2009-09-16
612 - `Environmental_Process_PDU` PDU
613 - `Environmental_Process_PDU` example
614 - `DecimalToDMS` and `DMSTODecimal` to `KConversions.h`
615 - Initial support for `DIS` version `7`. `DIS` version can be specified via `CMake` or pre-processor definitions
616 - `PDUStatus` in `Header` (`DIS 7`). `PDUStatus` includes getters and setters for `PDUStatusTransferredEntityIndicator` and `PDUStatusLVCIndicator` to `Entity_State_PDU`, `Electromagnetic_Emission_PDU`, `Designator_PDU`, `Radio_Communications_Header`, `IFF_ATC_NAVAIDS_PDU`, `Electromagnetic_Emission_PDU`, and `Entity_State_Update_PDU`. Getter and setters for `PDUStatusFireType` to `Fire_PDU`. Getter and setter for `PDUStatusDetonationType` to `Detonation_PDU`. Getter and setter for `PDUStatusAttachedIndicator` to `Transmitter_PDU`, `Signal_PDU`, `Receiver_PDU`, `Intercom_System_PDU`, and `Intercom_Control_PDU`
617 - `SetWritePosition` and `GetWritePosition` functions to `KDataStream` allowing data "peaking"
618 - Missing PDUs in `PDU_Factory`
619 - `KException` new constructor allowing for more details to be added
623 - `Send` example uses a while loop to continuously send the PDU. Some applications do not always pick up the first PDU
627 - Some of the `Vector` operators would return the referenced objects and not the new copy of the object. This effected operators `*`, `+` and `-` (thanks Michael)
628 - Typo in `VariableDatum::GetAsString()` function. "Fixed Datum:" should have been "Variable Datum:"
629 - Timer in `Logger` playback is not started until the log is fully loaded
631 ## 1.10.0 - 2009-08-08
635 - `Dead Reckoning` implementation in class `DeadReckoningCalculator`. This class calculates dead reckoning transformations for all dead reckoning algorithms. This feature is currently in `BETA` until all algorithms are verified to work correctly
636 - `<` operator to `EntityType`, `AggregateType`, `AggregateIdentifier`, and `ClockTime`
637 - `*`, `+`, `+=`, `-`, `-=`, and `[]` operators to `EulerAngles`, `WorldCoordinates`, and `Vector`
638 - `ApplyDeadReckoning` function to `Entity_State_PDU`
642 - 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
644 ## 1.9.2 - 2009-07-30
648 - Missing destructor implementation to `Action_Response_R_PDU`
649 - `virtual` to all destructors to it is called even when a base pointer is deleted
650 - `==` and `!=` operators to all data types and PDUs
651 - `<` operator to `EntityIdentifier`, and `TimeStamp`
656 - Incorrect namespace references in function comments
658 ## 1.9.1 - 2009-07-26
662 - Additional comments to several PDUs to help further explain each field
663 - `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 macro `KDIS_USE_ENUM_DESCRIPTORS` in the pre-processor definitions or in `KDefines.h` file. This feature makes the library significantly larger: disable if not used. When disabled the `GetEnumAsString<Enum Name>` functions return the enumerated value as a string (`99` -> `"99"`).
664 - Website based on `MediaWiki` available at <https://sourceforge.net/p/kdis/wiki/Main_Page>
668 - Moved remaining enumerations from `KDISEnums.h` to `EnumEntityInfoInteraction.h`
669 - Replaced all uses of `strnset` with `memset`
670 - Default constructor initialize all data types to zero (if not already)
671 - `Send` example shows how to correctly use the timestamp
675 - Self-explanatory comments to several PDUs
680 - Bug in `FixedDatum` where `KDIS_EXPORT` is defined inside the template functions causing problem if compiling as a DLL shared library
682 ## 1.9.0 - 2009-07-06
686 - `IsGroupOf_PDU` PDU
688 - `MAX_PDU_SIZE` of `8192` from `1278.1-200X` standard
689 - `KRef_Ptr` class. This is an implementation of referenced pointer, designed to prevent memory leaks where memory needs to be dynamically allocated
690 - `HeadingPitchRollToEuler` to `KConversions.h`
694 - Country Type in `EntityType` constructor from `KUINT8` to `KUINT16`
698 - `using namespace std` directives from header files to prevent `std` attributes being exposed in the global namespace causing potential clashes
702 - Some catch blocks catch all exception types rather than just `KException`
704 ## 1.8.2 - 2009-05-26
708 - `Linux` support (thanks Anthony)
709 - Reference from `UINT16` to `KUINT16`
710 - From `sizeof DataType` to `sizeof(DataType)`
711 - `#include` use forward slash (`/`) instead of back slash (`\`)
712 - `#include` match the case of the file name
713 - `#include` added `./` to all relative paths
717 - Additonal `IntercomCommunicationsParameter` includes from `CMake` file
718 - Reference to `winsock2.h` in `KEncoderDecoders`
722 - `DIS_Logger_Record.cpp` throw qualifier missing on `writeToFile` function
723 - Bug in `SystemIdentifier` where the union and struct were in the wrong order
725 ## 1.8.1 - 2009-05-25
729 - Bug in `SwapBytes` that caused the endian to not be correctly swapped
731 ## 1.8.0 - 2009-05-13
736 - `Record_Query_R_PDU` PDU
737 - `Set_Record_R_PDU` PDU
741 - `RecordSpecification` data type. Record Sets are now placed directly into a PDU. When a change is made to a `RecordSpecification` parameter it was not always possible to update the PDU size. Removing `RecordSpecification` fixes this problem. This only effects `Transfer_Control_PDU`
745 - Bug in `FixedDatum` that caused template functions to give linker errors due implementation in source file instead of header file
747 ## 1.7.0 - 2009-05-11
751 - `Data_Query_R_PDU` PDU
752 - `Set_Data_R_PDU` PDU
754 - `Event_Report_R_PDU` PDU
755 - `Set_Data_PDU` new constructor
756 - `Data_Query_PDU` new constructor
757 - `Set_Data_PDU` new constructor
758 - `Event_Report_PDU` new constructor
759 - `PDU_Factory` support for all PDUs
760 - Comments to existing PDU's to further explain their usage
764 - `Data_PDU` constructor from `(KUINT32 RequestID)` to `(const EntityIdentifier, OriginatingEntityID)`, and `(const EntityIdentifier, ReceivingEntityID, KUINT32 RequestID)`
765 - `Action_Request_PDU` changed constructor from `(KUINT32 RequestID, KUINT32 ActionID)` to `(const EntityIdentifier, OriginatingEntityID)`, `(const EntityIdentifier, ReceivingEntityID)`, and `(KUINT32 RequestID, KUINT32 ActionID)`
769 - Duplicate includes in `CMake` file
770 - Missing `Intercom_Control_PDU` entry
772 ## 1.6.0 - 2009-03-30
776 - `Transfer_Control_Request_PDU` PDU
777 - `Create_Entity_R_PDU` PDU
778 - `Remove_Entity_R_PDU` PDU
779 - `Start_Resume_R_PDU` PDU
780 - `Stop_Freeze_R_PDU` PDU
781 - `Acknowledge_R_PDU` PDU
782 - `Action_Request_R_PDU` PDU
783 - `Action_Response_R_PDU` PDU
784 - `Comment_R_PDU` PDU
785 - `IFF_ATC_NAVAIDS_L2_PDU` PDU missing fundamental parts
786 - Added additional enumeration values taken from `SISO-REF-010 Changes`
787 - `Start_Resume_PDU` new constructors
788 - `Stop_Freeze_R_PDU` new constructors
789 - `Electromagnetic_Emission_PDU` two new constructors
790 - `IFF_ATC_NAVAIDS_L1_PDU ` new constructor
794 - Moved all enumerations that belong to Entity Info/Interaction into `EnumEntityInfoInteraction.h`
795 - Moved all enumerations that belong to Simulation Management Info/Interaction into `EnumSimulationManagement.h`
796 - `DatumID` enumerations are now appended with `Record` instead of `Datum`
797 - All PDU automatically set the Protocol Version
801 - `KDIS_NEWORK_ENDIAN` from `KDefines.h`
802 - Removed line in `Example_Send` that sets the Protocol Family as this is now done automatically in the constructor
806 - Bug in `GetData` function of `Signal_PDU`
807 - Bug in `Decode` function of `Create_Entity_PDU`
808 - Bug in `CMakeLists.txt` where file `Entity_State_Update_PDU.h` was not being included
809 - Bug in `Simulation_Management_Header` constructor where protocol family is not set
810 - Bug in `SEES` constructor where protocol family is not set
812 ## 1.5.4 - 2009-03-12
816 - Bug in `GetData` function of `Signal_PDU`
818 ## 1.5.3 - 2009-03-11
822 - Interface in `VariableDatum` for setting an arbitrary binary stream
826 - `VariableDatum` encoding and decoding
827 - `VariableDatum` bits/bytes mix up
829 - Because of needless `Microsoft Word` garbage, the changelog has been rewritten
831 ## 1.5.2 - 2009-03-04
835 - `Comment_PDU` constructor where the PDU type and length were not initialized
836 - `DESIGNATOR_PDU_SIZE` was incorrect, should be `88`, due to a typo in the `IEEE` standard
837 - `EncodingScheme` bits were incorrect on Big Endian machines
839 ## 1.5.1 - 2009-03-02
843 - Support for `DIS` version `5` in `PDU_Factory `
847 - `FuseType` enumeration has previously incorrect values
848 - `CMake` bugs when building with `DIS` version `5`
850 ## 1.5.0 - 2009-02-20
854 - `Intercom_Control_PDU` PDU
855 - `Aggregate_State_PDU` PDU
856 - `KDIS_LIB` (static library) and `KDIS_DLL` (shared library) examples
857 - [`CMake`](https://cmake.org) which is a cross-platform, open-source build system. The `CMake` file has certain options that allow to specify the version of `DIS` to use (`5` or `6`) and if to link against a `static` or `shared` library. Any future examples will require the use of `CMake`
861 - `KDataStream` only accepts `KUINT16` rather than `KUINT32`, which could have resulted in various buffer overrun problems
862 - `KDIS_EXPORT` macro now searches the project for preproccesor deflagrate. Use either `EXPORT_KDIS` or `IMPORT_KDIS`. _E.g: `/D "EXPORT_KDIS"`_
864 ## 1.4.0 - 2009-02-05
868 - `Intercom_Signal_PDU` PDU
869 - `DIS_Logger_Record` and `DIS_Logger_Playback`, which logs PDUs to a text file so that they can be replayed, have been added to `Extras`
870 - `DIS_Logger_Record` and `DIS_Logger_Playback` examples. Included captured data is generated by `MAK VR-Forces 3.10`
871 - `GetAsString` and `ReadFromString` functions to `KDataStream`. `GetAsString` converts the data stream into a hex string, whereas `ReadFromString` converts the string into a `KDataStream`. These two functions allow DIS data to be logged to a file and viewed at a later time
873 ## 1.3.1 - 2009-01-30
877 - References to the incomplete `Intercom_Signal_PDU` from `PDU_Factory`, which should not have been accessible
879 ## 1.3.0 - 2009-01-24
883 - Bugs in `Signal_PDU` where `SetData` did not set the `DataSize` and `GetData` was returning the padding that was added to the data
884 - Bug in `Entity_State_PDU` where `EntityAppearance` was being encoded incorrectly
885 - Typo in `SurfacePlatformAppearance::GetAsString` from _Space Platform Appearance_ instead of _Surface Platform Appearance_
887 ## 1.2.0 - 2008-12-21
891 - `Collision_Elastic_PDU` PDU
892 - `Entity_State_Update_PDU` PDU
893 - `FF_ATC_NAVAIDS_PDU` PDU
894 - Class `PDU_Factory` that converts a data stream into the correct PDU and returns an `auto_ptr` to the new PDU
895 - Example to show how to use `PDU_Factory`
897 - `KConversions.h`, which includes `RadToDeg`, `DegToRad`, `MetersToFeet`, `FeetToMeters`, and `GeodeticToGeocentric`, has been added to `UTILS`
898 - `DIS` version a PDU belongs to in the header comments
902 - All `GetFunctions` that previously returned an object now return a reference/const reference
903 - All examples have been integrated into a single directory
904 - All examples now use an updated version of `KSOCKETS`. However, it is still recommended to use your own socket library
905 - Renamed `Electronmagnetic_Emission_PDU` to `Electromagnetic_Emission_PDU`
906 - Licence from `GPL` to `LGPL`
907 - Changelog in HTML format
908 - `IsMachineBigEndian` use static variables providing a very small performance boost
912 - `#ifdef _win32` for primitive data types in `KDefines.h` that was prevented any other OS from working
916 - 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
918 ## 1.1.1 - 2008-10-28
924 ## 1.1.0 - 2008-10-27
928 - `AntennaLocation` new constructor
929 - `BurstDescriptor` new constructor
930 - `DeadReckoningParameter`new constructor
931 - `EmissionSystem` new constructor
932 - `EmitterBeam` new constructor
933 - `EncodingScheme` 2 new constructors
934 - `GeneralAppearance` new constructor
935 - `TimeStamp` new constructor
936 - `Entity_State_PDU` new constructor
937 - `Collision_PDU` new constructor
938 - `Repair_Complete_PDU` new constructor
939 - `Repair_Response_PDU` new constructor
940 - `Radio_Communications_Header` new constructor
941 - `Receiver_PDU` new constructor
942 - `Signal_PDU` new constructor
943 - `Transmitter_PDU` new constructor
944 - `Acknowledge_PDU` new constructors to auto generate a response depending on the PDU
948 - `BurstDescriptor` function `SetMunition` pass by reference
949 - `DeadReckoningParameter` function `setDeadReckoningAlgorithm` pass by value
950 - Renamed `m_ui16Fire` to `m_ui16Fuse`
954 - `EmitterBeam` removed typing error in `Set6BeamParamIndex` and `Get6BeamParamIndex`
958 - Bug in `vc9` example that checked for `Data_PDU` instead of `Entity_State_PDU`
960 ## 1.0.1 - 2008-10-24
964 - `Signal_PDU` data length is number of bits instead of octets