Added wildcard date comparison functions.
This commit is contained in:
@@ -58,6 +58,19 @@ typedef struct BACnet_DateTime {
|
|||||||
BACNET_TIME time;
|
BACNET_TIME time;
|
||||||
} BACNET_DATE_TIME;
|
} BACNET_DATE_TIME;
|
||||||
|
|
||||||
|
/* range of dates */
|
||||||
|
typedef struct BACnet_Date_Range {
|
||||||
|
BACNET_DATE startdate;
|
||||||
|
BACNET_DATE enddate;
|
||||||
|
} BACNET_DATE_RANGE;
|
||||||
|
|
||||||
|
/* week and days */
|
||||||
|
typedef struct BACnet_Weeknday {
|
||||||
|
uint8_t month; /* 1=Jan 13=odd 14=even FF=any */
|
||||||
|
uint8_t weekofmonth; /* 1=days 1-7, 2=days 8-14, 3=days 15-21, 4=days 22-28, 5=days 29-31, 6=last 7 days, FF=any week */
|
||||||
|
uint8_t dayofweek; /* 1=Monday-7=Sunday, FF=any */
|
||||||
|
} BACNET_WEEKNDAY;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
@@ -169,6 +182,38 @@ extern "C" {
|
|||||||
int32_t minutes);
|
int32_t minutes);
|
||||||
|
|
||||||
/* date and time wildcards */
|
/* date and time wildcards */
|
||||||
|
bool datetime_wildcard_year(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
void datetime_wildcard_year_set(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
bool datetime_wildcard_month(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
void datetime_wildcard_month_set(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
bool datetime_wildcard_day(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
void datetime_wildcard_day_set(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
bool datetime_wildcard_weekday(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
void datetime_wildcard_weekday_set(
|
||||||
|
BACNET_DATE *bdate);
|
||||||
|
bool datetime_wildcard_hour(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
void datetime_wildcard_hour_set(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
bool datetime_wildcard_minute(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
void datetime_wildcard_minute_set(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
bool datetime_wildcard_second(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
void datetime_wildcard_second_set(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
bool datetime_wildcard_hundredths(
|
||||||
|
BACNET_TIME *btime);
|
||||||
|
void datetime_wildcard_hundredths_set(
|
||||||
|
BACNET_TIME *btime);
|
||||||
bool datetime_wildcard(
|
bool datetime_wildcard(
|
||||||
BACNET_DATE_TIME * bdatetime);
|
BACNET_DATE_TIME * bdatetime);
|
||||||
bool datetime_wildcard_present(
|
bool datetime_wildcard_present(
|
||||||
|
|||||||
+256
-47
@@ -42,6 +42,11 @@
|
|||||||
|
|
||||||
/** @file datetime.c Manipulate BACnet Date and Time values */
|
/** @file datetime.c Manipulate BACnet Date and Time values */
|
||||||
|
|
||||||
|
/* define our epic beginnings */
|
||||||
|
#define BACNET_EPOCH_YEAR 1900
|
||||||
|
/* 1/1/1900 is a Monday */
|
||||||
|
#define BACNET_EPOCH_DOW BACNET_WEEKDAY_MONDAY
|
||||||
|
|
||||||
/* BACnet Date */
|
/* BACnet Date */
|
||||||
/* year = years since 1900 */
|
/* year = years since 1900 */
|
||||||
/* month 1=Jan */
|
/* month 1=Jan */
|
||||||
@@ -93,7 +98,8 @@ bool datetime_ymd_is_valid(
|
|||||||
uint8_t monthdays = 0; /* days in a month */
|
uint8_t monthdays = 0; /* days in a month */
|
||||||
|
|
||||||
monthdays = datetime_month_days(year, month);
|
monthdays = datetime_month_days(year, month);
|
||||||
if ((year >= 1900) && (monthdays > 0) && (day >= 1) && (day <= monthdays)) {
|
if ((year >= BACNET_EPOCH_YEAR) && (monthdays > 0) &&
|
||||||
|
(day >= 1) && (day <= monthdays)) {
|
||||||
status = true;
|
status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +196,7 @@ static uint32_t days_since_epoch(
|
|||||||
uint16_t years = 0; /* loop counter for years */
|
uint16_t years = 0; /* loop counter for years */
|
||||||
|
|
||||||
if (datetime_ymd_is_valid(year, month, day)) {
|
if (datetime_ymd_is_valid(year, month, day)) {
|
||||||
for (years = 1900; years < year; years++) {
|
for (years = BACNET_EPOCH_YEAR; years < year; years++) {
|
||||||
days += 365;
|
days += 365;
|
||||||
if (datetime_is_leap_year(years))
|
if (datetime_is_leap_year(years))
|
||||||
days++;
|
days++;
|
||||||
@@ -221,7 +227,7 @@ static void days_since_epoch_into_ymd(
|
|||||||
uint8_t * pMonth,
|
uint8_t * pMonth,
|
||||||
uint8_t * pDay)
|
uint8_t * pDay)
|
||||||
{
|
{
|
||||||
uint16_t year = 1900;
|
uint16_t year = BACNET_EPOCH_YEAR;
|
||||||
uint8_t month = 1;
|
uint8_t month = 1;
|
||||||
uint8_t day = 1;
|
uint8_t day = 1;
|
||||||
|
|
||||||
@@ -270,7 +276,11 @@ uint8_t datetime_day_of_week(
|
|||||||
uint8_t month,
|
uint8_t month,
|
||||||
uint8_t day)
|
uint8_t day)
|
||||||
{
|
{
|
||||||
return (uint8_t) ((days_since_epoch(year, month, day) % 7) + 1);
|
uint8_t dow = (uint8_t)BACNET_EPOCH_DOW;
|
||||||
|
|
||||||
|
dow += (days_since_epoch(year, month, day) % 7);
|
||||||
|
|
||||||
|
return dow;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool datetime_time_is_valid(
|
bool datetime_time_is_valid(
|
||||||
@@ -592,7 +602,10 @@ uint32_t datetime_seconds_since_midnight(
|
|||||||
uint32_t seconds = 0;
|
uint32_t seconds = 0;
|
||||||
|
|
||||||
if (btime) {
|
if (btime) {
|
||||||
seconds = seconds_since_midnight(btime->hour, btime->min, btime->sec);
|
seconds = seconds_since_midnight(
|
||||||
|
btime->hour,
|
||||||
|
btime->min,
|
||||||
|
btime->sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
return seconds;
|
return seconds;
|
||||||
@@ -610,7 +623,9 @@ uint16_t datetime_minutes_since_midnight(
|
|||||||
uint32_t minutes = 0;
|
uint32_t minutes = 0;
|
||||||
|
|
||||||
if (btime) {
|
if (btime) {
|
||||||
minutes = minutes_since_midnight(btime->hour, btime->min);
|
minutes = minutes_since_midnight(
|
||||||
|
btime->hour,
|
||||||
|
btime->min);
|
||||||
}
|
}
|
||||||
|
|
||||||
return minutes;
|
return minutes;
|
||||||
@@ -667,17 +682,212 @@ void datetime_add_minutes(
|
|||||||
datetime_days_since_epoch_into_date(bdatetime_days, &bdatetime->date);
|
datetime_days_since_epoch_into_date(bdatetime_days, &bdatetime->date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns true if year is a wildcard */
|
||||||
|
bool datetime_wildcard_year(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (bdate) {
|
||||||
|
if (bdate->year == (BACNET_EPOCH_YEAR + 0xFF)) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the year as a wildcard */
|
||||||
|
void datetime_wildcard_year_set(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
if (bdate) {
|
||||||
|
bdate->year = BACNET_EPOCH_YEAR + 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if month is a wildcard */
|
||||||
|
bool datetime_wildcard_month(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (bdate) {
|
||||||
|
if (bdate->month == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the month as a wildcard */
|
||||||
|
void datetime_wildcard_month_set(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
if (bdate) {
|
||||||
|
bdate->month = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if day is a wildcard */
|
||||||
|
bool datetime_wildcard_day(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (bdate) {
|
||||||
|
if (bdate->day == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the day as a wildcard */
|
||||||
|
void datetime_wildcard_day_set(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
if (bdate) {
|
||||||
|
bdate->day = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if weekday is a wildcard */
|
||||||
|
bool datetime_wildcard_weekday(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (bdate) {
|
||||||
|
if (bdate->wday == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the weekday as a wildcard */
|
||||||
|
void datetime_wildcard_weekday_set(
|
||||||
|
BACNET_DATE *bdate)
|
||||||
|
{
|
||||||
|
if (bdate) {
|
||||||
|
bdate->wday = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if hour is a wildcard */
|
||||||
|
bool datetime_wildcard_hour(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (btime) {
|
||||||
|
if (btime->hour == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the hour as a wildcard */
|
||||||
|
void datetime_wildcard_hour_set(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
if (btime) {
|
||||||
|
btime->hour = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if minute is a wildcard */
|
||||||
|
bool datetime_wildcard_minute(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (btime) {
|
||||||
|
if (btime->min == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the minute as a wildcard */
|
||||||
|
void datetime_wildcard_minute_set(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
if (btime) {
|
||||||
|
btime->min = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if seconds is wildcard */
|
||||||
|
bool datetime_wildcard_second(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (btime) {
|
||||||
|
if (btime->sec == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the seconds as a wildcard */
|
||||||
|
void datetime_wildcard_second_set(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
if (btime) {
|
||||||
|
btime->sec = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns true if hundredths is a wildcard */
|
||||||
|
bool datetime_wildcard_hundredths(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
bool wildcard_present = false;
|
||||||
|
|
||||||
|
if (btime) {
|
||||||
|
if (btime->hundredths == 0xFF) {
|
||||||
|
wildcard_present = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return wildcard_present;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the hundredths as a wildcard */
|
||||||
|
void datetime_wildcard_hundredths_set(
|
||||||
|
BACNET_TIME *btime)
|
||||||
|
{
|
||||||
|
if (btime) {
|
||||||
|
btime->hundredths = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool datetime_wildcard(
|
bool datetime_wildcard(
|
||||||
BACNET_DATE_TIME * bdatetime)
|
BACNET_DATE_TIME * bdatetime)
|
||||||
{
|
{
|
||||||
bool wildcard_present = false;
|
bool wildcard_present = false;
|
||||||
|
|
||||||
if (bdatetime) {
|
if (bdatetime) {
|
||||||
if ((bdatetime->date.year == (1900 + 0xFF)) &&
|
if (datetime_wildcard_year(&bdatetime->date) &&
|
||||||
(bdatetime->date.month == 0xFF) && (bdatetime->date.day == 0xFF) &&
|
datetime_wildcard_month(&bdatetime->date) &&
|
||||||
(bdatetime->date.wday == 0xFF) && (bdatetime->time.hour == 0xFF) &&
|
datetime_wildcard_day(&bdatetime->date) &&
|
||||||
(bdatetime->time.min == 0xFF) && (bdatetime->time.sec == 0xFF) &&
|
datetime_wildcard_weekday(&bdatetime->date) &&
|
||||||
(bdatetime->time.hundredths == 0xFF)) {
|
datetime_wildcard_hour(&bdatetime->time) &&
|
||||||
|
datetime_wildcard_minute(&bdatetime->time) &&
|
||||||
|
datetime_wildcard_second(&bdatetime->time) &&
|
||||||
|
datetime_wildcard_hundredths(&bdatetime->time)) {
|
||||||
wildcard_present = true;
|
wildcard_present = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -686,7 +896,8 @@ bool datetime_wildcard(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Returns true if any type of wildcard is present except for day of week
|
/* Returns true if any type of wildcard is present except for day of week
|
||||||
* on it's own.
|
* on it's own. Also checks for special day and month values. Used in
|
||||||
|
* trendlog object.
|
||||||
*/
|
*/
|
||||||
bool datetime_wildcard_present(
|
bool datetime_wildcard_present(
|
||||||
BACNET_DATE_TIME * bdatetime)
|
BACNET_DATE_TIME * bdatetime)
|
||||||
@@ -694,11 +905,12 @@ bool datetime_wildcard_present(
|
|||||||
bool wildcard_present = false;
|
bool wildcard_present = false;
|
||||||
|
|
||||||
if (bdatetime) {
|
if (bdatetime) {
|
||||||
if ((bdatetime->date.year == (1900 + 0xFF)) ||
|
if (datetime_wildcard_year(&bdatetime->date) ||
|
||||||
(bdatetime->date.month > 12) || (bdatetime->date.day > 31) ||
|
(bdatetime->date.month > 12) || (bdatetime->date.day > 31) ||
|
||||||
(bdatetime->time.hour == 0xFF) || (bdatetime->time.min == 0xFF) ||
|
datetime_wildcard_hour(&bdatetime->time) ||
|
||||||
(bdatetime->time.sec == 0xFF) ||
|
datetime_wildcard_minute(&bdatetime->time) ||
|
||||||
(bdatetime->time.hundredths == 0xFF)) {
|
datetime_wildcard_second(&bdatetime->time) ||
|
||||||
|
datetime_wildcard_hundredths(&bdatetime->time)) {
|
||||||
wildcard_present = true;
|
wildcard_present = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -710,7 +922,7 @@ void datetime_date_wildcard_set(
|
|||||||
BACNET_DATE * bdate)
|
BACNET_DATE * bdate)
|
||||||
{
|
{
|
||||||
if (bdate) {
|
if (bdate) {
|
||||||
bdate->year = 1900 + 0xFF;
|
bdate->year = BACNET_EPOCH_YEAR + 0xFF;
|
||||||
bdate->month = 0xFF;
|
bdate->month = 0xFF;
|
||||||
bdate->day = 0xFF;
|
bdate->day = 0xFF;
|
||||||
bdate->wday = 0xFF;
|
bdate->wday = 0xFF;
|
||||||
@@ -829,9 +1041,6 @@ int bacapp_decode_context_datetime(
|
|||||||
return apdu_len;
|
return apdu_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -843,7 +1052,7 @@ static void testBACnetDateTimeWildcard(
|
|||||||
BACNET_DATE_TIME bdatetime;
|
BACNET_DATE_TIME bdatetime;
|
||||||
bool status = false;
|
bool status = false;
|
||||||
|
|
||||||
datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
status = datetime_wildcard(&bdatetime);
|
status = datetime_wildcard(&bdatetime);
|
||||||
ct_test(pTest, status == false);
|
ct_test(pTest, status == false);
|
||||||
|
|
||||||
@@ -859,27 +1068,27 @@ static void testBACnetDateTimeAdd(
|
|||||||
uint32_t minutes = 0;
|
uint32_t minutes = 0;
|
||||||
int diff = 0;
|
int diff = 0;
|
||||||
|
|
||||||
datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
datetime_copy(&test_bdatetime, &bdatetime);
|
datetime_copy(&test_bdatetime, &bdatetime);
|
||||||
datetime_add_minutes(&bdatetime, minutes);
|
datetime_add_minutes(&bdatetime, minutes);
|
||||||
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
|
|
||||||
datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
datetime_add_minutes(&bdatetime, 60);
|
datetime_add_minutes(&bdatetime, 60);
|
||||||
datetime_set_values(&test_bdatetime, 1900, 1, 1, 1, 0, 0, 0);
|
datetime_set_values(&test_bdatetime, BACNET_EPOCH_YEAR, 1, 1, 1, 0, 0, 0);
|
||||||
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
|
|
||||||
datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
datetime_add_minutes(&bdatetime, (24 * 60));
|
datetime_add_minutes(&bdatetime, (24 * 60));
|
||||||
datetime_set_values(&test_bdatetime, 1900, 1, 2, 0, 0, 0, 0);
|
datetime_set_values(&test_bdatetime, BACNET_EPOCH_YEAR, 1, 2, 0, 0, 0, 0);
|
||||||
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
|
|
||||||
datetime_set_values(&bdatetime, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
datetime_add_minutes(&bdatetime, (31 * 24 * 60));
|
datetime_add_minutes(&bdatetime, (31 * 24 * 60));
|
||||||
datetime_set_values(&test_bdatetime, 1900, 2, 1, 0, 0, 0, 0);
|
datetime_set_values(&test_bdatetime, BACNET_EPOCH_YEAR, 2, 1, 0, 0, 0, 0);
|
||||||
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
diff = datetime_compare(&test_bdatetime, &bdatetime);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
|
|
||||||
@@ -924,14 +1133,14 @@ static void testBACnetDate(
|
|||||||
BACNET_DATE bdate1, bdate2;
|
BACNET_DATE bdate1, bdate2;
|
||||||
int diff = 0;
|
int diff = 0;
|
||||||
|
|
||||||
datetime_set_date(&bdate1, 1900, 1, 1);
|
datetime_set_date(&bdate1, BACNET_EPOCH_YEAR, 1, 1);
|
||||||
datetime_copy_date(&bdate2, &bdate1);
|
datetime_copy_date(&bdate2, &bdate1);
|
||||||
diff = datetime_compare_date(&bdate1, &bdate2);
|
diff = datetime_compare_date(&bdate1, &bdate2);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
datetime_set_date(&bdate2, 1900, 1, 2);
|
datetime_set_date(&bdate2, BACNET_EPOCH_YEAR, 1, 2);
|
||||||
diff = datetime_compare_date(&bdate1, &bdate2);
|
diff = datetime_compare_date(&bdate1, &bdate2);
|
||||||
ct_test(pTest, diff < 0);
|
ct_test(pTest, diff < 0);
|
||||||
datetime_set_date(&bdate2, 1900, 2, 1);
|
datetime_set_date(&bdate2, BACNET_EPOCH_YEAR, 2, 1);
|
||||||
diff = datetime_compare_date(&bdate1, &bdate2);
|
diff = datetime_compare_date(&bdate1, &bdate2);
|
||||||
ct_test(pTest, diff < 0);
|
ct_test(pTest, diff < 0);
|
||||||
datetime_set_date(&bdate2, 1901, 1, 1);
|
datetime_set_date(&bdate2, 1901, 1, 1);
|
||||||
@@ -967,7 +1176,7 @@ static void testBACnetDate(
|
|||||||
datetime_set_date(&bdate2, 2006, 7, 15);
|
datetime_set_date(&bdate2, 2006, 7, 15);
|
||||||
diff = datetime_compare_date(&bdate1, &bdate2);
|
diff = datetime_compare_date(&bdate1, &bdate2);
|
||||||
ct_test(pTest, diff > 0);
|
ct_test(pTest, diff > 0);
|
||||||
datetime_set_date(&bdate2, 1900, 7, 15);
|
datetime_set_date(&bdate2, BACNET_EPOCH_YEAR, 7, 15);
|
||||||
diff = datetime_compare_date(&bdate1, &bdate2);
|
diff = datetime_compare_date(&bdate1, &bdate2);
|
||||||
ct_test(pTest, diff > 0);
|
ct_test(pTest, diff > 0);
|
||||||
datetime_set_date(&bdate2, 2008, 7, 15);
|
datetime_set_date(&bdate2, 2008, 7, 15);
|
||||||
@@ -1038,12 +1247,12 @@ static void testBACnetDateTime(
|
|||||||
BACNET_TIME btime;
|
BACNET_TIME btime;
|
||||||
int diff = 0;
|
int diff = 0;
|
||||||
|
|
||||||
datetime_set_values(&bdatetime1, 1900, 1, 1, 0, 0, 0, 0);
|
datetime_set_values(&bdatetime1, BACNET_EPOCH_YEAR, 1, 1, 0, 0, 0, 0);
|
||||||
datetime_copy(&bdatetime2, &bdatetime1);
|
datetime_copy(&bdatetime2, &bdatetime1);
|
||||||
diff = datetime_compare(&bdatetime1, &bdatetime2);
|
diff = datetime_compare(&bdatetime1, &bdatetime2);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
datetime_set_time(&btime, 0, 0, 0, 0);
|
datetime_set_time(&btime, 0, 0, 0, 0);
|
||||||
datetime_set_date(&bdate, 1900, 1, 1);
|
datetime_set_date(&bdate, BACNET_EPOCH_YEAR, 1, 1);
|
||||||
datetime_set(&bdatetime1, &bdate, &btime);
|
datetime_set(&bdatetime1, &bdate, &btime);
|
||||||
diff = datetime_compare(&bdatetime1, &bdatetime2);
|
diff = datetime_compare(&bdatetime1, &bdatetime2);
|
||||||
ct_test(pTest, diff == 0);
|
ct_test(pTest, diff == 0);
|
||||||
@@ -1167,20 +1376,20 @@ static void testDateEpoch(
|
|||||||
uint8_t month = 0, test_month = 0;
|
uint8_t month = 0, test_month = 0;
|
||||||
uint8_t day = 0, test_day = 0;
|
uint8_t day = 0, test_day = 0;
|
||||||
|
|
||||||
days = days_since_epoch(1900, 1, 1);
|
days = days_since_epoch(BACNET_EPOCH_YEAR, 1, 1);
|
||||||
ct_test(pTest, days == 0);
|
ct_test(pTest, days == 0);
|
||||||
days_since_epoch_into_ymd(days, &year, &month, &day);
|
days_since_epoch_into_ymd(days, &year, &month, &day);
|
||||||
ct_test(pTest, year == 1900);
|
ct_test(pTest, year == BACNET_EPOCH_YEAR);
|
||||||
ct_test(pTest, month == 1);
|
ct_test(pTest, month == 1);
|
||||||
ct_test(pTest, day == 1);
|
ct_test(pTest, day == 1);
|
||||||
|
|
||||||
|
|
||||||
for (year = 1900; year <= 2154; year++) {
|
for (year = BACNET_EPOCH_YEAR; year < (BACNET_EPOCH_YEAR+0xFF); year++) {
|
||||||
for (month = 1; month <= 12; month++) {
|
for (month = 1; month <= 12; month++) {
|
||||||
for (day = 1; day <= datetime_month_days(year, month); day++) {
|
for (day = 1; day <= datetime_month_days(year, month); day++) {
|
||||||
days = days_since_epoch(year, month, day);
|
days = days_since_epoch(year, month, day);
|
||||||
days_since_epoch_into_ymd(days, &test_year, &test_month,
|
days_since_epoch_into_ymd(days,
|
||||||
&test_day);
|
&test_year, &test_month, &test_day);
|
||||||
ct_test(pTest, year == test_year);
|
ct_test(pTest, year == test_year);
|
||||||
ct_test(pTest, month == test_month);
|
ct_test(pTest, month == test_month);
|
||||||
ct_test(pTest, day == test_day);
|
ct_test(pTest, day == test_day);
|
||||||
@@ -1196,23 +1405,23 @@ static void testBACnetDayOfWeek(
|
|||||||
|
|
||||||
/* 1/1/1900 is a Monday */
|
/* 1/1/1900 is a Monday */
|
||||||
dow = datetime_day_of_week(1900, 1, 1);
|
dow = datetime_day_of_week(1900, 1, 1);
|
||||||
ct_test(pTest, dow == 1);
|
ct_test(pTest, dow == BACNET_WEEKDAY_MONDAY);
|
||||||
|
|
||||||
/* 1/1/2007 is a Monday */
|
/* 1/1/2007 is a Monday */
|
||||||
dow = datetime_day_of_week(2007, 1, 1);
|
dow = datetime_day_of_week(2007, 1, 1);
|
||||||
ct_test(pTest, dow == 1);
|
ct_test(pTest, dow == BACNET_WEEKDAY_MONDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 2);
|
dow = datetime_day_of_week(2007, 1, 2);
|
||||||
ct_test(pTest, dow == 2);
|
ct_test(pTest, dow == BACNET_WEEKDAY_TUESDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 3);
|
dow = datetime_day_of_week(2007, 1, 3);
|
||||||
ct_test(pTest, dow == 3);
|
ct_test(pTest, dow == BACNET_WEEKDAY_WEDNESDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 4);
|
dow = datetime_day_of_week(2007, 1, 4);
|
||||||
ct_test(pTest, dow == 4);
|
ct_test(pTest, dow == BACNET_WEEKDAY_THURSDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 5);
|
dow = datetime_day_of_week(2007, 1, 5);
|
||||||
ct_test(pTest, dow == 5);
|
ct_test(pTest, dow == BACNET_WEEKDAY_FRIDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 6);
|
dow = datetime_day_of_week(2007, 1, 6);
|
||||||
ct_test(pTest, dow == 6);
|
ct_test(pTest, dow == BACNET_WEEKDAY_SATURDAY);
|
||||||
dow = datetime_day_of_week(2007, 1, 7);
|
dow = datetime_day_of_week(2007, 1, 7);
|
||||||
ct_test(pTest, dow == 7);
|
ct_test(pTest, dow == BACNET_WEEKDAY_SUNDAY);
|
||||||
|
|
||||||
dow = datetime_day_of_week(2007, 1, 31);
|
dow = datetime_day_of_week(2007, 1, 31);
|
||||||
ct_test(pTest, dow == 3);
|
ct_test(pTest, dow == 3);
|
||||||
|
|||||||
Reference in New Issue
Block a user