MTK-call history operate(2)

2023-10-07 00:19
文章标签 call history mtk operate

本文主要是介绍MTK-call history operate(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2008-05-24 | MTK-call history operate(2)

[通话记录]的菜单操作 初始化函数:InitCallLogs() and InitInitCallHistory().

1.未接电话

2.已拨电话

3.已接电话

4.删除通话记录

       1.未接电话

       2.已拨电话 

       3.已接电话

       4.全部删除

5.通话时间

       1.上次通话时间

       2.已拨电话总计

       3.已接电话总计

       4.所有计时归零

6.短信计数器

       1.已发送

       2.已接收

7.GPRS计数器

       1.上次传送

       2.上次接收

       3.全部传送

       4.全部接收

       5计数器归零

 

3种call log的操作大致相同的,这里基本上以拨出电话来学习。注意未接电话一些额外操作

[已拨电话]

HighlightCHISTDialedCalls()

       #ifdef __MMI_CH_MIXED_CALL_LOG__

          chis_p->isMixedStyle = FALSE;

       #endif

 

ReqReadDialedNumByKey()

       ReqReadDialedNumByKey_ext()

              if (chis_p->isCallLogReady == TRUE && chis_p->isFirstTime == FALSE)    不是初始化

              {

                     ReqReadDialedNum();

             chis_p->isReqSent = TRUE;

              }

              else

              {

                     SHOW “Processing……”

              }

 

ReqReadDialedNum()

       #ifndef __MMI_CH_MIXED_CALL_LOG__

          chis_p->dialedCalls = (LOG_CALL*) chis_p->callsLog;

       #endif

       发送读取消息:PRT_MMI_PHB_GET_LAST_NUMBER_REQ

       SetProtocolEventHandler(RspReadDialedNum, PRT_MMI_PHB_GET_LAST_NUMBER_RSP);

 

RspReadDialedNum()

       抽取所有的dialed call log到chis_p->dialedCalls中,实际上存储位置在chis_p->callsLog[]中。

       chis_p->nDialedCalls反映当前dialed call log counters

       此时,chis_p->ifFirstTime = FALSE

       chis_p->isReqSent = FALSE;  

    EntryCHISTViewDialedCallList();   进入call list

              RegisterHighlightHandler(CHISTGetCurrDialedCallIndex);         高亮响应,主要是设置chis_p->currDialedCallIndex

              CHISTPopulateDialedCallList(phoneNumbers, phoneNames);    获取要信息的item以及pop信息

              ShowCategory53Screen()

 

              SetKeyHandler(CHISTCallDialedNum, KEY_SEND, KEY_EVENT_DOWN);                               拨号

              SetKeyHandler(EntryCHISTViewDialedCall, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);      某个call log的详细信息

       SetLeftSoftkeyFunction(EntryCHISTViewDialedCall, KEY_EVENT_UP);

 

按下左软件,进入一个dialed call log的详细信息

日期

时间

姓名(可能没有)

号码

几次

通话时间(可能没有)

EntryCHISTViewDialedCall()

       for (i = 0; i < MAX_SUB_MENUS; i++)

    {

        subMenuDataPtrs[i] = subMenuData[i];                                    所有要显示的信息都被拷贝到这里

        memset((S8*)subMenuDataPtrs[i], 0, MAX_SUB_MENU_SIZE);

    }

       把日期,时间,姓名号码,次数,通话时间信息都拷贝到 subMenuDataPtrs[]指针数组中。

       ShowCategory84Screen()

 

       SetKeyHandler(CHISTCallDialedNum, KEY_SEND, KEY_EVENT_DOWN);

       SetKeyHandler(EntryCHISTDialedListOptions, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);

   SetLeftSoftkeyFunction(EntryCHISTDialedListOptions, KEY_EVENT_UP);

 

 

进入[已接电话][未接电话]列表的过程大致相同。 注意的是在读取未接电话之后,进入missed call list:

EntryCHISTViewMissedCallList()

       if (chis_p->nMissedCallBeforeView != 0)

          chis_p->nMissedCallBeforeView = 0;

              g_chist_have_missed_call = 0;

          mmi_chist_set_have_missed_call();

          HideStatusIcon(STATUS_ICON_MISSED_CALL);

              UpdateStatusIcons();

 

在SHOW一个call log的详细信息之后,左软件是进入[选项]。3中类型的call log的选项响应函数虽不相同,但是里面的操作几乎一样。

共6个菜单:删除,保存,拨号,编辑,发送短信,发送彩信。

[删除]

HighlightCHISTDeleteDialedNum()

       EntryCHISTDeleteDialedCallConfirm( )   确认删除?

              DisplayConfirm()

              SetLeftSoftkeyFunction(CHISTDeleteDialedNum, KEY_EVENT_UP);

 

按下左软件,确认删除:

void CHISTDeleteDialedNum(void)

{

    ReqDeleteCallLog(PHB_LND, chis_p->currDialedCallIndex, 1);

              SetProtocolEventHandler(RspDeleteDialedNum, PRT_MMI_PHB_DEL_LAST_NUMBER_RSP);

              发送删除消息:PRT_MMI_PHB_DEL_LAST_NUMBER_REQ

 

    return;

}

 

L4返回消息:PRT_MMI_PHB_DEL_LAST_NUMBER_RSP,进入:

RspDeleteDialedNum()

       把被删除的call log之后的所有call log前移一个位置。

       chis_p->nDialedCalls --;

       此时如果已拨电话的call log全部被删除了,就回到[通话记录]screen,如果还存在dialed call log,就回到已拨电话的call log list SCREEN:SCR8055_CALLS_LIST_DIALED。这个函数        的entry函数是:ReaReadDialedNum( )。也就是重新从NVRAM中读取dialed call log,然后进入dialed call log list。

 

[保存]

HighlightCHISTSaveDialedNum()

       CHISTSaveDialedNum()

              chis_p->curCallLogType = PHB_LND;

              SaveNumberFromIdleScrn( (S8*) chis_p->dialedCalls[chis_p->currDialedCallIndex].number, MMI_PHB_ENTER_FROM_CALL_LOG);

                     判断号码的长度,当前电话簿是否准备好。

                     g_phb_cntx.set_done_flag = 1;

             pfnUnicodeStrcpy(pbNumber, number);

            memset(pbEmailAddress, 0, ENCODING_LENGTH);

             g_phb_enter_from = enter;

             mmi_phb_clear_old_history();    //Deletes old PHB screens from history if Phonebook is re-entered thru some other application

                                                                      //g_phb_cntx.start_scr_id = g_phb_cntx.end_scr_id = 0;

             mmi_phb_op_add_pre_entry();

                            mmi_phb_entry_op_add_choose_storage()      //选择存储位置

                            。。。

                            保存到电话簿之后,要把姓名同步到call log中。

                            ReqUpdateCallLogName(PhoneBook[store_index].alpha_id.name_length, PhoneBook[store_index].alpha_id.name_dcs, PhoneBook[store_index].alpha_id.name);

                                   LOG_CALL *record;        //定义一个LOG_CALL指针

                                   record = &chis_p->dialedCalls[chis_p->currDialedCallIndex];    //指向当前被保存的call log

                                   把传过来的参数中姓名信息加入到record中。

                                   发送SET消息到L4:PRT_MMI_PHB_SET_LAST_NUMBER_REQ;

                                   SetProtocolEventHandler(RspUpdateCallLogName, PRT_MMI_PHB_SET_LAST_NUMBER_RSP);

//小结:相当于重新保存了一个call log。之前的这个call logNVRAM中,是没有姓名的,这次保存的是有姓名的,号码相同。 发送保存消息到L4之后,由于号码相同,L4会更新之前保存的那个call log,也就是加上姓名。此时,在MMI中使用的call logchis_p->dialedCalls中的信息也已经更新了,因为上面的record是指针。因此保存成功后,返回到call log list option以及call log list时,可以看到已经有姓名了。

 

L4返回消息:PRT_MMI_PHB_SET_LAST_NUMBER_RSP,进入CBack:

RspUpdateCallLogName()

       DisplayPopup()      //提示保存成功

 

 

[拨号]

HighlightCHISTCallDialedNum()

       CHISTCallDialedNum()

              addToHistory = 0;

              chis_p->dialFromCallLog = ITEM_DIALED_CALL;

              MakeCall((S8*) chis_p->dialedCalls[chis_p->currDialedCallIndex].number);

 

[编辑]

HighlightCHISTEditDialedNum()

       CHISTEditDialedNum()

              pfnUnicodeStrcpy(

            g_idle_context.DialPadCallBuffer, (S8*) chis_p->dialedCalls[chis_p->currDialedCallIndex].number); g_idle_context.LongPressEnable = 1;

               IdleScreenDigitHandler();

 

[发送短信]

HighlightCHISTSendSMSDialedNum()

       CHISTSendSMSDialedNum()

              mmi_msg_set_phb_send_case(MMI_SEND_SMS_FROM_PHB);

              获取call log中的姓名和号码

              mmi_msg_get_number_from_phb((U8*)name, (U8*)number);

 

[发送彩信]

HighlightCHISTSendMMSDialedNum()

       CHISTSendMMSDialedNum()

              获取号码

              mms_address_insert_hdlr((char*)number);

 

 

[删除通话记录]初始化函数:InitCallsReset()

HighlightCHISTDeleteAllDialed()

       chis_p->isDeleteAll = FALSE;          不是删除所有

        if (chis_p->nDialedCalls != 0)

    {

        ChangeLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);

        SetLeftSoftkeyFunction(EntryCHISTDeleteAllDialedConfirm, KEY_EVENT_UP);

    }

    else       没有拨出电话log

    {

       ChangeLeftSoftkey(0, 0);

             SetLeftSoftkeyFunction(NULL,KEY_EVENT_UP);

    }

 

EntryCHISTDeleteAllDialedConfirm()       询问是否删除?

       DisplayConfirm()

 

DeleteAllDialedCalls()   //确定删除

       与删除一个call log的唯一区别是:发送消息中的index不同。这里index = 0xff,删除一个call log时,index = currDialedCallIndex。

       发送的消息:PRT_MMI_PHB_DEL_LAST_NUMBER_REQ

       SetProtocolEventHandler(RspDeleteAllDialedNum, PRT_MMI_PHB_DEL_LAST_NUMBER_RSP);

 

L4返回消息:   PRT_MMI_PHB_DEL_LAST_NUMBER_RSP,进入CBACK:

RspDeleteAllDialedNum( )

       chis_p->nDialedCalls = 0;

 

       if (chis_p->isDeleteAll == TRUE)

    {

        if (chis_p->nMissedCalls != 0)

        {

            DeleteAllMissedCalls();

            return;

        }

        else if (chis_p->nRecvdCalls != 0)

        {

            DeleteAllRecdCalls();

            return;

        }

        chis_p->isDeleteAll = FALSE;

    }

 

       DisplayPopup()

 

删除[未接电话][已接电话]的处理过程大致相同。

 

[全部删除]:删除过程是[已拨电话]—>[未接电话]à[已接电话]。

HighlightCHISTDeleteAllLogs()

       chis_p->isDeleteAll = TRUE;   

       DeleteAllDialedCalls()

 

       RspDeleteAllDialedNum()

 

       DeleteAllMissedCalls()

 

       RspDeleteAllMissedNum()

 


       DeleteAllRecdCalls()

 


       RspDeleteAllRecvdNum()

       删除的过程与读取call log的机制有点类似。

 

 

[通话时间]

进入[通话时间]菜单:

EntryCHISTCallTime()

       //首先读取通话时间

       ReadRecord(NVRAM_EF_CALL_TIME_LID, 1, (void*)&chis_p->last_call_time, sizeof(MYTIME), &error);

    ReadRecord(NVRAM_EF_CALL_TIME_LID, 2, (void*)&chis_p->total_out_time, sizeof(MYTIME), &error);

    ReadRecord(NVRAM_EF_CALL_TIME_LID, 3, (void*)&chis_p->total_in_time, sizeof(MYTIME), &error);

       ShowCategory52Screen()

 

3个菜单:[上次通话时间[已拨电话总计][已接电话总结]都没有操作,仅仅是显示POP信息。

 

[所有计时归零]

HighlightCHISTResetAllTime()

       if (CHISTNeedToResetTimes() == 0)             //判断是否需要reset。

    {

        ChangeLeftSoftkey(0, 0);

        SetLeftSoftkeyFunction(NULL, KEY_EVENT_UP);

    }

    else

       {

              ChangeLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);

              SetLeftSoftkeyFunction(EntryCHISTResetAllTimeConfirm, KEY_EVENT_UP);

       }

 

CHISTResetAllTime()   //确定删除所有的call log

       memset(&chis_p->last_call_time, 0, sizeof(MYTIME));

       memset(&chis_p->last_out_time, 0, sizeof(MYTIME));

       memset(&chis_p->last_in_time, 0, sizeof(MYTIME));

 

       //写入NVRAM

       WriteRecord(NVRAM_EF_CALL_TIME_LID, 1, (void*)&chis_p->last_call_time, sizeof(MYTIME), &error);

    WriteRecord(NVRAM_EF_CALL_TIME_LID, 2, (void*)&chis_p->total_out_time, sizeof(MYTIME), &error);

    WriteRecord(NVRAM_EF_CALL_TIME_LID, 3, (void*)&chis_p->total_in_time, sizeof(MYTIME), &error);

 

       DisplayPopup()

 

[短信计数器]

在初始化时,InitSMSCounter(),call InitNvramSMSCounters()从NVRAM中读取发送和接收的短信数目:

ReadValue(NVRAM_SMSCOUNTERS_SENT_SHORT, &chis_p->nSendSMSCount, DS_SHORT, &error);

ReadValue(NVRAM_SMSCOUNTERS_RECD_SHORT, &chis_p->nRecvSMSCount, DS_SHORT, &error);

这篇关于MTK-call history operate(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154842

相关文章

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

AutoGen Function Call 函数调用解析(一)

目录 一、AutoGen Function Call 1.1 register_for_llm 注册调用 1.2 register_for_execution 注册执行 1.3 三种注册方法 1.3.1 函数定义和注册分开 1.3.2 定义函数时注册 1.3.3  register_function 函数注册 二、实例 本文主要对 AutoGen Function Call

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二

MTK平台AndroidP/Q快速生成dtb.img和dtbo.img(2秒生成)

背景: MTK升级新的Android版本后,无法快速编译dtbo image,当我们修改DWS和PROJECT DTS后验证问题非常麻烦,必须删除out下KERNEL_OBJ才能生成新的dtbo.img,而且必须整编。 所以跟据编译流程,写了下面这个脚本,可以快速生成dtbo和dtb image,可以几秒钟完成 使用方法: (1)将脚本放在工程跟目录 (2)修改脚本开头的几个变量,改为你

MTK AndroidP/Q快速打包ramdisk

一、Android P/Q ramdisk与老版本的差异 Android老版本的ramdisk是out下的root/ramdisk打包而来,里面包含了init  /sbin  init.rc   default.prop等文件。是一个完整的ramdisk Android新版本ramdisk分为了out 下的ramdisk目录和root目录,init ,init.rc等文件大部分都放到了syst

Android P/Q MTK平台无依赖打包boot.img

背景:        有时排查版本问题,需要用到替换img的方式来查找问题出现在哪个img,若出现在bootimg,那到底是kernel、DTB 还是ramdisk。此时就需要单独替换其中一个的方式来打包,之前直接make bootimage-nodeps就可以了,但现在发现执行这个命令无效了。下面就分析下新版本如何找到正确的打包命令。 一、找到编译boot的命令 之前Android编译lo

安卓开发板_联发科MTK开发评估套件串口调试

串口调试 如果正在进行lk(little kernel ) 或内核开发,USB 串口适配器( USB 转串口 TTL 适配器的简称)对于检查系统启动日志非常有用,特别是在没有图形桌面显示的情况下。 1.选购适配器 常用的许多 USB 转串口的适配器,按芯片来分,有以下几种: CH340PL2303CP2104FT232 一般来说,采用 CH340 芯片的适配器,性能比较稳定,价

Python __call__ 用法 作用

当一个对象为可被调用对象时,callable(object)返回为True,否则为False: Python中的对象有可被调用和不可被调用之分。 def func_test():print("func_test run")class class_test():def __init__(self):pass# func_test is callable return Trueprint("fu

history命令内容格式优化:添加日期时间及IP地址

目录 一、历史记录格式1.1操作步骤1.2其他说明 二、历史记录问题2.1记录显示不全2.2定时自动记录 一、历史记录格式 1.1操作步骤 [可选步骤]清空当前历史记录:history -c && > ~/.bash_history && history -r 编辑对应的配置文件: 用户配置文件:vim ~/.bashrc系统配置文件[推荐]:sudo vim /etc

Vue 项目hash和history模式打包部署与服务器配置

你好,我是沐爸,欢迎点赞、收藏、评论和关注。 在开发 Vue 项目时,Vue Router 提供了两种模式来创建单页面应用(SPA)的 URL:hash 模式和 history 模式。 简单说下两者的主要区别: hash 模式下的 URL 看起来不那么美观,带有一个 # 符号。在这种模式下,URL 中的 hash 值(# 后面的部分)会改变,但页面不会重新加载。因为不会向服务器发送请求,服