MTK平台相关资料(8)

2019-06-02 14:03

if(alpha_index) //快捷方式所需要的设置。其他地方如果需要这样处理的可以参考。比如:在gap205的区号查询中。 { register_multitap_no_draw_key_handlers(); set_multitap_functions(mmi_phb_list_alpha_index,mmi_phb_list_alpha_index_input_callback); change_multitap_mode(0); }

小结:在show电话号码列表时,也就是SHOW动态的LIST。过程是:从

g_phb_name_index[]中取出每个entry在PhoneBook[]中的store_index,然后获取PhoneBook[]中的姓名,转载subMenuData[],最后拷贝到MMI_fixed_icontext_menuitems[]中。

MTK-callhistoryinitialize

资源加载过程 InitializeAll() PopulateResData() PopulateCallHistoryRes() AddCallLogApplicationRes(); 未接电话,已拨电话,已接电话。 PopulateResetCallRes(); 删除通话记录 AddSMSCounterApplicationRes(); 短信计数器 PopulateCallTimes(); 通话时间 PopulateCallCost(); 通话cost #ifdef__MMI_GPRS_FEATURES__ AddGPRSCounterApplicationRes();GPRS计数器 #endif

系统初始化过程 InitializeAll() InitCallLogs() SetProtocolEventHandler(ReadyLogIndication,PRT_MMI_PHB_LAST_NUMBER_READY_IND); SetHintHandler(….) 设置MENU的hilite和hint响应。注意:这里只设置了前3个MENU:未接电话,已拨电话,已接电话中,涉及到的MENU的响应。 …

InitCallHistoryContext(); //初始化全局变量 memset((U8*)chis_p,0,sizeof(call_history_context_struct)); 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);

InitAllApplications() InitCallCost(); //设置callcost中MENU的hiliteandhint响应 InitCallHistory(); InitCallsReset(); //[删除通话记录]中MENU的响应 InitSMSCounter(); //[短信计数器]中MENU的响应 InitCallTimes(); //[通话时间]中MENU的响应 InitGPRSCounter(); //[GPRS计数器]中MENU的响应

启动过程:

上电后,当PS的calllog准备好之后,发送消息:

PRT_MMI_PHB_LAST_NUMBER_READY_IND给MMI,进入CBack函数: ReadyLogIndication() chis_p->isCallLogReady=TRUE; chis_p->isFirstTime=TRUE; chis_p->sequenceId=0; mmi_chist_init_get_data_from_nvram();读取

missedcallflag:g_chist_have_missed_call(0—nomissedcall,1—yesmissedcall)。NVRAM_CHIST_HAVE_MISSED_CALL。 if(g_chist_have_missed_call==1) IdleSetStatusIcon(STATUS_ICON_MISSED_CALL); else HideStatusIcon(STATUS_ICON_MISSED_CALL); ReqReadDialedNum(); 开始读取calllogs return;

ReqReadDialedNum() #ifndef__MMI_CH_MIXED_CALL_LOG__ chis_p->dialedCalls=(LOG_CALL*)chis_p->callsLog; //chis_p->callsLog[]是实际存储的位置,即如果不支持mixedcalllog,那么在分别进入3中类型的calllogs #endif //时,获取的calllog都存储在chis_p->callsLog[]中。然后把3个指针

之一指向这里。 设置消息PRT_MMI_PHB_GET_LAST_NUMBER_REQ的一些参数 SetProtocolEventHandler(RspReadDialedNum,PRT_MMI_PHB_GET_LAST_NUMBER_RSP); OslMsgSendExtQueue(&Message);

L4返回消息:PRT_MMI_PHB_GET_LAST_NUMBER_RSP,进入: RspReadDialedNum() rsp=(GET_LAST_NUMBER_RSP*)info; if(chis_p->sequenceId==1) //第一次读取,先清空缓冲区 { chis_p->nDialedCalls=0; memset((PS8)chis_p->dialedCalls,0,sizeof(LOG_CALL)*TOT_SIZE_OF_ONE_LN_LIST); } for(index=0;indexno_list;index++)//抽取信息 { CHISTExtractPSCallLog(&chis_p->dialedCalls[chis_p->nDialedCalls],&rsp->list[index]); { 1.获取姓名在拷贝PS中的姓名到CALLLOG时, 如果是UCS2,注意:PS中存储方式是大端格式,要转换成系统中的小端格式 如果是ASCII码,

AnsiiToUnicodeString((S8*)logCall->pbName,(S8*)phbLastNumber->alpha_id.name); 2.获取号码。PS中保存的号码是ASCII码 if(phbLastNumber->tel.type&0x10) { logCall->number[0]='+'; AnsiiToUnicodeString((PS8)(logCall->number+2),(PS8)phbLastNumber->tel.number); } else { AnsiiToUnicodeString((PS8)logCall->number,(PS8)phbLastNumber->tel.number); } 3.starttime:

ConvertRTC2MYTIME(&logCall->startTime,&phbLastNumber->time); 4.duration:

mmi_dt_utc_sec_2_mytime(phbLastNumber->call_duration,&logCall->duration,MMI_FALSE);

5.counters:logCall->no_of_times=phbLastNumber->count; } chis_p->nDialedCalls++; } if(rsp->more_data&&rsp->no_list==TOT_SIZE_OF_ONE_LN_LIST) 没有读取完,再次读取 { chis_p->sequenceId++; ASSERT(chis_p->sequenceId<11); ReqReadDialedNum(); return; } chis_p->sequenceId=0; 所有dialedcall全部提取完毕 if(chis_p->isFirstTime==TRUE) //表示这是在初始化时第一次读取,需要把所有的dialed,missed,receivedcalllog全部读取出来。 { ReqReadMissedNum(); return; } //如果不是初始化时读取的,就进入这里,即:dialedcalllist chis_p->isReqSent=FALSE; EntryCHISTViewDialedCallList();

此时,由于我们是初始化时第一次读取calllog,因此要一次性读取所有的calllog,进入红色部分的if中去,即继续读取missedcalllog: ReqReadMissedNum() chis_p->missedCalls=(LOG_CALL*)chis_p->callsLog; 共用一个存储空间 消息:PRT_MMI_PHB_GET_LAST_NUMBER_REQ SetProtocolEventHandler(RspReadMissedNum,PRT_MMI_PHB_GET_LAST_NUMBER_RSP); OslMsgSendExtQueue(&Message); return;

PS返回消息PRT_MMI_PHB_GET_LAST_NUMBER_RSP,进入: RspReadMissedNum() if(chis_p->sequenceId==1) 第一匹读取 { chis_p->nMissedCalls=0; memset((PS8)chis_p->missedCalls,0,sizeof(LOG_CALL)*TOT_SIZE_OF_ONE_LN_LIST); } for(index=0;indexno_list;index++)抽取calllog,抽取函数都是相同的

{ CHISTExtractPSCallLog(&chis_p->missedCalls[chis_p->nMissedCalls],&rsp->list[index]); chis_p->nMissedCalls++; } if(rsp->more_data&&rsp->no_list==TOT_SIZE_OF_ONE_LN_LIST) 判断是否读取完毕 { chis_p->sequenceId++; ASSERT(chis_p->sequenceId<11); ReqReadMissedNum(); return; } chis_p->sequenceId=0; 读取完毕 if(chis_p->isFirstTime==TRUE) 如果是初始化的话,继续读取receivedcalllog { ReqReadRecvdNum(); return; } chis_p->isReqSent=FALSE; 如果不是初始化,就进入missedcallloglist EntryCHISTViewMissedCallList();

继续读取receivedcalllog ReqReadRecvdNum() chis_p->recvdCalls=(LOG_CALL*)chis_p->callsLog; 共用一个存储空间 SetProtocolEventHandler(RspReadRecvdNum,PRT_MMI_PHB_GET_LAST_NUMBER_RSP); OslMsgSendExtQueue(&Message); return;

PS返回消息:PRT_MMI_PHB_GET_LAST_NUMBER_RSP,进入: RspReadRecvdNum() if(chis_p->sequenceId==1) 初始化变量 { chis_p->nRecvdCalls=0; memset((PS8)chis_p->recvdCalls,0,sizeof(LOG_CALL)*TOT_SIZE_OF_ONE_LN_LIST); } for(index=0;indexno_list;index++)抽取消息 {


MTK平台相关资料(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如果你还这样,注定是个卢瑟

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: