BACnet Server API Revision History (BACnet 2016 Version 1 Revision 19)

Version 5.0.17 - 24 July 2018

  • The cache module does not always resend a subscribeCOV service to a BACnet device when using COV notifications to update values. The points will fail to update values when this occurs.
  • Setting the cache parameters from the helper function SetAppIntSetting() does not work for some settings.
  • Added a new helper function in the BACnet core to determine if an index is dirty.
  • Added a new configuration parameter in the CBACnetDriver class call SetPollBeforeSubscribing() to allow an application to turn on or off polling before a subscribeCOV notification is sent.
  • Unable to write internally to readOnly properties.
  • Revised the name of some internal properties in the cache module.
  • Revised the device discovery timeout to prevent service requests from timing out before a whoIs request has been sent.
  • If the cache module is using COV notifications then it should remove the subscriptions before it stops. The CBACnetDriver::Stop() method has 2 additional parameters which can be used to unsubscribe from the devices before shutdown. There is a new function called ShutdownInProgress() which can be called to detirmine if all the subscriptions have been sent.
  • When there is a subscribeCOV error within the cache module it will automatically revert to polling with readProperty or readPropertyMultiple. After the resubscription time has expired attempt to resubscribe to the point again. After 3 attempts permanently revert to polling.
  • Added Setter and getter functions for UseCovProcessIdentifier to the CCacheParameters class.
  • Unable to run the JAVA sample applications on Linux.
  • Added -lstdc++ to the makefile for the linux build.
  • For internal objects decouple the priority array from the presentValue.
  • The OnWriteProperty() callback is not being fired from the API.
  • Restart the MSTP port if the COM port fails to send or receive any BYTES after a period of 30 seconds.
  • Added an uptime parameter to the MSTP driver stats.
  • Writing to the presentValue of an analogOutput or analogValue does not return an error when the minPresValue and maxPresentValue properties are supported.
  • Unable to write to the reliability property when outOfService is true.

Version 5.0.16 - 11 June 2018

  • If the priorityArray and reliablity properties are set to NOT_SUPPORTED for commandable objects (eg AnalogOutput) then a BACnet client is still able to write to the object and internal writes no longer work as expected.
  • When operating as a BBMD the stack will rebroadcast an invalid packet if it receives a Forwarded NPDU. This bug was introduced in release 5.0.15 after changes were made to allocate memory statically.
  • Updated the cache module to send multiple parallel requests to a device. For example if a device only supports readProperty then allow up maxTsmQty parallel requests per device to be sent.
  • Added a new helper function SetMaxTsmQuantity() to configure the property for each device. There is a global setting for maxTsmQty and this setting is used as the default value for a device which can then be set at the device level.
  • The ServiceAck pdu decoding fails if the response type is a BACnet Error.
  • The BACnetCharacterset transmitted datatype is not set to zero in some methods resulting in an incorrect encoding/decoding of the character set.
  • The EditPorts dialog box is not functioning correctly, the adapter name and subnet masks are blank.
  • Fixed a memory leak in the CSharp version of the API which can occur when a string is returned from the API.
  • Added an additional parameter called transmittedType to the SetString() of the CBACnetCharacterString and CBACnetAny classes which will set the character string used when sending bacnet services.
  • The helper function IsNullPriorityArray() returns false when it should be true.
  • Increased the setting for BUF_GROW_BY_SIZE from 64 to 2056 to improve the performance of the API counters.

Version 5.0.15 - 7 May 2018

  • Refactored the network and datalink layers to cache the stack buffers rather than allocate memory dynamically.
  • Changed the ARM build to use the memory pool to manage the memory and limit the calls to malloc and free of the operating system.
  • Refactored the memory allocation calls to use the macros for mem_malloc and mem_free rather than direct calls to malloc and free. The macros are used for unit testing purposes.
  • Incorrect Encoding/Decoding of a BACnetError PDU. This problem surfaced in revision
  • Changed the name for notificationParameterBufferReady to notificationParameterBufferReadyLegacy in the JSON parser.
  • Changed the name for notificationParameterBufferReadyNew to notificationParameterBufferReady in the JSON parser.
  • Added new helper functions to the CBACnetObjectContainer class to Get and Set any property. The new helpers are GetI4Value, SetI4Value, GetBoolValue, SetBoolValue, GetR4Value, SetR4Value, GetStringValue and SetStringValue.
  • Added new helper functions to the CBACnetAny class to Get and Set JSON strings. The new helpers are GetJson() and SetJson()
  • Added new helper functions to the CBACnetDriver class to Serialize and Deserialize to a file in JSON format. The new helpers are JsonSerialize() and JsonDeserialize()

Version 5.0.14 - 13 April 2018

  • The outOfService getters and setters are missing on some of the object classes, for example AnalogOutput, AnalogValue, BinaryOutput and BinaryValue.
  • Implemented the minPresValue and maxPresValue properties in the AnalogValue object.
  • OnWritePropertyComplete callback always returns error BACnetErrorCodeOther.

Version 5.0.13 - 4 April 2018

  • The more items flags is not being set in the readRange response when the range type is sequence.
  • The readRange service returns an empty data set when the range type is sequence and the totalRecordCount is greater than the number of records.
  • Revised the watchdog handler for all of the datalink layers.
  • Added restart logic to the datalink layers. If there is an unrecoverable coms error then the link layer will close it's associated port and reopen it.
  • Changed the True state in the ASN data types from 0xFF to 1.
  • Rolled back changes made to the UTF8 conversions for csharp made in build 213, those changes were not correctly converting UTF8.

Version 5.0.12 - 26 March 2018

  • Added an index to the cache point queues to indicate the time in ticks when the request was made. The index used to process the oldest entry in the queue.
  • Added a new define statements to set the maximum protocol revision and the default protocol revision. The maximum is 19 and the default is 18. If 19 is selected then Network Port objects will be created.
  • Added new static functions the BACnetApiDriver class for setting/getting internal parameters within the API.
  • Updated the unit tests.
  • Revised the watch logic for MSTP.
  • Added additional comments and unit tests to the bacnet/ip data link layer.
  • Changed enum name BACnetExtendedNotificationChoiceReference to BACnetExtendedNotificationChoicePropertyValue

Version 5.0.11 - 9 March 2018

  • The API crashes when handling a whoHas request if more than 1 virtual device exists and multiple IHave messages are sent.
  • Virtual device remain in the downloadInProgress state if the reinitializeDevice service has been deactivated before the driver starts.
  • Resolved memory leak in the JSON parser.
  • The PD parser has a memory leak when decoding some array types.
  • Implemented the network port object.
  • Added SubscribeCOVMultiple to csharp samples.
  • Updated COV reporting sample for csharp.
  • COV Multiple callback handler is not being fired on an event.
  • Memory leak in the CBACnetDateTime() class when calling GetDate() and GetTime().
  • Object name and description is not reloaded into the objects from the database file.
  • Revised the JSON parser.

Version 5.0.10 - 4 December 2017

  • Memory leak in the CSharp version when a string is returned from the API.
  • When activing as a BBMD Server the stack does not forward local broadcast messages to the foreign device, instead it broadcasts them back onto it's own network.
  • Revised the JSON ASN parser to include bacnet services.
  • The disableRouter option does not disable all routed messages as expected.
  • The API does not handle whoIsRouter to network messages correctly.
  • The router does not forward broadcst messages when they are sent to a specified network.
  • Introduced profile names the allow an application to configure object properties at run time.
  • Reading the service indications stats from the API causes an unhandled exception error.
  • BACnetScale property is incorrectly decoded as unsigned integer instead of signed integer.
  • Replaced stricmp with strcmp in the file security.c
  • Incorrect encoding/decoding of eventParameter type none.

Version 5.0.9 - 22 August 2017

  • Searching for an unknown network can fail due to an unitialized variable, as a result executing a service will generate a timeout.
  • Remove all instances of memcmp() for comparing of structures.
  • Implemented GET, POST and PUT JSON handlers.
  • Updated the registration handler for Linux.

Version 5.0.8 - 26 July 2017

  • The atomicReadFile service returns an error when an empty file is being read using the recordAccess option.
  • The validation for an empty error string in CBACnetDriver::Start() is incorrect.

Version 5.0.7 - 11 July 2017

  • Changed eventDetectionEnable property type to optional intrinsic.
  • The Action property of the Loop object is not mapped to an enumerated data type
  • Introduced Getter functions to the LightingCommand object to indicate if the optional fields are present.

Version 5.0.6 - 23 May 2017

  • Reinstated Iam unicast to a whoIs request. BTL testing was successful with Unicast messages following the modified tests released by the BTL.
  • Revised the operation of the eventMessageTexts and eventMessageTextsConfig properties. The eventMessage text property remains empty until an event occurs, it will then update with the message sent when the event is generated. The eventMessageTextsConfig property contains the message to send. A callback function can be implemented to replace placeholders with the text message.
  • Disabled the TimeSyncronization handler for the Windows build. A time sync message from bacnet will not change the clock on a windows PC.

Version 5.0.5 - 1 May 2017

  • Revised the maxAPDUlength calculation for 1476 to ensure that the maximum packet length fits within the 1500 limit of an ethernet frame.
  • The maxAPDUlenght of the API is not used when a device responds with a higher maxAPDUlength than that of the API.
  • The API is incorrectly sending an Abort - Buffer overflow packet when the response is too large for 1 segment.
  • Possible crash in the CBACnetAnyParser class when the parse method is called.
  • When the protocol revision is 14 or less the object and service supported bitstrings lengths must be 51 and 40.
  • The BBMD is forwarding NPDU messages as a broadcast instead of unicast.
  • The cov_notification callback handler is called twice when an object has been written to from a BACnet service.
  • Priority array 6 is always set for BinaryOutput and BinaryValue objects when a write request is made. It should be ignored when the minimum on/off times are zero.
  • Added support for alarmMessageTextConfig by implementing a callback function.
  • Encode/Decode error in the BACnetFaultParameter fault-state type of the ASN parser.
  • Revised the ASN string parser to format unsigned strings using %u instead of %d
  • Added a #define tag called ASN1VER401 to allow the asn1-string_parse to decode the time value with a : in the string. This matches the formatting in datatype_string_util.
  • Elements within the parameters of the Exended EventParameter are always set to null.
  • Added code to the BACnetLightingCommand setter functions to set the corresponding flags property. The flags indicates if the property is optional or not.
  • When the stack responds to a whoIs request it should respond with a OriginalBroadcastNPDU if the packet is unicast.
  • Reinstated Iam broadcast to a whoIs request to satisfy BTL testing.
  • The stack is incorrect encoding/decoding BACnetEventParameter type none.

Version 5.0.4 - 9 March 2017

  • The BTL test 14.3.5 fails. When operating as a BBMD the device should validate the BDT contents to check that an entry for the local device exists.
  • Revised the I-Have response to a who-Has request to use a global broadcast instead of a unicast message.
  • Decoding of the BACnetLightingCommand fails when some properties are optional.

Version 5.0.3 - 18 February 2017

  • BDT.txt table is not loading at startup.
  • In the CSequenceOfBACnetPropertyValue::Add function, the ArrayIndex parameter is not being set.
  • The ASN1 parser does not encode/decode correctly for eventParameters type None.
  • The ASN1 parser does not encode/decode correctly for faultParameters type faultStatusFlags.
  • The ASN1 parser does not encode/decode correctly for faultParameters type faultListed.
  • Possible crash when copying from the SequenceOfBACnetReadAccessPropertyValue data type.
  • ASN parser not working for the Notification type Command Failure.
  • Unconfirmed event notifications are not received.
  • Added a JSON to ASN1 parser
  • Unconfirmed event notifications are not sent.
  • Added linux help files.
  • Revised the PriorityValue helper class.
  • Reading an array element of an Event_Time_Stamp property returns data type Constructed.

Version 5.0.2 - 9 January 2017

  • When the choice is BACnetReadAccessReadResultTypePropertyAccessError the deep copy of the CBACnetAny class will set the values error code and error class to zero.
  • Removed lua source files from release version
  • Updated Linux customer release.
  • Updated the visual studio 2015 build.
  • Updated windows tagged release.

Version 5.0.1 - 6 January 2017

  • Initial Release