From da3aaf3b48282d14ac4d9e4942d9a98466f308c9 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Thu, 6 Feb 2025 14:10:56 -0600 Subject: [PATCH] Added Write_Enabled flag API into multi-state-input and multi-state-value basic objects. (#903) --- src/bacnet/basic/object/ms-input.c | 47 ++++++++++++++++++++++++++++++ src/bacnet/basic/object/ms-input.h | 7 +++++ src/bacnet/basic/object/msv.c | 46 +++++++++++++++++++++++++++++ src/bacnet/basic/object/msv.h | 7 +++++ 4 files changed, 107 insertions(+) diff --git a/src/bacnet/basic/object/ms-input.c b/src/bacnet/basic/object/ms-input.c index e1ad3bca..018d6572 100644 --- a/src/bacnet/basic/object/ms-input.c +++ b/src/bacnet/basic/object/ms-input.c @@ -875,6 +875,52 @@ void Multistate_Input_Write_Present_Value_Callback_Set( Multistate_Input_Write_Present_Value_Callback = cb; } +/** + * @brief Determines a object write-enabled flag state + * @param object_instance - object-instance number of the object + * @return write-enabled status flag + */ +bool Multistate_Input_Write_Enabled(uint32_t object_instance) +{ + bool value = false; + struct object_data *pObject; + + pObject = Multistate_Input_Object(object_instance); + if (pObject) { + value = pObject->Write_Enabled; + } + + return value; +} + +/** + * @brief For a given object instance-number, sets the write-enabled flag + * @param object_instance - object-instance number of the object + */ +void Multistate_Input_Write_Enable(uint32_t object_instance) +{ + struct object_data *pObject; + + pObject = Multistate_Input_Object(object_instance); + if (pObject) { + pObject->Write_Enabled = true; + } +} + +/** + * @brief For a given object instance-number, clears the write-enabled flag + * @param object_instance - object-instance number of the object + */ +void Multistate_Input_Write_Disable(uint32_t object_instance) +{ + struct object_data *pObject; + + pObject = Multistate_Input_Object(object_instance); + if (pObject) { + pObject->Write_Enabled = false; + } +} + /** * @brief Creates a new object and adds it to the object list * @param object_instance - object-instance number of the object @@ -905,6 +951,7 @@ uint32_t Multistate_Input_Create(uint32_t object_instance) pObject->Reliability = RELIABILITY_NO_FAULT_DETECTED; pObject->Change_Of_Value = false; pObject->Present_Value = 1; + pObject->Write_Enabled = false; /* add to list */ index = Keylist_Data_Add(Object_List, object_instance, pObject); if (index < 0) { diff --git a/src/bacnet/basic/object/ms-input.h b/src/bacnet/basic/object/ms-input.h index 249131fe..9e351674 100644 --- a/src/bacnet/basic/object/ms-input.h +++ b/src/bacnet/basic/object/ms-input.h @@ -70,6 +70,13 @@ BACNET_STACK_EXPORT void Multistate_Input_Write_Present_Value_Callback_Set( multistate_input_write_present_value_callback cb); +BACNET_STACK_EXPORT +bool Multistate_Input_Write_Enabled(uint32_t instance); +BACNET_STACK_EXPORT +void Multistate_Input_Write_Enable(uint32_t instance); +BACNET_STACK_EXPORT +void Multistate_Input_Write_Disable(uint32_t instance); + BACNET_STACK_EXPORT bool Multistate_Input_Change_Of_Value(uint32_t instance); BACNET_STACK_EXPORT diff --git a/src/bacnet/basic/object/msv.c b/src/bacnet/basic/object/msv.c index 948b5802..4c2f789b 100644 --- a/src/bacnet/basic/object/msv.c +++ b/src/bacnet/basic/object/msv.c @@ -879,6 +879,52 @@ void Multistate_Value_Write_Present_Value_Callback_Set( Multistate_Value_Write_Present_Value_Callback = cb; } +/** + * @brief Determines a object write-enabled flag state + * @param object_instance - object-instance number of the object + * @return write-enabled status flag + */ +bool Multistate_Value_Write_Enabled(uint32_t object_instance) +{ + bool value = false; + struct object_data *pObject; + + pObject = Multistate_Value_Object(object_instance); + if (pObject) { + value = pObject->Write_Enabled; + } + + return value; +} + +/** + * @brief For a given object instance-number, sets the write-enabled flag + * @param object_instance - object-instance number of the object + */ +void Multistate_Value_Write_Enable(uint32_t object_instance) +{ + struct object_data *pObject; + + pObject = Multistate_Value_Object(object_instance); + if (pObject) { + pObject->Write_Enabled = true; + } +} + +/** + * @brief For a given object instance-number, clears the write-enabled flag + * @param object_instance - object-instance number of the object + */ +void Multistate_Value_Write_Disable(uint32_t object_instance) +{ + struct object_data *pObject; + + pObject = Multistate_Value_Object(object_instance); + if (pObject) { + pObject->Write_Enabled = false; + } +} + /** * @brief Creates a new object and adds it to the object list * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/msv.h b/src/bacnet/basic/object/msv.h index 44d0cce3..0ea4137b 100644 --- a/src/bacnet/basic/object/msv.h +++ b/src/bacnet/basic/object/msv.h @@ -69,6 +69,13 @@ BACNET_STACK_EXPORT void Multistate_Value_Write_Present_Value_Callback_Set( multistate_value_write_present_value_callback cb); +BACNET_STACK_EXPORT +bool Multistate_Value_Write_Enabled(uint32_t instance); +BACNET_STACK_EXPORT +void Multistate_Value_Write_Enable(uint32_t instance); +BACNET_STACK_EXPORT +void Multistate_Value_Write_Disable(uint32_t instance); + BACNET_STACK_EXPORT bool Multistate_Value_Change_Of_Value(uint32_t instance); BACNET_STACK_EXPORT