From 64ebf973a819d1eb4432ae610555411f2742386e Mon Sep 17 00:00:00 2001 From: skarg Date: Fri, 9 Feb 2007 16:47:13 +0000 Subject: [PATCH] Added functions to handle wildcard values for date and time. --- bacnet-stack/datetime.c | 62 ++++++++++++++++++++++++++++++++++++-- bacnet-stack/datetime.h | 8 +++-- bacnet-stack/datetime.ide | Bin 30644 -> 30644 bytes 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/bacnet-stack/datetime.c b/bacnet-stack/datetime.c index a324b57b..14339c8c 100644 --- a/bacnet-stack/datetime.c +++ b/bacnet-stack/datetime.c @@ -43,7 +43,14 @@ /* year = years since 1900 */ /* month 1=Jan */ /* day = day of month 1..31 */ -/* wday 1=Monday...7=Sunday */ +/* wday 1=Monday...7=Sunday */ + +/* Wildcards: + A value of X'FF' in any of the four octets + shall indicate that the value is unspecified. + If all four octets = X'FF', the corresponding + time or date may be interpreted as "any" or "don't care" +*/ static bool is_leap_year(uint16_t year) { @@ -327,12 +334,61 @@ void datetime_add_minutes(BACNET_DATE_TIME * bdatetime, uint32_t minutes) bdatetime->date.wday = day_of_week(bdatetime->date.year, bdatetime->date.month, bdatetime->date.day); } + +bool datetime_wildcard(BACNET_DATE_TIME * bdatetime) +{ + bool wildcard_present = false; + + if (bdatetime) { + if ((bdatetime->date.year == (1900 + 0xFF)) && + (bdatetime->date.month == 0xFF) && + (bdatetime->date.day == 0xFF) && + (bdatetime->date.wday == 0xFF) && + (bdatetime->time.hour == 0xFF) && + (bdatetime->time.min == 0xFF) && + (bdatetime->time.sec == 0xFF) && + (bdatetime->time.hundredths == 0xFF)) { + wildcard_present = true; + } + } + + return wildcard_present; +} + +void datetime_wildcard_set(BACNET_DATE_TIME * bdatetime) +{ + if (bdatetime) { + bdatetime->date.year = 1900 + 0xFF; + bdatetime->date.month = 0xFF; + bdatetime->date.day = 0xFF; + bdatetime->date.wday = 0xFF; + bdatetime->time.hour = 0xFF; + bdatetime->time.min = 0xFF; + bdatetime->time.sec = 0xFF; + bdatetime->time.hundredths = 0xFF; + } +} + #ifdef TEST #include #include #include "ctest.h" +void testBACnetDateTimeWildcard(Test * pTest) +{ + BACNET_DATE_TIME bdatetime; + bool status = false; + + datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0); + status = datetime_wildcard(&bdatetime); + ct_test(pTest, status == false); + + datetime_wildcard_set(&bdatetime); + status = datetime_wildcard(&bdatetime); + ct_test(pTest, status == true); +} + void testBACnetDateTimeAdd(Test * pTest) { BACNET_DATE_TIME bdatetime, test_bdatetime; @@ -642,7 +698,9 @@ int main(void) rc = ct_addTestFunction(pTest, testBACnetDateTimeSeconds); assert(rc); rc = ct_addTestFunction(pTest, testBACnetDateTimeAdd); - assert(rc); + assert(rc); + rc = ct_addTestFunction(pTest, testBACnetDateTimeWildcard); + assert(rc); ct_setStream(pTest, stdout); ct_run(pTest); diff --git a/bacnet-stack/datetime.h b/bacnet-stack/datetime.h index 8cb86c4e..d293073d 100644 --- a/bacnet-stack/datetime.h +++ b/bacnet-stack/datetime.h @@ -90,8 +90,12 @@ extern "C" { /* utility add function */ void datetime_add_minutes(BACNET_DATE_TIME * bdatetime, - uint32_t minutes); - + uint32_t minutes); + + /* date and time wildcards */ + bool datetime_wildcard(BACNET_DATE_TIME * bdatetime); + void datetime_wildcard_set(BACNET_DATE_TIME * bdatetime); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/bacnet-stack/datetime.ide b/bacnet-stack/datetime.ide index cd3848511cd8d7488d9de9145aafe5c6fa3801a0..89b2b3f7e553b08cb1e4b238084a034f0f6f17d3 100644 GIT binary patch delta 2751 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 lJv5PvJ!|BDc@sT1ys62l$?0=z_&Nu)7