From 3d3e192ae974c64b089834f34d561dad4d484181 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Wed, 28 Aug 2024 16:21:58 -0500 Subject: [PATCH] Added object-name c-string getter function to basic objects so they can be referenced to free if dynamically created. (#754) * Added basic object-name get for ASCII names to enable free if they were dynamically created. Added unit testing to validate the basic object ASCII object-name API. * Removed static scope on character array used for name since the array gets copied into characterstring array and static is not needed. --- src/bacnet/basic/object/acc.c | 2 +- src/bacnet/basic/object/access_credential.c | 2 +- src/bacnet/basic/object/access_door.c | 2 +- src/bacnet/basic/object/access_point.c | 2 +- src/bacnet/basic/object/access_rights.c | 2 +- src/bacnet/basic/object/access_user.c | 2 +- src/bacnet/basic/object/access_zone.c | 2 +- src/bacnet/basic/object/ai.c | 20 ++- src/bacnet/basic/object/ai.h | 3 + src/bacnet/basic/object/ao.c | 22 ++- src/bacnet/basic/object/ao.h | 3 + src/bacnet/basic/object/av.c | 20 ++- src/bacnet/basic/object/av.h | 5 +- src/bacnet/basic/object/bacfile.c | 23 +++- src/bacnet/basic/object/bacfile.h | 5 + src/bacnet/basic/object/bi.c | 26 +++- src/bacnet/basic/object/bi.h | 3 + src/bacnet/basic/object/bitstring_value.c | 24 +++- src/bacnet/basic/object/bitstring_value.h | 3 + src/bacnet/basic/object/blo.c | 22 ++- src/bacnet/basic/object/blo.h | 2 + src/bacnet/basic/object/bo.c | 22 ++- src/bacnet/basic/object/bo.h | 3 + src/bacnet/basic/object/bv.c | 26 +++- src/bacnet/basic/object/bv.h | 2 +- src/bacnet/basic/object/calendar.c | 20 ++- src/bacnet/basic/object/calendar.h | 2 + src/bacnet/basic/object/channel.c | 20 ++- src/bacnet/basic/object/channel.h | 2 + src/bacnet/basic/object/color_object.c | 22 ++- src/bacnet/basic/object/color_object.h | 2 + src/bacnet/basic/object/color_temperature.c | 22 ++- src/bacnet/basic/object/color_temperature.h | 2 + src/bacnet/basic/object/command.c | 2 +- .../basic/object/credential_data_input.c | 2 +- src/bacnet/basic/object/iv.c | 125 +++++++++++++++--- src/bacnet/basic/object/iv.h | 13 +- src/bacnet/basic/object/lc.c | 24 +++- src/bacnet/basic/object/lc.h | 2 + src/bacnet/basic/object/lo.c | 22 ++- src/bacnet/basic/object/lo.h | 3 + src/bacnet/basic/object/lsp.c | 38 ++++++ src/bacnet/basic/object/lsp.h | 6 +- src/bacnet/basic/object/lsz.c | 38 ++++++ src/bacnet/basic/object/lsz.h | 6 +- src/bacnet/basic/object/ms-input.c | 22 ++- src/bacnet/basic/object/ms-input.h | 3 + src/bacnet/basic/object/mso.c | 22 ++- src/bacnet/basic/object/mso.h | 3 + src/bacnet/basic/object/msv.c | 22 ++- src/bacnet/basic/object/msv.h | 3 + src/bacnet/basic/object/nc.c | 2 +- src/bacnet/basic/object/netport.c | 1 + src/bacnet/basic/object/osv.c | 2 +- src/bacnet/basic/object/piv.c | 2 +- src/bacnet/basic/object/schedule.c | 2 +- src/bacnet/basic/object/structured_view.c | 20 ++- src/bacnet/basic/object/structured_view.h | 2 + src/bacnet/basic/object/time_value.c | 21 ++- src/bacnet/basic/object/time_value.h | 2 + src/bacnet/basic/object/trendlog.c | 2 +- test/bacnet/basic/object/ai/src/main.c | 4 + test/bacnet/basic/object/ao/src/main.c | 6 +- test/bacnet/basic/object/av/src/main.c | 4 + test/bacnet/basic/object/bi/src/main.c | 4 + .../basic/object/bitstring_value/src/main.c | 4 + test/bacnet/basic/object/blo/src/main.c | 11 ++ test/bacnet/basic/object/bo/src/main.c | 4 + test/bacnet/basic/object/bv/src/main.c | 4 + test/bacnet/basic/object/calendar/src/main.c | 11 ++ test/bacnet/basic/object/channel/src/main.c | 13 ++ .../basic/object/color_object/src/main.c | 13 ++ .../basic/object/color_temperature/src/main.c | 13 ++ test/bacnet/basic/object/iv/src/main.c | 12 ++ test/bacnet/basic/object/lc/src/main.c | 4 + test/bacnet/basic/object/lo/src/main.c | 11 ++ test/bacnet/basic/object/lsp/src/main.c | 13 ++ test/bacnet/basic/object/lsz/src/main.c | 15 +++ test/bacnet/basic/object/ms-input/src/main.c | 4 + test/bacnet/basic/object/mso/src/main.c | 4 + test/bacnet/basic/object/msv/src/main.c | 4 + test/bacnet/basic/object/netport/src/main.c | 4 + .../basic/object/structured_view/src/main.c | 4 + test/bacnet/basic/object/test/property_test.c | 26 ++++ test/bacnet/basic/object/test/property_test.h | 11 ++ .../bacnet/basic/object/time_value/src/main.c | 4 + 86 files changed, 872 insertions(+), 87 deletions(-) diff --git a/src/bacnet/basic/object/acc.c b/src/bacnet/basic/object/acc.c index b84ce9c1..3e5b803f 100644 --- a/src/bacnet/basic/object/acc.c +++ b/src/bacnet/basic/object/acc.c @@ -134,7 +134,7 @@ unsigned Accumulator_Instance_To_Index(uint32_t object_instance) bool Accumulator_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32]; /* okay for single thread */ + char text[32]; bool status = false; if (object_instance < MAX_ACCUMULATORS) { diff --git a/src/bacnet/basic/object/access_credential.c b/src/bacnet/basic/object/access_credential.c index 168f3c05..ba8d4fab 100644 --- a/src/bacnet/basic/object/access_credential.c +++ b/src/bacnet/basic/object/access_credential.c @@ -119,7 +119,7 @@ unsigned Access_Credential_Instance_To_Index(uint32_t object_instance) bool Access_Credential_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_CREDENTIALS) { diff --git a/src/bacnet/basic/object/access_door.c b/src/bacnet/basic/object/access_door.c index 377756ac..24fbbdad 100644 --- a/src/bacnet/basic/object/access_door.c +++ b/src/bacnet/basic/object/access_door.c @@ -256,7 +256,7 @@ static int Access_Door_Priority_Array_Encode( bool Access_Door_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_DOORS) { diff --git a/src/bacnet/basic/object/access_point.c b/src/bacnet/basic/object/access_point.c index dce24ced..c5784213 100644 --- a/src/bacnet/basic/object/access_point.c +++ b/src/bacnet/basic/object/access_point.c @@ -122,7 +122,7 @@ unsigned Access_Point_Instance_To_Index(uint32_t object_instance) bool Access_Point_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_POINTS) { diff --git a/src/bacnet/basic/object/access_rights.c b/src/bacnet/basic/object/access_rights.c index 31a5bba7..a573175a 100644 --- a/src/bacnet/basic/object/access_rights.c +++ b/src/bacnet/basic/object/access_rights.c @@ -114,7 +114,7 @@ unsigned Access_Rights_Instance_To_Index(uint32_t object_instance) bool Access_Rights_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_RIGHTSS) { diff --git a/src/bacnet/basic/object/access_user.c b/src/bacnet/basic/object/access_user.c index dd91f817..ab383f26 100644 --- a/src/bacnet/basic/object/access_user.c +++ b/src/bacnet/basic/object/access_user.c @@ -111,7 +111,7 @@ unsigned Access_User_Instance_To_Index(uint32_t object_instance) bool Access_User_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_USERS) { diff --git a/src/bacnet/basic/object/access_zone.c b/src/bacnet/basic/object/access_zone.c index 6a1ff2ef..98758d24 100644 --- a/src/bacnet/basic/object/access_zone.c +++ b/src/bacnet/basic/object/access_zone.c @@ -116,7 +116,7 @@ unsigned Access_Zone_Instance_To_Index(uint32_t object_instance) bool Access_Zone_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_ACCESS_ZONES) { diff --git a/src/bacnet/basic/object/ai.c b/src/bacnet/basic/object/ai.c index d7847745..0d948dbd 100644 --- a/src/bacnet/basic/object/ai.c +++ b/src/bacnet/basic/object/ai.c @@ -233,7 +233,7 @@ void Analog_Input_Present_Value_Set(uint32_t object_instance, float value) bool Analog_Input_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text_string[32] = ""; + char text_string[32] = ""; bool status = false; struct analog_input_descr *pObject; @@ -275,6 +275,24 @@ bool Analog_Input_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Analog_Input_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct analog_input_descr *pObject; + + pObject = Analog_Input_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, gets the event-state property value * diff --git a/src/bacnet/basic/object/ai.h b/src/bacnet/basic/object/ai.h index a42e565c..5a1c891c 100644 --- a/src/bacnet/basic/object/ai.h +++ b/src/bacnet/basic/object/ai.h @@ -86,6 +86,9 @@ extern "C" { bool Analog_Input_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char * Analog_Input_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT char *Analog_Input_Description( diff --git a/src/bacnet/basic/object/ao.c b/src/bacnet/basic/object/ao.c index 4b35c4d2..3823beec 100644 --- a/src/bacnet/basic/object/ao.c +++ b/src/bacnet/basic/object/ao.c @@ -514,7 +514,7 @@ bool Analog_Output_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -522,6 +522,24 @@ bool Analog_Output_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Analog_Output_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the units property value * @@ -751,7 +769,7 @@ bool Analog_Output_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/ao.h b/src/bacnet/basic/object/ao.h index 948106e9..8da9db35 100644 --- a/src/bacnet/basic/object/ao.h +++ b/src/bacnet/basic/object/ao.h @@ -105,6 +105,9 @@ extern "C" { bool Analog_Output_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char * Analog_Output_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT char *Analog_Output_Description( diff --git a/src/bacnet/basic/object/av.c b/src/bacnet/basic/object/av.c index 274b2ba4..4be886a4 100644 --- a/src/bacnet/basic/object/av.c +++ b/src/bacnet/basic/object/av.c @@ -245,7 +245,7 @@ bool Analog_Value_Present_Value_Set( bool Analog_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text_string[32] = ""; + char text_string[32] = ""; bool status = false; struct analog_value_descr *pObject; @@ -287,6 +287,24 @@ bool Analog_Value_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Analog_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct analog_value_descr *pObject; + + pObject = Analog_Value_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, gets the event-state property value * diff --git a/src/bacnet/basic/object/av.h b/src/bacnet/basic/object/av.h index 6dab34fa..45842886 100644 --- a/src/bacnet/basic/object/av.h +++ b/src/bacnet/basic/object/av.h @@ -33,7 +33,7 @@ typedef struct analog_value_descr { float Prior_Value; float COV_Increment; bool Changed; - char* Object_Name; + const char* Object_Name; char* Description; BACNET_RELIABILITY Reliability; #if defined(INTRINSIC_REPORTING) @@ -83,7 +83,8 @@ extern "C" { bool Analog_Value_Name_Set( uint32_t object_instance, char *new_name); - char *Analog_Value_Name( + BACNET_STACK_EXPORT + const char *Analog_Value_Name_ASCII( uint32_t object_instance); BACNET_STACK_EXPORT diff --git a/src/bacnet/basic/object/bacfile.c b/src/bacnet/basic/object/bacfile.c index 8b72e1fa..fc1b3661 100644 --- a/src/bacnet/basic/object/bacfile.c +++ b/src/bacnet/basic/object/bacfile.c @@ -33,7 +33,7 @@ #define FILE_RECORD_SIZE MAX_OCTET_STRING_BYTES #endif struct object_data { - char *Object_Name; + const char *Object_Name; char *Pathname; BACNET_DATE_TIME Modification_Date; char *File_Type; @@ -206,7 +206,7 @@ bool bacfile_object_name_set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -214,6 +214,25 @@ bool bacfile_object_name_set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *bacfile_name_ansi(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + + /** * @brief Determines if a given object instance is valid * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/bacfile.h b/src/bacnet/basic/object/bacfile.h index a468bcb2..98240704 100644 --- a/src/bacnet/basic/object/bacfile.h +++ b/src/bacnet/basic/object/bacfile.h @@ -29,6 +29,7 @@ extern "C" { const int **pRequired, const int **pOptional, const int **pProprietary); + BACNET_STACK_EXPORT bool bacfile_object_name( uint32_t object_instance, @@ -38,6 +39,10 @@ extern "C" { uint32_t object_instance, char *new_name); BACNET_STACK_EXPORT + const char * bacfile_name_ansi( + uint32_t object_instance); + + BACNET_STACK_EXPORT bool bacfile_valid_instance( uint32_t object_instance); BACNET_STACK_EXPORT diff --git a/src/bacnet/basic/object/bi.c b/src/bacnet/basic/object/bi.c index 34aab70a..d18ebce1 100644 --- a/src/bacnet/basic/object/bi.c +++ b/src/bacnet/basic/object/bi.c @@ -581,7 +581,7 @@ static bool Binary_Input_Present_Value_Write( bool Binary_Input_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; struct object_data *pObject; @@ -614,15 +614,31 @@ bool Binary_Input_Name_Set(uint32_t object_instance, char *new_name) pObject = Binary_Input_Object(object_instance); if (pObject) { - if (new_name) { - status = true; - pObject->Object_Name = new_name; - } + status = true; + pObject->Object_Name = new_name; } return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Binary_Input_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Binary_Input_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, returns the polarity property. * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/bi.h b/src/bacnet/basic/object/bi.h index 91e45c66..b9ab0e5d 100644 --- a/src/bacnet/basic/object/bi.h +++ b/src/bacnet/basic/object/bi.h @@ -69,6 +69,9 @@ extern "C" { bool Binary_Input_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Binary_Input_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT BACNET_BINARY_PV Binary_Input_Present_Value( diff --git a/src/bacnet/basic/object/bitstring_value.c b/src/bacnet/basic/object/bitstring_value.c index 229578fd..6cc4411d 100644 --- a/src/bacnet/basic/object/bitstring_value.c +++ b/src/bacnet/basic/object/bitstring_value.c @@ -467,15 +467,31 @@ bool BitString_Value_Name_Set(uint32_t object_instance, char *new_name) pObject = BitString_Value_Object(object_instance); if (pObject) { - if (new_name) { - status = true; - pObject->Object_Name = new_name; - } + status = true; + pObject->Object_Name = new_name; } return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *BitString_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = BitString_Value_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, return the description. * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/bitstring_value.h b/src/bacnet/basic/object/bitstring_value.h index 3ddfa819..57cd6bb9 100644 --- a/src/bacnet/basic/object/bitstring_value.h +++ b/src/bacnet/basic/object/bitstring_value.h @@ -77,6 +77,9 @@ extern "C" { bool BitString_Value_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *BitString_Value_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT bool BitString_Value_Present_Value( diff --git a/src/bacnet/basic/object/blo.c b/src/bacnet/basic/object/blo.c index 9497ccb0..ffaaaffb 100644 --- a/src/bacnet/basic/object/blo.c +++ b/src/bacnet/basic/object/blo.c @@ -793,7 +793,7 @@ bool Binary_Lighting_Output_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -801,6 +801,24 @@ bool Binary_Lighting_Output_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Binary_Lighting_Output_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * @@ -840,7 +858,7 @@ bool Binary_Lighting_Output_Description_Set( struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/blo.h b/src/bacnet/basic/object/blo.h index 3f869733..5280b372 100644 --- a/src/bacnet/basic/object/blo.h +++ b/src/bacnet/basic/object/blo.h @@ -85,6 +85,8 @@ bool Binary_Lighting_Output_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Binary_Lighting_Output_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Binary_Lighting_Output_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT char *Binary_Lighting_Output_Description(uint32_t instance); diff --git a/src/bacnet/basic/object/bo.c b/src/bacnet/basic/object/bo.c index 6a2beb5b..db1e8c51 100644 --- a/src/bacnet/basic/object/bo.c +++ b/src/bacnet/basic/object/bo.c @@ -543,7 +543,7 @@ bool Binary_Output_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -551,6 +551,24 @@ bool Binary_Output_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Binary_Output_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the polarity property. * @@ -776,7 +794,7 @@ bool Binary_Output_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/bo.h b/src/bacnet/basic/object/bo.h index d47ce5b7..a8266f5d 100644 --- a/src/bacnet/basic/object/bo.h +++ b/src/bacnet/basic/object/bo.h @@ -67,6 +67,9 @@ extern "C" { bool Binary_Output_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Binary_Output_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT char *Binary_Output_Inactive_Text( diff --git a/src/bacnet/basic/object/bv.c b/src/bacnet/basic/object/bv.c index ee6a0c1b..04833b15 100644 --- a/src/bacnet/basic/object/bv.c +++ b/src/bacnet/basic/object/bv.c @@ -584,7 +584,7 @@ static bool Binary_Value_Present_Value_Write( bool Binary_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; struct object_data *pObject; @@ -617,15 +617,31 @@ bool Binary_Value_Name_Set(uint32_t object_instance, char *new_name) pObject = Binary_Value_Object(object_instance); if (pObject) { - if (new_name) { - status = true; - pObject->Object_Name = new_name; - } + status = true; + pObject->Object_Name = new_name; } return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Binary_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Binary_Value_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, returns the polarity property. * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/bv.h b/src/bacnet/basic/object/bv.h index 9acbbcbe..ec163f61 100644 --- a/src/bacnet/basic/object/bv.h +++ b/src/bacnet/basic/object/bv.h @@ -73,7 +73,7 @@ extern "C" { uint32_t object_instance, char *new_name); BACNET_STACK_EXPORT - char *Binary_Value_Name( + const char *Binary_Value_Name_ASCII( uint32_t object_instance); BACNET_STACK_EXPORT diff --git a/src/bacnet/basic/object/calendar.c b/src/bacnet/basic/object/calendar.c index c3c37c51..7bc8dae0 100644 --- a/src/bacnet/basic/object/calendar.c +++ b/src/bacnet/basic/object/calendar.c @@ -409,7 +409,7 @@ bool Calendar_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -417,6 +417,24 @@ bool Calendar_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Calendar_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * diff --git a/src/bacnet/basic/object/calendar.h b/src/bacnet/basic/object/calendar.h index c669b3b6..c8546d30 100644 --- a/src/bacnet/basic/object/calendar.h +++ b/src/bacnet/basic/object/calendar.h @@ -48,6 +48,8 @@ bool Calendar_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Calendar_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Calendar_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Calendar_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/channel.c b/src/bacnet/basic/object/channel.c index 70081ec6..28e991dc 100644 --- a/src/bacnet/basic/object/channel.c +++ b/src/bacnet/basic/object/channel.c @@ -1322,7 +1322,7 @@ bool Channel_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -1330,6 +1330,24 @@ bool Channel_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Channel_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the out-of-service * property value diff --git a/src/bacnet/basic/object/channel.h b/src/bacnet/basic/object/channel.h index 39ed0b35..6ce82ef5 100644 --- a/src/bacnet/basic/object/channel.h +++ b/src/bacnet/basic/object/channel.h @@ -120,6 +120,8 @@ bool Channel_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Channel_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Channel_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Channel_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/color_object.c b/src/bacnet/basic/object/color_object.c index 9d5dab9a..c5d901bc 100644 --- a/src/bacnet/basic/object/color_object.c +++ b/src/bacnet/basic/object/color_object.c @@ -714,7 +714,7 @@ bool Color_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { pObject->Object_Name = new_name; status = true; } @@ -722,6 +722,24 @@ bool Color_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name ANSI-C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Color_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * @@ -760,7 +778,7 @@ bool Color_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/color_object.h b/src/bacnet/basic/object/color_object.h index 0e450941..847e22dc 100644 --- a/src/bacnet/basic/object/color_object.h +++ b/src/bacnet/basic/object/color_object.h @@ -49,6 +49,8 @@ bool Color_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Color_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Color_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Color_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/color_temperature.c b/src/bacnet/basic/object/color_temperature.c index cab78b19..18f119b5 100644 --- a/src/bacnet/basic/object/color_temperature.c +++ b/src/bacnet/basic/object/color_temperature.c @@ -951,7 +951,7 @@ bool Color_Temperature_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -959,6 +959,24 @@ bool Color_Temperature_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Color_Temperature_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * @@ -997,7 +1015,7 @@ bool Color_Temperature_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/color_temperature.h b/src/bacnet/basic/object/color_temperature.h index 77508feb..4050785c 100644 --- a/src/bacnet/basic/object/color_temperature.h +++ b/src/bacnet/basic/object/color_temperature.h @@ -46,6 +46,8 @@ bool Color_Temperature_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Color_Temperature_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Color_Temperature_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Color_Temperature_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/command.c b/src/bacnet/basic/object/command.c index c6bad0e3..8cac65f3 100644 --- a/src/bacnet/basic/object/command.c +++ b/src/bacnet/basic/object/command.c @@ -296,7 +296,7 @@ bool Command_All_Writes_Successful_Set(uint32_t object_instance, bool value) bool Command_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; unsigned int index; bool status = false; diff --git a/src/bacnet/basic/object/credential_data_input.c b/src/bacnet/basic/object/credential_data_input.c index ee4b8ca7..d22ef472 100644 --- a/src/bacnet/basic/object/credential_data_input.c +++ b/src/bacnet/basic/object/credential_data_input.c @@ -118,7 +118,7 @@ unsigned Credential_Data_Input_Instance_To_Index(uint32_t object_instance) bool Credential_Data_Input_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_CREDENTIAL_DATA_INPUTS) { diff --git a/src/bacnet/basic/object/iv.c b/src/bacnet/basic/object/iv.c index 7f61e45f..2aad2d7a 100644 --- a/src/bacnet/basic/object/iv.c +++ b/src/bacnet/basic/object/iv.c @@ -43,8 +43,8 @@ struct integer_object { uint32_t COV_Increment; uint16_t Units; uint32_t Instance; - BACNET_CHARACTER_STRING Name; - BACNET_CHARACTER_STRING Description; + const char *Object_Name; + const char *Description; } INTERGER_VALUE_DESCR; /* These three arrays are used by the ReadPropertyMultiple handler */ @@ -233,22 +233,65 @@ bool Integer_Value_Present_Value_Set( bool Integer_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { + char text[32] = ""; bool status = false; + struct integer_object *pObject; - struct integer_object *pObject = Integer_Value_Object(object_instance); - - if (!object_name) { - return false; - } - + pObject = Integer_Value_Object(object_instance); if (pObject) { - *object_name = pObject->Name; - status = true; + if (pObject->Object_Name) { + status = + characterstring_init_ansi(object_name, pObject->Object_Name); + } else { + snprintf( + text, sizeof(text), "INTEGER-VALUE-%lu", + (unsigned long)object_instance); + status = characterstring_init_ansi(object_name, text); + } } return status; } +/** + * @brief For a given object instance-number, sets the object-name + * @param object_instance - object-instance number of the object + * @param new_name - holds the object-name to be set + * @return true if object-name was set + */ +bool Integer_Value_Name_Set(uint32_t object_instance, + const char *new_name) +{ + bool status = false; + struct integer_object *pObject; + + pObject = Integer_Value_Object(object_instance); + if (pObject) { + status = true; + pObject->Object_Name = new_name; + } + + return status; +} + +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Integer_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct integer_object *pObject; + + pObject = Integer_Value_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, return the description. * @@ -263,20 +306,64 @@ bool Integer_Value_Description( uint32_t object_instance, BACNET_CHARACTER_STRING *description) { bool status = false; - struct integer_object *pObject = Integer_Value_Object(object_instance); - - if (!description) { - return false; - } + struct integer_object *pObject; + pObject = Integer_Value_Object(object_instance); if (pObject) { - *description = pObject->Description; - return true; + if (pObject->Description) { + status = characterstring_init_ansi(description, + pObject->Description); + } else { + status = characterstring_init_ansi(description, ""); + } } return status; } +/** + * @brief For a given object instance-number, sets the description + * @param object_instance - object-instance number of the object + * @param new_name - holds the description to be set + * @return true if object-name was set + */ +bool Integer_Value_Description_Set(uint32_t object_instance, + const char *new_name) +{ + bool status = false; /* return value */ + struct integer_object *pObject; + + pObject = Integer_Value_Object(object_instance); + if (pObject) { + status = true; + pObject->Description = new_name; + } + + return status; +} + +/** + * @brief For a given object instance-number, returns the description + * @param object_instance - object-instance number of the object + * @return description text or NULL if not found + */ +char *Integer_Value_Description_ANSI(uint32_t object_instance) +{ + char *name = NULL; + struct integer_object *pObject; + + pObject = Integer_Value_Object(object_instance); + if (pObject) { + if (pObject->Description == NULL) { + name = ""; + } else { + name = (char *)pObject->Description; + } + } + + return name; +} + /** * For a given object instance-number, returns the units property value * @@ -643,8 +730,8 @@ uint32_t Integer_Value_Create(uint32_t object_instance) return BACNET_MAX_INSTANCE; } - characterstring_init_ansi(&pObject->Name, ""); - characterstring_init_ansi(&pObject->Description, ""); + pObject->Object_Name = NULL; + pObject->Description = NULL; pObject->COV_Increment = 1; pObject->Present_Value = 0; pObject->Prior_Value = 0; diff --git a/src/bacnet/basic/object/iv.h b/src/bacnet/basic/object/iv.h index 38dbd23e..a8f4dd56 100644 --- a/src/bacnet/basic/object/iv.h +++ b/src/bacnet/basic/object/iv.h @@ -42,6 +42,13 @@ extern "C" { bool Integer_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING * object_name); + BACNET_STACK_EXPORT + bool Integer_Value_Name_Set( + uint32_t object_instance, + const char *new_name); + BACNET_STACK_EXPORT + const char *Integer_Value_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT int Integer_Value_Read_Property( @@ -78,7 +85,6 @@ extern "C" { uint32_t object_instance, uint32_t value); - BACNET_STACK_EXPORT bool Integer_Value_Description( uint32_t object_instance, @@ -86,7 +92,10 @@ extern "C" { BACNET_STACK_EXPORT bool Integer_Value_Description_Set( uint32_t instance, - char *new_name); + const char *new_name); + BACNET_STACK_EXPORT + char *Integer_Value_Description_ANSI( + uint32_t object_instance); BACNET_STACK_EXPORT uint16_t Integer_Value_Units( diff --git a/src/bacnet/basic/object/lc.c b/src/bacnet/basic/object/lc.c index a4aa7c49..03b9c08a 100644 --- a/src/bacnet/basic/object/lc.c +++ b/src/bacnet/basic/object/lc.c @@ -266,15 +266,31 @@ bool Load_Control_Name_Set(uint32_t object_instance, char *new_name) pObject = Object_Instance_Data(object_instance); if (pObject) { - if (new_name) { - status = true; - pObject->Object_Name = new_name; - } + status = true; + pObject->Object_Name = new_name; } return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Load_Control_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Object_Instance_Data(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief convert the shed level request into a percentage of full duty * baseline power diff --git a/src/bacnet/basic/object/lc.h b/src/bacnet/basic/object/lc.h index b7809d49..525b6790 100644 --- a/src/bacnet/basic/object/lc.h +++ b/src/bacnet/basic/object/lc.h @@ -93,6 +93,8 @@ bool Load_Control_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Load_Control_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Load_Control_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT BACNET_SHED_STATE Load_Control_Present_Value(uint32_t object_instance); diff --git a/src/bacnet/basic/object/lo.c b/src/bacnet/basic/object/lo.c index d9b30612..f1cdc59a 100644 --- a/src/bacnet/basic/object/lo.c +++ b/src/bacnet/basic/object/lo.c @@ -843,7 +843,7 @@ bool Lighting_Output_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -851,6 +851,24 @@ bool Lighting_Output_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Lighting_Output_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * @@ -889,7 +907,7 @@ bool Lighting_Output_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/lo.h b/src/bacnet/basic/object/lo.h index c1199afa..922e3bfd 100644 --- a/src/bacnet/basic/object/lo.h +++ b/src/bacnet/basic/object/lo.h @@ -100,6 +100,9 @@ extern "C" { bool Lighting_Output_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Lighting_Output_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT char *Lighting_Output_Description( diff --git a/src/bacnet/basic/object/lsp.c b/src/bacnet/basic/object/lsp.c index 890b2be1..c932d1ca 100644 --- a/src/bacnet/basic/object/lsp.c +++ b/src/bacnet/basic/object/lsp.c @@ -203,6 +203,44 @@ bool Life_Safety_Point_Object_Name( return status; } +/** + * @brief For a given object instance-number, sets the object-name + * @param object_instance - object-instance number of the object + * @param new_name - holds the object-name to be set + * @return true if object-name was set + */ +bool Life_Safety_Point_Name_Set(uint32_t object_instance, const char *new_name) +{ + bool status = false; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + status = true; + pObject->Object_Name = new_name; + } + + return status; +} + +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Life_Safety_Point_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, gets the property value * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/lsp.h b/src/bacnet/basic/object/lsp.h index a01da34c..da3d3152 100644 --- a/src/bacnet/basic/object/lsp.h +++ b/src/bacnet/basic/object/lsp.h @@ -45,8 +45,10 @@ extern "C" { BACNET_STACK_EXPORT bool Life_Safety_Point_Name_Set( uint32_t object_instance, - char *new_name); - + const char *new_name); + BACNET_STACK_EXPORT + const char *Life_Safety_Point_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT BACNET_LIFE_SAFETY_STATE Life_Safety_Point_Present_Value( diff --git a/src/bacnet/basic/object/lsz.c b/src/bacnet/basic/object/lsz.c index 02fc11f7..81ca47aa 100644 --- a/src/bacnet/basic/object/lsz.c +++ b/src/bacnet/basic/object/lsz.c @@ -214,6 +214,44 @@ bool Life_Safety_Zone_Object_Name( return status; } +/** + * @brief For a given object instance-number, sets the object-name + * @param object_instance - object-instance number of the object + * @param new_name - holds the object-name to be set + * @return true if object-name was set + */ +bool Life_Safety_Zone_Name_Set(uint32_t object_instance, const char *new_name) +{ + bool status = false; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + status = true; + pObject->Object_Name = new_name; + } + + return status; +} + +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Life_Safety_Zone_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, gets the property value * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/lsz.h b/src/bacnet/basic/object/lsz.h index bad85e58..1c1a4bbd 100644 --- a/src/bacnet/basic/object/lsz.h +++ b/src/bacnet/basic/object/lsz.h @@ -45,8 +45,10 @@ extern "C" { BACNET_STACK_EXPORT bool Life_Safety_Zone_Name_Set( uint32_t object_instance, - char *new_name); - + const char *new_name); + BACNET_STACK_EXPORT + const char *Life_Safety_Zone_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT BACNET_LIFE_SAFETY_STATE Life_Safety_Zone_Present_Value( diff --git a/src/bacnet/basic/object/ms-input.c b/src/bacnet/basic/object/ms-input.c index cba41e9f..93edf151 100644 --- a/src/bacnet/basic/object/ms-input.c +++ b/src/bacnet/basic/object/ms-input.c @@ -488,7 +488,7 @@ bool Multistate_Input_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Multistate_Input_Object(object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -496,6 +496,24 @@ bool Multistate_Input_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Multistate_Input_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Multistate_Input_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, gets the reliability. * @param object_instance - object-instance number of the object @@ -604,7 +622,7 @@ bool Multistate_Input_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Multistate_Input_Object(object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/ms-input.h b/src/bacnet/basic/object/ms-input.h index fd4d9369..8911ea4d 100644 --- a/src/bacnet/basic/object/ms-input.h +++ b/src/bacnet/basic/object/ms-input.h @@ -71,6 +71,9 @@ extern "C" { bool Multistate_Input_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Multistate_Input_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT uint32_t Multistate_Input_Present_Value( diff --git a/src/bacnet/basic/object/mso.c b/src/bacnet/basic/object/mso.c index 41bf4296..5f1eb9d9 100644 --- a/src/bacnet/basic/object/mso.c +++ b/src/bacnet/basic/object/mso.c @@ -605,7 +605,7 @@ bool Multistate_Output_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -613,6 +613,24 @@ bool Multistate_Output_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Multistate_Output_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, returns the state-text in * a C string. @@ -808,7 +826,7 @@ bool Multistate_Output_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/mso.h b/src/bacnet/basic/object/mso.h index 58751ce6..6a7f685d 100644 --- a/src/bacnet/basic/object/mso.h +++ b/src/bacnet/basic/object/mso.h @@ -66,6 +66,9 @@ extern "C" { bool Multistate_Output_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Multistate_Output_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT uint32_t Multistate_Output_Present_Value( diff --git a/src/bacnet/basic/object/msv.c b/src/bacnet/basic/object/msv.c index 0937ba5a..7c2f1963 100644 --- a/src/bacnet/basic/object/msv.c +++ b/src/bacnet/basic/object/msv.c @@ -488,7 +488,7 @@ bool Multistate_Value_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Multistate_Value_Object(object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -496,6 +496,24 @@ bool Multistate_Value_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Multistate_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Multistate_Value_Object(object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * @brief For a given object instance-number, gets the reliability. * @param object_instance - object-instance number of the object @@ -604,7 +622,7 @@ bool Multistate_Value_Description_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Multistate_Value_Object(object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Description = new_name; } diff --git a/src/bacnet/basic/object/msv.h b/src/bacnet/basic/object/msv.h index d4e66210..3c716c22 100644 --- a/src/bacnet/basic/object/msv.h +++ b/src/bacnet/basic/object/msv.h @@ -70,6 +70,9 @@ extern "C" { bool Multistate_Value_Name_Set( uint32_t object_instance, char *new_name); + BACNET_STACK_EXPORT + const char *Multistate_Value_Name_ASCII( + uint32_t object_instance); BACNET_STACK_EXPORT uint32_t Multistate_Value_Present_Value( diff --git a/src/bacnet/basic/object/nc.c b/src/bacnet/basic/object/nc.c index 5615b609..672f280f 100644 --- a/src/bacnet/basic/object/nc.c +++ b/src/bacnet/basic/object/nc.c @@ -129,7 +129,7 @@ unsigned Notification_Class_Instance_To_Index(uint32_t object_instance) bool Notification_Class_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; unsigned int index; bool status = false; diff --git a/src/bacnet/basic/object/netport.c b/src/bacnet/basic/object/netport.c index c3fd1b8e..2ef1d7f5 100644 --- a/src/bacnet/basic/object/netport.c +++ b/src/bacnet/basic/object/netport.c @@ -322,6 +322,7 @@ bool Network_Port_Name_Set(uint32_t object_instance, char *new_name) index = Network_Port_Instance_To_Index(object_instance); if (index < BACNET_NETWORK_PORTS_MAX) { Object_List[index].Object_Name = new_name; + status = true; } return status; diff --git a/src/bacnet/basic/object/osv.c b/src/bacnet/basic/object/osv.c index 6897e4fd..ade552da 100644 --- a/src/bacnet/basic/object/osv.c +++ b/src/bacnet/basic/object/osv.c @@ -145,7 +145,7 @@ BACNET_OCTET_STRING *OctetString_Value_Present_Value(uint32_t object_instance) bool OctetString_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_OCTETSTRING_VALUES) { diff --git a/src/bacnet/basic/object/piv.c b/src/bacnet/basic/object/piv.c index 73364ae8..8fbe971e 100644 --- a/src/bacnet/basic/object/piv.c +++ b/src/bacnet/basic/object/piv.c @@ -146,7 +146,7 @@ uint32_t PositiveInteger_Value_Present_Value(uint32_t object_instance) bool PositiveInteger_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_POSITIVEINTEGER_VALUES) { diff --git a/src/bacnet/basic/object/schedule.c b/src/bacnet/basic/object/schedule.c index 57049a4c..94f40ead 100644 --- a/src/bacnet/basic/object/schedule.c +++ b/src/bacnet/basic/object/schedule.c @@ -182,7 +182,7 @@ unsigned Schedule_Instance_To_Index(uint32_t instance) bool Schedule_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; unsigned int index; bool status = false; diff --git a/src/bacnet/basic/object/structured_view.c b/src/bacnet/basic/object/structured_view.c index 4fe7a680..0efe7aaf 100644 --- a/src/bacnet/basic/object/structured_view.c +++ b/src/bacnet/basic/object/structured_view.c @@ -201,7 +201,7 @@ bool Structured_View_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -209,6 +209,24 @@ bool Structured_View_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Structured_View_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + /** * For a given object instance-number, returns the description * diff --git a/src/bacnet/basic/object/structured_view.h b/src/bacnet/basic/object/structured_view.h index 98b0dfb7..41ecc830 100644 --- a/src/bacnet/basic/object/structured_view.h +++ b/src/bacnet/basic/object/structured_view.h @@ -50,6 +50,8 @@ bool Structured_View_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Structured_View_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Structured_View_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Structured_View_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/time_value.c b/src/bacnet/basic/object/time_value.c index d969e29c..9a21aeb4 100644 --- a/src/bacnet/basic/object/time_value.c +++ b/src/bacnet/basic/object/time_value.c @@ -348,7 +348,7 @@ bool Time_Value_Name_Set(uint32_t object_instance, char *new_name) struct object_data *pObject; pObject = Keylist_Data(Object_List, object_instance); - if (pObject && new_name) { + if (pObject) { status = true; pObject->Object_Name = new_name; } @@ -356,6 +356,25 @@ bool Time_Value_Name_Set(uint32_t object_instance, char *new_name) return status; } +/** + * @brief Return the object name C string + * @param object_instance [in] BACnet object instance number + * @return object name or NULL if not found + */ +const char *Time_Value_Name_ASCII(uint32_t object_instance) +{ + const char *name = NULL; + struct object_data *pObject; + + pObject = Keylist_Data(Object_List, object_instance); + if (pObject) { + name = pObject->Object_Name; + } + + return name; +} + + /** * For a given object instance-number, returns the description * diff --git a/src/bacnet/basic/object/time_value.h b/src/bacnet/basic/object/time_value.h index e5a6e3f3..413afad9 100644 --- a/src/bacnet/basic/object/time_value.h +++ b/src/bacnet/basic/object/time_value.h @@ -48,6 +48,8 @@ bool Time_Value_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name); BACNET_STACK_EXPORT bool Time_Value_Name_Set(uint32_t object_instance, char *new_name); +BACNET_STACK_EXPORT +const char *Time_Value_Name_ASCII(uint32_t object_instance); BACNET_STACK_EXPORT int Time_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata); diff --git a/src/bacnet/basic/object/trendlog.c b/src/bacnet/basic/object/trendlog.c index 8bfb17b0..638538d2 100644 --- a/src/bacnet/basic/object/trendlog.c +++ b/src/bacnet/basic/object/trendlog.c @@ -230,7 +230,7 @@ void Trend_Log_Init(void) bool Trend_Log_Object_Name( uint32_t object_instance, BACNET_CHARACTER_STRING *object_name) { - static char text[32] = ""; /* okay for single thread */ + char text[32] = ""; bool status = false; if (object_instance < MAX_TREND_LOGS) { diff --git a/test/bacnet/basic/object/ai/src/main.c b/test/bacnet/basic/object/ai/src/main.c index a374e703..93c618a7 100644 --- a/test/bacnet/basic/object/ai/src/main.c +++ b/test/bacnet/basic/object/ai/src/main.c @@ -40,6 +40,10 @@ static void testAnalogInput(void) OBJECT_ANALOG_INPUT, object_instance, Analog_Input_Property_Lists, Analog_Input_Read_Property, Analog_Input_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Analog_Input_Name_Set, + Analog_Input_Name_ASCII); status = Analog_Input_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/ao/src/main.c b/test/bacnet/basic/object/ao/src/main.c index 7e887130..c640b6a3 100644 --- a/test/bacnet/basic/object/ao/src/main.c +++ b/test/bacnet/basic/object/ao/src/main.c @@ -28,7 +28,7 @@ static void testAnalogOutput(void) bool status = false; unsigned count = 0; uint32_t object_instance = BACNET_MAX_INSTANCE, test_object_instance = 0; - const int skip_fail_property_list[] = { PROP_PRIORITY_ARRAY, -1 }; + const int skip_fail_property_list[] = { -1 }; Analog_Output_Init(); object_instance = Analog_Output_Create(object_instance); @@ -40,6 +40,10 @@ static void testAnalogOutput(void) OBJECT_ANALOG_OUTPUT, object_instance, Analog_Output_Property_Lists, Analog_Output_Read_Property, Analog_Output_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Analog_Output_Name_Set, + Analog_Output_Name_ASCII); status = Analog_Output_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/av/src/main.c b/test/bacnet/basic/object/av/src/main.c index b46f4587..a918f436 100644 --- a/test/bacnet/basic/object/av/src/main.c +++ b/test/bacnet/basic/object/av/src/main.c @@ -40,6 +40,10 @@ static void testAnalog_Value(void) OBJECT_ANALOG_VALUE, object_instance, Analog_Value_Property_Lists, Analog_Value_Read_Property, Analog_Value_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Analog_Value_Name_Set, + Analog_Value_Name_ASCII); status = Analog_Value_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/bi/src/main.c b/test/bacnet/basic/object/bi/src/main.c index f6d69a2b..c826cf06 100644 --- a/test/bacnet/basic/object/bi/src/main.c +++ b/test/bacnet/basic/object/bi/src/main.c @@ -41,6 +41,10 @@ static void testBinaryInput(void) OBJECT_BINARY_INPUT, object_instance, Binary_Input_Property_Lists, Binary_Input_Read_Property, Binary_Input_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Binary_Input_Name_Set, + Binary_Input_Name_ASCII); status = Binary_Input_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/bitstring_value/src/main.c b/test/bacnet/basic/object/bitstring_value/src/main.c index cbd4bdee..27098138 100644 --- a/test/bacnet/basic/object/bitstring_value/src/main.c +++ b/test/bacnet/basic/object/bitstring_value/src/main.c @@ -52,6 +52,10 @@ static void test_BitString_Value_Object(void) OBJECT_BINARY_INPUT, instance, BitString_Value_Property_Lists, BitString_Value_Read_Property, BitString_Value_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + instance, + BitString_Value_Name_Set, + BitString_Value_Name_ASCII); /* test specific WriteProperty values */ BitString_Value_Write_Disable(instance); status = BitString_Value_Write_Enabled(instance); diff --git a/test/bacnet/basic/object/blo/src/main.c b/test/bacnet/basic/object/blo/src/main.c index b976afe2..90aa31c3 100644 --- a/test/bacnet/basic/object/blo/src/main.c +++ b/test/bacnet/basic/object/blo/src/main.c @@ -36,6 +36,8 @@ static void testBinaryLightingOutput(void) uint32_t test_instance = 0; bool status = false; unsigned index; + const char *test_name = NULL; + char *sample_name = "sample"; Binary_Lighting_Output_Init(); test_instance = Binary_Lighting_Output_Create(instance); @@ -129,6 +131,15 @@ static void testBinaryLightingOutput(void) zassert_equal(len, BACNET_STATUS_ERROR, NULL); status = Binary_Lighting_Output_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Binary_Lighting_Output_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Binary_Lighting_Output_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Binary_Lighting_Output_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Binary_Lighting_Output_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); /* check the delete function */ status = Binary_Lighting_Output_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/bo/src/main.c b/test/bacnet/basic/object/bo/src/main.c index e878a61b..3a4adf81 100644 --- a/test/bacnet/basic/object/bo/src/main.c +++ b/test/bacnet/basic/object/bo/src/main.c @@ -40,6 +40,10 @@ static void testBinaryOutput(void) OBJECT_BINARY_OUTPUT, object_instance, Binary_Output_Property_Lists, Binary_Output_Read_Property, Binary_Output_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Binary_Output_Name_Set, + Binary_Output_Name_ASCII); status = Binary_Output_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/bv/src/main.c b/test/bacnet/basic/object/bv/src/main.c index 9653b696..9641ee27 100644 --- a/test/bacnet/basic/object/bv/src/main.c +++ b/test/bacnet/basic/object/bv/src/main.c @@ -42,6 +42,10 @@ static void testBinary_Value(void) OBJECT_BINARY_VALUE, object_instance, Binary_Value_Property_Lists, Binary_Value_Read_Property, Binary_Value_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Binary_Value_Name_Set, + Binary_Value_Name_ASCII); status = Binary_Value_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/calendar/src/main.c b/test/bacnet/basic/object/calendar/src/main.c index 6f8f76fb..6d695803 100644 --- a/test/bacnet/basic/object/calendar/src/main.c +++ b/test/bacnet/basic/object/calendar/src/main.c @@ -37,6 +37,8 @@ static void testCalendar(void) uint32_t test_instance = 0; bool status = false; unsigned index; + const char *test_name = NULL; + char *sample_name = "sample"; Calendar_Init(); test_instance = Calendar_Create(instance); @@ -127,6 +129,15 @@ static void testCalendar(void) zassert_equal(len, BACNET_STATUS_ERROR, NULL); status = Calendar_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Calendar_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Calendar_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Calendar_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Calendar_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); /* check the delete function */ status = Calendar_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/channel/src/main.c b/test/bacnet/basic/object/channel/src/main.c index 9b200fe6..e4f72870 100644 --- a/test/bacnet/basic/object/channel/src/main.c +++ b/test/bacnet/basic/object/channel/src/main.c @@ -34,6 +34,8 @@ static void test_Channel_ReadProperty(void) unsigned count = 0; bool status = false; unsigned index; + const char *test_name = NULL; + char *sample_name = "sample"; Channel_Init(); Channel_Create(instance); @@ -126,12 +128,23 @@ static void test_Channel_ReadProperty(void) } pOptional++; } + /* check for unsupported property - use ALL */ rpdata.object_property = PROP_ALL; len = Channel_Read_Property(&rpdata); zassert_equal(len, BACNET_STATUS_ERROR, NULL); wpdata.object_property = PROP_ALL; status = Channel_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Channel_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Channel_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Channel_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Channel_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ status = Channel_Delete(instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/color_object/src/main.c b/test/bacnet/basic/object/color_object/src/main.c index 415f61c4..c7ffda96 100644 --- a/test/bacnet/basic/object/color_object/src/main.c +++ b/test/bacnet/basic/object/color_object/src/main.c @@ -36,6 +36,8 @@ static void testColorObject(void) BACNET_WRITE_PROPERTY_DATA wpdata = { 0 }; bool status = false; unsigned index; + const char *test_name = NULL; + char *sample_name = "sample"; Color_Init(); Color_Create(instance); @@ -119,12 +121,23 @@ static void testColorObject(void) } pOptional++; } + /* check for unsupported property - use ALL */ rpdata.object_property = PROP_ALL; len = Color_Read_Property(&rpdata); zassert_equal(len, BACNET_STATUS_ERROR, NULL); wpdata.object_property = PROP_ALL; status = Color_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Color_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Color_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Color_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Color_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ status = Color_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/color_temperature/src/main.c b/test/bacnet/basic/object/color_temperature/src/main.c index caeee6ac..5f0dd292 100644 --- a/test/bacnet/basic/object/color_temperature/src/main.c +++ b/test/bacnet/basic/object/color_temperature/src/main.c @@ -35,6 +35,8 @@ static void testColorTemperature(void) const uint32_t instance = 123; BACNET_WRITE_PROPERTY_DATA wpdata = { 0 }; bool status = false; + const char *test_name = NULL; + char *sample_name = "sample"; Color_Temperature_Init(); Color_Temperature_Create(instance); @@ -114,12 +116,23 @@ static void testColorTemperature(void) } pOptional++; } + /* check for unsupported property - use ALL */ rpdata.object_property = PROP_ALL; len = Color_Temperature_Read_Property(&rpdata); zassert_equal(len, BACNET_STATUS_ERROR, NULL); wpdata.object_property = PROP_ALL; status = Color_Temperature_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Color_Temperature_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Color_Temperature_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Color_Temperature_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Color_Temperature_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ status = Color_Temperature_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/iv/src/main.c b/test/bacnet/basic/object/iv/src/main.c index 3378183e..52708362 100644 --- a/test/bacnet/basic/object/iv/src/main.c +++ b/test/bacnet/basic/object/iv/src/main.c @@ -26,6 +26,8 @@ static void testInteger_Value(void) unsigned count = 0; uint32_t object_instance = BACNET_MAX_INSTANCE, test_object_instance = 0; const int skip_fail_property_list[] = { -1 }; + const char *test_name = NULL; + char *sample_name = "sample"; Integer_Value_Init(); object_instance = Integer_Value_Create(object_instance); @@ -37,6 +39,16 @@ static void testInteger_Value(void) OBJECT_INTEGER_VALUE, object_instance, Integer_Value_Property_Lists, Integer_Value_Read_Property, Integer_Value_Write_Property, skip_fail_property_list); + /* test the ASCII name get/set */ + status = Integer_Value_Name_Set(object_instance, sample_name); + zassert_true(status, NULL); + test_name = Integer_Value_Name_ASCII(object_instance); + zassert_equal(test_name, sample_name, NULL); + status = Integer_Value_Name_Set(object_instance, NULL); + zassert_true(status, NULL); + test_name = Integer_Value_Name_ASCII(object_instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ status = Integer_Value_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/lc/src/main.c b/test/bacnet/basic/object/lc/src/main.c index 1ea8d6a1..f6cd5b86 100644 --- a/test/bacnet/basic/object/lc/src/main.c +++ b/test/bacnet/basic/object/lc/src/main.c @@ -657,6 +657,10 @@ static void test_Load_Control_Read_Write_Property(void) OBJECT_LOAD_CONTROL, object_instance, Load_Control_Property_Lists, Load_Control_Read_Property, Load_Control_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Load_Control_Name_Set, + Load_Control_Name_ASCII); test_teardown(object_instance); } diff --git a/test/bacnet/basic/object/lo/src/main.c b/test/bacnet/basic/object/lo/src/main.c index 937eef6d..89a80432 100644 --- a/test/bacnet/basic/object/lo/src/main.c +++ b/test/bacnet/basic/object/lo/src/main.c @@ -38,6 +38,8 @@ static void testLightingOutput(void) bool status = false; unsigned index; uint16_t milliseconds = 10; + const char *test_name = NULL; + char *sample_name = "sample"; Lighting_Output_Init(); Lighting_Output_Create(instance); @@ -131,6 +133,15 @@ static void testLightingOutput(void) zassert_false(status, NULL); /* check the dimming/ramping/stepping engine*/ Lighting_Output_Timer(instance, milliseconds); + /* test the ASCII name get/set */ + status = Lighting_Output_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Lighting_Output_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Lighting_Output_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Lighting_Output_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); /* check the delete function */ status = Lighting_Output_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/lsp/src/main.c b/test/bacnet/basic/object/lsp/src/main.c index fbfe93d3..f922bb6a 100644 --- a/test/bacnet/basic/object/lsp/src/main.c +++ b/test/bacnet/basic/object/lsp/src/main.c @@ -39,6 +39,8 @@ static void testLifeSafetyPoint(void) BACNET_WRITE_PROPERTY_DATA wpdata = { 0 }; bool status = false; unsigned index; + const char *test_name = NULL; + char *sample_name = "sample"; Life_Safety_Point_Init(); Life_Safety_Point_Create(instance); @@ -126,12 +128,23 @@ static void testLifeSafetyPoint(void) } pOptional++; } + /* check for unsupported property - use ALL */ rpdata.object_property = PROP_ALL; len = Life_Safety_Point_Read_Property(&rpdata); zassert_equal(len, BACNET_STATUS_ERROR, NULL); wpdata.object_property = PROP_ALL; status = Life_Safety_Point_Write_Property(&wpdata); zassert_false(status, NULL); + /* test the ASCII name get/set */ + status = Life_Safety_Point_Name_Set(instance, sample_name); + zassert_true(status, NULL); + test_name = Life_Safety_Point_Name_ASCII(instance); + zassert_equal(test_name, sample_name, NULL); + status = Life_Safety_Point_Name_Set(instance, NULL); + zassert_true(status, NULL); + test_name = Life_Safety_Point_Name_ASCII(instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ status = Life_Safety_Point_Delete(instance); zassert_true(status, NULL); diff --git a/test/bacnet/basic/object/lsz/src/main.c b/test/bacnet/basic/object/lsz/src/main.c index 38634c0b..a6826b6b 100644 --- a/test/bacnet/basic/object/lsz/src/main.c +++ b/test/bacnet/basic/object/lsz/src/main.c @@ -27,9 +27,12 @@ ZTEST(testsLifeSafetyZone, testLifeSafetyZone) static void testLifeSafetyZone(void) #endif { + bool status; unsigned count = 0; uint32_t object_instance = 0, test_object_instance = 0; const int skip_fail_property_list[] = { -1 }; + const char *test_name = NULL; + char *sample_name = "sample"; Life_Safety_Zone_Init(); object_instance = Life_Safety_Zone_Create(BACNET_MAX_INSTANCE); @@ -41,6 +44,18 @@ static void testLifeSafetyZone(void) OBJECT_LIFE_SAFETY_ZONE, object_instance, Life_Safety_Zone_Property_Lists, Life_Safety_Zone_Read_Property, Life_Safety_Zone_Write_Property, skip_fail_property_list); + /* test the ASCII name get/set */ + status = Life_Safety_Zone_Name_Set(object_instance, sample_name); + zassert_true(status, NULL); + test_name = Life_Safety_Zone_Name_ASCII(object_instance); + zassert_equal(test_name, sample_name, NULL); + status = Life_Safety_Zone_Name_Set(object_instance, NULL); + zassert_true(status, NULL); + test_name = Life_Safety_Zone_Name_ASCII(object_instance); + zassert_equal(test_name, NULL, NULL); + /* cleanup */ + status = Life_Safety_Zone_Delete(object_instance); + } /** * @} diff --git a/test/bacnet/basic/object/ms-input/src/main.c b/test/bacnet/basic/object/ms-input/src/main.c index 6f9b854e..46c4bae9 100644 --- a/test/bacnet/basic/object/ms-input/src/main.c +++ b/test/bacnet/basic/object/ms-input/src/main.c @@ -41,6 +41,10 @@ static void testMultistateInput(void) OBJECT_MULTI_STATE_INPUT, object_instance, Multistate_Input_Property_Lists, Multistate_Input_Read_Property, Multistate_Input_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Multistate_Input_Name_Set, + Multistate_Input_Name_ASCII); status = Multistate_Input_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/mso/src/main.c b/test/bacnet/basic/object/mso/src/main.c index 0a5ca5fc..5c6bf797 100644 --- a/test/bacnet/basic/object/mso/src/main.c +++ b/test/bacnet/basic/object/mso/src/main.c @@ -40,6 +40,10 @@ static void testMultistateOutput(void) OBJECT_MULTI_STATE_OUTPUT, object_instance, Multistate_Output_Property_Lists, Multistate_Output_Read_Property, Multistate_Output_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Multistate_Output_Name_Set, + Multistate_Output_Name_ASCII); status = Multistate_Output_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/msv/src/main.c b/test/bacnet/basic/object/msv/src/main.c index efa81eb2..9e136e86 100644 --- a/test/bacnet/basic/object/msv/src/main.c +++ b/test/bacnet/basic/object/msv/src/main.c @@ -41,6 +41,10 @@ static void testMultistateValue(void) OBJECT_MULTI_STATE_VALUE, object_instance, Multistate_Value_Property_Lists, Multistate_Value_Read_Property, Multistate_Value_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Multistate_Value_Name_Set, + Multistate_Value_Name_ASCII); status = Multistate_Value_Delete(object_instance); zassert_true(status, NULL); } diff --git a/test/bacnet/basic/object/netport/src/main.c b/test/bacnet/basic/object/netport/src/main.c index aff2a724..51925e35 100644 --- a/test/bacnet/basic/object/netport/src/main.c +++ b/test/bacnet/basic/object/netport/src/main.c @@ -57,6 +57,10 @@ static void test_network_port(void) OBJECT_NETWORK_PORT, object_instance, Network_Port_Property_Lists, Network_Port_Read_Property, Network_Port_Write_Property, known_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Network_Port_Name_Set, + Network_Port_Object_Name_ASCII); port++; } diff --git a/test/bacnet/basic/object/structured_view/src/main.c b/test/bacnet/basic/object/structured_view/src/main.c index cd5bcfe7..ea78f655 100644 --- a/test/bacnet/basic/object/structured_view/src/main.c +++ b/test/bacnet/basic/object/structured_view/src/main.c @@ -40,6 +40,10 @@ static void test_object_structured_view(void) bacnet_object_properties_read_write_test( OBJECT_STRUCTURED_VIEW, instance, Structured_View_Property_Lists, Structured_View_Read_Property, NULL, skip_fail_property_list); + bacnet_object_name_ascii_test( + instance, + Structured_View_Name_Set, + Structured_View_Name_ASCII); } /** * @} diff --git a/test/bacnet/basic/object/test/property_test.c b/test/bacnet/basic/object/test/property_test.c index 72ab21b0..8436ae4f 100644 --- a/test/bacnet/basic/object/test/property_test.c +++ b/test/bacnet/basic/object/test/property_test.c @@ -11,6 +11,7 @@ #include #include #include +#include "property_test.h" /** * @brief Perform a read/write test on a property @@ -221,3 +222,28 @@ void bacnet_object_properties_read_write_test( zassert_false(status, NULL); } } + +/** + * @brief Perform a test on the ASCII name of an object + * @param object_instance The instance number of the object to test + * @param ascii_set The function to set the ASCII name + * @param ascii_get The function to get the ASCII name + */ +void bacnet_object_name_ascii_test( + uint32_t object_instance, + object_name_ascii_set_function ascii_set, + object_name_ascii_function ascii_get) +{ + bool status = false; + const char *test_name = NULL; + char *sample_name = "sample"; + + status = ascii_set(object_instance, sample_name); + zassert_true(status, NULL); + test_name = ascii_get(object_instance); + zassert_equal(test_name, sample_name, NULL); + status = ascii_set(object_instance, NULL); + zassert_true(status, NULL); + test_name = ascii_get(object_instance); + zassert_equal(test_name, NULL, NULL); +} diff --git a/test/bacnet/basic/object/test/property_test.h b/test/bacnet/basic/object/test/property_test.h index 6f2e9b99..b39a54c9 100644 --- a/test/bacnet/basic/object/test/property_test.h +++ b/test/bacnet/basic/object/test/property_test.h @@ -13,6 +13,17 @@ #include #include +/* function API pattern for testing ASCII name get/set */ +typedef bool (*object_name_ascii_set_function) (uint32_t object_instance, + char *new_name); +typedef const char * (*object_name_ascii_function) ( + uint32_t object_instance); + +void bacnet_object_name_ascii_test( + uint32_t object_instance, + object_name_ascii_set_function ascii_set, + object_name_ascii_function ascii_get); + void bacnet_object_properties_read_write_test( BACNET_OBJECT_TYPE object_type, uint32_t object_instance, diff --git a/test/bacnet/basic/object/time_value/src/main.c b/test/bacnet/basic/object/time_value/src/main.c index a4982b7f..906b5673 100644 --- a/test/bacnet/basic/object/time_value/src/main.c +++ b/test/bacnet/basic/object/time_value/src/main.c @@ -40,6 +40,10 @@ static void testTimeValue(void) OBJECT_TIME_VALUE, object_instance, Time_Value_Property_Lists, Time_Value_Read_Property, Time_Value_Write_Property, skip_fail_property_list); + bacnet_object_name_ascii_test( + object_instance, + Time_Value_Name_Set, + Time_Value_Name_ASCII); /* check the delete function */ status = Time_Value_Delete(object_instance); zassert_true(status, NULL);