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.
PDUcan be cloned via theKDIS::PDU::clone(pdu)function- Clone example, named
clone, demonstrating how aPDUcan be cloned KDIS::UTIL::Endianclass for endian (BIGandLITTLE)KDIS::UTIL::formatfunction to simulatestd::format(C++20): Format arguments according to the format string, and return the result as a stringCMakeoptionKDIS_BUILD_DOCS(defaultPROJECT_IS_TOP_LEVEL) to specify whether or not to build documentationCMakeoptionKDIS_BUILD_INSTALL(defaultPROJECT_IS_TOP_LEVEL) to specify whether or not to build installCMakeoptionKDIS_BUILD_TESTS_COVERAGE(defaultPROJECT_IS_TOP_LEVEL) to specify whether or not to build tests coverage- Codecov added to the GitHub repository via #41
- Extension of header files changed from
.hto.hpp C++minimum supported standard isC++11CMakeminimum supported version is3.14- Enum
KDIS::ErrorCodesis aclass enum, has been renamed toKDIS::ErrorCode, and has additional values - Enum
KDIS::Endianis aclass enummoved inKDIS::UTIL::Endianclass, and has been renamed toKDIS::UTIL::Endian::Endianness. Renamed valueLittle_EndiantoLITTLE, and valueBig_EndiantoBIG KDIS::KExceptiontwo parameters' constructor has been inverted to accepts error code and message instead of message and error codeKExceptioninherits fromstd::runtime_errorinstead ofstd::exception.KDISlibrary can be linked to a target more easily:target_link_libraries(executable PRIVATE KDIS::KDIS)- Renamed
CMakeoption fromBUILD_EXAMPLEStoKDIS_BUILD_EXAMPLES - Renamed
CMakeoption fromBUILD_TESTStoKDIS_BUILD_TESTS KDIS_Change_Log.htmfile has been replaced withCHANGELOG.mdand is based on the format Keep a Changelog- Improved header file installation for easier client consumption via #34
- C-style casts in favor of C++ named casts via #54
KDIS::DATA_TYPE::AggregateMarkingnow usesKStringinstead ofKCHAR8*/size pairs via #64KDIS::DATA_TYPE::EntityMarkingnow only usesKStringinstead ofKCHAR8*/size pairs via #64- Overall code and repository structure have been reworked to improve maintainability
KDIS:KExceptiongeneric constructorCMakeoptionBUILD_EXAMPLES_TO_LINK_TO_LIB. To determine whether to build astaticorsharedlibrary, use the officialBUILD_SHARED_LIBSflag optionCMakeoptionEXAMPLES_USE_STATIC_OR_SHARED_LIB. To determine whether to build astaticorsharedlibrary, use the officialBUILD_SHARED_LIBSflag optionCMakeoptionUSE_SOLUTION_FOLDERSKDIS_Change_Log.htmfile
- Missing data member assignment in
GroupDestinationRecord::SetGroupBitField()via #56 - Incorrect data member assignment in
LinearObjectAppearance::SetBreachLocation()via #60 - Naming of the
LifeFormAppearance::Set/GetEntityCompliance()methods via #58 -Winconsistent-missing-overridewarnings removed via #65- C4244 "possible loss of data" warnings on Windows builds via #67, #68
- Spelling of
KDIS::UTILS::Matrix::inPlaceTranspose()method via #74 - Unified to
KDIS::UTILS(plural) namespace, to eliminate distinction without a difference via #74 - Naming of the
Gridded_Data_PDU::GetGridAxisDescriptors()method via #74
ApplyFilterBeforeDecodingPDUBodytoPDU_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'sRadioAppearancestructSupplyAppearancestructVariableParametertypeSeparationPartBeamStateEnumto theEnumEmitterfile based on theUID 318contents ofSISO-REF-010-2016-v22document- Additional enums (
SISO 10-2015) forModulationType,BeamAntennaPatternReferenceSystem,ModulationSystem,TDLType,SystemType,SystemMode, andSystemName DIS 7support added forSystemIdentifier,BeamAntennaPattern, andExpendableDescriptorSendOnlyoption toConnectionclass.Connectionwill not bind if this istrue- Support for
unique_ptrwhenC++11is supported - Implementation of getter and setter running lights to
SubSurfacePlatformAppearance - More unit tests
- Guard in case
_USE_MATH_DEFINESis already defined inKUtils.h CMAKE_INSTALL_PREFIXto define alternative install location (defaults to/usr/include/KDIS)- Non-Human Life Form Appearance
Simulation_Management_Headerexplicit constructor and copy constructor- Missing enums
16and17forEventTypeEnum(#89) - Additional Time Shared enums (#103)
- Incorrect conversion from bits to bytes in
Signal_PDU
EmitterBeamclass to useDIS_VERSIONdefinition when defining or declaring member variables and method. ForDIS 7, introduced theBeamStatusandJammingTechniqueclasses to replicate the v7 PDU structurePDU_Factory_Filtervirtual destructor to prevent undefined behaviorLifeFormAppearancestruct with additional fieldsAirPlatformAppearancestruct with additional fieldsGuidedMunitionAppearancestruct with additional fields- Improved
GetAsStringfunction forNonHumanLifeFormAppearance CulturalFeatureAppearanceincorrectly supports Engine Smoke bit. Modified the struct to eliminate bit-6 trackingConnectionfunctions to bevirtualallowing further derivation
EllipsoidRecord2::Decodeshould not have includedEllipsoidRecord1::Decode- Inaccuracy in
GeocentricToGeodeticcalculations - Unit test compilation issues on Linux
- Corrected some old tutorial links
- Ordering of orientation and
dtsigma fields inEllipsoidRecord2 - Whitespace and comment cleaning
- Incorrect PDU length calculation when calling
Comment_PDU::SetVariableDatum Action_Response_PDUconstructor not populating all fields and incorrect length calculation- Incorrect erasing loop in
Connection::RemoveSubscriberwhere duplicates were not always removed (#49) - Rounding error in
GeocentricToGeodetic - Incorrect PDU length comment (#50)
AttributeRecordSet::GetRecordLengthnot including all fields in size calculation (#51)- Divide by
0inDeadReckoningCalculator::computeRotationAxiswhen axis were0 - Bug in
Connection::GetNextPDUwhen a PDU was not decoded. Now the stream is cleared and flow continues - Bug in
OrientationError::SetElevationErrorndue to no value was assigned Minefield_Data_PDU::Encodenot correctly increment the detonation wires- Memory leak in
PDU_Factorywhen 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
EntityAppearancetypes (class to structs) - Memory leak in
Entity_State_PDUwhen callingSetDeadReckoningCalculator CryptoSystembyte orderingMarkXTranspondernegative altitude detection- Potential stream overrun in
DetonationPDU Layer2andLayer3incorrectly 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
googletestframework - Bool operator for convenience to
KRef_Ptr Connection::SetBlockingTimeOutallowing for setting a timeout for blocking mode- Copy constructor and assignment operator to
Entity_State_PDU - Getter and setter functions to
EntityKindthat support integers as well as enums for kind, domain and country simplifying the overall usage GetEnumSizeandGetEnumDescriptorexposing the internalEnumDescriptorarrays used forGetEnumAsStringandGetEnumFromStringallowing to iterate through an enumeration using these two functions- Implicit conversion support to
KRef_Ptr - Implementation of
LifeFormAppearance::SetEntityLifeformState PDU_FactoryLink16toLink 16example- Padding to
SilentAggregateSystem - Padding to
Mode5TransponderBasicData
- Format in
RelativeWorldCoordinates::GetAsString() - Improved
Connectionsocket error messages - Improved debugging information in header when a PDU has a buffer that is too small
Link 16example is built as a dynamic libraryLink16example code to support partial decoding
- Incorrect size was assigned to
LE_VECTOR_SIZE KRef_Ptrcompilation bug when using weak referencesAggregateMarking::Decodenot setting the last char to\0inm_sAggregateMarkingStringcasuing comparison issues- Bug decode and encode functions in
Entity_State_Update_PDUthat not handled padding correctly - Bug in
Appearance_PDUdecode function when no flags were used - Bug in
AttachedPartnot encoding and decoding the part type - Bug in
FixedDatum:GetDatumValuewas usingstrncpyto return data which causes issues when the data was not astring - Bug in
IFF_PDU::Decode - Bug in
Intercom ControlPDU andIntercomCommunicationParameterswhere some values were not initialized causing unexpected behaviours during encoding and deconding - Bug in
Underwater_Acoustic_PDU::Decodewas encoding by mistake - Bug in
SphereRecord2::Encode()was calling the wrong encoding function internally - Bug in
GED_BasicFixedWingAircraftandGED_BasicFixedWingAircraftthat used8 bitint instead of16 bitfor speed CMakeforKDIS_LIBthat was causing building a shared library instead of staticCMakeforMinGWwhen buildinglibanddllversion 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_PDUwas not including padding - Exception handling bug in
ConnectionandIsGroupOf_PDU - Incorrect PDU minimum size for
GridDataType0and1 - Incorrect PDU size in
Underwater_Acoustic_PDU - Incorrect PDU size in
IFF_ATC_NAVAIDS_FundamentalParameterData - Missing padding in
IO_Report_PDU nullreference crash when encodingIntercomCommunicationParameterswith no record- Protocol version not being set in
Intercom_Control_PDU SilentEntitySystemnot initializingm_ui16NumOfAppearanceRecordsto0casuing enconding and deconding failure- Size calculation in
SetFixedDatumandSetVariableDatum TSPI_PDU::m_ui8SSDLennot being initialised to0in some constructors- Uninitialized variables in
SetData_R_PDU VariableDatum::GetPDULengthreturning the incorrect value- Several fixes for
LE_FIRE_PDUandLE_Detonation_PDUfrom public submission (thanks G�ran)
IFF_PDUPDU which replacesIFF_ATC_NAVAIDS_L1_PDUPDUIFF_Layer3TransponderandIFF_Layer3InterrogatorclassesVariableParamatersclass. This replaces allArticulationParamatersclasses as the base classAttachedPartclassCryptoSystem::SetKeyIDandCryptoSystem::GetKeyID- Implementations of
LinearVelocity,EntityLocation,EntityOrientation,EntityAppearanceinEntity_State_Update_PDU - Implementation of
SetPDUStatusFireTypeandGetPDUStatusFireTypeinFire_PDU - Getter and setter for
ResponseCode,ResponsePowerReduction, andResponseRadarEnhancementinFundamentalOperationalData_RRB - Getter and setter for
NumBurstinPointObjectAppearance - Getter and setter for
AttackerEntityIDtoAttackerEntityID WorldCoordinates::Setto set all values in one callVector::Setto set all values in one callVector::LerpWorldCoordinates::LerpSystemDesignatorandSystemSpecificDatatoIFF_ATC_NAVAIDS_L1_PDUSetTCASVersiontoFundamentalOperationalData_MarkXTransponderandFundamentalOperationalData_MarkXInterrogator- Missing enums to
StationName - Missing enums to
WarfareType - Missing enums to
EncodingType Automatic Dependent Surveillancebroadcast toEntityCapabilitiesmake installtarget for Linux (thanks Bud Davis)
- Renamed
ArticulationParamaterstoArticulatedPart BurstDescriptorinLE FireandLE DetonationPDU withMunitionDescriptor. This class is the same except for theSetMunitionandGetMunitionfunctions which are now namedSetTypeandGetType- Renamed
ArticulationParameterstoArticulatedPart - Renamed
TypeVariantHighBitstoTypeVariantClassinArticulatedPart - Renamed
TypeVariantLowBitstoTypeVariantMetricinArticulatedPart FactoryDecoderusesKRef_Ptrclass- Renamed
EnumFundamentalOperationalData.htoEnumIFF.handEnumFundamentalOperationalData.cpptoEnumIFF.cpp - Renamed enum
WarheadType::GlassBladsWarheadtoWarheadType::GlassBeadsWarhead - Renamed enum
EncodingType::_16_bit_linear_PCMtoEncodingType::_16_bit_linear_PCM2sComplementBigEndian - From defintion
COMM_CHANNEL_TYPEtostatic KUINT16 COMM_CHANNEL_TYPE_SIZE - Cleaned namespaces
- Cleaned
GetAsStringfor many classes - Performance improvements in decoding. Parameter
ignoreHeaderadded toDecodefunction on PDU's, this will help performance by not decoding the Header twice each time a PDU is received.PDU_Factoryuses this technique - Improved comments
- Copyright 2013 KDIS to Copyright 2013 Karl Jones
UNLICENSEstatement 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 7standard. To support< DIS 7then use the Munition Descriptor classIFF_ATC_NAVAIDS_L2_PDUPDU. Now a data type class calledIFF_Layer2which is a property ofIFF_PDU- Removed
OtherCollisionfrom 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::DecodeandSet_Record_R_PDU::Encodedue to not enough padding - Error checking bug in
Resupply_Received_PDU::DecodeandService_Request_PDU::Decode - Bug in
Transmitter_PDU::Transmitter_PDUwhereAntennaPatternLengthwas using the wrong data type - Bug in
Data_Query_PDU::SetVariableDatumwhere the length had a wrong value - Bug in
MinePaintSchemedue to not using the correct variable forSetPaintSchemeandGetPaintScheme ArticulatedPartparameter type variant field had incorrect high and low bitsArticulatedPartParameter type value field should have beenKFLOAT32and notKUINT64- Bug in
TimeStamp::SetTimeStampType - Bug in
EmitterBeam::SetEmitterBeamFunctiondue to missing implementation - Bug in
EmitterBeam::ClearTrackedJammedTargetsdue to invalid length value - Bug with
EmissionSystemdata length being set to bytes and not words - Enum
CollisionTypehad inelastic and elastic values mixed up - Bug compiling
Link 16example when using thedllversion ofKDIS Data_PDU::RequestIDwas not set to0by default causing junk values- Bug in
Directed_Energy_Fire_PDUencode and decode functions were not including padding - Bug in
FactoryDecoderwhen 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
GuidedMunitionsAppearancewhen using thedllversion ofKDIS - Bug in
GetNextPDUfunction when an error occurs, the next call was using corrupted data - Incorrect function name in
EllipsoidRecord2. FunctionGetSigmashould have beenGetDOverDt - Invalid symbolic names
- Compilation bug when using Visual Studio 2010 Express due to
WIN32was not defined - Comment you have to cmake . cmake . before building (thanks Bud Davis)
- Missing license header in some files
- License from
LGPLtoFreeBSD - Renamed
COLLISION_THRSH_DFLTtoCOLLISION_THRSHandEE_EL_THRSH_DFLTtoEE_EL_THRSHinKSynmbolicNames.h - Default
DISversion isDIS 7when usingCMake - From
ProtocolVersion IEEE_1278_1_200xtoIEEE_1278_1_2012inEnumHeader.h
KDIS::PDU::Bundleclass to support sending PDU BundlesExample_Bundleto show how to send PDU Bundles- Support to
Connectionclass to handle PDU Bundles viaGetNextPDUfunction. - Operators
==and!=toKDataStream Send(const KDataStream& stream)function inConnectionclass- Comment in
SetProtocolVersionfunction to clear some common questions about howKDISsets theProtocolVersion
Example_PDUFactoryto support PDU BundlesCopyFromBufferparameterSerialDataisconst
- Bug in
CulturalFeatureAppearance::SetEntityExteriorLightswhere an invalid value was being assigned - Bug in
Transmitter_PDU::Encodefunction
CulturalandSensor/Emitterappearances
- 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_PDUandData_Query_R_PDUtime interval field to use theTimeStampclass instead of aKUINT32
- Removed General and Specific Appearance classes from
EntityAppearance
-
Bug in
EnumDetonationResult -
Bug in
TimeStamp::CalculateTimeStampwhere theLinuxversion was not usingnano secs
Link16_Signal_PDUPDULink16_Transmitter_PDUPDUGetEnumFromString<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
CMakefiles to generate solution directories to better organize projects. Mainly a Visual Studio Pro (not Visual Studio Express) feature. Controlled by theCMakeflagUSE_SOLUTION_FOLDERS- Renamed enum descriptors in
EnumInformationOperations.cppto align with naming convention used in other enum files
- Bug in
Data_Query_PDUandData_Query_R_PDUwhere variable and fixed Datum's were being used instead of just ID's - Improvements to
DeadReckoningCalculator::GenerateSmoothingPoints - Bug in
CMakeforDIS 7when usingKDISas aDLLsince it was includingEnumInformationOperations.cpp - Bug in Collision PDU where the variable
m_f32Masswas 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
0by default - Bug in
EncodingSchemedue to incorrect size - Invalid enums in
EmitterName
Directed_Energy_Fire_PDUPDUEntity_Damage_Status_PDUPDUEntityMarkingsupport forstringinstead ofchar[]Vector::GetMagnitude,Vector::GetDistance, andWorldCoordinates::GetDistancefunctions- Missing PDUs in
PDU_Factory
- Function
sendinConnectionreturns the number of bytes sent instead ofvoid
LGPLlicence header from examples. All examples are unlicenced
APAclasspublicunion should have beenprivate- Memory leak in
Connectionclass where thePDU_Factorywas not being deleted
Attribute_PDUPDUFactoryDecoderclass to add custom decoders. Current data types that now support this feature areVariableDatum,FixedDatum,EnvironmentRecord, andStandardVariable- Further enumerations for
DatumIDfield, taken fromSISO-REF-010-2010 RC3 Header6andHeader7, based on theDIS_VERSION, alias ofHeaderHeader7features all PDU Status fields and codes fromDIS 7standardConnectionAddressFilterclass, inNETWORKnamespace, allowing for filtering by IP addressConnectionAddressFilterexampleFactoryDecodefunction toEnvironmentRecord. All derived classes can now be decoded using this functionClearVariableDatumListtoAggregate_State_PDUCMakeoptionBUILD_EXAMPLESastyleto 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
KDataStreamencode and decode functions - Renamed LE directory to Live_Entity for better naming style with other PDU family directories
Environment_Process_PDUdecode function to use the newFactoryDecodefunction fromEnvironmentRecord- From
#if DIS_VERSION >= 7to#if DIS_VERSION > 6for compiling withMinGW
PDUStatusTEILVC
- Bug in
Transmitter_PDU::GetAsStringwhere the length of Modulation Param was not being output correctly - Bug in
PDU_Factorydecode 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::GetNextPDUtheOnDataReceivedevent was called even when no data is received - Corrected
DetonationTypeenum values - Compilation warning with some compilers due to files not ending with a newline
SendPDUfunction toConnectionclass
- Example
Env Proc PDUto show the usage ofSendPDUfunction ConnectionSubscriberto allow for making changes on pdu transmit
IO_Action_PDUPDU- Namespace called
NETWORKwhere is available the newConnectionclass, a cross platformDIScentric socket - Example
Example_PduFactory2to show the usagew of the newConnectionclass Decodefunction toPDU_Factory. It is now simple to add support for custom PDU classes by overriding the function in custom factory classes- Missing
GetEnumAsStringcalls for various enums KDataStream::GetBufferPtrfunction to improve performance over usingCopyIntoBufferfunction- Missing function
GetEnumAsStringDetailAmplitude
- Improved clarity and appearance of various
GetAsStringfunctions - Examples to use the new
KDataStream::GetBufferPtrfunction KExceptionto inherit fromstd::exceptionallowing for catchingKDISexceptions with standard exceptions- Examples to use
KExceptionas a standard excpetion - Renamed all example projects to start with
Example_except for thedllandlibexamples
KSockets- Redundant code from
KDataStream::CopyFromBuffer - Unused variables in
VaiableDatum.cpp
- Bug in
EntityType::ReadFromTokenisedStringwhere the string being passed was unexpectedly changed by thestrtokfunction - Bug in
Point_Object_State_PDUwhere the final padding field had not been included - Bug in
GetEnumAsStringEmitterNamewhere some values were not sorted correctly - Bug when using
bitsetinMS Visual Studio 2010
SetSuppliesfunction toResupply_Received_PDU
- Code refactor. Removed unnecessary
using namespacestatements and replaced withusingstatements 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_SIZEto class scope ENTITY_DESTINATION_RECORD,GROUP_DESTINATION_RECORD,GROUP_ASSIGNMENT_RECORDfrom a macro tostatic const KUINT16- Rename
ENTITY_DESTINATION_RECORD,GROUP_DESTINATION_RECORD, andGROUP_ASSIGNMENT_RECORDto[NAME]_SIZE - Moved
GEDItem,GEDList,GridAxisDescriptor,GridDataPtr,EnvironmentRecordPtr, andEnvironmentRecordLstfromPDUnamespace toDATA_TYPE
- Minor typos
- All
DIS 6(IEEE 1278.1a) PDUs TSPI_PDUPDUAppearance_PDUPDUArticulated_Parts_PDUPDULE_Fire_PDUPDULE_Detonation_PDUPDU- Missing PDUs in
PDU_Factory
GetAsStringfunctions 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_PDUdecode function - Bug in
DecimalToDMSwhen passing negative values
Minefield_Query_PDUPDUMinefield_Data_PDUPDUMinefield_Response_NACK_PDUPDU- Missing PDUs in
PDU_Factory - Clear functions to some of the variable fields
- Postfix
dfor debuglibanddllexample binaries. The postfix value can be changed viaCMakevariableCMAKE_DEBUG_POSTFIX - Entity state pdu throw exception if
InitDeadReckoningis not called beforeApplyDeadReckoning - All
GetAsString<Enum Name>functions ofEnumMinefieldto use the optimizedGetAsStringfunction instead of the old linear search algorithm
- Bug in
VariableDatumdecode where the datum value vector was not being cleared on each decode Minefield_Headerprotocol family and version were not being set- Bug in
CreateTokenisedStringwhere 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
PDUTypeenum. This affected linear, object and point state PDU from theSynthetic_Environmentfamily - Bug in
LinearObjectAppearanceandArealObjectAppearanceencode and decode functions where 1 extra octet was being encoded/decoded - Typo from
SIMULATION_IDENTIFER_SIZEtoSIMULATION_IDENTIFIER_SIZE - Bug in
SpecificAppearance::GetAsStringwas usingKindvalue instead ofDomain(thanks David) - Bug in minefield state pdu where the PDU type was incorrect
- Bug in
RecordSet::SetRecordValueswhere the length was incorrect
- PDU length in
Minefield_State_PDU - Bug in
MinefieldAppearancewhere the struct and union were in wrong order
Areal_Object_State_PDUPDUMinefield_State_PDUPDU- 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_Factoryfilter examplesReadFromTokenisedStringandCreateTokenisedStringtoEntityType. 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
publicattribute and type changed tostatic const KUINT32 - Renamed
GENERAL_APPEARANCE__SIZEtoGENERAL_APPEARANCE_SIZE - All entity specific appearance classes to invert/negate the Entity State Active value. In this case the
DISstandard actually states that0indicates the statetrueand1the 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
EnvironmentRecordswhere the length value should not include the length of theEnvironmentRecordheader CMakebug that caused exampleEnvironmental_Process_PDUto only be included inDIS 7; should have beenDI 6andDIS 7- Mismatch between entity location and world location in
Detonation_PDUconstructor - Typo
m_EntiyCapabilitiesinEntity_State_PDU - Public accessibility on Param Type Variant union in
ArticulationParameters
Linear_Object_State_PDUPDU
- PDU factory example avoid closing on PDU exceptions. It now prints the error and continues
- Bug in
AggregateMarkingencode and decode functions 1 octet offset causing problems with Aggregate State PDU's - Bug in
EncodingSchemewhen compiling to Linux. This change was reported in1.13.0but not included
Point_Object_State_PDUPDUEulerToHeadingPitchRollconversion toKConversions.hSetTimeStampAutoCalculate,IsTimeStampAutoCalculate, andCalculateTimeStamptoTimeStamp. Attempts to automatically calculate the timestamp when the encode function is called
- Renamed variables of
HeadingPitchRollToEulerfromEulX,EulY, andEulZtoPsi,Theta, andPhi Entity_State_PDUandEnvironmental_Process_PDUexamples to use the new automatic timestamp calculation
- Bug in
HeadingPitchRollToEulerconversion - Typo from
Entity_Infomation_InteractiontoEntity_Information_Interaction - Bug in
EncodingSchemewhen compiling to Linux
Gridded_Data_PDUnew constructor
EntityIdentifierandAggregateIdentifierderive fromSimulationIdentifierVariableDatumto passconst KStringreferences (thanks Anthony)SimulationIdentifierfunctionGetAsStringwrite Object instead of Entity
- Bug in
Gridded_Data_PDUwhereGRIDDED_DATA_PDU_SIZEwas incorrectly set to32instead of64 - Bug where all protected PDU status member variables belonging to the
Headerclass to becomepublic. Caused by using anonymous unions - Compilation error Compiler Error C2635 when casting from
Headerto a derived class. Caused byvirtualinheritance
Gridded_Data_PDUPDU- Missing PDUs in
PDU_Factory
- All
GetEnumAsStringfunctions use a single optimized search function - Renamed
Sendexample toEntity_State_PDU
- Bugs in some
GetEnumAsStringfunctions - Bug in
Intercom_Control_PDU::GetAsStringandIntercom_Control_PDU::Encodeiterators - Incorrect
nulltermination text inEntityMarking(thanks Anthony)
- Macro to
PDUStatusTEILVCto only include ifDIS 7
- Obsolete files (
BoundSphere.handBoundSphere.cpp) inDataTypesdirectory
CMakenot includesEnvironmental_Process_PDUwhenDIS 5is defined- Bug in
Radio_Communications_HeaderwhereDIS 7macros are not defined in the correct place - Bug in
LineRecord2andPointRecord2where the comparison operator would cause an infinite loop
Environmental_Process_PDUPDUEnvironmental_Process_PDUexampleDecimalToDMSandDMSTODecimaltoKConversions.h- Initial support for
DISversion7.DISversion can be specified viaCMakeor pre-processor definitions PDUStatusinHeader(DIS 7).PDUStatusincludes getters and setters forPDUStatusTransferredEntityIndicatorandPDUStatusLVCIndicatortoEntity_State_PDU,Electromagnetic_Emission_PDU,Designator_PDU,Radio_Communications_Header,IFF_ATC_NAVAIDS_PDU,Electromagnetic_Emission_PDU, andEntity_State_Update_PDU. Getter and setters forPDUStatusFireTypetoFire_PDU. Getter and setter forPDUStatusDetonationTypetoDetonation_PDU. Getter and setter forPDUStatusAttachedIndicatortoTransmitter_PDU,Signal_PDU,Receiver_PDU,Intercom_System_PDU, andIntercom_Control_PDUSetWritePositionandGetWritePositionfunctions toKDataStreamallowing data "peaking"- Missing PDUs in
PDU_Factory KExceptionnew constructor allowing for more details to be added
Sendexample uses a while loop to continuously send the PDU. Some applications do not always pick up the first PDU
- Some of the
Vectoroperators 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
Loggerplayback is not started until the log is fully loaded
Dead Reckoningimplementation in classDeadReckoningCalculator. This class calculates dead reckoning transformations for all dead reckoning algorithms. This feature is currently inBETAuntil all algorithms are verified to work correctly<operator toEntityType,AggregateType,AggregateIdentifier, andClockTime*,+,+=,-,-=, and[]operators toEulerAngles,WorldCoordinates, andVectorApplyDeadReckoningfunction 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 virtualto 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_DESCRIPTORSin the pre-processor definitions or inKDefines.hfile. 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
MediaWikiavailable at https://sourceforge.net/p/kdis/wiki/Main_Page
- Moved remaining enumerations from
KDISEnums.htoEnumEntityInfoInteraction.h - Replaced all uses of
strnsetwithmemset - Default constructor initialize all data types to zero (if not already)
Sendexample shows how to correctly use the timestamp
- Self-explanatory comments to several PDUs
vc2008.zipfile
- Bug in
FixedDatumwhereKDIS_EXPORTis defined inside the template functions causing problem if compiling as a DLL shared library
IsGroupOf_PDUPDUIsPartOf_PDUPDUMAX_PDU_SIZEof8192from1278.1-200XstandardKRef_Ptrclass. This is an implementation of referenced pointer, designed to prevent memory leaks where memory needs to be dynamically allocatedHeadingPitchRollToEulertoKConversions.h
- Country Type in
EntityTypeconstructor fromKUINT8toKUINT16
using namespace stddirectives from header files to preventstdattributes being exposed in the global namespace causing potential clashes
- Some catch blocks catch all exception types rather than just
KException
Linuxsupport (thanks Anthony)- Reference from
UINT16toKUINT16 - From
sizeof DataTypetosizeof(DataType) #includeuse forward slash (/) instead of back slash (\)#includematch the case of the file name#includeadded./to all relative paths
- Additonal
IntercomCommunicationsParameterincludes fromCMakefile - Reference to
winsock2.hinKEncoderDecoders
DIS_Logger_Record.cppthrow qualifier missing onwriteToFilefunction- Bug in
SystemIdentifierwhere the union and struct were in the wrong order
- Bug in
SwapBytesthat caused the endian to not be correctly swapped
Record_R_PDUPDURecord_Query_R_PDUPDUSet_Record_R_PDUPDU
RecordSpecificationdata type. Record Sets are now placed directly into a PDU. When a change is made to aRecordSpecificationparameter it was not always possible to update the PDU size. RemovingRecordSpecificationfixes this problem. This only effectsTransfer_Control_PDU
- Bug in
FixedDatumthat caused template functions to give linker errors due implementation in source file instead of header file
Data_Query_R_PDUPDUSet_Data_R_PDUPDUData_R_PDUPDUEvent_Report_R_PDUPDUSet_Data_PDUnew constructorData_Query_PDUnew constructorSet_Data_PDUnew constructorEvent_Report_PDUnew constructorPDU_Factorysupport for all PDUs- Comments to existing PDU's to further explain their usage
Data_PDUconstructor from(KUINT32 RequestID)to(const EntityIdentifier, OriginatingEntityID), and(const EntityIdentifier, ReceivingEntityID, KUINT32 RequestID)Action_Request_PDUchanged constructor from(KUINT32 RequestID, KUINT32 ActionID)to(const EntityIdentifier, OriginatingEntityID),(const EntityIdentifier, ReceivingEntityID), and(KUINT32 RequestID, KUINT32 ActionID)
- Duplicate includes in
CMakefile - Missing
Intercom_Control_PDUentry
Transfer_Control_Request_PDUPDUCreate_Entity_R_PDUPDURemove_Entity_R_PDUPDUStart_Resume_R_PDUPDUStop_Freeze_R_PDUPDUAcknowledge_R_PDUPDUAction_Request_R_PDUPDUAction_Response_R_PDUPDUComment_R_PDUPDUIFF_ATC_NAVAIDS_L2_PDUPDU missing fundamental parts- Added additional enumeration values taken from
SISO-REF-010 Changes Start_Resume_PDUnew constructorsStop_Freeze_R_PDUnew constructorsElectromagnetic_Emission_PDUtwo new constructorsIFF_ATC_NAVAIDS_L1_PDUnew 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 DatumIDenumerations are now appended withRecordinstead ofDatum- All PDU automatically set the Protocol Version
KDIS_NEWORK_ENDIANfromKDefines.h- Removed line in
Example_Sendthat sets the Protocol Family as this is now done automatically in the constructor
- Bug in
GetDatafunction ofSignal_PDU - Bug in
Decodefunction ofCreate_Entity_PDU - Bug in
CMakeLists.txtwhere fileEntity_State_Update_PDU.hwas not being included - Bug in
Simulation_Management_Headerconstructor where protocol family is not set - Bug in
SEESconstructor where protocol family is not set
- Bug in
GetDatafunction ofSignal_PDU
- Interface in
VariableDatumfor setting an arbitrary binary stream
VariableDatumencoding and decodingVariableDatumbits/bytes mix up- Typos in comments
- Because of needless
Microsoft Wordgarbage, the changelog has been rewritten
Comment_PDUconstructor where the PDU type and length were not initializedDESIGNATOR_PDU_SIZEwas incorrect, should be88, due to a typo in theIEEEstandardEncodingSchemebits were incorrect on Big Endian machines
- Support for
DISversion5inPDU_Factory
FuseTypeenumeration has previously incorrect valuesCMakebugs when building withDISversion5
Intercom_Control_PDUPDUAggregate_State_PDUPDUKDIS_LIB(static library) andKDIS_DLL(shared library) examplesCMakewhich is a cross-platform, open-source build system. TheCMakefile has certain options that allow to specify the version ofDISto use (5or6) and if to link against astaticorsharedlibrary. Any future examples will require the use ofCMake
KDataStreamonly acceptsKUINT16rather thanKUINT32, which could have resulted in various buffer overrun problemsKDIS_EXPORTmacro now searches the project for preproccesor deflagrate. Use eitherEXPORT_KDISorIMPORT_KDIS. E.g:/D "EXPORT_KDIS"
Intercom_Signal_PDUPDUDIS_Logger_RecordandDIS_Logger_Playback, which logs PDUs to a text file so that they can be replayed, have been added toExtrasDIS_Logger_RecordandDIS_Logger_Playbackexamples. Included captured data is generated byMAK VR-Forces 3.10GetAsStringandReadFromStringfunctions toKDataStream.GetAsStringconverts the data stream into a hex string, whereasReadFromStringconverts 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_PDUfromPDU_Factory, which should not have been accessible
- Bugs in
Signal_PDUwhereSetDatadid not set theDataSizeandGetDatawas returning the padding that was added to the data - Bug in
Entity_State_PDUwhereEntityAppearancewas being encoded incorrectly - Typo in
SurfacePlatformAppearance::GetAsStringfrom Space Platform Appearance instead of Surface Platform Appearance
Collision_Elastic_PDUPDUEntity_State_Update_PDUPDUFF_ATC_NAVAIDS_PDUPDU- Class
PDU_Factorythat converts a data stream into the correct PDU and returns anauto_ptrto the new PDU - Example to show how to use
PDU_Factory - Namespace
UTILS KConversions.h, which includesRadToDeg,DegToRad,MetersToFeet,FeetToMeters, andGeodeticToGeocentric, has been added toUTILSDISversion a PDU belongs to in the header comments
- All
GetFunctionsthat 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_PDUtoElectromagnetic_Emission_PDU - Licence from
GPLtoLGPL - Changelog in HTML format
IsMachineBigEndianuse static variables providing a very small performance boost
#ifdef _win32for primitive data types inKDefines.hthat was prevented any other OS from working
- Bug in
Comment_PDUwhere the PDU length was incorrect while reading variable datum lengths since the returned variable datum lengths value was in bits
vc9send example
AntennaLocationnew constructorBurstDescriptornew constructorDeadReckoningParameternew constructorEmissionSystemnew constructorEmitterBeamnew constructorEncodingScheme2 new constructorsGeneralAppearancenew constructorTimeStampnew constructorEntity_State_PDUnew constructorCollision_PDUnew constructorRepair_Complete_PDUnew constructorRepair_Response_PDUnew constructorRadio_Communications_Headernew constructorReceiver_PDUnew constructorSignal_PDUnew constructorTransmitter_PDUnew constructorAcknowledge_PDUnew constructors to auto generate a response depending on the PDU
BurstDescriptorfunctionSetMunitionpass by referenceDeadReckoningParameterfunctionsetDeadReckoningAlgorithmpass by value- Renamed
m_ui16Firetom_ui16Fuse
EmitterBeamremoved typing error inSet6BeamParamIndexandGet6BeamParamIndex
- Bug in
vc9example that checked forData_PDUinstead ofEntity_State_PDU
Signal_PDUdata length is number of bits instead of octets