目录
1.cmregprx_cmd_gwl_activate_protocol()
2.cmregprx_cmd_gwl_activate_protocol2()
4.cmregprx_activate_prot_hdlr()
5.cmregprx_inact_act_activate_prot_hdlr()
6.cmregprx_process_sd_action()
7.cmregprx_send_service_req_permission()
8.cmregprx_validate_new_srv_req()
9.cmregprx_send_reg_service_req()
11.reg_state_process_cm_service_req()
12.reg_mode_start_plmn_selection()
14.reg_mode_determine_first_plmn()
16.reg_send_last_mmr_reg_req()
17.mm_emm_normal_msg_handler()
18.mmcoord_route_mm_emm_messages()
一、代码流程图
CM REG MM
1.cmregprx_cmd_gwl_activate_protocol() |------> 10.reg_state_main() |---> 17.mm_emm_normal_msg_handler()
|| | || | ||
\/ | \/ | \/
2.cmregprx_cmd_gwl_activate_protocol2() | 11.reg_state_process_cm_service_req()| 18.mmcoord_route_mm_emm_messages()
------------------- | || | ||
PROT_CMD_ACTIVATE | \/ | \/
|| | 12.reg_mode_start_plmn_selection() | 19.emm_process_reg_command()
\/ | || | ||
3.cmregprx_cmd_proc() | \/ | \/
|| | 13.start_plmn_selection() | 20.emm_process_reg_req()
\/ | || | ||
4.cmregprx_activate_prot_hdlr() | \/ | \/
|| | 14.reg_mode_determine_first_plmn() | 21.emm_send_rrc_service_req()
\/ | 15.reg_send_mmr_reg_req() | ---------------------->
5.cmregprx_inact_act_activate_prot_hdlr()| ---------------- | LTE_RRC_SERVICE_REQ
|| | MMR_REG_REQ |
\/ | || |
6.cmregprx_process_sd_action() | \/ |
|| | 16.reg_send_last_mmr_reg_req() |
\/ | ------------------------------->|
7.cmregprx_send_service_req_permission() | MMR_REG_REQ
|| |
\/ |
8.cmregprx_validate_new_srv_req() |
9.cmregprx_send_reg_service_req() |
------------------------------------>|
CM_SERVICE_REQ
二、代码详细流程
1.cmregprx_cmd_gwl_activate_protocol()
mmoc_activate_prot_online_ss_hdr()调用该函数。
该函数调用cmregprx_cmd_gwl_activate_protocol2()。
2.cmregprx_cmd_gwl_activate_protocol2()
/* Fill in all the fields.
*/
cmd_ptr->name = PROT_CMD_ACTIVATE;
cmd_ptr->mm_id = mm_id;
cmd_ptr->param.act_prot.reason = act_reason;
cmd_ptr->param.act_prot.delay_srv_req = delay_srv_req;
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
/* Post the command.
*/
cmregprx_send_cmd( cmd_ptr,
cmregprx_info_ptr
);
3.cmregprx_cmd_proc()
switch ( cmd_ptr->name )
{
case PROT_CMD_ACTIVATE:
cmregprx_activate_prot_hdlr( cmd_ptr );
break;
4.cmregprx_activate_prot_hdlr()
/* Invoke the appropriate state specific event handlers.
*/
switch (cmregprx_stack_info_ptr->state)
{
case CMREGPRX_STATE_INACTIVE:
case CMREGPRX_STATE_ACTIVE:
case CMREGPRX_STATE_DORMANT:
cmregprx_inact_act_activate_prot_hdlr( cmd_ptr,
cmregprx_stack_info_ptr
);
break;
5.cmregprx_inact_act_activate_prot_hdlr()
/* Send the REG start request based on the SD action.
*/
cmregprx_process_sd_action( sd_ss_act_get_per_mm_id( NULL, cmregprx_stack_info_ptr->mm_id),
cmregprx_stack_info_ptr, NULL
);
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
/* Set the RegProxy's state to ACTIVE.
*/
cmregprx_update_state( CMREGPRX_STATE_ACTIVE,
cmregprx_stack_info_ptr
);
6.cmregprx_process_sd_action()
……
CMREGPRX_MSG_MED_6_EXT("process_sd_action %d on sub %d stk %d is_gwl_mode_supp %d is_1x_hdr_mode_supp %d sd_mode_pref 0x%x",
sd_act,
as_id,
cmregprx_stack_info_ptr->mm_id.stk_id,
is_gwl_mode_supp, is_1x_hdr_mode_supp,
ph_sub_ptr->pref_info.mode_band.mode, as_id);
……
case SD_SS_ACT_ACQ_GWL:
/* SD20 action is ACQ_GWL, Send the REG service request.
*/
cmregprx_send_service_req_permission( cmregprx_stack_info_ptr );
break;
7.cmregprx_send_service_req_permission()
/* Validate new service request, and ask CMSOA for permission if necessary
** before sending it
*/
if(cmregprx_validate_new_srv_req(cmregprx_stack_info_ptr))
{
……
{
cmregprx_send_reg_service_req(cmregprx_stack_info_ptr);
}
}
8.cmregprx_validate_new_srv_req()
/* Fill service_req parms.
*/
cmregprx_fill_srv_req_parms(sd_act, srv_req_local, cmregprx_stack_info_ptr);
/* Check if Service_request needs to be sent.
*/
srv_req_diff = cmregprx_compare_srv_req( sd_act, cmregprx_stack_info_ptr, srv_req_local );
9.cmregprx_send_reg_service_req()
/* Get reg cmd. buffer and populate params.
*/
reg_ptr = cm_reg_get_buf_else_err_fatal( CM_SERVICE_REQ );
……
CMREGPRX_MSG_HIGH_6("CMREG->NAS: sub %d stk %d, addl 0x%x, volte_csfb %d, sms_only %d, ph mode_pref 0x%x, Send SERVICE_REQ",
cmregprx_stack_info_ptr->mm_id.asubs_id,
cmregprx_stack_info_ptr->mm_id.stk_id,
reg_ptr->cmd.cm_service_req.additional_info,
reg_ptr->cmd.cm_service_req.voice_domain_param.volte_csfb_enabled,
reg_ptr->cmd.cm_service_req.sms_only,
cmph_get_ss_mode_pref(cmregprx_stack_info_ptr->mm_id.asubs_id));
……
/* Save the CM_SERVICE_REQ in local buffer &
** Post the command to REG.
*/
cmregprx_stack_info_ptr->last_srv_req = reg_ptr->cmd.cm_service_req;
cm_reg_send_cmd( reg_ptr );
10.reg_state_main()
case CM_SERVICE_REQ:
if ( cm_service_req_is_valid(&(reg_cmd_p->cmd.cm_service_req)) )
{
#if defined FEATURE_DUAL_SIM
reg_sim_mode_pref = reg_cmd_p->cmd.cm_service_req.mode_pref;
#endif
reg_state_last_cm_transaction_id = reg_state_cm_transaction_id;
reg_state_cm_transaction_id = reg_cmd_p->cmd.cm_service_req.transaction_id;
reg_state_next_p = reg_state_curr_p->process_cm_service_req
(
&(reg_cmd_p->cmd.cm_service_req)
);
}
从如下定义、声明可以看出process_cm_service_req就是reg_state_process_cm_service_req
reg_state_cm_service_req_f_type* process_cm_service_req;
extern reg_state_cm_service_req_f_type reg_state_process_cm_service_req;
11.reg_state_process_cm_service_req()
REG_LOG_LF_HIGH(REG_TAG,REG_SUB,
"=REG= CM_SERVICE_REQ Scan Scope type=%d network_selection_mode %d"
" Additional_info=%d"
" RAT Enabled BM = 0x%x, BST BM = 0x%x",
msg_p->scan_scope,
msg_p->network_selection_mode,
msg_p->additional_info,
rat_enabled,
bst_enabled);
……
else
{
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= CM_SERVICE_REQ - AUTOMATIC type=%d",
msg_p->parameters.automatic.type);
……
reg_mode_start_plmn_selection
(
msg_p->network_selection_mode,
msg_p->mode_pref,
msg_p->cs_for_request,
msg_p->ps_for_request,
allowed_service_domain
#ifdef FEATURE_GSM_BAND_PREF
,msg_p->band_pref
#endif
,&rat_pri_list
#if defined(FEATURE_LTE) && defined(FEATURE_LTE_REL9)
,((msg_p->parameters.automatic.type == REG_CM_SERVICE_REQ_SRV_MODE_UPDATE) ? REG_CM_SERVICE_REQ_NORMAL : msg_p->parameters.automatic.type)
#else
,(msg_p->parameters.automatic.type)
#endif
#ifdef FEATURE_LTE
, msg_p->sms_only,
addtn_info
#endif
,&msg_p->rat_pri_list_info
);
reg_state_service_state.service_status = SYS_SRV_STATUS_NO_SRV;
12.reg_mode_start_plmn_selection()
……
reg_mode_p->start_plmn_selection
(
network_selection_mode,
mode_pref,
cs_for_request,
ps_for_request,
req_service_domain,
(boolean)((network_selection_mode == SYS_NETWORK_SELECTION_MODE_AUTOMATIC) ? FALSE : TRUE)
#ifdef FEATURE_GSM_BAND_PREF
,band_pref
#endif
,rat_pri_list_info
,type
#ifdef FEATURE_LTE
,sms_only,
additional_info
#endif
,full_band_rat_pri_list_info
);
13.start_plmn_selection()
if(is_rplmn_defined_valid == TRUE)
{
reg_mode_get_3gpp_rat_capabilty(&rplmn_rat_search_order, rat_pri_list_info
);
plmn = rplmn;
plmn = reg_mode_priotitize_hplmn_over_rplmn(rplmn);
if(reg_state_get_power_up_system_selection() == TRUE || type == REG_CM_SERVICE_REQ_MMSS_START_RPLMN)
{
found = reg_mode_determine_first_plmn(&plmn, &rplmn_rat_search_order, rat_pri_list_info, FALSE);
}
}
else if(is_rplmn_undefined == TRUE)
{
reg_mode_get_3gpp_rat_capabilty(&rplmn_rat_search_order, rat_pri_list_info);
plmn = rplmn;
plmn = reg_mode_priotitize_hplmn_over_rplmn(rplmn);
//pass undefined RPLMN, so that we get most preferred PLMN based on current mcc
found = reg_mode_determine_first_plmn(&plmn, &rplmn_rat_search_order, rat_pri_list_info, FALSE);
}
……
reg_send_mmr_reg_req
(
network_selection_mode, /* network_selection_mode */ plmn, /* plmn */
req_service_domain, /* req_service_domain */
mode_pref, /* mode_pref */
cs_for_request, /* cs_for_request */
ps_for_request, /* ps_for_request */
initial_rat /* rat */
#ifdef FEATURE_GSM_BAND_PREF
,band_pref /* band_pref */
#endif
,((temp_rat_pri_list_info == NULL)?rat_pri_list_info:(const sys_rat_pri_list_info_s_type *)temp_rat_pri_list_info)
,reg_req_type
#ifdef FEATURE_LTE
,sms_only,
additional_info
#endif
#ifdef FEATURE_FEMTO_CSG
,SYS_CSG_ID_INVALID
#endif
,scan_info
,full_band_rat_pri_list_info
#ifdef FEATURE_NAS_ECALL
,ecall_support
,ims_emc_support
#endif
,reg_mode_get_detected_bandwidth()
);
reg_mode_plmn_selection_first_attempt = TRUE;
14.reg_mode_determine_first_plmn()
else
{
status = policyman_get_current_mcc((sys_modem_as_id_e_type)reg_sub_id, &pm_found_mcc);
/*
** 1. Get current MCC from PM, check if it is different from RPLMN MCC if yes then find PPLMN matching PM MCC
**
** 2. If RPLMNACT is undefined and if PM MCC is unavailable or RPLMN MCC is same as PM MCC then find RPLMN
** in EHPLMN or PPLMN list if available use its priority order, if not available follow rat priority list order.
*/
if (POLICYMAN_SUCCEEDED(status))
{
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= Policyman reported mcc = %d", pm_found_mcc);
sys_plmn_get_mcc_mnc
(
*plmn,
&plmn_id_is_undefined,
&mnc_includes_pcs_digit,
&plmn_mcc,
&plmn_mnc
);
if(pm_found_mcc != 1665 && pm_found_mcc != 0)
{
rplmn_mcc_match = sys_mcc_same_country(plmn_mcc, pm_found_mcc);
}
}
}
if((!rplmn_mcc_match) || (rplmnact_undefined) || (preferred_foreground_search))
{
……
reg_sim_ehplmn_list_get_ptr(ehplmn_list_ptr);
……
if(sys_mcc_same_country(plmn_mcc, pm_found_mcc)
#ifdef FEATURE_LTE
&& !((reg_mode_is_only_req_rat_present_in_rat_pri_list(rat_pri_list_info,SYS_SYS_MODE_LTE) == TRUE ) &&
(reg_sim_plmn_rat_forbidden(ehplmn_list_ptr->plmn[i],
SYS_RAT_LTE_RADIO_ACCESS,(sys_modem_as_id_e_type)reg_sub_id)))
#endif
#ifdef FEATURE_NR5G_SA
&& !((reg_mode_is_only_req_rat_present_in_rat_pri_list(rat_pri_list_info,
SYS_SYS_MODE_NR5G) == TRUE ) &&
(reg_sim_plmn_rat_forbidden(ehplmn_list_ptr->plmn[i],
SYS_RAT_NR5G_RADIO_ACCESS,(sys_modem_as_id_e_type)reg_sub_id)))
#endif
)
{
*plmn = ehplmn_list_ptr->plmn[i];
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= PLMN to start PLMN selection (%d-%d)", plmn_mcc, plmn_mnc);
found = TRUE;
reg_sim_read_hplmn_rat_search_order(rat_list_3gpp);
break;
}
}
……
/* Compare with OPLMN/UPLMN list*/
preferred_plmn_list_p = reg_sim_read_preferred_plmn_list
(
&preferred_plmn_list_length,
&operator_preferred_plmn_list_length,
&user_preferred_plmn_list_length
);
……
/* If Only RAT enabled in preferred PLMN entry is LTE or preferred PLMN is forbidden/backoff forbidden then skip that PLMN. */
if(sys_mcc_same_country(plmn_mcc, pm_found_mcc) &&
#ifdef FEATURE_DUAL_SIM (!reg_sim_per_subs_plmn_forbidden(preferred_plmn_list_p[index].plmn, (sys_modem_as_id_e_type)reg_sub_id))
#else
(!reg_sim_plmn_forbidden(preferred_plmn_list_p[index].plmn))
#endif
&&
(reg_mode_preferred_plmn_backoff_forbidden(
&preferred_plmn_list_p[index]) == FALSE))
{
number_of_pplmn_supported_rats = reg_mode_get_rat_order
(
rat_pri_list_info,
pplmn_supported_rat_order,
preferred_plmn_list_p[index],
rat_list_3gpp
);
*plmn = preferred_plmn_list_p[index].plmn;
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= PLMN to start PLMN selection (%d-%d)", plmn_mcc, plmn_mnc);
reg_mode_available_plmn_list_populated = TRUE;
reg_mode_reset_available_plmn_list(preferred_plmn_list_p[index].plmn,rat_list_3gpp);
found = TRUE;
supported_rats = number_of_pplmn_supported_rats;
found_index = index;
break;
}
}
else if(rplmnact_undefined)
{
if(sys_plmn_match(preferred_plmn_list_p[index].plmn, *plmn) &&
(!reg_sim_per_subs_plmn_forbidden(
preferred_plmn_list_p[index].plmn,
(sys_modem_as_id_e_type)reg_sub_id)) &&
(reg_mode_preferred_plmn_backoff_forbidden(
&preferred_plmn_list_p[index]) == FALSE))
{
number_of_pplmn_supported_rats = reg_mode_get_rat_order
(
rat_pri_list_info,
pplmn_supported_rat_order,
preferred_plmn_list_p[index],
rat_list_3gpp
);
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= rplmnact_undefined - Match with SIM preferred PLMN ");
found = TRUE;
break;
}
}
……
/* Find in NV preffered list */
preferred_plmn_list_p = reg_nv_get_preferred_plmn_list(&preferred_plmn_list_length);
……
if(sys_mcc_same_country(plmn_mcc, pm_found_mcc) &&
(!reg_sim_per_subs_plmn_forbidden(
preferred_plmn_list_p[index].plmn,
(sys_modem_as_id_e_type)reg_sub_id)) &&
(reg_mode_preferred_plmn_backoff_forbidden(
&preferred_plmn_list_p[index]) == FALSE))
{
number_of_pplmn_supported_rats = reg_mode_get_rat_order
(
rat_pri_list_info,
pplmn_supported_rat_order,
preferred_plmn_list_p[index],
rat_list_3gpp
);
*plmn = preferred_plmn_list_p[index].plmn;
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= PLMN to start PLMN selection (%d-%d)", plmn_mcc, plmn_mnc);
reg_mode_reset_available_plmn_list(preferred_plmn_list_p[index].plmn,rat_list_3gpp);
found = TRUE;
reg_mode_available_plmn_list_populated = TRUE;
supported_rats = number_of_pplmn_supported_rats;
found_index = index;
break;
}
}
else if(rplmnact_undefined)
{
if(sys_plmn_match(preferred_plmn_list_p[index].plmn, *plmn) &&
(!reg_sim_per_subs_plmn_forbidden(
preferred_plmn_list_p[index].plmn,
(sys_modem_as_id_e_type)reg_sub_id)) &&
(reg_mode_preferred_plmn_backoff_forbidden(
&preferred_plmn_list_p[index]) == FALSE))
{
number_of_pplmn_supported_rats = reg_mode_get_rat_order
(
rat_pri_list_info,
pplmn_supported_rat_order,
preferred_plmn_list_p[index],
rat_list_3gpp
);
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= rplmnact_undefined - Match with NV preferred PLMN ");
break;
}
}
}
15.reg_send_mmr_reg_req()
reg_send_mmr_reg_req_msg.message_header.message_set = MS_MM_REG;
reg_send_mmr_reg_req_msg.message_header.message_id = (byte)MMR_REG_REQ;
……
REG_LOG_HF_HIGH(REG_TAG, REG_SUB, "=REG= Scan Info New scan %d, use_timer=%d, scan_time=%d acq_db_rplmn=%d",
scan_info.new_scan,scan_info.use_timer,
scan_info.scan_time,scan_info.acq_db_rplmn);
……
reg_send_last_mmr_reg_req();
16.reg_send_last_mmr_reg_req()
REG_LOG_LF_HIGH(REG_TAG, REG_SUB, "=REG= MMR_REG_REQ PLMN(%u-%u) RAT(0-GSM,1-W,2-LTE,3-TDS,4-NR5G) = %d"
" trans_id %d, scan_scope=%d",
mcc,
mnc,
reg_send_mmr_reg_req_msg.rat,
reg_send_mmr_reg_req_msg.trans_id,
reg_send_mmr_reg_req_msg.scan_scope);
……
reg_send_message(®_send_mmr_reg_req_msg, GS_QUEUE_MM);
17.mm_emm_normal_msg_handler()
void mm_emm_normal_msg_handler(rex_sigs_type sigs,void **mm_process_msg_fn_ptr)
{
if (sigs & MM_CMD_Q_SIG)
{
*mm_process_msg_fn_ptr = (void *)mmcoord_route_mm_emm_messages;
}
18.mmcoord_route_mm_emm_messages()
case MMR_REG_REQ:
……
else
{
#ifdef FEATURE_LTE
/*There is no RAT change, route the REG message to LTE_EMM module*/
emm_process_reg_command( cmd_ptr, emm_ctrl_data_ptr_arg );
#endif
}
19.emm_process_reg_command()
case MMR_REG_REQ:
emm_process_reg_req(reg_msg_ptr, emm_ctrl_data_ptr) ;
break ;
20.emm_process_reg_req()
MM_LOG_HF_HIGH(MM_TAG, MM_SUB, "=EMM= MMR_REG_REQ - Srv Domain %d, NW Sel Mode %d, Type %d, Voice domain pref= %d \
ecall_pending %d ims_emc_pending %d",
reg_req_ptr->req_service_domain,
reg_req_ptr->network_selection_mode,
reg_req_ptr->type,
reg_req_ptr->lte_cs_domain_param.voice_domain_pref,
reg_req_ptr->ecall_support,
reg_req_ptr->ims_emc_support);
……
MM_LOG_HF_HIGH(MM_TAG, MM_SUB, "=EMM= Shared BW valid %d, num_freqs %d, bw[0] 0x%x freq[0] 0x%x",
emm_ctrl_data_ptr->detected_bandwidth.valid,
emm_ctrl_data_ptr->detected_bandwidth.detected_frequency_list.num_freqs,
emm_ctrl_data_ptr->detected_bandwidth.detected_frequency_list.freq[0].bandwidth,
emm_ctrl_data_ptr->detected_bandwidth.detected_frequency_list.freq[0].frequency);
emm_send_rrc_service_req(reg_req_ptr->network_selection_mode,
TRUE,
®_req_ptr->plmn,
TRUE,
TRUE,
FALSE, // e-plmn revisit
TRUE,
FALSE,
0,
emm_ctrl_data_ptr,
®_req_ptr->rat_pri_list_info,
reg_req_ptr->type
#ifdef FEATURE_LTE_REL9
,reg_req_ptr->additional_info
#endif
#ifdef FEATURE_FEMTO_CSG
,reg_req_ptr->csg_id
#endif
,reg_req_ptr->scan_scope
,reg_req_ptr->trm_timeout
,reg_req_ptr->scan_info
,®_req_ptr->full_band_rat_pri_list_info
);
21.emm_send_rrc_service_req()
if(emm_msgr_send((msgr_hdr_s *)rrc_service_req_ptr, sizeof(lte_rrc_service_req_s)) != E_SUCCESS)
{
MSG_FATAL_DS(MM_SUB, "=EMM= emm_msgr_send failed!", 0,0,0 );
}
else
{
mm_calculate_bm_for_bst_and_en_rat(&rrc_service_req_ptr->rat_pri_list,&rat_enabled,&bst_enabled);
MM_LOG_LF_HIGH(MM_TAG, MM_SUB, "EMM: Sent LTE_RRC_SERVICE_REQ scan_scope %d, new_scan %d, use timer %d, timer value %d ecall_pending %d ims_emc_pending %d RAT Enabled BM = 0x%x", \
scan_scope, rrc_service_req_ptr->new_scan, rrc_service_req_ptr->use_search_timer, rrc_service_req_ptr->lte_search_timer,\
rrc_service_req_ptr->ecall_pending,rrc_service_req_ptr->emc_srv_pending,rat_enabled);
}
三、主要日志打印
[ 42/ 0/2] QTRACE 06:56:10.980873 MMODE/STRM/High/CM [ mmoc.c 10530] SUBSC_CHGD: PH_STAT: chg_type 1, sd_initialized 1, sd_init_called 0
[ 42/ 0/2] QTRACE 06:56:10.981922 MMODE/STRM/High/CM [ sdcmd.c 6406] <<<< Returned Action=16384, ss=0, asubs_id=1, net_sel 0, srv_req_type 2, scan_scope 1 <<<<2
[ 42/ 0/2] QTRACE 06:56:10.981940 MMODE/STRM/High/CM [ mmoc.c 4489] SD->MMOC: ACTIVATE: stk0, sub 1 sd_act=16384, delay=0
[ 42/ 0/2] QTRACE 06:56:10.981949 MMODE/STRM/High/CM [ cmregprx.c 15886] MMOC->CMREG: Recvd command: 0, sub 1 stk 0
[ 42/ 0/1] QTRACE 06:56:10.981953 MMODE/STRM/Medium/CM [ cmregprx.c 7086] process_sd_action 16384 on sub 1 stk 0 is_gwl_mode_supp 1 is_1x_hdr_mode_supp 0 sd_mode_pref 0x2202
[ 42/ 0/2] QTRACE 06:56:10.982003 MMODE/STRM/High/CM [ cmregprx.c 3850] CMREG->NAS: sub 1 stk 0, addl 0x0, volte_csfb 1, sms_only 0, ph mode_pref 0x220, Send SERVICE_REQ
[ 47/ 1/2] QTRACE 06:56:10.982025 MM/HighFreq/High/REG [ reg_state.c 1457] DS: SUB 1 =REG= Received message MS: 7 MSG_ID: 22
[ 47/ 0/2] QTRACE 06:56:10.982037 MM/LowFreq/High/REG [ reg_state.c 2968] DS: SUB 1 =REG= CM_SERVICE_REQ Scan Scope type=1 network_selection_mode 0 Additional_info=0 RAT Enabled BM = 0x220, BST BM = 0x2202
[ 47/ 1/2] QTRACE 06:56:10.982660 MM/HighFreq/High/REG [ reg_state.c 4160] DS: SUB 1 =REG= CM_SERVICE_REQ - AUTOMATIC type=22[ 47/ 1/2] QTRACE 06:56:10.983451 MM/HighFreq/High/REG [ reg_mode.c 13229] DS: SUB 1 =REG= Policyman reported mcc = 4602
[ 47/ 1/2] QTRACE 06:56:10.983548 MM/HighFreq/High/REG [ reg_sim.c 4220] DS: SUB 1 =REG= Match between RPLMN and NV PLMN2
[ 47/ 1/2] QTRACE 06:56:10.983708 MM/HighFreq/High/REG [ reg_send.c 1884] DS: SUB 1 =REG= Scan Info New scan 1, use_timer=0, scan_time=0 acq_db_rplmn=02
[ 47/ 0/2] QTRACE 06:56:10.983715 MM/LowFreq/High/REG [ reg_send.c 2163] DS: SUB 1 =REG= MMR_REG_REQ PLMN(460-0) RAT(0-GSM,1-W,2-LTE,3-TDS,4-NR5G) = 2 trans_id 8, scan_scope=12
[ 47/ 1/2] QTRACE 06:56:10.983717 MM/HighFreq/High/REG [ reg_send.c 2180] DS: SUB 1 =REG= MMR_REG_REQ Scan Info New scan 1, use_timer=0, scan_time=02
[ 47/ 1/2] QTRACE 06:56:10.983749 MM/HighFreq/High/MM [ mmutils.c 9337] DS: SUB 1 =MM= Received message MS: 10 MSG_ID: 32
[ 47/ 1/2] QTRACE 06:56:10.983782 MM/HighFreq/High/MM [ emm_reg_handler.c 1070] DS: SUB 1 =EMM= MMR_REG_REQ - Srv Domain 3, NW Sel Mode 0, Type 1, Voice domain pref= 0 ecall_pending 0 ims_emc_pending 02
[ 47/ 1/2] QTRACE 06:56:10.983973 MM/HighFreq/High/MM [ emm_reg_handler.c 1216] DS: SUB 1 =EMM= Setting PS voice on EUTRAN supported bit to TRUE voice_domain_pref = 32
[ 47/ 1/2] QTRACE 06:56:10.984110 MM/HighFreq/High/MM [ emm_reg_handler.c 1833] DS: SUB 1 =EMM= Shared BW valid 0, num_freqs 0, bw[0] 0x0 freq[0] 0x02
[ 47/ 0/2] QTRACE 06:56:10.984158 MM/LowFreq/High/MM [ emm_rrc_if.c 646] DS: SUB 1 EMM: Sent LTE_RRC_SERVICE_REQ scan_scope 1, new_scan 1, use timer 0, timer value 0 ecall_pending 0 ims_emc_pending 0 RAT Enabled BM = 0x2202