MTK平台相关资料(6)

2019-06-02 14:03

} mmi_phb_startup_read_entry() 把消息保存到全局变量PhoneBook中。 信息保存在PhoneBook[store_index]中。可见:PhoneBook[]中的存储顺序就是L4中的存储顺序。 PhoneBook[store_index].tel.number中保存的是ASCII码。 //根据号码的第一个位置来设置是SIMentry还是NVRAMentry. PhoneBook[store_index].field=0; if(PhoneBook[store_index].tel.number[0]!=0xff) { PhoneBook[store_index].field|=MMI_PHB_ENTRY_FIELD_NUMBER; } g_phb_name_index[PhoneBookEntryCount]=store_index; 姓名列表,保存的是PhoneBook中entry的位置 PhoneBookEntryCount++;

3.当L4从NVRAM中读取完之后,发送消息PRT_PHB_STARTUP_FINISH_IND到MMI,表示L4已经读完了。MMI接收到这个消息之后,开始loadallentriesfromL4。 返回的消息结构: typedefstruct { LOCAL_PARA_HDR kal_uint16 sim_max_num; kal_uint16 phb_max_num; kal_uint8 phb_len; kal_uint8 fdn_len; kal_uint8 bdn_len; kal_uint8 owner_len; }mmi_phb_startup_finish_ind_struct; mi_phb_ind_startup_finish() //初始化g_phb_cntx中的结构 g_phb_cntx.sim_name_len=localPtr->phb_len; g_phb_cntx.fdn_name_len=localPtr->fdn_len; g_phb_cntx.bdn_name_len=localPtr->bdn_len; g_phb_cntx.owner_name_len=localPtr->owner_len; g_phb_cntx.sim_total=localPtr->sim_max_num; g_phb_cntx.phone_total=localPtr->phb_max_num; if(!g_phb_cntx.nvram_data_init) { mmi_phb_init_get_data_from_nvram();//从NVRAM中读取电话簿的一些信

息。比如:群组,栏位设置,存储选择等等。 g_phb_cntx.view_field g_phb_cntx.prefer_storage g_phb_cntx.name_list_filter g_phb_cntx.caller_group g_phb_cntx.nvram_data_init=TRUE; } mmi_phb_sort_build_name_index(); //sortnamelistg_phb_name_index。这个函数完成后,PoneBook中所有entries,如果按照g_phb_name_index[]中 //的值作为顺序来排列的话,将是按照姓名中字母从小到大的顺序。 //quicksortandinsertionsortg_phb_name_index[]。

g_phb_name_index[]中存储的是PhoneBook[]中entries的存储索引。这个函数的过程就是通过 //g_phb_name_index[]中的值,找到PhoneBook中相应的entries,然后比较PhoneBook中entries的name,从而来排列g_phb_name_index的值。 mmi_phb_sort_name_fast_quicksort(0,(U16)(PhoneBookEntryCount-1),mmi_phb_sort_compare_name_index_by_pinyin_cache); mmi_phb_sort_name_insertionsort(left,right,compare); //当FDN启动之后,AND就不能从SIM卡中读取出来了。就是为了防止未授权拨号 //当获取到FDNlist之后,一定要获取speeddialnumber。 if(gSecuritySetupContext.FdlStatus) { mmi_phb_fdn_get_list_to_ram(); //把FNDlist拷贝到AND的存储区。 if(g_phb_cntx.sim_used==0) { g_phb_fdn_count=0; mmi_phb_fdn_get_list_to_ram_req(); 发送消息PRT_PHB_GET_ENTRY_BY_INDEX_REQ到L4,去读取FDN。 返回消息PRT_PHB_GET_ENTRY_BY_INDEX_RSP,进入CBack函数: mmi_phb_fdn_get_list_to_ram_rsp() store_index=g_phb_fdn_count+MAX_PB_PHONE_ENTRIES; 把读取的信息保存到PhoneBook[store_index]中。可见:PhoneBook是先保存NVRAM号码,然后是SIM号

码。 /*RetrieveSpeedDialListafterretrieveFDNlist,becausetheyallusesamemessage.*/ PhbGetSpeedDialInfo(); } else { PhbGetSpeedDialInfo(); /*RetrieveSpeedDialListafterretrieveFDNlist,becausetheyallusesamemessage.*/ PhbReadSpeedDialNVRAM(); //从NVRAM中读取速拨信息 g_phb_cntx.phb_ready=TRUE; mmi_phb_init_build_lookup_table();//buildsthelookuptableforcross-referencingduringMO/MTcalls. } } else { if(gInsertSimAppFlag==1) { g_phb_cntx.phb_ready=TRUE; mmi_phb_init_build_lookup_table(); mmi_phb_util_read_compare_length()//获取g_phb_compare_length,即需要比较的号码最后几位 把PhoneBook中以g_phb_name_index[]中的内容为索引的entry的号码,转换成ASCII码,然后转换成32为int型数据,并保存 在全局变量LookUpTable[]中。注意:一并保存的还有store_index也就是该entry在PhoneBook中存储位置。 StartTimer(PHB_READ_OPT_FILED_TIMER,500,mmi_phb_init_populate_lookup_table); } else { PhbGetSpeedDialInfo(); } }

500ms之后,定时器溢出,进入:

mmi_phb_init_populate_lookup_table()

//Thisfunctionpopulatesthelookuptablewithhome/fax/mobile/officenumbersafterconvertingthelast7(or9)charactersofthephonenumberintodigits. 以g_phb_name_index[]中的内容为索引,到NVRAM中读取optionfields数据ReadMultiRecord()。然后把读取的数据保存在LookUpTable[]中。包括: 传真号码,家庭号码,公司号码。每读取10次,就暂停250ms,然后继续读取。 全部读完之后,进入:mmi_phb_lookup_table_sort() Allentriespopulated,begintosortit。因为在装载电话号码的时候,LookUpTable[]中的内容是按照字母顺装载的,但是在装载NVRAM中的传真,家庭,公司号码时,是按照存储顺序装载的。而这里的排序,是根据电话号码的大小来排序的。 即:按照电话号码的大小,从小到大排列。当来电的时候,采取对半查找效率就很高了。

小结:到这里,就完成了电话簿的初始化。即:

(1)从NVRAM,SIM卡中读取了数据,并保存在L4中了;

(2)MMI中的全局变量PhoneBook[]与L4中的电话簿已经同步了;

(3)g_phb_name_index[]中按照字母的大小顺序,存储了每一个entry在PhoneBook[]中的存储位置;

(4)所有的号码,包括SIM卡,NVRAM,移动电话,家庭,公司,传真号码,都按照大小顺序,存储在LookUpTable[]中了,并且存储在PhoneBook中的存储位置索引。 二、增加一个entry

//这是菜单的初始化函数 voidmmi_phb_init(void) { mmi_phb_search_init(); mmi_phb_operate_single_init(); mmi_phb_operate_mass_init(); mmi_phb_caller_group_init(); mmi_phb_extra_number_init(); mmi_phb_setting_init(); PhbInitSpeedDial(); mmi_phb_stubs_to_others_init(); }

mmi_phb_highlight_op_add_entry() memset(pbNumber,0,ENCODING_LENGTH); g_phb_cntx.set_done_flag=0;

按下左软件,进入:

mmi_phb_op_add_pre_entry() 判断是否已经存储满了? mmi_phb_util_clear_buffer()//清除一些全局变量 mmi_phb_entry_op_add_choose_storage()选择存储位置:SIM,phone ShowCategory52Screen()//根据g_phb_cntx.prefer_storage来判断当前应该默认那个高亮

PHONE,高亮:

mmi_phb_highlight_op_add_entry_to_phone() g_phb_cntx.selected_storage=MMI_NVRAM;

SIM高亮:

mmi_phb_highlight_op_add_entry_to_sim() g_phb_cntx.selected_storage=MMI_SIM;

按下左软件,SHOW的画面是(全部栏位): Name 姓名 Number 电话号码 HomeNumber 家庭电话 CompanyName 公司名称 EmailAddress 电子信箱 OfficeNumber 公司号码 FaxNumber 传真号码 None 无(生日) None 无(大头贴)g_phb_cntx.image_name_list(名称),g_phb_cntx.image_id_list(图片的ID) None 无(来电录像)g_phb_cntx.video_name_list(名称),g_phb_cntx.video_id_list(录像ID) None 无(来电铃声)g_phb_cntx.ring_tone_name_list(名称),g_phb_cntx.ring_tone_list(铃声ID) None 无(用户群组)myCallerGrpnames

无论选择了哪个存储,都进入: mmi_phb_entry_op_add_entry() if(g_phb_cntx.selected_storage==MMI_SIM) { g_phbnameLength=g_phb_cntx.sim_name_len; g_phbnumberLength=MAX_PB_SIM_NUMBER_LENGTH;//20 } else { g_phbnameLength=MAX_PB_NAME_LENGTH; g_phbnumberLength=MAX_PB_NUMBER_LENGTH; //40 } 很多的初始化操作mmi_phb_op_fill_inline_item() InitializeCategory57Screen(); ShowCategory57Screen

高亮响应:mmi_phb_op_edit_highlight_hdlr()


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

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

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

马上注册会员

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