由于小区广播区分紧急小区广播,对于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是否预置