📄 storage.c
字号:
#include "storage.h"
#include "string.h"
#include "sys_time.h"
#include "data_flash.h"
#include "sys_card.h"
#include "pub_func.h"
unsigned long _record_cnt[3];
unsigned char _person_id[5]={0xFF,0xFF,0xFF,0xFF,0xFC};
unsigned short _line_num[2]={0xFFFF,0xFFFF};
_chk_record _NewRecord;
unsigned char load_record_count(unsigned long *count)
{
unsigned long cnt[2],addr;
unsigned char ii,jj=0;
LOAD_RECORD_CNT:
addr=ADDR_RECORD_CNT;
for(ii=0;ii<2;ii++)
{
if(_load_data(addr,(unsigned char *)&cnt[ii],LEN_RECORD_CNT)==OK)
{
addr+=(LEN_RECORD_CNT+OFFSET_CHKSUM)*2;
}
else
{
if(jj<3)
{
jj++;
goto LOAD_RECORD_CNT;
}
else
{
return ERROR;
}
}
}
count[0]=cnt[0];
count[1]=cnt[1];
count[2]=cnt[0]+cnt[1];
return OK;
}
unsigned char save_record_count(unsigned char flag)
{
unsigned char jj=0;
SAVE_RECORD_CNT:
if(flag&SAVE_RECORD_COUNT)
{
if(_save_data(ADDR_RECORD_CNT,(unsigned char *)&_record_cnt[0],LEN_RECORD_CNT)!=OK)
{
if(jj<3)
{
jj++;
goto SAVE_RECORD_CNT;
}
else
{
return ERROR;
}
}
}
if(flag&SAVE_NEW_RECORD_COUNT)
{
if(_save_data(ADDR_NEW_RECORD_CNT,(unsigned char *)&_record_cnt[1],LEN_NEW_RECORD_CNT)!=OK)
{
if(jj<3)
{
jj++;
goto SAVE_RECORD_CNT;
}
else
{
return ERROR;
}
}
}
return OK;
}
/* save the latest record to data flash
*/
unsigned char save_record(void)
{
_chk_record _record;
unsigned long chksum,addr;
unsigned char *ptr_card=(unsigned char *)&_tmp_sys_card_buf;
if(is_data(_person_id,0xFF,LEN_PATROL_ID)==OK)
{
return ERROR;
}
if(_line_num[0]==0xFFFF)
{
return ERROR;
}
chksum=_record_cnt[0]+_record_cnt[1];
if(_record_cnt[2]!=chksum)
{
if(load_record_count(_record_cnt)!=OK)
{
return ERROR;
}
}
if(_person_id[4]!=sys_do_checksum(_person_id,LEN_PERSON_ID))
{
if(_load_data(ADDR_PERSON_ID,_person_id,LEN_PERSON_ID)!=OK)
{
return ERROR;
}
_person_id[4]=sys_do_checksum(_person_id,LEN_PERSON_ID);
}
if(_line_num[0]!=_line_num[1])
{
if(_load_data(ADDR_LINE_NUM,(unsigned char *)&_line_num[0],LEN_LINE_NUM)!=OK)
{
return ERROR;
}
_line_num[1]=_line_num[0];
}
// person id
memcpy((unsigned char *)&_record.person_id[0],(unsigned char *)&_person_id[0],LEN_PERSON_ID);
// line id
_record.line_num=_line_num[0];
// card type
_record.type=(ptr_card[0]>>4)&0x0F;
// station id
_record.station_id[0]=(ptr_card[0]&0x0F)|(ptr_card[1]&0xF0);
_record.station_id[1]=(ptr_card[1]&0x0F)|(ptr_card[2]&0xF0);
_record.station_id[2]=(ptr_card[2]>>4)&0x0F;
_record.station_id[3]=0;
// date time
_get_sys_time_bcd((unsigned char *)&_record.chk_time[0]);
// station state
_record.station_state=0;
chksum=_record_cnt[0];
chksum%=MAX_RECORD_COUNT;
addr=ADDR_RECORD+chksum*(LEN_RECORD+OFFSET_CHKSUM);
if(_save_data(addr,(unsigned char *)&_record.person_id[0],LEN_RECORD)!=OK)
{
return ERROR;
}
memcpy((unsigned char *)&_NewRecord.person_id[0],(unsigned char *)&_record.person_id[0],LEN_RECORD);
_record_cnt[0]++;
_record_cnt[1]++;
_record_cnt[2]+=2;
if(save_record_count(SAVE_RECORD_COUNT|SAVE_NEW_RECORD_COUNT)!=OK)
{
_record_cnt[0]--;
_record_cnt[1]--;
_record_cnt[2]-=2;
return ERROR;
}
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -