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

📄 intpos.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 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 + -