📄 icc.c
字号:
#include "upsd.h"
#include "zhd.h"
#include "dis1_1.h"
#include "ssxandicc.h"
#include "string.h"
#include "stdio.h"
extern void DisHzLinYm(uchar *p_hzline,uchar col);
extern void cls(void);
extern uchar GetKey();
extern void InvoiceFullIn();
extern uchar xdata icctempp[32];
extern INVOICE_PRN_INFO xdata inv_prn_cur_old_info;
extern INVOICE_DAY xdata inv_cur_day;
extern INVOICE_VOL xdata inv_cur_vol;
//extern xdata inv_prn_cur_info;
extern xdata INVOICE_CUR_INFO inv_cur_info;
extern DECLARE_DATA xdata declare_data ;
extern void DL();
extern uchar xdata Hz_Record[40];
extern uchar xdata databuf[10];
extern void DisAsc(uchar *p_dm,uchar col,uchar row);
extern uchar data keyc,g_temp;
extern void HexToStr(uchar *src, uchar *dest, uchar len);
extern TIME xdata sys_time;
extern uchar * Readtime1();
extern void Writetime1();
extern uchar xdata flash_temp[256];
extern void rd_buf(ulong addr);
void init_shui(void);
extern USER xdata user;
extern TAX xdata tax[6];
extern SPAN xdata span;
extern INVOICE_INPUT xdata invoice_input;
extern INVOICE_DAY xdata inv_cur_day;
extern INVOICE_DAY xdata inv_tmp_day;
INVOICE_VOL xdata inv_tmp_vol1;
extern INVOICE_PRN_INFO xdata inv_prn_cur_info;
extern INVOICE_PRN_INFO xdata inv_prn_tmp_info;
extern FISCAL_CK xdata fiscal_ck_dat;
extern FISCAL_CK_INDEX xdata fiscal_ck_index;
extern FISCAL_DATA_INDEX xdata fiscal_data_index;
extern DECLARE_DATA xdata declare_data;
uchar xdata sw1,sw2,stat,length;
extern uchar xdata icc_buff[250];
uchar xdata fiscal_code[8];
uchar tb_sam_reset(uchar *s);
void tb_sam_init();
void tb_sam_off();
uchar tb_sam_in_ins(uchar *s);
uchar tb_sam_out_ins(uchar *s);
uchar ExeIcc(uchar *src,bit mode);
uchar tb_reset(uchar *s);
void tb_off();
uchar tb_in_ins(uchar *s);
uchar tb_out_ins(uchar *s);
uchar xdata icctemp[16];
uchar xdata icctemp1[4];
uchar xdata pin_data[8] _at_ 0x7000;
uchar xdata fiscal_id1 _at_ 0xddd;
void icc_reset();
void icc_reset_sam();
void icc_off();
void icc_off_sam();
void icc_init() ;
void icc_init_sam();
void icc_in();
void icc_out();
uchar input_invoice(void);
uchar update_control(void);
uchar fiscal_check(void);
void issue_invoice(void);
void distribute_invoice();
uchar daily_collect_sign(void);
uchar declare_fiscal(void);
extern uchar long_to_bcd (uchar *bcd_buf, uchar lgBcd, ulong *ptSrc);
extern void StrToHex1(uchar *src, uchar *dest, uchar len);
extern uchar getstr(uchar keynum,uchar * keybuff,uchar col);
extern DECLARE_DATA xdata declare_tmp_data ;
extern uchar xdata declare_temp[4];
extern ulong bcd_to_long (uchar *bcd_buf, uchar lgBcd);
extern uchar compute_lrc(uchar *pdatain,uchar len);
extern void rs232_ss(void);
extern xdata COMMDATA chCommData ;
extern xdata uchar Mac_Code[8];
extern uchar xdata Temp_All[8];
uchar fiscal_check_auth(void);
uchar update_user();
uchar get_volume_info(uchar* str);
extern void rs232_send_byte (uchar da);
void icc_reset()
{
length=tb_reset(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
return ;
}
void icc_in()
{
length=tb_in_ins(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
return ;
}
void icc_out()
{
uint i;
length=tb_out_ins(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
for(i=0;i<1000;i++);
return ;
}//SAM卡基本函数
void icc_reset_sam()
{
length=tb_sam_reset(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
return ;
}
void icc_sam_in()
{
length=tb_sam_in_ins(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
return ;
}
void icc_sam_out()
{
uint i;
length=tb_sam_out_ins(icc_buff);
if(length>=3)
{
sw1=icc_buff[length-3];
sw2=icc_buff[length-2];
}
stat=icc_buff[length-1];
for(i=0;i<1000;i++);
return ;
}
/*StrToHex(uchar *src, uchar *dest)
{
uchar i, c, d;
i=0;
while(*src)
{
d=src[i];
if (d >='0' && d<='9')
c = d - '0';
else if( d >='A' && d<='F' )
c = d -'A'+ 10;
else if (d >='a' && d<='f')
c = d -'a'+ 10;
else
c = 0x0F; //将其他数转换为F
if (i & 0x01) //如果是偶数位,则作为HEX低4bit
dest[i/2]=c | dest[i/2];
//================================================================
else //如果是奇数位,则转换后再左移4bit
dest[i/2]=c << 4;
i++;
}
}*/
/*uchar ExeIcc(uchar *src,bit mode)
{
uchar status;
StrToHex(src,icc_buff);
if(mode==1)icc_in();
else icc_out();
if((sw1==0x90)&&(sw2==0x00)) status=0;
else if((sw1==0x90)&&(sw2==0x00)) status=1;
else if((sw1==0x65)&&(sw2==0x81)) status=2;
else if((sw1==0x67)&&(sw2==0x00)) status=3;
else if((sw1==0x69)&&(sw2==0x01)) status=4;
else if((sw1==0x69)&&(sw2==0x81)) status=5;
else if((sw1==0x69)&&(sw2==0x82)) status=6;
else if((sw1==0x69)&&(sw2==0x83)) status=7;
else if((sw1==0x69)&&(sw2==0x84)) status=8;
else if((sw1==0x69)&&(sw2==0x85)) status=9;
else if((sw1==0x69)&&(sw2==0x88)) status=10;
else if((sw1==0x6a)&&(sw2==0x80)) status=11;
else if((sw1==0x6a)&&(sw2==0x81)) status=12;
else if((sw1==0x6a)&&(sw2==0x82)) status=13;
else if((sw1==0x6a)&&(sw2==0x83)) status=14;
else if((sw1==0x6a)&&(sw2==0x84)) status=15;
else if((sw1==0x6a)&&(sw2==0x86)) status=16;
else if((sw1==0x6a)&&(sw2==0x88)) status=17;
else if((sw1==0x6b)&&(sw2==0x00)) status=18;
else if((sw1==0x6d)&&(sw2==0x00)) status=19;
else if((sw1==0x6e)&&(sw2==0x00)) status=20;
else if((sw1==0x6f)&&(sw2==0x00)) status=21;
else if((sw1==0x93)&&(sw2==0x02)) status=22;
else if((sw1==0x93)&&(sw2==0x02)) status=23;
else if((sw1==0x93)&&(sw2==0x03)) status=24;
else if((sw1==0x94)&&(sw2==0x01)) status=25;
else if((sw1==0x94)&&(sw2==0x03)) status=26;
else if((sw1==0x94)&&(sw2==0x06)) status=27;
else if(sw1==0x61) status=0;
return status;
}
*/
void init_shui(void)
{
uchar i;
icc_reset_sam();
DL();
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){stat=4;return;}
// 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]=0x0a;
icc_buff[4]=8;
icc_sam_out();
if(stat!=0){stat=2;return;}
for(i=0;i<8;i++)rs232_send_byte(icc_buff[i]);
if(memcmp(icc_buff,Mac_Code,8)!=0) {stat=1;return;}
// if(!(sw1==0x90 && sw2==0x00)){stat=2;return;}
icc_buff[0]=0x00;
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x12;
icc_buff[4]=8;
icc_sam_out();
//if(stat!=0){stat=3;return;}
memcpy(Temp_All,icc_buff,0x08);
//取TSAM卡注册编号GET_REGSTGER_NB,并取返回值_TEMP
icc_buff[0]=0xc0;
icc_buff[1]=0xf0;
icc_buff[2]=0x00;
icc_buff[3]=0x00;
icc_buff[4]=0x10;
icc_sam_out();
//if(stat!=0){stat=4;return;}
// if(!(sw1==0x90 && sw2==0x00)){stat=3;return;}
memcpy(icctemp,icc_buff,0x10);
//******操作上卡座TID卡
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){stat=5;return;}
icc_buff[0]=0x00;
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x02;
icc_buff[4]=8;
icc_out();
//if(stat!=0){stat=6;return;}
if(memcmp(icc_buff,Temp_All,8)!=0) {stat=2;return;}
// if(!(sw1==0x61 && sw2==0x0c)){stat=4;return;}
//REGISTER_SIGN (注册签字)取返回值_TEMP1
icc_buff[0]=0xc0;
icc_buff[1]=0xe4;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x10;
memcpy(&icc_buff[5],icctemp,16);
icc_in();
//if(stat!=0){stat=7;return;}
// if(!(sw1==0x61 && sw2==0x04)){stat=5;return;}
icc_buff[0]=0x00;
icc_buff[1]=0xc0;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x04;
icc_out();
//if(stat!=0){stat=8;return;}
// if(!(sw1==0x90 && sw2==0x00))
// {stat=6;return;}
memcpy(icctemp1,icc_buff,4);
//操作下卡座TSAM卡
//税控卡注册
//Terminal_Register
icc_buff[0]=0xc0;
icc_buff[1]=0xf1;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x04;
memcpy(&icc_buff[5],icctemp1,4);
icc_sam_in();
//if(stat!=0){stat=9;return;}
if(!(sw1==0x61 && sw2==0x08)){stat=3;return;}
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){stat=10;return;}
if(!(sw1==0x90 && sw2==0x00)){stat=4;return;}
memcpy(pin_data,icc_buff,8);
//读基本信息文件,9000 表示税控卡已注册成功
icc_buff[0]=0x00;//READ EF02
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x00;
icc_buff[4]=2;
icc_sam_out();
//if(stat!=0){stat=11;return;}
// if(!(sw1==0x90 && sw2==0x00)){stat=7;return;}
if(!(icc_buff[0]==0&&icc_buff[1]==0)){stat=5;return;}
stat=0;
return;
}
void distribute_invoice()
{
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();
icc_buff[0]=0x00;
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x02;
icc_buff[4]=8;
icc_out();
memcpy(Temp_All,icc_buff,0x08);
// if(!(sw1==0x61 && sw2==0x0c))
// {stat=1;return 1;}
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]=0x82;
icc_buff[3]=0x12;
icc_buff[4]=8;
icc_sam_out();
if(memcmp(icc_buff,Temp_All,8)!=0) {stat=1;return;}
// if(!(sw1==0x61 && sw2==0x0c))
// {stat=1;return 2;}
icc_buff[0]=0xc0;
icc_buff[1]=0xe9;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x16;
icc_out();
// ES=0;
// for(i=0;i<length;i++)
// rs232_send_byte (icc_buff[i]);
// ES=1;
if((sw1==0x94)&&(sw2=0x01)) {stat=2;return;}
/* icc_buff[0]=0x00;
icc_buff[1]=0xc0;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x16;
icc_out();
ES=0;
for(i=0;i<length;i++)
rs232_send_byte (icc_buff[i]);
ES=1;
if(!(sw1==0x90 && sw2==0x00))
{stat=3;return ;}*/
stat=0;
}
/*
ES=0;
for(i=0;i<length;i++)
rs232_send_byte (icc_buff[i]);
ES=1;
*/
/*
void distribute_invoice()
{
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){stat=1;return;}
icc_buff[0]=0x00;
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x02;
icc_buff[4]=8;
icc_out();
if(stat!=0){stat=2;return;}
memcpy(Temp_All,icc_buff,0x08);
// if(!(sw1==0x61 && sw2==0x0c)){stat=1;return 1;}
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){stat=3;return;}
icc_buff[0]=0x00;
icc_buff[1]=0xb0;
icc_buff[2]=0x82;
icc_buff[3]=0x12;
icc_buff[4]=8;
icc_sam_out();
if(stat!=0){stat=4;return;}
if(memcmp(icc_buff,Temp_All,8)!=0) {stat=1;return;}
// if(!(sw1==0x61 && sw2==0x0c)){stat=1;return 2;}
icc_buff[0]=0xc0;
icc_buff[1]=0xe9;
icc_buff[2]=0;
icc_buff[3]=0;
icc_buff[4]=0x16;
icc_out();
ES=0;
for(i=0;i<length;i++)
rs232_send_byte (icc_buff[i]);
if(stat!=0){stat=5;return;}
if((icc_buff[10]==0)&&(icc_buff[11]==0x36)&&(icc_buff[12]==0x49)&&(icc_buff[13]==0xf4)){{stat=3;return;}}
if((sw1==0x94)&&(sw2=0x01)) {stat=2;return;}
//etu:true:97uS;100.9uS//同向保护时间:>=12etu,231uS OK,标准202uS
//9000后发另一个命令>16etu,1.26~1.495mS(测量值),标准值16*100.9mS(1.61644mS);
//OSC clock=3.6697MHz//101.37uS
if(!(sw1==0x90 && sw2==0x00)){stat=3;return ;}
stat=0;
}*/
uchar input_invoice()
{
icc_reset_sam();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -