void testTimeSyncData( Test * pTest, BACNET_DATE * my_date, BACNET_TIME * my_time) { uint8_t apdu[480] = { 0 }; int len = 0; int apdu_len = 0; BACNET_DATE test_date; BACNET_TIME test_time; len = timesync_encode_apdu(&apdu[0], my_date, my_time); ct_test(pTest, len != 0); apdu_len = len; len = timesync_decode_apdu(&apdu[0], apdu_len, &test_date, &test_time); ct_test(pTest, len != -1); ct_test(pTest, datetime_compare_time(my_time, &test_time) == 0); ct_test(pTest, datetime_compare_date(my_date, &test_date) == 0); len = timesync_utc_encode_apdu(&apdu[0], my_date, my_time); ct_test(pTest, len != 0); apdu_len = len; len = timesync_utc_decode_apdu(&apdu[0], apdu_len, &test_date, &test_time); ct_test(pTest, len != -1); ct_test(pTest, datetime_compare_time(my_time, &test_time) == 0); ct_test(pTest, datetime_compare_date(my_date, &test_date) == 0); }
static bool IsRecipientActive( BACNET_DESTINATION * pBacDest, uint8_t EventToState) { BACNET_DATE_TIME DateTime; /* valid Transitions */ switch (EventToState) { case EVENT_STATE_OFFNORMAL: case EVENT_STATE_HIGH_LIMIT: case EVENT_STATE_LOW_LIMIT: if (!(pBacDest->Transitions & TRANSITION_TO_OFFNORMAL_MASKED)) return false; break; case EVENT_STATE_FAULT: if (!(pBacDest->Transitions & TRANSITION_TO_FAULT_MASKED)) return false; break; case EVENT_STATE_NORMAL: if (!(pBacDest->Transitions & TRANSITION_TO_NORMAL_MASKED)) return false; break; default: return false; /* shouldn't happen */ } /* get actual date and time */ Device_getCurrentDateTime(&DateTime); /* valid Days */ if (!((0x01 << (DateTime.date.wday - 1)) & pBacDest->ValidDays)) return false; /* valid FromTime */ if (datetime_compare_time(&DateTime.time, &pBacDest->FromTime) < 0) return false; /* valid ToTime */ if (datetime_compare_time(&pBacDest->ToTime, &DateTime.time) < 0) return false; return true; }
/* if the datetime1 is the same as datetime2, return is 0 if datetime1 is before datetime2, returns negative if datetime1 is after datetime2, returns positive */ int datetime_compare( BACNET_DATE_TIME * datetime1, BACNET_DATE_TIME * datetime2) { int diff = 0; diff = datetime_compare_date(&datetime1->date, &datetime2->date); if (diff == 0) { diff = datetime_compare_time(&datetime1->time, &datetime2->time); } return diff; }
void testBACnetTime( Test * pTest) { BACNET_TIME btime1, btime2; int diff = 0; datetime_set_time(&btime1, 0, 0, 0, 0); datetime_copy_time(&btime2, &btime1); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff == 0); datetime_set_time(&btime1, 23, 59, 59, 99); datetime_copy_time(&btime2, &btime1); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff == 0); /* midpoint */ datetime_set_time(&btime1, 12, 30, 30, 50); datetime_copy_time(&btime2, &btime1); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff == 0); datetime_set_time(&btime2, 12, 30, 30, 51); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff < 0); datetime_set_time(&btime2, 12, 30, 31, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff < 0); datetime_set_time(&btime2, 12, 31, 30, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff < 0); datetime_set_time(&btime2, 13, 30, 30, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff < 0); datetime_set_time(&btime2, 12, 30, 30, 49); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff > 0); datetime_set_time(&btime2, 12, 30, 29, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff > 0); datetime_set_time(&btime2, 12, 29, 30, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff > 0); datetime_set_time(&btime2, 11, 30, 30, 50); diff = datetime_compare_time(&btime1, &btime2); ct_test(pTest, diff > 0); return; }