📄 intpos.c
字号:
/***************************
* IntPos.c ZTL *
***************************/
#define INTPOS_GLOBALS
#include "includes.h"
#include "Tools.h"
#include "Public.h"
#include "Monitor.H"
#include "Position.h"
#include "IntPos.h"
#include "Printer.h"
#include "TimePos.h"
#include "VtPos.h"
#include "RangePos.h"
#include "TimeTask.h"
#define INTPOS_DEBUG 0
static MONITORENTRY_STRUCT IntPosMTEntry;
static TMR_TSK *IntPosCheckTmrID;
#define IntPosCheckPeriod SECOND,5
static INT8U IntAddMontor;
void ReceiveSms(void);
static void IntPosCheckTmr(void)
{
INT8U i;
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"IntPosCheckTmr!");
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&IntPosPara,sizeof(IntPosPara));
#endif
if (RelParaHead.Status==OPEN){
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"RelParaHead Status==OPEN");
#endif
for(i=0;i<RelParaHead.Number;i++){
if(relation[i].INT!=0x70){
if (RelCheckAll(i)){
if(IntAddMontor!=OPEN)INTPosStart();
return ;
}
}
}
if(IntAddMontor==OPEN)INTPosStop();
}
}
void INTPosInit(void)
{
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"INTPosInit data");
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&IntPosPara,sizeof(IntPosPara));
#endif
if(((IntPosPara.Status!=OPEN)&&(IntPosPara.Status!=CLOSE))
||(!PubParaValid(INTPARA_)))
INTPosParaClear();
if(IntPosPara.Status==OPEN) INTPosStart();
IntPosCheckTmrID=CreateTimer(IntPosCheckTmr,0);
StartTmr(IntPosCheckTmrID,IntPosCheckPeriod);
}
INT8U INTPosParaSet(INT8U *ParaSetPtr)
{
#if INTPOS_DEBUG
//SendFromUART_STR(1,(INT8U *)"INTPosParaSet");
#endif
IntPosPara.Status=OPEN;
IntPosPara.ServiceType=*ParaSetPtr;
IntPosPara.Period[0]=*(ParaSetPtr+1);
IntPosPara.Period[1]=*(ParaSetPtr+2);
IntPosPara.FixedSpace[0]=*(ParaSetPtr+3);
IntPosPara.FixedSpace[1]=*(ParaSetPtr+4);
if((IntPosPara.ServiceType&0x07)>_DIFGPS) return ERR;
switch(IntPosPara.ServiceType&0x18)
{
case _TIMING :if(IsZero(IntPosPara.Period,sizeof(IntPosPara.Period))) return ERR;
break;
case _FIXEDSPACE :if(IsZero(IntPosPara.FixedSpace,sizeof(IntPosPara.FixedSpace))) return ERR;
break;
case _TIMING_OR_FIXEDSPACE :if(IsZero(IntPosPara.Period,sizeof(IntPosPara.Period))||IsZero(IntPosPara.FixedSpace,sizeof(IntPosPara.FixedSpace))) return ERR;
break;
default :return ERR;
}
IntPosPara.EmptyFlag=UNEMPTY;
VirStorePubPara(INTPARA_);
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"INTPosParaSet data:");
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&IntPosPara,sizeof(IntPosPara));
#endif
return 5;
}
void INTPosParaClear(void)
{
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"INTPosParaClear");
#endif
ClearPubPara(INTPARA_);
IntPosPara.EmptyFlag=EMPTY;
INTPosStop();
}
BOOLEAN RelCheckAll(INT8U Node)
{
INT8U CheckTemp;
CheckTemp=relation[Node].time;
if ((relation[Node].time!=0x70)&&(!CheckTime(CheckTemp)))return FALSE;
if ((relation[Node].vector!=0x70)&&(!CheckVector(Node)))return FALSE;
CheckTemp=relation[Node].range;
if ((relation[Node].range!=0x70)&&(!CheckRange(CheckTemp)))return FALSE;
return TRUE;
}
void INTPosStart(void)
{
INT8U i,Result;
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"INTPosStart");
SendFromUART_HEX(1,IntPosPara.EmptyFlag);
SendFromUART_HEX(1,PubParaValid(POSITIONTEL_));
SendFromUART_HEX(1,CanMonitor());
#endif
IntPosPara.Status=OPEN;
if((!PubParaValid(POSITIONTEL_))||(!CanMonitor())) return;
if (RelParaHead.Status==OPEN){
for(i=0;i<RelParaHead.Number;i++){
if(relation[i].INT!=0x70){
if (RelCheckAll(i))goto RelSend;
}else{
goto RelSend;
}
}
return;
}
RelSend:
IntAddMontor=OPEN;
IntPosMTEntry.servicetype=IntPosPara.ServiceType;
IntPosMTEntry.egcode=EgCode.egcode;
IntPosMTEntry.monitortime=0;
IntPosMTEntry.periodtime=IntPosPara.Period[1] | 0x40 +(IntPosPara.Period[0]<<8);
if(IntPosMTEntry.periodtime == 0x0040)IntPosMTEntry.periodtime=0xFF40;
IntPosMTEntry.fixedspace=(IntPosPara.FixedSpace[1] + (IntPosPara.FixedSpace[0]<<8)) | 0x8000;
IntPosMTEntry.mttellen=PositionTel.Len;
IntPosMTEntry.mttel=PositionTel.Tel;
Result=AddPositionMonitor(&IntPosMTEntry);
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"AddPositionMonitor periodtime");
SendFromUART_MEM_HEX(1,(INT8U *)&IntPosMTEntry.periodtime,2);
SendFromUART_MEM_HEX(1,(INT8U *)&IntPosMTEntry.fixedspace,2);
#endif
}
void INTPosStop(void)
{
INT8U Result;
#if INTPOS_DEBUG
SendFromUART_STR(1,(INT8U *)"INTPosStop");
SendFromUART_HEX(1,IntPosPara.Status);
#endif
IntAddMontor=CLOSE;
IntPosMTEntry.mttellen=PositionTel.Len;
IntPosMTEntry.mttel=PositionTel.Tel;
Result=DelPositionMonitor(&IntPosMTEntry);
#if INTPOS_DEBUG
//SendFromUART_STR(1,(INT8U *)"DelPositionMonitor:");
//SendFromUART_HEX(1,Result);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -