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