Added WriteProperty setter for BACnet Unsigned Integer values. (#834)

This commit is contained in:
Steve Karg
2024-10-29 13:17:39 -05:00
committed by GitHub
parent 15412b9ee5
commit a38cc531d2
3 changed files with 87 additions and 0 deletions
+38
View File
@@ -425,3 +425,41 @@ bool write_property_empty_string_valid(
return (valid);
}
/**
* @brief Helper to decode a WriteProperty unsigned integer and set a property
* @param wp_data - #BACNET_WRITE_PROPERTY_DATA data including any
* error response.
* @param value - #BACNET_APPLICATION_DATA_VALUE data
* @param setter - function to set the property
* @param maximum - maximum value allowed for the property
* @return true if the value was decoded and set, else false
*/
bool write_property_unsigned_decode(
BACNET_WRITE_PROPERTY_DATA *wp_data,
BACNET_APPLICATION_DATA_VALUE *value,
bacnet_property_unsigned_setter setter,
BACNET_UNSIGNED_INTEGER maximum)
{
bool status = write_property_type_valid(
wp_data, value, BACNET_APPLICATION_TAG_UNSIGNED_INT);
if (status) {
if (value->type.Unsigned_Int <= maximum) {
status =
(setter)(wp_data->object_instance, value->type.Unsigned_Int);
if (status) {
wp_data->error_class = ERROR_CLASS_PROPERTY;
wp_data->error_code = ERROR_CODE_SUCCESS;
} else {
wp_data->error_class = ERROR_CLASS_PROPERTY;
wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE;
}
} else {
wp_data->error_class = ERROR_CLASS_PROPERTY;
wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE;
status = false;
}
}
return status;
}
+16
View File
@@ -46,6 +46,15 @@ typedef struct BACnet_Write_Property_Data {
*/
typedef bool (*write_property_function)(BACNET_WRITE_PROPERTY_DATA *wp_data);
/**
* @brief API for setting a BACnet Unsigned Integer property value
* @param object_instance [in] Object instance number
* @param value [in] New value to set
* @return true if successful, else false
*/
typedef bool (*bacnet_property_unsigned_setter)(
uint32_t object_instance, BACNET_UNSIGNED_INTEGER value);
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -86,6 +95,13 @@ bool write_property_empty_string_valid(
const BACNET_APPLICATION_DATA_VALUE *value,
size_t len_max);
BACNET_STACK_EXPORT
bool write_property_unsigned_decode(
BACNET_WRITE_PROPERTY_DATA *wp_data,
BACNET_APPLICATION_DATA_VALUE *value,
bacnet_property_unsigned_setter setter,
BACNET_UNSIGNED_INTEGER maximum);
#ifdef __cplusplus
}
#endif /* __cplusplus */