* Fixed the loop object empty reference property by initializing to self. When configured for self, the manipulated property value will update the controlled variable value for simulation.
* Changed min/max output and update-interval defaults.
Added segmentation support for server devices for some services. Configure BACNET_SEGMENTATION_ENABLED=1 to include in the library, and adjust BACNET_MAX_SEGMENTS_ACCEPTED for maximum number of segments.
* Refactored the BACnet/SC datalink initialization order by moving certificate file checks and hub connection registration to occur after datalink initialization
* Replaced stdlib rand() with platform-specific cryptographically secure random functions (RtlGenRandom for Windows, getrandom for Linux, arc4random_buf for BSD) to generate UUID and VMAC addresses, preventing duplicates that broke connections
* Enabled conditional debug output in BACnet/SC components when BUILD=debug is specified
* Added a new getter API function Timer_State_Change_Value_Get() to the timer object that returns state-change values by copying them to a caller-provided buffer, providing a safer alternative to the existing Timer_State_Change_Value() function which returns a direct pointer to internal data.
* Added ListElement service callback for storing data.
* Added Audit Log and Time Value objects to basic device.
* Added Audit Log object to Makefile and CMake builds.
* Added basic timer object, internal state machine, and unit tests
* Added BACnetTimerStateChangeValue encode, decode, parse, print, and diff with unit tests
* Changed handler of add/remove list element to check if the property is a BACnetLIST
* Added BACnetLIST utility for handling WriteProperty to a list.
* Fixed outlier ReadProperty object handlers to return zero when the RP parameter is NULL.
* Added Device_Object_Functions_Find() API to enable override of basic object API function.
* Added Device_Object_Functions() API to return basic object API table of functions for all objects.
* Fixed units property declaration in basic Analog Input header file to be uint16_t instead of uint8_t.
* Added range checking of units property in example objects WriteProperty handler.
* Converted device object test to use common read-write property test. Extended the basic BACnet device object example API.
* Created BACnet/IP and COV test mocks to enable device object testing with less dependencies.
* Fixed the lighting command RAMP TO ramp rate to always clamp within 0.1 and 100.0 to avoid endless rate of 0.0.
* Fixed the use of default fade, ramp, or step when those optional parameters are missing from lighting command.
* Fixed compiler warning format '%u' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned int'} [-Werror=format=] by casting or increasing format specifier size and casting. Increased the size of the name string to handle larger possible integers.
* Fixed copied code that no longer needs static function scope variables for text names.
* Fixed Lighting_Command to ignore write priority and use its own.
* Fixed BACnetLightingOperation reserved range.
* Refactor overridden into the lighting command module. Added Overridden status flags API. Added Lighting Output API to implement a momentary override to the output that is cleared at the next lighting command. Integrated lighting command overridden behavior into the lighting output object.
* Added Trim_Fade_Time, High_End_Trim, Low_End_Trim, Last_On_Value and Default_On_Value properties to lighting output.
Added TRIM_ACTIVE flag to lighting command. Added Last_On_Value and Default_On_Value to lighting command for restore and toggle.
* Fixed AddListElement and RemoveListElement which were checking the wrong return value from Device object.
* Fixed decoding of ListElement Tag 0: Object ID instance.
* Fixed Notification_Class_Add_List_Element() and Notification_Class_Remove_List_Element() element counter index, and empty slot detection.
* Added bacnet_recipient_device_set() and bacnet_recipient_address_set() API
* Added unit test coverage for Notification Class object.
* Added dynamic RAM file system to use with basic bacnet file object.
* Added static RAM file system to use with basic bacnet file object.
* Added check for read-only during AtomicWriteFile service API for BACnet File object.
* Change stm32f4xx example to use static RAM file system.
* Fixed bacfile_count() function return type
* Linux MS/TP:
* dlmstp_init:
* Maximize thread priority if permitted
* MSTP_Put_Receive/dlmstp_receive:
* Use a buffer so incoming frames are not dropped during bursts
* dlmstp_receive:
* Make timeout optional
* MSTP_Get_Reply:
* Lock the mutex before using the PDU Queue
* Iterate over all queued replies to find a match (instead of only checking the first)
* Sleep for a millisecond before checking again to wait for the application provide a reply
* RS485_Check_UART_Data:
* Ensure waiter is initilized before using with select
* Ensure bytes are read before adding to FIFO
TSM:
* Add log when `datalink_send_pdu` fails for consistency with all other `datalink_send_pdu` calls
dlenv_maintenance_timer:
* Fix Tx/Rx labels in MSTP statitistics print
* don't log on queued requests