KDIS Change Log Version Numbers: X -Y -Z X - Major Change, changing DIS version. Y - Medium, introduction of new features, data types or PDU etc
Z - Minor, small changes, new functions, comments, bug fix etc.
Please post bugs/suggestions/comments to the SourceForge forum/tracker

Future Releases

Plans for future releases are currently:

- More work to come on IFF.
- Dead Reckoning - verify all algorithms work correctly.
- Conversions for multiple datum's and orientation representations.
- Improve GetAsString formatting.
- Finish/Improve Link 16 integration.

Version 2-9-0 | 21 January 2016

- Added unit tests using googletest framework. See here for more info.
- Added a bool-operator for convenience to KRef_Ptr.
- Added Connection::SetBlockingTimeOut to allow for setting a timeout for blocking mode.
- Added copy constructor and assignment operator to Entity_State_PDU.
- Added fix where incorrect size was assigned to LE_VECTOR_SIZE.
- Added get and set functions to EntityKind that support integers as well as enums for kind, domain and country. Makes it simpler when using values that may not be standard of implemented in the enums.
- Added GetEnumSize and GetEnumDescriptor, this exposes the internal EnumDescriptor arrays used for GetEnumAsString and GetEnumFromString, it is now possible to iterate through an enumeration using these 2 functions.
- Added implicit conversion support to KRef_Ptr. Fixes compile bug when using weak references.
- Added missing implementation of LifeFormAppearance::SetEntityLifeformState.
- Added PDU_FactoryLink16 to Link 16 example.
- Added missing padding to SilentAggregateSystem.
- Added missing padding to Mode5TransponderBasicData.
- Changed the format in RelativeWorldCoordinates::GetAsString().
- Fixed AggregateMarking::Decode not setting the last char in m_sAggregateMarkingString to zero. Caused comparison issues.
- Fixed bug decode/encode in Entity_State_Update_PDU, was not handling padding.
- Fixed bug in Appearance_PDU decode when no flags were used.
- Fixed bug in AttachedPart not encoding/decoding the part type.
- Fixed bug in FixedDatum:GetDatumValue. Was using strncpy to return data which causes issues when the data was not a string.
- Fixed bug in IFF_PDU::Decode. More info here
- Fixed bug in Intercom Control PDU and IntercomCommunicationParameters. Some values were not initialized so caused unexpected behaviours during encode/decode. Ticket
- Fixed bug in Underwater_Acoustic_PDU::Decode, was encoding by mistake.
- Fixed bug in SphereRecord2::Encode(), was calling the wrong Encode function internally.
- Fixed bug in GED_BasicFixedWingAircraft and GED_BasicFixedWingAircraft, using 8 bit int instead of 16 for speed.
- Fixed cmake for KDIS_LIB that was causing it to build a shared library instead of static.
- Fixed cmake for MinGW when building lib/dll version of KDIS.
- Fixed comparison operator == in Set_Data_R_PDU.
- Fixed comparison operator bug in KFIXED.
- Fixed decode bug in Intercom_Control_PDU.
- Fixed decode issue when handling padding in Aggregate_State_PDU.
- Fixed encode bug in Receiver_PDU.
- Fixed encode/decode bug in Entity_Damage_Status_PDU. Was not including padding.
- Fixed exception handling bug in Connection and IsGroupOf_PDU.
- Fixed incorrect PDU min size for GridDataType 0 and 1.
- Fixed incorrect PDU size in Underwater_Acoustic_PDU.
- Fixed incorrect PDU size in IFF_ATC_NAVAIDS_FundamentalParameterData.
- Fixed missing padding in IO_Report_PDU.
- Fixed null reference crash when encoding IntercomCommunicationParameters with no record.
- Fixed protocol version not being set in Intercom_Control_PDU.
- Fixed SilentEntitySystem not initialising m_ui16NumOfAppearanceRecords to 0. Caused encode/decode failure.
- Fixed size calculation in SetFixedDatum and SetVariableDatum.
- Fixed TSPI_PDU::m_ui8SSDLen not being initialised to 0 in some constructors.
- Fixed Uninitialised variables in SetData_R_PDU.
- Fixed VariableDatum::GetPDULength returning the incorrect value.
- Improved Connection socket error messages.
- Improved debugging information in header when a PDU has too small a buffer.
- Link 16 example is now built as a dynamic library.
- Several fixes for LE_FIRE_PDU and LE_Detonation_PDU from public submission(Thanks Göran!).
- Updated Link16 example code to now support partial decoding.

Version 2-8-0 | 27 June 2014

- Added IFF_PDU which replaces IFF_ATC_NAVAIDS_L1_PDU
- Removed IFF_ATC_NAVAIDS_L2_PDU, it is now a data type class called IFF_Layer2 which is a property of IFF_PDU.
- Added IFF Layer 3 classes: IFF_Layer3Transponder & IFF_Layer3Interrogator.
- Added VariableParamaters class. This replaces all ArticulationParamaters classes as the base class. See the migration guide for more details.
- Renamed ArticulationParamaters to ArticulatedPart.
- Added AttachedPart class.
- Added CryptoSystem::SetKeyID & CryptoSystem::GetKeyID.
- Removed 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. If you wish to support pre DIS 7 then use the Munition Descriptor class.
- Replaced BurstDescriptor in LE Fire & LE Detonation PDU with MunitionDescriptor. This class is the same except the Set/GetMuntion function is now named Set/GetType.
- Fixed no operation bug in CryptoSystem::SetCryptoSystemType.
- Fixed no operation bug in Aggregate_State_PDU::SetAggregateState.
- Fixed incorrect size values for DATA_R_PDU , SET_RECORD_R_PDU_SIZE and STOP_FREEZE_R_PDU_SIZE.
- Fixed bug in Set_Record_R_PDU::Decode & Set_Record_R_PDU::Encode. Not enough padding.
- Fixed error checking bug in Resupply_Received_PDU::Decode & Service_Request_PDU::Decode.
- Fixed bug in Transmitter_PDU::Transmitter_PDU, AntennaPatternLength was using the wrong data type.
- Fixed bug in void Data_Query_PDU::SetVariableDatum, setting the wrong length value.
- Fixed bug in MinePaintScheme, was not using the correct variable for SetPaintScheme & GetPaintScheme.
- Fixed ArticulationParameters(now ArticulatedPart) Parameter type variant field. The high and low bits method was incorrect. TypeVariantHighBits is now TypeVariantClass and TypeVariantLowBits is TypeVariantMetric.
- Fixed ArticulationParameters(now ArticulatedPart) Parameter type value field. Should have been a KFLOAT32 not KUINT64.
- Fixed bug in TimeStamp::SetTimeStampType.
- Fixed bug in EmitterBeam::SetEmitterBeamFunction, missing implementation.
- Fixed bug in EmitterBeam::ClearTrackedJammedTargets, invalid length value.
- Fixed bug with EmissionSystem data length being set to bytes and not words.
- Fixed enum CollisionType, inelastic and elastic values were mixed up. Removed OtherCollision, it was not valid.
- Fixed bug compiling Link 16 example when using a dll version of KDIS.
- Fixed Data_PDU::RequestID was not set to 0 by default causing junk values.
- Fixed bug in Directed_Energy_Fire_PDU Encode/Decode. Was not including padding.
- Fixed 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). The FactoryDecoder now uses the KRef_Ptr class.
- Fixed bug with GuidedMunitionsAppearance when using a DLL version of KDIS.
- Fixed bug in GetNextPDU when an error occurs, the next call was using corrupted data.
- Fixed incorrect function name in EllipsoidRecord2. Function GetSigma should have been GetDOverDt.
- Fixed some invalid Symbolic names.
- Fixed compile bug when using Visual Studio 2010 Express Edition, WIN32 was not defined.
- Added missing implementations of LinearVelocity, EntityLocation, EntityOrientation, EntityAppearance into Entity_State_Update_PDU.
- Added missing implementation for Fire_PDU::SetPDUStatusFireType and Fire_PDU::GetPDUStatusFireType.
- Added missing get/set for ResponseCode, ResponsePowerReduction & ResponseRadarEnhancement to FundamentalOperationalData_RRB.
- Added missing get/set for NumBurst to PointObjectAppearance.
- Added missing get/set for AttackerEntityID to AttackerEntityID.
- Added WorldCoordinates::Set to set all values in one call.
- Added Vector::Set to set all values in one call.
- Added Vector::Lerp.
- Added WorldCoordinates::Lerp
- Added SystemDesignator and SystemSpecificData to IFF_ATC_NAVAIDS_L1_PDU, they are DIS 7 features.
- Added SetTCASVersion to FundamentalOperationalData_MarkXTransponder & FundamentalOperationalData_MarkXInterrogator.
- Added some missing enums to StationName.
- Added missing enum to WarfareType.
- Added missing enums to EncodingType.
- Added Automatic Dependent Surveillance - Broadcast to EntityCapabilities.
- Linux - Added "make install" target and fixed the "you have to cmake . cmake . before building". Thanks Bud Davis!
- Renamed EnumFundamentalOperationalData .h & .cpp to EnumIFF.
- Renamed enum WarheadType::GlassBladsWarhead to WarheadType::GlassBeadsWarhead.
- Renamed enum EncodingType::_16_bit_linear_PCM to EncodingType::_16_bit_linear_PCM2sComplementBigEndian.
- Changed define COMM_CHANNEL_TYPE to a static KUINT16 COMM_CHANNEL_TYPE_SIZE.
- Removed KDIS_VERSION macro. It was never used and I often forgot to update it.
- Cleaned up namespaces. namespaces had become polluted, for example the following was possible: KDIS::PDU::Header, KDIS::NETWORK::Header, KDIS::UTILS::Header, KDIS::PDU::Header should have been the only one possible.
- Cleaned up GetAsString for many classes.
- Performance Improvements In Decoding. ignoreHeader parameter 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 now uses this technique.
- Lots of improvements to comments. More details, fixes etc.
- Fixed some files missing their license text.
- Changed Copyright 2013 KDIS to Copyright 2013 Karl Jones.
- Added UNLICENSE statement to examples(Except Link16).

Version 2-7-0 | 31 Jan 2013

- Changed license from LGPL to FreeBSD.
- Updated KSynmbolicNames.h. Renamed COLLISION_THRSH_DFLT to COLLISION_THRSH, EE_EL_THRSH_DFLT to EE_EL_THRSH
- Default DIS version is now 7 when using cmake.
- Changed EnumHeader.h ProtocolVersion IEEE_1278_1_200x to IEEE_1278_1_2012

Version 2-6-0 | 18 Dec 2012

- Added KDIS::PDU::Bundle class to support sending PDU Bundles.
- Added Example_Bundle to show how to send PDU Bundles.
- Added support to the Connection class to handle PDU Bundles, use the function GetNextPDU. Example_PDUFactory2 supports PDU Bundles.
- Added operators == & != to KDataStream.
- Added Connection::Send( const KDataStream & stream ).
- Changed CopyFromBuffer parameter SerialData to const.
- Fixed bug in CulturalFeatureAppearance::SetEntityExteriorLights. Invalid value being assigned.
- Added comment to SetProtocolVersion to clear up some common questions about how KDIS sets the ProtocolVersion
- Fixed bug in Transmitter_PDU::Encode().

Version 2-5-0 | 8 July 2012

- Changes have been made to the EntityAppearance class. Removed General and Specific Appearance classes. Extended the appearance type classes so they now contain all the appearance data instead of just the specific. The general appearance data was not always used in the same way so it made more sense to do it like this which is more flexible.
- Added 2 missing appearances - Cultural & Sensor/Emitter.
- Updated Data_Query_PDU and Data_Query_R_PDU Time Interval field to now use the TimeStamp class instead of a KUINT32.
- Fixed bug in EnumDetonationResult.
- FIxed bug in TimeStamp::CalculateTimeStamp, Linux version was not using nano secs.

Version 2-4-0 | 14 Dec 2011

- Started Adding Link 16 integration taken from SISO-STD-002-2006. This can be found at Examples/Extending/Link16. Includes new PDU:
  - Link16_Signal_PDU
  - Link16_Transmitter_PDU
- Added GetEnumFromString..., It is now possible to convert an enums name to its value as well as value to enum. More info here.
- Fixed bug in Data_Query_PDU and Data_Query_R_PDU. Variable and Fixed Datum's were being used instead of just ID's.
- Some improvements to DeadReckoningCalculator::GenerateSmoothingPoints
- Some reorganizing of the examples. Examples are now sorted in sub folders by category.
- Changed cmake files to generate solution folders to better organise projects, This is not supported on all IDE, its mainly a Visual Studio Pro(Not Express) feature. Controlled by a new CMake flag called USE_SOLUTION_FOLDERS
- Fixed bug in cmake file for DIS 7 when using KDIS as a DLL. Was including EnumInformationOperations.cpp.
- Fixed bug in Collision PDU, variable m_f32Mass was not being Encoded/Decoded.
- Fixed bug in several GetEnumAsStrings, some of the functions were passing the incorrect size value for their descriptors.
- Fixed. Some classes were not setting variables to 0 by default.
- Fixed bug in EncodingScheme, incorrect size.
- EmitterName - Fixed some invalid enums and added some missing ones.
- Renamed enum descriptors in EnumInformationOperations.cpp to align with naming convention used in other enum files.

Version 2-3-0 | 27 July 2011

- Last 2 PDU from the DIS 7 draft 15, All DIS 7 PDU from draft 15 are now implemented:
  - Directed_Energy_Fire_PDU
  - Entity_Damage_Status_PDU
- EntityMarking - Added support for strings instead of char arrays.
- Added some new useful functions:- Vector::GetMagnitude, Vector::GetDistance, WorldCoordinates::GetDistance
- Connection send functions now return the number of bytes sent instead of void.
- Removed LGPL licence from examples. All the examples of using KDIS are now unlicenced. Please note the KDIS library is still LGPL. See here for further details.
- Updated PDU_Factory with new PDU's.
- Fixed APA class public union, it should have been private.
- Fixed memory leak in Connection class. PDU_Factory was not being deleted.

Version 2-2-0 | 30 May 2011

- New PDU from DIS 7 draft 15:
  - Attribute_PDU
- Added FactoryDecoder, this class can be used to add your own decoders. E,G you can add support for your own implementations of VariableDatum etc. See example FactoryDecoder for details. Current data types that now support this feature are: VariableDatum, FixedDatum, EnvironmentRecord and StandardVariable. More to come.
- In order to support custom data types(See above) some PDU now store internal objects as pointers, some PDU interfaces have had to change to reflect this. StandardVariable Factory Decode functions have also been changed. Apologies!
- Some performance improvments to KDataStream Encode/Decode functions. I found I had a 20%~ performance improvment.
- Added further enumerations for DatumID field taken from SISO-REF-010-2010 RC3
- Renamed "LE" folder to "Live_Entity" to fit more in line with the naming style of other PDU family folders.
- Added Header6 and Header7, based on the DIS_VERSION one will be typedef to Header. Header7 now features all the PDU Status fields from the DIS 7 standard. Removed PDUStatusTEILVC and moved all PDU Status code to Header7.
- Added ConnectionAddressFilter to NETWORK namespace and example to show use. This class allows filtering by IP address.
- Added new function to EnvironmentRecord called FactoryDecode, all derived classes can now be decoded using this function. Changed Environment_Process_PDU decode function to now use this.
- Fixed bug in Transmitter_PDU::GetAsString, Length Of Modulation Param was not being output correctly.
- Fixed bug in PDU_Factory decoding that prevented PDU bundling.
- Fixed compile bug in Connection.cpp for some versions of Linux. Connection::SendPDU( Header * H ) did not match the header version.
- Fixed bug in Connection::GetNextPDU. When using none blocking sockets the OnDataReceived event was called even when no data was received.
- Corrected DetonationType enum values.
- Added ClearVariableDatumList to Aggregate_State_PDU
- Fixed Warning. Some compilers were issuing warnings due to files not ending in a newline, this is now fixed.
- Added option to CMake to BUILD_EXAMPLES.
- Changed macro '#if DIS_VERSION >= 7' to '#if DIS_VERSION > 6' for compiling with MinGW.
- Run the code through AStyle to fix some of the formatting issues when viewing the code outside of Visual Studio.

Version 2-1-1 | 23 Dec 2010

- Added SendPDU to Connection class and changed Env Proc PDU example to show this in use.
- Small change to ConnectionSubscriber to allow for making changes on pdu transmit

Version 2-1-0 | 22 Dec 2010

- New PDU from DIS 7 draft 15:
  - IO_Action_PDU
- Added new namespace called 'NETWORK', this features the new Connection class, a cross platform DIS centric socket class.
- Added new example Example_PduFactory2. This example shows some of the new features of the Connection class.
- Removed KSockets.
- Added new Decode function to PDU_Factory. It is now simple to add support for your own PDU classes by overriding this function in your own factory classes.
- Improved clarity and appearance of various GetAsString functions. Added missing GetEnumAsString calls for various enums.
- Various little tweaks to optimize code.
- Added KDataStream::GetBufferPtr, this should add a small performance boost over using CopyIntoBuffer. Updated examples to use this feature.
- Fixed bug in EntityType::ReadFromTokenisedString, the string being passed was unexpectedly being changed by the strtok function.
- Removed some redundant code from KDataStream::CopyFromBuffer.
- Changed KException to inherit from std::exception. You can now catch KDIS exceptions with standard exceptions, changed examples to show this.
- Added missing function GetEnumAsStringDetailAmplitude.
- Fixed bug in Point_Object_State_PDU, the final padding field had not been included.
- Renamed all example projects to start with 'Example_' except the dll and lib examples.
- Fixed bug in GetEnumAsStringEmitterName, some values were not sorted correctly.
- Fixed bug when using bitsets in MS Visual Studio 2010.
- Removed unused variable(ii) in VaiableDatum.cpp.

Version 2-0-1 | 1 Sept 2010

- Large refactoring of code, removing unnecessary using namespace statements and replaced with using statements to allow for intelisense to correctly display the contents of a namespace. Typo fixes.
- Moved EMITTER_BEAM_SIZE, EMITTER_SYSTEM_SIZE, OBJECT_TYPE_SIZE AND POINT_OBJECT_APPEARANCE_SIZE, SUPPLIES_SIZE to class scopes.
- Changed ENTITY_DESTINATION_RECORD, GROUP_DESTINATION_RECORD, GROUP_ASSIGNMENT_RECORD from a macro to static const KUINT16.
- Added SetSupplies to Resupply_Received_PDU.
- Rename ENTITY_DESTINATION_RECORD, GROUP_DESTINATION_RECORD, GROUP_ASSIGNMENT_RECORD to [NAME]_SIZE.
- Moved GEDItem, GEDList, GridAxisDescriptor, GridDataPtr, EnvironmentRecordPtr and EnvironmentRecordLst from PDU namespace to DATA_TYPE.

Version 2-0-0 | 31 Aug 2010

- All DIS version 6 (IEEE 1278.1a) PDU's have now been implemented. This version includes the final 5 PDU's from the Live Entity(LE) family:

- TSPI_PDU
- Appearance_PDU
- Articulated_Parts_PDU
- LE_Fire_PDU
- LE_Detonation_PDU

- Fixed bug in point, linear and areal appearance classes. The endian was not being swapped when encoding/decoding.
- Fixed bug in Entity_State_Update_PDU Decode function.
- Fixed bug in DecimalToDMS when passing negative values.
- Changes to various GetAsString functions to improve formatting.
- Updated PDU Factory to support new PDU's and some Minefield PDU's that were left out in the last update.

Version 1-16-0 | 28 June 2010

- New PDU:
  - Minefield_Query_PDU
  - Minefield_Data_PDU
  - Minefield_Response_NACK_PDU
- Fixed bug in VariableDatum decode, the datum value vector was not being cleared on each decode.
- FIxed bug in Minefield_Header. Protocol family and version were not being set.
- Updated PDU_Factory with new PDU's
- Added postfix 'd' onto debug lib and dll example binaries. The postfix value can be changed through the CMake interface under the CMAKE_DEBUG_POSTFIX variable.
- Updated entity state pdu to throw exception if InitDeadReckoning is not called before ApplyDeadReckoning.
- Fixed bug in CreateTokenisedString, the extra value was not being added to the string.
- Fixed bug with GetEnumAsString.. for minefield enums. Functions were not correctly defined.
- Changed EnumMinefield so all GetAsString functions were using the optimised GetAsString function instead of the old linear search method.
- Fixed PDUType enum bug, I had some incorrect values (over 135), this effects linear, object and point state PDU from the Synthetic_Environment family.
- Fixed bug in LinearObjectAppearance and ArealObjectAppearance Encode & Decode function, 1 extra octet was being encoded/decoded.
- Typo fix: SIMULATION_IDENTIFER_SIZE to SIMULATION_IDENTIFIER_SIZE.
- Fixed bug in SpecificAppearance::GetAsString, was using Kind value instead of Domain.(Thanks David).
- Added clear functions to some of the variable fields such as Entity State PDU Articulation Parameters.
- Fixed bug in minefield state pdu, PDU type was incorrect.
- Fixed bug in RecordSet::SetRecordValues, length was incorrect.

Version 1-15-1 | 17 May 2010

- Fixed PDU length bug in Minefield_State_PDU.
- Fixed bug in MinefieldAppearance. struct and union were in the wrong order.

Version 1-15-0 | 11 May 2010

- New PDU:
  - Areal_Object_State_PDU
  - Minefield_State_PDU
- Fixed PDU length bug in Linear_Object_State_PDU::SetLinearSegmentParameters.
- Fixed bug in all EnvironmentRecords, the length value should not include the length of the EnvironmentRecord header.
- Fixed CMake bug that caused example Environmental_Process_PDU to only be included in DIS Version 7, should have been 6 and 7.
- All PDU size macros have been moved into the relevant classes namespace with public attributes and changed to static const KUINT32.
- Renamed GENERAL_APPEARANCE__SIZE to GENERAL_APPEARANCE_SIZE.
- Removed GED_BasicFixedWingAircraftt. An old file that was spelt incorrectly.
- Added support to EnvironmentType for changing the kind value
- Added filters to PDU_Factory. It is now possible to filter what PDU get through. It is very simple to create a filter, An Exercise ID filter has been provided as an example
- Updated PDU_Factory to show using a filter
- Updated PDU_Factory to support all new PDU
- Added ReadFromTokenisedString and CreateTokenisedString to EntityType. This allows for a tokenised string(Such as csv) to be parsed into the entity type.
- Fixed mismatch between entity location and world location in Detonation_PDU constructor.
- Improved timestamps auto calculate to include milliseconds for windows & linux.
- Changed all entity specific appearance classes to invert/negate the "Entity State Active" value. In this case the DIS standard actually states that a 0 indicates the state is true and 1 false, so I flipped them to make more sense. If you want to disable the entity you now say SetEntityStateActive( false ) instead of SetEntityStateActive( true ).
- Added some additional operator overloads to Vector, EulerAngles and WorldCoordinates
- Changes to dead reckoning calculator. Dead reckoning is no longer done through static functions. Each entity must now have a dead reckoning calculator class to perform the dead reckoning correctly. More information and tutorials can be found here. Thanks to Robert Ioiart for these changes.
- Fixed spelling error on m_EntiyCapabilities in Entity_State_PDU
- Fixed public accessibility on Param Type Variant union in ArticulationParameters

Version 1-14-0 | 17 March 2010

- New PDU:
  - Linear_Object_State_PDU
- Changed PDU factory example so that it does not close on PDU exceptions. It now prints the error and continues.
- Fixed bug in AggregateMarking, encode and decode were 1 octet out causing problems with Aggregate State PDU's.
- Fixed bug in EncodingScheme when compiling to linux - This change was reported in 1-13-0 but was not actually included.

Version 1-13-0 | 26 Feb 2010

- New PDU:
  - Point_Object_State_PDU
- Added EulerToHeadingPitchRoll conversion to KConversions.h
- Fixed bug in HeadingPitchRollToEuler conversion. Renamed variables EulX, EulY and EulZ to Psi, Theta and Phi.
- Added SetTimeStampAutoCalculate, IsTimeStampAutoCalculate and CalculateTimeStamp to TimeStamp. This feature attempts to automatically calculate the time stamp when ever the encode function is called.
- Updated Entity_State_PDU and Environmental_Process_PDU examples to use the new time stamp feature.
- Fixed typo Entity_Infomation_Interaction to Entity_Information_Interaction.
- Fixed bug in EncodingScheme when compiling to linux.

Version 1-12-1 | 16 Dec 2009

- Changed EntityIdentifier and AggregateIdentifier data types to now derive from SimulationIdentifier.
- Chnaged VaribaleDatum to pass const KString refs. Small change to allow for passing temporaries (Thanks Anthony).
- Added new constructor to Gridded_Data_PDU.
- Fixed bug in Gridded_Data_PDU, GRIDDED_DATA_PDU_SIZE was incorrectly set to 32, should be 64.
- Changed SimulationIdentifier GetAsString to now say "Object" instead of "Entity".
- Fixed issue that caused all protected PDU status member variables belonging to the Header class to become public, this was caused by using anonymous unions.
- Fixed bug that caused "Compiler Error C2635" when you tried to cast from Header to a derived class. This was caused by virtual inheritance.

Version 1-12-0 | 23 Nov 2009

- New PDU:
  - Gridded_Data_PDU
- Changed all GetEnumAsString functions to use a single search function which has also been optimised.
- Fixed some small bugs in some of the GetEnumAsString functions.
- Fixed iterator bug in Intercom_Control_PDU::GetAsString and Intercom_Control_PDU::Encode
- Some small optimisation improvements throughout.
- Fixed bug in EntityMarking, marking text was being null terminated incorrectly, I was writing outside of the array bounds.(Thanks Anthony).
- Renamed the "Send" example to Entity_State_PDU. Should be a bit clearer for newcomers.
- Updated PDU Factory with new PDU and moved all includes to cpp file.
- Some changes to the GetAsString Formatting to make it easier to read.

Version 1-11-1 | 21 Sep 2009

- Fixed Cmake bug so Environmental_Process_PDU is not included in DIS 5 projects
- Fixed bug in Radio_Communications_Header, DIS 7 macros was not in the correct place.
- Added macro to PDUStatusTEILVC to only include if the DIS version is 7. This fixes problems if you are building projects manually.
- Fixed bug in LineRecord2 and PointRecord2 where the comparison operator would cause an infinite loop>
- Removed some obsolete files in DataTypes folder(BoundSphere.h/.cpp)

Version 1-11-0 | 16 Sep 2009

- New PDU:
  - Environmental_Process_PDU
- Added new example Environmental_Process_PDU.
- Added DecimalToDMS and DMSTODecimal to KConversions.h
- I have begun to make some small changes in preparation for adding DIS version 7. You may now specify DIS version 7 (DIS_VERSION=7). This can be done through CMake or the pre-processor definitions.
- Added PDUStatus to Header, this is a DIS version 7 feature. PDUStatus includes:
  - Added Get/Set PDUStatusTransferredEntityIndicator and PDUStatusLVCIndicator to Entity_State_PDU, Electromagnetic_Emission_PDU, Designator_PDU, , Radio_Communications_Header, IFF_ATC_NAVAIDS_PDU, Electromagnetic_Emission_PDU, Entity_State_Update_PDU
  - Added Get/Set PDUStatusFireType to Fire_PDU, this is a DIS version 7 feature.
  - Added Get/Set PDUStatusDetonationType to Detonation_PDU.
  - Added Get/Set PDUStatusAttachedIndicator to Transmitter_PDU, Signal_PDU, Receiver_PDU, Intercom_System_PDU, Intercom_Control_PDU.
- Fixed a problem where some of the Vector operators would return the referenced objects and not the new copy of the object. This effected operator *, operator + and operator -.(Thanks Michael)
- Updated the Send example so it uses a while loop to continuously send the PDU, some applications didn't always pick up the first PDU.
- Added SetWritePositon and GetWritePositon to KDataStream. These functions allow for "peaking" at data.
- Updated PDU_Factory with some missing PDUs.
- Fixed typo in VariableDatum::GetAsString(). "Fixed Datum:" should have been "Variable Datum:".
- Added new constructor to KException to allow for more details to be added.
- Fixed issue in logger playback, if the log is large it will take time to load so dont start the timer till we are ready.

Version 1-10-0 | 08 Aug 2009

- Dead Reckoning is here. New class DeadReckoningCalculator can be found in the Extras folder. This class will calculate dead reckoning transformations for all dead reckoning algorithms. This class is currently in a BETA state until I can verify that all algorithms work correctly. Any help people can provide to validate/test/fix these algorithms will be greatly appreciated :)
- Added < operator to EntityType, AggregateType, AggregateIdentifier and ClockTime.
- Added *, +, +=, -, -= and [] operators to EulerAngles, WorldCoordinates and Vector.
- All namespaces are now no longer global when you include a KDIS header. This will prevent KDIS from conflicting with other class/struct/enums that have the same name. If you have any problems compiling when you add this new version try adding some using namespace directives to your code., E.G using namespace KDIS; using namespace DATA_TYPE; etc.
- Added ApplyDeadReckoning function to Entity_State_PDU.

Version 1-9-2 | 30 July 2009

- Added missing destructor implementation to Action_Response_R_PDU.
- Added virtual to all destructors so they are always called correctly even when a base pointer is deleted.
- Added == and != operators to all data types and PDUs.
- Added < operator to EntityIdentifier, TimeStamp.
- Further improvements to comments, fixed some incorrect namespace references in function comments.

Version 1-9-1 | 26 July 2009

- Added additional comments to several PDUs such as the Entity_State_PDU to help further explain each field and removed a lot of the junk from comments that was self explanatory. such as Method name etc.
- Moved remaining enumerations from KDISEnums.h to EnumEntityInfoInteraction.h, this is where they belonged.
- Replaced all uses of strnset with memset.
- Changed all default constructors so that they initialise all data types to zero if they didn't already.
- Fixed bug in FixedDatum, KDIS_EXPORT was defined inside the template functions, caused by a replace all at some point in the past. Would have caused problems if compiling to use a DLL.
- Added new function to all enumerations - GetEnumAsString<Enum Name>( KINT32 Value ). These functions will return the string value for an enumeration. E.G If you wanted to know what the value 39 represented in the enumeration EmitterFunction you would call GetEnumAsStringEmitterFunction( 39 ) and in this case the returned value would be "ClickJammingFunction". This feature can be enabled/disable by declaring a macro KDIS_USE_ENUM_DESCRIPTORS in the pre-processor definitions or the KDefines.h file. This feature can make your generated exe/dll/lib significantly larger so disable it if you don't plan to use it. When disabled the GetEnumAsString functions will simply return the enumerated value as a string. E.G GetEnumAsStringEmitterFunction( 39 ) would now return "39". I am currently applying this change to all GetAsString function in Data types and PDU. More infomation can be found here. This feature can also be enabled/disabled from CMake.
- KDIS has a new website based on MediaWiki. This site will feature all documentation for KDIS including class docs, tutorials etc. You can find it here.
- Small change to the Send example showing how to correctly use the time stamp, a tutorial is now available for this example here.
- Class documentation is now also available at the KDIS website.
- Removed Old vc2008.zip. This is very out of date now.

Version 1-9-0 | 06 July 2009

- New PDU:
  - IsGroupOf_PDU
  - IsPartOf_PDU
- Added MAX_PDU_SIZE 8192 taken from 1278.1-200X standard.
- Removed all using namespace std; directives from header files to prevent std attributes becoming exposed in the global namespace and causing potential clashes with other peoples code.
- Added KRef_Ptr class. This is an implementation of referenced pointer, designed to prevent memory leaks where memory needs to be dynamically allocated.
- Fixed potential bug, some exception handling catch blocks were catching exception and instead of KException.
- Changed Country Type in EntityType constructor from KUINT8 to KUINT16.
- Added HeadingPitchRollToEuler to KConversions.h

Version 1-8-2 | 26 May 2009

- Several changes to help with compiling on linux platforms(Thanks Anthony) including:
  - KEncoderDecoders - Removed refrence to winsock2.h from KEncoderDecoders, changed a refrence to UINT16 to KUINT16 and changed all 'sizeof DataType' to 'sizeof( DataType )'.
  - Changed all incldues to use forward slashes instead of back, E.G #include".\AggregateIdentifier.h" to #include"./AggregateIdentifier.h"
  - FixedDatum - changed all 'sizeof Type' to 'sizeof( Type )'.
  - SystemIdentifier - small bug. union and struct were in the wrong order.
  - Changed all includes to match the case of the file names.
  - Added ./ to all relative includes
- Removed additonal IntercomCommunicationsParameter includes from Cmake file
- DIS_Logger_Record.cpp - throw qualifier missing on writeToFile.

Version 1-8-1 | 25 May 2009

- Fixed major bug in SwapBytes that caused the endian to not be correclty swapped

Version 1-8-0 | 13 May 2009

- New PDU:
  - Record_R_PDU
  - Record_Query_R_PDU
  - Set_Record_R_PDU
- Removed RecordSpecification data type. Record Sets are now placed directly into a PDU, When a change was made to the RecordSpecification parameter it was not allways possible to update the PDU size. Removing RecordSpecification fixes this problem. This will only effect the Transfer_Control_PDU.
- Fixed a bug in FixedDatumn that caused template functions to give linker errors. This was due to me implementing the function in the cpp files, they should be in the h files.

Version 1-7-0 | 11 May 2009

- New PDU:
  - Data_Query_R_PDU
  - Set_Data_R_PDU
  - Data_R_PDU
  - Event_Report_R_PDU
- Added some additional comments to existing PDU's to further explain their use.
- Fixed some duplicate includes in the CMake file and added missing Intercom_Control_PDU entry.
- Set_Data_PDU - New constructor.
- Data_Query_PDU - New constructor.
- Set_Data_PDU - New constructor.
- Event_Report_PDU - New constructor.
- Data_PDU - Changed constructor Data_PDU( KUINT32 RequestID ) to Data_PDU( const EntityIdentifier & OriginatingEntityID, const EntityIdentifier & ReceivingEntityID, KUINT32 RequestID );
- Action_Request_PDU/Action_Request_R_PDU- Changed constructor Action_Request_PDU( KUINT32 RequestID, KUINT32 ActionID ) to Action_Request_PDU( const EntityIdentifier & OriginatingEntityID, const EntityIdentifier & ReceivingEntityID, KUINT32 RequestID, KUINT32 ActionID );
- Updated PDU_Factory to support all new PDU.

Version 1-6-0 | 30 March 2009

- New PDU:
  - Transfer_Control_Request_PDU
  - Create_Entity_R_PDU
  - Remove_Entity_R_PDU
  - Start_Resume_R_PDU
  - Stop_Freeze_R_PDU
  - Acknowledge_R_PDU
  - Action_Request_R_PDU
  - Action_Response_R_PDU
  - Comment_R_PDU
- IFF_ATC_NAVAIDS_L2_PDU - This PDU was missing some fundamental parts which are now in place.
- Fixed bug in GetData in the Signal_PDU.
- Create_Entity_PDU - Fixed bug in Decode function.
- Removed KDIS_NEWORK_ENDIAN from KDefines.h - Unused.
- Moved all enumerations that belong to Entiy Info/Interaction into one file(EnumEntityInfoInteraction.h) and the same for Simulation Management(EnumSimulationManagement.h)
- Changed DatumID enumerations, they are now appended with 'Record' instead of 'Datum'. Added additional enumeration values taken from 'SISO-REF-010 Changes'
- Fixed a bug in 'CMakeLists.txt, Entity_State_Update_PDU.h was not being included in projects.
- Start_Resume_PDU - Added new constructors
- Stop_Freeze_R_PDU - Added new constructors.
- Simulation_Management_Header - Fixed bug in constructor protocol family not being set.
- SEES - Fixed bug in constructor protocol family not being set..
- All PDU now automatically set the Protocol Version.
- Example_Send - Removed line that sets the Protocl Family as this is now done automatically in the constructor.
- Electromagnetic_Emission_PDU - Added 2 new constructors.
- IFF_ATC_NAVAIDS_L1_PDU - Added new constructor

Version 1-5-4 | 12 March 2009

- Fixed bug in GetData in the Signal_PDU.

Version 1-5-3 | 11 March 2009

- VariableDatum Encoding and Decoding bug fixed.
- Interface for setting an arbitrary binary stream added to VariableDatum
- Bits/Bytes mix up bugs fixed in VariableDatum
- Some small comment fixes/spelling mistakes etc
- Fixed the changelog, Microsoft Word filled the source with useless junk so re wrote by hand.

Version 1-5-2 | 04 March 2009

- Fixed Comment_PDU constructor, PDU type and length were not initialising.
- DESIGNATOR_PDU_SIZE was incorrect, should be 88. This is due to a typo in the IEEE standard.
- EncodingScheme bits were incorrect on Big Endian machines.

Version 1-5-1 | 02 March 2009

- Fixed FuseType enumeration, values were incorrect.
- Fixed PDU_Factory so it now supports DIS version 5.
- Fixed some small CMake bugs when building DIS version 5.

Version 1-5-0 | 20 Feb 2009

- New PDU:
  - Intercom_Control_PDU
  - Aggregate_State_PDU
- Changed KDataStream To only accept KUINT16 instead of KUINT32, this could have caused some buffer overrun problems.
- Added new examples KDIS_LIB(Builds a static library version) and KDIS_DLL(Builds a shared library version)
- I have now introduced CMake into KDIS, CMake is a cross-platform, open-source build system. It will allow users to build custom project files for the compiler they choose. I have added some options to the CMake file to allow users to specify what version of DIS they want to use(5 or 6) and if they wish to link against a library version(Static or Shared). A tutorial for using CMake with KDIS can be found here. The visual studio 2008 examples are still included; however any future examples will require using CMake.
- Changed how the KDIS_EXPORT macro works, it now looks for preproccesor deflagrate in the project. use either EXPORT_KDIS or IMPORT_KDIS. E.g: /D "EXPORT_KDIS".

Version 1-4-0 | 05 Feb 2009

- New PDU:
  - Intercom_Signal_PDU
- DIS_Logger_Record and DIS_Logger_Playback added to Extras, Logs PDUs to a text file so that they can be played back later.
- Added Examples DIS_Logger_Record and DIS_Logger_Playback. I have included some data I captured with theese examples (Generated by MAK VR-Forces 3.10).
- Added GetAsString and ReadFromString to KDataStream. This will allow you to convert a data stream into a hex string for debugging, using ReadFromString will convert the string back into a KDataStream. With theese 2 functions DIS data can be logged to a file and read at a later time. This is how the DIS_Loggers work.

Version 1-3-1 | 30 Jan 2009

- Removed references to Intercom_Signal_PDU from PDU_Factory. This is an unfinished PDU that should not have been in v1-3-1

Version 1-3-0 | 24 Jan 2009

- Fixed bugs in Signal_PDU, SetData did not set the DataSize and GetData was returning the padding that was added to the data.
- Fixed bug in Entity_State_PDU. EntityAppearance was being encoded incorrectly.
- Fixed typing error in SurfacePlatformAppearance::GetAsString - It said "Space Platform Appearance" instead of "Surface Platform Appearance".

Version 1-2-0 | 21 Dec 2009

- New PDU:
  - Collision_Elastic_PDU
  - Entity_State_Update_PDU
  - FF_ATC_NAVAIDS_PDU
- Added new class PDU_Factory, found in Extras folder. This class will convert a data stream into the correct PDU and return a auto_ptr to the new PDU.
- Added new example to show how to use the PDU_Factory and also re structured all examples into one directory. All examples now use an updated version of KSOCKETS, however I still recommend you use your own socket library.
- Changed all GetFunctions that return an object to return a reference/const reference.
- Introduced a new namespace UTILS.
- KConversions.h added to UTILS, holds RadToDeg, DegToRad, MetersToFeet, FeetToMeters, GeodeticToGeocentric
- Renamed Electronmagnetic_Emission_PDU to Electromagnetic_Emission_PDU
- Changed Licence text from GPL to LGPL
- Removed #ifdef _win32 for primitive data types in KDefines.h, this was preventing
- KDIS from working on any other OS.
- Converted change log to Html
- Changed IsMachineBigEndian to use static variables. Should provide a very small performance boost.
- Added the DIS version a PDU belongs to in the header comments.
- Fixed a bug in Comment_PDU, PDU Length when reading variable datum lengths was incorrect due to the returned variable datum lengths value being in bits.

Version 1-1-1 | 28 Oct 2008

- Added vc9 send example

Version 1-1-0 | 27 Oct 2008

- Fixed bug in vc9 example - was checking for a Data_PDU instead of Entity_State_PDU
- AntennaLocation - Added new constructor.
- BurstDescriptor - Added new constructor / changed SetMunition to pass by refrence.
- Renamed m_ui16Fire to m_ui16Fuse.
- DeadReckoningParameter - Added new constructor / changed setDeadReckoningAlgorithm function to pass by value.
- EmissionSystem - Added new constructor.
- EmitterBeam - Added new constructor. Removed typing error in Set6BeamParamIndex.and Get6BeamParamIndex.
- EncodingScheme - Added 2 new constructors.
- GeneralAppearance - Added new constructor.
- TimeStamp - Added new constructor.
- Entity_State_PDU - Added new constructor.
- Collision_PDU - Added new constructor.
- Repair_Complete_PDU - Added new constructor.
- Repair_Response_PDU - Added new constructor.
- Radio_Communications_Header - Added new constructor.
- Receiver_PDU - Added new constructor.
- Signal_PDU - Added new constructor.
- Transmitter_PDU - Added new constructor.
- Acknowledge_PDU - Added new constructors to auto generate a response depending on the PDU.

Version 1-0-1 | 24 Oct 2008

- Signal_PDU : Data length changed to number of bits instead of octets.