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

📄 mainwin.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  MainWin.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#include "includes.h"
#include "tools.h"
#include "structs.h"
#include "message.h"
#include "systime.h"
#include "timetask.h"
#include "at_core.h"
#include "public.h"
#include "db_sm.h"
#include "winstack.h"
#include "keyboard.h"
#include "hstctl.h"
#include "screen.h"
#include "prompt.h"
#include "itemmenu.h"
#include "editor.h"
#include "succor.h"
#include "telbook.h"
#include "callman.h"
#include "shortmsg.h"
#include "setgprs.h"
#include "sysset.h"
#include "virphone.h"
#include "handset.h"
#include "mainwin.h"
#if EN_HSTSMON > 0
#include "HstSmon.h" //电召菜单
#endif
#include "Parachk.h" //参数状态查询
#include "DownTimes.h"

#if EN_HANDSET > 0

/*
********************************************************************************
*                  DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define PERIOD_WAIT                             SECOND, 5
#define SIZE_TELEDITBUF                         20


/*
********************************************************************************
*                  DEFINE MODULE VIRIANTS
********************************************************************************
*/
static BOOLEAN    KBIsLocked, WaitKEY_Star;
static TMR_TSK    *waittmr;
static KEY_STRUCT curkey;

static INT8U   asciitime[] = {"18:00:00"};
static INT8U   asciidate[] = {"2003.01.01"};

static INT8U   TelEditBuf[SIZE_TELEDITBUF];

/*
********************************************************************************
*                  DEFINE MAINWIN MENU
********************************************************************************
*/
#if EN_HSTSMON > 0
#define ITEMS                                   8 
#else
#define ITEMS                                   7 
#endif

static ITEMMENU_STRUCT *MENU_MAIN_CHILD[]   = {&MENU_TELBOOK,
                                               &MENU_SHORTMSG,
                                               &MENU_CALLMAN,
#if EN_HSTSMON > 0
                                               &MENU_GUESTSMON,//电召菜单
#endif
                                               &MENU_SETGPRS,
                                               
                                               &MENU_SYSSET,
                                               &MENU_PARACHK,	//参数状态查询
                                               &MENU_DOWNTIMES
                                              };
static ITEMMENU_STRUCT MENU_MAIN            = {ITEM_FMENU, 0, 0, ITEMS, MENU_MAIN_CHILD};



static void DisplayScreen(void)
{
    DATE_STRUCT date;
    TIME_STRUCT time;

    GetSysTime_Date(&date);
    GetSysTime_Time(&time);

    FormatYear(asciidate, date.year, date.month, date.day);
    FormatTime(asciitime, time.hour, time.minute, time.second);
    VTL_ClearScreen();
    if (!SIMCardInserted()) {
        VTL_ScreenPrintStr("  请插SIM卡\n");
    } else {
        VTL_ScreenPrintChar(' ', 3);
        VTL_ScreenPrintMem(asciitime, sizeof(asciitime) - 1 - 3);
        VTL_ScreenPrint('\n');
    }

    if (KBIsLocked) {
        VTL_ScreenPrintStr("  按#*开锁");
    } else if (SIMCardInserted()) {
        if (!(SysTimeValid() && !SysDateValid())) {
            VTL_ScreenPrint(' ');
            VTL_ScreenPrintMem(asciidate, sizeof(asciidate) - 1);
        }
    }
    OverWriteScreen();
}

static void SuspendProc(void)
{
    if (HstCfg.EnableKeyPrompt) {
        TurnonKeyPrompt();
    } else {
        TurnoffKeyPrompt();
    }
}

static void ResumeProc(void)
{
    OSQPost(HandsetMsgQue, MSG_HANDSET_SIGNAL, 0, 0);

    if (HaveUnReadSMRec())
        TurnonSMIndicator();
    else
        TurnoffSMIndicator();
    if (!PromptReadMissTel()) {
        DisplayScreen();
        if (KBIsLocked) TurnoffKeyPrompt();
        else TurnonKeyPrompt();
        if (!HstCfg.EnableKeyPrompt)
            TurnoffKeyPrompt();
    }
}

static void InitProc(void)
{
    InitHstIndicator();
    ResumeProc();
}

static void Handler_KEY_ACK(void)
{
    ActivateDialTalkRec();
}

static void Handler_KEY_FCN(void)
{
    ActivateItemMenu(&MENU_MAIN);
}

static void Handler_KEY_UP(void)
{
    ActivateReadShorMsgMenu();
}

static void Handler_KEY_DOWN(void)
{
    ListTB();
}

static void Handler_KEY_SUCCOR(void)
{
    if (curkey.attrib & ATTR_REHIT) {
        if (curkey.key == KEY_MEDICAL)
            StartSuccor(SUCCOR_MEDICAL);
        else if (curkey.key == KEY_TROUBLE)
            StartSuccor(SUCCOR_TROUBLE);
        else if (curkey.key == KEY_INFORM)
            StartSuccor(SUCCOR_INFORMATION);
    }
}

static void ExitTelEditor(void)
{
    INT8U len;

    if ((len = GetEditorData(TelEditBuf)) > 0)
        ActivateVirPhone_Dial(TRUE, len, TelEditBuf);
}

static EDITOR_STRUCT EditorEntry =
{EDT_REVERSE | EDT_DIGITAL | EDT_PULS, 0, sizeof(TelEditBuf), 0, 0, 1, TelEditBuf, 0, ExitTelEditor, 0, 0, 0, 0, 0};

static void Handler_KEY_DIGITAL(void)
{
    TelEditBuf[0] = curkey.key;
    CreateEditor(&EditorEntry);
}

static FUNCENTRY_STRUCT Handler_Key_entry[] = {
                                                KEY_FCN,                        Handler_KEY_FCN,
                                                KEY_ACK,                        Handler_KEY_ACK,
                                                KEY_UP,                         Handler_KEY_UP,
                                                KEY_DOWN,                       Handler_KEY_DOWN,
                                                KEY_MEDICAL,                    Handler_KEY_SUCCOR,
                                                KEY_TROUBLE,                    Handler_KEY_SUCCOR,
                                                KEY_INFORM,                     Handler_KEY_SUCCOR
                                              };


static void HdlKeyProc(void)
{
    if (HandsetCurMsg.MsgID == MSG_HANDSET_KEY) {
        GetKeyMsg(&curkey);
        if (WaitKEY_Star) {
            if (curkey.key == '*') {
                KBIsLocked = !KBIsLocked;
                if (KBIsLocked)
                    ActivateStringPrompt("键盘已锁!");
                else
                    ActivateStringPrompt("键盘锁已开!");
                WaitKEY_Star = FALSE;
                return;
            } else if (curkey.attrib == ATTR_CHAR) {
                WaitKEY_Star = FALSE;
            }
        }
        if (curkey.key == '#') {
            WaitKEY_Star = TRUE;
            StartTmr(waittmr, PERIOD_WAIT);
        }
        if (KBIsLocked) return;

        if (!FindProcEntry(curkey.key, Handler_Key_entry, sizeof(Handler_Key_entry)/sizeof(Handler_Key_entry[0]))) {
            if ((curkey.key >= '0' && curkey.key <= '9') ||
            curkey.key == '+' || curkey.key == '*') {
                Handler_KEY_DIGITAL();
            }
        }
    } else if (HandsetCurMsg.MsgID == MSG_HANDSET_MINUTE
    || HandsetCurMsg.MsgID == MSG_HANDSET_SIMCARD) {
        DisplayScreen();
    }
}

static WINSTACKENTRY_STRUCT WinStackEntry = {InitProc, 0, SuspendProc, ResumeProc, HdlKeyProc};

void ActivateMainWin(void)
{
    PushWinStack(&WinStackEntry);
}

static void WaitTmrProc(void)
{
    StopTmr(waittmr);
    WaitKEY_Star = FALSE;
}

void InitMainWin(void)
{
    waittmr      = CreateTimer(WaitTmrProc, 0);
    KBIsLocked   = FALSE;
    WaitKEY_Star = FALSE;
}
#endif

⌨️ 快捷键说明

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