4. MTK_CMAS_SUPPORT 与 MTK_ETWS_SUPPORT 作用与区别

由于小区广播区分紧急小区广播,对于MtkMms.apk而言,只处理普通小区广播消息  

 SMS_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_CB_RECEIVED" 



 PWS紧急小区广播类包含CMAS和ETWS这两类, 

 AP都是处理 SMS_EMERGENCY_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVED" 



 (1) MTK_CMAS_SUPPORT宏的开启会增加 CMASReceiver.apk App名称为紧急警报 

 /packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastConfigService.java 

 protected void onHandleIntent(Intent intent) {} 预置Channel逻辑在此方法中 



 (2) MTK_ETWS_SUPPORT宏的开启会增加 CellBroadcastReceiver.apk App名称为灾难预警 

 /packages/apps/CellBroadcastReceiver/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java 

 protected void onHandleIntent(Intent intent) {} 预置Channel逻辑在此方法中 

   

 由于CMASReceiver.apk CellBroadcastReceiver.apk 中都有处理4370~4393的CB Message逻辑, 

 因此同时开启两个宏,测试时会发生同时会有2种声音、讯息及震动重叠现象导致PWS测试失败, 

 由于Channel都可以自行定制,因此请只开启MTK_CMAS_SUPPORT = yes,不要同时开启这两个宏。 

   

 5. 预置小区广播的方法 

   

 无论 modem端、CMASReceiver.apk 还是 MtkMms.apk预置,任一处预置上即可 

 由于MtkMms.apk预置有时序问题发生,因此推荐 (1) modem或者 (2) CMASReceiver.apk中预置。 

   

 (1) modem端预置 (推荐): 

 custom\service\nvram\nvram_data_items.c 预设channel: 

 COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT[] 里的这一段 

 #ifndef __CMAS__ 

 0xFF, 0xFF, /* CH 1 , for example: chanel 50 is 0x00, 0x32 */ 

 0xFF, 0xFF, /* CH 2 */ 

 …… 

 改为: 

 #ifndef __CMAS__ 

 0x03, 0x8F, /* CH 1 , for example: chanel 911 */  

 0x03, 0x97, /* CH 2 , for example: chanel 919 */  

 …… 

 注意:(1)#ifndef __CB_CHANNEL_ONLY_STORED_IN_NVRAM__ 和else 中 都有define 

 COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT[]两个数组里面的都改下。 

 (2)这样修改的话,如果是双卡项目,那么双卡预置的内容是一样的,如果需求双卡预置不一样的默认值,那么需进行如下改动: 

 ①请为NVRAM_EF_CB_CH_INFO_LID添加NVRAM_ATTR_MULTI_DEFAULT属性,如下: 

 \custom\service\nvram\nvram_data_items.c(不同平台路径可能不同) 

 { 

 NVRAM_EF_CB_CH_INFO_LID, 

 NVRAM_EF_CB_CH_INFO_TOTAL, 

 NVRAM_EF_CB_CH_INFO_SIZE, 

 NVRAM_NORMAL(COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT), 

 NVRAM_CATEGORY_USER, 

 NVRAM_ATTR_FACTORY_RESET | NVRAM_ATTR_MULTI_DEFAULT,//此处添加NVRAM_ATTR_MULTI_DEFAULT属性 

 "MT46", 

 VER(NVRAM_EF_CB_CH_INFO_LID) 

 }, 

 ②修改COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT[],将原有的默认值放在一个{}中,然后复制一份,放{}中,放后面即可,中间用逗号分隔。举例如下: 

 \custom\service\nvram\nvram_data_items.c(不同平台路径可能不同) 

 如原有的是 

 COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT[]= 

 { 

 …… 

 } 

 那么请修改为 

 COMMON_NVRAM_EF_CB_CH_INFO_DEFAULT[]= 

 { 

 {……},//SIM1 

 {……} //SIM2,复制过来后,请在相应位置对预置参数进行修改。 

 } 

 如果对于双卡预置不同默认值仍有疑问,可以参考我司DCC上面的Modem_NVRAM_to_Customer.pptx中的NVRAM Customize章节,具体是page17~page22,主要是在page20页。 

 (3)不管双卡预置相同默认值的改法,还是双卡预置不同默认值的改法,改完后,如果采用firmware upgrade升级可以直接升级,如果是Download Only或者OTA升级,还需将NVRAM_EF_CB_CH_INFO_LID_VERNO(\interface\service\nvram\nvram_editor_data_item.h)在原有的基础上加1,如原有是"000",请修改为"001",才可以生效。 

   

 (2) AP端预置且PWS范围内4352-6399 (0x1100-0x18FF), 

 并且MTK_CMAS_SUPPORT OR MTK_ETWS_SUPPORT开启后不满足, 

 请客制化CMASReceiver OR CellBroadcastReceiver 

 CellBroadcastConfigService.onHandleIntent()方法中预置channel的逻辑。 

   

 (3) 由于预置Channel必须在CB enabled的前提下才能预置成功, 

 因此AP端预置Channel的思路都是先通过调用 SmsManager activateCellBroadcastSms(true)开启CB, 

 之后构造 SmsBroadcastConfigInfo[]实例传入预置Channel信息, 

 再次调用SmsManager setCellBroadcastSmsConfig()方法,通过判断此方法反馈的boolean值为ture, 

 则表明modem预置Channel成功。 

 若默认要求CB为关闭状态,预置Channel完成后,再次调用SmsManager activateCellBroadcastSms(false)关闭CB即可。 

   

 (4) AP端预置 (不推荐,由于AP端预置和SIM卡与SMS初始化状态紧密相关,有很多无法预期的情况导致预置失败): 
参考 FAQ13893 android L小区广播预置方法 

6. 默认开启小区广播的方法


 modem端修改:custom\service\nvram\nvram_cust_pack.c 设置CB service 默认是打开的
 COMMON_NVRAM_EF_SMSAL_COMMON_PARAM_DEFAULT[]
 #ifdef __UE_SIMULATOR__
 0x01, 0x01, /* CB setting - ON,CB all language - ON */
 #else
 0x00, 0x01, /* CB setting - OFF,CB all language - ON */
 #endif
 里这一句改为
 #ifdef __UE_SIMULATOR__
 0x01, 0x01, /* CB setting - ON,CB all language - ON */
 #else
 0x01, 0x01, /* CB setting - ON,CB all language - ON */
 #endif
7. 小区广播常用AT命令 (radio_log中search)
  
 (1) 查询小区广播信息 query CB config info
 AT> AT+CSCB?
 AT< +CSCB: <mode>,<mids>,<dcss>,<all language on>
 <mode> : 0 enabled, 1 disabled.
 0 <mids><dcss> are accepted -> CB ON
 1 <mids><dcss> are not accepted -> CB OFF
 <mids> : All available CBM Message Identifier, default is empty : “”
 e.g. “0,1,5,320-478,922”
 <dcss> : CBM Data Coding Scheme, default is empty : “”
 e.g. “0-3,5”
 <all language on>:
 0 only <dcss> language is accepted
 1 all language is accepted


 e.g. 
 CB为关闭状态,没有任何channel信息
 AT> AT+CSCB?
 AT< +CSCB: 1,"","0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,32,33,34,35,36,15,0,1,2,3",1


 CB为开启状态,预置有50,100,200,201这四个Channel
 AT> AT+CSCB?
 AT< +CSCB: 0,"50,100,200-201","0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,32,33,34,35,36,15",1


 (2) AT+CBM 手机接收到小区广播信息
 e.g. 
 AT< +CBM: 22
 AT< 000100C80111E8329BFD068140201008040281402010
 [UNSL]< UNSOL_RESPONSE_NEW_BROADCAST_SMS 000100c80111e8329bfd068140201008040281402010 [SUB0]



因此测试手机接收小区广播前,需要确认 (1) CB是否开启 (2) 待接收的Channel是否预置