部分一:
typedef struct
{
uint8_t year;
uint8_t mon;
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
uint8_t week;
}rtcTimeType;
在函数tag_verify_time中
变量:
uint32_t DateInSys;
rtcTimeType time;
方法:
rtc.read_time(&time); //即使是24也是00011000左移3位没事!
DateInSys=(time.year<<24)|(time.mon<<16)|(time.day<<8)|(time.hour<<3)|((time.min/10)&0x07);
即使是6也是0110所以&00000111没事!
结构:
U32 【年】【月】【日】【混合时分】
这样就获得了一个变量!此时系统的时间。DateInSys它不是传统意义的时间戳。
部分二:
代码中是:
发卡开始时间:10 30 FC
发卡截止时间:99 08 27
协议中是:失效:小时-分钟-FF-年-月-日
其实代码中的名字不准确,它的意义是一个有效期:年99-月08-日27-时10-分30-待定FC
uint32_t DateInCard
DateInCard=(comm_bcd_to_bin(tag->stop[0])<<24)|(comm_bcd_to_bin(tag->stop[1])<<16)|(comm_bcd_to_bin(tag->stop[2])<<8);
DateInCard |=((comm_bcd_to_bin(tag->start[0])<<3)|((comm_bcd_to_bin(tag->start[1])/10)&0x07));
这样获得一个U32和前面系统时间比较!
卡片存储时间 = 63 08 1b 53 , 设备当前时间 =12 08 1b 6c
注意到:年不一样!!今天就是8月27是一样的,后面两位不计较。
推测:永久有效的话就是直接年写最大两位数99!!!!!
这就回答了为什么永久卡都是99 08开头的 等下个月就是99 09开头啦