一篇老文,炒回冷饭 :)
"您好,匪警请拨110,火警请拨119,急救中心请拨120,交通故障请拨122" 。相信很多人在国内手机拨打紧急呼叫号码时都会听到这个熟悉的语音台自动播放。前几年315晚会上也有消费者投诉过国内无卡情况下,甚至用户欠费下,手机拨打紧急呼叫就是个摆设,大家百度下也会发现诸如下类新闻:
原因就在于中国移动和中国联通:只有在SIM卡激活并且获得正常服务(不欠费)的情况下, 紧急呼叫号码(110, 119, 120, 122, 999) 才会被紧急呼叫服务中心处理, 且要求紧急呼叫按照正常呼叫信令流程拨出,否则其余情况(包括无卡,包括拨打国际通用紧急号码911,112)均是按照紧急呼叫信令流程拨出。而对于中国电信:由于CDMA下不分紧急呼叫或者正常呼叫,紧急呼叫号码由网络侧判别是否是紧急呼叫,均会被紧急呼叫服务中心处理。
如果按照紧急呼叫流程拨出后,电话始终在振铃阶段,播放那段经典的回铃音:
总结起来,见下表:
还记得HardCoded类型的ECC么?如果忘记了,请查阅上一期《 紧急呼叫这点事儿 (一) 》。Q平台把中国特色的110、119、120、122、999放到了NV#69737 /nv/item_files/pbm/pbm_hardcoded_ecc_list,见下图
这里绿色椭圆框框中的emergency_mode = 0x02 任何制式均可发起;hardcoded_type = 0x01 不插卡时call type是emergency type,插卡时call type是normal call(CC Setup)。
关于国内这种无卡情况下拨打紧急电话只能自动播放语音台,无法接通,协议上是否有规定对错呢?
摘自3GPP TS22.101 Technical Specification Group Services and System Aspects;Service aspects;Service principles
10.1 General requirements
揪心了,说是留给National Authorities决定,所以国内这种情况你只能默默地接受。那无卡时紧急电话是打到中国移动、中国联通的GWT世界,还是打到中国电信的CDMA世界呢?协议上更是没有规定。
摘自3GPP TS23.122 Non-Access-Stratum (NAS) functions related to Mobile Station (MS) in idle mode
只是提及了在各种原因引起的UE进入受限模式后,只要能Camp到任何满足S准则、C1准则的小区上,无论运营小区的运营商是否是归属PLMN,都可以拨打紧急电话而已。
鉴于国内三大运营商对于无卡紧急呼叫的支持情况,能真正解决文中最开始客投问题的唯一解决方法就是保证无卡情况下紧急呼叫是从中国电信的C网拨打出去。所以Q平台开放了一个接口,NV#73825 /sd/emergency_call_1x_scan_first,当配置为1时,在受限模式下,为紧急呼叫首选CDMA制式。
为了搞清楚这个NV控制如何运行的,咱们先看一段用宏来构建的结构体,你可以简单理解为类似标识语言,只要会读英文,不难理解。
如果UE进入了受限模式,例如深山老林里小运营商无覆盖,只能紧急驻留到大运营商的小区,或例如无卡并且UE发起了紧急呼叫。可以看到会判断CHINA_EMERG_CRITERIA(是否在中国发起紧急呼叫)标准是否满足,如果满足则激活了一个名为NO_SUBS_EMERG_MODE(无卡紧急呼叫模式)脚本(Activate Script的缩写ACT_SCR),否则会激活名为OPR_GW_EMERG_CALL_ORIG_LTD( 受限模式GW紧急呼叫模式)的脚本。顾名思义,在中国受限模式下拨打紧急呼叫,无论是否有卡,UE就当无卡下拨打,这样才会enable UE支持的所有RAT,才有可能拨打到电信的C网。在国外,你就老老实实在GW受限模式下发Emergency Setup吧,人家的网络总是会接通的。
通过代码走读,CHINA_EMERG_CRITERIA标准主要就是4个条件必须满足,即图中的
看看上面的条件3,是不是和NV#73825联系起来了:)。
对应过程的日志片段为:
//发起紧急呼叫
06:53:44.534 CDMA System Determination/High[ sdss.c 9321] =SD= Regular emergency call origination
06:53:44.534 CDMA System Determination/High[ sdcmd.c 12874] =SD= sd_ss_ind_user_ss_pref7 | is_pref_change 3, csg_id -1, csg_rat -1, acq_order_pref 0x6, prl_pref 16383, req_id 0
06:53:44.535 CDMA System Determination/High[ sdss.c 19369] =SD= >>>> Proc user event=4(USER_SS_PREF) >>>>
06:53:44.536 CDMA System Determination/High[ sdss.c 19832] ** Activate user script =ssscr_user_ss_pref_opr_gw_emerg_call_orig_ltd ** on sub 0 stk 0
06:53:44.536 =SD= ss 0, mode 5(WCDMA)
06:53:44.536 =SD= mcc 460
//当前为受限服务,在国内,Full RAT全开
06:53:44.536 =SD= is_curr_sys_china 1, is_in_srv 1, is_cap_3gpp_only 0
// NV#73825 /sd/emergency_call_1x_scan_first(cfg_efs) = 1,最后,条件SDSS_IF_COND_CHINA_EMERG_CRITERIA判定为1
06:53:44.536 CDMA System Determination/High[ sdss.c 43823] =SD=SDSS_IF_COND_CHINA_EMERG_CRITERIA cmp_criteria 0(SDSS_CMP_CRITERIA_EQUAL_TO), bEvalAgainst 1,cfg_efs 1(cfg_emerg_call_1x_scan_first)
//Condition 85(SDSS_IF_COND_CHINA_EMERG_CRITERIA)为1,调用ssscr_called_no_subs_emerg_mode
06:53:44.536 CDMA System Determination/High[ sdssscr.c 23958] =SD= <<IF, if_cond=85(SDSS_IF_COND_CHINA_EMERG_CRITERIA) cmp_criteria=0 if_val=1
06:53:44.536 CDMA System Determination/High[ sdss.c 37144] ** Activate called script =ssscr_called_no_subs_emerg_mode ** on sub 0 stk 0
细心的读者会发现这种作法是不区分110/119/120/122/999这种中国特色紧急号码和112/911这种全球3GPP通用紧急号码的,故拨打3GPP的112也是在中国电信C网呼出。不满足协议要求,即对于112和911这种号码,还是需要在中国移动和中国联通的GWT世界上呼出。所以又加了一个条件,即SDSS_IF_COND_IS_CHN_EMG_NUM(是否是中国特色紧急号码)。
在NO_SUBS_EMERG_MODE(无卡紧急呼叫模式)脚本下,判断SDSS_IF_COND_IS_CHN_EMG_NUM(是否是中国特色紧急号码)是否为真,
如果满足,临时创建的acquistion列表里删除GWT制式项,强制UE搜索CDMA小区,如果不是中国特色紧急号码,在acquistion列表里删除CDMA制式项,只能搜GWT小区。
而这个条件的判真,则非常简单了,就是看是否是110,119,120和122了(某厂商这里漏了999,其实我认为是有必要加上的)
对应过程的日志片段为:
情景1:国内无卡拨打112或者911
06:53:44.536 CDMA System Determination/High[ sdss.c 37144] ** Activate called script =ssscr_called_no_subs_emerg_mode ** on sub 0 stk 0
// condition IS_CHN_EMG_NUM 为 0,即112或者911
06:53:44.538 CDMA System Determination/High =SD= <<IF,if_cond=88(SDSS_IF_COND_IS_CHN_EMG_NUM) cmp_criteria=0if_val=0
//开始获取GWT制式的Cell
06:53:44.538 =SD= rat_info->acq_sys_mode: 5(WCDMA), rat_pri_ptr->priority_list_info[j].band_cap: 0x00020000 0ee80180
06:53:44.538 =SD= rat_info->acq_sys_mode: 3(GSM), rat_pri_ptr->priority_list_info[j].band_cap: 0x00020000 0ee80180
06:53:44.538 =SD= rat_info->acq_sys_mode: 11(TDSCDMA), rat_pri_ptr->priority_list_info[j].band_cap: 0x00000000 00000021
06:53:44.538 =SD= ACQ_GWL:sys_mode = 5, acq_reqd = 0 bst_band_cap = 0x00000000 00000000. band_cap = 0x00020000 0ee80180
06:53:44.538 =SD= ACQ_GWL:sys_mode = 3, acq_reqd = 0 bst_band_cap = 0x00000000 00000000. band_cap = 0x00020000 0ee80180
06:53:44.538 =SD= ACQ_GWL:sys_mode = 11, acq_reqd = 1 bst_band_cap = 0x00000000 00000021. band_cap = 0x00000000 00000021
06:53:44.538 =SD= ACQ_GWL, sel_type=2 domain=0 srv_req_type=4, sub=0
06:53:44.542 DS: SUB 1 =REG= CM_SERVICE_REQ - LIMITED net_sel_mode 2
06:53:44.542 DS: SUB 1 =REG= CM_SERVICE_REQ - LIMITED w/ type 4
// 受限模式下搜索任意TDS小区
06:53:44.544 DS: SUB 1 =REG= MMR_REG_REQ PLMN(0-0) RAT(0-GSM,1-W,2-LTE,3-TDS) = 3 netsel 2, type 2 grat_scan_done 0 trans_id 2 trm_timeout -1
// 在中移动TDS小区上紧急驻留,发起Emergency Setup,收到自动播放的语音台
2017 Aug 31 06:53:44.919 [15] 0xD0E3 TDSCDMA RRC Signaling Packet -- DL_BCCH_BCH Complete SIB List
2017 Aug 31 06:53:46.411 [32] 0x713A UMTS UE OTA -- EMERENCY_SETUP
情景2:国内无卡拨打110等中国特色紧急号码
06:54:04.515 ** Activate called script = ssscr_called_no_subs_emerg_mode ** on sub 0 stk 0
// condition IS_CHN_EMG_NUM 为 1,即中国特色紧急号码
06:54:04.515 =SD= <<IF, if_cond=88(SDSS_IF_COND_IS_CHN_EMG_NUM) cmp_criteria=0if_val=1
06:54:04.515 =SD= Acq start, list=29,type=0,mode=1
//开始获取CDMA制式的Cell
06:54:04.515 =SD= SDSR:1 Sys mode=2(CDMA), band=0x0000000000000003 chan=201
06:54:04.516 =SD= ACQ_CDMA, band=0, chan=201, blksys=6
//在中国电信CDMA小区上发起呼叫,接到人工台
2017 Aug 31 06:54:07.509 [C2] 0x1004 Access Channel Message -- Origination Msg
protocol_rev = 6 (0x6) (IS2000 Rev 0)
service_option = 3 (0x3) (EVRC 8K Voice)
pm = 0 (0x0)
digit_mode = 0 (0x0)
more_fields = 0 (0x0)
num_fields = 3 (0x3)
chari[0] = 1 (0x1) (1)
chari[1] = 1 (0x1) (1)
chari[2] = 10 (0xa) (0)
去年笔者接手了一个案例,无卡拨打110时竟然呼到语音台了。查看相关日志后,发现是由于ROM/ATel下发的模式选择里没有CDMA RAT,导致is_cap_3gpp_only = 1,110在中国移动TDS小区上呼出导致的。
06:47:09.001 ** Activate user script = ssscr_user_ss_pref_opr_gw_emerg_call_orig_ltd ** on sub 0 stk 0
06:47:09.001 =SD= ss 0, mode 11(TDS)
06:47:09.001 =SD= mcc 460
// is_cap_3gg_only竟然为1,没有CDMA RAT!!!!!!!!!!
06:47:09.001 =SD= is_curr_sys_china 1, is_in_srv 1, is_cap_3gpp_only 1
06:47:09.001 =SD= SDSS_IF_COND_CHINA_EMERG_CRITERIA cmp_criteria 0, bEvalAgainst 1, cfg_efs 1
//导致条件CHINA_EMERG_CRITERIA不满足,激活名为OPR_GW_EMERG_CALL_ORIG_LTD( 受限模式GW紧急呼叫模式)的脚本
06:47:09:001 =SD= <<IF, if_cond=85(SDSS_IF_COND_CHINA_EMERG_CRITERIA) cmp_criteria=0 if_val=0
06:47:09.001 ** Activate called script = ssscr_called_opr_gw_emerg_call_orig_ltd ** on sub 0 stk 0
来源:CSDN
作者:知不足而奋进
链接:https://blog.csdn.net/ZhongGuoRenMei/article/details/103674960