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

📄 powerup.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/*
******************************************************************
*                  XIAMEN YAXON NETWORK CO.LTD.  
*                   XINXI BUILDING,HULI,XIAMEN
*      (c) Copyright 2002,XIAMEN YAXON NETWORK CO.LTD. ,XIAMEN
*                     All Rights Reserved
*
* FileName     :  PowerUp.C
* Programmer(s):  WuJingYu
* Description  :  
******************************************************************
*/

/*
*****************************************************************
*                  REVISION HISTORY
*                 
* Date:    2002-11-12
*****************************************************************
*/ 

#define  POWERUP_GLOBALS
#include "includes.h" 
#include "TimeTask.h"
#include "Lcd.h"
#include "Tools.H"
#include "stdio.h"
#include "structs.H"
#include "Infield.h"
#include "_Keyboard.h"
#include "systime.h"
#include "uartdrv.h"
#include "Hardware.h"
#include "public.h"
#include "test.h"
#include "zprint.h"
#include "GpsSer.h"
#define  DEBUG_CYB   0
/*
********************************************************************************************
注意:按键接收的初始化在本模块中完成;
********************************************************************************************
*/
//#define  LINK_CONNECT//定义用来开机侦测链接
#define  connectlifetime  30

static INT8U WEEKS[][]={"周 日","周 一","周 二","周 三","周 四","周 五","周 六"};
static INT8U Connceting[]  = {"正在连接GPS!"};
static INT8U ConnectSucc[] = {"成功连接GPS!"};
static INT8U ConnectFail[] = {"GPS 连接失败!"};

static GPOUT     networkgpout  = {2,134,16,24,1,1,2,2,BORDER_NONE,SCROLLBAR_NONE};
static GPOUT     hostlinkgpout = {2,30,16,24,1,1,2,2,BORDER_NONE,SCROLLBAR_NONE};
static GPOUT     messagegpout  = {2,3,16,24,1,1,2,2,BORDER_NONE,SCROLLBAR_NONE};
static GPOUT     logogpout     = {27,10,64,64,1,1,2,2,BORDER_2D,SCROLLBAR_NONE};

static OUTBOX    dateoutbox    = {25,100,2,6,2,BORDER_NONE,SCROLLBAR_NONE};
static OUTBOX    timeoutbox    = {60,100,1,5,3,BORDER_NONE,SCROLLBAR_NONE};
static OUTBOX    weekoutbox    = {80,100,1,6,2,BORDER_NONE,SCROLLBAR_NONE};
static BEELINE   DetachLine    = {20,0,20,159,LINE_DASHED};

static TMR_TSK   *UpdateMainFormTmr,*IconFlashTmr,*PowerUpTmr,*MonitorConnectTmr;
static PHOTOBOX  HostLinkPhoto,NetWorkPhoto,MessagePhoto,LogoPhoto; 
static TEXTBOX   DateBox,TimeBox,WeekBox;
static INT8U     datetext[12],timetext[5];
static FORMPAGE  *mainformpage;
static INT8U     statecnt;
static INT8U     LogedIcon[] = {0x18,0x6E,0x4E,0x8F,0x8F,0x4E,0x6E,0x18};
static INT8U     GPSvalidIcon[] = { 0x18,0x76,0x72,0xF1,0xF1,0x72,0x76,0x18};
static INT8U     ALLGETIcon[] = {0x18,0x7E,0x7E,0xFF,0xFF,0x7E,0x7E,0x18};
static PHOTOBOX  GETIconPhoto;
static GPOUT     GETIcongpout = {7,120,8,8,1,1,2,2, BORDER_NONE,SCROLLBAR_NONE};
static INT8U tempcnt = 0;//for NCK
static INT8U  _COUNT = 0;
//static INT8U  RECOUNT = 0;
static INT8U  LogedCount = 0;
//static INT8U  ValidCount = 0;  
static INT8U  Unnormaltime = 0;
static BOOLEAN Unnormal;
static void MonitorConnectFunc(void)
{
     SetHostLinkState(OFF);
     SetDummyHostLinkState(OFF);
}

static void IconFlashFunc(void)
{ 
     if (GetFormPageDepth() == 0) {
        statecnt++;
        if (GetHostLinkState() == OFF) {
           if (statecnt % 2) { 
              RefreshPhotoBox(&HostLinkPhoto);
           } else {
              ClearPhotoBox(&HostLinkPhoto);
           }
        } else {
           ClearPhotoBox(&HostLinkPhoto);
        }          
        if (HaveNotAccessedMessage() == TRUE) {//有未访问信息
           if (!(statecnt % 2)) { 
              RefreshPhotoBox(&MessagePhoto);
           } else {
              ClearPhotoBox(&MessagePhoto);
           }   
        } else {
           ClearPhotoBox(&MessagePhoto);
        }    
        ShowNetWorkIcon();
        ShowLogedFlag();      
     }    
}
    
static void DplySysTime(void)
{
     ASCII_DATE AsciiSysDate;
     ASCII_TIME AsciiSysTime;
     INT8U week;
     
     ClaimForSysTime();
     GetAsciiDate(&AsciiSysDate); 
     GetAsciiTime(&AsciiSysTime);
     week = GetWeekDay();
     memset(datetext,' ',sizeof(datetext));
     memcpy(&datetext[0],AsciiSysDate.ac_year,4);//y 1
     memcpy(&datetext[6],AsciiSysDate.ac_month,2);
     datetext[8] = '/';
     memcpy(&datetext[9],AsciiSysDate.ac_day,2);
     memcpy(timetext,AsciiSysTime.ac_hour,2);
     timetext[2] = ':';
     memcpy(&timetext[3],AsciiSysTime.ac_minute,2);
     /*
     Printu("ac_minute\n");      
     Printu("%x  ",timetext[3]);
     Printu("%x  ",timetext[4]);
     */
     AddTextBoxText(&DateBox,datetext,sizeof(datetext));
     AddTextBoxText(&TimeBox,timetext,sizeof(timetext));
     AddTextBoxText(&WeekBox,WEEKS[week],5);
}

static void UpdateDplyTimeFunc(void)//刷新待机界面
{
     
     DplySysTime();
     if (GetFormPageDepth() == 0) {
        RefreshTextBox(&DateBox);
        RefreshTextBox(&TimeBox);
        RefreshTextBox(&WeekBox);
	RefreshPhotoBox(&LogoPhoto);
     }
}

static void MainFormInitFunc(void)
{
     HostLinkPhoto.gpout = &hostlinkgpout;
     HostLinkPhoto.gpdata= HostLinkIcon;
     NetWorkPhoto.gpout  = &networkgpout;
     NetWorkPhoto.gpdata = NetWorkIcon[4];
     MessagePhoto.gpout  = &messagegpout;
     MessagePhoto.gpdata = MessageIcon;
     
     GETIconPhoto.gpout = &GETIcongpout;
     
     LogoPhoto.gpout = &logogpout;
     LogoPhoto.gpdata = LogoIcon;
     
     DateBox.box = &dateoutbox;
     TimeBox.box = &timeoutbox;
     WeekBox.box = &weekoutbox;
     DplySysTime();
     RemoveTmr(PowerUpTmr);
     UpdateMainFormTmr = CreateTimer(UpdateDplyTimeFunc,0);
     IconFlashTmr = CreateTimer(IconFlashFunc,0);
     MonitorConnectTmr = CreateTimer(MonitorConnectFunc,0);
     StartTmr(UpdateMainFormTmr,SECOND,5);
     StartTmr(IconFlashTmr,SECOND,1);
     StartTmr(MonitorConnectTmr,SECOND,32);
     tempcnt = 0;
}

/*static INT8U TestFlame[] = {0x01,0x42,0x03,0x05,0x12,0x06,0x20,0x19};
static void testfunc(void)//broadcast
{
     OSQPost(LcdTaskQ,0x83,(INT32U)TestFlame,sizeof(TestFlame));//for test
}
static INT8U TestFlame1[] = {0x7F,0x40,0x03,0x05,0x12,0x06,0x21,0x19};
static void testfunc1(void)//attemper
{
     OSQPost(LcdTaskQ,0x87,(INT32U)TestFlame1,sizeof(TestFlame1));//for test
}
static INT8U TestFlame2[] = {0x0e,0xc6,0x1a,0x1b,0x1c,0x1d,0x02,0x33,0x05,0x21,0xbc,0xb8,0xb0,0xd9};
static void testfunc2(void)//attemper
{
     OSQPost(LcdTaskQ,0x70,(INT32U)TestFlame2,sizeof(TestFlame2));//for test
}
static INT8U TestFlame[] = {0x0d,0x4b,0x11,0x12,0x13,0x14,0x00,0x33,0x04,0x31,0x32,0x33,0x34};
static void testfunc(void)//broadcast
{
     OSQPost(LcdTaskQ,0x70,(INT32U)TestFlame,sizeof(TestFlame));//for test
}*/
static void MainFormHdlKeyFunc(void)
{
     INT8U key,firstkey;
     key = GetCurLcdKey();
     if (key == KEY_XING) {
        firstkey = '*';
     } else if (key == KEY_JING) {
        firstkey = '#';
     } else {
        firstkey = key + '0';
     }
     switch (key) {
        case KEY_ACK:
           CreateMainMenu();
           break;
        case KEY_REDAIL:
           CreateSpecifiedPubPage(RECORDPAGE);
           break;  
        case KEY_CLR:
           CreateSpecifiedPubPage(TELBOOKPAGE);
           break;
        case KEY_UP:
           CreateSpecifiedPubPage(OPERATIONPAGE);	   //  cybero 06.07.25
	   	      
           break;
        case KEY_DOWN:
           //CreateSpecifiedPubPage(EVENTPAGE);
	   //testfunc2();
	   CreateSoftDialPage();

           break;         
        /*case KEY_NCK:
	   testfunc2();
	   break;*/
       // case KEY_MEDICAL:
	  // testaddtel();
	//   break;
	
	case KEY_TRAFFIC:
	     DailAtemptel();
	     break;
        case KEY_MEDICAL:
	     ActivateEuninstall();
	     break;
	case KEY_BORTHER:
	     SendHelp_2(key-0x14);
	     break;
        default:
           if (IsInRange(key,KEY_0,KEY_JING)) {
              InitDigitalInputPage(&firstkey,1,DialInDigitalInputPage);
              CreateDigitalInputPage();
           }
           break;   
     }     
}

static void MainFormCreateFunc(void)
{ 
     ShowHostLinkIcon();
     ShowNetWorkIcon();
     ShowMessageIcon();
     ShowLogedFlag();
     RefreshPhotoBox(&LogoPhoto);
}
    
static void MainFormSusPendFunc(void)
{
     StopTmr(IconFlashTmr);
    // StopTmr(UpdateMainFormTmr);
}

static void MainFormResumeFunc(void)
{
     StartTmr(IconFlashTmr,SECOND,1);
     UpdateDplyTimeFunc();
     LcdUpdate_dots(20,0,1,160);
     tempcnt = 0;
}
void PowerOffDestroy(void)
{
     StopTmr(UpdateMainFormTmr);
     StopTmr(IconFlashTmr);
     StopTmr(MonitorConnectTmr);
}
void PowerupFunc(void)
{
     SetHostLinkState(OFF);
     //ClaimForSysTime();
     StartTmr(UpdateMainFormTmr,SECOND,5);
     StartTmr(MonitorConnectTmr,SECOND,32);
     MainFormResumeFunc();

     ShortMsgRing(SUCCESSTYPE);
}
void CreateMainForm(void)
{
     mainformpage = AllocateFormPage();
     AddControlToFormPage(mainformpage,CTL_TEXTBOX, (void*)&DateBox);
     AddControlToFormPage(mainformpage,CTL_TEXTBOX, (void*)&TimeBox);
     AddControlToFormPage(mainformpage,CTL_TEXTBOX, (void*)&WeekBox);
     AddControlToFormPage(mainformpage,CTL_BEELINE, (void*)&DetachLine);
          
     mainformpage->initfunc    = MainFormInitFunc;
     mainformpage->createfunc  = MainFormCreateFunc;
     mainformpage->hdlkeyfunc  = MainFormHdlKeyFunc;
     mainformpage->resumefunc  = MainFormResumeFunc;
     CreateFormPage();
     
     InitKeyBoard();
    
}


void RefreshMainForm(void)
{
     UpdateDplyTimeFunc();
}
    

BOOLEAN HaveNotAccessedMessage(void)
{
     if (HaveNotAccessedUniMsg(BROADMSG) || HaveNotAccessedUniMsg(ATMPMSG)
         || HaveNotAccessedUniMsg(RECVSMS) || HaveNotAccessedTelRecord(HANGUPPHONE)) {
        return TRUE;
     } else return FALSE;   
}

void ShowHostLinkIcon(void)
{
     if (GetFormPageDepth() == 0) {
        if (GetHostLinkState() == OFF) {
           RefreshPhotoBox(&HostLinkPhoto);
        } else {
           ClearPhotoBox(&HostLinkPhoto);
        }  
     }       
}
    
    
void ShowNetWorkIcon(void)//信号强度图标
{
     if (GetFormPageDepth() == 0) {
        if (GetGsmNetIntension() == 0) {
           ClearPhotoBox(&NetWorkPhoto);
         } else if(GetGsmNetIntension() <= 5) {
           NetWorkPhoto.gpdata = NetWorkIcon[GetGsmNetIntension()-1];
           RefreshPhotoBox(&NetWorkPhoto);
        } else {
           ClearPhotoBox(&HostLinkPhoto);
        }
     }
}
    
void ShowMessageIcon(void)//显示"新事件"图标
{
     if (GetFormPageDepth() == 0) {		   
        if (HaveNotAccessedMessage() == TRUE) {
           RefreshPhotoBox(&MessagePhoto);
        } else {
           ClearPhotoBox(&MessagePhoto);
        }      
     }
}

void ShowLogedFlag(void)
{
     
    
    if (GetFormPageDepth() == 0) 
    { 
       if(TCPDrvLoged() && GpsDataValid())
       {
           
           GETIconPhoto.gpdata = ALLGETIcon;
           RefreshPhotoBox(&GETIconPhoto); 
       }
       else if ( TCPDrvLoged())
       {
          
           GETIconPhoto.gpdata =  LogedIcon;
	   RefreshPhotoBox(&GETIconPhoto);
       }
       else if ( GpsDataValid())
       {
           GETIconPhoto.gpdata = GPSvalidIcon;
	   RefreshPhotoBox(&GETIconPhoto);
       }
       else
       {
           ClearPhotoBox(&GETIconPhoto);
       }
    }

   if( !TCPDrvLoged())
   {
       Unnormal = TRUE; 
   }
   else
   {
       Unnormal = FALSE; 
   }

   if( TCPDrvLoged())
   {
       if ( Unnormal == TRUE) 
       { 
           LogedCount++;
       }
   } 

   
   if (TCPDrvLoged() && GpsDataValid())
   {
       _COUNT++;
     
      Unnormaltime =0;
      
      if ( _COUNT == 255) _COUNT =2;
      
      if ( _COUNT == 1)
      {
           StartupMonitor();
      } 
   }
   

   if (	!TCPDrvLoged()  )
   {
      
       Unnormaltime++;

       if (Unnormaltime>180)
       {
	   ResetCPU();
       }

       if ( LogedCount >10 )
       {
           ResetCPU(); 
       }
   }
   
         


}


void ActivatePowerUpPage(void)//开机任务
{
     InitLcd();
     CreateMainForm(); 

}
		     

⌨️ 快捷键说明

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