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

📄 searchalarmerobj.c

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

     return FALSE;
   
}

/*
********************************************************************************
*                  SEARCH OTHER ELECEYE 
********************************************************************************
*/
BOOLEAN SearchOtherElecEyes(void)
{
     INT8U i;
     INT16U nums;
   
     if(!ImageFlashValid(_OBJECTDOT_ELECEYESECTOR))
     {
        return FALSE;
     }
     
     ReadDotFromFlash(_OBJECTDOT_ELECEYESECTOR,0,0,(INT8U*)&nums);
     
     for(i=0;i<nums;i++)
     {
        if(CurStatus & ISGETELECEYE)
		{
		      break;
		}

        ReadDotFromFlash(_OBJECTDOT_ELECEYESECTOR,i,sizeof(ALARMEROBJ_STR),(INT8U*)&othereyedata);
        
        
	    if(CalculateGpsSpace(Datum_gps.latitude, Datum_gps.longitude,othereyedata.posidata.latitude, othereyedata.posidata.longitude)< A_ELECEYE_D)
  	    {
             if ( !(CurStatus & ISGETELECEYE))
			 {
				   CurStatus |= ISGETELECEYE;
                   memcpy((INT8U*)&OtherEyeData,(INT8U*)&othereyedata, sizeof(ALARMEROBJ_STR));
				   return TRUE;
			 }
 
		} 
     }
     
     if (CurStatus & ISGETELECEYE)
     {
          if(CalculateGpsSpace(Datum_gps.latitude, Datum_gps.longitude,OtherEyeData.posidata.latitude, OtherEyeData.posidata.longitude)>= A_ELECEYE_D)
          {
              CurStatus &= ~ISGETELECEYE;
          }
     }
     
     return FALSE;
}


/*
********************************************************************************
*                  SEARCH OTHER RADAR
********************************************************************************
*/
BOOLEAN SearchOtherRadars(INT16U alarmlen, INT16U *distance)
{
      INT8U i;
      INT16U nums;
      INT32U  flag;
      INT32U length_32;
      INT16U dircs;

      
      if(!ImageFlashValid(_OBJECTDOT_RADARSECTOR))
      {
         return FALSE;
      }

      ReadDotFromFlash(_OBJECTDOT_RADARSECTOR,0,0,(INT8U*)&nums);
     
      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;

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

        ReadDotFromFlash(_OBJECTDOT_RADARSECTOR,i,sizeof(D_ALARMEROBJ_STR),(INT8U*)&otherradar);
       
        length_32 = CalculateGpsSpace(Datum_gps.latitude, Datum_gps.longitude,otherradar.posidata.latitude, otherradar.posidata.longitude);
	    
        if(length_32 < alarmlen)
  	    {
             if (!(CurStatus & flag))
			 {
				dircs = (Datum_gps.direction -1)*3;

                if(dircs >= (otherradar.direction-20) && dircs <= (otherradar.direction+20))
                { 
                     CurStatus |= flag;
                     
					 memcpy((INT8U*)&OtherRadar,(INT8U*)&otherradar, sizeof(D_ALARMEROBJ_STR));
                     *distance = (INT16U)length_32;
					 return TRUE;
                }
			 }
 
		}
     }
     
     if (CurStatus & flag)
	 {
	     if ( CalculateGpsSpace(Datum_gps.latitude, Datum_gps.longitude, OtherRadar.posidata.latitude, OtherRadar.posidata.longitude)>= alarmlen)
   	     {
		     CurStatus &= ~flag;
              			 
 		 }
	 }

          return FALSE;

}
/*
********************************************************************************
*                 MAIN SEARCH PROCEDURE
********************************************************************************
*/
static void MainSearchProc(void)
{
      
     
      if (GpsDataValid())
      {
          if(!LedParaSet)
          {
             LedParaSet = TRUE;
             InstallPermnentPort(LEDPARA_GPSVALID);
          }
      }
      
      if (!GpsDataValid())
      {
          if(LedParaSet)
          {
             LedParaSet = FALSE;
             RemovePermnentPort(PORT_LEDGREEN);
          }
      }
      
      StartTmr(MainSearchTmr, MainSearchPeriod);
 
#if DEBUG_UARTno_DEBUG <=1
      GetSimuData(&Gpsdata);
#else
      if(!GpsDataValid())
      {
         return;
      }
       
      GetDatumData(&Gpsdata);
#endif 

#if DEBUG_ELECDOG >0         
         PrintFromUART(1,"\n行使数据:");
         SendFromUART_MEM_HEX(1,(INT8U*)&Gpsdata,11);
#endif

      if(SearchCrossingDot(&CrossingDot))
      {
           GetRoadAttri(&Roadattri);
			 
		   OSQPost(AlmTaskMsgQue, MSG_ELECDOG_CROSSDOTFOUND, Roadattri.roadindex, 0);
      }
        
      ClearWatchdog();
         
      if(Roadattri.attribute == HAVE_LANE)
      {
           if(!(CurStatus & ISSAVELANE))
           {
                CurStatus |= ISSAVELANE;
                SaveWorkingState();
           }
           
           if(!(CurStatus & ISHAVELANE))
           {
                CurStatus |= ISHAVELANE;
           }
           
           OSQPost(AlmTaskMsgQue, MSG_ELECDOG_LANEFOUND, 0, 0);
   
      }
      else
      {
           if(CurStatus & ISHAVELANE)
           {
               CurStatus &= ~ISHAVELANE;
               SaveWorkingState();
           }
      }

	  if(SearchElecEyeSort())
      {        
           if(AlarmerObject.type == ELECEYE_SORT)
		   {
			        OSQPost(AlmTaskMsgQue, MSG_ELECDOG_ELECEYEFOUND, 0, 0);
		   }
		   else
           {
                if(!(CurStatus & ISFINDVECLIMITZ))   //  在限速路段之外发现限速牌才报警
                {
                    OSQPost(AlmTaskMsgQue, MSG_ELECDOG_VECLIMPOST, AlarmerObject.type, 0);
                }
           }
			  
	  }

      ClearWatchdog();
      
          
	  if(FindVecLimitedZone())
	  {
		    OSQPost(AlmTaskMsgQue, MSG_ELECDOG_SECTIONVECLIM, VecLimtedZone.vector, 0);
	  }
   
      if(SearchRadarSort(A_RDR_D1000,&Distance))      
	  {
		    JudgeMSGType(&MSGType);
            OSQPost(AlmTaskMsgQue, MSGType, Distance, 0);
	  }
         
      if(CurStatus & ISGETRDR1000)
      {
            if(SearchRadarSort(A_RDR_D500,&Distance))  
            {
                JudgeMSGType(&MSGType);
                OSQPost(AlmTaskMsgQue, MSGType, Distance, 0);
            }
      }
         
      if(CurStatus & ISGETRDR500)
      {
            if(SearchRadarSort(A_RDR_D200,&Distance)) 
            {
                JudgeMSGType(&MSGType);
                OSQPost(AlmTaskMsgQue, MSGType, Distance, 0);
            }
      }

      if(CurStatus & ISGETRDR200)
      {
           if(SearchRadarSort(A_RDR_D100,&Distance)) 
           {
                 JudgeMSGType(&MSGType);
                 OSQPost(AlmTaskMsgQue, MSGType, Distance, 0);    
           }
         
      }
    
     if( CurStatus & (ISGETELECEYE | ISFINDVECLIMITZ | ISGETRDR1000 | ISGETRDR500 | ISGETRDR200 | ISGETRDR100))
     {
            InstallPermnentPort(LEDPARA_ALARM);
     }
     else
     {
            InstallPermnentPort(LEDPARA_WORKSTATE1);
     }
      
}

/*
********************************************************************************
*                 ASSISTANT SEARCH PROCEDURE
********************************************************************************
*/
static void AssiSearchProc(void)
{
      
     
     if(!GpsDataValid())
     {
         return;
     }
      
      StartTmr(AssiSearchTmr, AssiSearchPeriod); 
      
      GetDatumData(&Datum_gps);
      
      if(SearchElecEyeSort())
      {
           OSQPost(AlmTaskMsgQue, MSG_ELECDOG_ELECEYEFOUND, 0, 0); 
      }
       
      if(SearchRadarSort(A_RDR_D1000,&Distance))      
	  {
		        
           OSQPost(AlmTaskMsgQue, MSG_ELECDOG_RADARFOUND, Distance, 0);
	  }
         
      if(CurStatus & ISGETRDR1000)
      {
          if(SearchRadarSort(A_RDR_D500,&Distance))  
          {
                OSQPost(AlmTaskMsgQue, MSG_ELECDOG_RADARFOUND, Distance, 0);
          }
      }
         
      if(CurStatus & ISGETRDR500)
      {
           if(SearchRadarSort(A_RDR_D200,&Distance)) 
           {
                OSQPost(AlmTaskMsgQue, MSG_ELECDOG_RADARFOUND, Distance, 0);
           }
      }

      if(CurStatus & ISGETRDR200)
      {
           if(SearchRadarSort(A_RDR_D100,&Distance)) 
           {
                OSQPost(AlmTaskMsgQue, MSG_ELECDOG_RADARFOUND, Distance, 0);
           }
         
      }
      
     if( CurStatus & (ISGETELECEYE | ISGETRDR1000 | ISGETRDR500 | ISGETRDR200 | ISGETRDR100))
     {
            InstallPermnentPort(LEDPARA_ALARM);
     }
     else
     {
            InstallPermnentPort(LEDPARA_WORKSTATE1);
     } 
}

/*
********************************************************************************
*                 INITIALIZATION OF SEARCH 
********************************************************************************
*/

void   SearchAlarmerObjInit(void)
{
     
      if ( ((RoadAttiPara.Rdatti.attribute & HAVE_VECLMTSECTION )!=0) || ((RoadAttiPara.Rdatti.attribute & HAVE_LANE )!=0))
       {
	        
	        ResumeWorkingState();
       }
       else
       {
            CurStatus = 0;
         
       }
   
      
      LedParaSet = FALSE;
      
      MainSearchTmr = CreateTimer(MainSearchProc, 0);
      StartTmr(MainSearchTmr, MainSearchPeriod);
      
      AssiSearchTmr = CreateTimer(AssiSearchProc, 0);
      StartTmr(AssiSearchTmr, AssiSearchPeriod); 
}







⌨️ 快捷键说明

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