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

📄 pack_comm.c

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