




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电话薄详细设计说明书MTK-M3项目组2005年5月6日修改历史4整体结构及功能描述5关键数据结构说明5主要存储分配7各子模块实现及主要算法说明8初始化8查找9添加9list显示电话簿的电话记录操作10删除10复制,移动10设置11其它号码11紧急号码11服务电话12本机号码12快速拨号13群组14删除全部14复制全部14公共函数14主要信号说明15相关文档文件18修改历史时间修改人版本修改内容2005-5-6付林海1.0创建初始版本整体结构及功能描述电话簿的设计从总的层次上来说可以分成两个部分,上层(MMI层)和底层(L4层)。上层是人机界面层,下层是与L4层有关,比如读取SIM卡中电话记录,向SIM卡中添加记录等,上下层之间通过发消息来进行通信。电话簿功能有:快速查找(利用快速查找算法)、按姓名查找(可实现按号码,首字母等查找)、添加电话记录、复制、删除、编辑、群组、其它号码(可设置本机号码、服务号码、SOS号码)、设置功能。这些都是在MMI层中的功能,要实现这些功能需要向下层,即L4层发送消息,L4层收这些消息后,会向MMI层发送消息通知某些操作已经完成(如在读取电话簿的时候,L4层会向MMI层发送消息PRT_PHB_STARTUP_BEGIN_IND、PRT_PHB_STARTUP_READ_IND、PRT_PHB_STARTUP_FINISH_IND。分别标志读取电话簿的开始,正在读取中和读取完毕。)关键数据结构说明typedef struct /Global variables - Keep phonebook state flag.BOOL phb_ready; /*标志电话簿有没有初始化,如没有初始化的话,*电话簿大多数功能是不能使用的,初始化是在*开机时做的*/BOOL processing; /*是否正在处理*/BOOL nvram_data_init; /*标志存储在NVRAM里面的参数有没有调入内存*/U8 refresh_list;U16 start_scr_id ;U16 end_scr_id;U8 sim_name_len; /*sim卡上电话的名字长度*/U8 fdn_name_len; /*固定拨号电话的名字长度*/U8 bdn_name_len;U8 owner_name_len; /*本机号码的电话长度*/U16 sim_total; /*sim卡最大容量*/U16 sim_used; /*已被使用的sim卡电话簿的容量*/U16 phone_total; /*本机上电话簿最大容量*/U16 phone_used; /*已使用的本机电话簿容量*/U16 populate_count;U16 lookup_table_count;/Pointer to global arrayvoid*optional_ids;void* caller_group;U16* list_filter;/System settingU8 prefer_storage; /*优先存储位置*/U8view_fieldMAX_PB_VIEW_FIELDS;/Index for list screen.U16 active_index; /*这三个变量用于群组编辑的时候*/U16 active_index_second;U16 active_index_third;/Global variables - passing parameter between functions.U8* number_to_dial5;U16 highlight_entry;U16 new_highlight_entry;U8 selected_storage;U8 image_location;S32 selected_pic_index;S32 selected_ring_index;S32 selected_grp_index;S32 selected_pattern_index;S32 selected_alert_index;S32 selected_pic_in_view;BOOL dial_from_list;U8 sort_type; /*查找的类型,初始化为MMI_PHB_SORT_PINYIN (定义了拼音查*找)或MMI_PHB_SORT_ENCODING */Inline Selection ListU16 ring_tone_listMAX_PB_RING_TONES;U16 image_id_listMAX_PB_PICTURES_TAGS;U8* image_name_listMAX_PB_PICTURES_TAGS;U8* ring_tone_name_listMAX_PB_RING_TONES;U8* alert_name_listMAX_PB_ALERT_TYPES+1;U8* led_name_listMAX_PB_LED_PATTERNS+1;U8 set_done_flag;U8 total_ring_tone;U8 total_image_id;U8 speak_name;mmi_phb_context_struct;初始化的时候,从电话簿里面读出来的记录就存储在该数组中,sim卡上的电话簿从下标为MAX_PB_PHONE_ENTRIES的数组元素开始,存储在本机电话簿后面。typedef struct MMI_PHB_NUMBER_BCD_STRUCTtel;/*用bcd码表示的电话号码*/MMI_PHB_NAME_STRUCTalpha_id; /*姓名*/U8field;/*Indicate if an entry has the field*/U8dummy;/*Make sure each phb structure is two-bytes aligned.*/ MMI_PHB_ENTRY_BCD_STRUCT;typedef struct U8name_length;/* 名字的长度*/ U8name_dcs;/*名字的编码类型*/ U8name(MAX_PB_NAME_LENGTH+1)*ENCODING_LENGTH;/*姓名*/ MMI_PHB_NAME_STRUCT;typedef struct U8type;U8length; /*电话号码长度*/ /*用bcd码表示的电话号码*/U8number(MAX_PB_NUMBER_LENGTH+1+1)*ENCODING_LENGTH; MMI_PHB_NUMBER_STRUCT;/存储电话记录的可选字段typedef struct U8 homeNumberMAX_PB_NUMBER_LENGTH+1+1;U8 companyName(MAX_PB_COMPANY_LENGTH+1)*ENCODING_LENGTH;U8 emailAddressMAX_PB_EMAIL_LENGTH+1;U8 officeNumberMAX_PB_NUMBER_LENGTH+1+1;U8 faxNumberMAX_PB_NUMBER_LENGTH+1+1; PHB_OPTIONAL_FIELDS_STRUCT;typedef struct U16pictureTagID;U16ringToneID;U8 callerGroupID; PHB_OPTIONAL_IDS_STRUCT;主要存储分配/*用于保存快速拨号*/SpeedDialInfo speedDialTableMAX_SPEED_DIAL_NUMBER;MMI_PHB_LOOKUP_NODE_STRUCT LookUpTableMAX_PB_SIM_ENTRIES+4*MAX_PB_PHONE_ENTRIES+4;/*进入紧急号码编辑时,用于保存存储在sim卡上的紧急号码,这些号码是不可编辑的。进入本机号码编辑时,用于保存存储在sim卡上的本机号码*/static MMI_PHB_ENTRY_STRUCTg_phb_sim_listMAX_SIM_ENTRIES;/*存储在NVRAM里面的紧急号码*/ static MMI_SOS_NUMBER_STRUCT g_phb_nvram_listMAX_NVRAM_SOS_ENTRIES;/*用于保存当前的可选字段的状态*/static U8 g_phb_temp_field_stateMAX_PB_VIEW_FIELDS;各子模块实现及主要算法说明初始化初始化过程,在手机启动时,它的L4层会给MMI层发送一些消息,首先是PRT_PHB_STARTUP_BEGIN_IND消息,收到这个消息,表示正在启动电话本功能,这时候把g_phb_cntx.phb_ready 设为否定,表示还没好。接着手机L4层给MMI层发一条读取电话本记录的通知消息PRT_PHB_STARTUP_READ_IND,让MMI去读取电话本记录,在这里有函数mmi_phb_ind_startup_read对这个消息进行相应,并且读完一条后MMI发消息给L4层要求继续发下一条记录,收到下一条后还是用同一函数处理,这样可以不断的循环,把电话本中的记录完全读取。在读取过程中每读取一条记录就把记录保存在phonebook数组中,注意:这里我们可用g_phb_name_index全局数组作为一个索引,里面保存phonebook各个成员所在的位置,这样可以比较容易的进行排序操作。所有记录都发给MMI层后,当MMI层还要读取下一条时,L4发消息PRT_PHB_STARTUP_FINISH_IND给MMI,表示读取结束,当收到此消息后MMI执行函数mmi_phb_ind_startup_finish,在里面完成g_phb_cntx的各个数据项的赋值。比如总的记录条数,名字的最大长度等,还有读取nvram中的各种信息,用来完成g_phb_cntx的各个数据项的赋值,比如电话本的群组信息,电话记录中除手机号和姓名外可选的其它项,保存的位置等。然后根据排序方式来进行排序。 排序算法,按照折半查找的方法,在排序好后不需要改变记录的位置,只需要把索引g_phb_name_index中的记录的下标位置交换既可。排序的函数结构方式可以这样:做一个通用的排序算法函数,此函数需要一个比较函数作为参数来对各个需要排序的成员进行大小比较,这样要按照不同的方式来排序的话,只需要改变这个比较函数就可以。很容易实现算法的重用。接下来是读取固定拨号,先向L4层发送消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ,请求读取固定拨号,L4层响应返回消息PRT_PHB_GET_ENTRY_BY_INDEX_RSP,MMI层调用函数mmi_phb_fdn_get_list_to_ram_rsp进行处理,如果没有读取完,则继续发送消息请求读取固定拨号。然后读取快速拨号,先从NVRAM里面读取快速拨号的号码,然后发消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ请求得到快速拨号的索引,L4层回传消息PRT_PHB_GET_ENTRY_BY_INDEX_RSP作为响应,MMI层调用函数PhbGetSpeedDialPhbIndexRsp进行处理。mmi_phb_init是完成对菜单的设置,使每一菜单对应相应的响应函数。它调用了函数mmi_phb_search_init();mmi_phb_operate_single_init();mmi_phb_operate_mass_init();/在该函数里面除了设置菜单外还设置了消息PRT_PHB_UPDATE_IND 的响应函数mmi_phb_ind_updatemmi_phb_caller_group_init();mmi_phb_extra_number_init(); /mmi_phb_setting_init(); PhbInitSpeedDial();查找查找分为按姓名查找和快速查找。按姓名查找:首先调用mmi_phb_entry_search_name进入输入姓名界面,输入姓名后,用户选择查找,MMI会先调用mmi_phb_search_name_find_closet(使用二分查找)得到符合条件的记录集,如果是电话簿内部的查找,那么调用mmi_phb_list_pre_entry函数list显示记录,如果是发短信时查找电话簿,左键响应的函数为mmi_phb_sms_send_data_for_entry,该函数将选中的电话号码保存到g_msg_cntx.smsPhoneNumber中。快速查找:添加list显示电话簿的电话记录操作删除复制,移动设置查询状态:在初始化的时候设置了g_phb_cntx这个结构体,查询的时候,状态就是从该结构体中的sim_used和phone_used中取得。设置优先存储分为sim卡和NVRAM:调用函数mmi_phb_storage_location_set_req发送消息PRT_PHB_SET_PREFERRED_STORAGE_REQ通知该参数已经改变,同时将该参数写入到NVRAM中,其它号码紧急号码紧急号码保存在sim卡和NVRAM中,sim卡中的紧急号码是不可编辑的,NVRAM中的号码是可编辑的,进入编辑界面只能看到NVRAM中的号码。服务电话进入服务电话设置前,需获取快速拨号列表的信息,先发送消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ,Type为MMI_PHB_SDNL4层收到处理完后,发送消息PRT_PHB_GET_ENTRY_BY_INDEX_RSP通知MMI,MMI调用函数mmi_phb_sdn_get_entry_rsp,list显示服务号码清单。在list显示的时候可以拨打服务电话,相应的函数为mmi_phb_sdn_list_make_call。本机号码删除本机号码时先发送消息PRT_PHB_DEL_ENTRY_REQ,Type为MMI_PHB_MSISDN,L4层发消息PRT_PHB_DEL_ENTRY_RSP通知MMI号码已删除,MMI调用函数mmi_phb_owner_number_erase_rsp进行处理。然后发送消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ,type参数为MMI_PHB_MSISDN取本机号码,L4层发送消息PRT_PHB_GET_ENTRY_BY_INDEX_RSP通知MMI处理完毕,MMI层调用函数mmi_phb_owner_number_get_entry_rsp进入list显示界面。编辑本机号码时先发送消息PRT_PHB_SET_ENTRY_REQ。Type为MMI_PHB_MSISDNL4层发送消息PRT_PHB_SET_ENTRY_RSP通知MMI,MMI调用函数mmi_phb_owner_number_edit_rsp发送消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ,type参数为MMI_PHB_MSISDN取得本机号码,然后进入list显示界面。快速拨号快速拨号清单在电话簿初始化的时候已经初始化,点击该菜单直接进入快速拨号清单。编辑的时候,先从电话簿取得新号码,然后将整个speedDialTable这个数组写到NVRAM_EF_PHONEBOOK_SPEEDDIAL_LID存储单元中。删除的时候,先将选中项对应得快速拨号号码清空,然后将speedDialTable这个然后将整个speedDialTable这个数组写到NVRAM_EF_PHONEBOOK_SPEEDDIAL_LID存储单元中。群组首先从NVRAM中读取NVRAM_EF_PHB_CALLER_GROUPS_LID参数,然后list显示各个群组,当用户选择其中一个群组时进入对应群组的编辑界面,在该界面,如用户选择群组成员,则进入添加或者删除状态.添加时调用mmi_phb_entry_callergroup_member_list函数进入电话选择界面,现在只支持本机存储的群组,选择一个电话号码时,先要将NVRAM_EF_PHB_IDS_LID单元里的数据提取到PhbOptIDs中,然后将相应的数组元素的callerID置为当前选中的群组,然后写入到NVRAM中。删除时调用mmi_phb_callergroup_member_delete_member,在该函数中,先要将NVRAM_EF_PHB_IDS_LID单元里的数据提取到PhbOptIDs中,然后将相应的数组元素的callerID置为0,然后写入到NVRAM中。删除全部删除全部电话号码,先是检查有没有电话锁,如果设置了密码,需先输入密码进行校验,校验之后,调用mmi_phb_op_delete_all_pre_req函数,在该函数中,先找到符合要求的电话记录索引,然后向L4层发送消息PRT_PHB_DEL_ENTRY_REQ,处理完后L4层发消息PRT_PHB_DEL_ENTRY_RSP通知MMI层,MMI调用mmi_phb_op_delete_all_one_after_one_rsp,该函数中先更新各个相关的数据结构,然后判断是否删除完毕,否则继续发消息PRT_PHB_DEL_ENTRY_REQ。逐条删除是发消息PRT_PHB_DEL_ENTRY_REQ给L4层,L4层处理完毕后,发消息PRT_PHB_DEL_ENTRY_RSP通知MMI,MMI调用mmi_phb_op_delete_entry_rsp。复制全部复制全部分为从sim卡到NVRAM和NVRAM到sim卡两种。mmi_phb_op_copy_all_one_after_one_req函数先判断该电话记录是否在原存储器上,直到找到一条符合条件的记录,然后向L4层发送消息PRT_PHB_SET_ENTRY_REQ,L4层处理后,会发消息PRT_PHB_SET
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同保证金租赁场地协议
- 电竞比赛票务服务合同样本
- 电路理论考试模拟题+答案
- 植物练习题(附答案)
- 物流行业集中度
- 股东内部股权收购合同
- 邯郸市大型公立医院PPP项目合同
- 维修车间安全培训
- 环保污水处理技术服务合同
- 廉洁工程承包合同承诺
- 磁共振灌注检查技术及临床应用(一)课件
- 兴义万峰谷新型旅游文化产业综合体项目总体概念性方案设计
- 消防安全标志解读课件
- 2022上半年事业单位联考《职业能力倾向测验》A类真题及答案
- 保健院业务部门绩效考核实施方案(试行)及质量控制指标
- 马鞍山东站站房工程指导性施工组织设计
- 电力电缆工程施工作业危险点辨识及预控措施手册
- 精神障碍检查与诊断试题
- 研究生英语综合教程(下)1-10单元全部答案及解析
- 中医护理原则和方法
- 光伏电站验收申请及验收报告样板
评论
0/150
提交评论