Fixed writing to the Channel object when no member value coercion was required. (#1176)
* 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.
This commit is contained in:
@@ -23,6 +23,7 @@ set(ZTST_DIR "${TST_DIR}/ztest/src")
|
||||
add_compile_definitions(
|
||||
BIG_ENDIAN=0
|
||||
CONFIG_ZTEST=1
|
||||
CHANNEL_MEMBERS_MAX=16
|
||||
)
|
||||
|
||||
include_directories(
|
||||
|
||||
@@ -16,6 +16,15 @@
|
||||
* @addtogroup bacnet_tests
|
||||
* @{
|
||||
*/
|
||||
static BACNET_WRITE_PROPERTY_DATA Write_Property_Internal_Data;
|
||||
static bool Write_Property_Internal(BACNET_WRITE_PROPERTY_DATA *wp_data)
|
||||
{
|
||||
memcpy(
|
||||
&Write_Property_Internal_Data, wp_data,
|
||||
sizeof(BACNET_WRITE_PROPERTY_DATA));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test
|
||||
@@ -32,9 +41,12 @@ static void test_Channel_Property_Read_Write(void)
|
||||
const int32_t skip_fail_property_list[] = { -1 };
|
||||
BACNET_CHANNEL_VALUE channel_value = { 0 };
|
||||
BACNET_WRITE_PROPERTY_DATA wp_data = { 0 };
|
||||
BACNET_WRITE_GROUP_DATA wg_data = { 0 };
|
||||
|
||||
BACNET_APPLICATION_DATA_VALUE value = { 0 };
|
||||
BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE member = { 0 };
|
||||
|
||||
Channel_Write_Property_Internal_Callback_Set(Write_Property_Internal);
|
||||
Channel_Init();
|
||||
Channel_Create(instance);
|
||||
status = Channel_Valid_Instance(instance);
|
||||
@@ -52,8 +64,8 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_ANALOG_OUTPUT;
|
||||
member.objectIdentifier.instance = 1;
|
||||
member.propertyIdentifier = PROP_PRESENT_VALUE;
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
member.propertyIdentifier = PROP_PRESENT_VALUE;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
status =
|
||||
@@ -61,6 +73,9 @@ static void test_Channel_Property_Read_Write(void)
|
||||
zassert_true(status, NULL);
|
||||
status = Channel_Control_Groups_Element_Set(instance, 1, 1);
|
||||
zassert_true(status, NULL);
|
||||
member.propertyIdentifier = PROP_RELINQUISH_DEFAULT;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.deviceIdentifier.type = OBJECT_DEVICE;
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_BINARY_OUTPUT;
|
||||
@@ -69,6 +84,9 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_RELINQUISH_DEFAULT;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.deviceIdentifier.type = OBJECT_DEVICE;
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_MULTI_STATE_OUTPUT;
|
||||
@@ -77,6 +95,9 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_RELINQUISH_DEFAULT;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.deviceIdentifier.type = OBJECT_DEVICE;
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_LIGHTING_OUTPUT;
|
||||
@@ -85,6 +106,12 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_RELINQUISH_DEFAULT;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_HIGH_END_TRIM;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.deviceIdentifier.type = OBJECT_DEVICE;
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_COLOR;
|
||||
@@ -93,6 +120,9 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_DEFAULT_COLOR;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.deviceIdentifier.type = OBJECT_DEVICE;
|
||||
member.deviceIdentifier.instance = 0;
|
||||
member.objectIdentifier.type = OBJECT_COLOR_TEMPERATURE;
|
||||
@@ -101,6 +131,9 @@ static void test_Channel_Property_Read_Write(void)
|
||||
member.arrayIndex = BACNET_ARRAY_ALL;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
member.propertyIdentifier = PROP_DEFAULT_COLOR_TEMPERATURE;
|
||||
index = Channel_Reference_List_Member_Element_Add(instance, &member);
|
||||
zassert_not_equal(index, 0, NULL);
|
||||
/* perform a general test for RP/WP */
|
||||
bacnet_object_properties_read_write_test(
|
||||
OBJECT_CHANNEL, instance, Channel_Property_Lists, Channel_Read_Property,
|
||||
@@ -129,6 +162,13 @@ static void test_Channel_Property_Read_Write(void)
|
||||
bacapp_encode_application_data(wp_data.application_data, &value);
|
||||
status = Channel_Write_Property(&wp_data);
|
||||
zassert_true(status, NULL);
|
||||
value.type.Channel_Value.tag = BACNET_APPLICATION_TAG_XY_COLOR;
|
||||
value.type.Channel_Value.type.XY_Color.x_coordinate = 0.4590f;
|
||||
value.type.Channel_Value.type.XY_Color.y_coordinate = 0.4101f;
|
||||
wp_data.application_data_len =
|
||||
bacapp_encode_application_data(wp_data.application_data, &value);
|
||||
status = Channel_Write_Property(&wp_data);
|
||||
zassert_true(status, NULL);
|
||||
/* specific WriteProperty value */
|
||||
wp_data.object_property = PROP_OUT_OF_SERVICE;
|
||||
value.tag = BACNET_APPLICATION_TAG_BOOLEAN;
|
||||
@@ -235,6 +275,16 @@ static void test_Channel_Property_Read_Write(void)
|
||||
channel_value.type.Real = 3.14159f;
|
||||
status = Channel_Present_Value_Set(instance, 1, &channel_value);
|
||||
zassert_true(status, NULL);
|
||||
/* context API */
|
||||
Channel_Context_Set(instance, Channel_Context_Get(instance));
|
||||
/* WriteGroup API */
|
||||
wg_data.change_list.channel = 1;
|
||||
wg_data.change_list.overriding_priority = BACNET_MAX_PRIORITY;
|
||||
wg_data.change_list.value.tag = BACNET_APPLICATION_TAG_REAL;
|
||||
wg_data.change_list.value.type.Real = 2.71828f;
|
||||
wg_data.inhibit_delay = 0;
|
||||
wg_data.write_priority = BACNET_MAX_PRIORITY;
|
||||
Channel_Write_Group(&wg_data, 0, &wg_data.change_list);
|
||||
/* cleanup */
|
||||
status = Channel_Delete(instance);
|
||||
zassert_true(status, NULL);
|
||||
|
||||
Reference in New Issue
Block a user