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

📄 addobjdotmanully.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         : AddObjDotManully.c                           *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : Cyb 2006.12.06                                         *
****************************************************************/

#include "includes.h"
#include "errcode.h"
#include "errtask.h"
#include "message.h"
#include "tools.h"
#include "public.h"
#include "gpsrecer.h"
#include "sensor.h"
#include "almtask.h"
#include "alarmer.h"
#include "SearchAlarmerObj.h"
#include "AddObjDotManully.h"
#include "flash.h"

#define   DEBUG_ADDDOT     1
/*
********************************************************************************
*                  DEFINE DOT BUFFER
********************************************************************************
*/
#pragma arm section zidata="DotBuff_PARA"
static  INT8U DotBuff[4096];
#pragma arm section

/*
********************************************************************************
*                  DEFINE GLOBAL VARIABLES
********************************************************************************
*/
static DATUM_STRUCT      GPSdata;
static ALARMEROBJ_STR    EleceyeDot;
static D_ALARMEROBJ_STR  RadarDot;
static INT8U  *ptr;
static BOOLEAN  isAddElecEye;
static BOOLEAN  isAddRadar;


/*
********************************************************************************
*                  COUNT THE NUMS OF OBJECTS DOT IN CERTAIN SECTOR
********************************************************************************
*/
static INT16U  CountObjectDots(INT16U nSector)
{
     INT16U nums;       
     
     ReadDotFromFlash(nSector,0,0,(INT8U*)&nums);

#if  DEBUG_ADDDOT >0
     PrintFromUART(1,"\nnums:");
     SendFromUART_HEX(1,(INT8U)nums);
#endif    
     
     if (nums == 0xFFFF) 
     {
        return 0;
     }
     return  nums;      
}

/*
********************************************************************************
*                  SAVE DOT INTO THE FLASH SECTOR
********************************************************************************
*/
static BOOLEAN SaveDot(INT8U type)
{
     INT8U i;
     INT8U len;
     INT16U total;
     INT16U nSector;
     INT32U offset;
     INT16U *pbuffer;
 
     ptr = DotBuff;

     if ( type == RADAR_SORT)
     {
         nSector = _OBJECTDOT_RADARSECTOR;
         len = sizeof(D_ALARMEROBJ_STR);
     }
     else
     {
         nSector = _OBJECTDOT_ELECEYESECTOR;
         len = sizeof(ALARMEROBJ_STR);
     }
     
         
     total = CountObjectDots(nSector);

#if  DEBUG_ADDDOT >0
     PrintFromUART(1,"\ntotal:");
     SendFromUART_HEX(1,(INT8U)total);
#endif 
     if( total >= 300 )
     {
         return FALSE;
     } 
 
     for(i=0;i<total;i++)
     {
        ReadDotFromFlash(nSector,i,len,ptr);
        ptr += len;
     }
     
     if( type == RADAR_SORT)
     {
        memcpy(&DotBuff[total*len],(INT8U*)&RadarDot,sizeof(D_ALARMEROBJ_STR));
     }
     else
     {
        memcpy(&DotBuff[total*len],(INT8U*)&EleceyeDot,sizeof(ALARMEROBJ_STR)); 
     }
     
	 total += 1;
   
     SectorErase_Flash(nSector);

     offset = SIZE_FLASHID + 2;
     
     pbuffer = (INT16U *)DotBuff;
     
     len /=2;
     
     for(i=0;i<total*len;i++)
     {
        
        HWordProgram_Flash(nSector, offset+i*2, *pbuffer++); 
     }

     offset = SIZE_FLASHID;

     HWordProgram_Flash(nSector, offset, total);
     
     WriteFlashID(nSector);

#if  DEBUG_ADDDOT >0
     ptr = DotBuff;
     len *=2;
     for( i=0;i<total;i++)
     {
         ReadDotFromFlash(nSector,i,len,ptr);
         ptr += len;
     }
	
	 PrintFromUART(1,"\nDotBuff1:");
     SendFromUART_MEM_HEX(1,DotBuff,total*len);
     ptr = ( INT8U *)FlashAbsAddr(nSector, 0);
     memcpy(DotBuff,ptr,255);
     PrintFromUART(1,"\nDotBuff2:");
     SendFromUART_MEM_HEX(1,DotBuff,255);
#endif 
     
     return TRUE;
    
}

/*
********************************************************************************
*                  ADD OBJECT DOT MANNLLY
********************************************************************************
*/
INT8U AddObjectDot(INT8U type)
{
     
     if(!GpsDataValid()) return GPSINVALID;
     
     if (type == RADAR_SORT)
     {
         if (isAddRadar)
         {
             isAddRadar = FALSE;
         }
     }
     else
     {
        if (isAddElecEye)
         {
             isAddElecEye = FALSE;
         }  
     }
         
     GetDatumData(&GPSdata);

     if(type == RADAR_SORT)
     {
           RadarDot.type  = (INT16U) type;
           RadarDot.direction = (GPSdata.direction-1)*3;
           memcpy((INT8U*)&RadarDot.posidata,GPSdata.latitude,8);
     }
     else
     {
           EleceyeDot.type = (INT16U)type;
           memcpy((INT8U*)&EleceyeDot.posidata,GPSdata.latitude,8);
     }
      
     if (!SaveDot(type))
     {
          return OVERFLOW;
     }
     
     return SUCCSESS;
     
      
}

/*
********************************************************************************
*                  BEGIN  ADD OBJECT DOT MANNLLY
********************************************************************************
*/
void BeginAddObjDot(INT8U type)
{
       if ( type == RADAR_SORT)
       {
           if ( isAddRadar == FALSE)
           {
                isAddRadar = TRUE;
           }
       }
       else
       {
           if (isAddElecEye == FALSE)
           {
                isAddElecEye = TRUE; 
           }
       } 
}

/*
********************************************************************************
*                  END  ADD OBJECT DOT MANNLLY
********************************************************************************
*/

void EndAddObjDot(INT8U type)
{
     if ( type == RADAR_SORT)
     {
         if (isAddRadar == TRUE)
         {
             isAddRadar = FALSE;
         }
     }
     else
     {
         if (isAddElecEye == TRUE)
         {
             isAddElecEye = FALSE; 
         } 
     }
}


/*
********************************************************************************
*                  GET ADD STATUS
********************************************************************************
*/

BOOLEAN IsAddRadar(void)
{
      return isAddRadar;
}

BOOLEAN IsAddElecEye(void)
{  
      return isAddElecEye;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -