高通LTE选网-REG模块

搜网与网络选择,是指在手机开机过程中,确定注册或者附着到哪个运营商网络及哪个制式的过程,也就是选择PLMN 以及RAT 的过程。

定义

RPLMN(Registered PLMN):是指手机上一次成功注册的网络,需要注意的是,这里必须是成功注册的网络,且需要样机正常关机才会将RPLMN写入到SIM卡中;

HPLMN(Home PLMN):是指归运营商的归属网络,例如联通卡的HPLMN一般是46001

EHPLMN(Equivalent Home PLMN):是指运营商的等效归属网络,例如,中国联通的MCC和MNC有46001、46007等,这些网络均属于EHPLMN;但需要注意的是,国内的SIM卡可能并没有将EHPLMN写入到SIM卡文件系统中;

VPLMN(Visited PLMN):是指UE所访问的PLMN,即当前所在的网络

EFs SIM卡存储信息
EFIMSI – IMSI
EFPLMNwAcT – User-controlled PLMN selector with Access Technology
EFHPPLMN – Higher-priority PLMN search period
EFFPLMN – Forbidden PLMNs
EFLOCI – Location information
EFOPLMNwACT – Operator-controlled PLMN selector with Access Technology
EFHPLMNwAcT – Home HPLMN selector with Access Technology
EFEHPLMN – Equivalent HPLMN
EFLRPLMNSI – Last RPLMN selection indication
EFPSLOCI – Packet-switched location information

NVs Used by the UE
NV 1190, NV_RPLMNACT_I – Stores the last RPLMN RAT information
NV 849, NV_NET_SEL_MODE_PREF_I – 手动选网还是自动选网
NV 850, NV_SERVICE_DOMAIN_PREF_I – Domain CS or PS 

EFS Used by the UE

/sd/rat_acq_order :PLMN选择中的rat 优先级列表(LTE UMTS GSM )

AUTO PLMN选择流程

高通LTE选网-REG模块_第1张图片

REG模块

代码路径在:mmcp\nas\reg

入口函数 reg_main

void reg_main(dword dummy)
{

  reg_init_before_task_start();//初始化queue 在reg_put_cmd中填充

  reg_timers_initialize();//初始化timer

  reg_create_efs_config();//init efs

  reg_ulog_register();

  reg_initialize();

  reg_nv_initialize_cache();//init nv

  reg_sim_mmgsdi_init();//建立与MMGSDI 的通信,接受sim 卡消息

  for(;;)
  {
    sigs = reg_wait(REG_CMD_Q_SIG);//监听signal

    if (sigs & REG_CMD_Q_SIG)
    {
      (void) rex_clr_sigs( reg_tcb_ptr,REG_CMD_Q_SIG);//清空signal

      while ((reg_cmd_p = (reg_cmd_type*)q_get(®_cmd_q) ) != NULL)
      {
        reg_state_main(reg_cmd_p); //核心函数,处理各种signal
      }
  }
}

函数的核心函数的reg_state_main 函数,主要处理REG接收到的SIGNAL,主要有以下几个信号

MS_CM_REG/* messages between CM and REG         */
 MS_MM_REG/* messages between MM and REG         */
MS_GSDI/* messages from/to GSDI               */
MS_TIMER/* Messages indicating timeouts        */
MS_REG_REG/* Messages REG to REG internal */

具体的信号我们可以从QXDMlog 来看,从Call manager 收到信号,到发送拨号请求给RRC,整个流程如下:

//REG Queries the SIM
21:18:51.779    reg_sim.c    1072    SIM card mode (USIM)
21:18:51.779    reg_sim.c    1576    HPLMN(001-001)
21:18:51.781    reg_nv.c    289    Read GPRS_ANITE_GCF -1
//REG →MM; SIM availability
 00:00:01.126   reg_state.c   9179  =REG= CM_SIM_AVAILABLE_REQ mode_pref:2, 
21:18:51.787    reg_send.c    821    MMR_SIM_AVAILABLE_REQ
21:18:51.788    mmcoord.c    465    MM received MMR_SIM_AVAILABLE_REQ
21:18:51.805    reg_state.c    2713    MMR_SIM_AVAILABLE_CNF
//REG reads PLMN information from SIM
21:18:51.828    reg_sim.c    1836    CS RPLMN(1-1)
21:18:51.829    reg_sim.c    1576   HPLMN(001-001)
21:18:51.829    reg_sim.c    2406   Forbidden PLMN list (length = 4)
21:18:51.829    reg_sim.c    2410    # MCC-MNC
21:18:51.829    reg_sim.c    2423    0 310-017
21:18:51.829    reg_sim.c    2423    1 000-000
21:18:51.829    reg_sim.c    2423    2 000-000
21:18:51.829    reg_sim.c    2423    3 000-000
21:18:51.830    reg_sim.c    2031    RPLMN RAT Search Order (UMTS-GSM)
//REG →    MM
21:18:51.830    reg_send.c    786    MMR_REG_REQ PLMN(1-1) RAT(UMTS)
21:18:51.830    mmcoord.c    922    MM received MMR_REG_REQ [0 f1 10]
//MM →RRC
21:18:51.831    mmrrcconn.c    316    MM sent RRC_SERVICE_REQ to RRC
21:18:51.831    rrcdispatcher.c    3432    Recd: RRC_SERVICE_REQ

从整个交互来看 REG主要是与CM 和MM 进行交互,CM 就是上层Call Manager MM是底层NAS的模块,与RRC通信

整个拨号过程核心signal就是CM_SERVICE_REQ,是CM发起拨号选网,而reg_state_main处理的函数就是reg_state_process_cm_service_req

函数比较复杂,这个流程如下

reg_state_process_cm_service_req 
	reg_sim_is_hplmn_to_be_selected //首先检查EF_LRPLMNSI;如果为 1 ,PLMN 使用HPLMN,如果为0,PLMN使用RPLMN
	CASE 0 
	PLMN选择
	reg_sim_read_sim_rplmn 检查NV_RPLMNACT_I
        如果为LTE,则RPLMN 从EF_EPSLOCI中读取;
        如果为UMTS 和GSM ,则通过NV_SERVICE_DOMAIN_PREF_I 选择从EF_PSLOCI还是EF_LOCI中读取RPLMN
	函数中reg_sim_rplmn_rat_search_order 其实是REG模块启动时调用reg_sim_load_card_mode,从NV_RPLMNACT_I获取的
	RAT选择
	由NV_RPLMNACT_I和SIM卡中EF_RPLMNAcT来决定
	reg_mode_get_3gpp_rat_capabilty ,转换rat_acq_order
	reg_mode_determine_first_plmn 确认RPLMN是否valid ,如果invalid 就选用HPLMN
	reg_sim_read_rplmn_rat_search_order,从sim卡中读取EF_RPLMNAcT,再EFS rat_acq_order 做并集    
        reg_sim_combined_rat_search_order如果读取失败,使用NV_RPLMNACT_I
	CASE 1
	PLMN
		reg_sim_load_card_mode 中读取EF_IMSI 赋值HPLMN
	RAT	
		reg_sim_read_hplmn_rat_search_order 中读取EF_HPLMNWACT

参考文档:

80-N0608-1_B_UMTS_Cell_Select_Reg

80-N9533-2_D_PLMN_RAT_Selection_GSM_WCDMA_LTE_TD-SCDMA

80-N9811-1_C_LTE_Cell_Select_Registration_TAU

你可能感兴趣的:(高通,LTE,MDM)