diff --git a/apps/blinkt/device.c b/apps/blinkt/device.c index c6e40036..d6529398 100644 --- a/apps/blinkt/device.c +++ b/apps/blinkt/device.c @@ -1298,13 +1298,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1334,20 +1327,11 @@ static int Read_Property_Common( if (property_list_common(rpdata->object_property)) { apdu_len = property_list_common_encode(rpdata, Object_Instance_Number); } else if (rpdata->object_property == PROP_OBJECT_NAME) { - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - characterstring_init_ansi(&char_string, ""); - if (pObject->Object_Name) { - (void)pObject->Object_Name( - rpdata->object_instance, &char_string); - } - apdu_len = - encode_application_character_string(&apdu[0], &char_string); + characterstring_init_ansi(&char_string, ""); + if (pObject->Object_Name) { + (void)pObject->Object_Name(rpdata->object_instance, &char_string); } + apdu_len = encode_application_character_string(&apdu[0], &char_string); #if (BACNET_PROTOCOL_REVISION >= 14) } else if (rpdata->object_property == PROP_PROPERTY_LIST) { Device_Objects_Property_List( @@ -1419,13 +1403,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: @@ -1685,12 +1662,6 @@ static bool Device_Write_Property_Object_Name( if (!wp_data) { return false; } - if (wp_data->array_index != BACNET_ARRAY_ALL) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } apdu = wp_data->application_data; apdu_size = wp_data->application_data_len; len = bacnet_character_string_application_decode(apdu, apdu_size, &value); diff --git a/apps/piface/device.c b/apps/piface/device.c index 53985d35..a429bc6a 100644 --- a/apps/piface/device.c +++ b/apps/piface/device.c @@ -1250,13 +1250,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1286,20 +1279,11 @@ static int Read_Property_Common( if (property_list_common(rpdata->object_property)) { apdu_len = property_list_common_encode(rpdata, Object_Instance_Number); } else if (rpdata->object_property == PROP_OBJECT_NAME) { - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - characterstring_init_ansi(&char_string, ""); - if (pObject->Object_Name) { - (void)pObject->Object_Name( - rpdata->object_instance, &char_string); - } - apdu_len = - encode_application_character_string(&apdu[0], &char_string); + characterstring_init_ansi(&char_string, ""); + if (pObject->Object_Name) { + (void)pObject->Object_Name(rpdata->object_instance, &char_string); } + apdu_len = encode_application_character_string(&apdu[0], &char_string); #if (BACNET_PROTOCOL_REVISION >= 14) } else if (rpdata->object_property == PROP_PROPERTY_LIST) { Device_Objects_Property_List( @@ -1371,13 +1355,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: @@ -1637,12 +1614,6 @@ static bool Device_Write_Property_Object_Name( if (!wp_data) { return false; } - if (wp_data->array_index != BACNET_ARRAY_ALL) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } apdu = wp_data->application_data; apdu_size = wp_data->application_data_len; len = bacnet_character_string_application_decode(apdu, apdu_size, &value); diff --git a/ports/at91sam7s/ai.c b/ports/at91sam7s/ai.c index dd5a1693..9c706b55 100644 --- a/ports/at91sam7s/ai.c +++ b/ports/at91sam7s/ai.c @@ -162,12 +162,6 @@ int Analog_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/ports/at91sam7s/av.c b/ports/at91sam7s/av.c index ebf99e86..b708f173 100644 --- a/ports/at91sam7s/av.c +++ b/ports/at91sam7s/av.c @@ -267,16 +267,6 @@ int Analog_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && -#if 0 - (rpdata->object_property != PROP_PRIORITY_ARRAY) && -#endif - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -306,13 +296,6 @@ bool Analog_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: if (value.tag == BACNET_APPLICATION_TAG_REAL) { diff --git a/ports/at91sam7s/bi.c b/ports/at91sam7s/bi.c index dc9834a4..d0a9e7f2 100644 --- a/ports/at91sam7s/bi.c +++ b/ports/at91sam7s/bi.c @@ -182,12 +182,6 @@ int Binary_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/ports/at91sam7s/bv.c b/ports/at91sam7s/bv.c index bd83d322..46ec5717 100644 --- a/ports/at91sam7s/bv.c +++ b/ports/at91sam7s/bv.c @@ -124,7 +124,6 @@ int Binary_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) BACNET_CHARACTER_STRING char_string; BACNET_BINARY_PV present_value = BINARY_INACTIVE; BACNET_POLARITY polarity = POLARITY_NORMAL; - uint8_t *apdu = NULL; if ((rpdata == NULL) || (rpdata->application_data == NULL) || @@ -180,12 +179,6 @@ int Binary_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -215,13 +208,6 @@ bool Binary_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: if (value.tag == BACNET_APPLICATION_TAG_ENUMERATED) { diff --git a/ports/at91sam7s/device.c b/ports/at91sam7s/device.c index 22c6ae74..c12e4f72 100644 --- a/ports/at91sam7s/device.c +++ b/ports/at91sam7s/device.c @@ -782,13 +782,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -811,13 +804,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: if (value.tag == BACNET_APPLICATION_TAG_OBJECT_ID) { diff --git a/ports/at91sam7s/netport.c b/ports/at91sam7s/netport.c index d94f2f23..de8a21e1 100644 --- a/ports/at91sam7s/netport.c +++ b/ports/at91sam7s/netport.c @@ -668,18 +668,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_LINK_SPEEDS) && - (wp_data->object_property != PROP_IP_DNS_SERVER) && - (wp_data->object_property != PROP_IPV6_DNS_SERVER) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS_CONFIG) && - (wp_data->object_property != PROP_TAGS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/ports/bdk-atxx4-mstp/ai.c b/ports/bdk-atxx4-mstp/ai.c index 428271c4..ff4778a3 100644 --- a/ports/bdk-atxx4-mstp/ai.c +++ b/ports/bdk-atxx4-mstp/ai.c @@ -162,12 +162,6 @@ int Analog_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/ports/bdk-atxx4-mstp/av.c b/ports/bdk-atxx4-mstp/av.c index 1dba7f09..bc7a7c29 100644 --- a/ports/bdk-atxx4-mstp/av.c +++ b/ports/bdk-atxx4-mstp/av.c @@ -277,16 +277,6 @@ int Analog_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && -#if 0 - (rpdata->object_property != PROP_PRIORITY_ARRAY) && -#endif - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -312,13 +302,6 @@ bool Analog_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid(wp_data, &value, diff --git a/ports/bdk-atxx4-mstp/bi.c b/ports/bdk-atxx4-mstp/bi.c index 728b7611..d98bbca4 100644 --- a/ports/bdk-atxx4-mstp/bi.c +++ b/ports/bdk-atxx4-mstp/bi.c @@ -193,12 +193,6 @@ int Binary_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/ports/bdk-atxx4-mstp/bo.c b/ports/bdk-atxx4-mstp/bo.c index dac56c3e..d64afb8e 100644 --- a/ports/bdk-atxx4-mstp/bo.c +++ b/ports/bdk-atxx4-mstp/bo.c @@ -336,13 +336,6 @@ int Binary_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -366,13 +359,6 @@ bool Binary_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid(wp_data, &value, diff --git a/ports/bdk-atxx4-mstp/device.c b/ports/bdk-atxx4-mstp/device.c index 8b155b91..e691a263 100644 --- a/ports/bdk-atxx4-mstp/device.c +++ b/ports/bdk-atxx4-mstp/device.c @@ -779,13 +779,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -807,13 +800,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: if (value.tag == BACNET_APPLICATION_TAG_OBJECT_ID) { diff --git a/ports/bdk-atxx4-mstp/netport.c b/ports/bdk-atxx4-mstp/netport.c index 73c2eaa9..23418919 100644 --- a/ports/bdk-atxx4-mstp/netport.c +++ b/ports/bdk-atxx4-mstp/netport.c @@ -669,18 +669,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_LINK_SPEEDS) && - (wp_data->object_property != PROP_IP_DNS_SERVER) && - (wp_data->object_property != PROP_IPV6_DNS_SERVER) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS_CONFIG) && - (wp_data->object_property != PROP_TAGS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/ports/stm32f10x/bo.c b/ports/stm32f10x/bo.c index ad39adac..4385ce65 100644 --- a/ports/stm32f10x/bo.c +++ b/ports/stm32f10x/bo.c @@ -314,13 +314,6 @@ int Binary_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -344,13 +337,6 @@ bool Binary_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid(wp_data, &value, diff --git a/ports/stm32f10x/device.c b/ports/stm32f10x/device.c index 35ac61db..8992659b 100644 --- a/ports/stm32f10x/device.c +++ b/ports/stm32f10x/device.c @@ -120,47 +120,26 @@ static int Read_Property_Common( apdu = rpdata->application_data; switch (rpdata->object_property) { case PROP_OBJECT_IDENTIFIER: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - /* Device Object exception: requested instance - may not match our instance if a wildcard */ - if (rpdata->object_type == OBJECT_DEVICE) { - rpdata->object_instance = Object_Instance_Number; - } - apdu_len = encode_application_object_id( - &apdu[0], rpdata->object_type, rpdata->object_instance); + /* Device Object exception: requested instance + may not match our instance if a wildcard */ + if (rpdata->object_type == OBJECT_DEVICE) { + rpdata->object_instance = Object_Instance_Number; } + apdu_len = encode_application_object_id( + &apdu[0], rpdata->object_type, rpdata->object_instance); break; case PROP_OBJECT_NAME: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - characterstring_init_ansi(&char_string, ""); - if (pObject->Object_Name) { - (void)pObject->Object_Name( - rpdata->object_instance, &char_string); - } - apdu_len = - encode_application_character_string(&apdu[0], &char_string); + characterstring_init_ansi(&char_string, ""); + if (pObject->Object_Name) { + (void)pObject->Object_Name( + rpdata->object_instance, &char_string); } + apdu_len = + encode_application_character_string(&apdu[0], &char_string); break; case PROP_OBJECT_TYPE: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - apdu_len = encode_application_enumerated( - &apdu[0], rpdata->object_type); - } + apdu_len = encode_application_enumerated( + &apdu[0], rpdata->object_type); break; #if (BACNET_PROTOCOL_REVISION >= 14) case PROP_PROPERTY_LIST: @@ -796,13 +775,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -825,13 +797,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: if (value.tag == BACNET_APPLICATION_TAG_OBJECT_ID) { diff --git a/ports/stm32f10x/netport.c b/ports/stm32f10x/netport.c index d94f2f23..de8a21e1 100644 --- a/ports/stm32f10x/netport.c +++ b/ports/stm32f10x/netport.c @@ -668,18 +668,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_LINK_SPEEDS) && - (wp_data->object_property != PROP_IP_DNS_SERVER) && - (wp_data->object_property != PROP_IPV6_DNS_SERVER) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS_CONFIG) && - (wp_data->object_property != PROP_TAGS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/ports/stm32f4xx/device.c b/ports/stm32f4xx/device.c index c5d0c901..8ce7a2a6 100644 --- a/ports/stm32f4xx/device.c +++ b/ports/stm32f4xx/device.c @@ -857,13 +857,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -893,47 +886,26 @@ static int Read_Property_Common( apdu = rpdata->application_data; switch (rpdata->object_property) { case PROP_OBJECT_IDENTIFIER: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - /* Device Object exception: requested instance - may not match our instance if a wildcard */ - if (rpdata->object_type == OBJECT_DEVICE) { - rpdata->object_instance = Object_Instance_Number; - } - apdu_len = encode_application_object_id( - &apdu[0], rpdata->object_type, rpdata->object_instance); + /* Device Object exception: requested instance + may not match our instance if a wildcard */ + if (rpdata->object_type == OBJECT_DEVICE) { + rpdata->object_instance = Object_Instance_Number; } + apdu_len = encode_application_object_id( + &apdu[0], rpdata->object_type, rpdata->object_instance); break; case PROP_OBJECT_NAME: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - characterstring_init_ansi(&char_string, ""); - if (pObject->Object_Name) { - (void)pObject->Object_Name( - rpdata->object_instance, &char_string); - } - apdu_len = - encode_application_character_string(&apdu[0], &char_string); + characterstring_init_ansi(&char_string, ""); + if (pObject->Object_Name) { + (void)pObject->Object_Name( + rpdata->object_instance, &char_string); } + apdu_len = + encode_application_character_string(&apdu[0], &char_string); break; case PROP_OBJECT_TYPE: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - apdu_len = encode_application_enumerated( - &apdu[0], rpdata->object_type); - } + apdu_len = encode_application_enumerated( + &apdu[0], rpdata->object_type); break; #if (BACNET_PROTOCOL_REVISION >= 14) case PROP_PROPERTY_LIST: @@ -1007,13 +979,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: if (value.tag == BACNET_APPLICATION_TAG_OBJECT_ID) { @@ -1179,12 +1144,6 @@ static bool Device_Write_Property_Object_Name( if (!wp_data) { return false; } - if (wp_data->array_index != BACNET_ARRAY_ALL) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } apdu = wp_data->application_data; apdu_size = wp_data->application_data_len; len = bacnet_character_string_application_decode(apdu, apdu_size, &value); diff --git a/ports/stm32f4xx/netport.c b/ports/stm32f4xx/netport.c index e28c28d7..fac24780 100644 --- a/ports/stm32f4xx/netport.c +++ b/ports/stm32f4xx/netport.c @@ -66,12 +66,6 @@ static const int Network_Port_Properties_Optional[] = { PROP_MAC_ADDRESS, static const int Network_Port_Properties_Proprietary[] = { -1 }; -/* standard properties that are arrays for this object, - but not necessary supported in this object */ -static const int Network_Port_Properties_Array[] = { PROP_LINK_SPEEDS, - PROP_IP_DNS_SERVER, PROP_IPV6_DNS_SERVER, PROP_EVENT_MESSAGE_TEXTS, - PROP_EVENT_MESSAGE_TEXTS_CONFIG, PROP_TAGS, -1 }; - /** * Returns the list of required, optional, and proprietary properties. * Used by ReadPropertyMultiple service. @@ -699,14 +693,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if (!property_list_member( - Network_Port_Properties_Array, wp_data->object_property) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/ports/xplained/ai.c b/ports/xplained/ai.c index f7bb0fc5..c5eddf59 100644 --- a/ports/xplained/ai.c +++ b/ports/xplained/ai.c @@ -231,12 +231,6 @@ int Analog_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -258,13 +252,6 @@ bool Analog_Input_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid(wp_data, &value, diff --git a/ports/xplained/device.c b/ports/xplained/device.c index 81c56f40..30e461c7 100644 --- a/ports/xplained/device.c +++ b/ports/xplained/device.c @@ -752,13 +752,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -780,13 +773,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: if (value.tag == BACNET_APPLICATION_TAG_OBJECT_ID) { diff --git a/ports/xplained/netport.c b/ports/xplained/netport.c index 48b142e2..4904263f 100644 --- a/ports/xplained/netport.c +++ b/ports/xplained/netport.c @@ -662,18 +662,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_LINK_SPEEDS) && - (wp_data->object_property != PROP_IP_DNS_SERVER) && - (wp_data->object_property != PROP_IPV6_DNS_SERVER) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS_CONFIG) && - (wp_data->object_property != PROP_TAGS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/src/bacnet/bacapp.c b/src/bacnet/bacapp.c index c2cb8d0b..78f1df85 100644 --- a/src/bacnet/bacapp.c +++ b/src/bacnet/bacapp.c @@ -1697,6 +1697,7 @@ int bacapp_decode_application_tag_value( /** * @brief Decodes a well-known, possibly complex property value + * or array property. * Used to reverse operations in bacapp_encode_application_data. * @note This function is called repeatedly to decode array or lists one * element at a time. @@ -1707,12 +1708,13 @@ int bacapp_decode_application_tag_value( * @return number of bytes decoded, or BACNET_STATUS_ERROR if errors occur * @note number of bytes can be 0 for empty lists, etc. */ -int bacapp_decode_known_property( +int bacapp_decode_known_array_property( const uint8_t *apdu, int apdu_size, BACNET_APPLICATION_DATA_VALUE *value, BACNET_OBJECT_TYPE object_type, - BACNET_PROPERTY_ID property) + BACNET_PROPERTY_ID property, + uint32_t array_index) { int apdu_len = 0; int tag; @@ -1722,6 +1724,11 @@ int bacapp_decode_known_property( value->tag = BACNET_APPLICATION_TAG_EMPTYLIST; } apdu_len = 0; + } else if (array_index == 0) { + /* Array index 0 is the size of the array and always unsigned int */ + value->tag = BACNET_APPLICATION_TAG_UNSIGNED_INT; + apdu_len = bacnet_unsigned_application_decode( + apdu, apdu_size, &value->type.Unsigned_Int); } else if (property == PROP_PRIORITY_ARRAY) { /* BACnetPriorityValue */ /* special case to reduce complexity - mostly encoded as application @@ -1744,6 +1751,29 @@ int bacapp_decode_known_property( return apdu_len; } +/** + * @brief Decodes a well-known, possibly complex property value + * Used to reverse operations in bacapp_encode_application_data. + * @note This function is called repeatedly to decode array or lists one + * element at a time. + * @param apdu - buffer of data to be decoded + * @param max_apdu_len - number of bytes in the buffer + * @param value - stores the decoded property value + * @param property - context property identifier + * @return number of bytes decoded, or BACNET_STATUS_ERROR if errors occur + * @note number of bytes can be 0 for empty lists, etc. + */ +int bacapp_decode_known_property( + const uint8_t *apdu, + int apdu_size, + BACNET_APPLICATION_DATA_VALUE *value, + BACNET_OBJECT_TYPE object_type, + BACNET_PROPERTY_ID property) +{ + return bacapp_decode_known_array_property( + apdu, apdu_size, value, object_type, property, BACNET_ARRAY_ALL); +} + #if defined(BACAPP_COMPLEX_TYPES) /** * @brief Determine the BACnet Context Data number of APDU bytes consumed diff --git a/src/bacnet/bacapp.h b/src/bacnet/bacapp.h index 2b4994cd..76bfc80e 100644 --- a/src/bacnet/bacapp.h +++ b/src/bacnet/bacapp.h @@ -325,6 +325,14 @@ int bacapp_decode_known_property( BACNET_APPLICATION_DATA_VALUE *value, BACNET_OBJECT_TYPE object_type, BACNET_PROPERTY_ID property); +BACNET_STACK_EXPORT +int bacapp_decode_known_array_property( + const uint8_t *apdu, + int apdu_size, + BACNET_APPLICATION_DATA_VALUE *value, + BACNET_OBJECT_TYPE object_type, + BACNET_PROPERTY_ID property, + uint32_t array_index); BACNET_STACK_EXPORT int bacapp_known_property_tag( diff --git a/src/bacnet/basic/client/bac-rw.c b/src/bacnet/basic/client/bac-rw.c index 8f4e50fc..e7d0692f 100644 --- a/src/bacnet/basic/client/bac-rw.c +++ b/src/bacnet/basic/client/bac-rw.c @@ -234,9 +234,9 @@ static void bacnet_read_property_ack_process( apdu_len = rp_data->application_data_len; while (apdu_len) { bacapp_value_list_init(value, 1); - len = bacapp_decode_known_property( + len = bacapp_decode_known_array_property( apdu, (unsigned)apdu_len, value, rp_data->object_type, - rp_data->object_property); + rp_data->object_property, rp_data->array_index); if (len > 0) { if ((len < apdu_len) && (rp_data->array_index == BACNET_ARRAY_ALL)) { diff --git a/src/bacnet/basic/object/acc.c b/src/bacnet/basic/object/acc.c index 354fb080..4e1fb3f9 100644 --- a/src/bacnet/basic/object/acc.c +++ b/src/bacnet/basic/object/acc.c @@ -12,6 +12,7 @@ #include "bacnet/bacdef.h" /* BACnet Stack API */ #include "bacnet/bacdcode.h" +#include "bacnet/proplist.h" #include "bacnet/basic/object/acc.h" #ifndef MAX_ACCUMULATORS @@ -355,12 +356,7 @@ int Accumulator_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } + return apdu_len; } @@ -388,30 +384,34 @@ bool Accumulator_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if (wp_data->array_index != BACNET_ARRAY_ALL) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch ((int)wp_data->object_property) { - case PROP_OBJECT_IDENTIFIER: - case PROP_OBJECT_NAME: - case PROP_DESCRIPTION: - case PROP_OBJECT_TYPE: case PROP_PRESENT_VALUE: - case PROP_SCALE: - case PROP_MAX_PRES_VALUE: - case PROP_STATUS_FLAGS: - case PROP_EVENT_STATE: - case PROP_OUT_OF_SERVICE: - case PROP_UNITS: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + if (value.tag == BACNET_APPLICATION_TAG_UNSIGNED_INT) { + if (value.type.Unsigned_Int <= + Accumulator_Max_Pres_Value(wp_data->object_instance)) { + Accumulator_Present_Value_Set( + wp_data->object_instance, value.type.Unsigned_Int); + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; + return false; + } + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_INVALID_DATA_TYPE; + return false; + } break; default: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + if (property_lists_member( + Properties_Required, Properties_Optional, + Properties_Proprietary, wp_data->object_property)) { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + } break; } diff --git a/src/bacnet/basic/object/access_credential.c b/src/bacnet/basic/object/access_credential.c index 587d28c3..d45cfb90 100644 --- a/src/bacnet/basic/object/access_credential.c +++ b/src/bacnet/basic/object/access_credential.c @@ -15,6 +15,7 @@ #include "bacnet/bacdcode.h" #include "bacnet/bacapp.h" #include "bacnet/wp.h" +#include "bacnet/proplist.h" #include "bacnet/basic/object/access_credential.h" #include "bacnet/basic/services.h" @@ -303,15 +304,6 @@ int Access_Credential_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && - (rpdata->object_property != PROP_AUTHENTICATION_FACTORS) && - (rpdata->object_property != PROP_ASSIGNED_ACCESS_RIGHTS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -334,14 +326,6 @@ bool Access_Credential_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_AUTHENTICATION_FACTORS) && - (wp_data->object_property != PROP_ASSIGNED_ACCESS_RIGHTS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Access_Credential_Instance_To_Index(wp_data->object_instance); switch (wp_data->object_property) { @@ -353,24 +337,16 @@ bool Access_Credential_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) value.type.Unsigned_Int; } break; - case PROP_OBJECT_IDENTIFIER: - case PROP_OBJECT_NAME: - case PROP_OBJECT_TYPE: - case PROP_STATUS_FLAGS: - case PROP_RELIABILITY: - case PROP_CREDENTIAL_STATUS: - case PROP_REASON_FOR_DISABLE: - case PROP_AUTHENTICATION_FACTORS: - case PROP_ACTIVATION_TIME: - case PROP_EXPIRATION_TIME: - case PROP_CREDENTIAL_DISABLE: - case PROP_ASSIGNED_ACCESS_RIGHTS: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; - break; default: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + if (property_lists_member( + Properties_Required, Properties_Optional, + Properties_Proprietary, wp_data->object_property)) { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + } break; } diff --git a/src/bacnet/basic/object/access_door.c b/src/bacnet/basic/object/access_door.c index 28ce2035..bcda479c 100644 --- a/src/bacnet/basic/object/access_door.c +++ b/src/bacnet/basic/object/access_door.c @@ -416,13 +416,6 @@ int Access_Door_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -445,13 +438,6 @@ bool Access_Door_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Access_Door_Instance_To_Index(wp_data->object_instance); switch (wp_data->object_property) { case PROP_PRESENT_VALUE: diff --git a/src/bacnet/basic/object/access_point.c b/src/bacnet/basic/object/access_point.c index 09fc4f30..42de9a3a 100644 --- a/src/bacnet/basic/object/access_point.c +++ b/src/bacnet/basic/object/access_point.c @@ -297,13 +297,6 @@ int Access_Point_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_ACCESS_DOORS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -325,38 +318,25 @@ bool Access_Point_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_ACCESS_DOORS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } - switch (wp_data->object_property) { - case PROP_OBJECT_IDENTIFIER: - case PROP_OBJECT_NAME: - case PROP_OBJECT_TYPE: - case PROP_STATUS_FLAGS: - case PROP_EVENT_STATE: - case PROP_RELIABILITY: case PROP_OUT_OF_SERVICE: - case PROP_AUTHENTICATION_STATUS: - case PROP_ACTIVE_AUTHENTICATION_POLICY: - case PROP_NUMBER_OF_AUTHENTICATION_POLICIES: - case PROP_AUTHORIZATION_MODE: - case PROP_ACCESS_EVENT: - case PROP_ACCESS_EVENT_TAG: - case PROP_ACCESS_EVENT_TIME: - case PROP_ACCESS_EVENT_CREDENTIAL: - case PROP_ACCESS_DOORS: - case PROP_PRIORITY_FOR_WRITING: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + status = write_property_type_valid( + wp_data, &value, BACNET_APPLICATION_TAG_BOOLEAN); + if (status) { + Access_Point_Out_Of_Service_Set( + wp_data->object_instance, value.type.Boolean); + } break; default: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + if (property_lists_member( + Properties_Required, Properties_Optional, + Properties_Proprietary, wp_data->object_property)) { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + } break; } diff --git a/src/bacnet/basic/object/access_rights.c b/src/bacnet/basic/object/access_rights.c index cb307c76..df7440cb 100644 --- a/src/bacnet/basic/object/access_rights.c +++ b/src/bacnet/basic/object/access_rights.c @@ -14,6 +14,7 @@ #include "bacnet/bacdcode.h" #include "bacnet/bacapp.h" #include "bacnet/property.h" +#include "bacnet/proplist.h" #include "bacnet/wp.h" #include "bacnet/basic/services.h" /* me! */ @@ -203,7 +204,6 @@ int Access_Rights_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) unsigned object_index = 0; BACNET_UNSIGNED_INTEGER count; uint8_t *apdu = NULL; - bool is_array = false; if ((rpdata == NULL) || (rpdata->application_data == NULL) || (rpdata->application_data_len == 0)) { @@ -278,15 +278,6 @@ int Access_Rights_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - rpdata->object_type, rpdata->object_property); - if ((apdu_len >= 0) && (!is_array) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -295,19 +286,10 @@ int Access_Rights_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) bool Access_Rights_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) { bool status = false; /* return value */ - bool is_array = false; int len = 0; BACNET_APPLICATION_DATA_VALUE value = { 0 }; unsigned object_index = 0; - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - wp_data->object_type, wp_data->object_property); - if (!is_array && (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* decode the some of the request */ len = bacapp_decode_application_data( wp_data->application_data, wp_data->application_data_len, &value); diff --git a/src/bacnet/basic/object/access_user.c b/src/bacnet/basic/object/access_user.c index 09c6b489..704e1f41 100644 --- a/src/bacnet/basic/object/access_user.c +++ b/src/bacnet/basic/object/access_user.c @@ -13,6 +13,7 @@ /* BACnet Stack API */ #include "bacnet/bacdcode.h" #include "bacnet/bacapp.h" +#include "bacnet/proplist.h" #include "bacnet/wp.h" #include "access_user.h" #include "bacnet/basic/services.h" @@ -197,12 +198,6 @@ int Access_User_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -225,12 +220,6 @@ bool Access_User_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Access_User_Instance_To_Index(wp_data->object_instance); switch (wp_data->object_property) { case PROP_GLOBAL_IDENTIFIER: @@ -241,20 +230,16 @@ bool Access_User_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) value.type.Unsigned_Int; } break; - - case PROP_OBJECT_IDENTIFIER: - case PROP_OBJECT_NAME: - case PROP_OBJECT_TYPE: - case PROP_STATUS_FLAGS: - case PROP_RELIABILITY: - case PROP_USER_TYPE: - case PROP_CREDENTIALS: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; - break; default: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + if (property_lists_member( + Properties_Required, Properties_Optional, + Properties_Proprietary, wp_data->object_property)) { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + } break; } diff --git a/src/bacnet/basic/object/access_zone.c b/src/bacnet/basic/object/access_zone.c index a66fb072..c86e8a58 100644 --- a/src/bacnet/basic/object/access_zone.c +++ b/src/bacnet/basic/object/access_zone.c @@ -249,12 +249,6 @@ int Access_Zone_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -277,12 +271,6 @@ bool Access_Zone_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Access_Zone_Instance_To_Index(wp_data->object_instance); switch (wp_data->object_property) { case PROP_GLOBAL_IDENTIFIER: @@ -306,21 +294,16 @@ bool Access_Zone_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; } break; - case PROP_OBJECT_IDENTIFIER: - case PROP_OBJECT_NAME: - case PROP_OBJECT_TYPE: - case PROP_OCCUPANCY_STATE: - case PROP_STATUS_FLAGS: - case PROP_EVENT_STATE: - case PROP_OUT_OF_SERVICE: - case PROP_ENTRY_POINTS: - case PROP_EXIT_POINTS: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; - break; default: - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + if (property_lists_member( + Properties_Required, Properties_Optional, + Properties_Proprietary, wp_data->object_property)) { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_WRITE_ACCESS_DENIED; + } else { + wp_data->error_class = ERROR_CLASS_PROPERTY; + wp_data->error_code = ERROR_CODE_UNKNOWN_PROPERTY; + } break; } diff --git a/src/bacnet/basic/object/ai.c b/src/bacnet/basic/object/ai.c index 5aa3472e..01238979 100644 --- a/src/bacnet/basic/object/ai.c +++ b/src/bacnet/basic/object/ai.c @@ -849,14 +849,6 @@ int Analog_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -892,13 +884,6 @@ bool Analog_Input_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } pObject = Analog_Input_Object(wp_data->object_instance); if (!pObject) { return false; diff --git a/src/bacnet/basic/object/ao.c b/src/bacnet/basic/object/ao.c index 6fb0a6bb..7635ca41 100644 --- a/src/bacnet/basic/object/ao.c +++ b/src/bacnet/basic/object/ao.c @@ -1085,14 +1085,6 @@ int Analog_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1120,14 +1112,6 @@ bool Analog_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/av.c b/src/bacnet/basic/object/av.c index 344e9dce..74567d83 100644 --- a/src/bacnet/basic/object/av.c +++ b/src/bacnet/basic/object/av.c @@ -871,14 +871,6 @@ int Analog_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -914,14 +906,6 @@ bool Analog_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } CurrentAV = Analog_Value_Object(wp_data->object_instance); if (!CurrentAV) { wp_data->error_class = ERROR_CLASS_OBJECT; diff --git a/src/bacnet/basic/object/bacfile.c b/src/bacnet/basic/object/bacfile.c index ade5b38a..a9e0c46b 100644 --- a/src/bacnet/basic/object/bacfile.c +++ b/src/bacnet/basic/object/bacfile.c @@ -683,12 +683,6 @@ bool bacfile_write_property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_UNKNOWN_OBJECT; return false; } - /* only array properties can have array options */ - if (wp_data->array_index != BACNET_ARRAY_ALL) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* decode the some of the request */ len = bacapp_decode_application_data( wp_data->application_data, wp_data->application_data_len, &value); diff --git a/src/bacnet/basic/object/bi.c b/src/bacnet/basic/object/bi.c index 65d58a27..2ecafa70 100644 --- a/src/bacnet/basic/object/bi.c +++ b/src/bacnet/basic/object/bi.c @@ -21,6 +21,7 @@ #include "bacnet/rp.h" #include "bacnet/wp.h" #include "bacnet/cov.h" +#include "bacnet/proplist.h" /* basic objects and services */ #include "bacnet/basic/object/device.h" #include "bacnet/basic/services.h" @@ -1030,12 +1031,6 @@ int Binary_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1072,12 +1067,6 @@ bool Binary_Input_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) #endif return BACNET_STATUS_ERROR; } - /* only array properties can have array options */ - if (wp_data->array_index != BACNET_ARRAY_ALL) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/bitstring_value.c b/src/bacnet/basic/object/bitstring_value.c index 02246190..e3fdb9e3 100644 --- a/src/bacnet/basic/object/bitstring_value.c +++ b/src/bacnet/basic/object/bitstring_value.c @@ -552,7 +552,6 @@ int BitString_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) BACNET_BIT_STRING bit_string; BACNET_CHARACTER_STRING char_string; bool state = false; - bool is_array = false; uint8_t *apdu = NULL; if ((rpdata == NULL) || (rpdata->application_data == NULL) || @@ -611,15 +610,6 @@ int BitString_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - rpdata->object_type, rpdata->object_property); - if ((apdu_len >= 0) && (!is_array) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -654,14 +644,6 @@ bool BitString_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/blo.c b/src/bacnet/basic/object/blo.c index 08a3c045..c390c822 100644 --- a/src/bacnet/basic/object/blo.c +++ b/src/bacnet/basic/object/blo.c @@ -1369,13 +1369,6 @@ int Binary_Lighting_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1405,13 +1398,6 @@ bool Binary_Lighting_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/bo.c b/src/bacnet/basic/object/bo.c index 8cc24b9b..0c5bdc0c 100644 --- a/src/bacnet/basic/object/bo.c +++ b/src/bacnet/basic/object/bo.c @@ -1089,13 +1089,6 @@ int Binary_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1125,13 +1118,6 @@ bool Binary_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/bv.c b/src/bacnet/basic/object/bv.c index 1f88338e..792528f8 100644 --- a/src/bacnet/basic/object/bv.c +++ b/src/bacnet/basic/object/bv.c @@ -21,6 +21,7 @@ #include "bacnet/wp.h" #include "bacnet/rp.h" #include "bacnet/cov.h" +#include "bacnet/proplist.h" /* basic objects and services */ #include "bacnet/basic/services.h" #include "bacnet/basic/object/device.h" @@ -1037,13 +1038,6 @@ int Binary_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* Only array properties can have array options. */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1070,7 +1064,6 @@ bool Binary_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) if (wp_data->application_data_len == 0) { return false; } - /* Decode the some of the request. */ len = bacapp_decode_application_data( wp_data->application_data, wp_data->application_data_len, &value); @@ -1087,13 +1080,6 @@ bool Binary_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) #endif return BACNET_STATUS_ERROR; } - /* Only array properties can have array options. */ - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/calendar.c b/src/bacnet/basic/object/calendar.c index 2e798a8c..9d30a906 100644 --- a/src/bacnet/basic/object/calendar.c +++ b/src/bacnet/basic/object/calendar.c @@ -57,11 +57,6 @@ static const int Calendar_Properties_Optional[] = { PROP_DESCRIPTION, -1 }; static const int Calendar_Properties_Proprietary[] = { -1 }; -/* standard properties that are arrays for this object, - but not necessary supported in this object */ -static const int BACnetARRAY_Properties[] = { PROP_PRIORITY_ARRAY, PROP_TAGS, - -1 }; - /** * Returns the list of required, optional, and proprietary properties. * Used by ReadPropertyMultiple service. @@ -481,16 +476,6 @@ bool Calendar_Description_Set(uint32_t object_instance, const char *new_name) return status; } -/** - * @brief Determine if the object property is a BACnetARRAY property - * @param object_property - object-property to be checked - * @return true if the property is a BACnetARRAY property - */ -static bool BACnetARRAY_Property(int object_property) -{ - return property_list_member(BACnetARRAY_Properties, object_property); -} - /** * ReadProperty handler for this object. For the given ReadProperty * data, the application_data is loaded or the error flags are set. @@ -549,13 +534,6 @@ int Calendar_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (!BACnetARRAY_Property(rpdata->object_property)) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -589,13 +567,6 @@ bool Calendar_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((!BACnetARRAY_Property(wp_data->object_property)) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_DATE_LIST: pv_old = Calendar_Present_Value(wp_data->object_instance); diff --git a/src/bacnet/basic/object/channel.c b/src/bacnet/basic/object/channel.c index d21bbc12..0449412b 100644 --- a/src/bacnet/basic/object/channel.c +++ b/src/bacnet/basic/object/channel.c @@ -966,7 +966,6 @@ int Channel_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) bool state = false; int apdu_size = 0; uint8_t *apdu = NULL; - bool is_array; if ((rpdata == NULL) || (rpdata->application_data == NULL) || (rpdata->application_data_len == 0)) { @@ -1053,15 +1052,6 @@ int Channel_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - rpdata->object_type, rpdata->object_property); - if ((apdu_len >= 0) && (!is_array) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1239,16 +1229,7 @@ bool Channel_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) bool status = false; /* return value */ int len = 0; BACNET_APPLICATION_DATA_VALUE value = { 0 }; - bool is_array; - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - wp_data->object_type, wp_data->object_property); - if (!is_array && (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* decode the first value of the request */ len = bacapp_decode_known_property( wp_data->application_data, wp_data->application_data_len, &value, diff --git a/src/bacnet/basic/object/color_object.c b/src/bacnet/basic/object/color_object.c index 6a8f7bba..e7c2d5d6 100644 --- a/src/bacnet/basic/object/color_object.c +++ b/src/bacnet/basic/object/color_object.c @@ -971,14 +971,6 @@ int Color_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1013,14 +1005,6 @@ bool Color_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/color_temperature.c b/src/bacnet/basic/object/color_temperature.c index 088da93d..a1b357b9 100644 --- a/src/bacnet/basic/object/color_temperature.c +++ b/src/bacnet/basic/object/color_temperature.c @@ -1404,14 +1404,6 @@ int Color_Temperature_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1445,14 +1437,6 @@ bool Color_Temperature_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/command.c b/src/bacnet/basic/object/command.c index ed0e5477..1779ce0e 100644 --- a/src/bacnet/basic/object/command.c +++ b/src/bacnet/basic/object/command.c @@ -442,13 +442,6 @@ int Command_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_ACTION) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -478,13 +471,6 @@ bool Command_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_ACTION) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Command_Instance_To_Index(wp_data->object_instance); if (object_index >= MAX_COMMANDS) { return false; diff --git a/src/bacnet/basic/object/credential_data_input.c b/src/bacnet/basic/object/credential_data_input.c index 1766ffe4..8a613587 100644 --- a/src/bacnet/basic/object/credential_data_input.c +++ b/src/bacnet/basic/object/credential_data_input.c @@ -259,14 +259,6 @@ int Credential_Data_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && - (rpdata->object_property != PROP_SUPPORTED_FORMATS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -289,13 +281,6 @@ bool Credential_Data_Input_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_SUPPORTED_FORMATS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = Credential_Data_Input_Instance_To_Index(wp_data->object_instance); switch (wp_data->object_property) { diff --git a/src/bacnet/basic/object/csv.c b/src/bacnet/basic/object/csv.c index e2c55722..bce11e1c 100644 --- a/src/bacnet/basic/object/csv.c +++ b/src/bacnet/basic/object/csv.c @@ -626,13 +626,6 @@ int CharacterString_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_STATE_TEXT) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/src/bacnet/basic/object/device.c b/src/bacnet/basic/object/device.c index c029350b..76b21c65 100644 --- a/src/bacnet/basic/object/device.c +++ b/src/bacnet/basic/object/device.c @@ -1576,13 +1576,6 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_OBJECT_LIST) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1612,20 +1605,11 @@ static int Read_Property_Common( if (property_list_common(rpdata->object_property)) { apdu_len = property_list_common_encode(rpdata, Object_Instance_Number); } else if (rpdata->object_property == PROP_OBJECT_NAME) { - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - characterstring_init_ansi(&char_string, ""); - if (pObject->Object_Name) { - (void)pObject->Object_Name( - rpdata->object_instance, &char_string); - } - apdu_len = - encode_application_character_string(&apdu[0], &char_string); + characterstring_init_ansi(&char_string, ""); + if (pObject->Object_Name) { + (void)pObject->Object_Name(rpdata->object_instance, &char_string); } + apdu_len = encode_application_character_string(&apdu[0], &char_string); #if (BACNET_PROTOCOL_REVISION >= 14) } else if (rpdata->object_property == PROP_PROPERTY_LIST) { Device_Objects_Property_List( @@ -1698,13 +1682,6 @@ bool Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: @@ -1942,12 +1919,6 @@ static bool Device_Write_Property_Object_Name( if (!wp_data) { return false; } - if (wp_data->array_index != BACNET_ARRAY_ALL) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } apdu = wp_data->application_data; apdu_size = wp_data->application_data_len; len = bacnet_character_string_application_decode(apdu, apdu_size, &value); diff --git a/src/bacnet/basic/object/gateway/gw_device.c b/src/bacnet/basic/object/gateway/gw_device.c index 7d4db4e7..fd7a8fae 100644 --- a/src/bacnet/basic/object/gateway/gw_device.c +++ b/src/bacnet/basic/object/gateway/gw_device.c @@ -462,13 +462,6 @@ bool Routed_Device_Write_Property_Local(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_OBJECT_LIST) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_OBJECT_IDENTIFIER: diff --git a/src/bacnet/basic/object/iv.c b/src/bacnet/basic/object/iv.c index 3057f0bd..47ed6a57 100644 --- a/src/bacnet/basic/object/iv.c +++ b/src/bacnet/basic/object/iv.c @@ -520,14 +520,6 @@ int Integer_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -557,14 +549,6 @@ bool Integer_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/lc.c b/src/bacnet/basic/object/lc.c index 90a9ca7b..33dc19a3 100644 --- a/src/bacnet/basic/object/lc.c +++ b/src/bacnet/basic/object/lc.c @@ -1074,15 +1074,6 @@ int Load_Control_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && - (rpdata->object_property != PROP_SHED_LEVEL_DESCRIPTIONS) && - (rpdata->object_property != PROP_SHED_LEVELS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1466,15 +1457,6 @@ bool Load_Control_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if ((wp_data->object_property != PROP_SHED_LEVELS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - debug_printf( - "Load_Control_Write_Property() failure detected point C\n"); - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_REQUESTED_SHED_LEVEL: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/lo.c b/src/bacnet/basic/object/lo.c index 713a6ea7..efa618e3 100644 --- a/src/bacnet/basic/object/lo.c +++ b/src/bacnet/basic/object/lo.c @@ -2162,13 +2162,6 @@ int Lighting_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -2200,13 +2193,6 @@ bool Lighting_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/lsp.c b/src/bacnet/basic/object/lsp.c index c0f8a48a..4d71a140 100644 --- a/src/bacnet/basic/object/lsp.c +++ b/src/bacnet/basic/object/lsp.c @@ -557,12 +557,6 @@ int Life_Safety_Point_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -584,12 +578,6 @@ bool Life_Safety_Point_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if (wp_data->array_index != BACNET_ARRAY_ALL) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_MODE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/lsz.c b/src/bacnet/basic/object/lsz.c index 7567269c..e0ca4eb5 100644 --- a/src/bacnet/basic/object/lsz.c +++ b/src/bacnet/basic/object/lsz.c @@ -734,12 +734,6 @@ int Life_Safety_Zone_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -761,12 +755,6 @@ bool Life_Safety_Zone_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - /* only array properties can have array options */ - if (wp_data->array_index != BACNET_ARRAY_ALL) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_MODE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/ms-input.c b/src/bacnet/basic/object/ms-input.c index 018d6572..2fc2de2f 100644 --- a/src/bacnet/basic/object/ms-input.c +++ b/src/bacnet/basic/object/ms-input.c @@ -790,13 +790,6 @@ int Multistate_Input_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_STATE_TEXT) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -824,13 +817,6 @@ bool Multistate_Input_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_STATE_TEXT) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/mso.c b/src/bacnet/basic/object/mso.c index a01c06b6..e06b0ee6 100644 --- a/src/bacnet/basic/object/mso.c +++ b/src/bacnet/basic/object/mso.c @@ -25,6 +25,7 @@ #include "bacnet/reject.h" #include "bacnet/rp.h" #include "bacnet/wp.h" +#include "bacnet/proplist.h" #include "bacnet/basic/services.h" #include "bacnet/basic/sys/keylist.h" /* me! */ @@ -1035,13 +1036,6 @@ int Multistate_Output_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_STATE_TEXT) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -1069,13 +1063,6 @@ bool Multistate_Output_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_STATE_TEXT) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/msv.c b/src/bacnet/basic/object/msv.c index 4c2f789b..e1518bd1 100644 --- a/src/bacnet/basic/object/msv.c +++ b/src/bacnet/basic/object/msv.c @@ -792,14 +792,6 @@ int Multistate_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_STATE_TEXT) && - (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -827,14 +819,6 @@ bool Multistate_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_STATE_TEXT) && - (wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/nc.c b/src/bacnet/basic/object/nc.c index 7fe1284d..aa74c599 100644 --- a/src/bacnet/basic/object/nc.c +++ b/src/bacnet/basic/object/nc.c @@ -279,14 +279,6 @@ int Notification_Class_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } - return apdu_len; } @@ -314,13 +306,6 @@ bool Notification_Class_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRIORITY: status = write_property_type_valid( diff --git a/src/bacnet/basic/object/netport.c b/src/bacnet/basic/object/netport.c index ae018807..735f23d7 100644 --- a/src/bacnet/basic/object/netport.c +++ b/src/bacnet/basic/object/netport.c @@ -3239,35 +3239,6 @@ bool Network_Port_MSTP_Max_Info_Frames_Set( return status; } -/** - * Determine if the object property is a BACnetARRAY datatype - * @param object_property [in] BACnet object property - * @return true if the object property is a BACnetARRAY datatype - */ -static bool -Network_Port_BACnetArray_Property(BACNET_PROPERTY_ID object_property) -{ - bool status = false; - - switch (object_property) { - case PROP_EVENT_TIME_STAMPS: - case PROP_EVENT_MESSAGE_TEXTS: - case PROP_EVENT_MESSAGE_TEXTS_CONFIG: - case PROP_PROPERTY_LIST: - case PROP_TAGS: - case PROP_LINK_SPEEDS: - case PROP_IP_DNS_SERVER: - case PROP_IPV6_DNS_SERVER: - case PROP_ISSUER_CERTIFICATE_FILES: - status = true; - break; - default: - break; - } - - return status; -} - /** * ReadProperty handler for this object. For the given ReadProperty * data, the application_data is loaded or the error flags are set. @@ -3807,14 +3778,6 @@ int Network_Port_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) (void)apdu_size; break; } - /* only array properties can have optional array indices */ - if ((apdu_len >= 0) && - (!Network_Port_BACnetArray_Property(rpdata->object_property)) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -3854,18 +3817,6 @@ bool Network_Port_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_LINK_SPEEDS) && - (wp_data->object_property != PROP_IP_DNS_SERVER) && - (wp_data->object_property != PROP_IPV6_DNS_SERVER) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS) && - (wp_data->object_property != PROP_EVENT_MESSAGE_TEXTS_CONFIG) && - (wp_data->object_property != PROP_TAGS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* FIXME: len < application_data_len: more data? */ switch (wp_data->object_property) { case PROP_MAX_MASTER: diff --git a/src/bacnet/basic/object/osv.c b/src/bacnet/basic/object/osv.c index 7f6c77c2..5b095147 100644 --- a/src/bacnet/basic/object/osv.c +++ b/src/bacnet/basic/object/osv.c @@ -239,14 +239,6 @@ int OctetString_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -270,14 +262,6 @@ bool OctetString_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = OctetString_Value_Instance_To_Index(wp_data->object_instance); if (object_index < MAX_OCTETSTRING_VALUES) { diff --git a/src/bacnet/basic/object/piv.c b/src/bacnet/basic/object/piv.c index 8badcf4c..5c347f4e 100644 --- a/src/bacnet/basic/object/piv.c +++ b/src/bacnet/basic/object/piv.c @@ -250,14 +250,6 @@ int PositiveInteger_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (rpdata->object_property != PROP_PRIORITY_ARRAY) && - (rpdata->object_property != PROP_EVENT_TIME_STAMPS) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -281,14 +273,6 @@ bool PositiveInteger_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((wp_data->object_property != PROP_PRIORITY_ARRAY) && - (wp_data->object_property != PROP_EVENT_TIME_STAMPS) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } object_index = PositiveInteger_Value_Instance_To_Index(wp_data->object_instance); if (object_index < MAX_POSITIVEINTEGER_VALUES) { diff --git a/src/bacnet/basic/object/schedule.c b/src/bacnet/basic/object/schedule.c index f43c3254..603c6d75 100644 --- a/src/bacnet/basic/object/schedule.c +++ b/src/bacnet/basic/object/schedule.c @@ -408,13 +408,6 @@ int Schedule_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) break; } - if ((apdu_len >= 0) && (rpdata->object_property != PROP_WEEKLY_SCHEDULE) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } - return apdu_len; } @@ -424,16 +417,7 @@ bool Schedule_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) bool status = false; /* return value */ int len; BACNET_APPLICATION_DATA_VALUE value = { 0 }; - bool is_array; - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - wp_data->object_type, wp_data->object_property); - if (!is_array && (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* decode the some of the request */ len = bacapp_decode_application_data( wp_data->application_data, wp_data->application_data_len, &value); diff --git a/src/bacnet/basic/object/structured_view.c b/src/bacnet/basic/object/structured_view.c index 4e748550..b33bfa78 100644 --- a/src/bacnet/basic/object/structured_view.c +++ b/src/bacnet/basic/object/structured_view.c @@ -660,7 +660,6 @@ int Structured_View_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) uint32_t count = 0; uint8_t *apdu = NULL; uint16_t apdu_max = 0; - bool is_array = false; if ((rpdata == NULL) || (rpdata->application_data == NULL) || (rpdata->application_data_len == 0)) { @@ -774,15 +773,6 @@ int Structured_View_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - rpdata->object_type, rpdata->object_property); - if ((apdu_len >= 0) && (!is_array) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } diff --git a/src/bacnet/basic/object/time_value.c b/src/bacnet/basic/object/time_value.c index 9365996e..fafd4d6a 100644 --- a/src/bacnet/basic/object/time_value.c +++ b/src/bacnet/basic/object/time_value.c @@ -60,17 +60,6 @@ static const int Time_Value_Properties_Optional[] = { PROP_DESCRIPTION, static const int Time_Value_Properties_Proprietary[] = { -1 }; -/* standard properties that are arrays for this object, - but not necessary supported in this object */ -static const int BACnetARRAY_Properties[] = { PROP_PRIORITY_ARRAY, - PROP_EVENT_TIME_STAMPS, - PROP_EVENT_MESSAGE_TEXTS, - PROP_EVENT_MESSAGE_TEXTS_CONFIG, - PROP_VALUE_SOURCE_ARRAY, - PROP_COMMAND_TIME_ARRAY, - PROP_TAGS, - -1 }; - /** * Returns the list of required, optional, and proprietary properties. * Used by ReadPropertyMultiple service. @@ -428,16 +417,6 @@ bool Time_Value_Description_Set(uint32_t object_instance, const char *new_name) return status; } -/** - * @brief Determine if the object property is a BACnetARRAY property - * @param object_property - object-property to be checked - * @return true if the property is a BACnetARRAY property - */ -static bool BACnetARRAY_Property(int object_property) -{ - return property_list_member(BACnetARRAY_Properties, object_property); -} - bool Time_Value_Change_Of_Value(uint32_t object_instance) { bool status = false; @@ -591,13 +570,6 @@ int Time_Value_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - if ((apdu_len >= 0) && (!BACnetARRAY_Property(rpdata->object_property)) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -627,13 +599,6 @@ bool Time_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) wp_data->error_code = ERROR_CODE_VALUE_OUT_OF_RANGE; return false; } - if ((!BACnetARRAY_Property(wp_data->object_property)) && - (wp_data->array_index != BACNET_ARRAY_ALL)) { - /* only array properties can have array options */ - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } switch (wp_data->object_property) { case PROP_PRESENT_VALUE: if (Time_Value_Out_Of_Service(wp_data->object_instance)) { diff --git a/src/bacnet/basic/object/trendlog.c b/src/bacnet/basic/object/trendlog.c index 9383a719..2ec0f0bb 100644 --- a/src/bacnet/basic/object/trendlog.c +++ b/src/bacnet/basic/object/trendlog.c @@ -262,7 +262,6 @@ int Trend_Log_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) BACNET_CHARACTER_STRING char_string; TL_LOG_INFO *CurrentLog; uint8_t *apdu = NULL; - bool is_array; if ((rpdata == NULL) || (rpdata->application_data == NULL) || (rpdata->application_data_len == 0)) { @@ -405,15 +404,6 @@ int Trend_Log_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata) apdu_len = BACNET_STATUS_ERROR; break; } - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - rpdata->object_type, rpdata->object_property); - if ((apdu_len >= 0) && (!is_array) && - (rpdata->array_index != BACNET_ARRAY_ALL)) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } return apdu_len; } @@ -429,16 +419,7 @@ bool Trend_Log_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data) BACNET_DEVICE_OBJECT_PROPERTY_REFERENCE TempSource; bool bEffectiveEnable; int log_index; - bool is_array; - /* only array properties can have array options */ - is_array = property_list_bacnet_array_member( - wp_data->object_type, wp_data->object_property); - if (!is_array && (wp_data->array_index != BACNET_ARRAY_ALL)) { - wp_data->error_class = ERROR_CLASS_PROPERTY; - wp_data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - return false; - } /* Pin down which log to look at */ log_index = Trend_Log_Instance_To_Index(wp_data->object_instance); CurrentLog = &LogInfo[log_index]; diff --git a/src/bacnet/basic/service/h_rp.c b/src/bacnet/basic/service/h_rp.c index e42f126b..f4f17f73 100644 --- a/src/bacnet/basic/service/h_rp.c +++ b/src/bacnet/basic/service/h_rp.c @@ -124,7 +124,11 @@ void handler_read_property( &Handler_Transmit_Buffer[npdu_len + apdu_len]; rpdata.application_data_len = sizeof(Handler_Transmit_Buffer) - (npdu_len + apdu_len); - len = Device_Read_Property(&rpdata); + if (!read_property_bacnet_array_valid(&rpdata)) { + len = BACNET_STATUS_ERROR; + } else { + len = Device_Read_Property(&rpdata); + } if (len >= 0) { apdu_len += len; len = rp_ack_encode_apdu_object_property_end( diff --git a/src/bacnet/basic/service/h_rp_a.c b/src/bacnet/basic/service/h_rp_a.c index e733bc30..61b63943 100644 --- a/src/bacnet/basic/service/h_rp_a.c +++ b/src/bacnet/basic/service/h_rp_a.c @@ -50,10 +50,9 @@ void rp_ack_print_data(BACNET_READ_PROPERTY_DATA *data) /* FIXME: what if application_data_len is bigger than 255? */ /* value? need to loop until all of the len is gone... */ for (;;) { - len = bacapp_decode_known_property( + len = bacapp_decode_known_array_property( application_data, (unsigned)application_data_len, &value, - data->object_type, data->object_property); - + data->object_type, data->object_property, data->array_index); if (len < 0) { PRINTF_ERR( "RP Ack: unable to decode! %s:%s\n", diff --git a/src/bacnet/basic/service/h_rpm.c b/src/bacnet/basic/service/h_rpm.c index 31b91786..59d9d162 100644 --- a/src/bacnet/basic/service/h_rpm.c +++ b/src/bacnet/basic/service/h_rpm.c @@ -147,6 +147,8 @@ static int RPM_Encode_Property( (rpmdata->object_property == PROP_OPTIONAL)) { /* special properties only get ERROR encoding */ len = BACNET_STATUS_ERROR; + } else if (!read_property_bacnet_array_valid(&rpdata)) { + len = BACNET_STATUS_ERROR; } else { len = Device_Read_Property(&rpdata); } diff --git a/src/bacnet/basic/service/h_rpm_a.c b/src/bacnet/basic/service/h_rpm_a.c index b7ada77a..73ee3fd7 100644 --- a/src/bacnet/basic/service/h_rpm_a.c +++ b/src/bacnet/basic/service/h_rpm_a.c @@ -115,10 +115,11 @@ int rpm_ack_decode_service_request( } else { /* one or more (array or list) elements to decode */ while (value && (apdu_len > 0)) { - len = bacapp_decode_known_property( + len = bacapp_decode_known_array_property( apdu, (unsigned)apdu_len, value, rpm_object->object_type, - rpm_property->propertyIdentifier); + rpm_property->propertyIdentifier, + rpm_property->propertyArrayIndex); /* If len == 0 then it's an empty structure, which is * OK. */ if (len < 0) { diff --git a/src/bacnet/basic/service/h_wp.c b/src/bacnet/basic/service/h_wp.c index 5c32a754..1a9ff64f 100644 --- a/src/bacnet/basic/service/h_wp.c +++ b/src/bacnet/basic/service/h_wp.c @@ -55,6 +55,7 @@ void handler_write_property( BACNET_WRITE_PROPERTY_DATA wp_data; int len = 0; bool bcontinue = true; + bool success; int pdu_len = 0; BACNET_NPDU_DATA npdu_data; int bytes_sent = 0; @@ -103,7 +104,11 @@ void handler_write_property( bcontinue = false; } if (bcontinue) { - if (Device_Write_Property(&wp_data)) { + success = write_property_bacnet_array_valid(&wp_data); + if (!success) { + success = Device_Write_Property(&wp_data); + } + if (success) { len = encode_simple_ack( &Handler_Transmit_Buffer[pdu_len], service_data->invoke_id, SERVICE_CONFIRMED_WRITE_PROPERTY); diff --git a/src/bacnet/basic/service/h_wpm.c b/src/bacnet/basic/service/h_wpm.c index b2e00798..6c2dc3c7 100644 --- a/src/bacnet/basic/service/h_wpm.c +++ b/src/bacnet/basic/service/h_wpm.c @@ -72,6 +72,9 @@ static int write_property_multiple_decode( (unsigned long)wp_data->object_property, (unsigned long)wp_data->priority, (long)wp_data->array_index); + if (!write_property_bacnet_array_valid(wp_data)) { + return BACNET_STATUS_ERROR; + } if (device_write_property) { if (device_write_property(wp_data) == false) { /* Workaround BTL Specified Test 9.23.2.X5 */ diff --git a/src/bacnet/proplist.c b/src/bacnet/proplist.c index ed6524ab..705af554 100644 --- a/src/bacnet/proplist.c +++ b/src/bacnet/proplist.c @@ -281,31 +281,17 @@ int property_list_common_encode( apdu = rpdata->application_data; switch (rpdata->object_property) { case PROP_OBJECT_IDENTIFIER: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - /* Device Object exception: requested instance - may not match our instance if a wildcard */ - if (rpdata->object_type == OBJECT_DEVICE) { - rpdata->object_instance = device_instance_number; - } - apdu_len = encode_application_object_id( - &apdu[0], rpdata->object_type, rpdata->object_instance); + /* Device Object exception: requested instance + may not match our instance if a wildcard */ + if (rpdata->object_type == OBJECT_DEVICE) { + rpdata->object_instance = device_instance_number; } + apdu_len = encode_application_object_id( + &apdu[0], rpdata->object_type, rpdata->object_instance); break; case PROP_OBJECT_TYPE: - /* only array properties can have array options */ - if (rpdata->array_index != BACNET_ARRAY_ALL) { - rpdata->error_class = ERROR_CLASS_PROPERTY; - rpdata->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; - apdu_len = BACNET_STATUS_ERROR; - } else { - apdu_len = encode_application_enumerated( - &apdu[0], rpdata->object_type); - } + apdu_len = + encode_application_enumerated(&apdu[0], rpdata->object_type); break; default: break; @@ -393,6 +379,8 @@ static const int Properties_BACnetARRAY[] = { PROP_TAGS, PROP_ISSUER_CERTIFICATE_FILES, PROP_SC_HUB_FUNCTION_ACCEPT_URIS, + PROP_NEGATIVE_ACCESS_RULES, + PROP_POSITIVE_ACCESS_RULES, -1 }; diff --git a/src/bacnet/rp.c b/src/bacnet/rp.c index e1ff347f..e5293a64 100644 --- a/src/bacnet/rp.c +++ b/src/bacnet/rp.c @@ -11,6 +11,7 @@ #include "bacnet/bacdef.h" /* BACnet Stack API */ #include "bacnet/bacdcode.h" +#include "bacnet/proplist.h" #include "bacnet/rp.h" #if BACNET_SVC_RP_A @@ -360,6 +361,28 @@ int rp_ack_encode_apdu_object_property_end(uint8_t *apdu) return apdu_len; } +/** + * @brief Validate the array indices for the given property + * @param data - ReadProperty data, including requested data and + * data for the reply, or error response. + * @return true if the property is an array and the array indices are used. + */ +bool read_property_bacnet_array_valid(BACNET_READ_PROPERTY_DATA *data) +{ + bool is_array; + + /* only array properties can have array options */ + is_array = property_list_bacnet_array_member( + data->object_type, data->object_property); + if ((!is_array) && (data->array_index != BACNET_ARRAY_ALL)) { + data->error_class = ERROR_CLASS_PROPERTY; + data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; + return false; + } + + return true; +} + /** Encode the acknowledge. * * @param apdu Pointer to the buffer for encoding, or NULL for length diff --git a/src/bacnet/rp.h b/src/bacnet/rp.h index 9bdeb7e6..c6e03e04 100644 --- a/src/bacnet/rp.h +++ b/src/bacnet/rp.h @@ -75,6 +75,9 @@ BACNET_STACK_EXPORT int rp_decode_service_request( const uint8_t *apdu, unsigned apdu_len, BACNET_READ_PROPERTY_DATA *rpdata); +BACNET_STACK_EXPORT +bool read_property_bacnet_array_valid(BACNET_READ_PROPERTY_DATA *data); + /* method to encode the ack without extra buffer */ BACNET_STACK_EXPORT int rp_ack_encode_apdu_init( diff --git a/src/bacnet/wp.c b/src/bacnet/wp.c index b8756d90..f2ad2c5d 100644 --- a/src/bacnet/wp.c +++ b/src/bacnet/wp.c @@ -11,6 +11,7 @@ #include "bacnet/bacdef.h" /* BACnet Stack API */ #include "bacnet/bacdcode.h" +#include "bacnet/proplist.h" #include "bacnet/wp.h" /** @file wp.c Encode/Decode BACnet Write Property APDUs */ @@ -426,6 +427,29 @@ bool write_property_empty_string_valid( return (valid); } +/** + * @brief simple validation of BACnetARRAY for Write Property + * @param data - #BACNET_WRITE_PROPERTY_DATA data, including + * requested data and space for the reply, or error response. + * @return true if the property is an array and the request uses array + * indices. + */ +bool write_property_bacnet_array_valid(BACNET_WRITE_PROPERTY_DATA *data) +{ + bool is_array; + + /* only array properties can have array options */ + is_array = property_list_bacnet_array_member( + data->object_type, data->object_property); + if (!is_array && (data->array_index != BACNET_ARRAY_ALL)) { + data->error_class = ERROR_CLASS_PROPERTY; + data->error_code = ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY; + return false; + } + + return true; +} + /** * @brief Helper to decode a WriteProperty unsigned integer and set a property * @param wp_data - #BACNET_WRITE_PROPERTY_DATA data including any diff --git a/src/bacnet/wp.h b/src/bacnet/wp.h index 1dfbc80d..71df69d5 100644 --- a/src/bacnet/wp.h +++ b/src/bacnet/wp.h @@ -94,6 +94,8 @@ bool write_property_empty_string_valid( BACNET_WRITE_PROPERTY_DATA *wp_data, const BACNET_APPLICATION_DATA_VALUE *value, size_t len_max); +BACNET_STACK_EXPORT +bool write_property_bacnet_array_valid(BACNET_WRITE_PROPERTY_DATA *wp_data); BACNET_STACK_EXPORT bool write_property_unsigned_decode( diff --git a/test/bacnet/basic/object/acc/CMakeLists.txt b/test/bacnet/basic/object/acc/CMakeLists.txt index 1fb46a89..4ca28496 100644 --- a/test/bacnet/basic/object/acc/CMakeLists.txt +++ b/test/bacnet/basic/object/acc/CMakeLists.txt @@ -50,6 +50,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/basic/sys/days.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/access_credential/CMakeLists.txt b/test/bacnet/basic/object/access_credential/CMakeLists.txt index 0bfadb74..3b76b44e 100644 --- a/test/bacnet/basic/object/access_credential/CMakeLists.txt +++ b/test/bacnet/basic/object/access_credential/CMakeLists.txt @@ -54,6 +54,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/access_door/CMakeLists.txt b/test/bacnet/basic/object/access_door/CMakeLists.txt index ec00d581..b63d0866 100644 --- a/test/bacnet/basic/object/access_door/CMakeLists.txt +++ b/test/bacnet/basic/object/access_door/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/access_point/CMakeLists.txt b/test/bacnet/basic/object/access_point/CMakeLists.txt index 97aa0d8b..7934f81e 100644 --- a/test/bacnet/basic/object/access_point/CMakeLists.txt +++ b/test/bacnet/basic/object/access_point/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/weeklyschedule.c ${SRC_DIR}/bacnet/bactimevalue.c @@ -59,6 +60,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/special_event.c ${SRC_DIR}/bacnet/channel_value.c ${SRC_DIR}/bacnet/secure_connect.c + ${SRC_DIR}/bacnet/wp.c # Test and test library files ./src/main.c ${ZTST_DIR}/ztest_mock.c diff --git a/test/bacnet/basic/object/access_user/CMakeLists.txt b/test/bacnet/basic/object/access_user/CMakeLists.txt index 8826bfeb..f2982c5c 100644 --- a/test/bacnet/basic/object/access_user/CMakeLists.txt +++ b/test/bacnet/basic/object/access_user/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/access_zone/CMakeLists.txt b/test/bacnet/basic/object/access_zone/CMakeLists.txt index bd42a5aa..3a570e20 100644 --- a/test/bacnet/basic/object/access_zone/CMakeLists.txt +++ b/test/bacnet/basic/object/access_zone/CMakeLists.txt @@ -55,6 +55,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/bacfile/CMakeLists.txt b/test/bacnet/basic/object/bacfile/CMakeLists.txt index 085b23cc..4b0a12d5 100644 --- a/test/bacnet/basic/object/bacfile/CMakeLists.txt +++ b/test/bacnet/basic/object/bacfile/CMakeLists.txt @@ -57,6 +57,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/memcopy.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c diff --git a/test/bacnet/basic/object/bitstring_value/src/main.c b/test/bacnet/basic/object/bitstring_value/src/main.c index 9c47b595..3e94b4f5 100644 --- a/test/bacnet/basic/object/bitstring_value/src/main.c +++ b/test/bacnet/basic/object/bitstring_value/src/main.c @@ -93,16 +93,6 @@ static void test_BitString_Value_Object(void) zassert_false(status, NULL); zassert_equal(wpdata.error_class, ERROR_CLASS_PROPERTY, NULL); zassert_equal(wpdata.error_code, ERROR_CODE_WRITE_ACCESS_DENIED, NULL); - /* WP to property using priority array */ - wpdata.object_property = PROP_PRESENT_VALUE; - value.tag = BACNET_APPLICATION_TAG_BIT_STRING; - wpdata.array_index = 0; - wpdata.application_data_len = - bacapp_encode_application_data(wpdata.application_data, &value); - status = BitString_Value_Write_Property(&wpdata); - zassert_false(status, NULL); - zassert_equal(wpdata.error_class, ERROR_CLASS_PROPERTY, NULL); - zassert_equal(wpdata.error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, NULL); /* no application data */ wpdata.application_data_len = 0; status = BitString_Value_Write_Property(&wpdata); diff --git a/test/bacnet/basic/object/blo/CMakeLists.txt b/test/bacnet/basic/object/blo/CMakeLists.txt index 70eb6aea..0e506efb 100644 --- a/test/bacnet/basic/object/blo/CMakeLists.txt +++ b/test/bacnet/basic/object/blo/CMakeLists.txt @@ -56,6 +56,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/color_object/CMakeLists.txt b/test/bacnet/basic/object/color_object/CMakeLists.txt index c6c048bd..7859b4bb 100644 --- a/test/bacnet/basic/object/color_object/CMakeLists.txt +++ b/test/bacnet/basic/object/color_object/CMakeLists.txt @@ -56,6 +56,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/memcopy.c ${SRC_DIR}/bacnet/wp.c diff --git a/test/bacnet/basic/object/color_temperature/CMakeLists.txt b/test/bacnet/basic/object/color_temperature/CMakeLists.txt index 634fd982..06e6dc40 100644 --- a/test/bacnet/basic/object/color_temperature/CMakeLists.txt +++ b/test/bacnet/basic/object/color_temperature/CMakeLists.txt @@ -56,6 +56,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/memcopy.c ${SRC_DIR}/bacnet/wp.c diff --git a/test/bacnet/basic/object/lo/CMakeLists.txt b/test/bacnet/basic/object/lo/CMakeLists.txt index 36344ebb..bf5c7cfe 100644 --- a/test/bacnet/basic/object/lo/CMakeLists.txt +++ b/test/bacnet/basic/object/lo/CMakeLists.txt @@ -57,6 +57,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/lsp/CMakeLists.txt b/test/bacnet/basic/object/lsp/CMakeLists.txt index 3afe4eed..804882ac 100644 --- a/test/bacnet/basic/object/lsp/CMakeLists.txt +++ b/test/bacnet/basic/object/lsp/CMakeLists.txt @@ -52,6 +52,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/nc/CMakeLists.txt b/test/bacnet/basic/object/nc/CMakeLists.txt index 121c5fd6..b971cf0e 100644 --- a/test/bacnet/basic/object/nc/CMakeLists.txt +++ b/test/bacnet/basic/object/nc/CMakeLists.txt @@ -57,6 +57,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/list_element.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/netport/src/main.c b/test/bacnet/basic/object/netport/src/main.c index 33443649..9c6f85a7 100644 --- a/test/bacnet/basic/object/netport/src/main.c +++ b/test/bacnet/basic/object/netport/src/main.c @@ -568,17 +568,15 @@ static void test_network_port_sc_status_encode_decode(void) object_value.object_property = rpdata.object_property = PROP_SC_FAILED_CONNECTION_REQUESTS; - // count (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 0; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); - - // context (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 1; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); - - // all context + if (property_list_bacnet_array_member( + rpdata.object_type, rpdata.object_property)) { + object_value.array_index = rpdata.array_index = 0; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); + object_value.array_index = rpdata.array_index = 1; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); + } object_value.array_index = rpdata.array_index = BACNET_ARRAY_ALL; len = Network_Port_Read_Property(&rpdata); zassert_true(len > 0, NULL); @@ -618,15 +616,17 @@ static void test_network_port_sc_status_encode_decode(void) object_value.object_property = rpdata.object_property = PROP_SC_HUB_FUNCTION_CONNECTION_STATUS; - // count (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 0; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); + if (property_list_bacnet_array_member( + rpdata.object_type, rpdata.object_property)) { + object_value.array_index = rpdata.array_index = 0; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); - // context (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 1; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); + // context (error: property is not BacArray) + object_value.array_index = rpdata.array_index = 1; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); + } len = bacapp_snprintf_value(NULL, 0, &object_value); zassert_true((len > 0) && (len < sizeof(str) - 1), NULL); @@ -707,17 +707,15 @@ static void test_network_port_sc_status_encode_decode(void) object_value.object_property = rpdata.object_property = PROP_SC_DIRECT_CONNECT_CONNECTION_STATUS; - // count (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 0; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); - - // context (error: property is not BacArray) - object_value.array_index = rpdata.array_index = 1; - len = Network_Port_Read_Property(&rpdata); - zassert_true(len == -1, NULL); - - // all context + if (property_list_bacnet_array_member( + rpdata.object_type, rpdata.object_property)) { + object_value.array_index = rpdata.array_index = 0; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); + object_value.array_index = rpdata.array_index = 1; + len = Network_Port_Read_Property(&rpdata); + zassert_not_equal(len, -1, NULL); + } object_value.array_index = rpdata.array_index = BACNET_ARRAY_ALL; len = Network_Port_Read_Property(&rpdata); zassert_true(len > 0, NULL); diff --git a/test/bacnet/basic/object/osv/CMakeLists.txt b/test/bacnet/basic/object/osv/CMakeLists.txt index 1ae7b80c..97485b41 100644 --- a/test/bacnet/basic/object/osv/CMakeLists.txt +++ b/test/bacnet/basic/object/osv/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/piv/CMakeLists.txt b/test/bacnet/basic/object/piv/CMakeLists.txt index 9dad4962..5aed0bec 100644 --- a/test/bacnet/basic/object/piv/CMakeLists.txt +++ b/test/bacnet/basic/object/piv/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/wp.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/basic/object/test/property_test.c b/test/bacnet/basic/object/test/property_test.c index 9e39f750..2947d4c2 100644 --- a/test/bacnet/basic/object/test/property_test.c +++ b/test/bacnet/basic/object/test/property_test.c @@ -48,16 +48,16 @@ bool bacnet_object_property_write_test( wp_data->object_type, wp_data->object_property); is_list = property_list_bacnet_list_member( wp_data->object_type, wp_data->object_property); - if (!is_array && !is_list) { + if (is_array) { wp_data->array_index = 0; status = write_property(wp_data); - zassert_equal(status, false, NULL); - zassert_equal(wp_data->error_class, ERROR_CLASS_PROPERTY, NULL); - zassert_equal( - wp_data->error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, - "property=%s error_code=%s", - bactext_property_name(wp_data->object_property), - bactext_error_code_name(wp_data->error_code)); + if (!status) { + zassert_not_equal( + wp_data->error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, + "property=%s array_index=0: error code=%s.\n", + bactext_property_name(wp_data->object_property), + bactext_error_code_name(wp_data->error_code)); + } } } @@ -174,21 +174,13 @@ int bacnet_object_property_read_test( rpdata->object_type, rpdata->object_property); is_list = property_list_bacnet_list_member( rpdata->object_type, rpdata->object_property); - if (!is_array && !is_list) { + if (is_array) { + /* test an array index that must be implemented */ rpdata->array_index = 0; read_len = read_property(rpdata); - zassert_equal( - read_len, BACNET_STATUS_ERROR, "property '%s': is not an array!\n", - bactext_property_name(rpdata->object_property)); - zassert_equal(read_len, BACNET_STATUS_ERROR, NULL); - zassert_equal( - rpdata->error_class, ERROR_CLASS_PROPERTY, - "property '%s': error class is %s\n", - bactext_property_name(rpdata->object_property), - bactext_error_class_name(rpdata->error_class)); - zassert_equal( - rpdata->error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, - "property '%s': error code is %s\n", + zassert_not_equal( + read_len, BACNET_STATUS_ERROR, + "property '%s' array_index=0: error code is %s.\n", bactext_property_name(rpdata->object_property), bactext_error_code_name(rpdata->error_code)); } diff --git a/test/bacnet/rp/CMakeLists.txt b/test/bacnet/rp/CMakeLists.txt index ae2d1a33..3320ea82 100644 --- a/test/bacnet/rp/CMakeLists.txt +++ b/test/bacnet/rp/CMakeLists.txt @@ -38,6 +38,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/bacint.c ${SRC_DIR}/bacnet/bacreal.c ${SRC_DIR}/bacnet/bacstr.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/basic/sys/bigend.c # Test and test library files ./src/main.c diff --git a/test/bacnet/wp/CMakeLists.txt b/test/bacnet/wp/CMakeLists.txt index 41c7483b..cc98cc80 100644 --- a/test/bacnet/wp/CMakeLists.txt +++ b/test/bacnet/wp/CMakeLists.txt @@ -51,6 +51,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/basic/sys/days.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/weeklyschedule.c diff --git a/test/bacnet/wpm/CMakeLists.txt b/test/bacnet/wpm/CMakeLists.txt index f3728736..7ff19224 100644 --- a/test/bacnet/wpm/CMakeLists.txt +++ b/test/bacnet/wpm/CMakeLists.txt @@ -52,6 +52,7 @@ add_executable(${PROJECT_NAME} ${SRC_DIR}/bacnet/basic/sys/days.c ${SRC_DIR}/bacnet/hostnport.c ${SRC_DIR}/bacnet/lighting.c + ${SRC_DIR}/bacnet/proplist.c ${SRC_DIR}/bacnet/timestamp.c ${SRC_DIR}/bacnet/indtext.c ${SRC_DIR}/bacnet/weeklyschedule.c