* Added BACnet library itoa, ltoa, ultoa, dtoa, and utoa ASCII functions for ease of printing formatted values.
* Exposed the bacnet_byte_reverse_bits() function API.
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.
* Secured event and authentication decoding by removing deprecated functions.
* Added extended, discrete-value, double-out-of-range, signed-out-of-range, unsigned-out-of-range, change-of-characterstring, change-of-status-flags, change-of-reliability, and change-of-timer event notification encode, decode, and unit testing with #ifdef disabled by default.
* 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 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.
* Added the ability for apps/ucov to send property specific application tagged data using -1 argument for tag.
* Added known property decoding in UnconfirmedCOVNotification handler.
* Added Who-Am-I-Request encoding, decoding, unit tests, and command line application bacwhoami.
* Added You-Are-Request encoding, decoding, unit tests, and command line application bacyouare.
* Added Who-Am-I with Who-Is and You-Are handling into the example server application when run as device 4194303.
* Fixed GetEvent usage of linked list by initializing next in all the examples and unit test.
* Secured GetEventInformation encoders by accepting NULL for APDU for determining the size, and exploit the NULL APDU for size checking during encoding. Secured the GetEventInformation decoders and removed the use of deprecated decoder API.