📄 searchalarmerobj.c
字号:
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 + -