深圳手表价格部落

CBS,国产手机出海你必须知道的

手机通信问题集锦2019-02-11 12:06:41

      随着国内智能手机市场的饱和,越来越多的国产品牌,移动互联网手机厂商选择出海淘金,触角已经遍布到港澳台、印度、东南亚、南美、俄罗斯、西班牙各地,相信明后两年西欧和北美两大市场也会被攻陷。而作为海外国家法规必须支持的Cell Broadcast Service(CBS)功能,以及衍生的PWS系统,如北美CMAS、日本印尼等海啸地震频发地区的ETWS,由于国内三大运营商都不支持,厂商毫无经验地出海常常出现以下三大类问题:


1.    设置中无相关UI,导致用户无法开启或关闭有关频道的小区广播。就在某移动互联网厂商的客户论坛里,Haykey哥亲眼看见有用户漫游到日本,发现亲友的手机会自动播报ETWS消息,而本司手机始终未收到,也无法开启,发的质问帖子;


2.    开启监听的频道不对造成会漏掉一些国家区域强制的小区广播,或者会在一些国家监听不需要的小区广播,造成频繁弹框,影响用户体验,尤其是当用户漫游在俄罗斯、西班牙等非英语国家,当隔三差五就收到一堆乱码文字框,真会不知所然,以为手机中毒了。在下期的真实案例分析里,Haykey哥会带来国内某互联网手机全球化过程中,在俄罗斯遇到的CBS频繁弹框事件;


3.    开启监听的频道正确,但反馈没有接收到CBS小区广播消息;


        由于篇幅长度有限,我将分三期阐述。第一期偏重于理论,只讲GSM和UMTS下的CBS和Common的东西,第二期讲解真实案例以及引出的CBS Duplication Detection,第三期讲LTE下的CMAS和ETWS。首先给大家一个感官认识,来看看Android原生关于CBS的设置 UI是个什么样子。              

好了,废话不多说了,让我们由浅入深地揭开CBS的面纱吧。


1.  什么是CBS?

摘自3GPP TS22.003 Circuit Teleservices supported by a  Public Land Mobile Network (PLMN)   


翻译过来就是内容提供商向PLMN特定区域,或者一个或多个Cell,或者全网推送特殊类别的短消息,跟Point to Point SMS不同,不需要确认,单向,并且会按照一定频率周期性推送,每条CBS消息最多包含93个字符等等。再看看CBS的主干协议23.041是怎么讲的,


摘自3GPP TS23.041 Technical realization of Cell Broadcast Service (CBS)

这里补充到广播CBS消息的网元是从CBE->CBC->基站->终端,一条CBS消息最多由15个CBS page构成,每个CBS page至多82个字节,如果采用GSM7位编码的话,82*8/7=93个字符,并且每个CBS page拥有相同的Message ID和SN号。什么是Message ID呢?



通俗来讲, Message ID就是标识CBS消息类别的,GSM网络下叫做Message Identifier,UMTS叫Message ID。UE只是接收它所希望的放在search list里的某些message ID。这个search list可以存放在USIM卡中的EFcbmi,EFcbmid,EFcbmir或者存放在手机里,如果同时存在,以卡为准。这个手机中的“search list”,在Q平台的体现就是以下4个NVs中的NV#1014,但其余三个也是需要正确配置配合工作的。

NV_SMS_GW_CB_SERVICE_TABLE_I = 1014, 实例:

这个图例中对于NV#1014重要的元素,我已经另加红色标注,这个例子就是UE激活CBS(active_service=1)服务,并且激活(selected=1)监听Message ID=0x32=50(service_from/to)的CBS。

NV_SMS_GW_CB_SERVICE_TABLE_SIZE_I = 1015, 表示NV#1014配置的CBS项数组的个数,上图为1。

NV_SMS_GW_CB_CONFIG_I = 1016,  类似于CBS平台总开关,对于GW CBS必须配置为1,NV#1014才起作用;

NV_SMS_GW_CB_USER_PREF_I = 1017,类似于用户在设置中开关,设置为0代表disable CBS服务;设置为1代表enable CBS服务; 设置为2代表enable CBS服务并且忽略语言设置;


叮叮叮,前方高等预警,因为要提到解决问题2 - 开启监听的频道不对的正确处理方式。TS23.041规定了网络使用了Message ID从4352到6399的区间用于CMAS,ETWS等PWS服务。而被GSMA申请的0到999区间,协议上并没有明确提到对应的具体服务,都是被用来因国家而异的商业用途。

... ...

... ...

可以看到Message ID = 4370 的总统级别的CMAS警报我特意标红提出不能被MMI设置,要始终开启。所以安卓原生设计里的下列一项很显然要移除掉。


协议只规范了某类CBS服务的全集,但是各个国家其实只使用了其中的某些子集,而这些信息收集就要靠知识经验的积累和具体实践了。下面是我总结的某些国家的CBS服务ID:

•  北美需要接收4370- 4389的CMAS

•  日本需要接收4352- 4359的ETWS

•  印度需要接收Message ID = 60的CBS, 除此之外印度的Reliance JIO运营商还支持4352      - 4359(ETWS), 4370 - 4382(CMAS)

•  巴西需要接收Message ID = 50的CBS


因此终端厂商最为明智的作法就是根据当前Serving Cell的MCC(可选MNC)设置和开启关闭的相应的普通CBS service(0 - 999),如用户在巴西,只勾选50频道而置灰60频道,如在中国,直接disable掉CBS服务,另外要默认开启某些国家法规要求的CMAS和ETWS。


说了这么多CMAS,ETWS,PWS这些术语缩写,全称如下:


有了Message ID表示类别,用户就可以在MMI/UI上设置,哪些CBS希望接收,哪些希望过滤。这里Haykey哥需要强调一点,即使用户设置了接收某类CBS,但不意味着UE肯定会收到,要看当时CS和PS域其他服务的状态,如下表所示:


如果UE正在CS通话中,是无法收到CBS消息的。如果有数据业务,要看当时的RRC状态判断。只有当RRC Idle,CELL_PCH和URA_PCH三种状态下才能收到,否则如CELL_DCH或者CELL_FACH是接收不到的,这个是Haykey哥见过的真实案例,如下


摘自3GPP TS25.324  Broadcast/Multicast Control (BMC)

最后,作为一名手机终端Modem/协议/通信工程师,来看看GSM时代的MS,UMTS时代的UE为了支持CBS,都需要哪些功能特性吧。

为了配置,使能或者去使能CBS,安卓平台是通过以下两个RIL请求完成的。

RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG

其中Payload为结构体RIL_GSM_BroadcastSmsConfigInfo序列化后的二进制流。

这个结构体里的元数据意义如注释所说,简单来讲,用户选择监听的CBS频道,通过fromServiceId到toServiceId来表示Message ID范围,fromCodeScheme到toCodeScheme来表示语言范围,selected=1表示激活监听,=0表示去激活监听。这些设置会反映到NV#1014的service_from,service_to和selected中。


有关上面请求的CodeScheme的值,需要多说几句,请看下表

摘自3GPP TS23.038  Alphabets and language-specific information

如果AP在这个请求中下发fromCodeScheme=toCodeScheme=00000001=0x1,查表后得知就是UE只希望接收英语播报的小区广播。


RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION

这个设置很简单,最后会直接反映到NV#1017的值。


2  CBS Message的格式是?

摘自3GPP TS23.041 Technical realization of Cell Broadcast Service (CBS)

 CB Data:

其中Message Type = 1代表普通CBS消息,2为CBS调度消息。Message ID就是前面一直在重点强调的内容。SN有的规范也叫Message Code,DCS, CB data的内容字自其意,我就不一一介绍了。知道了CBS是什么,CBS Message的格式,那么CBC Message是怎么从CBE实体传递到UE终端的呢?


3 传递CBS Message的网络拓扑

GSM: CBE -> CBC -> BSC -> BTS -> MS

UMTS: CBE -> CBC -> RNC -> NodeB -> UE

而基站通过Uu口/Um口是通过什么信道传递到UE/MS,而到底传递到UE/MS的哪层协议栈,然后层层上报到用户UI的呢?


4 传递CBS Message的UE协议栈

摘自3GPP TS25.324  Broadcast/Multicast Control (BMC)

以UMTS为例,通过上图可以清晰地知道CBS Message是通过CTCH逻辑信道承载,传递到RLC UM实体,而RLC UM实体给到L2 BMC层。扩充下,此后L2 BMC再传递给NAS SMSCB,NAS SMSCB -> 多模(若是Q平台就是WMS)-> AP侧。后面我会给大家带来一个完整的从下到上的日志流程来阐述这个过程。

 L2 BMC功能:

从整个BMC协议模型可以看到RRC实际作为协议栈大管家的角色也会通过CBMC服务点来配置L2 BMC栈,这里更多的是DRX调度的信息,以及告诉UE是否小区CBS on还是off。

摘自3GPP TS25.331  RRC Protocol Specification

如果本小区CBS on,那么在NodeB广播的SIB5中会有CBS DRX信息的IE,从上面TS25.331可以看到这个IE只有当另一个信元CTCH indicator = TRUE时才会存在。


CBS DRX相关的信息基站会传递N和K两个参数。

有了N和K两个参数,UE就可以通过下列标黄的公式算出携带CBS Message的CTCH时刻了。


       至此,让我们看一个完整的从下到上的接收小区广播的日志流程来看看实践中如何分析CBS问题。非常抱歉地是Q平台强大的日志工具中都没有吐WL2 BMC层的日志,对于CBS,Q平台的打印全部在NAS SMSCB和WMS模块里。


过程1: 配置CBS

//根据CBS Setting UI用户的设置,AP开始下发配置CBS的请求

19:11:30.165 Android QCRIL/High [             qcril.c   5774] RIL[0][rild] onRequest: UI --- RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG (90) ---> RIL [RID 0, token id 1615, data len 32]   


//用户希望监听接收Message ID=50/4381/6400和Message ID range from 4370 to 4379类型的CBS消息
19:11:29.906 [0x1390] QMI Link 2 RX PDU
Service_Wms {
   MsgType = QMI_WMS_SET_BROADCAST_CONFIG_MSG
    Service_Wms_V1 {
      Tlvs[0] {
         Type = 1
         Length = 1
         BroadcastConfigurationInformation Tlv {
            mode = GW
         }
      }
      Tlvs[1] {
         Type = 16
         Length = 22
         Tlvs {
            num_instances = 4
            Array[0] {
               from_service_id = 50
               to_service_id = 50

               Enum = Selected

            }
            Array[1] {
               from_service_id = 4370
               to_service_id = 4379
               Enum = Selected

            }
            Array[2] {
               from_service_id = 4381
               to_service_id = 4381
               Enum = Selected

            }
            Array[3] {
               from_service_id = 6400
               to_service_id = 6400
               Enum = Selected

            }
         }
      }
   }
}

//根据用户设置,回写CBS NV#1014 search list和NV#1015 size of search list

19:11:29.909 Wireless Messaging Services/High [             wmsnv.c    403] wms_nv_write_wait_per_subs, item=1015   
19:11:29.910 Wireless Messaging Services/High [             wmsnv.c    403] wms_nv_write_wait_per_subs, item=1014   


//并且回写USIM卡中扮演search list的EF文件,CBMI和CBMIR

19:11:29.916 Wireless Messaging Services/High [             wmsbc.c   2977] Maximum Number of CBMI Records = 10 (Cell Broadcast Message Identifier),存储Message ID=50/4381/6400  
19:11:29.916 Wireless Messaging Services/High [             wmsbc.c   2978] Maximum Number of CBMIR Records = 1(Cell Broadcast Message Identifier Range) ,存储Message ID range from 4370 to 4379

19:11:29.933 Wireless Messaging Services/High [            wmssim.c   1453] wms_mmgsdi_wait_for_write_complete_cb: cnf_ptr - 8bb74508 status - 0    

19:11:29.951 Wireless Messaging Services/High [             wmsbc.c   2565] GW CB CONF=1 (平台CBS allowed)  
19:11:29.951 Wireless Messaging Services/High [             wmsbc.c   2566] GW CB PREF=2(activate all并且忽略语言)
19:11:29.864 Wireless Messaging Services/High [             wmsbc.c   2567] GW CB num_sel=4(NV#1014 search list共4项)   
19:11:29.951 Wireless Messaging Services/High [             wmsbc.c   5313] GW CB enable=1 


//AP激活CBS

19:11:30.226 Android QCRIL/High [             qcril.c   5774] RIL[0] onRequest: UI --- RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION (91) ---> RIL [RID 0, token id 1616, data len 4]   

19:11:29.967 [0x1390] QMI Link 2 RX PDU
Service_Wms {
  MsgType = QMI_WMS_SET_BROADCAST_ACTIVATION_MSG
  Service_Wms_V1 {
      Tlvs[0] {
         Type = 1
         Length = 2
         BroadcastActivationInformation Tlv {
            mode = GW
            bc_activate = Activate broadcast
         }
      }
      Tlvs[1] {
         Type = 16
         Length = 1
         BroadcastFilteringInformationTlv {
            Activate All = 1
         }
      }


过程2: 接收到未在search list的CBS类型消息

//RRC状态迁移到URA_PCH,可以监听接收CBS消息

EVENT 19:11:55.101 EVENT_WCDMA_RRC_STATE  Previous state: CELL_FACH, New state: URA_PCH, New rate: 0   


//在系统帧3825到4080中收到承载CBS data的下行RLC UM包
19:12:03.301 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 1 Extnd SFN 3825 Len 19   
19:12:03.301 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 2 Extnd SFN 3825 Len 19   
19:12:05.851 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 3 Extnd SFN 4080 Len 19   
19:12:05.851 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 4 Extnd SFN 4080 Len 19   
19:12:06.011 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 5 Extnd SFN 4096 Len 19   
19:12:06.011 WCDMA L2/High [           rlcdlum.c   1269] RLC_UM_DBG: PDU RX SN 6 Extnd SFN 4096 Len 19   


//L2 BMC上报层间原语DL_BMC_BLOCK_IND指示通知NAS SMSCB
19:12:06.011 NAS CB/High [          cb_state.c   2798] DS: SUB 1 BMC: Received DL_BMC_BLOCK_IND   
19:12:06.011 NAS CB/High [          cb_state.c   2708] DS: SUB 1 BMC: Expected RLC PDU length is 90 at SFN 3825 and End_SFN = 4096    
19:12:06.011 NAS CB/High [        cb_msg_asm.c   2478] DS: SUB 1 CB: Receied CB Message ID 207 (0x207 = 519) 
19:12:06.011 NAS CB/High [        cb_msg_asm.c   2488] DS: SUB 1 CB: Receied CB message GS 00   
19:12:06.011 NAS CB/High [        cb_msg_asm.c   2497] DS: SUB 1 CB: Receied CB Message Code 17 ( SN 0x17 = 23) 
19:12:06.011 NAS CB/High [        cb_msg_asm.c   2507] DS: SUB 1 CB: Received data coding scheme 4   
19:12:06.011 NAS CB/High [        cb_msg_asm.c   2515] DS: SUB 1 CB: Number of pages 1   
19:12:06.011 NAS CB/High [        cb_msg_asm.c   4355] DS: SUB 1 BMC: Received a new message (519,23)  

//由于Message ID = 0x207 = 519不在search list,丢弃 
19:12:06.011 NAS CB/High [        cb_msg_asm.c   4379] DS: SUB 1 Message 207 is not in the search list   
19:12:06.021 NAS CB/High [          cb_utils.c   5149] DS: SUB 1 CB: Received Dropped PDU Indication from WL1


过程3: 接收到在search list的CBS类型消息,并且上报给AP用于显示

19:12:18.761 NAS CB/High [          cb_state.c   2708] DS: SUB 1 BMC: Expected RLC PDU length is 90 at SFN 4861 and End_SFN = 5371    
19:12:18.761 NAS CB/High [        cb_msg_asm.c   2478] DS: SUB 1 CB: Receied CB Message ID 1112   
19:12:18.761 NAS CB/High [        cb_msg_asm.c   2488] DS: SUB 1 CB: Receied CB message GS 00   
19:12:18.761 NAS CB/High [        cb_msg_asm.c   2497] DS: SUB 1 CB: Receied CB Message Code 3C   
19:12:18.761 NAS CB/High [        cb_msg_asm.c   2507] DS: SUB 1 CB: Received data coding scheme 4   
19:12:18.761 NAS CB/High [        cb_msg_asm.c   2515] DS: SUB 1 CB: Number of pages 1   
19:12:18.761 NAS CB/High [        cb_msg_asm.c   4355] DS: SUB 1 BMC: Received a new message (4370,60)   --》Message ID = 4370在search list中 
 

//NAS SMSCB判断在search list中,并且为new CBS Message,传递CBS data给WMS
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7223] ===== CB Page Header (as_id=0): ====   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7224] Msg ID=4370   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7225] Total pages: 1   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7226] Page number: 1   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7227] Geo Scope: 0   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7228] Msg Code: 60   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7230] Dcs.class=4   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7231] Dcs.alphabet=0   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7232] Dcs.language=4   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7245] Language Filter = 0x6573   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7291] WMS_BC_PREF_ACTIVATE_ALL: ignoring language preferences(NV#1017设置为2)   
19:12:18.762 Wireless Messaging Services/High [             wmsbc.c   7341] GW CB hdr MATCHED 


//每条CBS page最多82个字节,93个字符
19:12:18.762 NAS CB/High [        cb_msg_asm.c   2157] DS: SUB 1 BMC: Total length 82   
19:12:18.762 NAS CB/High [        cb_msg_asm.c   2173] DS: SUB 1 BMC: Received page length is equal to 82   
19:12:18.762 NAS CB/High [          cb_utils.c   2339] DS: SUB 1 CB: Sent CB data indication to WMS   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c   1037] Receiving CMAS message with message id: 4370   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    760] Receiving CMAS message with alphabet: 0(GSM 7bit)   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    761] Receiving CMAS message with language: 4(Spanish)   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    762] Receiving CMAS message with geo scope: 0   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    763] Receiving CMAS message with message code: 60   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    764] Receiving CMAS message with page number: 1   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    765] Receiving CMAS message with raw serial number: 960   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    767] Receiving CMAS message with total_page: 1   --》总共只有一页CBS Page 

//多模WMS会一一打印此页CBS page的字符
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    768] Number of chars 93   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 0 ]: M   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 1 ]: e   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 2 ]: n   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 3 ]: s   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 4 ]: a   
19:12:18.762 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 5 ]: j   
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 32 ]:
... ...     
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 86 ]:   
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 87 ]:   
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 88 ]: 7   
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 89 ]: 0   
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 90 ]:    
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 91 ]:    
19:12:18.763 Wireless Messaging Services/High [           wmsdiag.c    773] CMAS Msg[ 92 ]:


19:12:18.763 [0x1391] QMI Link 2 TX PDU
Service_Wms {
   SduCtlFlags = IND

   MsgType = QMI_WMS_SET_EVENT_REPORT_MSG
    Service_Wms_V1 {
      Tlvs[0] {
         Type = 17
         Length = 96
         Tranfer Route MT message Tlv {
            ack_indicator = Do not send ACK
            transaction_id = 4294967295
            format = 7
            len = 88
            Data = {
               3, 192, 17, 18, 4, 17, 205, 178,
               123, 30, 86, 151, 65, 232, 119, 251,
               205, 126, 159, 195, 227, 244, 219, 45,
               203, 129, 90, 160, 228, 217, 253, 150,
               135, 229, 160, 22, 168, 89, 118, 207,
               195, 234, 50, 8, 249, 110, 191, 217,
               239, 115, 120, 156, 126, 187, 65, 45,
               80, 242, 236, 126, 203, 195, 114, 80,
               11, 52, 13, 179, 195, 32, 184, 188,
               94, 22, 135, 231, 160, 105, 176, 24,
               107, 209, 102, 55, 88, 163, 209, 0
            }
         }
      }

}

19:12:19.305 Android QCRIL/Low [     qcril_qmi_sms.c   5871] RIL[0][qmi_cb] qcril_qmi_sms_unsol_ind_cb: function entry   

//通过RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS发送给AP侧显示 
19:12:19.309 Android QCRIL/High [             qcril.c   4264] RIL[0][event] qcril_send_unsol_response_epilog: UI <--- RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS (1021) --- RIL [RID 0, Len 88, (null)] 

最后AP弹框振动,显示西语Mensaje ... ..., 如下:



        最后,你会发现Haykey哥在这里只讲解了GSM和UMTS CBS共通的地方,UMTS CBS,并没有讲GSM CBS,请大家参考以下协议自行脑补,其实都是大同小异的。

3GPP TS44.012 Short Message Service Cell Broadcast (SMSCB)  support on the mobile radio interface

另外,好人做到底,请下载下图所列跟CBS相关的3GPP协议规范,精读后保证你是CBS第一人!:)


注:本人微信号ln17584301,欢迎来自各界同仁的有关任何手机Modem协议问题探讨。

公众号请扫码:

个人微信号请扫码:




















Copyright © 深圳手表价格部落@2017