diff --git a/bacnet-stack/bacapp.c b/bacnet-stack/bacapp.c index 2fb6afbd..56a8ed05 100644 --- a/bacnet-stack/bacapp.c +++ b/bacnet-stack/bacapp.c @@ -276,17 +276,10 @@ bool bacapp_copy(BACNET_APPLICATION_DATA_VALUE * dest_value, dest_value->type.Enumerated = src_value->type.Enumerated; break; case BACNET_APPLICATION_TAG_DATE: - dest_value->type.Date.year = src_value->type.Date.year; - dest_value->type.Date.month = src_value->type.Date.month; - dest_value->type.Date.day = src_value->type.Date.day; - dest_value->type.Date.wday = src_value->type.Date.wday; + bacapp_copy_date(&dest_value->type.Date, &src_value->type.Date); break; case BACNET_APPLICATION_TAG_TIME: - dest_value->type.Time.hour = src_value->type.Time.hour; - dest_value->type.Time.min = src_value->type.Time.min; - dest_value->type.Time.sec = src_value->type.Time.sec; - dest_value->type.Time.hundredths = - src_value->type.Time.hundredths; + bacapp_copy_time(&dest_value->type.Time, &src_value->type.Time); break; case BACNET_APPLICATION_TAG_OBJECT_ID: dest_value->type.Object_Id.type = @@ -369,6 +362,136 @@ int bacapp_data_len(uint8_t *apdu, int max_apdu_len, return total_len; } +/* returns true if matching or same, false if different */ +bool bacapp_same_date(BACNET_DATE * date1, BACNET_DATE * date2) +{ + bool status = false; + + if (date1 && date2) { + status = true; + if (date1->year != date2->year) + status = false; + if (date1->month != date2->month) + status = false; + if (date1->day != date2->day) + status = false; + if (date1->wday != date2->wday) + status = false; + } + + return status; +} + +/* returns true if matching or same, false if different */ +bool bacapp_same_time(BACNET_TIME * time1, BACNET_TIME * time2) +{ + bool status = false; + + if (time1 && time2) { + status = true; + if (time1->hour != time2->hour) + status = false; + if (time1->min != time2->min) + status = false; + if (time1->sec != time2->sec) + status = false; + if (time1->hundredths != time2->hundredths) + status = false; + } + + return status; +} + +bool bacapp_same_datetime(BACNET_DATE_TIME * datetime1, + BACNET_DATE_TIME * datetime2) +{ + return (bacapp_same_time(&datetime1->time,&datetime2->time) && + bacapp_same_date(&datetime1->date,&datetime2->date)); +} + +void bacapp_copy_date(BACNET_DATE * dest_date, BACNET_DATE * src_date) +{ + if (dest_date && src_date) { + dest_date->year = src_date->year; + dest_date->month = src_date->month; + dest_date->day = src_date->day; + dest_date->wday = src_date->wday; + } +} + +void bacapp_copy_time(BACNET_TIME * dest_time, BACNET_TIME * src_time) +{ + if (dest_time && src_time) { + dest_time->hour = src_time->hour; + dest_time->min = src_time->min; + dest_time->sec = src_time->sec; + dest_time->hundredths = src_time->hundredths; + } +} + +void bacapp_copy_datetime( + BACNET_DATE_TIME * dest_datetime, + BACNET_DATE_TIME * src_datetime) +{ + bacapp_copy_time(&dest_datetime->time,&src_datetime->time); + bacapp_copy_date(&dest_datetime->date,&src_datetime->date); +} + +void bacapp_set_date(BACNET_DATE * bdate, + uint16_t year, uint8_t month, uint8_t day, uint8_t wday) +{ + if (bdate) { + bdate->year = year; + bdate->month = month; + bdate->day = day; + bdate->wday = wday; + } +} + +void bacapp_set_time(BACNET_TIME * btime, + uint8_t hour, uint8_t minute, uint8_t seconds, uint8_t hundredths) +{ + if (btime) { + btime->hour = hour; + btime->min = minute; + btime->sec = seconds; + btime->hundredths = hundredths; + } +} + +void bacapp_set_datetime(BACNET_DATE_TIME * bdatetime, + BACNET_DATE * bdate, + BACNET_TIME * btime) +{ + if (bdate && btime && bdatetime) { + bdatetime->time.hour = btime->hour; + bdatetime->time.min = btime->min; + bdatetime->time.sec = btime->sec; + bdatetime->time.hundredths = btime->hundredths; + bdatetime->date.year = bdate->year; + bdatetime->date.month = bdate->month; + bdatetime->date.day = bdate->day; + bdatetime->date.wday = bdate->wday; + } +} + +void bacapp_set_datetime_values(BACNET_DATE_TIME * bdatetime, + uint16_t year, uint8_t month, uint8_t day, uint8_t wday, + uint8_t hour, uint8_t minute, uint8_t seconds, uint8_t hundredths) +{ + if (bdatetime) { + bdatetime->date.year = year; + bdatetime->date.month = month; + bdatetime->date.day = day; + bdatetime->date.wday = wday; + bdatetime->time.hour = hour; + bdatetime->time.min = min; + bdatetime->time.sec = sec; + bdatetime->time.hundredths = hundredths; + } +} + + #ifdef BACAPP_PRINT_ENABLED bool bacapp_print_value(FILE * stream, BACNET_APPLICATION_DATA_VALUE * value, BACNET_PROPERTY_ID property) @@ -731,46 +854,6 @@ void testBACnetApplicationDataLength(Test * pTest) ct_test(pTest, test_len == len); } -/* returns true if matching or same, false if different */ -bool bacapp_same_date(BACNET_DATE * date1, BACNET_DATE * date2) -{ - bool status = false; - - if (date1 && date2) { - status = true; - if (date1->year != date2->year) - status = false; - if (date1->month != date2->month) - status = false; - if (date1->day != date2->day) - status = false; - if (date1->wday != date2->wday) - status = false; - } - - return status; -} - -/* returns true if matching or same, false if different */ -bool bacapp_same_time(BACNET_TIME * time1, BACNET_TIME * time2) -{ - bool status = false; - - if (time1 && time2) { - status = true; - if (time1->hour != time2->hour) - status = false; - if (time1->min != time2->min) - status = false; - if (time1->sec != time2->sec) - status = false; - if (time1->hundredths != time2->hundredths) - status = false; - } - - return status; -} - /* generic - can be used by other unit tests returns true if matching or same, false if different */ bool bacapp_same_value(BACNET_APPLICATION_DATA_VALUE * value, diff --git a/bacnet-stack/bacapp.h b/bacnet-stack/bacapp.h index 36404f53..f4a58134 100644 --- a/bacnet-stack/bacapp.h +++ b/bacnet-stack/bacapp.h @@ -87,6 +87,30 @@ extern "C" { int bacapp_data_len(uint8_t *apdu, int max_apdu_len, BACNET_PROPERTY_ID property); + /* utility comparison functions */ + bool bacapp_same_date(BACNET_DATE * date1, BACNET_DATE * date2); + bool bacapp_same_time(BACNET_TIME * time1, BACNET_TIME * time2); + bool bacapp_same_datetime( + BACNET_DATE_TIME * datetime1, + BACNET_DATE_TIME * datetime2); + + void bacapp_copy_date(BACNET_DATE * date1, BACNET_DATE * date2); + void bacapp_copy_time(BACNET_TIME * time1, BACNET_TIME * time2); + void bacapp_copy_datetime( + BACNET_DATE_TIME * datetime1, + BACNET_DATE_TIME * datetime2); + + void bacapp_set_date(BACNET_DATE * bdate, + uint16_t year, uint8_t month, uint8_t day, uint8_t wday); + void bacapp_set_time(BACNET_TIME * btime, + uint8_t hour, uint8_t minute, uint8_t seconds, uint8_t hundredths); + void bacapp_set_datetime(BACNET_DATE_TIME * bdatetime, + BACNET_DATE * bdate, + BACNET_TIME * btime); + void bacapp_set_datetime_values(BACNET_DATE_TIME * bdatetime, + uint16_t year, uint8_t month, uint8_t day, uint8_t wday, + uint8_t hour, uint8_t minute, uint8_t seconds, uint8_t hundredths); + #if PRINT_ENABLED #define BACAPP_PRINT_ENABLED #else