From 5b60c94fad664e84f0fea991bf3fdce4ae83c9c9 Mon Sep 17 00:00:00 2001 From: skarg Date: Sat, 10 Oct 2009 21:48:13 +0000 Subject: [PATCH] Refactored timestamp for use in Alarm properties in objects. --- bacnet-stack/include/timestamp.h | 7 +++ bacnet-stack/src/bacapp.c | 9 ++++ bacnet-stack/src/timestamp.c | 89 ++++++++++++++++++++++---------- 3 files changed, 79 insertions(+), 26 deletions(-) diff --git a/bacnet-stack/include/timestamp.h b/bacnet-stack/include/timestamp.h index 3e29bdcf..154c409a 100644 --- a/bacnet-stack/include/timestamp.h +++ b/bacnet-stack/include/timestamp.h @@ -59,6 +59,13 @@ extern "C" { #endif /* __cplusplus */ + void bacapp_timestamp_copy( + BACNET_TIMESTAMP * dest, + BACNET_TIMESTAMP * src); + + int bacapp_encode_timestamp( + uint8_t * apdu, + BACNET_TIMESTAMP * value); int bacapp_encode_context_timestamp( uint8_t * apdu, diff --git a/bacnet-stack/src/bacapp.c b/bacnet-stack/src/bacapp.c index 166d12aa..c06dacef 100644 --- a/bacnet-stack/src/bacapp.c +++ b/bacnet-stack/src/bacapp.c @@ -504,6 +504,15 @@ BACNET_APPLICATION_TAG bacapp_context_tag_type( break; } break; + case PROP_LIST_OF_GROUP_MEMBERS: + switch (tag_number) { + case 0: + tag = BACNET_APPLICATION_TAG_OBJECT_ID; + break; + default: + break; + } + break; case PROP_EXCEPTION_SCHEDULE: switch (tag_number) { case 1: diff --git a/bacnet-stack/src/timestamp.c b/bacnet-stack/src/timestamp.c index dea871d6..8e0089c5 100644 --- a/bacnet-stack/src/timestamp.c +++ b/bacnet-stack/src/timestamp.c @@ -35,6 +35,68 @@ #include "assert.h" #include "timestamp.h" +void bacapp_timestamp_copy( + BACNET_TIMESTAMP * dest, + BACNET_TIMESTAMP * src) +{ + if (dest && src) { + dest->tag = src->tag; + switch (src->tag) { + case TIME_STAMP_TIME: + datetime_copy_time( + &dest->value.time, + &src->value.time); + break; + case TIME_STAMP_SEQUENCE: + dest->value.sequenceNum = src->value.sequenceNum; + break; + case TIME_STAMP_DATETIME: + datetime_copy( + &dest->value.dateTime, + &src->value.dateTime); + break; + default: + break; + } + } +} + +int bacapp_encode_timestamp( + uint8_t * apdu, + BACNET_TIMESTAMP * value) +{ + int len = 0; /* length of each encoding */ + + if (value && apdu) { + switch (value->tag) { + case TIME_STAMP_TIME: + len = + encode_context_time(&apdu[0], 0, + &value->value.time); + break; + + case TIME_STAMP_SEQUENCE: + len = + encode_context_unsigned(&apdu[0], 1, + value->value.sequenceNum); + break; + + case TIME_STAMP_DATETIME: + len = + bacapp_encode_context_datetime(&apdu[0], 2, + &value->value.dateTime); + break; + + default: + len = 0; + assert(0); + break; + } + } + + return len; +} + int bacapp_encode_context_timestamp( uint8_t * apdu, uint8_t tag_number, @@ -46,33 +108,8 @@ int bacapp_encode_context_timestamp( if (value && apdu) { len = encode_opening_tag(&apdu[apdu_len], tag_number); apdu_len += len; - - switch (value->tag) { - case TIME_STAMP_TIME: - len = - encode_context_time(&apdu[apdu_len], 0, - &value->value.time); - break; - - case TIME_STAMP_SEQUENCE: - len = - encode_context_unsigned(&apdu[apdu_len], 1, - value->value.sequenceNum); - break; - - case TIME_STAMP_DATETIME: - len = - bacapp_encode_context_datetime(&apdu[apdu_len], 2, - &value->value.dateTime); - break; - - default: - len = 0; - assert(0); - break; - } + len = bacapp_encode_timestamp(&apdu[apdu_len], value); apdu_len += len; - len = encode_closing_tag(&apdu[apdu_len], tag_number); apdu_len += len; }