📄 icc.c
字号:
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 + -