MTK Phonebook初始化流程

2021-05-13 07:55:15 字數 3076 閱讀 1519

開機之後,初始化時,設定如下三個ps訊息cback函式:

initializeall()

mmi_phb_init_protocol()

setprotocoleventhandler(mmi_phb_ind_startup_finish, prt_phb_startup_finish_ind);

setprotocoleventhandler(mmi_phb_ind_startup_begin, prt_phb_startup_begin_ind);

setprotocoleventhandler(mmi_phb_ind_startup_read, prt_phb_startup_read_ind);

1.l4在到nvram讀取data之前,傳送訊息到mmi:prt_phb_startup_begin_ind,進入:

mmi_phb_ind_startup_begin()

初始化一些變數,準備重新reload entries.

2.l4每讀取乙個and entry,都有傳送訊息到mmi:prt_phb_startup_read_ind,進入:

mmi_phb_ind_startup_read()

l4返回訊息的結構:

typedef struct

mmi_phb_startup_read_ind_struct;

typedef struct

l4c_phb_entries_struct;

typedef struct l4c_phb_bcd_entry_struct;

mmi中,儲存**entries的全域性變數phonebook結構如下:

mmi_phb_entry_bcd_struct phonebook[max_pb_entries];

typedef struct

mmi_phb_entry_bcd_struct;

typedef struct

mmi_phb_number_bcd_struct;

typedef struct

mmi_phb_name_struct;

mmi_phb_ind_startup_read()流程

mmi_phb_ind_startup_read_next_req()   /* send read confirm messaeg back to l4 */

if (mmi_sim)

mmi_phb_startup_read_entry()

把訊息儲存到全域性變數phonebook中

mmi_phb_util_make_pinyin_cache() //儲存name拼音 g_phb_name_pinyin_index

g_phb_name_index[phonebookentrycount] = store_index;

phonebookentrycount++;

else //nvram

for() //讀取一批nvram記錄

mmi_phb_startup_read_entry()

3.當l4從nvram中讀取完之後,傳送訊息prt_phb_startup_finish_ind到mmi,表示l4已經讀完了。mmi接收到這個訊息之後,開始load all entries from l4。

返回的訊息結構:

typedef struct

mmi_phb_startup_finish_ind_struct;

mi_phb_ind_startup_finish()流程

初始化g_phb_cntx中的結構

if (!g_phb_cntx.nvram_data_init)

mmi_phb_startup_finish_final_step()

mmi_phb_sort_build_name_index()

//利用分治策略和插入排序進行快速排序g_phb_name_index。

//g_phb_name_index中儲存的是phonebook中entries的儲存索引。

mmi_phb_ind_startup_finish_after_name_sort()

mmi_phb_init_build_lookup_table()

//把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);

//500ms後執行mmi_phb_init_populate_lookup_table()

//以g_phb_name_index中的內容為索引,到nvram中讀取option fields資料

//readmultirecord()。然後把讀取的資料儲存在lookuptable中。

//包括: 傳真號碼,家庭號碼,公司號碼。每讀取10次,就暫停250ms,然後繼續讀取。

//全部讀完之後,進入:mmi_phb_lookup_table_sort()

//all entries populated, begin to sort it。

//因為在裝載**號碼的時候,lookuptable中的內容是按照字母順裝載的,

//但是在裝載nvram中的傳真,家庭,公司號碼時,是按照儲存順序裝載的。

//而這裡的排序,是根據**號碼的大小來排序的。

//即:按照**號碼的大小,從小到大排列。

//當來電的時候,採取對半查詢效率就很高了。

小結:到這裡,就完成了**簿的初始化。即:

(1)從nvram,sim卡中讀取了資料,並儲存在l4中了;

(2)mmi中的全域性變數phonebook與l4中的**簿已經同步了;

(3)g_phb_name_index中按照字母的大小順序,儲存了每乙個entry在phonebook中的儲存位置;

(4)所有的號碼,包括sim卡,nvram,移動**,家庭,公司,傳真號碼,都按照大小順序,儲存在lookuptable中了,並且儲存了phonebook中的儲存位置索引。

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

初始化 MyBatis初始化之載入初始化

在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...