* Fix: Corrected `rr_address_list_encode` to properly handle the end of the address cache and added a new test case to validate ReadRange operations near the cache limit.
* Added WriteProperty handler in the Structured View object with handling for object-name, description, node-subtype, node-type, default-subordinate-relationship, represents, subordinate-list, subordinate-annotations, subordinate-node-types, and subordinate-relationships in the basic Structured View object.
* Changed Structured View character strings for object-name, description, and node-subtype to use dynamic strings to support WriteProperty.
* Added characterstring_utf8_valid(), characterstring_utf8_strdup() and write_property_characterstring_utf8_strdup() for UTF-8 string duplication.
* Added write property tests for array handling and validation of array index values
* Added CreateObject and DeleteObject for basic Octet String Value and Positive Integer Value objects.
* Changed PositiveInteger present-value datatype to BACNET_UNSIGNED_INTEGER.
* Secured BACnetAssignedAccessRights decoder.
* Secured BACnetPropertyState decoder.
* Secured BACnetCredentialAuthenticationFactor decoder.
* Secured BACnetEventState change-of-state [1] SEQUENCE decoder.
* Secured I-Have-Request service decoder.
* Secured Add/Remove ListElement service request decoder.
* Secured ConfirmedPrivateTransfer-Request and UnconfirmedPrivateTransfer-Request decoders.
* Secured ReadPropertyMultiple-Request and -Ack decoders.
* Secured TimeSynchronization-Request decoder.
* Secured WritePropertyMultiple service decoders
* Secured Trend Log object TL_fetch_property() function.
* Secured ReadProperty-Ack decider,
* Refactor BACnet time sync recipient handling by moving timesync linked list structure into bacdest where the recipient encoder and decoder already existed.
* Secured decoding of BACnetPropertyState.
* Secured decoding in the LifeSafetyOperation-Request service.
* Secured BACnetAuthenticationFactor decoding in the Credential Data Input object.
* Fixed WriteProperty decoder to avoid read buffer overrun. Improved WriteProperty error reporting by adding specific reject codes during decoding similar to WritePropertyMultiple. Deduplicated the WriteProperty handling of abort, reject and error codes.
* Added BACNET_STACK_DEPRECATED_DISABLE guards around all of the deprecated decoding functions to ensure they are not used except intentionally for legacy code bases.
* Changed version to 1.5.0.rc5 for security fix tracking in branch.
* Added Who-Is-Router-To-Network process in basic Notification Class when recipient address is missing the router MAC address.
* Added buffer_length parameter to octet string buffer decode functions
* Fixed BACnet address handling for I-Am-Router address updating the recipient list address for the next hop router.
* Changed VMAC encoding and decoding to use octet string buffer API to reduce stack RAM.
* Added callback API for extending the basic Device object and children with proprietary properties for ReadProperty and WriteProperty services. The callback API includes a function to get the specific proprietary property list for any specific object instance in the device, functions to handle the ReadProperty or WriteProperty of the proprietary property.
* Added a new property_list_function typedef to proplist.h for proprietary property list callbacks
* Removed the object-specific proprietary property implementation from the Loop object
* Added test coverage in the Device test validating the proprietary property API usage
* Added CreateObject and DeleteObject for basic Accumulator objects.
* Added WriteProperty handling for object-name, scale, out-of-service, units, and max-pres-value.
* Added Blink.Callback and Blink.Priority to support end-of-blink actions for WARN_OFF/WARN_RELINQUISH. The Blink.Callback is invoked when a blink sequence ends or when a new command interrupts a WARN_OFF/WARN_RELINQUISH in progress.
* Added Lighting Output (LO) WARN_OFF/WARN_RELINQUISH post-egress priority array handling using the Blink.Callback
* Added enumeration text lookup for BACnetAuthenticationStatus, BACnetAuthorizationMode, BACnetAccessCredentialDisable, BACnetAccessCredentialDisableReason, BACnetAccessUserType, BACnetAccessZoneOccupancyState, BACnetWriteStatus, BACnetIPMode, BACnetDoorValue, BACnetMaintenance, BACnetEscalatorFault, BACnetEscalatorMode, BACnetEscalatorOperationDirection, BACnetBackupState, BACnetSecurityLevel, BACnetLiftCarDirection, BACnetLiftCarDoorCommand, BACnetLiftCarDriveStatus, BACnetLiftCarMode, BACnetLiftFault, BACnetLiftGroupMode, BACnetAuditLevel, BACnetAuditOperation, BACnetSCHubConnectorState, BACnetSCConnectionState, BACnetNodeRelationship, BACnetAction, BACnetFileAccessMethod, BACnetLockStatus, BACnetDoorAlarmState, BACnetDoorStatus, BACnetDoorSecuredStatus, and BACnetAccessEvent.
* Created BINARY_PV_MAX with the same semantic meaning as one more than the last valid enumeration, and deprecated MAX_BINARY_PV usage in the examples.
* Reduced code size by using bactext_property_states_strtoul() instead of individual API for each enumations.
Added a new API for writable property lists across all the basic example object types, preparing for the introduction of a Writable_Property_List property in every object in a future BACnet standard revision.
The lists can be used by backup and restore feature to automatically choose the object property values in the backup that can be restored via internal WriteProperty directly from BACnet CreateObject services with List of Initial Values.
Updated existing device object examples to include these writable property lists.
* Fixed lighting output object lighting-command last-on-value to only
be updated with the last value of the Present_Value property that
was greater than or equal to 1.0%, keeping in mind that the Present_Value
shall indicate the target level of the operation and not the current
value.
Fixes the CreateObject service list-of-initial-values encoding and decoding by refactoring the data structure to be similar to WriteProperty. The implementation changes from using a linked list of property values to using a flat buffer approach with delayed decoding.
Changes:
* Refactored BACNET_CREATE_OBJECT_DATA structure to use an application_data buffer instead of a linked list for initial values
* Added a new create_object_process() and create_object_initializer_list_process() functions to centralize object creation logic and error reporting
* Updated all device implementations to use the new centralized creation functions
* Enhanced the create-object example application to support command-line specification of initial property values
* Added comprehensive test coverage for the new encoding/decoding and processing functions
* Fixed BACnet file object path name unintended path traversals by optionally restricting path name content with BACNET_FILE_PATH_RESTRICTED define.
* Added POSIX file path name checking for AtomicReadFile and AtomicWriteFile example applications. Prohibits use of relative and absolute file paths when BACNET_FILE_PATH_RESTRICTED is non-zero.
* Fixed tokenizer_string() off-by-one buffer overflow when processing string literals longer than the buffer limit.
* Fixed ubasic potential string buffer overflows by using snprintf instead of sprintf.
* Fixed ubasic label strings to use UBASIC_LABEL_LEN_MAX as buffer limit.
* Fixed ubasic string variables to initialize with zeros.
* Fixed compile errors when UBASIC_DEBUG_STRINGVARIABLES is defined.
* Added ubasic string variables user accessor API and unit testing for ubasic string variables.
* Fixed tokenizer_label() off-by-one buffer overflow when processing string literals longer than the buffer limit.
* Fixed lighting-output object blink warn to honor blink-warn-enable.
* Fixed the blink warn logic for a non-zero percent value blink inhibit.
* Fixed the warn relinquish to actually relinquish.
* Refactored BACnetShedLevel encoding, decoding, and printing into separate file. Added unit testing.
* Added API to load control object for shed-level, start-time, duty-window, full-duty-baseline, and enable.
* Fixed bacapp sprintf for shed level and host-n-port found in scan build.
* Refactored the object-id to and from 32-bit value so channel-value could re-use the same API.
* Expanded the BACnetChannelValue coercion function to include all the coercions, no coercions, and invalid datatypes described in Table 12-63 of the Channel object. Expanded unit testing code coverage for BACnetChannelValue.
* Updated documentation for encode functions to accurately describe return values (0 on error instead of BACNET_STATUS_ERROR)
* Expanded property support, removed INPUT object types, added fallback encoding for non-coerced data types, and updated error handling in ReadProperty of present-value to check for 0 instead of BACNET_STATUS_ERROR.
* Expanded the validation tests and increased test code coverage.
* Enhanced string comparison functions and update indtext API usage
- Added library specific case-sensitive and case-insensitive string comparison functions that mimic strcmp.
- Updated indtext_by_string and indtext_by_istring to use the new comparison functions.
- Improved documentation for return values in indtext functions.
- Expanded test data in main.c for comprehensive testing when beginning of string matches another string.
* Added BACnetRecipient and BACnetAddressBinding encoding, decoding, ASCII conversion, comparison, and copy functions.
* Added library specific string manipulation utilities including strcmp, strncmp, stptok, and snprintf with offset functions.
* Added test/README about verification and validation testing.