📄 pack_comm.c
字号:
buff[3]=(bc_pack_num&0xff00)>>8; /*包号高字节*/
buff[4]=bc_pack_num&0x00ff; /*包号高字节*/
pack_crc=crcxdata(pack_remainder*data_len+4,&buff[1]);
buff[pack_remainder*data_len+5]=pack_crc&0x00ff;
buff[pack_remainder*data_len+6]=(pack_crc&0xff00)>>8;
buff[pack_remainder*data_len+7]=0x99;
send_str(pack_remainder*data_len+8,buff);
q=400;
do
{
q--;
if(!rece(6,buf_tr))
check=buf_tr[1];
else check=0;
}while((q!=0)&&(check!=0x33)&&(check!=0x32)&&(check!=0x35));
sprintf(buf,"发送最后一包数据");
clear_lcd(2,1);
lcd_disp(2,0,buf);
send_ACK_NAK(ANSWER_ACK);
return 0;
//if((check!=0x32)||(check!=0x35)){return 0;delayms(5000);}//bc_pack_num--;
//else {Hand=0;send_ACK_NAK(ANSWER_ACK);return 0;}
}
}
if(Hand>=3)return COMM_FAIL;
else return 0;
//if((q==0)||(check==0x33)) return COMM_FAIL;
//else if(check==0x32) return 0;
//if(check==0x33) return COMM_FAIL;
}//发送模式
else if(!(order_mode&0x80))//响应外部命令
{
switch(command_type)
{
case 0x1:
if(order_mode!=0)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
Back_Outorder(1,0,0,buff);
break;
case 0x10:
pack_length=0;
if(SelFile_id(SAM_CARD,0xEF02))
return (CHK_COMM_FAIL);
check=RW_bin(SAM_CARD, 0, 0, 8, &buff[0]);//税控卡号
if(check) return (check);
pack_length+=8;
memcpy(&buff[pack_length],&g_user_info.password,8); //注册口令
pack_length+=8;
memcpy(&buff[pack_length],&g_user_info.application_date,4);
pack_length+=4;
memcpy(&buff[pack_length],&g_user_info.application_valid_date,4);
pack_length+=4;
memcpy(&buff[pack_length],&g_user_info.tax_payer_name,40);
pack_length+=40;
memcpy(&buff[pack_length],&g_user_info.tax_payer_code,8);
pack_length+=8;
memcpy(&buff[pack_length],&g_user_info.tax_payer_id,20);
pack_length+=20;
memcpy(&buff[pack_length],&g_user_info.levy_dept_code,4);
pack_length+=4;
memcpy(&buff[pack_length],&g_user_info.declare_way,1);
pack_length+=1;
memcpy(&buff[pack_length],&g_user_info.issue_deline_date,4);
pack_length+=4;
memcpy(&buff[pack_length],(uchar *)&g_user_info.invoice_max_money,4);
pack_length+=4;
memcpy(&buff[pack_length],(uchar *)&g_user_info.max_money,4);
pack_length+=4;
memcpy(&buff[pack_length],(uchar *)&g_user_info.retreat_max_money,4);
pack_length+=4;
Back_Outorder(1,1,pack_length,buff);
data_index = 2;
i = 0;
while(i<6)
{
pack_length=0;
memcpy(&buff[pack_length],&g_tax_catalog[i].tax_item,1);
pack_length +=1;
memcpy(&buff[pack_length],&g_tax_catalog[i].tax_no,4);
pack_length +=4;
memcpy(&buff[pack_length],&g_tax_catalog[i].tax_rate,2);
pack_length +=2;
memcpy(&buff[pack_length],&g_tax_catalog[i].tax_chinese_name,20);
pack_length +=20;
memcpy(&buff[pack_length],&g_tax_catalog[i].tax_english_name,20);
pack_length +=20;
if(i==5)data_index=0;
Back_Outorder(1,data_index,pack_length,buff);
data_index++;
i++;
}
break;
case 0x11:
pack_length=0;
read_rtc(&buff[1]);
buff[0] = 0x20;
if((memcmp(buff,buf,4)>0)&&(order_mode==4))
{
memcpy(&buff[0],buf,4);
pack_length +=4;
}
else
{
Back_Outorder(0,0,0,buf_tr);
break;
}
check =query_by_date(&buf[1],&buf[1],&pack_num,&Hand_num);
if((check)||(Hand_num==0))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
check =read_day_re(pack_num,&buff[512]);
if(check)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
memcpy((uchar *)&da,&buff[512],DAY_LEN_EM);
memcpy(&buff[pack_length],(uchar*)&da.invoice_num,2);
pack_length +=2;
memcpy(&buff[pack_length],(uchar*)&da.retreat_num,2);
pack_length +=2;
memcpy(&buff[pack_length],(uchar*)&da.rescissory_num,2);
pack_length +=2;
for(j=0;j<6;j++)buff[pack_length+j]=da.tax_item_code[j];
pack_length +=6;
for(i=0;i<6;i++)
{
addtemp=da.sale_money[i];
memcpy(&buff[pack_length],(uchar *)&addtemp,4);
pack_length +=4;
}
for(i=0;i<6;i++)
{
addtemp=da.retreat_money[i];
memcpy(&buff[pack_length],(uchar *)&addtemp,4);
pack_length +=4;
}
memcpy(&buff[pack_length],&buff[512+DAY_LEN_EM],128);
pack_length +=128;
Back_Outorder(1,0,pack_length,buff);
break;
case 0x12:
pack_length=0;
data_index = 1;
read_rtc(&buf_tr[1]);
buf_tr[0] = 0x20;
if(((memcmp(buf_tr,&buf[4],4)<=0)&&(memcmp(&buf[0],&buf[4],4)>0))||(order_mode!=8))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
//2005.11.14
check =audit_day_record(&buf[1],&buf[5],0,1);
if(check)Back_Outorder(0,0,0,buf_tr);
/* check =query_by_date(&buf[1],&buf[5],&pack_num,&Hand_num);
if(check)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
j=0;
while(j<Hand_num)
{
pack_length= 0;
check =read_day_re(pack_num,&buff[512]);
if(check)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
memcpy((uchar *)&da,&buff[512],DAY_LEN_EM);
buff[pack_length]=0x20;
memcpy(&buff[pack_length+1],(uchar*)&da.date[0],3);
pack_length +=4;
memcpy(&buff[pack_length],(uchar*)&da.invoice_num,2);
pack_length +=2;
memcpy(&buff[pack_length],(uchar*)&da.retreat_num,2);
pack_length +=2;
memcpy(&buff[pack_length],(uchar*)&da.rescissory_num,2);
pack_length +=2;
for(j=0;j<6;j++)buff[pack_length+j]=da.tax_item_code[j];
pack_length +=6;
for(i=0;i<6;i++)
{
addtemp=da.sale_money[i];
memcpy(&buff[pack_length],(uchar *)&addtemp,4);
pack_length +=4;
}
for(i=0;i<6;i++)
{
addtemp=da.retreat_money[i];
memcpy(&buff[pack_length],(uchar *)&addtemp,4);
pack_length +=4;
}
memcpy(&buff[pack_length],&buff[512+DAY_LEN_EM],128);
pack_length +=128;
if(j==(Hand_num-1))data_index=0;
Back_Outorder(1,data_index,pack_length,buff);
j++;
pack_num++;
if(data_index==0)break;
data_index++;
}
*/
break;
case 0x13:
pack_length=0;
data_index = 1;
start_num=buf[0];
start_num<<=8;
start_num|=buf[1];
start_num<<=8;
start_num|=buf[2];
start_num<<=8;
start_num|=buf[3];
end_num=buf[4];
end_num<<=8;
end_num|=buf[5];
end_num<<=8;
end_num|=buf[6];
end_num<<=8;
end_num|=buf[7];
if((start_num>end_num)||(order_mode!=8))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
plu_num = 0;
addtemp=start_num;
buf_tr[0]=0;
buf_tr[3]=0xff;
while(start_num<=end_num)
{
check=search_coll_inv_stat(start_num,buf_tr,&buf_tr[3],buf);
if(check)
{
if((check!=OK)||(plu_num==0))Back_Outorder(0,0,0,buf_tr);
break;
}
plu_num++; //卷数
if(memcmp((uchar*)&end_num,&buf[14],4)<=0)break;
for(j=0;j<4;j++){tt<<=8;tt|=buf[14+j];}
start_num=tt;
start_num++;
}
if(plu_num==0)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
for(i=0;i<plu_num;i++)
{
check=search_coll_inv_stat(addtemp,buf_tr,&buf_tr[3],buf);
if(check)break;
//2005.11.14
if(data_index==1)
{
buff[0]=plu_num>>8;
buff[1]=plu_num;
pack_length = 2;
}
else pack_length = 0;
memcpy(&buff[pack_length],buf,37);
pack_length +=37;
if(i==(plu_num-1))data_index = 0;
Back_Outorder(1,data_index,pack_length,buff);
if(data_index==0)break;
data_index++;
end_num=0;
for(j=0;j<4;j++){end_num<<=8;end_num|=buf[14+j];}
addtemp=end_num;//加一卷的终止号
addtemp++;
}
break;
case 0x14: //按时间段查询发票卷//date
pack_length=0;
data_index = 1;
read_rtc(&buf_tr[1]);
buf_tr[0] = 0x20;
// send_str(2,"11");
//开始时间大于当前时间,起时大于止时,时间段大于8个字节
if((memcmp(buf,buf_tr,4)>=0)||(memcmp(&buf[0],&buf[4],4)>0)||(order_mode!=8))
{
// send_str(2,"22");
Back_Outorder(0,0,0,buf_tr);
break;
}
for(i=0;i<3;i++){buf_tr[i]=buf[1+i];buf_tr[i+3]=buf[5+i];}
check =get_invc_vol_addr(buf_tr,buf);
pack_num=buf[0];//滚动的发票卷
pack_num<<=8;
pack_num|=buf[1];
Hand_num=buf[2];
bc_pack_num=buf[3];//第1扇区的发票卷
bc_pack_num<<=8;
bc_pack_num|=buf[4];
Hand=buf[5];
//send_str(6,buf);
//2005.10.19
//if((check)||((pack_num==0)&&(Hand_num==0)&&(bc_pack_num==0)))
if((check)||((Hand_num==0))&&(Hand==0))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
for(i=pack_num;i<(Hand_num+pack_num);i++) //已用发票卷
{
//2005.11.14
if(data_index==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -