void testDatetimeCodec( Test * pTest) { uint8_t apdu[MAX_APDU]; BACNET_DATE_TIME datetimeIn; BACNET_DATE_TIME datetimeOut; int inLen; int outLen; datetimeIn.date.day = 1; datetimeIn.date.month = 2; datetimeIn.date.wday = 3; datetimeIn.date.year = 1904; datetimeIn.time.hour = 5; datetimeIn.time.min = 6; datetimeIn.time.sec = 7; datetimeIn.time.hundredths = 8; inLen = bacapp_encode_context_datetime(apdu, 10, &datetimeIn); outLen = bacapp_decode_context_datetime(apdu, 10, &datetimeOut); ct_test(pTest, inLen == outLen); ct_test(pTest, datetimeIn.date.day == datetimeOut.date.day); ct_test(pTest, datetimeIn.date.month == datetimeOut.date.month); ct_test(pTest, datetimeIn.date.wday == datetimeOut.date.wday); ct_test(pTest, datetimeIn.date.year == datetimeOut.date.year); ct_test(pTest, datetimeIn.time.hour == datetimeOut.time.hour); ct_test(pTest, datetimeIn.time.min == datetimeOut.time.min); ct_test(pTest, datetimeIn.time.sec == datetimeOut.time.sec); ct_test(pTest, datetimeIn.time.hundredths == datetimeOut.time.hundredths); }
int bacapp_decode_timestamp( uint8_t * apdu, BACNET_TIMESTAMP * value) { int len = 0; int section_len; uint32_t len_value_type; uint32_t sequenceNum; if (apdu) { section_len = decode_tag_number_and_value(&apdu[len], &value->tag, &len_value_type); if (-1 == section_len) { return -1; } switch (value->tag) { case TIME_STAMP_TIME: if ((section_len = decode_context_bacnet_time(&apdu[len], TIME_STAMP_TIME, &value->value.time)) == -1) { return -1; } else { len += section_len; } break; case TIME_STAMP_SEQUENCE: if ((section_len = decode_context_unsigned(&apdu[len], TIME_STAMP_SEQUENCE, &sequenceNum)) == -1) { return -1; } else { if (sequenceNum <= 0xffff) { len += section_len; value->value.sequenceNum = (uint16_t) sequenceNum; } else { return -1; } } break; case TIME_STAMP_DATETIME: if ((section_len = bacapp_decode_context_datetime(&apdu[len], TIME_STAMP_DATETIME, &value->value.dateTime)) == -1) { return -1; } else { len += section_len; } break; default: return -1; } } return len; }