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

📄 usbmainold.c

📁 记录仪
💻 C
📖 第 1 页 / 共 5 页
字号:
           trs_cnt=0;    //列下标
           for(ind_buf2=6;ind_buf2<64;ind_buf2++)
           {  Clr_WDog();       //清w-dog
              j_temp=drvr_drv_time[trs_hang][trs_cnt];
              MainEpBuf2[ind_buf2]=j_temp;
              trs_jy^=j_temp;
              if(trs_cnt==27)
              {
                 trs_hang=(trs_hang+1)%300;
                 trs_cnt=(trs_cnt+1)%28;
              }
              else  trs_cnt++;
              trs_cnt_byte++;
              trs_cnt_size++;
           }
           k = D12_WriteEndpoint5(64);       //发送
        }
        else
        {
           ind_buf2=0;    //发送剩下的数据
           do
           {  Clr_WDog();       //清w-dog
              j_temp=drvr_drv_time[trs_hang][trs_cnt];
              MainEpBuf2[ind_buf2]=j_temp;
              trs_jy^=j_temp;
              if(trs_cnt==27)
              {
                 trs_hang=(trs_hang+1)%300;
                 trs_cnt=(trs_cnt+1)%28;
              }
              else  trs_cnt++;
              trs_cnt_byte++;
              trs_cnt_size++;
              ind_buf2++;
           }while(ind_buf2<64&&trs_cnt_byte<280);

           if(trs_cnt_byte==280)
           {
              MainEpBuf2[ind_buf2]=trs_jy;
              trs_cnt_tot=1;
              Clr_WDog();//喂狗
           }
           k = D12_WriteEndpoint5(64);       //发送
        }
    }
}


//--------------------------------------------------------------------------------------------上载疑点点数据
void trsusb_ydshj(void)
{

        unsigned char xdata j=0,l,k=0;
        unsigned int xdata i;
        Clr_WDog();       //清w-dog
        //初始化时,已将sec_data[10][326]的所有字节清0
        if(trs_cnt_size==10)
        {
           l=(sec_hang+1)%10;       //共有l条疑点记录
           if(sec_data[l][0])  l=10;

           if(l==0)
           {
              trs_jy=packdata(0);
              MainEpBuf2[6]=trs_jy;               //发1个空数据包,立即返回
              j= D12_WriteEndpoint(5, 64, MainEpBuf2);       //发送
              trs_cnt_size=0;
              return;
           }
           trs_cnt_size=l;
           trs_cnt_tot=trs_cnt_size;
        }


        if(trs_cnt_size==0)
        {
                trs_cnt=0;
                trs_cnt_tot=0;
                return;
        }
        else
        {
                if(trs_cnt==0)
                {
                        j=packdata(326);
                        k=(sec_hang+10-(trs_cnt_tot-trs_cnt_size))%10;
                        for(i=0;i<326;i++)
                        {      Clr_WDog();       //清w-dog
	                       MainEpBuf2[i+6]=sec_data[k][i];
	                       j^= MainEpBuf2[i+6];
	                }

                        MainEpBuf2[332]=j;
                        Clr_WDog();//喂狗
                }

                i=trs_cnt*64;
                j = D12_WriteEndpoint(5, 64, MainEpBuf2+i);
                trs_cnt++;
                if(trs_cnt>5)
                {
                        trs_cnt=0;
                        trs_cnt_size--;
                }
        }
}
//-----------------------------------------------------------------------------------------------上载2天超时
void trsusb_2dayover(void)
{
        unsigned char xdata i,j,l;
	unsigned char xdata over_rec[21],over_cnt=0;
        unsigned char xdata a[3],b[3],c[5],d[5];
        Clr_WDog();       //清w-dog
        if(trs_cnt_tot)
        {
             trs_cnt_tot=0;

             //找到符合条件的超时记录

             //stop_3day[11]数组中前9个字节存放停车当天以及之前2天的日期,先从中取出各自的日期
             for(i=0;i<3;i++)           //读取停车前2天的年月日
             {  Clr_WDog();       //清w-dog
              a[i]=stop_3day[i];
             }
             for(i=0;i<3;i++)           //读取停车前1天的年月日
             {  Clr_WDog();       //清w-dog
              b[i]=stop_3day[3+i];
             }
             for(i=0;i<5;i++)           //读取停车当天的年月日时分
             { Clr_WDog();       //清w-dog
                d[i]=stop_3day[6+i];
             }

             i=num_ovrec;
             l=0;
             do
             {  Clr_WDog();       //清w-dog
                for(j=0;j<5;j++)
                { Clr_WDog();       //清w-dog
                   c[j]=overtime_rec[i][23+j];                         //取出 overtime_rec[]数组中的一个停止年月日时分
                }
                 if((a[0]==c[0]) && (a[1]==c[1]) && (a[2]==c[2]))       //如果停车前2天的年月日与之相同
                {
                   if(c[3]>d[3])
                   {
                      over_rec[over_cnt]=i;                     //将对应的数组下标保存在over_rec[]
                      over_cnt++;
                   }
                   else if(c[3]==d[3])
                   {
                      if(c[4]>=d[4])
                      {
                          over_rec[over_cnt]=i;                 //将对应的数组下标保存在over_rec[]
                          over_cnt++;
                      }
                   }
                }
                else if((b[0]==c[0]) && (b[1]==c[1]) && (b[2]==c[2]))  //如果停车前1天的年月日与之相同
                {
                   over_rec[over_cnt]=i;                     //将对应的数组下标保存在over_rec[]
                   over_cnt++;
                }
                else if((d[0]==c[0]) && (d[1]==c[1]) && (d[2]==c[2]))  //如果停车当天的年月日与之相同
                {
                   over_rec[over_cnt]=i;                     //将对应的数组下标保存在over_rec[]
                   over_cnt++;
                }
                i=(i+1)%21;
                l++;
             }while(l<21);


   	     if(over_cnt==0)       //没有符合条件的超时记录
	     {
	        trs_jy=packdata(0);
                MainEpBuf2[6]=trs_jy;               //发1个空数据包,立即返回
                j= D12_WriteEndpoint(5, 64, MainEpBuf2);       //发送
                trs_cnt_size=0;
                return;
             }
             trs_cnt_size=over_cnt;
        }

        if(trs_cnt_size==0)
        {

                trs_cnt=0;
                return;
        }
	else                //有符合条件的超时记录,共over_cnt条
	{

              trs_cnt_size--;
              trs_jy=packdata(28);              //数据块长度为28

              l=over_rec[trs_cnt_size];
              for(j=0;j<28;j++)           //将28个字节(驾驶证号码+时间)送入缓冲区
              {   Clr_WDog();       //清w-dog
                 MainEpBuf2[j+6]=overtime_rec[l][j];
	         trs_jy^=MainEpBuf2[j+6];
              }
              MainEpBuf2[34]=trs_jy;
              j = D12_WriteEndpoint(5, 64, MainEpBuf2);

	}
        return;


}
//----------------------------------------------------------------------------------------上载最近10次通信时间
void trsusb_down_time(void)
{
     unsigned char xdata i,j,k,l,m;
     Clr_WDog();       //清w-dog
    //初始化时,已将down_time[10][5]的所有字节清0


    l=(index_dw_tm+1)%10;     //index_dw_tm指向10次当中的最近1次通信时间
    if(down_time[l][0])  l=10;

    k=packdata(l*5);              //数据块长度为l*5
    i=index_dw_tm;
    for(j=0;j<l;j++)
    {  Clr_WDog();       //清w-dog
       for(m=0;m<5;m++)
       {  Clr_WDog();       //清w-dog
          MainEpBuf2[6+5*j+m]=down_time[i][m];
	  k^=MainEpBuf2[6+5*j+m];
       }
       i=(i+9)%10;
    }
    MainEpBuf2[l*5+6]=k;
    j = D12_WriteEndpoint(5, 64, MainEpBuf2);
}
//--------------------------------------------------------------------------------上载带有驾驶证号码的疑点数据
trsusb_num_ydshj()
{
     unsigned char xdata j;
     Clr_WDog();       //清w-dog
    //初始化时,已将num_10[10][18]的所有字节清0
        if(trs_cnt_tot==1)
        {
              trs_cnt_tot=0;
              trs_cnt_size=10;
              trs_cnt=sec_hang;
        }
        if(trs_cnt_size==0)
        {
              trs_cnt=0;
              return;
        }
	else                //有trs_cnt_size条记录
	{
              trs_cnt_size--;

              trs_jy=packdata(18);              //数据块长度为18

              for(j=0;j<18;j++)           //将18个字节(驾驶证号码)送入缓冲区
              {   Clr_WDog();       //清w-dog
                 MainEpBuf2[j+6]=num_10[trs_cnt][j];
	         trs_jy^=MainEpBuf2[j+6];
              }
              MainEpBuf2[24]=trs_jy;
              j = D12_WriteEndpoint(5, 64, MainEpBuf2);
              trs_cnt=(trs_cnt+9)%10;
	}
}
//---------------------------------------------------------------------------------------------USB传送数据函数
void trs_usb(void)
{
	unsigned int xdata len;//,len1;
        Clr_WDog();       //清w-dog
        recv_cmd=0;
        ES=0;
	while(1 )
        {
                Clr_WDog();       //清w-dog
                usbclk_cnt++;
                if(usbclk_cnt&0x100)
                {
                Clr_WDog();//喂狗
                }

		if(usbclk_cnt>0x50000||FL_RUN)
		{
			usbclk_cnt=0;

			break;
		}




		if (bEPPflags.bits.ep2_rxdone)					//端点2收到数据;
		{
			DISABLE;
			bEPPflags.bits.ep2_rxdone = 0;
                        unpack();
                        check_pack();
                        Clr_WDog();//喂狗
                        if (recv_size==0)                              //接收到的是命令,判断命令类型,对mainepbuf赋值;
  		        {
		       	        if (error)
			        {
				     packet_error(0xfa);
                                     error=0;
                                     len = D12_WriteEndpoint(5, 64,MainEpBuf2);

			        }

				else
				{
                                     switch(recv_cmd)
			   	     {
							//  trs_count=0x0;
					case  1 :
			    		trs_num();            //上载驾驶员代码,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
			   		break;

			    		case  2 :
			    		trs_clk();            //上载时钟时间,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
                                        break;

    					case  3 :
    					trs_lich();           //上载360小时里程,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
                                        break;

    					case  4 :
    					trs_tzxs();           //上载特征系数,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
    					break;

    					case  5 :
                                        trs_cnt_size=1;
                                        trs_fst_time=1;
                                        trs_cnt_tot=1;
                                        trsusb_rate(360);  //上载360小时速度
    					break;

    					case  6 :
    					trs_vin();            //上载VIN,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
    					break;

    					case  7 :
                                        trs_cnt_size=10;
                                        trs_cnt=0;
                                        trs_cnt_tot=0;
                                        //j_temp=0;
    					trsusb_ydshj();       //上载疑点数据
    					break;

    					case  8 :
    					trs_2daylich();       //上载2天里程,和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
    					break;

    					case  9 :
                                        trs_cnt_size=1;
                                        trs_fst_time=1;
                                        trs_cnt_tot=1;
    					trsusb_rate(48);    //上载2天速度
    					break;

    					case  0x11 :
                                        trs_cnt_tot=1;
                                        trs_cnt_size=0;
    					trsusb_2dayover();    //上载2天超时
    					break;
                                        case  0x0B:
                                        trs_cnt_tot=1;
                                        trs_cnt_size=0;
                                        trsusb_num_ydshj();      //上载带有驾驶证号码的疑点数据
                                        break;
                                        case  0x0C:
                                        trsusb_down_time();      //上载最近10次通信时间
                                        break;
                                        case  0x0D :
    			        	trs_ini_info();       //上传初始安装信息(ID号+安装时间),和232共用一函数
                                        len = D12_WriteEndpoint(5, 64,MainEpBuf2);
    			        	break;
                                        case 0x0E:
                                        trs_cnt_size=0;
                                        trs_fst_time=1;
                                        trs_cnt_tot=1;
                                        trsusb_num_rate(360);      //上载驾驶员的流水记录
                                        break;
                                        case 0x0F:
                                        trs_cnt_size=0;
                                        trs_fst_time=1;
                                        trs_cnt_tot=1;
                                        trsusb_num_rate(48);      //上载驾驶员的流水记录
                                        break;
                                        case 0x66:
                                        break;
					case 0xBA :
                                        FLAG_INIT=0;
                                        break;

                                        case 0xff :
                                        ENABLE;
                                        return;

    					default:
    					break;
			             }

   				}


		        }//接收上传命令,并作处?
                        else
			{
                                if (error)
			        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -