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

📄 searchalarmerobj.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 3 页
字号:
	     if ( CalculateGpsSpace(Gpsdata.latitude, Gpsdata.longitude, pcrossdot->gpsdata.latitude, pcrossdot->gpsdata.longitude)>=A_CROSSING_D)
   	     {
		     CurStatus &= ~ISGETCROSSING;
                          
             return TRUE;
 		 }

	  }
	  
#if DEBUG_ELECDOG >0      
      PrintFromUART(1,"\nCurStatus:"); 
	  SendFromUART_HEX(1,(INT8U)CurStatus >>24);
      SendFromUART_HEX(1,(INT8U)CurStatus>>16);
      SendFromUART_HEX(1,(INT8U)CurStatus>>8);
      SendFromUART_HEX(1,(INT8U)CurStatus);
#endif 

     return FALSE;
	  
}

/*
********************************************************************************
*                  SEARCH CROSSING DOT EVERYWHERE
********************************************************************************
*/

BOOLEAN  SearchCrossingDot(CROSSINGDOT_STR *pcrossingdot)
{
     
      INT16U latindex;
      INT16U longtindex;
	 
	  latindex  = LockLatZone(Gpsdata.latitude);
     
   	  if(latindex != 0xffff)
	  {
	       longtindex = LockLongtZone(Gpsdata.longitude);
	  
	       if(longtindex != 0xffff)
	       {
	           if(AreaSearchCrossDot(pcrossingdot,latindex, longtindex))
			   {
			      return TRUE;
			   }
			   else
			   {
			      return FALSE;
			   }
			  
	       }
		   else
		   {
		       return FALSE;
		   }
	   }
	   else
	   {
	        return FALSE;
	   }

     
}

/*
********************************************************************************
*                  SEARCH ALARMER OBJECTS AS ELECEYE SORT
********************************************************************************
*/

BOOLEAN  SearchElecEyeSort(void)
{
     
     INT16U i;
   	 INT16U pos;
	 INT16U  nums;
	 OFFSET_STRUCT oft_eleceyesort;
         
	 if((Roadattri.attribute & HAVE_ELECEYE_SORT )== 0)
	 {
	       return FALSE;
	 }
     else 
	 {
          CurRroadIndex = Roadattri.roadindex;
	 }
          
	 ReadRecFromFlash(OFT_ELECEYESORT,CurRroadIndex,4,(INT8U*)&oft_eleceyesort);
	 
	 pos  = oft_eleceyesort.pos;
	 nums = oft_eleceyesort.nums;
		  	      
     ReadRecFromFlash(DATA_ELECEYESORT,pos,sizeof(ALARMEROBJ_STR),(INT8U*)&Objectdata);

	 for( i = 0; i<nums; i++)
	 {
	    if(CurStatus & ISGETELECEYE)
		{
		      break;
		}

	    if(CalculateGpsSpace(Gpsdata.latitude, Gpsdata.longitude,Objectdata.posidata.latitude, Objectdata.posidata.longitude)< A_ELECEYE_D)
  	    {
             if (!(CurStatus & ISGETELECEYE))
			 {
				     CurStatus |= ISGETELECEYE;
                     
					 memcpy((INT8U*)&AlarmerObject,(INT8U*)&Objectdata, sizeof(ALARMEROBJ_STR));
					 return TRUE;
			 }
 
		}

          ReadRecFromFlash(DATA_ELECEYESORT,++pos,sizeof(ALARMEROBJ_STR),(INT8U*)&Objectdata);

        
	 }
     
	 if (CurStatus & ISGETELECEYE)
	 {
	     if ( CalculateGpsSpace(Gpsdata.latitude, Gpsdata.longitude, AlarmerObject.posidata.latitude, AlarmerObject.posidata.longitude)>=A_ELECEYE_D)
   	     {
		     CurStatus &= ~ISGETELECEYE;
              			 
 		 }
	 }

     return FALSE;    
}

/*
********************************************************************************
*                  FIND VECTORLIMITED ROAD SECTION
********************************************************************************
*/

BOOLEAN  FindVecLimitedZone(void)
{
    INT16U i;
  	INT16U pos;
	INT16U  nums;
	INT16U  temp;
    OFFSET_STRUCT  oft_veclmtzone;
    
#if DEBUG_ELECDOG >0       
 	  PrintFromUART(1,"\nRoadattri.attribute:"); 
	  SendFromUART_HEX(1,Roadattri.attribute);
#endif    
   
    if((Roadattri.attribute & HAVE_VECLMTSECTION )== 0)
    {
       if(CurStatus & ISHAVEVECLIM)  
       {
             CurStatus &= ~ISHAVEVECLIM;
             CurStatus &= ~ISSAVEGETVECLIM;
		     SaveWorkingState();                         // save the working state when go in the road or road section without vector limitation
       }
       
       if(CurStatus & ISFINDVECLIMITZ)
       {
             CurStatus &= ~ISFINDVECLIMITZ;
             
             if(!(CurStatus & ISDELOVERSPEED))
             {
                CurStatus &= ~ISSETOVERSPEED;
                CurStatus |= ISDELOVERSPEED;
                VTPosParaClear();
                VTPosStop();
             }
       }
         
       return FALSE;
    }
    else
    {
        if(!(CurStatus & ISSAVEGETVECLIM))
  	    {
	         CurStatus |= ISSAVEGETVECLIM;
		     SaveWorkingState();                         // save the working state when go in the road or road section with vector limitation
		}
        
        if(!(CurStatus & ISHAVEVECLIM))
        {
             CurStatus |= ISHAVEVECLIM;
        }
          
        ReadRecFromFlash(OFT_VECLIMSEC,Roadattri.veclimrd,sizeof(OFFSET_STRUCT),(INT8U*)&oft_veclmtzone);
        pos = oft_veclmtzone.pos;
	    nums = oft_veclmtzone.nums; 
        ReadRecFromFlash(DATA_VECLIMSEC,pos,sizeof(VECLMTZONE_STR),(INT8U*)&veclimtedzone);
               
    }
    
    for( i=0;i<nums;i++)
    {
    
        if(CurStatus & ISFINDVECLIMITZ)
        {
            break;
        }

        if (veclimtedzone.zonetype == TYPE_LATITUDE )
        {
             if(CmpString(Gpsdata.latitude, veclimtedzone.zone.downorleft, 4)==STR_GREAT)
		     {
		         if(CmpString(Gpsdata.latitude,veclimtedzone.zone.uporright, 4)==STR_LESS)
			     {
			         if(!(CurStatus & ISFINDVECLIMITZ))
                     {
                          CurStatus |=ISFINDVECLIMITZ;
                          memcpy((INT8U*)&VecLimtedZone,(INT8U*)&veclimtedzone, sizeof(VECLMTZONE_STR));
#if DEBUG_ELECDOG >0         
                             PrintFromUART(1,"\nVecLimtedZone:");
                             SendFromUART_MEM_HEX(1,(INT8U*)&VecLimtedZone,10);
#endif
                          return TRUE;
                     }   
			     }
             }
 
        }
        else if (veclimtedzone.zonetype == TYPE_LONGTITUDE)
        {
             if(CmpString(Gpsdata.longitude, veclimtedzone.zone.downorleft, 4)==STR_GREAT)
		     {
		           if(CmpString(Gpsdata.longitude,veclimtedzone.zone.uporright, 4)==STR_LESS)
			       {
			            if(!(CurStatus & ISFINDVECLIMITZ))
                        {
                             CurStatus |=ISFINDVECLIMITZ;
                             memcpy((INT8U*)&VecLimtedZone,(INT8U*)&veclimtedzone, sizeof(VECLMTZONE_STR));
#if DEBUG_ELECDOG >0         
                             PrintFromUART(1,"\nVecLimtedZone:");
                             SendFromUART_MEM_HEX(1,(INT8U*)&VecLimtedZone,10);
#endif    
				             return TRUE;
                        }   
			       }
             }
       }
   
       ReadRecFromFlash(DATA_VECLIMSEC,++pos,sizeof(VECLMTZONE_STR),(INT8U*)&veclimtedzone);
   }
    
   if(CurStatus & ISFINDVECLIMITZ)
   {
        if (VecLimtedZone.zonetype == TYPE_LATITUDE )
        {
             if(CmpString(Gpsdata.latitude, VecLimtedZone.zone.downorleft, 4)==STR_LESS)
             {
                 CurStatus &= ~ISFINDVECLIMITZ;
                 CurStatus &= ~ISSAVEGETVECLIM;
                 		        
             }
             if(CmpString(Gpsdata.latitude,VecLimtedZone.zone.uporright, 4)==STR_GREAT)
             {
                 CurStatus &= ~ISFINDVECLIMITZ;
                 CurStatus &= ~ISSAVEGETVECLIM;
             }
        }
        else if ( VecLimtedZone.zonetype == TYPE_LONGTITUDE )
        {
             if(CmpString(Gpsdata.longitude, VecLimtedZone.zone.downorleft, 4)==STR_LESS)
             {
                 CurStatus &= ~ISFINDVECLIMITZ;
                 CurStatus &= ~ISSAVEGETVECLIM;
             }
             if(CmpString(Gpsdata.longitude,VecLimtedZone.zone.uporright, 4)==STR_GREAT)
             {
                 CurStatus &= ~ISFINDVECLIMITZ;
                 CurStatus &= ~ISSAVEGETVECLIM;
             }
            
        }
  }

  if(CurStatus & ISFINDVECLIMITZ)
  {
      if (!(CurStatus & ISSETOVERSPEED))
      {
          CurStatus &= ~ISDELOVERSPEED;
          CurStatus |= ISSETOVERSPEED;
          temp = VecLimtedZone.vector;
          temp = (temp *100) /185;
		  Vecconv = (INT8U)temp;
#if DEBUG_ELECDOG >0         
                PrintFromUART(1,"Vecconv:");
                SendFromUART_HEX(1,Vecconv);
#endif
          VTPosParaSet(&Vecconv);
          VTPosStart();
       }
  }
  else
  {
      if(!(CurStatus & ISDELOVERSPEED))
      {
          CurStatus &= ~ISSETOVERSPEED;
          CurStatus |= ISDELOVERSPEED;
          VTPosParaClear();
          VTPosStop();
          
      }
  }
   
  return  FALSE; 
}

/*
********************************************************************************
*                  SEARCH ALARMER OBJECT AS RADAR SORT
********************************************************************************
*/

BOOLEAN  SearchRadarSort(INT16U alarmlen, INT16U *distance)
{
     INT16U          i;
     INT32U          flag;
     INT16U          pos;
	 INT16U          nums;
     INT16U          dircs;
     INT32U          length_32;
     OFFSET_STRUCT   oft_radarsort;
#if DEBUG_WITHOUTRADAR >0
     return FALSE;
#endif       
     switch(alarmlen)
     {
        case A_RDR_D1000:
        flag = ISGETRDR1000;
        break;
        case A_RDR_D500:
        flag = ISGETRDR500;
        break;
        case A_RDR_D200:
        flag = ISGETRDR200;
        break;
        case A_RDR_D100:
        flag = ISGETRDR100;
        break;
        default:
        break;

      }
      
      if (( Roadattri.attribute & HAVE_RADAR_SORT)== 0)
	  {
	       return FALSE;
	  }
	  else
	  {
	       CurRroadID = Roadattri.veclimrd;
 	  }
 	  
      
      ReadRecFromFlash(OFT_RADARSORT,CurRroadID,4,(INT8U*)&oft_radarsort);
	  pos  = oft_radarsort.pos;
	  nums = oft_radarsort.nums;
      
	  ReadRecFromFlash(DATA_RADARSORT,pos,sizeof(D_ALARMEROBJ_STR),(INT8U*)&radardata);

	 for( i = 0; i<nums; i++)
	 {
	    if(CurStatus & flag)
		{
		      break;
		}
        
        length_32 = CalculateGpsSpace(Gpsdata.latitude, Gpsdata.longitude,radardata.posidata.latitude, radardata.posidata.longitude);
	    
        if(length_32 < alarmlen)
  	    {
             if (!(CurStatus & flag))
			 {
				 dircs = (Gpsdata.direction -1)*3;

                if((dircs >= (radardata.direction-20)) && (dircs <= (radardata.direction+20)))
                { 
                     CurStatus |= flag;
                     memcpy((INT8U*)&RadarData,(INT8U*)&radardata, sizeof(D_ALARMEROBJ_STR));
                     *distance = (INT16U)length_32;
					 return TRUE;
                }
			 }
 
		}

        ReadRecFromFlash(DATA_RADARSORT,++pos,sizeof(D_ALARMEROBJ_STR),(INT8U*)&radardata);

        
	 }
     
	 if (CurStatus & flag)
	 {

⌨️ 快捷键说明

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