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

📄 icc.c

📁 税控收款机软件。包括底层驱动和上层的应用一起。是一个完整的税控收款机软件方案
💻 C
📖 第 1 页 / 共 3 页
字号:
	icc_buff[0]=0xc0;
	icc_buff[1]=0xf9;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=8;
	memcpy(&icc_buff[5],pin_data,8);
	icc_sam_in();
	if(stat!=0){return 3;}
	if(!(sw1==0x61 && sw2==0x08))
	{
		stat=3;
		if(sw1==0x69 && sw2==0x83)
		{
			cls();
			DisHzLinYm("税控卡PIN锁定",Col1);
			DL();
			DL();
		}
		return 3;
	}
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xc0;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=0x08;
	icc_sam_out();
	if(stat!=0){return 4;}
	if(!(sw1==0x90 && sw2==0x00))
	{stat=4;return 4;}
	memcpy(pin_data,icc_buff,0x08);
	
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xb2;
	icc_buff[2]=1;
	icc_buff[3]=0x0c;
	icc_buff[4]=0x25;
	icc_out();
	if(stat!=0){return 5;}
	if(!(sw1==0x90 && sw2==0x00))
	{stat=5;return 5;}
	memcpy(icctempp,&icc_buff[8],0x1d);
	
	icc_buff[0]=0xc0;
	icc_buff[1]=0xf6;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=0x1d;
	memcpy(&icc_buff[5],icctempp,0x1d);
	
	icc_sam_in();
	if(stat!=0){return 6;}
	if(!(sw1==0x90 && sw2==0x00))
	{stat=6;return 6;}
	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x81;
	icc_buff[3]=0x0;
	icc_buff[4]=22;
	
	icc_sam_out();
	if(stat!=0){return 7;}
	p=icc_buff;
	memcpy(user.end_time,p,4);
	p+=4;
	user.one_top=bcd_to_long(p,8);
	p+=4;
	user.zc_total_top=bcd_to_long(p,8);
	p+=4;
	user.tp_total_top=bcd_to_long(p,8);
	p+=4;
	memcpy(user.tax_id,p,6);
	return 0;
}
*/
uchar update_control(void)
{     
	uchar *p,i;
	icc_reset() ;
	//选择税控应用
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;
	
	icc_in();
	if(stat!=0){return 1;}
	for(i=1;i<3;i++)
	{
		icc_buff[0]=0x00;//wtd
		icc_buff[1]=0xb0;
		icc_buff[2]=0x82;
		icc_buff[3]=0x02;
		icc_buff[4]=8;
		icc_out();
		if(stat!=0){return 1;}
		if(memcmp(icc_buff,Temp_All,8)==0) break;
	}
	if(i==3){stat=1;return 1;}
	for(i=1;i<3;i++)
	{
		icc_buff[0]=0x00;
		icc_buff[1]=0xb2;
		icc_buff[2]=i;	//记录号
		icc_buff[3]=0x24;
		icc_buff[4]=220;
		icc_out();
		if(stat!=0){return 8;}
		//if(memcmp(declare_temp,&icc_buff[13],4)>0) {stat=2;return 2;}
		//if(memcmp(span.ed_date,&icc_buff[13],4)>0) {stat=2;return 2;}
		icc_reset_sam();
		icc_buff[0]=0x00;
		icc_buff[1]=0xa4;
		icc_buff[2]=0;
		icc_buff[3]=0;
		icc_buff[4]=2;
		icc_buff[5]=0x2f;
		icc_buff[6]=0x02 ;
		icc_sam_in();
		if(stat!=0){return 2;}
		//Verify_FISCAL_PIN (校验使用口令)
		icc_buff[0]=0xc0;
		icc_buff[1]=0xf9;
		icc_buff[2]=0;
		icc_buff[3]=0;
		icc_buff[4]=8;
		memcpy(&icc_buff[5],pin_data,8);
		icc_sam_in();
		if(stat!=0){return 3;}
		if(!(sw1==0x61 && sw2==0x08))
		{
			stat=3;
			if(sw1==0x69 && sw2==0x83)
			{
				cls();
				DisHzLinYm("税控卡PIN锁定",Col1);
				DL();
				DL();
			}
			return 3;
		}
		
		icc_buff[0]=0x00;
		icc_buff[1]=0xc0;
		icc_buff[2]=0;
		icc_buff[3]=0;
		icc_buff[4]=0x08;
		icc_sam_out();
		if(stat!=0){return 4;}
		if((sw1==0x90 && sw2==0x00))memcpy(pin_data,icc_buff,0x08);
		//{stat=4;return 4;}
		
		
		
		icc_buff[0]=0x00;
		icc_buff[1]=0xb2;
		icc_buff[2]=i;//记录号
		icc_buff[3]=0x0c;
		icc_buff[4]=0x25;
		icc_out();
		if(stat!=0){return 5;}
		if((sw1==0x90 && sw2==0x00))break;
	}
	//{stat=5;return 5;}
	memcpy(icctempp,&icc_buff[8],0x1d);
	
	icc_buff[0]=0xc0;
	icc_buff[1]=0xf6;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=0x1d;
	memcpy(&icc_buff[5],icctempp,0x1d);
	
	icc_sam_in();
	if(stat!=0){return 6;}
	if(!(sw1==0x90 && sw2==0x00))
	{stat=6;return 6;}
	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x81;
	icc_buff[3]=0x0;
	icc_buff[4]=22;
	
	icc_sam_out();
	if(stat!=0){return 7;}
	p=icc_buff;
	memcpy(user.end_time,p,4);
	p+=4;
	user.one_top=bcd_to_long(p,8);
	p+=4;
	user.zc_total_top=bcd_to_long(p,8);
	p+=4;
	user.tp_total_top=bcd_to_long(p,8);
	p+=4;
	memcpy(user.tax_id,p,6);
	return 0;
}

uchar update_user()
{
	uchar i,j, *p,ta;
	icc_reset_sam() ;
	//选择税控应用
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;
	icc_sam_in();
	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x81;
	icc_buff[3]=0x0;
	icc_buff[4]=22;
	
	icc_sam_out();
	p=icc_buff;
	memcpy(user.end_time,p,4);
	p+=4;
	memcpy(&user.one_top,p,4);
	p+=4;
	memcpy(&user.zc_total_top,p,4);
	p+=4;
	memcpy(&user.tp_total_top,p,4);
	p+=4;
	memcpy(user.tax_id,p,6);
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x82;
	icc_buff[3]=0x02;
	icc_buff[4]=100;
	
	icc_sam_out();
	p=icc_buff;
	memcpy(user.sam_id,p,8);
	p+=8;
	memcpy(user.machine_id,p,8);
	p+=8;
	memcpy(user.user_id,p,8);
	p+=8;
	memcpy(user.fiscal_id,p,20);
	p+=20;
	memcpy(user.start_time,p,4);
	p+=4;
	memcpy(user.valid_time,p,4);
	p+=7;
	memcpy(user.user_name,p,40);
	p+=40;
	memcpy(user.mag_id,p,4);
	p+=4;
	user.send_mode=*p;

	icc_reset() ;
	
	//选择税控应用
	
	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;
	icc_in();
	
	for(j=0;j<6;j++)
	{ 
		if(user.tax_id[j]==0) continue;
		for(i=1;i<21;i++)	    
		{
			icc_buff[0]=0x00;
			icc_buff[1]=0xb2;
			icc_buff[2]=i;
			icc_buff[3]=0x1c;
			icc_buff[4]=47;
			
			icc_out();
			
			p=icc_buff;	
			if(user.tax_id[j]!=*p) continue;
			memcpy(&tax[j].tax_id,p,47);
			break;
		}	 
	}
	memcpy(span.id,user.tax_id,6);

	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x82;
	icc_buff[3]=0;
	icc_buff[4]=61;
	
	icc_out();
	
	p=icc_buff;	
	ta=*(p+1);

	for(j=0;j<ta;j++)
	{ 
		icc_buff[0]=0x00;
		icc_buff[1]=0xb2;
		icc_buff[2]=j+1;
		icc_buff[3]=0x34;
		icc_buff[4]=18;
		
		icc_out();
		
		p=icc_buff;	
		if(memcmp(p,Mac_Code,8)!=0) continue;
		user.file_index=*(p+16);
		break;
	}
	return 0;
}

uchar fiscal_check_auth(void)
{
	uchar xdata temp[8],temp1[8],temp2;
	uchar *p;
	icc_reset();
	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;

	icc_in();
	if(stat!=0){return 1;}
    //	if(!(sw1==0x61 && sw2==0x0c))
    //    {stat=1;return;}
	icc_buff[0]=0x00;//读税控机注册号
	icc_buff[1]=0xb0;//READ EF02
	icc_buff[2]=0x82;
	icc_buff[3]=9;
	icc_buff[4]=8;
	icc_out();
	if(stat!=0){return 1;}
	/*ES=0;
	for(i=0;i<length;i++)
	rs232_send_byte (icc_buff[i]);
	*/

	p=Readtime1();

    if((memcmp(icc_buff,p,4)>0)||(memcmp(&icc_buff[4],p,4)<0)){return 3;}
	icc_buff[0]=0x00;
	icc_buff[1]=0xb0;
	icc_buff[2]=0x81;
	icc_buff[3]=0x0;
	icc_buff[4]=10;
	icc_out();
	if(stat!=0){return 1;}
	temp2=stat=icc_buff[8];
    fiscal_id1=icc_buff[9];
	if(icc_buff[9]==0xff){return 0;}
    if(memcmp(icc_buff,user.user_id,8)!=0) {return 1;}
	icc_buff[0]=0;
	icc_buff[1]=0x84;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=8;

	icc_out();
	if(stat!=0){return 1;}
	memcpy(temp,icc_buff,8);

    icc_reset_sam();

	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;
	icc_sam_in();
	if(stat!=0){return 1;}
	icc_buff[0]=0;
	icc_buff[1]=0x88;
	icc_buff[2]=0;
	icc_buff[3]=fiscal_id1;
	icc_buff[4]=8;
	memcpy(&icc_buff[5],temp,8);
	icc_sam_in();
	if(stat!=0){return 1;}
    icc_buff[0]=0;
	icc_buff[1]=0xc0;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=8;
	icc_sam_out();
	memcpy(temp1,icc_buff,8);

	icc_buff[0]=0;
	icc_buff[1]=0x82;
	icc_buff[2]=0;
	icc_buff[3]=fiscal_id1;
	icc_buff[4]=8;
	memcpy(&icc_buff[5],temp1,8);
	icc_in();
    if(stat!=0){return 1;}
    if(!(sw1==0x90 && sw2==0x00))
    {return 2;}
    stat=temp2;
    return 0;
}

uchar get_volume_info(uchar* str)
{
    uchar i;
	icc_reset();
	icc_buff[0]=0x00;
	icc_buff[1]=0xa4;
	icc_buff[2]=0;
	icc_buff[3]=0;
	icc_buff[4]=2;
	icc_buff[5]=0x2f;
	icc_buff[6]=0x02 ;

	icc_in();

	if(stat!=0){return 1;}
    for(i=fiscal_ck_index.cur;i<200;i++)
    {
        icc_buff[0]=0;
        icc_buff[1]=0xb2;
        icc_buff[2]=i;
        icc_buff[3]=user.file_index*8+4;
        icc_buff[4]=6;
        icc_out();
		if(stat!=0){return 1;}
        if((sw1!=0x90 && sw2!=0x00)) return 1;
        if((icc_buff[0]!=0)&&(icc_buff[0]!=0xff)) continue;
        fiscal_ck_index.cur=i;
        break;
	}
	if(i==200) return 1;
    icc_buff[0]=0;
	icc_buff[1]=0xdc;
	icc_buff[2]=i;
	icc_buff[3]=user.file_index*8+4;
	icc_buff[4]=37;
	memcpy(&icc_buff[5],str,37);
	icc_in();
	if(stat!=0){return 1;}
	if(sw1==0x69 && sw2==0x83)stat=1;
	return 0;
}

uchar fiscal_check(void)
{
    uint i;
    if(fiscal_id1==0xff)
    {
	    icc_buff[0]=0;
	    icc_buff[1]=0x20;
	    icc_buff[2]=0;
	    icc_buff[3]=0;
	    icc_buff[4]=Hz_Record[6];//4;

	 	memcpy(&icc_buff[5],Hz_Record,Hz_Record[6]);
	    icc_in();
		if(sw1!=0x90)return 1;

        for(i=fiscal_ck_index.cur;i<256;i++)
        {
            icc_buff[0]=0;
            icc_buff[1]=0xb2;
            icc_buff[2]=i;
            icc_buff[3]=0x1c;
            icc_buff[4]=0xe9;
            icc_out();
			if(stat!=0){return 1;}
   
            if((sw1!=0x90 && sw2!=0x00)) return 1;
            if((icc_buff[0]!=0xff)&&(icc_buff[0]!=0)) continue;
            fiscal_ck_index.cur=i;
            fiscal_id1=0;
            break;
        }
        if(i==256) return 2;
    }

    icc_buff[0]=0;
    icc_buff[1]=0xdc;
    icc_buff[2]=fiscal_ck_index.cur;
    icc_buff[3]=0x1c;
    icc_buff[4]=233;
    memcpy(&icc_buff[5],&fiscal_ck_dat,233);
    icc_in();
	if(stat!=0){return 1;}
    fiscal_ck_index.cur++;
	if(fiscal_ck_index.cur==0)
	{
		fiscal_ck_index.cur=1;
		return 1;
    }
	return 0;
}

uchar compute_lrc(uchar *pdatain,uchar len)
{
	uchar data i;
	uchar data lrc_code;
	lrc_code=0;
	for(i=0;i<len;i++)
	{ 
		lrc_code=lrc_code^*pdatain;
		pdatain++;
	}
	return lrc_code;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -