詳細設計說明書(電話簿文檔)_第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

提交評論