⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iccard.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -