Bugfix/device object protocol revision 14 property list (#82)
* Added property-list to device object for client applications * Added property-list to some AVR ARM and RX62 ports Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
@@ -37,6 +37,7 @@
|
|||||||
#include "rs485.h"
|
#include "rs485.h"
|
||||||
#include "bacnet/version.h"
|
#include "bacnet/version.h"
|
||||||
#include "bacnet/basic/services.h"
|
#include "bacnet/basic/services.h"
|
||||||
|
#include "bacnet/proplist.h"
|
||||||
/* objects */
|
/* objects */
|
||||||
#include "bacnet/basic/object/device.h"
|
#include "bacnet/basic/object/device.h"
|
||||||
#include "bacnet/basic/object/ai.h"
|
#include "bacnet/basic/object/ai.h"
|
||||||
@@ -138,6 +139,9 @@ static int Read_Property_Common(
|
|||||||
int apdu_len = BACNET_STATUS_ERROR;
|
int apdu_len = BACNET_STATUS_ERROR;
|
||||||
BACNET_CHARACTER_STRING char_string;
|
BACNET_CHARACTER_STRING char_string;
|
||||||
uint8_t *apdu = NULL;
|
uint8_t *apdu = NULL;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
struct special_property_list_t property_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((rpdata->application_data == NULL) ||
|
if ((rpdata->application_data == NULL) ||
|
||||||
(rpdata->application_data_len == 0)) {
|
(rpdata->application_data_len == 0)) {
|
||||||
@@ -188,6 +192,19 @@ static int Read_Property_Common(
|
|||||||
&apdu[0], rpdata->object_type);
|
&apdu[0], rpdata->object_type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
case PROP_PROPERTY_LIST:
|
||||||
|
Device_Objects_Property_List(
|
||||||
|
rpdata->object_type,
|
||||||
|
rpdata->object_instance,
|
||||||
|
&property_list);
|
||||||
|
apdu_len = property_list_encode(
|
||||||
|
rpdata,
|
||||||
|
property_list.Required.pList,
|
||||||
|
property_list.Optional.pList,
|
||||||
|
property_list.Proprietary.pList);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
if (pObject->Object_Read_Property) {
|
if (pObject->Object_Read_Property) {
|
||||||
apdu_len = pObject->Object_Read_Property(rpdata);
|
apdu_len = pObject->Object_Read_Property(rpdata);
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ CORESRC = \
|
|||||||
$(BACNET_CORE)/ihave.c \
|
$(BACNET_CORE)/ihave.c \
|
||||||
$(BACNET_CORE)/memcopy.c \
|
$(BACNET_CORE)/memcopy.c \
|
||||||
$(BACNET_CORE)/npdu.c \
|
$(BACNET_CORE)/npdu.c \
|
||||||
|
$(BACNET_CORE)/proplist.c \
|
||||||
$(BACNET_CORE)/rd.c \
|
$(BACNET_CORE)/rd.c \
|
||||||
$(BACNET_CORE)/reject.c \
|
$(BACNET_CORE)/reject.c \
|
||||||
$(BACNET_CORE)/rp.c \
|
$(BACNET_CORE)/rp.c \
|
||||||
|
|||||||
@@ -353,6 +353,10 @@
|
|||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
<Link>BACnet Core\npdu.c</Link>
|
<Link>BACnet Core\npdu.c</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="..\..\src\bacnet\proplist.c">
|
||||||
|
<SubType>compile</SubType>
|
||||||
|
<Link>BACnet Core\npdu.c</Link>
|
||||||
|
</Compile>
|
||||||
<Compile Include="..\..\src\bacnet\rd.c">
|
<Compile Include="..\..\src\bacnet\rd.c">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
<Link>BACnet Core\rd.c</Link>
|
<Link>BACnet Core\rd.c</Link>
|
||||||
|
|||||||
@@ -2235,6 +2235,9 @@
|
|||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\src\bacnet\npdu.c</name>
|
<name>$PROJ_DIR$\..\..\src\bacnet\npdu.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\src\bacnet\proplist.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\src\bacnet\rd.c</name>
|
<name>$PROJ_DIR$\..\..\src\bacnet\rd.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|||||||
@@ -67,6 +67,7 @@
|
|||||||
<file file_name="../../src/bacnet/ihave.c"/>
|
<file file_name="../../src/bacnet/ihave.c"/>
|
||||||
<file file_name="../../src/bacnet/memcopy.c"/>
|
<file file_name="../../src/bacnet/memcopy.c"/>
|
||||||
<file file_name="../../src/bacnet/npdu.c"/>
|
<file file_name="../../src/bacnet/npdu.c"/>
|
||||||
|
<file file_name="../../src/bacnet/proplist.c"/>
|
||||||
<file file_name="../../src/bacnet/rd.c"/>
|
<file file_name="../../src/bacnet/rd.c"/>
|
||||||
<file file_name="../../src/bacnet/reject.c"/>
|
<file file_name="../../src/bacnet/reject.c"/>
|
||||||
<file file_name="../../src/bacnet/rp.c"/>
|
<file file_name="../../src/bacnet/rp.c"/>
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
#include "stack.h"
|
#include "stack.h"
|
||||||
#include "bacnet/basic/services.h"
|
#include "bacnet/basic/services.h"
|
||||||
#include "bname.h"
|
#include "bname.h"
|
||||||
|
#include "bacnet/proplist.h"
|
||||||
/* objects */
|
/* objects */
|
||||||
#include "bacnet/basic/object/device.h"
|
#include "bacnet/basic/object/device.h"
|
||||||
#include "bacnet/basic/object/ai.h"
|
#include "bacnet/basic/object/ai.h"
|
||||||
@@ -136,7 +137,9 @@ int Device_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata)
|
|||||||
{
|
{
|
||||||
int apdu_len = BACNET_STATUS_ERROR;
|
int apdu_len = BACNET_STATUS_ERROR;
|
||||||
struct my_object_functions *pObject = NULL;
|
struct my_object_functions *pObject = NULL;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
struct special_property_list_t property_list;
|
||||||
|
#endif
|
||||||
/* initialize the default return values */
|
/* initialize the default return values */
|
||||||
rpdata->error_class = ERROR_CLASS_OBJECT;
|
rpdata->error_class = ERROR_CLASS_OBJECT;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_OBJECT;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_OBJECT;
|
||||||
@@ -145,7 +148,20 @@ int Device_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata)
|
|||||||
if (pObject->Object_Valid_Instance &&
|
if (pObject->Object_Valid_Instance &&
|
||||||
pObject->Object_Valid_Instance(rpdata->object_instance)) {
|
pObject->Object_Valid_Instance(rpdata->object_instance)) {
|
||||||
if (pObject->Object_Read_Property) {
|
if (pObject->Object_Read_Property) {
|
||||||
apdu_len = pObject->Object_Read_Property(rpdata);
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
if ((int)rpdata->object_property == PROP_PROPERTY_LIST) {
|
||||||
|
Device_Objects_Property_List(rpdata->object_type,
|
||||||
|
rpdata->object_instance,
|
||||||
|
&property_list);
|
||||||
|
apdu_len = property_list_encode(rpdata,
|
||||||
|
property_list.Required.pList,
|
||||||
|
property_list.Optional.pList,
|
||||||
|
property_list.Proprietary.pList);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
apdu_len = pObject->Object_Read_Property(rpdata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
#include "bacnet/basic/services.h"
|
#include "bacnet/basic/services.h"
|
||||||
#include "bacnet/datalink/datalink.h"
|
#include "bacnet/datalink/datalink.h"
|
||||||
#include "bacnet/basic/binding/address.h"
|
#include "bacnet/basic/binding/address.h"
|
||||||
|
#include "bacnet/proplist.h"
|
||||||
/* os specfic includes */
|
/* os specfic includes */
|
||||||
#include "bacnet/basic/sys/mstimer.h"
|
#include "bacnet/basic/sys/mstimer.h"
|
||||||
/* objects */
|
/* objects */
|
||||||
@@ -129,6 +130,9 @@ static int Read_Property_Common(
|
|||||||
BACNET_CHARACTER_STRING char_string;
|
BACNET_CHARACTER_STRING char_string;
|
||||||
char *pString = "";
|
char *pString = "";
|
||||||
uint8_t *apdu = NULL;
|
uint8_t *apdu = NULL;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
struct special_property_list_t property_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((rpdata->application_data == NULL) ||
|
if ((rpdata->application_data == NULL) ||
|
||||||
(rpdata->application_data_len == 0)) {
|
(rpdata->application_data_len == 0)) {
|
||||||
@@ -157,6 +161,19 @@ static int Read_Property_Common(
|
|||||||
apdu_len =
|
apdu_len =
|
||||||
encode_application_enumerated(&apdu[0], rpdata->object_type);
|
encode_application_enumerated(&apdu[0], rpdata->object_type);
|
||||||
break;
|
break;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
case PROP_PROPERTY_LIST:
|
||||||
|
Device_Objects_Property_List(
|
||||||
|
rpdata->object_type,
|
||||||
|
rpdata->object_instance,
|
||||||
|
&property_list);
|
||||||
|
apdu_len = property_list_encode(
|
||||||
|
rpdata,
|
||||||
|
property_list.Required.pList,
|
||||||
|
property_list.Optional.pList,
|
||||||
|
property_list.Proprietary.pList);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
if (pObject->Object_Read_Property) {
|
if (pObject->Object_Read_Property) {
|
||||||
apdu_len = pObject->Object_Read_Property(rpdata);
|
apdu_len = pObject->Object_Read_Property(rpdata);
|
||||||
|
|||||||
@@ -1101,6 +1101,9 @@
|
|||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\src\bacnet\proplist.c</name>
|
<name>$PROJ_DIR$\..\..\src\bacnet\proplist.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\src\bacnet\proplist.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\..\src\bacnet\rd.c</name>
|
<name>$PROJ_DIR$\..\..\src\bacnet\rd.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include "rs485.h"
|
#include "rs485.h"
|
||||||
#include "bacnet/version.h"
|
#include "bacnet/version.h"
|
||||||
#include "bacnet/basic/services.h"
|
#include "bacnet/basic/services.h"
|
||||||
|
#include "bacnet/proplist.h"
|
||||||
/* objects */
|
/* objects */
|
||||||
#include "bacnet/basic/object/device.h"
|
#include "bacnet/basic/object/device.h"
|
||||||
#include "bacnet/basic/object/bo.h"
|
#include "bacnet/basic/object/bo.h"
|
||||||
@@ -118,6 +119,9 @@ static int Read_Property_Common(
|
|||||||
int apdu_len = BACNET_STATUS_ERROR;
|
int apdu_len = BACNET_STATUS_ERROR;
|
||||||
BACNET_CHARACTER_STRING char_string;
|
BACNET_CHARACTER_STRING char_string;
|
||||||
uint8_t *apdu = NULL;
|
uint8_t *apdu = NULL;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
struct special_property_list_t property_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((rpdata->application_data == NULL) ||
|
if ((rpdata->application_data == NULL) ||
|
||||||
(rpdata->application_data_len == 0)) {
|
(rpdata->application_data_len == 0)) {
|
||||||
@@ -168,6 +172,19 @@ static int Read_Property_Common(
|
|||||||
&apdu[0], rpdata->object_type);
|
&apdu[0], rpdata->object_type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
case PROP_PROPERTY_LIST:
|
||||||
|
Device_Objects_Property_List(
|
||||||
|
rpdata->object_type,
|
||||||
|
rpdata->object_instance,
|
||||||
|
&property_list);
|
||||||
|
apdu_len = property_list_encode(
|
||||||
|
rpdata,
|
||||||
|
property_list.Required.pList,
|
||||||
|
property_list.Optional.pList,
|
||||||
|
property_list.Proprietary.pList);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
if (pObject->Object_Read_Property) {
|
if (pObject->Object_Read_Property) {
|
||||||
apdu_len = pObject->Object_Read_Property(rpdata);
|
apdu_len = pObject->Object_Read_Property(rpdata);
|
||||||
@@ -319,7 +336,8 @@ bool Device_Set_Object_Name(BACNET_CHARACTER_STRING *object_name)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Device_Reinitialize(BACNET_REINITIALIZE_DEVICE_DATA *rd_data)
|
bool Device_Reinitialize(
|
||||||
|
BACNET_REINITIALIZE_DEVICE_DATA * rd_data)
|
||||||
{
|
{
|
||||||
bool status = false;
|
bool status = false;
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#include "bacnet/basic/services.h"
|
#include "bacnet/basic/services.h"
|
||||||
#include "bacnet/datalink/datalink.h"
|
#include "bacnet/datalink/datalink.h"
|
||||||
#include "bacnet/basic/binding/address.h"
|
#include "bacnet/basic/binding/address.h"
|
||||||
|
#include "bacnet/proplist.h"
|
||||||
#if (BACNET_PROTOCOL_REVISION >= 17)
|
#if (BACNET_PROTOCOL_REVISION >= 17)
|
||||||
#include "bacnet/basic/object/netport.h"
|
#include "bacnet/basic/object/netport.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -114,7 +115,7 @@ static object_functions_t Object_Table[] = {
|
|||||||
Device_Count, Device_Index_To_Instance,
|
Device_Count, Device_Index_To_Instance,
|
||||||
Device_Valid_Object_Instance_Number, Device_Object_Name,
|
Device_Valid_Object_Instance_Number, Device_Object_Name,
|
||||||
Device_Read_Property_Local, NULL /* Write_Property */,
|
Device_Read_Property_Local, NULL /* Write_Property */,
|
||||||
NULL /* Property_Lists */, NULL /* ReadRangeInfo */,
|
Device_Property_Lists, NULL /* ReadRangeInfo */,
|
||||||
NULL /* Iterator */, NULL /* Value_Lists */, NULL /* COV */,
|
NULL /* Iterator */, NULL /* Value_Lists */, NULL /* COV */,
|
||||||
NULL /* COV Clear */, NULL /* Intrinsic Reporting */ },
|
NULL /* COV Clear */, NULL /* Intrinsic Reporting */ },
|
||||||
#if (BACNET_PROTOCOL_REVISION >= 17)
|
#if (BACNET_PROTOCOL_REVISION >= 17)
|
||||||
@@ -1004,6 +1005,9 @@ int Device_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata)
|
|||||||
{
|
{
|
||||||
int apdu_len = BACNET_STATUS_ERROR;
|
int apdu_len = BACNET_STATUS_ERROR;
|
||||||
struct object_functions *pObject = NULL;
|
struct object_functions *pObject = NULL;
|
||||||
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
struct special_property_list_t property_list;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* initialize the default return values */
|
/* initialize the default return values */
|
||||||
rpdata->error_class = ERROR_CLASS_OBJECT;
|
rpdata->error_class = ERROR_CLASS_OBJECT;
|
||||||
@@ -1013,7 +1017,19 @@ int Device_Read_Property(BACNET_READ_PROPERTY_DATA *rpdata)
|
|||||||
if (pObject->Object_Valid_Instance &&
|
if (pObject->Object_Valid_Instance &&
|
||||||
pObject->Object_Valid_Instance(rpdata->object_instance)) {
|
pObject->Object_Valid_Instance(rpdata->object_instance)) {
|
||||||
if (pObject->Object_Read_Property) {
|
if (pObject->Object_Read_Property) {
|
||||||
apdu_len = pObject->Object_Read_Property(rpdata);
|
#if (BACNET_PROTOCOL_REVISION >= 14)
|
||||||
|
if ((int)rpdata->object_property == PROP_PROPERTY_LIST) {
|
||||||
|
Device_Objects_Property_List(rpdata->object_type,
|
||||||
|
rpdata->object_instance, &property_list);
|
||||||
|
apdu_len = property_list_encode(rpdata,
|
||||||
|
property_list.Required.pList,
|
||||||
|
property_list.Optional.pList,
|
||||||
|
property_list.Proprietary.pList);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
apdu_len = pObject->Object_Read_Property(rpdata);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
rpdata->error_class = ERROR_CLASS_OBJECT;
|
rpdata->error_class = ERROR_CLASS_OBJECT;
|
||||||
|
|||||||
Reference in New Issue
Block a user