Added time, date, and datetime helper functions for copy, compare, and set.
This commit is contained in:
+132
-49
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user