📄 pack_comm.c
字号:
{
buf[0]=Hand_num>>8;
buf[1]=Hand_num;
pack_length=2;
}
else pack_length=0;
check =get_inv_roll(i,&buf[pack_length]); //get_inv_roll(i,invoice_roll);
if(check)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
pack_length +=37;
if((i==(Hand_num+pack_num-1))&&(bc_pack_num==0))data_index = 0;
Back_Outorder(1,data_index,pack_length,buf);
data_index++;
}
for(i=bc_pack_num;i<(Hand+bc_pack_num);i++) //已用发票卷
{
//2005.11.14
if(data_index==1)
{
buf[0]=Hand>>8;
buf[1]=Hand;
pack_length=2;
}
else pack_length=0;
check =get_inv_roll(i,&buf[pack_length]); //get_inv_roll(i,invoice_roll);
if(check)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
pack_length +=37;
if(i==(Hand+bc_pack_num-1))data_index = 0;
Back_Outorder(1,data_index,pack_length,buf);
data_index++;
}
break;
case 0x15: //按发票号查询
pack_length=0;
data_index = 1;
buf_tr[0]=0;
buf_tr[3]=0xff;
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];
//2005.9.26
if((start_num>end_num)||(order_mode!=8))//带与不带发票卷号都可以
{
Back_Outorder(0,0,0,buf_tr);
break;
}
plu_num = end_num - start_num+1;
for(i=0;i<plu_num;i++)
{
//2005.11.14
if(data_index==1)
{
pack_length=2;
buff[0]=plu_num>>8;
buff[1]=plu_num;
}
else pack_length=0;
check=locate_invoice((start_num+i),&buff[pack_length],0);
if(check)
{
if(check==1)continue;
Back_Outorder(0,0,0,buf_tr);
break;
}
pack_length+=27;
/*memcpy(&buff[pack_length+1],(uchar *)&record.date[0],3);
pack_length +=4;
memcpy(&buff[pack_length+1],(uchar *)&record.invoice_no,4);
pack_length +=4;
memcpy(&buff[pack_length+1],(uchar *)&record.invoice_type,1);
pack_length +=1;
memcpy(&buff[pack_length+1],(uchar *)&record.invoice_money,18);//税控码//valid_inv_no//disburse_choice//receiver_no
pack_length +=18;
*/
if(i == (plu_num-1))data_index = 0;
Back_Outorder(1,data_index,pack_length,buff);
data_index++;
}
break;
case 0x16:
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=locate_invoice_by_date(0,&buf[1],&buf[5]);//找出总的明细条数
if((check)&&(check!=NO_DATA))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
while(1)//找出未滚掉的明细的条数
{
//2005.11.14
if(data_index==1)
{
buff[0]=gb_temp>>8;
buff[1]=gb_temp;
pack_length=2;
}
else
pack_length=0;
check=LookUp_inv_list_roll(&buf[1],&buf[5],&addtemp,data_index-1,&buff[pack_length]);
if((check)&&(check!=OK)){break;}
pack_length+=27;
//2005.8.27
check=LookUp_inv_list_roll(&buf[1],&buf[5],&tt,data_index-1,&buff[500]);//防止data_index错
if((check)&&(check!=OK)){data_index=0;Back_Outorder(1,data_index,pack_length,buff); break;}
Back_Outorder(1,data_index,pack_length,buff);
data_index++;
}
//2005.8.27
if(data_index==0)break;//找完
addtemp=RECORD_START_ADDR; //明细起始地址
while(1) //找出滚动后的明细的条数
{
//2005.11.14
if(data_index==1)
{
buff[0]=gb_temp>>8;
buff[1]=gb_temp;
pack_length=2;
}
else
pack_length=0;
check=LookUp_inv_list(&buf[1],&buf[5],&addtemp,&buff[pack_length]);
if((check)&&(check!=OK)){break;}
pack_length+=27;
if(check==OK)data_index = 0;
//2005.8.27
check=LookUp_inv_list(&buf[1],&buf[5],&addtemp,&buff[500]);//防止data_index错
if((check)&&(check!=OK)){data_index=0;Back_Outorder(1,data_index,pack_length,buff); break;}
Back_Outorder(1,data_index,pack_length,buff);
if(check==OK)break;
data_index++;
}
/*
addtemp=RECORD_START_ADDR; //明细起始地址
pack_length=0;
while(1)//找出总的明细的条数
{
//send_str(2,&pack_length);
check=LookUp_inv_list(&buf[1],&buf[5],&addtemp,buff);
//check=LookUp_inv_list(&buf[1],&buf[5],&addtemp,&inv_rec);
if(check){if(check==OK)pack_length++;break;}
pack_length++; //
//send_str(2,&pack_length);
}
//send_str(2,&pack_length);
//send_char(Hand_num);
if((addtemp==RECORD_START_ADDR)&&(pack_length==0))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
start_num=addtemp;
addtemp=RECORD_START_ADDR; //明细起始地址
for(i=0;i<3;i++){buf_tr[i]=buf[i+1];buf_tr[i+3]=buf[i+4];}
for(pack_num=0;pack_num<pack_length;pack_num++)//读出明细且打包发出
{
check=LookUp_inv_list(&buf[1],&buf[5],&addtemp,buff);//查找结束日期前的下一条记录
if((check)&&(check!=OK))break;
buff[0]=0x20;
pack_length=27;
//memcpy(&buff[pack_length+1],(uchar *)&record.date[0],3);//日期
//pack_length +=4;
//memcpy(&buff[pack_length+1],(uchar *)&record.invoice_type,1); //发票类型
//pack_length +=1;
//memcpy(&buff[pack_length+1],(uchar *)&record.invoice_no,4); //发票号
//pack_length +=4;
//memcpy(&buff[pack_length+1],(uchar *)&record.invoice_money,18);//税控码//valid_inv_no//disburse_choice//receiver_no
//pack_length +=18;
if(check==OK)data_index = 0;
Back_Outorder(1,data_index,pack_length,buff);
if((addtemp>start_num)||(check==OK))break;
data_index++;
}
*/
break;
case 0x17:
if(order_mode!=0)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
pack_length=0;
for(i=0;i<4;i++)buf[pack_length+i]=g_user_info.issue_deline_date[i];
pack_length +=4;
//long_to_str(g_user_info.invoice_max_money,buf_tr);
memcpy(&buf[pack_length],(uchar*)&g_user_info.invoice_max_money,4);
pack_length +=4;
//long_to_str(g_user_info.max_money,buf_tr);
memcpy(&buf[pack_length],(uchar*)&g_user_info.max_money,4);
pack_length +=4;
//long_to_str(g_user_info.retreat_max_money,buf_tr);
memcpy(&buf[pack_length],(uchar*)&g_user_info.retreat_max_money,4);
pack_length +=4;
for(i=0;i<6;i++)buf[pack_length+i]=g_tax_catalog[i].tax_item;
pack_length +=6;
Back_Outorder(1,0,pack_length,buf);
break;
case 0x18:
if((order_mode<37)|| (memcmp(&buf[0],&g_user_info.register_no[0],8)!=0))
{
Back_Outorder(0,0,0,buf_tr);//串口完税
break;
}
check=update_controls(&buf[8]);
if(check){
Back_Outorder(0,0,0,buf_tr);
break;
}
check=enter_application_direct(USER_CARD);
check=read_control_msg(0);
if(check){
Back_Outorder(0,0,0,buf_tr);
break;
}
//报税标志
i=0;
if(write_eeprom(DECLARE_TAX_ADDR,1,&i)) return(WRITE_EEPROM_FAIL);
Back_Outorder(1,0,0,buff);
//2005.8.27
check=get_declare_addr_struct(&declare_addr);
if(check) break;
//变化报税的开始日期
check = read_flash(declare_addr.delare_addr-DECLARE_LEN,10,&buf[0]);
if(write_eeprom(END_DATE_ADDR,3,&buf[5])) return(READ_EEPROM_FAIL);
//清EE中的累加金额
error = read_flash(declare_addr.delare_addr-DECLARE_LEN+70,8,buf); //从申报记录中读出票的金额
if(error) return READ_FLASH_FAIL;
memcpy((uchar*)&addtemp,buf,4);
if(read_eeprom(MONEY_ADD,(uint)sizeof(money_add),&money_add))
return(READ_EEPROM_FAIL);
if(money_add.add_money>=addtemp)money_add.add_money-=addtemp;
else money_add.add_money=0;
memcpy((uchar*)&addtemp,&buf[4],4);
if(money_add.retreat_money>=addtemp)money_add.retreat_money-=addtemp;
else money_add.retreat_money=0;
money_add.crc=crcxdata((uint)sizeof(money_add)-2,&money_add);
if(write_eeprom(MONEY_ADD,(uint)sizeof(money_add),&money_add))
return(WRITE_EEPROM_FAIL);
break;
case 0x19: //上传申报数据 命令格式 0x1b+0x10+0x19+00+0x07+ buf[0] + buf[1] +cs 其中buf[0]为起始,终止期 0XFF为全部
//如:1-0XFF为全部申报数据
if((order_mode!=2)||(!(buf[0]>0))||(buf[0]>buf[1]))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
check=get_declare_addr_struct(&declare_addr);
if((!declare_addr.delare_num)||(check))
{
Back_Outorder(0,0,0,buf_tr);
break;
}
if(buf[1]==0xff)buf[1]=declare_addr.delare_num;
check=print_declare_report(buf[0],buf[1],1);
break;
case 0x56: //设定机器号
/*if(order_mode>8)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
*/
read_eeprom(PIN_TMP1,10,buf_tr);
if(!((buf_tr[0]==0|| buf_tr[0]==0xFF) && (buf_tr[1]==0 || buf_tr[1]==0xFF) &&
(buf_tr[2]==0 || buf_tr[2]==0xFF) && (buf_tr[3]==0 || buf_tr[3]==0xFF) &&
(buf_tr[4]==0 || buf_tr[4]==0xFF) && (buf_tr[5]==0 || buf_tr[5]==0xFF) &&
(buf_tr[6]==0 || buf_tr[6]==0xFF) && (buf_tr[7]==0 || buf_tr[7]==0xFF)))
{
Back_Outorder(0,0,0,buf_tr);
break; //机器已初始化
}
j=enter_application_direct(USER_CARD);
if(j) break;
j=check_clear_card(0,&q);
if(j==POWER_OFF) return POWER_OFF;
else if(j) break;//==CANCEL
if(read_eeprom(MANUFACTURER_INFO+8,((uint)sizeof(g_manufacturer_info)-8),&buf[8]))
return(READ_EEPROM_FAIL);
cs=crcxdata(sizeof(g_manufacturer_info)-2,buf);
buf[12]=cs>>8;
buf[13]=cs;
if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
return(WRITE_EEPROM_FAIL);
Back_Outorder(1,0,0,buff);
break;
case 0x60: //设定机器出厂日期
/*if(order_mode>8)
{
Back_Outorder(0,0,0,buf_tr);
break;
}
*/
j=enter_application_direct(USER_CARD);
if(j) break;
j=check_clear_card(0,&q);
if(j==POWER_OFF) return POWER_OFF;
else if(j) break;
for(j=0;j<4;j++)buf[j+8]=buf[j];
if(read_eeprom(MANUFACTURER_INFO,((uint)sizeof(g_manufacturer_info)-6),buf))
return(READ_EEPROM_FAIL);
cs=crcxdata(sizeof(g_manufacturer_info)-2,buf);
buf[12]=cs>>8;
buf[13]=cs;
if(write_eeprom(MANUFACTURER_INFO,(uint)sizeof(g_manufacturer_info),buf))
return(WRITE_EEPROM_FAIL);
Back_Outorder(1,0,0,buff);
break;
default:
Back_Outorder(0,0,0,buf_tr);
break;
}
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -