详细设计说明书通话记录.docx

上传人:b****2 文档编号:18007317 上传时间:2023-08-05 格式:DOCX 页数:20 大小:223.11KB
下载 相关 举报
详细设计说明书通话记录.docx_第1页
第1页 / 共20页
详细设计说明书通话记录.docx_第2页
第2页 / 共20页
详细设计说明书通话记录.docx_第3页
第3页 / 共20页
详细设计说明书通话记录.docx_第4页
第4页 / 共20页
详细设计说明书通话记录.docx_第5页
第5页 / 共20页
详细设计说明书通话记录.docx_第6页
第6页 / 共20页
详细设计说明书通话记录.docx_第7页
第7页 / 共20页
详细设计说明书通话记录.docx_第8页
第8页 / 共20页
详细设计说明书通话记录.docx_第9页
第9页 / 共20页
详细设计说明书通话记录.docx_第10页
第10页 / 共20页
详细设计说明书通话记录.docx_第11页
第11页 / 共20页
详细设计说明书通话记录.docx_第12页
第12页 / 共20页
详细设计说明书通话记录.docx_第13页
第13页 / 共20页
详细设计说明书通话记录.docx_第14页
第14页 / 共20页
详细设计说明书通话记录.docx_第15页
第15页 / 共20页
详细设计说明书通话记录.docx_第16页
第16页 / 共20页
详细设计说明书通话记录.docx_第17页
第17页 / 共20页
详细设计说明书通话记录.docx_第18页
第18页 / 共20页
详细设计说明书通话记录.docx_第19页
第19页 / 共20页
详细设计说明书通话记录.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

详细设计说明书通话记录.docx

《详细设计说明书通话记录.docx》由会员分享,可在线阅读,更多相关《详细设计说明书通话记录.docx(20页珍藏版)》请在冰点文库上搜索。

详细设计说明书通话记录.docx

详细设计说明书通话记录

[通话记录]

详细设计说明书

 

[MTK-M3项目组]

康佳通信科技开发中心软件所

2005年4月26日

 

目录

修改历史3

1整体结构及功能描述:

4

1.1已拨电话:

4

1.2未接电话:

4

1.3已接电话:

5

1.4删除电话记录:

5

1.5通话时间:

5

1.6通话费用:

5

1.7短信计数器:

6

2关键数据结构说明6

3主要存储分配:

8

4各子模块实现及主要算法说明9

4.1初始化9

4.2未接电话10

4.3已接电话和已拨电话:

14

4.4删除通话话记录:

14

4.5通话时间:

15

4.6通话费用:

15

4.7短信计数器:

17

5内部调用的主要函数说明:

18

6模块提供的外部接口函数说明19

7主要信号说明19

8相关文档文件20

修改历史

时间

修改人

版本

修改内容

2005-4-26

余文美

1.0

创建初始版本

 

1整体结构及功能描述:

通话记录模块的设计和其他模块一样,从整体上来说,主要是MMI和协议栈之间通过2个队列MMIQueue和L4Queue来互发消息实现相互之间的通信。

从MMI来看,该模块主要由通话记录,通话费用,通话时间,以及短信计数器几个部分组成,用下图表示为:

其个子模块的功能描述如下:

1.1已拨电话:

在NVRAM中最多可以保存10条最近的已拨电话的记录。

当手机对外进行呼叫的同时,就会向NVRAM写入一条已拨电话的记录。

当已拨电话记录已满的情况下(即已有10条已拨电话的通话记录),新加入的已拨电话记录将覆盖已存在的第一条已拨电话记录。

当手机关机时,会将已拨电话的通话记录复制到SIM卡中,在手机开机后再从SIM卡上读取出来。

每条记录只对应于一个电话号码,当用户拨出的电话号码在已拨电话记录中已经存在时,新的拨号时间将覆盖原来的拨号时间,但拨号的次数加1。

1.2未接电话:

在NVRAM中最多可以保存20条最近的未接电话的记录。

当用户拒绝或者没有接来电时,就会向NVRAM写入一条未接电话的记录。

当未接电话记录已满的情况下(即已有20条未接电话的通话记录),新的未接电话记录将覆盖已存在的第一条未接电话记录。

每条记录只对应于一个电话号码,当来电的电话号码在未接电话记录中已经存在时,新的来电的时间将覆盖原来的来电时间,但未接的次数加1。

1.3已接电话:

在NVRAM中最多可以保存20条最近的已接电话的记录。

当用户接听来电时,就会向NVRAM写入一条已接电话的记录。

当已接电话记录已满的情况下(即已有20条已接电话的通话记录),新的已接电话记录将覆盖已存在的第一条已接电话记录。

每条记录只对应于一个电话号码,当来电的电话号码在已接电话记录中已经存在时,新的来电的时间将覆盖原来的来电时间,但已接的次数加1。

1.4删除电话记录:

删除已接电话,未接电话,已拨电话中的任一电话记录。

1.5通话时间:

通话时间屏幕将显示以下通话时间:

A.上次通话时间:

在弹出的提示内显示上次通话的时间;

B.总共打出电话的时间:

在弹出的提示内显示总共打出的通话时间;(从上次Reset后算起)

C.总共接电话的时间:

在弹出的提示内显示总共接电话的通话时间;(从上次Reset后算起)

D.清空所有的通话时间:

将所有的通话时间清空。

1.6通话费用:

通话费用界面将显示以下通话费用:

A.上次通话费用:

显示上次通话的通话费用;

B.总共通话费用:

显示总共通话的通话费用;(从上次Reset后算起)

C.清空通话费用:

将所有的通话费用清空;

D.最大通话费用:

提示最多允许的通话费用;

E.价格及费率:

将提示价格以及费率。

1.7短信计数器:

短信计数器屏幕将显示已发送和已接受的短信的条数。

当光标选中其中任何一项时,就会弹出数目的提示。

2关键数据结构说明

TOT_SIZE_OF_DIALED_LIST10//已拨电话的记录最大数目

TOT_SIZE_OF_MISSED_LIST20//未接电话的记录最大数目

TOT_SIZE_OF_RECVD_LIST20//已接电话的记录最大数目

CS_NOTIFYDURATION//提示框显示的时间

//保存通话记录的信息

typedefstruct{

U8numType;//电话号码的类型

U8numLength;//电话号码的长度

U8number[(MAX_CC_ADDR_LEN+1)*ENCODING_LENGTH];//号码字串

U8nameLength;//姓名长度

U8nameDCS;//名字的数据编码格式

S8pbName[(MAX_PB_NAME_LENGTH+1)*ENCODING_LENGTH];//姓名字串

MYTIMEstartTime;//通话开始的时间

U16no_of_times;//对同一电话号码未接/已接/已拨通话的次数

}LOG_CALL;

typedefstruct

{

U8curCallLogType;//当前通话记录的类型

U8currDialedCallIndex;//当前已拨电话在已拨电话列表中的index

U8currMissedCallIndex;//当前未接电话在未接电话列表中的index

U8currRecvdCallIndex;//当前已接电话在已接电话列表中的index

U8nDialedCalls;//已拨电话记录的数目

U8nMissedCalls;//未接电话记录的数目

U8nRecvdCalls;//已接电话记录的数目

U8nMissedCallBeforeView;//未读未接电话的数目

U8dialFromCallLog;//用户从通话记录中拨打电话时通话记录的类型

BOOLisFirstTime;//开机后是不是第一次阅读通话记录

BOOLisDeleteAll;//是否要删除所有通话记录

BOOLisCallLogReady;//PS是否准备好被阅读

BOOLsaveMissedScrn;//是否要保存未接电话的界面

LOG_CALL*dialedCalls;//指向已拨电话记录的指针

LOG_CALL*missedCalls;//指向未接电话记录的指针

LOG_CALL*recvdCalls;//指向已接电话记录的指针

LOG_CALLcallsLog[TOT_SIZE_OF_CALLS_LIST];//保存通话记录的数组

U8nSendSMSCount;//已发送的短消息的数目

U8nRecvSMSCount;//已接收短消息的数目

U8currCostIndex;//当前高亮显示的通话费用在费用列表中的index

U16currCostItem;//当前高亮显示的通话菜单

U32lastCallCost;//上次通话费用

U32allCallCost;//所有通话费用

U32maxCallCost;//最大通话费用

U8newMaxCostStr[10*ENCODING_LENGTH];//用户编辑最大通话费用时输入的字符串

doubleppu;//当前的通话费率

U8PPUStr[20*ENCODING_LENGTH];//当前通话费率字符串

U8newPPUStr[20*ENCODING_LENGTH];//用户编辑通话费率时的输入的字符串

U8currencyStr[4*ENCODING_LENGTH];//存储通话价格的数组

U8newCurrencyStr[4*ENCODING_LENGTH];//存储用户编辑通话价格时输入的字符串

MYTIMEtotal_out_time;//总共拨出电话的时间

MYTIMEtotal_in_time;//总共拨进电话的时间

MYTIMElast_call_time;//上次通话时间

}call_history_context_struct;

3主要存储分配:

NVRAM_CALL_TIME_LID

记录的个数:

NVRAM_CALL_TIME_RECORD_TOTAL3

分为

Last_call_time

Total_Sent_time

Total_received_time

记录的大小:

NVRAM_CALL_TIME_RECORD_SIZE8

typedefstruct

{

kal_uint8call_time[NVRAM_CALL_TIME_RECORD_SIZE];

}nvram_call_time_struct;

NVRAM_SMSCOUNTERS_SENT

记录的个数:

1

记录的大小:

1

NVRAM_SMSCOUNTERS_RECD

记录的个数:

1

记录的大小:

1

4各子模块实现及主要算法说明

4.1初始化

进入此模块主要分为两个步骤:

首先是在系统启动时初始化,然后再从主菜单选择进入。

系统初始化阶段,调用函数InitializeAll,在这个函数中对通话记录模块进行了初始化,即调用InitCallLogs函数,在该函数中首先注册协议栈消息的相应函数SetProtocolEventHandler(ReadyLogIndication,PRT_MMI_PHB_LAST_NUMBER_READY_IND);当系统检测到通话记录模块已经准备就绪后,PS/L4便会向MMIQueue写入PRT_MMI_PHB_LAST_NUMBER_READY_IND的消息,当MMItask读取到该消息后,就调用函数ReadyLogIndication来完成一系列的检测和初始化工作。

这一阶段完成了大部分的工作。

用图表说明如下:

菜单的入口在CallHistoryMain.c中,里面的InitCallHistory包含了其他几个模块的初始化函数,它也是在系统启动时的InitializeAll中执行的。

在函数EntryScrCallHistoryMainMenu中,显示菜单,并且相应的菜单响应都已经注册好了。

4.2未接电话

下面主要介绍查询未接电话记录的流程,主要的流程用流程图可以描述如下:

现详细描述实现此功能的具体流程:

在初始化时函数InitCallLogs注册未接电话的菜单高亮显示事件。

HighlightCHISTMissedCalls();当高亮显示此菜单时运行此函数。

此函数里注册了一些响应键盘消息的函数,在这里我们只关注按左软键进入的函数ReqReadDailNumByKey()。

该函数主要是根据first_time和callLogready来判断是否能进入查询流程,如果能进入查询流程,则进入函数ReqReadMissedNum()。

ReqReadMissedNum()函数首先建立一个GET_LAST_NUMBER_REQ类型的指针,并给它分配相应大小的内存,然后把PHB_LNM赋给该指针结构中的type,表示查询的是未接电话。

把建好的指针赋给消息的数据指针。

再对消息结构中的其他成员赋相应的值后,消息就建好了。

建立好消息后向NS/L4Queue发送查询消息PRT_MMI_PHB_GET_LAST_NUMBER_REQ,并且注册得到查询结果后的处理函数RspReadMissedNum()。

当CALL_LOG_RESULT_OK时,RspReadMissedNum()函数将未接电话的查询结果一个个读出来,并通过函数CHISTExtractPSCallLog()将查询的结构转换成我们自定义的电话记录的格式。

当查询完毕后用函数EntryCHISTViewMissedCallList将未接电话全部显示出来。

在函数EntryCHISTViewMissedCallList中,显示所有未接电话的记录,并注册成菜单和菜单高亮显示时的回调函数CHISTGetCurrMissedCallIndex,把当前所选中的菜单的序列号保存在currMissedCallIndex中。

注册了左键菜单函数EntryCHISTViewMissedCall,该函数显示所选未接电话记录的详细信息,包括时间,姓名,电话号码,次数等。

在该函数中注册了左键菜单函数EntryCHISTMissedListOptions,如果进入该函数,可以对电话号码进行编辑,删除,保存,回拨等功能。

这个函数没有直接去注册各菜单行为的入口函数。

而是用此函数RegisterHighlightHandler(ExecuteCurrHiliteHandler);,这个函数一次性执行了所有菜单的注册高亮显示的入口函数。

这些在InitCallLogs中已经注册了的。

对未接电话的电话号码进行的操作的菜单的高亮显示函数已经在InitCallLogs中注册过了,下面对这些菜单项的实现做一个介绍:

1.删除功能:

高亮显示删除时,会调用HighlightCHISTDeleteDialedNum函数,在该函数中注册了左键的响应函数EntryCHISTDeleteDialedCallConfirm,该函数为跳出一个确认删除的提示框,同时注册左键入口函数CHISTDeleteDialedNum,在该函数中调用了函数ReqDeleteCallLog,在该函数中又建立了DEL_LAST_NUMBER_REQ型的结构指针,并建立了消息PRT_MMI_PHB_DEL_LAST_NUMBER_RSP,发送给L4queue,消息的数据指针指向的数据类型是DEL_LAST_NUMBER_REQ型,这个消息包含了号码的类型PHB_LNM和要删除的index。

并注册了返回消息时的处理函数RspDeleteMissedNum,在该函数中,如果result.flag的值为CALL_LOG_RESULT_OK(0)时则表示dialedCalls中序号为该index的记录删除成功。

2.保存功能:

高亮显示保存时,调用函数HighlightCHISTSaveDialedNum,该函数的注册左键的响应函数CHISTSaveDialedNum,在该函数中调用SaveNumberFromIdleScrn将号码显示在屏幕上后,调用mmi_phb_op_add_pre_entry对号码进行保存。

当电话簿还有空间存储电话号码时,调用函数mmi_phb_entry_op_add_choose_storage选择存储位置,并调用mmi_phb_entry_op_edit_entry对该记录进行编辑后保存到电话簿中。

这关系到电话簿模块的内容,在这里不做详述。

值得关注的是,在保存了电话号码到电话簿后,显示通话记录列表名称的记录名也要相应的进行改变。

可以用下图表示:

3.回拨功能:

高亮显示回拨时,调用函数HighlightCHISTCallDialedNum,在该函数中注册左键的响应函数CHISTCallDialedNum,在该函数中通过判断dialedCalls和currDialedCallIndex找到当前需要处理的记录,并对应其名字或号码对该记录进行拨打。

4.编辑功能:

高亮显示编辑时,调用函数HighlightCHISTEditRecvdNum,在该函数中注册左键的响应函数CHISTEditRecvdNum,在该函数中通过调用IdleScreenDigitHandler将号码显示在屏幕上对其进行编辑。

4.3已接电话和已拨电话:

已接电话和已拨电话记录的查询的流程以及高亮显示option菜单的流程及算法都和未接电话类似,这里不再赘述。

已接,已接电话记录的查询主要的流程如下图所示:

 

4.4删除通话话记录:

在初始化时InitAllApplications调用函数InitCallHistory,在该函数中InitCallsReset注册了菜单高亮度显示函数。

当高亮度显示菜单删除通话记录时调用HighlightCHISTResetCallLog,在该函数中注册了左键的响应函数EntryCHISTResetCallLog,该函数显示要删除的通话记录的菜单项,这个函数没有直接去注册各菜单行为的入口函数。

而是用此函数RegisterHighlightHandler(ExecuteCurrHiliteHandler);,这个函数一次性执行了所有菜单的注册高亮显示的入口函数。

这些在InitCallsReset中已经注册了的。

高亮显示的这些菜单,是实现对未接电话,已接电话,已拨电话记录的删除功能。

下面对删除已拨电话的功能做一下介绍,删除已接电话,未接电话与之类似,不再赘述。

当高亮显示已拨电话时,调用函数HighlightCHISTDeleteAllDialed,该函数中注册了左键的响应函数EntryCHISTDeleteAllDialedConfirm,该函数为弹出一个删除提示框,

并注册左键响应函数DeleteAllDialedCalls,在该函数中建立了DEL_LAST_NUMBER_REQ型的结构指针,并建立消息PRT_MMI_PHB_DEL_LAST_NUMBER_REQ,该消息的数据类型是DEL_LAST_NUMBER_REQ型的,号码类型是PHB_LND,建立好消息后,向L4Queue发送消息,并注册了返回消息时的处理函数RspDeleteAllDialedNum,当result.flag为CALL_LOG_RESULT_OK(0)时,删除成功并给出删除成功的提示。

4.5通话时间:

在初始化时InitAllApplications调用函数时调用函数InitCallTimes,在该函数中注册了菜单高亮显示的函数。

当高亮显示通话时间菜单时,调用函数HighlightCHISTCallTime,在该函数中注册了左键响应函数EntryCHISTCallTime,该函数从NVRAM中读出上次通话,已拨电话总计,已接电话总计的时间,并通过ShowCategory52Screen函数,将通话时间显示出来。

这个函数没有直接去注册各菜单行为的入口函数。

而是用此函数RegisterHighlightHandler(ExecuteCurrHiliteHandler);,这个函数一次性执行了所有菜单的注册高亮显示的入口函数。

这些在InitCallTimes中已经注册了的。

当高亮显示所有计时归零菜单时,调用函数HighlightCHISTResetAllTime,在该函数中注册了左键的响应函数EntryCHISTResetAllTimeConfirm,该函数为一个提示是否归零的提示框,在该函数中注册了左键的响应函数CHISTResetAllTime,该函数将last_call_time,total_out_time,total_in_time的值都归零,并将值写入NVRAM,并给出归零成功的提示。

4.6通话费用:

在初始化时InitAllApplications调用函数InitCallCost,该函数中注册了菜单高亮显示的函数,当高亮显示通话费用菜单时,调用函数HighlightCHISTCallCost,在该函数中注册了左键响应函数CHISTGetCallCost,在该函数中调用函数ReqGetAllCallCost,ReqGetLastCallCost,ReqGetPriceAndUnit,ReqGetMaxCallCost等函数得到总通话费用,上次通话费用,价格及费率,费用限制的值。

下面只对统计总通话费用的实现做一个介绍,其他的与之类似,就不再赘述。

当查询总通话费用时,调用函数ReqGetAllCallCost,该函数向L4queue发送PRT_MMI_CC_GET_ACM_REQ的消息,并注册消息返回时的处理函数RspGetAllCallCost,该函数建立一个MSG_MMI_CC_GET_ACM_RSP_STRUCT型的结构指针,将L4返回的结果的acm的值赋给allCallCost。

就得到总共通话的费用。

当高亮显示通话限制或通话费用归零,价格及费率菜单时,按左键会提示输入PIN2码。

现举通话费用归零菜单为例,当按左键时就会调用函数SECSETGetPIN2StatusReq,在这个函数中建立好ID为PRT_MMI_SMU_CHECK_PIN_STATUS_REQ的消息,并向L4queue发送,同时设置好消息返回时的函数SECSETGetPIN2StatusRsp。

如果PIN2码没有被锁住,则调用函数EntrySECSETPIN2提示输入PIN2码,并调用函数VerifyPin2对输入的PIN2码进行验证,如果验证成功,那么将通话的费用归0。

如果不成功,则给出错误提示,并重新要求输入。

如果PIN2被锁住,那么,则提示输入PUK2码,如果成功,则提示输入PIN2码,如果成功,那么将通话费用归0。

PIN2码验证的流程可以用下图表示:

4.7短信计数器:

在初始化时InitCallHistory时调用函数InitSMSCounter,在该函数中注册高亮显示菜单时的函数。

当高亮显示短信计数器时,调用函数HighlightCHISTSMSCount,该函数注册了左键的响应函数EntryCHISTSMSCount,该函数显示已发送和已接收短信数目的菜单,这个函数没有直接去注册各菜单行为的入口函数。

而是用此函数RegisterHighlightHandler(ExecuteCurrHiliteHandler);,这个函数一次性执行了所有菜单的注册高亮显示的入口函数。

这些在InitSMSCounter中已经注册了的。

在InitSMSCounter函数中还调用了函数InitNvramSMSCounters,该函数从NVRAM中将已发送和已接收的短信的数目读出来,并赋给nSendSMSCount和nRecvSMSCount。

当高亮显示已发送和已接收菜单时,通过函数ShowCategory52Screen直接显示出来。

当短信的数目不为空时,按左键会出现确定删除的提示框,由于原理在上面已经描述过了,这里便不再赘述。

5内部调用的主要函数说明:

voidReqReadMissedNum(void)//向Ps发出查询未接电话记录的请求

voidRspReadMissedNum(void*info)//处理得到查询未接电话记录结果的函数(此处的info

应该是ps返回的未接电话记录的信息)

voidReqReadDialedNum(void)//向Ps发出查询已拨电话记录的请求

voidRspReadDialedNum(void*info)//处理得到查询已拨电话记录结果的函数(此处的info

应该是ps返回的已拨电话记录的信息)

voidReqReadRecvdNum(void)//向Ps发出查询已接电话记录的请求

voidRspReadRecvdNum(void*info)//处理得到查询已拨电话记录结果的函数(此处的info

应该是ps返回的已拨电话记录的信息)

voidCHISTDeleteDialedNum(void)//删除当前已拨电话记录中的号码的信息

voidCHISTSaveDialedNum(void)//将当前已拨电话记录中的号码保存到电话簿

voidCHISTCall

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2