uicc詳解 4(uicc在UE端的初始化過程)

2021-07-22 16:51:28 字數 2368 閱讀 3237

在uim task下,乙個卡槽對應乙個task,預設情況下,起來三個task,task1對應slot1,task2對應slot2。由於uim的三個task使用的是同一套**,所以使用uim_ptr->id來分分當前屬於哪個task。在uim task的初始化**中注意兩個函式:uim_hotswap_init與uim_start_initial_powerup。

uim_hotswap_init用來初始化uim的熱插拔事件,主要有初始化熱插拔事件所使用的佇列與定時器。定時器超時函式為uim_hotswap_debounce_timer_expiry_cb,該函式中會對比當前卡狀態與檢測到的卡狀態,然後做出相應操作,該定時器在hotswap終端中開啟,本文後續會講到。

卡狀態表如下:

uim_start_initial_powerup用來第一次重啟uim卡,從而獲取到atr。該函式中呼叫了uim_reset_uim函式,在uim_reset_uim函式中有個關鍵點:

其中me_powerup開機預設設定為true,這樣給執行一次對卡的冷重啟之後,uim_ptr的command賦值了uim_internal_me_pup_f,該函式結尾呼叫uim_process_command->uim_process_generic_command,在uim_process_generic_command處理uim_internal_me_pup_f命令,

在uim_process_generic_command中將呼叫uim_generic_command來執行uim_internal_pup_status列表中的命令,執行過程參考前兩章介紹,知道執行到uim_done_st命令後退出。

執行完uim_done_st命令後注意在uim_process_card_response函式中的如下**:

在uim_internal_pup_status列表的命令跑完後會執行uim_sm_link_established函式來開啟gsdi的工作。

開啟流程:uim_sm_link_established->uim_gsdi_link_est->uim_sm_modify_link_est->mmgsdi_notify_link_est_slot->mmgsdi_cmd_ext然後通過訊號佇列的方式把命令mmgsdi_nodify_link_est_req傳遞給gsdi task。gsdi task收到該命令後執行mmgsdi_card_init_process_link_est,gsdi對uim task進行adf選擇,並向user上報卡插入事件,本文未詳細介紹gsdi,這個待後續分析。

再注意下uim_ptr->flag.me_powerup = false;這行**,保證了每次卡起來就執行一次gsdi的鏈結工作。

總體流程圖如下:

uicc power up流程圖

gsdi應用選擇完成後,uicc與sim後續流程如下所示:

上圖是uicc power up 之後,ue與uicc卡互動流程,從互動的apdu來分析開機流程如下

1.atr

2.選擇並讀取2fe2(iccid)檔案

3.選擇並讀取2f05(preferred languages)檔案

4.選擇並讀取2f00(ef dir)檔案,該檔案在uicc詳解-1中介紹過,用來uicc內有幾個adf應用。

5.選擇adf,根據從2f00讀出的資料來選擇使用那個adf應用。

6.對adf目錄下檔案的讀寫操作~

7.對uicc卡上檔案操作完後,輪詢傳送status命令,來定時查詢卡的狀態。

uicc詳解-1~3只是介紹了命令的傳輸流程及uicc初始化流程,uicc還有許多細節需要學習,比如在modem中使用全域性來存放的當前ef,df目錄(對應協議的檔案及目錄select許可權),gsdi task中的管理等,以後有時間再分析~

uicc詳解 1(常識介紹)

本文件介紹了uicc的分類以及卡的檔案架構與命令格式。首先我們來看乙個結構體 typedef enumuim protocol type 從上述結構體可以看出,uicc分為兩類卡,uim icc與uim uicc,也就是我們正常所說的sim subscriber identification mod...

UE4多執行緒任務系統詳解

首先,了解一下該系統重要的資料型別.1.fqueuedthreadpool 虛基類,佇列執行緒池,fqueuedthreadpoolbase繼承自fqueuedthreadpool,fqueuedthreadpoolbase維護了乙個tarrayqueuedwork 需要被執行的工作 tarraya...

UE4在VR模式下去掉兩側黑邊

正常用vr模式開啟以後,就會成這樣 紅框部分就是我所說的黑邊 通過改變 可以實現如下效果 在steamvrrender.cpp裡的rendertexture renderthread函式修改 修改為 void fsteamvrhmd rendertexture renderthread frhico...