📄 position.c
字号:
/***************************
* Position.c ZTL *
***************************/
#define POSITION_GLOBALS
#include "includes.h"
#include "bsp.h"
#include "Public.h"
#include "Tools.h"
#include "Stream.h"
#include "GpsRecer.h"
#include "Alarmer.h"
#include "Position.h"
#include "IntPos.h"
#include "Vtpos.h"
#include "RangePos.h"
#include "TimePos.h"
#include "StsPos.h"
#include "Monitor.H"
//#include "SysFrame.H"
#include "Printer.h"
#include "gprsdrv.h"
#define POSITION_DEBUG 0
void MontorSram(void);
typedef struct
{
INT8U Mask;
void (*InitProc)(void);
INT8U (*ParaSet)(INT8U *ParaSetPtr);
void (*ParaClear)(void);
void (*PosStart)(void);
void (*PosStop)(void);
}PositionProcStruct;
static PositionProcStruct PositionTCB[MAX_TYPE]=
{
//0x20,INTPosInit,INTPosParaSet,INTPosParaClear,INTPosStart,INTPosStop,
0x10,TimePosInit,TimePosParaSet,TimePosParaClear,TimePosStart,TimePosStop,
0x08,VTPosInit,VTPosParaSet,VTPosParaClear,VTPosStart,VTPosStop,
// 0x04,RangePosInit,RangePosParaSet,RangePosParaClear,RangePosStart,RangePosStop,
// 0x02,STSPosInit,STSPosParaSet,STSPosParaClear,STSPosStart,STSPosStop
};
//static STREAM *wstrm;
static void (*Proc)(void);
void InitPosition(void)
{
INT8U i;
#if POSITION_DEBUG
SendFromUART_STR(1,(INT8U *)"InitPosition");
#endif
for(i=0;i<MAX_TYPE;i++)
{
Proc=PositionTCB[i].InitProc;
if(Proc!=0) (*Proc)();
}
}
#if 0
static void ClearRelation(void)
{
RelParaHead.Number=0;
RelParaHead.Status=CLOSE;
InitBuf((INT8U *)relation,0x70, sizeof(relation));
}
//chenqifu add 0917
BOOLEAN SetRelation(INT8U *PositionSetPtr)
{
INT8U i,NUM;
ClearRelation();
#if POSITION_DEBUG
SendFromUART_STR(1,(INT8U *)"SetRelation");
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&RelParaHead.Status,1);
SendFromUART_STR(1,(INT8U *)"NUM:");
SendFromUART_HEX(1,NUM);
#endif
NUM=*PositionSetPtr++;
if(NUM==0){
StorePubPara(RELATIONHEAD_);
return TRUE;
}
if (NUM>=20) return FALSE;
for(i=0;i<NUM;i++){
if (*PositionSetPtr++!=0x70)relation[i].INT=1;
if (*PositionSetPtr!=0x70)relation[i].time=*PositionSetPtr;
PositionSetPtr++;
if (*PositionSetPtr++!=0x70)relation[i].vector=1;
if (*PositionSetPtr!=0x70)relation[i].range=*PositionSetPtr;
PositionSetPtr++;
}
RelParaHead.Status=OPEN;
RelParaHead.Number=NUM;
#if POSITION_DEBUG
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)relation,sizeof(relation));
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&RelParaHead,sizeof(RELATIONHEAD));
SendFromUART_STR(1,(INT8U *)"IntPosPara after relation set:");
FormatPrintDataBlock(FORMAT_HEX,1,(INT8U *)&IntPosPara,sizeof(IntPosPara));
#endif
StorePubPara(RELATIONHEAD_);
return TRUE;
}
BOOLEAN SetPosition(INT8U *PositionPtr)
{
INT8U i,ClearFlag,SetFlag,Count,CurType,Len;
INT8U (* Ptr)(INT8U *ParaSetPtr);
BOOLEAN Return_Flag=TRUE;
#if POSITION_DEBUG
FormatPrintDataBlock(FORMAT_HEX,1,PositionPtr,64);
// OSSchedLock();
#endif
PositionTel.Len=DecodeTel(PositionTel.Tel,PositionPtr,SYS_TELLEN);
StorePubPara(POSITIONTEL_);
PositionPtr+=SYS_TELLEN;
ClearFlag=*PositionPtr++;
for(i=0;i<MAX_TYPE;i++)
{
if(ClearFlag&PositionTCB[i].Mask)
{
Proc=PositionTCB[i].ParaClear;
if(Proc!=0) (*Proc)();
}
}
SetFlag=*PositionPtr++;
Count=*PositionPtr++;
if (Count==0x7F)Count=0;
for(i=0;i<Count;i++)
{
CurType=(*PositionPtr++)&0x07;
if(CurType>=MAX_TYPE) Return_Flag=FALSE;
else
{
Ptr=PositionTCB[CurType].ParaSet;
if(Ptr!=0) Len=(*Ptr)(PositionPtr);
if(Len!=ERR) PositionPtr+=Len;
else Return_Flag=FALSE;
}
if(!Return_Flag) break;
}
#if POSITION_DEBUG
SendFromUART_STR(1,(INT8U *)"The SetFlag:");
SendFromUART_HEX(1,SetFlag);
#endif
for(i=0;i<MAX_TYPE;i++)
{
if(SetFlag&PositionTCB[i].Mask) Proc=PositionTCB[i].PosStart;
else Proc=PositionTCB[i].PosStop;
if(Proc!=0) (*Proc)();
}
StoreAllPubPara();
return Return_Flag;
}
#endif
//void SendPositionData(INT8U PositionType,INT8U PositionSeq)
//{
// INT8U i, tellen;
// INT16U attrib;
//
// #if POSITION_DEBUG
// SendFromUART_STR(1,(INT8U *)"SendPositionData");
// switch(PositionType)
// {
// case POSITION_INTERVAL:
// SendFromUART_STR(1,(INT8U *)"间隔条件");
// break;
// case POSITION_TIME:
// SendFromUART_STR(1,(INT8U *)"时刻条件");
// break;
// case POSITION_VECTOR:
// SendFromUART_STR(1,(INT8U *)"速度条件");
// break;
// case POSITION_RANGE:
// SendFromUART_STR(1,(INT8U *)"范围条件");
// break;
// case POSITION_STATUS:
// SendFromUART_STR(1,(INT8U *)"状态条件");
// break;
// }
// #endif
// if (PositionType==POSITION_RANGE)goto PositionSend;
// if (RelParaHead.Status==OPEN){
// for(i=0;i<RelParaHead.Number;i++){
// if (RelCheckAll(i))goto PositionSend;
// }
// return;
/// }
//PositionSend:
// wstrm=GetSYSFrameStream();
// ASMSYSFrameHead_MODE2(wstrm,EgCode.egcode,0x0241);
// WriteBYTE_Strm(wstrm,PositionType);
// WriteBYTE_Strm(wstrm,PositionSeq);
// WriteHWORD_Strm(wstrm,GetAlarmType());
// MovStrmPtr(wstrm,QueryPosition(GetStrmPtr(wstrm)));
// if (PubParaValid(POSITIONTEL_)) {
// tellen = PositionTel.Len;
// } else {
// tellen = 0;
// }
// attrib = GetServiceAttrib(SER_POSITION);
// SendSYSFrame_MODE2(wstrm,PositionTel.Tel,tellen,attrib | SM_ATTR_SUCCESS,0);
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -