diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/ai.c b/bacnet-stack/ports/bdk-atxx4-mstp/ai.c index c166173c..747df57f 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/ai.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/ai.c @@ -151,7 +151,8 @@ int Analog_Input_Read_Property( BACNET_READ_PROPERTY_DATA * rpdata) { int apdu_len = 0; /* return value */ - BACNET_BIT_STRING bit_string; + BACNET_CHARACTER_STRING char_string = { 0 }; + BACNET_BIT_STRING bit_string = { 0 }; uint8_t *apdu = NULL; if ((rpdata == NULL) || (rpdata->application_data == NULL) || @@ -160,7 +161,22 @@ int Analog_Input_Read_Property( } apdu = rpdata->application_data; switch (rpdata->object_property) { - /* object id, object name, object type are handled in Device object */ + case PROP_OBJECT_IDENTIFIER: + apdu_len = + encode_application_object_id(&apdu[0], rpdata->object_type, + rpdata->object_instance); + break; + case PROP_OBJECT_NAME: + Analog_Input_Object_Name(rpdata->object_instance, &char_string); + apdu_len = + encode_application_character_string(&apdu[0], + &char_string); + break; + case PROP_OBJECT_TYPE: + apdu_len = + encode_application_enumerated(&apdu[0], + rpdata->object_type); + break; case PROP_PRESENT_VALUE: apdu_len = encode_application_real(&apdu[0], diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/av.c b/bacnet-stack/ports/bdk-atxx4-mstp/av.c index 44f2fc20..b56bed17 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/av.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/av.c @@ -199,6 +199,7 @@ int Analog_Value_Read_Property( int apdu_len = 0; /* return value */ BACNET_BIT_STRING bit_string; float real_value = 1.414F; + BACNET_CHARACTER_STRING char_string = { 0 }; #if 0 unsigned object_index = 0; unsigned i = 0; @@ -212,7 +213,22 @@ int Analog_Value_Read_Property( } apdu = rpdata->application_data; switch (rpdata->object_property) { - /* object id, object name, object type are handled in Device object */ + case PROP_OBJECT_IDENTIFIER: + apdu_len = + encode_application_object_id(&apdu[0], rpdata->object_type, + rpdata->object_instance); + break; + case PROP_OBJECT_NAME: + Analog_Value_Object_Name(rpdata->object_instance, &char_string); + apdu_len = + encode_application_character_string(&apdu[0], + &char_string); + break; + case PROP_OBJECT_TYPE: + apdu_len = + encode_application_enumerated(&apdu[0], + rpdata->object_type); + break; case PROP_PRESENT_VALUE: real_value = Analog_Value_Present_Value(rpdata->object_instance); apdu_len = encode_application_real(&apdu[0], real_value); diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.ewp b/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.ewp index ea802ba8..97c41ed8 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.ewp +++ b/bacnet-stack/ports/bdk-atxx4-mstp/bacnet.ewp @@ -10,9 +10,9 @@ 1 General - 10 + 11 - 8 + 9 1 1 - + ICCAVR - 5 + 6 - 14 + 17 1 1 - - - - - - + + + + + + + + + + AAVR - 4 + 5 - 10 + 11 1 1 + @@ -1006,9 +1023,9 @@ 0 General - 10 + 11 - 8 + 9 1 0 - + ICCAVR - 5 + 6 - 14 + 17 1 0 - - - - - - + + + + + + + + + + AAVR - 4 + 5 - 10 + 11 1 0 + diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/bi.c b/bacnet-stack/ports/bdk-atxx4-mstp/bi.c index 3f40fd29..81134f2d 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/bi.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/bi.c @@ -178,9 +178,10 @@ int Binary_Input_Read_Property( BACNET_READ_PROPERTY_DATA * rpdata) { int apdu_len = 0; /* return value */ - BACNET_BIT_STRING bit_string; + BACNET_BIT_STRING bit_string = {0}; BACNET_POLARITY polarity = POLARITY_NORMAL; BACNET_BINARY_PV value = BINARY_INACTIVE; + BACNET_CHARACTER_STRING char_string = {0}; uint8_t *apdu = NULL; if ((rpdata->application_data == NULL) || @@ -189,7 +190,22 @@ int Binary_Input_Read_Property( } apdu = rpdata->application_data; switch (rpdata->object_property) { - /* object id, object name, object type are handled in Device object */ + case PROP_OBJECT_IDENTIFIER: + apdu_len = + encode_application_object_id(&apdu[0], rpdata->object_type, + rpdata->object_instance); + break; + case PROP_OBJECT_NAME: + Binary_Input_Object_Name(rpdata->object_instance, &char_string); + apdu_len = + encode_application_character_string(&apdu[0], + &char_string); + break; + case PROP_OBJECT_TYPE: + apdu_len = + encode_application_enumerated(&apdu[0], + rpdata->object_type); + break; case PROP_PRESENT_VALUE: value = Binary_Input_Present_Value(rpdata->object_instance); apdu_len = encode_application_enumerated(&apdu[0], value); diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/bo.c b/bacnet-stack/ports/bdk-atxx4-mstp/bo.c index d7d6cf64..ab7863ad 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/bo.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/bo.c @@ -250,8 +250,8 @@ int Binary_Output_Read_Property( { int len = 0; int apdu_len = 0; /* return value */ - BACNET_BIT_STRING bit_string; - BACNET_CHARACTER_STRING char_string; + BACNET_BIT_STRING bit_string = {0}; + BACNET_CHARACTER_STRING char_string = {0}; BACNET_BINARY_PV present_value = BINARY_INACTIVE; unsigned object_index = 0; unsigned i = 0; @@ -264,7 +264,22 @@ int Binary_Output_Read_Property( } apdu = rpdata->application_data; switch (rpdata->object_property) { - /* object id, object name, object type are handled in Device object */ + case PROP_OBJECT_IDENTIFIER: + apdu_len = + encode_application_object_id(&apdu[0], rpdata->object_type, + rpdata->object_instance); + break; + case PROP_OBJECT_NAME: + Binary_Output_Object_Name(rpdata->object_instance, &char_string); + apdu_len = + encode_application_character_string(&apdu[0], + &char_string); + break; + case PROP_OBJECT_TYPE: + apdu_len = + encode_application_enumerated(&apdu[0], + rpdata->object_type); + break; case PROP_PRESENT_VALUE: present_value = Binary_Output_Present_Value(rpdata->object_instance); diff --git a/bacnet-stack/ports/bdk-atxx4-mstp/device.c b/bacnet-stack/ports/bdk-atxx4-mstp/device.c index 8ef4856b..951de3fe 100644 --- a/bacnet-stack/ports/bdk-atxx4-mstp/device.c +++ b/bacnet-stack/ports/bdk-atxx4-mstp/device.c @@ -169,52 +169,6 @@ 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); - } - 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); - } - 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); - } - break; default: if (pObject->Object_Read_Property) { apdu_len = pObject->Object_Read_Property(rpdata); @@ -234,18 +188,16 @@ int Device_Read_Property( struct my_object_functions *pObject = NULL; /* initialize the default return values */ + rpdata->error_class = ERROR_CLASS_OBJECT; + rpdata->error_code = ERROR_CODE_UNKNOWN_OBJECT; pObject = Device_Objects_Find_Functions(rpdata->object_type); - if (pObject) { + if (pObject != NULL) { if (pObject->Object_Valid_Instance && pObject->Object_Valid_Instance(rpdata->object_instance)) { - apdu_len = Read_Property_Common(pObject, rpdata); - } else { - rpdata->error_class = ERROR_CLASS_OBJECT; - rpdata->error_code = ERROR_CODE_UNKNOWN_OBJECT; + if (pObject->Object_Read_Property) { + apdu_len = pObject->Object_Read_Property(rpdata); + } } - } else { - rpdata->error_class = ERROR_CLASS_OBJECT; - rpdata->error_code = ERROR_CODE_UNKNOWN_OBJECT; } return apdu_len; @@ -633,8 +585,8 @@ int Device_Read_Property_Local( { int apdu_len = 0; /* return value */ int len = 0; /* apdu len intermediate value */ - BACNET_BIT_STRING bit_string; - BACNET_CHARACTER_STRING char_string; + BACNET_BIT_STRING bit_string = {0}; + BACNET_CHARACTER_STRING char_string = {0}; unsigned i = 0; int object_type = 0; uint32_t instance = 0; @@ -648,7 +600,22 @@ int Device_Read_Property_Local( } apdu = rpdata->application_data; switch (rpdata->object_property) { - /* object name, object id, object type are handled in Device object */ + case PROP_OBJECT_IDENTIFIER: + apdu_len = + encode_application_object_id(&apdu[0], rpdata->object_type, + rpdata->object_instance); + break; + case PROP_OBJECT_NAME: + Device_Object_Name(rpdata->object_instance, &char_string); + apdu_len = + encode_application_character_string(&apdu[0], + &char_string); + break; + case PROP_OBJECT_TYPE: + apdu_len = + encode_application_enumerated(&apdu[0], + rpdata->object_type); + break; case PROP_DESCRIPTION: bacnet_name(NV_EEPROM_DEVICE_DESCRIPTION, &char_string, "BACnet Development Kit");