详细设计说明书(电话簿文档)_第1页
详细设计说明书(电话簿文档)_第2页
详细设计说明书(电话簿文档)_第3页
详细设计说明书(电话簿文档)_第4页
详细设计说明书(电话簿文档)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..[电话薄]详细设计说明书[MTK-M3项目组]2005年5月6日'...更正历史3整体结构及功能描述4重点数据结构说明4主要储藏分配7各子模块实现及主要算法说明7初始化7查找8增添9list显示电话簿的电话记录操作9删除9复制,搬动10设置10其余号码11紧迫号码11服务电话11本机号码12快速拨号12群组13删除所有13复制所有13公共函数14主要信号说明14相关文档文件17'...更正历史时间更正人版本更正内容2005-5-6付林海1.0创办初始版本'...整体结构及功能描述电话簿的设计从总的层次上来说能够分成两个部分,上层(MMI层)和底层(L4层)。上层是人机界面层,基层是与L4层相关,比方读取SIM卡中电话记录,向SIM卡中增添记录等,上基层之间经过发信息来进行通讯。电话簿功能有:快速查找(利用快速查找算法)、按姓名查找(可实现按号码,首字母等查找)、增添电话记录、复制、删除、编写、群组、其余号码(可设置本机号码、服务号码、SOS号码)、设置功能。这些都是在MMI层中的功能,要实现这些功能需要向基层,即L4层发送信息,L4层收这些信息后,会向MMI层发送信息通知某些操作已经达成(如在读取电话簿的时候,L4层会向MMI层发送消息PRT_PHB_STARTUP_BEGIN_、INDPRT_PHB_STARTUP_READ_、INDPRT_PHB_STARTUP_FINISH_。IND分别标记读取电话簿的开始,正在读取中和读取达成。)重点数据结构说明typedefstruct{//Globalvariables-Keepphonebookstateflag.BOOLphb_ready;/*标记电话簿有没有初始化,如没有初始化的话,*电话簿大多数功能是不能够使用的,初始化是在*开机时做的*/BOOLprocessing;/*可否正在办理*/BOOLnvram_data_init;/*标记储藏在NVRAM里面的参数有没有调入内存*/U8refresh_list;U16start_scr_id;U16end_scr_id;U8sim_name_len;/*sim卡上电话的名字长度*/U8fdn_name_len;/*固定拨号电话的名字长度*/U8bdn_name_len;U8owner_name_len;/*本机号码的电话长度*/U16sim_total;/*sim卡最大容量*/U16sim_used;/*已被使用的sim卡电话簿的容量*/U16phone_total;/*本机上电话簿最大容量*/U16phone_used;/*已使用的本机电话簿容量*/U16populate_count;'...U16lookup_table_count;//Pointertoglobalarrayvoid*optional_ids;void*caller_group;U16*list_filter;//SystemsettingU8prefer_storage;/*优先储藏地址*/U8view_field[MAX_PB_VIEW_FIELDS];//Indexforlistscreen.U16active_index;/*这三个变量用于群组编写的时候*/U16active_index_second;U16active_index_third;//Globalvariables-passingparameterbetweenfunctions.U8*number_to_dial[5];U16highlight_entry;U16new_highlight_entry;U8selected_storage;U8image_location;S32selected_pic_index;S32selected_ring_index;S32selected_grp_index;S32selected_pattern_index;S32selected_alert_index;S32selected_pic_in_view;BOOLdial_from_list;U8sort_type;/*查找的种类,初始化为MMI_PHB_SORT_PINYIN(定义了拼音查*找)或MMI_PHB_SORT_ENCODING*///InlineSelectionListU16ring_tone_list[MAX_PB_RING_TONES];U16image_id_list[MAX_PB_PICTURES_TAGS];U8*image_name_list[MAX_PB_PICTURES_TAGS];U8*ring_tone_name_list[MAX_PB_RING_TONES];U8*alert_name_list[MAX_PB_ALERT_TYPES+1];U8*led_name_list[MAX_PB_LED_PATTERNS+1];U8set_done_flag;U8total_ring_tone;U8total_image_id;U8speak_name;'...}mmi_phb_context_struct;初始化的时候,从电话簿里面读出来的记录就储藏在该数组中,sim卡上的电话簿从下标为MAX_PB_PHONE_ENTRIES的数组元素开始,储藏在本机电话簿后边。typedefstruct{MMI_PHB_NUMBER_BCD_STRUCTtel;/*用bcd码表示的电话号码*/MMI_PHB_NAME_STRUCTalpha_id;/*姓名*/U8field;/*Indicateifanentryhasthefield*/U8dummy;/*Makesureeachphbstructureistwo-bytesaligned.*/}MMI_PHB_ENTRY_BCD_STRUCT;typedefstruct{U8name_length;/*名字的长度*/U8name_dcs;/*名字的编码种类*/U8name[(MAX_PB_NAME_LENGTH+1)*ENCODING_LENGTH];/*姓名*/}MMI_PHB_NAME_STRUCT;typedefstruct{U8type;U8length;/*电话号码长度*//*用bcd码表示的电话号码*/U8number[(MAX_PB_NUMBER_LENGTH+1+1)*ENCODING_LENGTH];}MMI_PHB_NUMBER_STRUCT;//储藏电话记录的可选字段typedefstruct{U8homeNumber[MAX_PB_NUMBER_LENGTH+1+1];U8companyName[(MAX_PB_COMPANY_LENGTH+1)*ENCODING_LENGTH];U8emailAddress[MAX_PB_EMAIL_LENGTH+1];U8officeNumber[MAX_PB_NUMBER_LENGTH+1+1];U8faxNumber[MAX_PB_NUMBER_LENGTH+1+1];}PHB_OPTIONAL_FIELDS_STRUCT;typedefstruct{U16pictureTagID;U16ringToneID;U8callerGroupID;}PHB_OPTIONAL_IDS_STRUCT;'...主要储藏分配/*用于保存快速拨号*/SpeedDialInfospeedDialTable[MAX_SPEED_DIAL_NUMBER];MMI_PHB_LOOKUP_NODE_STRUCTLookUpTable[MAX_PB_SIM_ENTRIES+4*MAX_PB_PHONE_ENTRIES+4];/*进入紧迫号码编写时,用于保存储藏在sim卡上的紧迫号码,这些号码是不行编写的。进入本机号码编写时,用于保存储藏在sim卡上的本机号码*/staticMMI_PHB_ENTRY_STRUCTg_phb_sim_list[MAX_SIM_ENTRIES];/*储藏在NVRAM里面的紧迫号码*/staticMMI_SOS_NUMBER_STRUCTg_phb_nvram_list[MAX_NVRAM_SOS_ENTRIES];/*用于保存当前的可选字段的状态*/staticU8g_phb_temp_field_state[MAX_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,MMIRSP层调用函数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_。REQType为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_ENTRY_RSP通知MMI层

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论