Issues/issue 787 app bacepics misses optional parameters for the device object (#789)
* Added some optional properties into the object property lists up to protocol-revision 22 * Added serial-number property to basic device object example.
This commit is contained in:
@@ -511,6 +511,7 @@ static const int Device_Properties_Optional[] = {
|
|||||||
#endif
|
#endif
|
||||||
PROP_DESCRIPTION, PROP_LOCAL_TIME, PROP_UTC_OFFSET, PROP_LOCAL_DATE,
|
PROP_DESCRIPTION, PROP_LOCAL_TIME, PROP_UTC_OFFSET, PROP_LOCAL_DATE,
|
||||||
PROP_DAYLIGHT_SAVINGS_STATUS, PROP_LOCATION, PROP_ACTIVE_COV_SUBSCRIPTIONS,
|
PROP_DAYLIGHT_SAVINGS_STATUS, PROP_LOCATION, PROP_ACTIVE_COV_SUBSCRIPTIONS,
|
||||||
|
PROP_SERIAL_NUMBER,
|
||||||
#if defined(BACNET_TIME_MASTER)
|
#if defined(BACNET_TIME_MASTER)
|
||||||
PROP_TIME_SYNCHRONIZATION_RECIPIENTS, PROP_TIME_SYNCHRONIZATION_INTERVAL,
|
PROP_TIME_SYNCHRONIZATION_RECIPIENTS, PROP_TIME_SYNCHRONIZATION_INTERVAL,
|
||||||
PROP_ALIGN_INTERVALS, PROP_INTERVAL_OFFSET,
|
PROP_ALIGN_INTERVALS, PROP_INTERVAL_OFFSET,
|
||||||
@@ -583,6 +584,8 @@ static char Application_Software_Version[MAX_DEV_VER_LEN + 1] = "1.0";
|
|||||||
static const char *BACnet_Version = BACNET_VERSION_TEXT;
|
static const char *BACnet_Version = BACNET_VERSION_TEXT;
|
||||||
static char Location[MAX_DEV_LOC_LEN + 1] = "USA";
|
static char Location[MAX_DEV_LOC_LEN + 1] = "USA";
|
||||||
static char Description[MAX_DEV_DESC_LEN + 1] = "server";
|
static char Description[MAX_DEV_DESC_LEN + 1] = "server";
|
||||||
|
static char Serial_Number[MAX_DEV_DESC_LEN + 1] =
|
||||||
|
"BACnetDMcN56RBkeDJuNfxn3M44tfC2Y";
|
||||||
/* static uint8_t Protocol_Version = 1; - constant, not settable */
|
/* static uint8_t Protocol_Version = 1; - constant, not settable */
|
||||||
/* static uint8_t Protocol_Revision = 4; - constant, not settable */
|
/* static uint8_t Protocol_Revision = 4; - constant, not settable */
|
||||||
/* Protocol_Services_Supported - dynamically generated */
|
/* Protocol_Services_Supported - dynamically generated */
|
||||||
@@ -968,6 +971,35 @@ bool Device_Set_Location(const char *name, size_t length)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the device serial-number property value.
|
||||||
|
* @return The device serial-number, as a character string.
|
||||||
|
*/
|
||||||
|
const char *Device_Serial_Number(void)
|
||||||
|
{
|
||||||
|
return Serial_Number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the device serial-number property value.
|
||||||
|
* @param str [in] The new device serial-number, as a character string.
|
||||||
|
* @param length [in] The number of characters in the string.
|
||||||
|
* @return true if the device serial-number was set, false if the value was
|
||||||
|
* too long to store in the object.
|
||||||
|
*/
|
||||||
|
bool Device_Serial_Number_Set(const char *str, size_t length)
|
||||||
|
{
|
||||||
|
bool status = false; /*return value */
|
||||||
|
|
||||||
|
if (length < sizeof(Serial_Number)) {
|
||||||
|
memmove(Serial_Number, str, length);
|
||||||
|
Serial_Number[length] = 0;
|
||||||
|
status = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t Device_Protocol_Version(void)
|
uint8_t Device_Protocol_Version(void)
|
||||||
{
|
{
|
||||||
return BACNET_PROTOCOL_VERSION;
|
return BACNET_PROTOCOL_VERSION;
|
||||||
@@ -1504,6 +1536,11 @@ int Device_Read_Property_Local(BACNET_READ_PROPERTY_DATA *rpdata)
|
|||||||
apdu_len = BACNET_STATUS_ABORT;
|
apdu_len = BACNET_STATUS_ABORT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PROP_SERIAL_NUMBER:
|
||||||
|
characterstring_init_ansi(&char_string, Serial_Number);
|
||||||
|
apdu_len =
|
||||||
|
encode_application_character_string(&apdu[0], &char_string);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
rpdata->error_class = ERROR_CLASS_PROPERTY;
|
||||||
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
rpdata->error_code = ERROR_CODE_UNKNOWN_PROPERTY;
|
||||||
|
|||||||
@@ -346,6 +346,11 @@ const char *Device_Location(void);
|
|||||||
BACNET_STACK_EXPORT
|
BACNET_STACK_EXPORT
|
||||||
bool Device_Set_Location(const char *name, size_t length);
|
bool Device_Set_Location(const char *name, size_t length);
|
||||||
|
|
||||||
|
BACNET_STACK_EXPORT
|
||||||
|
const char *Device_Serial_Number(void);
|
||||||
|
BACNET_STACK_EXPORT
|
||||||
|
bool Device_Serial_Number_Set(const char *name, size_t length);
|
||||||
|
|
||||||
/* some stack-centric constant values - no set methods */
|
/* some stack-centric constant values - no set methods */
|
||||||
BACNET_STACK_EXPORT
|
BACNET_STACK_EXPORT
|
||||||
uint8_t Device_Protocol_Version(void);
|
uint8_t Device_Protocol_Version(void);
|
||||||
|
|||||||
+431
-109
File diff suppressed because it is too large
Load Diff
@@ -41,6 +41,8 @@ add_executable(${PROJECT_NAME}
|
|||||||
${SRC_DIR}/bacnet/bacint.c
|
${SRC_DIR}/bacnet/bacint.c
|
||||||
${SRC_DIR}/bacnet/bacreal.c
|
${SRC_DIR}/bacnet/bacreal.c
|
||||||
${SRC_DIR}/bacnet/bacstr.c
|
${SRC_DIR}/bacnet/bacstr.c
|
||||||
|
${SRC_DIR}/bacnet/bactext.c
|
||||||
|
${SRC_DIR}/bacnet/indtext.c
|
||||||
${SRC_DIR}/bacnet/basic/sys/bigend.c
|
${SRC_DIR}/bacnet/basic/sys/bigend.c
|
||||||
# Test and test library files
|
# Test and test library files
|
||||||
./src/main.c
|
./src/main.c
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
#include <zephyr/ztest.h>
|
#include <zephyr/ztest.h>
|
||||||
#include <bacnet/property.h>
|
#include <bacnet/property.h>
|
||||||
|
#include <bacnet/bactext.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup bacnet_tests
|
* @addtogroup bacnet_tests
|
||||||
@@ -49,7 +50,9 @@ static void testPropList(void)
|
|||||||
object_name++;
|
object_name++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zassert_equal(object_type, 1, NULL);
|
zassert_equal(
|
||||||
|
object_type, 1, "%s: duplicate object type property",
|
||||||
|
bactext_object_type_name((BACNET_OBJECT_TYPE)i));
|
||||||
zassert_equal(object_id, 1, NULL);
|
zassert_equal(object_id, 1, NULL);
|
||||||
zassert_equal(object_name, 1, NULL);
|
zassert_equal(object_name, 1, NULL);
|
||||||
/* test member function */
|
/* test member function */
|
||||||
|
|||||||
Reference in New Issue
Block a user