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

📄 pack_comm.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 4 页
字号:
          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 + -