From 2fed6fcf3b35f63a438cb4b32f7c34f4025e4a77 Mon Sep 17 00:00:00 2001 From: skarg Date: Wed, 14 Feb 2007 21:52:13 +0000 Subject: [PATCH] Enhanced date and time parsing for WriteProperty demo. --- bacnet-stack/bacapp.c | 52 +++++++++++++++++++++++++++++++++++++++- bacnet-stack/bacapp.ide | Bin 32822 -> 33960 bytes bacnet-stack/datetime.h | 10 ++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/bacnet-stack/bacapp.c b/bacnet-stack/bacapp.c index 713be6ac..7cf44fbf 100644 --- a/bacnet-stack/bacapp.c +++ b/bacnet-stack/bacapp.c @@ -536,7 +536,9 @@ bool bacapp_parse_application_data(BACNET_APPLICATION_TAG tag_number, } else if (tag_number == BACNET_APPLICATION_TAG_DATE) { count = sscanf(argv, "%d/%d/%d:%d", &year, &month, &day, &wday); - if (count == 4) { + if (count == 3) { + datetime_set_date(&value->type.Date, year, month, day); + } else if (count == 4) { value->type.Date.year = year; value->type.Date.month = month; value->type.Date.day = day; @@ -552,6 +554,16 @@ bool bacapp_parse_application_data(BACNET_APPLICATION_TAG tag_number, value->type.Time.min = min; value->type.Time.sec = sec; value->type.Time.hundredths = hundredths; + } else if (count == 3) { + value->type.Time.hour = hour; + value->type.Time.min = min; + value->type.Time.sec = sec; + value->type.Time.hundredths = 0; + } else if (count == 2) { + value->type.Time.hour = hour; + value->type.Time.min = min; + value->type.Time.sec = 0; + value->type.Time.hundredths = 0; } else status = false; } else if (tag_number == BACNET_APPLICATION_TAG_OBJECT_ID) { @@ -918,6 +930,26 @@ void testBACnetApplicationData(Test * pTest) ct_test(pTest, value.type.Date.wday == 1); ct_test(pTest, testBACnetApplicationDataValue(&value)); + /* Happy Valentines Day! */ + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_DATE, + "2007/2/14", &value); + ct_test(pTest, status == true); + ct_test(pTest, value.type.Date.year == 2007); + ct_test(pTest, value.type.Date.month == 2); + ct_test(pTest, value.type.Date.day == 14); + ct_test(pTest, value.type.Date.wday == BACNET_WEEKDAY_WEDNESDAY); + ct_test(pTest, testBACnetApplicationDataValue(&value)); + + /* Wildcard Values */ + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_DATE, + "2155/255/255:255", &value); + ct_test(pTest, status == true); + ct_test(pTest, value.type.Date.year == 2155); + ct_test(pTest, value.type.Date.month == 255); + ct_test(pTest, value.type.Date.day == 255); + ct_test(pTest, value.type.Date.wday == 255); + ct_test(pTest, testBACnetApplicationDataValue(&value)); + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_TIME, "23:59:59.12", &value); ct_test(pTest, status == true); @@ -927,6 +959,24 @@ void testBACnetApplicationData(Test * pTest) ct_test(pTest, value.type.Time.hundredths == 12); ct_test(pTest, testBACnetApplicationDataValue(&value)); + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_TIME, + "23:59:59", &value); + ct_test(pTest, status == true); + ct_test(pTest, value.type.Time.hour == 23); + ct_test(pTest, value.type.Time.min == 59); + ct_test(pTest, value.type.Time.sec == 59); + ct_test(pTest, value.type.Time.hundredths == 0); + ct_test(pTest, testBACnetApplicationDataValue(&value)); + + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_TIME, + "23:59", &value); + ct_test(pTest, status == true); + ct_test(pTest, value.type.Time.hour == 23); + ct_test(pTest, value.type.Time.min == 59); + ct_test(pTest, value.type.Time.sec == 0); + ct_test(pTest, value.type.Time.hundredths == 0); + ct_test(pTest, testBACnetApplicationDataValue(&value)); + status = bacapp_parse_application_data(BACNET_APPLICATION_TAG_OBJECT_ID, "0:100", &value); diff --git a/bacnet-stack/bacapp.ide b/bacnet-stack/bacapp.ide index 967d392c0bbd388742df85fe93d7b49a51a4a783..9beee0ee26afea5bdde95efdd5011e3684db9312 100644 GIT binary patch delta 6196 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 delta 5291 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 diff --git a/bacnet-stack/datetime.h b/bacnet-stack/datetime.h index d293073d..c09b5d2e 100644 --- a/bacnet-stack/datetime.h +++ b/bacnet-stack/datetime.h @@ -37,6 +37,16 @@ #include #include +typedef enum { + BACNET_WEEKDAY_MONDAY = 1, + BACNET_WEEKDAY_TUESDAY = 2, + BACNET_WEEKDAY_WEDNESDAY = 3, + BACNET_WEEKDAY_THURSDAY = 4, + BACNET_WEEKDAY_FRIDAY = 5, + BACNET_WEEKDAY_SATURDAY = 6, + BACNET_WEEKDAY_SUNDAY = 7 +} BACNET_WEEKDAY; + /* date */ typedef struct BACnet_Date { uint16_t year; /* AD */