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

📄 callman.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/****************************************************************
**                                                              *
**  FILE         :  CallMan.C                                   *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/
#include "includes.h"
#include "tools.h"
#include "db_talk.h"
#include "db_tb.h"
#include "screen.h"
#include "prompt.h"
#include "menuwin.h"
#include "itemmenu.h"
#include "virphone.h"
#include "telbook.h"
#include "handset.h"
#include "callman.h"

#if EN_HANDSET > 0



/*
********************************************************************************
*                  DEFINE MODULE VARIANTS
********************************************************************************
*/
static INT8U TalkType, dplybuf[30], dplytime[] = {"共通话:\n  00:00:00\n时间:00:00\n2003.01.01"};
static TALKREC_STRUCT CurRecord;



static void OPREC_DIAL(void)
{
    ActivateVirPhone_Dial(FALSE, CurRecord.tellen, CurRecord.tel);
}

static void OPREC_READ(void)
{
    FormatTime(&dplytime[10], 0, CurRecord.talktime[0], CurRecord.talktime[1]);
    FormatYear(&dplytime[30], CurRecord.date[0], CurRecord.date[1], CurRecord.date[2]);
    FormatTime(dplybuf, CurRecord.time[0], CurRecord.time[1], CurRecord.time[2]);
    memcpy(&dplytime[24], dplybuf, 5);
    if (TalkType == TALK_MISS)
        ActivateStringPrompt_TIME((char *)&dplytime[19], 0);
    else
        ActivateStringPrompt_TIME((char *)dplytime, 0);
}

static void ACK_OP_ERASE(void)
{
    INT16U DelRec;
    
    PopMenuWin();
    DelRec = GetMenuWinRecordNum();
    PopMenuWin();
    ActivateStringPrompt("删除中…");
    DelTalkRecord(TalkType, DelRec);
    ActivateStringPrompt("已删除");
}

static void OPREC_ERASE(void)
{
    ActivateSelPrompt("删除?", 0, ACK_OP_ERASE);
}

static void OPREC_DISPLAY(void)
{
    INT8U len;
    
    len = CurRecord.tellen;
    if (len > 0) {
        memcpy(dplybuf, CurRecord.tel, len);
        dplybuf[len] = '\0';
        ActivateStringPrompt_TIME((char *)dplybuf, 0);
    } else {
        ActivateStringPrompt_TIME("(空白)", 0);
    }
}

static void OPREC_SAVE(void)
{
    SaveToTB(CurRecord.tel, CurRecord.tellen);
}


static ITEMMENU_STRUCT MENU_OPREC_DIAL      = {ITEM_FCN,  "呼出",     OPREC_DIAL,    0, 0};
static ITEMMENU_STRUCT MENU_OPREC_READ      = {ITEM_FCN,  "通话时间", OPREC_READ,    0, 0};
static ITEMMENU_STRUCT MENU_OPREC_ERASE     = {ITEM_FCN,  "删除",     OPREC_ERASE,   0, 0};
static ITEMMENU_STRUCT MENU_OPREC_DISPLAY   = {ITEM_FCN,  "显示号码", OPREC_DISPLAY, 0, 0};
static ITEMMENU_STRUCT MENU_OPREC_SAVE      = {ITEM_FCN,  "存储",     OPREC_SAVE,    0, 0};
static ITEMMENU_STRUCT *MENU_OPREC_CHILD[]  = {&MENU_OPREC_DIAL, &MENU_OPREC_READ, &MENU_OPREC_ERASE, &MENU_OPREC_DISPLAY, &MENU_OPREC_SAVE};
static ITEMMENU_STRUCT MENU_OPREC           = {ITEM_LMENU, 0, 0, 5, MENU_OPREC_CHILD};

static void Handler_KEY_ACK(void)
{
    if (GetTalkRecord(TalkType, GetMenuWinRecordNum(), &CurRecord) == 0) 
        PopMenuWin();
    else 
        ActivateItemMenu(&MENU_OPREC);
}

static INT16U MaxRecordProc(void)
{
    return GetNumTalkRecord(TalkType);
}

static INT16U ReadRecordProc(INT16S numrec, INT8U *ptr)
{
    INT8U screensize, len, templen, dplylen, *dplyptr;
    
    if (numrec == -1) {
        memcpy(ptr, "无通话记录", strlen("无通话记录"));
        return strlen("无通话记录");
    }
    if (GetTalkRecord(TalkType, numrec, &CurRecord) == 0) return 0;
    screensize = GetScreenSize();
    if (TalkType == TALK_MISS) {
        len = strlen("未接");
        memcpy(ptr, "未接", len);
    } else if (TalkType == TALK_DIAL) {
        len = strlen("已拨");
        memcpy(ptr, "已拨", len);
    } else {
        len = strlen("已接");
        memcpy(ptr, "已接", len);
    }
    ptr    += len;
    templen = DecToAscii(ptr, numrec + 1, 0);
    len    += templen;
    ptr    += templen;
    *ptr++  = ':';
    len++;
    
    if (CurRecord.tellen == 0) {
        dplylen = strlen("未知电话");
        dplyptr = (INT8U *)"未知电话";
    } else {
        dplylen = GetTBNameByTel(dplybuf, CurRecord.tellen, CurRecord.tel);
        if (dplylen == 0) {
            dplylen = CurRecord.tellen;
            dplyptr = CurRecord.tel;
        } else {
            dplyptr = dplybuf;
        }
    }
    if (len + dplylen < screensize) {
        templen = screensize - (len + dplylen);
        InitBuf(ptr, ' ', templen);
        len += templen;
        ptr += templen;
    } else {
        *ptr++ = '\n';
        len++;
    }
    memcpy(ptr, dplyptr, dplylen);
    return len + dplylen;
}

static MENUWIN_STRUCT SelMenuWinEntry = 
{WIN_FMENU, Handler_KEY_ACK, 0, 0, 0, 0, MaxRecordProc, 0, ReadRecordProc};

static void SelTalkProc(void)
{
    INT8U index;
    
    index = GetMenuWinRecordNum();
    if (index == 0) 
        TalkType = TALK_MISS;
    else if (index == 1) 
        TalkType = TALK_DIAL;
    else 
        TalkType = TALK_RECV;
    ActivateMenuWin(&SelMenuWinEntry);
}

static void ACK_DelTalkProc(void)
{
    INT8U index;
    
    index = GetMenuWinRecordNum();
    PopMenuWin();
    ActivateStringPrompt("删除中…");
    if (index == 3) {
        DelAllTalkRecord(TALK_DIAL);
        DelAllTalkRecord(TALK_MISS);
        DelAllTalkRecord(TALK_RECV);
    } else if (index == 0) {
        DelAllTalkRecord(TALK_DIAL);
    } else if (index == 1) {
        DelAllTalkRecord(TALK_MISS);
    } else if (index == 2) {
        DelAllTalkRecord(TALK_RECV);
    }
    ActivateStringPrompt("已删除");
}

static void DelTalkProc(void)
{
    ActivateSelPrompt("删除?", 0, ACK_DelTalkProc);
}

static ITEMMENU_STRUCT MENU_ERASE_DIAL       = {ITEM_FCN,  "已拨电话", DelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_ERASE_MISS       = {ITEM_FCN,  "未接电话", DelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_ERASE_RECV       = {ITEM_FCN,  "已接电话", DelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_ERASE_ALL        = {ITEM_FCN,  "所有电话", DelTalkProc, 0, 0};
static ITEMMENU_STRUCT *MENU_ERASE_CHILD[]   = {&MENU_ERASE_DIAL, &MENU_ERASE_MISS, &MENU_ERASE_RECV, &MENU_ERASE_ALL};

static ITEMMENU_STRUCT MENU_MISS             = {ITEM_FCN,   "未接电话", SelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_DIAL             = {ITEM_FCN,   "已拨电话", SelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_RECV             = {ITEM_FCN,   "已接电话", SelTalkProc, 0, 0};
static ITEMMENU_STRUCT MENU_ERASE            = {ITEM_LMENU, "删除",     0,           4, MENU_ERASE_CHILD};
static ITEMMENU_STRUCT *MENU_CALLMAN_CHILD[] = {&MENU_MISS, &MENU_DIAL, &MENU_RECV, &MENU_ERASE};

ITEMMENU_STRUCT MENU_CALLMAN                 = {ITEM_LMENU, "  通话记录", 0, 4, MENU_CALLMAN_CHILD};

void ActivateDialTalkRec(void)
{
    TalkType = TALK_DIAL;
    ActivateMenuWin(&SelMenuWinEntry);
}

static void ListMissTel(void)
{
    TalkType = TALK_MISS;
    ActivateMenuWin(&SelMenuWinEntry);    
}

static void ExitPromptReadMissTel(void)
{
    HstMiss.NumTel = 0;
}

static PROMPT_STRUCT PromptEntry = {PROMPT_ACKINFORM, 0, 0, 0, ListMissTel, ExitPromptReadMissTel};

BOOLEAN PromptReadMissTel(void)
{
    INT8U len;
    
    if (HstMiss.NumTel == 0) return FALSE;
    len  = DecToAscii(dplybuf, HstMiss.NumTel, 0);
    memcpy(&dplybuf[len], "个\n未接电话", strlen("个\n未接电话"));
    len += strlen("个\n未接电话");

    PromptEntry.TextPtr = dplybuf;
    PromptEntry.TextLen = len;
    ActivatePrompt(&PromptEntry);
    return TRUE;
}
#endif

⌨️ 快捷键说明

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