📄 iccard.c
字号:
#endif /* End SCANNER */
#ifdef ELEC_JRNL /* Support the electronic journal function */
Sys_Flag.SF4.Elec_Jrnl_VAT_Flag = sysflag->Elec_Jrnl_VAT_Flag;
#endif /* End ELEC_JRNL */
#ifdef VER_RSNT /* Support the restaurant function */
Sys_Flag.SF4.Waiter_Must_Flag = sysflag->Waiter_Must_Flag;
Sys_Flag.SF4.Waiter_Sure_Flag = sysflag->Waiter_Sure_Flag;
#endif /* End VER_RSNT */
tmppage[3] = Sys_Flag.SF;
Sys_Flag.SF5.Udt_Stock_Mode = sysflag->Udt_Stock_Mode;
Sys_Flag.SF5.zero_trans_flag = sysflag->zero_trans_flag;
Sys_Flag.SF5.kp_font = kp_font;
Sys_Flag.SF5.LogoPosi_Flag = sysflag->LogoPosi_Flag;
Sys_Flag.SF5.PrnAdj_Flag = sysflag->PrnAdj_Flag;
tmppage[4] = Sys_Flag.SF;
Sys_Flag.SF6.Log_Atv_Flag = sysflag->Log_Atv_Flag;
// Sys_Flag.SF6.Compulsory_clerk = sysflag->Compulsory_clerk;
Sys_Flag.SF6.Security = sysflag->Security;
Sys_Flag.SF6.prn_tab_pre_posi = sysflag->prn_tab_pre_posi;
tmppage[5] = Sys_Flag.SF;
Long2Bcd(tmppage+8,sysflag->McheNum,2);
Long2Bcd(tmppage+10,sysflag->RcptNum,2);
Long2Bcd(tmppage+12,sysflag->HaloNum,5);
tmppage[17] = (((sysflag->CurrLogoNo)/10)<<4)|((sysflag->CurrLogoNo%10));
tmppage[18] = (((sysflag->wgt_bar.id)/10)<<4)|(((sysflag->wgt_bar.id)%10));
tmppage[19] = sysflag->wgt_bar.len;
tmppage[20] = sysflag->wgt_bar.flag;
tmppage[21] = ((sysflag->Dept_Shift_Inc/10)<<4)|(sysflag->Dept_Shift_Inc%10);
Long2Bcd(tmppage+22, sysflag->top_cash_ttl, 4);
tmppage[26] = ((sysflag->LineFeedCnt/10)<<4)|(sysflag->LineFeedCnt%10);
if(IC_WriteString(tmppage, ROW_SIZE_IC, ICaddress) != OK)
{errorType(ERR_IC_BAD); return NG;}
//end
if(IC_Write_End(2) != OK)
{errorType(ERR_IC_BAD); return NG;}
return OK;
}
byte IC_Read_Sindex(void)
{
dword ICaddress;
WORD i;
char tmpstr[10];
byte tmppage[ROW_SIZE_IC];
byte maxcnt = ROW_SIZE_IC/(sizeof(WORD));
if(IC_CardInsert() != OK)
{errorType(ERR_IC_NO_CARD); return NG;}
memset(tmpstr, 0, 10);
ICaddress = IC_PLUSINDEX_ADDR;
if(IC_ReadString(tmpstr, ICaddress, 10) != OK)
{errorType(ERR_IC_BAD); return NG;}
for(i = 0; i<5; i++)//check if the recode of PLU is completed
{
if(tmpstr[i] != 0xAA)
{errorType(ERR_IC_WRITE_FALID); return NG;}
}
if( Bcd2Long( tmpstr +8, 2) != Max_Plu_No)
{errorType(ERR_PLU_NUM_MATCHED); return NG;}
ICaddress += ROW_SIZE_IC;
for(i = 0; i < Max_Plu_No ; i += maxcnt)
{
if(i+ maxcnt > Max_Plu_No)
maxcnt = Max_Plu_No - i;
if(ICaddress >= IC_PLU_ADDR)//no used , just for protect the PLU paramate
{errorType(ERR_IC_ADDR_OVER); return NG;}
if(IC_ReadString((byte *)&Sindex[i], ICaddress, maxcnt *(sizeof(WORD))) != OK)
{errorType(ERR_IC_BAD); return NG;}
ICaddress += maxcnt *(sizeof(WORD));
}
return OK;
}
byte IC_Read_PLU(WORD StartIdx, WORD Numcnt )
{
dword ICaddress;
WORD i;
byte maxnum = ROW_SIZE_IC/ (sizeof(PLU_STRU));
PLU_STRU plu_stru[20];
if(IC_CardInsert() != OK)
{errorType(ERR_IC_NO_CARD); return NG;}
if(StartIdx + Numcnt > Max_Plu_No)
{errorType(ERR_DIGIT_ILLEGAL); return NG;}
ICaddress = IC_PLU_ADDR + (dword)StartIdx*(sizeof(PLU_STRU));
for(i = 0; i<Numcnt; i+= maxnum)
{
byte j;
if(i+maxnum > Numcnt)//the last page, need to judge the lenth
maxnum = Numcnt-i;
if(ICaddress >= IC_MAX_ADDR)
{errorType(ERR_IC_ADDR_OVER); return NG;}
if(IC_ReadString((byte *)plu_stru, ICaddress, maxnum*sizeof(PLU_STRU)) != OK)
{errorType(ERR_IC_BAD); return NG;}
for(j = 0; j< maxnum; j++)
{
WORD tmp = i+ StartIdx +j;
#ifdef SCANNER /* Support the scanner function */
memcpy(plu[tmp].barcode, plu_stru[j].Bar_Code, BAR_BUFF_LEN);
plu[tmp].barcode[6] &= 0x0F;
#endif /* End SCANNER */
plu[tmp].plink = plu_stru[j].Dept_link;
#ifdef REST_PLU_FUNC
plu[tmp].attr = plu_stru[j].Attribute;
#endif
plu[tmp].price = Bcd2Long(plu_stru[j].Pre_Price, 3);
memcpy(plu[tmp].desc, plu_stru[j].Desc, MAX_DESC_LEN_EX+1);
}
ICaddress += maxnum*sizeof(PLU_STRU);
Insert_Period(i%20);
if(i != 0)
Cancel_Period(i%20);
}
return OK;
}
byte IC_Read_Dept(void)
{
dword ICaddress;
byte i;
byte tmpstr[10];
DEPT_STRU dept_stru[20];
byte maxcnt = ROW_SIZE_IC/(sizeof(DEPT_STRU));
if(IC_CardInsert() != OK)
{errorType(ERR_IC_NO_CARD); return NG;}
//check head
ICaddress = IC_DEPT_ADDR;
if(IC_ReadString(tmpstr, ICaddress, 10) !=OK)
{errorType(ERR_IC_BAD); return NG;}
for(i = 0; i<5; i++)//check if the recode is completed
{
if(tmpstr[i] != 0xAA)
{errorType(ERR_IC_WRITE_FALID); return NG;}
}
if( tmpstr[9] != Max_Dept_No )
{errorType(ERR_DEPT_NUM_MATCHED); return NG;}
ICaddress += ROW_SIZE_IC;
for(i = 0; i < Max_Dept_No; i += maxcnt)
{
byte j;
if( i+maxcnt > Max_Dept_No)
maxcnt = Max_Dept_No - i;
if(ICaddress >= IC_PLUSINDEX_ADDR)
{errorType(ERR_IC_ADDR_OVER); return NG;}
if(IC_ReadString((char *)dept_stru, ICaddress, maxcnt*sizeof(DEPT_STRU)) !=OK)
{errorType(ERR_IC_BAD); return NG;}
for(j = 0; j < maxcnt; j++)
{
byte tmp = i+j;
dept[tmp].price = Bcd2Long(dept_stru[j].Pre_Price, 4);
#ifdef AUTO_PER /* Support the auto percent function */
dept[tmp].per_rate = Bcd2Long(dept_stru[j].Auto_Per_Rate, 3);
dept[tmp].per_flag = (dept_stru[j].Attribute[2])&0x0F;
#endif /* End AUTO_PER */
dept[tmp].pflag = dept_stru[j].Attribute[0];
dept[tmp].group = (dept_stru[j].Attribute[1] & 0x0F);
dept[tmp].Hdlo = (dept_stru[j].Attribute[1] >> 4);
#ifdef VER_RSNT /* Support the restaurant function */
dept[tmp].send_kp_flag = (dept_stru[j].Attribute[2])>>4;
#endif /* End VER_RSNT */
memcpy(dept[tmp].desc, dept_stru[j].Desc, MAX_DESC_LEN_EX+1);
}
ICaddress += maxcnt*sizeof(DEPT_STRU);
}
return OK;
}
/*---------------------------------------------------------------*
the system paramate needed to be recoded:
1. sysflag
2.
*---------------------------------------------------------------*/
byte IC_Read_Sysflag(void)
{
dword ICaddress;
SYSFLAGDEF Sys_Flag;
byte tmpstr[10];
byte tmppage[ROW_SIZE_IC];
byte i;
if(IC_CardInsert() != OK)
{errorType(ERR_IC_NO_CARD); return NG;}
//head
ICaddress = IC_SYSFLAG_ADDR;
if(IC_ReadString(tmpstr, ICaddress, 10) != OK)
{errorType(ERR_IC_BAD); return NG;}
for(i = 0; i<5;i++)
{
if(tmpstr[i] != 0xAA)
{errorType(ERR_IC_WRITE_FALID); return NG;}
}
ICaddress += ROW_SIZE_IC;
//major
memset(tmppage, 0, ROW_SIZE_IC);
if(IC_ReadString(tmppage, ICaddress, ROW_SIZE_IC) != OK)
{errorType(ERR_IC_BAD); return NG;}
Sys_Flag.SF = tmppage[0];
sysflag->datefmt = Sys_Flag.SF1.datefmt;
sysflag->sysdots = Sys_Flag.SF1.sysdots;
sysflag->xCount_round = Sys_Flag.SF1.xCount_round;
sysflag->tax_round = Sys_Flag.SF1.tax_round;
Sys_Flag.SF = tmppage[1];
if((sysflag->clerk_mode == 1) && (Sys_Flag.SF2.clerk_mode == 0)) /* When the clerk mode is not equal, clear the report */
{
Clr_Clerk_Rpt(DAILY);
Clr_Clerk_Rpt(PTD);
currclerk = NUL_VLU;
sysflag->clerk_mode = Sys_Flag.SF2.clerk_mode;
}
else if((sysflag->clerk_mode == 0) && (Sys_Flag.SF2.clerk_mode == 1))
{
currclerk = NUL_VLU;
sysflag->clerk_mode = Sys_Flag.SF2.clerk_mode;
}
sysflag->zero_skip = Sys_Flag.SF2.zero_skip;
sysflag->prn_table_detail = Sys_Flag.SF2.prn_table_detail;
sysflag->z_reset_rcpt_no = Sys_Flag.SF2.z_reset_rcpt_no;
sysflag->Tax_System = Sys_Flag.SF2.Tax_System;
sysflag->tax_shift_mode = Sys_Flag.SF2.tax_shift_mode;
sysflag->Prn_Bar_Flag = Sys_Flag.SF2.Prn_Bar_Flag;
Sys_Flag.SF = tmppage[2];
sysflag->Subt_PressPrn = Sys_Flag.SF3.Subt_PressPrn;
#ifdef STOCK /* Support the PLU stock function */
sysflag->PLU_Stock_Flag = Sys_Flag.SF3.PLU_Stock_Flag;
#endif /* End STOCK */
sysflag->BackLight = Sys_Flag.SF3.BackLight;
LCD_Back_Set();
sysflag->NS_switch = Sys_Flag.SF3.NS_switch;
sysflag->RPLDP_flag = Sys_Flag.SF3.RPLDP_flag;
sysflag->dept_shift = Sys_Flag.SF3.dept_shift;
sysflag->Rcpt_prn = Sys_Flag.SF3.Rcpt_prn;
disp_receipt_prn_mode();
sysflag->fl_wmotor = Sys_Flag.SF3.fl_wmotor;
Sys_Flag.SF = tmppage[3];
sysflag->Btm_Msg_Flag = Sys_Flag.SF4.Btm_Msg_Flag;
#ifdef SCANNER /* Support the SCANNER function */
sysflag->Input_Bar_Mode = Sys_Flag.SF4.Input_Bar_Mode;
#endif /* End SCANNER */
if((sysflag->soft_lock_flag == 0) && (Sys_Flag.SF4.soft_lock_flag == 1))
Modi_Key(2, KD_MODE, 0);
sysflag->soft_lock_flag = Sys_Flag.SF4.soft_lock_flag;
#ifdef AUTO_PER /* Support the auro percent function */
sysflag->Auto_Per_Use_Flag = Sys_Flag.SF4.Auto_Per_Use_Flag;
sysflag->Auto_Per_Prn_Flag = Sys_Flag.SF4.Auto_Per_Prn_Flag;
#endif /* End AUTO_PER */
#ifdef ELEC_JRNL /* Suport the electronic journal function */
sysflag->Elec_Jrnl_VAT_Flag = Sys_Flag.SF4.Elec_Jrnl_VAT_Flag;
#endif /* End ELEC_JRNL */
#ifdef VER_RSNT /* Support the restaurant function */
sysflag->Waiter_Must_Flag = Sys_Flag.SF4.Waiter_Must_Flag;
sysflag->Waiter_Sure_Flag = Sys_Flag.SF4.Waiter_Sure_Flag;
#endif /* End VER_RSNT */
Sys_Flag.SF = tmppage[4];
sysflag->Udt_Stock_Mode = Sys_Flag.SF5.Udt_Stock_Mode;
sysflag->zero_trans_flag = Sys_Flag.SF5.zero_trans_flag;
kp_font = Sys_Flag.SF5.kp_font;
sysflag->LogoPosi_Flag = Sys_Flag.SF5.LogoPosi_Flag;
sysflag->PrnAdj_Flag = Sys_Flag.SF5.PrnAdj_Flag;
Sys_Flag.SF = tmppage[5];
sysflag->Log_Atv_Flag = Sys_Flag.SF6.Log_Atv_Flag;
//sysflag->Compulsory_clerk = Sys_Flag.SF6.Compulsory_clerk;
sysflag->Security = Sys_Flag.SF6.Security;
sysflag->prn_tab_pre_posi = Sys_Flag.SF6.prn_tab_pre_posi;
sysflag->McheNum = Bcd2Long(tmppage+8,2);
sysflag->RcptNum = Bcd2Long(tmppage+10,2);
sysflag->HaloNum = Bcd2Long(tmppage+12,4);
// tmppage+11 /* This is always 0 */
sysflag->CurrLogoNo = ((tmppage[17]>>4)*10+(tmppage[17]&0x0F));
sysflag->wgt_bar.id = Bcd2dec(tmppage[18]);
sysflag->wgt_bar.len = tmppage[19];
sysflag->wgt_bar.flag = tmppage[20];
sysflag->Dept_Shift_Inc = ((tmppage[21]>>4)*10+(tmppage[21]&0x0F));
sysflag->top_cash_ttl = Bcd2Long(tmppage+22,4);
sysflag->LineFeedCnt = ((tmppage[26]>>4)*10+(tmppage[26]&0x0F));
LCD_Back_Set();
disp_receipt_prn_mode();
return OK;
}
const byte *TEST_Str = {"Hello world"};
byte IC_Write_Test(void)
{
if(IC_CardInsert() != OK)
{
errorType(ERR_IC_NO_CARD);
return NG;
}
if(IC_WriteString(TEST_Str, 11, IC_START_ADDR) != OK)
{
errorType(ERR_IC_BAD);
return NG;
}
return OK;
}
byte IC_Read_Test(byte *str)
{
if(IC_CardInsert() != OK)
{
errorType(ERR_IC_NO_CARD);
return NG;
}
if(IC_ReadString(str, IC_START_ADDR, 11) != OK)
{
errorType(ERR_IC_BAD);
return NG;
}
return OK;
}
byte IC_Read_Page_Test( dword page, byte *str)
{
if(page >= 0x800)
{error(); return NG;}
if(IC_ReadString(str, page*ROW_SIZE_IC, ROW_SIZE_IC) != OK)
{errorType(ERR_IC_BAD); return NG;}
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -