BACnet Server API Revision History (BACnet 2020 Version 1 Revision 25)

Version 6.0.105 - 14 March 2025

Version 6.0.104 - 5 February 2025

Version 6.0.103 - 20 December 2024

Version 6.0.101 - 4 November 2024

Version 6.0.100 - 10 October 2024

Version 6.0.99 - 4 September 2024

Version 6.0.98 - 9 August 2024

Version 6.0.97 - 8 August 2024

Version 6.0.96 - 6 August 2024

Version 6.0.95 - 2 August 2024

Version 6.0.94 - 30 July 2024

Version 6.0.93 - 14 July 2024

Version 6.0.92 - 18 June 2024

Version 6.0.91 - 17 June 2024

Version 6.0.90 - 26 April 2024

Version 6.0.89 - 25 March 2024

Version 6.0.88 - 4 February 2024

Version 6.0.87 - 12 January 2024

Version 6.0.86 - 5 December 2023

Version 6.0.85 - 19 November 2023

Version 6.0.84 - 11 November 2023

Version 6.0.83 - 3 October 2023

Version 6.0.82 - 26 September 2023

Version 6.0.81 - 13 September 2023

Version 6.0.80 - 23 August 2023

Version 6.0.79 - 21 August 2023

Version 6.0.78 - 10 July 2023

Version 6.0.77 - 28 June 2023

Version 6.0.76 - 27 June 2023

Version 6.0.75 - 26 June 2023

Version 6.0.74 - 21 June 2023

Version 6.0.73 - 20 June 2023

Version 6.0.72 - 15 June 2023

Version 6.0.71 - 13 June 2023

Version 6.0.70 - 29 May 2023

Version 6.0.69 - 11 May 2023

Version 6.0.68 - 08 May 2023

Version 6.0.67 - 05 May 2023

Version 6.0.66 - 08 April 2023

Version 6.0.65 - 07 April 2023

Version 6.0.64 - 24 March 2023

Version 6.0.63 - 24 March 2023

Version 6.0.62 - 22 March 2023

Version 6.0.61 - 22 February 2023

Version 6.0.60 - 14 January 2023

Version 6.0.59 - 14 December 2022

Version 6.0.58 - 22 September 2022

Version 6.0.57 - 8 September 2022

Version 6.0.56 - 28 July 2022

Version 6.0.55 - 8 July 2022

Version 6.0.54 - 5 July 2022

Version 6.0.53 - 4 July 2022

Version 6.0.52 - 30 June 2022

Version 6.0.51 - 20 June 2022

Version 6.0.50 - 13 June 2022

Version 6.0.49 - 10 June 2022

Version 6.0.48 - 26 May 2022

Version 6.0.47 - 20 May 2022

Version 6.0.46 - 17 May 2022

Version 6.0.45 - 1 April 2022

Version 6.0.44 - 14 January 2022

Version 6.0.43 - 10 January 2021

Version 6.0.42 - 22 October 2021

Version 6.0.41 - 15 October 2021

Version 6.0.40 - 11 October 2021

Version 6.0.39 - 21 September 2021

Version 6.0.38 - 20 September 2021

Version 6.0.37 - 3 September 2021

Version 6.0.36 - 22 August 2021

Version 6.0.35 - 20 August 2021

Version 6.0.34 - 4 August 2021

Version 6.0.33 - 3 August 2021

Version 6.0.32 - 2 August 2021

Version 6.0.31 - 29 July 2021

Version 6.0.30 - 21 July 2021

Version 6.0.28 - 6 July 2021

Version 6.0.27 - 22 June 2021

Version 6.0.26 - 15 June 2021

Version 6.0.25 - 3 June 2021

Version 6.0.24 - 21 May 2021

Version 6.0.23 - 7 May 2021

Version 6.0.22 - 6 May 2021

Version 6.0.20 - 2 April 2021

Version 6.0.19 - 1 April 2021

Version 6.0.18 - 31 March 2021

Version 6.0.17 - 30 March 2021

Version 6.0.16 - 22 March 2021

Version 6.0.15 - 21 March 2021

Version 6.0.14 - 21 March 2021

Version 6.0.13 - 18 March 2021

Version 6.0.12 - 25 February 2021

Version 6.0.11 - 22 February 2021

Version 6.0.10 - 17 February 2021

Version 6.0.8 - 10 February 2021

Version 6.0.7 - 22 January 2021

Version 6.0.6 - 12 January 2021

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

Version 5.1.11 - 6 December 2020

      When using revision 19 of the API with network ports enabled the connect string is not correctly saved in the bacnet.db file.

Version 5.1.10 - 20 November 2020

      If a static address binding is added with an empty mac address, the driver stops responding to bacnet services.

Version 5.1.9 - 17 November 2020

      After the driver is restarted the EventMessage stack does process messages correctly.

Version 5.1.8 - 26 October 2020

      The cancellation function performs a lookup rather than accessing a volatile variable to remove any possible chance of unhandled exceptions.
      Fixed an error in the build process
      Ensure backward compatibility for existing apps configured with UNICODE.
      The service override handler is not working when multiple channels are defined.

Version 5.1.7 - 10 October 2020

      When a timeout occurs reading the services support, the device remains in the wrong state and stops updating points.
      The JSON parser returns an error when a NULL value is defined in a write Property request.

Version 5.1.6 - 2 October 2020

      Add support for queueing TSM requests when more than 128 requests are made at the same time to a single device.
      Incorrect enumeration type for EventType in the ASN parser for EventEnrolmentSummaryAck

Version 5.1.5 - 1 September 2020

      If a property was previously subscribed in the cache and then resubscribed a COV is not issued for the resubscription.
      BACnetObjectBase::SetStringValue() does not initialize the transmitted character set to 0.
      The JSON parser for .net has a compatibility issue for the servers GetAlarmSummary, GetEnrolmentSummary and GetEventInformation which causes the services to fail in the .net release.
      Moved the CBACNetDriver constructor and destructor out of the header files.
      When multiple static IP addresses are assigned to a single network interface card, the BACnet/IP driver selects the first IP address for the network adapter instead of the one that has been assigned in the network port object.
      The ASN parser does not handle Infinity and negative infinity values for both JSON and ASN string values.
      The schema plugins are not all loaded, only the default schema is being loaded up.
      The BACnetObject Execute base method does not call the instrinsic reporting algorithm.
      Introduced a new method called GetObject() on the BACnetObject class to find an existing object in the device.

Version 5.1.4 - 1 July 2020

      If a property is subscribed into the cache using readProperty requests then the cache module sends out a readPropertyMultiple request for polling.
      After a property has been resubscribed in the cache module a COV event is not immediately sent.
      The PDU parser does not correctly parse the proprietary property for staticRouterToNetwork bindings.
      Reinstated the enum values for the BACnetPriorityValueTypes from the version 4 release to keep backwards compatibility.

Version 5.1.3 - 22 June 2020

      The CBACnetStringBuilder class does not handle the character sets for JIS X 0208, ISO 10646 (UCS-4) and ISO 10646 (UCS-2)
      Json parser fails for DateTime datatype if an invalid date or time is specified.
      Reinstated enum values from the version 4 release to keep backwards compatibility.
      Revised the Visual Studio C++ distribution zip files to include a Visual Studio 2019 version and a seperate Visual Studio 2005 version.
      Unable to bind the adapter via name on linux, the specified adapter was “eht1” but the communication went through “eth0”.
      Unable to send packets to eth1 after setting the ipaddress corresponding to eth1 on a linux system.
      The datelist property returns valueOutRange when an addListElement request is made.
      When an IP address is pass in as the only parameter to the connect string for a BACnet/IP port on the linux release it reverts back to the default ethernet adapter.
      Revised the operation of the device scan to search for gaps on a second pass with a small delay between whoIs requests.
      Added a new global setting for /cache/device/[DEVICE_ID]/numberOfAPDUretries
      Added a new global setting for /cache/config/maxPointsPerReadPropertyMultiple
      Remove the priority text from the log message description.
      The sequence number is not populated after a readRange request with type ByTime.
      The event message stack was not deleted which causes an issue after restarting the BACnet driver.
      Possible deadlock when restarted the driver. It occurs if a call is made into the driver by another thread while the driver is being stopped.
      Unable to add 2 BACnet/IP ports with different IP Addresses that use the same UDP port number.
      Csharp and Java builds are failing on Linux operating systems
      When setting a character string value using the asn1_string_set method the ASN parser can be bypassed to copy the string directly.
      Updated the local objects samples to decouple the priority array.
      Added new network port objects which will be inherited from a BACnetIp port running in normal ip mode. When the port runs as a foreign device a new network port object will be created with a reference to the BACnet/IP port running in normal ip mode. Multiple network port objects can be added in this way.
      Updated the local objects samples to decouple the priority array.
      Added support to decouple the priority array from the present value of objects that support the priority array.
      Added a static method to the CBACnetObjectContainer class called DecouplePriorityArray which will decouple the priority array from the present value. A class that implements BACnet Writes to an object with a priority array will listen for change of event notifications to the priority array and then use this to update the present value.
      Added the routerToNetwork address of service indications, for example when an Iam message is received the callback function will pass the address of the routerToNetwork or null if the device is on the local network.
      Extend writing of the status flags property for internal objects to permit the override flag to be written to.

Version 5.1.2 - 1 April 2020

      Extend writing of the status flags property for internal objects to permit the override flag to be written to. Internal writes only are permitted, writes from BACnet services will still return an error to indicate that write access is denied.
      The event state is incorrectly set as required for many of the newly defined BACnet 2016 objects.
      The BACnet ASN string parser does not include the day of week unless it is a wildcard date.
      Implemented a new data type for storing an array of BACnet Addresses and a new proprietary property for storing the static routerToNetwork Addresses.
      Implemented a new proprietary property for storing the static address bindings.
      Added a new properties to the BACnetApiProperties class for storing the WhoIsReattemptTime and the WhoIsTimeBetweenSend.
      Added pdb files to the distribution packages.
      Unhandled exception when using the x64 bit version with logging set to Debug due to a missing header file declaration.
      Changed the unmanaged dll's for cbmsBACnet to statically linked.
      When a network is unknow, the router continuously sends a whoIsRouterToNetwork message, it should give up after 6 attempts.
      When BACnetRemoting is used and multiple BACnet/IP ports are configured then service timeouts can occur for devices connected to the local networks.
      Use the NIC adapter name to perform a lookup of the IP Address if it is passed through in the connection string for the BACnet IP port.
      If the MSTP datalink layer is restarted after failure then the system status state goes into downloadInProgress.
      Added additional debug logging for service indication and object access.
      COV messages sent by a virtual devices are not sent immediately. The client TSM lookup fails for the simpleAck message and results in a timeout.
      Log messages contain duplicate text for the priority level.
      Address binding lookup messages are continuously logged when the reference is for the local device id and no mac address is specified.
      The bacnet reinitialize device service returns an error when it is operated called by the API itself.
      Added support for the device scan from the parameter get/set api using bacnet_param_get and bacnet_param_set.
      Unhandled exeption when call parameter bacnet_param_set with the path /default/vendorName.
      Revised the operation of ASN parser for constructed data types.
      The EDE file loader returns an error when loading to the local device.
      If a sendto error occurs and logging is enabled then packet is retransmitted continuously.
      When a value in the cache is updated a resort of the last update time is required.
      When the driver is configured with an ANEX-H port and the local device object is queried a timout might occur.
      Updated the Jenkins automated builds for visual studio 2013, 2015, 2017 and 2019

Version 5.1.1 - 17 Dec 2019

  • Optimised deletion of an item from the array when indexes are used. It currently does a resort of the array index after the removal of each item.
  • Incorrect error message after bind fails in the BACnet/IP link layer.
  • Unable to set network to zero if only one network is defined.
  • Reset the NIC adapter settings after a period of seconds from the last query.
  • Added thread synchronization to the bacnet file logger
  • Revised the flush operation of the wireshark packet logger.
  • Possible crash of after a restart of the API if there are pending services waiting to complete.
  • When 2 or more ports are configured there can be timeouts when sending a BACnet service to the local port.
  • When a COV subscription is made from the API to itself, the API incorrectly sets the device id to zero for COV notifications.
  • CPU runs at 100% when multiple ports have been configured with the same network number.
  • Updated the C++ sample applications to include a static address binding.
  • Updated the object access sample.
  • Unable to Add/Remove routerToNetworkAddressBindings using the Add/Remove list element services because the property is configured as readOnly.
  • The routerToNetworkAddressBindings property displays the results from the internal port router tables.
  • If the destination MAC Address length is greater than 1 and the destination network is not the local network then the number of TSM'S per router setting is ignored.
  • Updated the Jenkins automated builds for visual studio 2013, 2015, 2017 and 2019
  • The watch default of 5 is always used.
  • The JSON Time converter returns an exception if the hundreds of a second are out of range.
  • Static address bindings can be created with a network number of 0 (local device)
  • When there is only 1 port defined and the static address bindings contain a network number that references the local network timeouts will occur.
  • Internal logging to a file is not working.
  • The create object service returns an error if a local service is initiated and the the API is not configured to support the createObject service.
  • Dynamic binding fails when a request was previously made using the Network/MAC Address. This can happen when the database was saved with an active COV subscription.
  • Added Visual Studio 2017 build.
  • Unable to set the network number to 0 when 1 port is configured.
  • Added additional unit tests to the bstack module
  • When many events are stored in the EventHandler module the last event may not be returned until a new event appears in the handler.
  • Debug log message when dynamic binding fails is called continuously.
  • Added additional log statements to the cache logging.
  • Add the timestamp to Visual Studio console output.
  • After changing the device id of a device while the BACnet API is already running the API times out after trying to read from the device.
  • When the presentValue property is subscribed from the cache module it will attempt to read the statusFlags property even though they do not exist.
  • Unable to write an empty string to the description property.
  • After receiving a segmented Ack messages it does not lookup the client or server tsm correctly.
  • The counters do not update when refreshAll is called.
  • When the deviceId is to 4194302 it will send an Iam message.
  • The packet logger does not roll over the log file correctly.
  • Added support for winpcap packet logging.
  • Added an OnCOV event to the cache module when the system status property is changed.
  • Unable to select the second NIC interface card when using BACnet/IP.
  • If 1 port is configured and the network number is not sent to 0 then timeouts will occur when sending a service to the local device.
  • The CLogging::OnMessage() virtual function signature should be OnMessage(int priority, char* message)
  • Removed references to wpcap.lib and revised to use callback functions using getprocaddress.
  • The last write error is not stored in the cache module.
  • Revised the thread synchronization within the Message Stack to improve performance.
  • Introduced a small delay between sending of packets to prevent missed packets on slower devices.
  • Added a sender thread to the bacnet/ip data link layer.
  • Implemented a worker thread for BACnet/IP UDP send and receive. This is to ensure that all packets are received as quickly as possible to prevent any loss of packets.
  • Added additional logging for dynamic address bindings.
  • Added support for npcap to all visual studio builds.
  • Updated the cbms_bacnet application to include a client test application for polling data.
  • Added a switch to provide packet logging.
  • Added X64 support for BACnet Ethernet.
  • When 2 or more ports exist with routing disabled the vendor proprietary private transfer requests are not working.
  • When entries from the hash table are deleted the has table size does not get reduced which can cause the size to increase to a large value.
  • Revised the operation of the channels to support previous versions.
  • Additional performance improvements to the hash table traverse.
  • Added new stats logging group for the BACnet Driver.
  • Updated the cache stats with additional values.
  • Performance improvements for the cache module.
  • Stop queuing TSM's if they are on the local network.
  • Implemented memory leak testing from the unit tests.
  • Added additional logging for statistics.
  • Revised the operation of CTSM's for VirtualDevices to include the NDPU source address in messages.
  • Revised the operation of STSM's to complete immediately.
  • Implemented dongle support for the CBMS version.
  • Revised the address binding lookup table to use hash lookups in place of a binary search.
  • After a restart the cache parameters are reset back to the initial state.
  • When process identifiers are not used, set the process identifier to an 0xFFFFFFFF to indicate that the identifier is not used.
  • Optimized the EDE file loader.
  • Revised the logic for locating a device using dynamic binding.
  • After restarting the network ports when running in protocol revision 18 mode the ports are not created from the connect strings.
  • Added a proprietary property to the network port to disable the port.
  • Cache does not revert to readProperty polling after a subscribeCov failure.
  • Added a new parameter /global/mem/usage to return the memory usage of the process.
  • Removed Linux compiler warnings
  • Removed "strict" decoding for writeProperty requests.
  • CurrentCommandPriority is not set for the characterstringvalue object
  • The characterStringValue returns a propertyIsNotArray error when reading from the eventTimeStamps with an arrayIndex set.
  • Added propertyGrid support to the JSON ASN objects.
  • After a reboot the cache module does not send out a SubscribeCOV request immediately because the "ticks" value starts from zero.
  • When a device is offline when the driver starts the device capabilities are not read which causes the cache to use readProperty for updating the values.
  • Updated the Build for the nuspec packaging.
  • Added Global Parameters and helper functions.
  • Object serialization error in the device object for properties that contain null values.
  • Implemented the default handler for the characterstringvalue object.
  • Revised the operation of the schedule object for processing the presentValue.
  • Added the arrayIndex to the object_container_getXXX and object_container_setXXX functions.
  • The reliability property of an analogInput is an optional property.
  • The propertyList is returning the incorrect properties.
  • The alarmValues and faultValues property of the multistateInput and multistateValue objects are acting like an array.
  • Maintain an invoke id for each device for sending service requests.
  • Incorrect properties listed under required and optional for the eventEnrolmentObject
  • The scheduleDefault does not return an error when an array index is specified.
  • Added configurations for the different .Net framework versions.
  • Added additional log statements for writeProperty requests.
  • Revised the Object handler functions

Version 5.1.0 - 27 Oct 2019

  • Refactored to remove all static variables and replace them with dynamically loaded variables assigned to a stack object. This makes it possible to run multiple instances of a BACnet driver with each instance isolated from the other. Each driver maintains it's own list of networks, devices and objects.
  • Refactored to pass the stack object to the function calls. The calling application must pass the stack object to service requests to use the appropriate BACnet driver.
  • Introduced Channels to the stack for multiple instances of the BACnet Driver.
  • Added a new constructor to the CBACnetDriver class to specify the channel name associated with the class. If multiple CBACnetDriver classes are instanciated then each instance must have it's own unique name. If no name is given then only 1 CBACnetDriver class is allowed within the application.
  • Added new constructors to all BACnet service class to set the CBACnetDriver to be used.
  • Added new helper functions SetProprietaryDataType() and GetProprietaryDataType() to the CBACnetDriver class for setting the datatype of a proprietary property used by a Vendor. Properties are then encoded/decoded to the specified data type.

Version 5.0.18 - 27 March 2019

  • Transformation between string types is incorrect if the string length is greater than 64.
  • Updated the error handling for sending of UDP packets.
  • Local broadcast messages use the incorrect BVLL function.
  • When the recipient is defined set to network 0, no mac address (local network) unconfirmed event messages are not sent.
  • If the enumerated value is greater than 1 then writing to a binary value succeeds, either an error should be returned or the value should be adjusted to 1.
  • WhoIsRouterToNetwork is sending an invalid network number when the network is greater than 255.
  • Optimised the EDE file loader.
  • When the notificationClass recipientList property contains a destination with the recipient type set to BACnetAddress and issueConfirmedTransactions is set to false then an event may not be sent. The API does not send out a whoIs request for dynamic binding and the events are held in the queue until an Iam is received which prevents the event message from being sent.
  • The status flags property in the character string object does not update after writing to the outOfService property.
  • Unconfirmed Event notification messages are not being broadcast onto the local network.
  • When writing to a property with a TimeValue type the API does not return a valueOutOfRange error when if the time has a wildcard value. For example Any Minute for the Hour 12. The value should only be accept values for a specified time.
  • When writing to a property with a DateRange type the API does not return a valueOutOfRange error when if the date has a wildcard value. For example Any Month in the Year 2018. The value should only be accept for a specified date, or an unspecified date.
  • After receiving an AckAlarm Service, the API sends a confirmedEvent message with an invalid priority.
  • After sending a deviceCommunicationControl request with disable set to true the API responds with an abort PDU to further packets. It should send no response at all.
  • The createObject service returns AnalogInput 0 in the ack response.
  • Unable to set the currentCommandPriority property to unsupported due to it being a supported property in revision 19, however it does not exist in earlier revisions.
  • When the eventDectionEnable property is set to false the eventMessageTexts, ackedTransitions and eventTimestamps are not reset.
  • When the eventEnable property is set to false the ackedTransitions and eventTimestamps are not reset.
  • After an acknowledgeAlarm service is resent an invalid event state error is returned.
  • Modified the schedule object after testing.
  • The profileName property in the characterstringValue object is readable even though it has been set to not supported.
  • Removed the calculation for getting the last active value for the schedule object.
  • Possible segmentation fault when writing to the characterStringValue object presentValue.
  • The timestamp of the confirmedEvant following an ackNotification should be the time of acknowledgement.
  • The changes made for the deviceCommunication control effected the transmission of whoIs requests
  • After a DeviceCommunicationControl service has been received the API still responds to packets.
  • Incorrect error code sent after a response to an AcknowledgAlarm request.
  • Revised the operation of the network port object to automatically restart after a reinitialzeDevice service is sent to activate the changes.
  • When a writePropertyMultiple request is sent with the propertyValue omitted the API responds with an invalid data type response. It should respond with a reject message of inconsistent parameters.
  • Changed the properties fdbbmdaddress and subscriptionlifetime to make them writable.
  • Added data transformation to the schedule object for writing to the object property references.
  • When an exception schedule exists for a day in the past and it does not contain a paired time value with a NULL entry then the exception schedule is not use.
  • Return an error if create object is called when the object type is not supported.
  • CurrentCommandPriority is not set for the characterstringvalue object
  • The characterStringValue returns a propertyIsNotArray error when reading from the eventTimeStamps with an arrayIndex set.
  • Exception error in the scheduleObject when the effectiveDataRange returns false and the presentValue changes state. First seen in build version 5.0.17 build 508
  • Changed the PDU decoded to return an error when decoding the propertyValue in writeProperty, writePropertyMultiple and createObject requests when the dataType written does not match the expected data type.
  • If the presentValue object of AnalogValue, BinaryValue and MultistateValue objects are not commandable then the stack returns writeAccess denied even though the property has been configured as readWrite.
  • When writing to the recipient list the fromDate and toDate should only accept a specific time. Wildcard or unspecified times should return a valueOutOfRange error when writing to the recipient list.
  • Implemented the wildcard address of 4194303 for the network port object.
  • Added additional callback functions to the ASN1 property maps to set the access level and to determine if a property is excluded. Removed unused callback functions from the property map.
  • When the readPropertyMultipleService handler is overriden and the client application calls GetSize on GetListOfWriteAccessSpecifications, the array contents are erased.
  • The bacnet api does return an error when the createObject service is executed with invalid properties.
  • Incorrect required properties returned from MultistateOutput, Schedule, CharacterString and NetworkPort objects.
  • Incorrect update interval for cache points that use readProperty or readPropertyMultiple.
  • PDU parser should return inconsistent parameters when a packet fails to be decoded. It currently returns "constructed" data when decoding fails.
  • Maintain an invoke id for each device for sending service requests.
  • Revised the network ports to load a single Port for each data link layer. Port references are not used.
  • Revised the operation of the schedule object for processing the presentValue.
  • Implemented the default handler for the characterstringvalue object.
  • Revised the operation of the schedule object for processing the presentValue.
  • The calendar object does not correctly update the present value when a BACnetWeekNDay entry is selected.
  • Incorrect error code returned for some object access requests.
  • Incorrect properties listed under required and optional for the eventEnrolmentObject
  • Added the arrayIndex to the object_container_getXXX and object_container_setXXX functions.
  • The reliability property of an analogInput is an optional property.
  • The propertyList is returning the incorrect properties.
  • The alarmValues and faultValues property of the multistateInput and multistateValue objects are acting like an array.
  • The recipientList property of the notification class object is acting like an array when reading from it.
  • Reading the stateTest property with an array index of zero does not return the record count.
  • Writing to the stateText with an unsigned integer value with array index zero does not adjust the size of the array.
  • Writing to the priorityForWriting property does not return an error when the value is 6 or outside bounds.
  • Writing to the numberOfStates property does not return an error when the value is outside bounds.
  • When a readProperty request is made using the wildcard device ID, the response should have the actual device id in it.
  • When 2 or more recipients are added to the recipient list of a notification class object no events are sent to the second recipient.

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 5.0.10.229
  • 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

Version 4