?? memory.c
字號:
Equip_CurStatus =SUCCESS;
Do_DisLed_Flash(0x00,0x00,100);
Dis_DataFull_Led(FALSE);
}
if(ii>1)
{
Do_DisLed_Flash(0x00,0x00,100);
Equip_CurStatus = SUCCESS;
}
/************************************************************************/
//mem will full --提前告警。(剩下的空間)
if(Equip_CurStatus == MEM_FULL_ARALM)
{
Equip_CurStatus = MEM_WILLFULL_WARNING;
Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
}
else if((Equip_CurStatus == MEM_WILLFULL_WARNING))
{
if(myall_savedata.conwrite_page > myall_savedata.conread_page)
{
ii=((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
}
else ii=myall_savedata.conread_page-myall_savedata.conwrite_page;
if(ii>MYALL_FORBYTE_FLAG)
{
Equip_CurStatus = 0;
Dis_DataFull_Led(FALSE);
Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
}
}
return(SUCCESS);
}
BYTE Renew_ConData_From_Memory(Con_Record *con_record)
{
int ii,jj;
WORD save_page;
if(!mymem_ok_flag)return(MEM_IC_ERR);
if(myall_savedata.conread_page == myall_savedata.conwrite_page)
{
if(myall_savedata.conread_byte-sizeof(Con_Record) >= 0)
{
myall_savedata.conread_byte -= sizeof(Con_Record);
ii=Read_From_Buffer(con_record,sizeof(Con_Record),THE_BUFFER_TWO,myall_savedata.conread_byte);
return(ii);
}
if(--myall_savedata.conread_page < CON_RECORD_START_PAGEADDR)
{
//SendStr("3",1);
//SendStr(&myall_savedata.cycle_flag,1);
if(myall_savedata.cycle_flag != MYALL_FORBYTE_FLAG)
{
myall_savedata.conread_page = CON_RECORD_START_PAGEADDR; //must!!
return(NO_CON_RECORD); //數(shù)據(jù)循環(huán)標(biāo)志。(最大可恢復(fù)點(diǎn))
}
myall_savedata.conread_page = (MAX_PAGES-1);
}
/************************************************************
理論上這里不會運(yùn)行的,因?yàn)榫彺鎱^(qū)不只一兩頁!!
if((myall_savedata.conread_page == myall_savedata.conwrite_page)
&& myall_savedata.conread_byte <=0)
{
myall_savedata.conread_page++; //已達(dá)最大恢復(fù)點(diǎn)!
return(NO_CON_RECORD);
}
/**************************************************************/
jj = sizeof(Con_Record)-myall_savedata.conread_byte;
if((ii=Read_From_Buffer(((BYTE*)con_record)+jj,myall_savedata.conread_byte,THE_BUFFER_TWO,0))!=SUCCESS)
{
return(ii);//goto END;
}
myall_savedata.conread_byte = (MEMPAGE_SIZE-1) - jj;
ii=Memory_ArrayRead(con_record,jj,myall_savedata.conread_page,myall_savedata.conread_byte);
return(ii); //must!
}
//===============================================================
if(myall_savedata.conread_byte-sizeof(Con_Record) >= 0)
{
myall_savedata.conread_byte -= sizeof(Con_Record);
ii=Memory_ArrayRead(con_record,sizeof(Con_Record),myall_savedata.conread_page,myall_savedata.conread_byte);
return(ii);//goto END;
}
save_page = myall_savedata.conread_page;
if(--myall_savedata.conread_page < CON_RECORD_START_PAGEADDR)
{
if(myall_savedata.cycle_flag != MYALL_FORBYTE_FLAG) //MUST!!!!!!!花了太多時間
{
myall_savedata.conread_page = save_page; //must!!
return(NO_CON_RECORD); //數(shù)據(jù)循環(huán)標(biāo)志。(最大可恢復(fù)點(diǎn))
}
myall_savedata.conread_page = (MAX_PAGES-1);
}
if(myall_savedata.conread_page == myall_savedata.conwrite_page) //關(guān)鍵點(diǎn)!!
{
myall_savedata.conread_page = save_page; //已達(dá)最大恢復(fù)點(diǎn),數(shù)據(jù)滿
Equip_CurStatus = MEM_FULL_ARALM;
return(MEM_FULL_ARALM);//如果不這樣下面將可能只寫入一半記錄?。?!
}
jj = sizeof(Con_Record)-myall_savedata.conread_byte;
if((ii=Memory_ArrayRead(((BYTE*)con_record)+jj,myall_savedata.conread_byte,save_page,0))!=SUCCESS)
{
return(ii);//goto END;
}
myall_savedata.conread_byte = (MEMPAGE_SIZE-1) - jj;
ii=Memory_ArrayRead(con_record,jj,myall_savedata.conread_page,myall_savedata.conread_byte);
if(ii!=SUCCESS)return(ii);
/************************************************************************
//mem will full --提前告警。
if(myall_savedata.conwrite_page > myall_savedata.conread_page)
{
ii=((MAX_PAGES-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
}
else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;
if(ii<MYALL_FORBYTE_FLAG)
{
Dis_DataFull_Led(TRUE);
Equip_CurStatus=MEM_WILLFULL_WARNING;
return(MEM_WILLFULL_WARNING);//goto END;
}
if(ii<2)
{
Equip_CurStatus = MEM_FULL_ARALM;
return(MEM_FULL_ARALM);//如果不這樣下面將可能只寫入一半記錄?。。? }
/************************************************************************/
//mem will full --提前告警。
if(myall_savedata.conwrite_page > myall_savedata.conread_page)
{
ii= ((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
}
else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;
if(ii<MYALL_FORBYTE_FLAG)
{
Equip_CurStatus=MEM_WILLFULL_WARNING;
Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
//return(MEM_WILLFULL_WARNING);//goto END;
//注意:這樣將很難完全恢復(fù)的。
}
return(SUCCESS);
}
BYTE Saveparam_To_Mem(void)
{
BYTE ii,alllen,len;
#ifdef _DEBUG
DebugString("Save param To Memory\r\n");
#endif
if(!mymem_ok_flag)return(MEM_IC_ERR);
ii=Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
if(ii != SUCCESS)return(ii);
alllen=PARA_START_BYTEADDR;
len=sizeof(Equip_Addr);
Write_To_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
if(ii != SUCCESS)return(ii);
/*
alllen += len;
len=sizeof(Op_User_Info);
ii=Write_To_Buffer(&op_user_info,len,THE_BUFFER_ONE,alllen);
if(ii != SUCCESS)return(ii);
alllen += len;
len=sizeof(Con_param_Info);
ii=Write_To_Buffer(&con_param_info,len,THE_BUFFER_ONE,alllen);
if(ii != SUCCESS)return(ii);
*/
alllen += len;
len=sizeof(SeedCard_Info);
ii=Write_To_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
if(ii != SUCCESS)return(ii);
ii=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
if(ii != SUCCESS)return(ii);
return(SUCCESS);
}
BYTE Save_My_All_Data(void)
{
BYTE alllen,len,i;
#ifdef _DEBUG
DebugString("Save my All To Memory\r\n");
#endif
if(!mymem_ok_flag)return(MEM_IC_ERR);
i=Buffer_To_Mem(THE_BUFFER_TWO,SAVE_BUFFER2_PAGEADDR);
if(i != SUCCESS)return(i);
alllen = 0;
len=sizeof(Myall_SaveData);
Write_To_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);
alllen += len;
len=sizeof(Con_StatusInfo);
Write_To_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);
alllen += len;
len=sizeof(sttOtherTableInfo);
Write_To_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
/*
alllen += len;
len=sizeof(Dc_Peoples);
Write_To_Buffer(&dc_peoples,len,THE_BUFFER_ONE,alllen);
alllen += len;
len = 6*sizeof(BYTE);
Write_To_Buffer(cardstate_time,len,THE_BUFFER_ONE,alllen);
*/
i=Buffer_To_Mem(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);
return(i);
}
BYTE ClearConParam_From_Mem(void) //恢復(fù)到初始出廠狀態(tài)。
{
Memory_PageErase(PARAMETER_PAGE1ADDR,2);//FOR TEST.
return(Memory_Check());
}
bit mymem_ok_flag = FALSE;
BYTE Memory_Check(void) //注意:要保證缺省狀態(tài)下都能消費(fèi)!
{
// Card_Class_Para pdata card_class;
BYTE i,alllen,len;
mymem_ok_flag = TRUE;
//Memory_PageErase(MYTEST_START_PAGEADDR,MYTEST_END_PAGEADDR);//IS A TEST!
//Memory_PageErase(PARAMETER_PAGE1ADDR,2);//FOR TEST.
alllen=PARA_START_BYTEADDR; //for "else if"--cmp rev
len=strlen(YsnOysFlag_Str);
for(i=0;i<45;i++)
{//防止電壓不穩(wěn)等!
Memory_ArrayRead(uartSbuf,alllen,PARAMETER_PAGE1ADDR,0);
if(!memcmp(uartSbuf+YSN_FLAG_BYTEADDR,YsnOysFlag_Str,len))break;
delay_ms(25);
}
if(i==45)
{
#ifdef _DEBUG
DebugString("Init Memory all parameter\r\n");
#endif
//SendStr("t0",2);
//len=strlen(YsnOysFlag_Str);
Write_To_Buffer(YsnOysFlag_Str,len,THE_BUFFER_ONE,YSN_FLAG_BYTEADDR);
//-------------------------------------------------------------------
Read_From_Buffer(uartSbuf,len,THE_BUFFER_ONE,YSN_FLAG_BYTEADDR);
if(memcmp(uartSbuf+YSN_FLAG_BYTEADDR,YsnOysFlag_Str,len))
{
mymem_ok_flag = FALSE;
Equip_CurStatus= MEM_IC_ERR;
//SendStr(uartSbuf,len);--for test.
//SendStr("t1",2);
return(MEM_IC_ERR);//for time!
}
//-------------------------------------------------------------------
//Memory_PageErase(PARAMETER_PAGE1ADDR,2);
Memory_PageErase(SAVE_BUFFER1_PAGEADDR,50);
alllen=YSN_FLAG_BYTEADDR;
len=strlen(YsnOysFlag_Str);
Write_To_Buffer(YsnOysFlag_Str,len,THE_BUFFER_ONE,alllen);
alllen=YSN_REV_BYTEADDR;
len=strlen(MyReVision_Str);
Write_To_Buffer(MyReVision_Str,len,THE_BUFFER_ONE,alllen);
alllen=PARA_START_BYTEADDR;
len=sizeof(Equip_Addr);
memset(&equip_addr,0,len);
equip_addr.ntype=5;
equip_addr.number_addr=5000;
//memcpy(uartSbuf,&equip_addr,len);
i=Write_To_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
if(i != SUCCESS)return(i);
/*
alllen += len;
len=sizeof(Op_User_Info);
//memset(&op_user_info,0,len);
memcpy(op_user_info.op_cardcode,Default_Pwd,3);
memcpy(op_user_info.op_password,Default_Pwd,3);
i=Write_To_Buffer(&op_user_info,len,THE_BUFFER_ONE,alllen);
if(i != SUCCESS)return(i);
alllen += len;
len=sizeof(Con_param_Info);
memset(&con_param_info,0,len);
con_param_info.con_mode =JC_MODE;//5
con_param_info.max_money=9999900L;
for(i=0;i<MAX_PERIOD_S;i++)
{
con_param_info.dz_money[i]=100*(i+1);
con_param_info.Js_money[i]=100*(i+1);
}
con_param_info.Js_timer[0]=0x01;
con_param_info.end_times[0][0]=0x24;
//memcpy(uartSbuf,&con_param_info,len);
i=Write_To_Buffer(&con_param_info,len,THE_BUFFER_ONE,alllen);
if(i != SUCCESS)return(i);
*/
alllen += len;
len=sizeof(SeedCard_Info);
memset(&seedcard_info,0,len);
memset(seedcard_info.unit_code,0x01,3);
i=Write_To_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
if(i != SUCCESS)return(i);
i=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
if(i != SUCCESS)return(i);
//alllen += len;
//SendStr(&alllen,1); //for test
/*********************************************************/
/* alllen = 0;
len=sizeof(Card_Class_Para);
memset(&card_class,0,len);
card_class.daymax_money = 9999900;
card_class.oncemax_money = 9999900;
card_class.password_money = 9999900;
card_class.Kq_time[0][1] = 0x24;
for(i=0;i<MAX_PERIOD_S;i++)
{
card_class.discount[i] = 100;
card_class.times[i] = 100;
}
for(i=0;i<8;i++,alllen += len)
{
card_class.card_class=i+1;
Write_To_Buffer(&card_class,len,THE_BUFFER_ONE,alllen);
}
*/
i=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE2ADDR);
/*********************************************************/
//i=Memory_PageErase(PARAMETER_PAGE2ADDR,1);
if(i != SUCCESS)return(i);
//========================================================
i=Memory_PageErase(SAVE_BUFFER2_PAGEADDR,1);
if(i != SUCCESS)return(i);
alllen = 0;
len=sizeof(Myall_SaveData);
memset(&myall_savedata,0,len); //cycle_flag = 0;
myall_savedata.conwrite_page= CON_RECORD_START_PAGEADDR;
myall_savedata.conread_page = CON_RECORD_START_PAGEADDR;
myall_savedata.lread_page = CON_RECORD_START_PAGEADDR;
myall_savedata.cycle_flag = 0;//理論上不必要!
Write_To_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);
alllen += len;
len=sizeof(Con_StatusInfo);
memset(&con_statusinfo,0,len);
Write_To_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);
alllen += len;
len=sizeof(sttOtherTableInfo);
memset(&stOtherTableInfo,0,len);
Write_To_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
i=Buffer_To_Mem(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);
//SendStr("t1",2);
if(i != SUCCESS)return(i);
}
else if(memcmp(uartSbuf+YSN_REV_BYTEADDR,MyReVision_Str,strlen(MyReVision_Str)))
{
Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);//must!!
len=strlen(MyReVision_Str);
Write_To_Buffer(MyReVision_Str,len,THE_BUFFER_ONE,YSN_REV_BYTEADDR);
Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
}
i=Restore_My_All_Data();
//SendStr("t4",2);
return(i);
}
BYTE Restore_My_All_Data(void)
{
BYTE alllen,len,i,ii;
#ifdef _DEBUG
DebugString("Restore my all data\r\n");
#endif
if(!mymem_ok_flag)return(MEM_IC_ERR);
i=Mem_To_Buffer(THE_BUFFER_TWO,SAVE_BUFFER2_PAGEADDR);
if(i != SUCCESS)return(i);
//DoTest_ArrayRead_Memory(MyALL_SAVEDATA_PAGEADDR);//for test.
Mem_To_Buffer(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);
alllen = 0;
len=sizeof(Myall_SaveData);
Read_From_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);
//memcpy(uartSbuf,&myall_savedata,len);
//SendStr(uartSbuf,len);
alllen += len;
len=sizeof(Con_StatusInfo);
Read_From_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);
con_statusinfo.con_bootmoney =0L; //本次開機(jī)后的消費(fèi)的總金額;
con_statusinfo.con_bootrecords=0; //本次開機(jī)后消費(fèi)記錄數(shù);
alllen += len;
len=sizeof(sttOtherTableInfo);
Read_From_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
#ifdef _DEBUG
DebugString("stOtherTableInfo data\r\n");
DebugData(len,len,(unsigned char *)&stOtherTableInfo);
#endif
//===========================================================
//DoTest_ArrayRead_Memory(PARAMETER_PAGE1ADDR);//for test.
i=Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
if(i != SUCCESS)return(i);
alllen=PARA_START_BYTEADDR;
len=sizeof(Equip_Addr);
Read_From_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
alllen += len;
len=sizeof(SeedCard_Info);
i=Read_From_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
/************************************************************************/
if(myall_savedata.conwrite_page > myall_savedata.conread_page)
{
ii=((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
}
else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;
if(ii==0)return(i);
else if(ii==1)
{
Equip_CurStatus = MEM_FULL_ARALM;
Dis_DataFull_Led(TRUE);
return(MEM_FULL_ARALM);
}
else if(ii<MYALL_FORBYTE_FLAG)
{
Equip_CurStatus=MEM_WILLFULL_WARNING;
return(MEM_WILLFULL_WARNING);
}
return(i);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -