[DESCRIPTION]

Modem如何修改一个SBP feature的值?

[SOLUTION]

首先,SBP这个feature的作用:

1.是将一些和运营商有关feature可以通过NVRAM的配置来开关,而不用每次开关一些feature都要做flavor build,节省双方的effort;

2.我们在custom_nvram_config函数里有预先内置一些SBP ID对应的运营商,详细内容可以参看:

http://online.mediatek.inc/Pages/FAQ.aspx?List=SW&FAQID=FAQ02941

这样藉由AP的SBP ID设定,透过CCCI带给modem,然后modem通过custom_nvram_config函数来设定对应的NVRAM,客户可以通过custom_nvram_config(),自行修改某个设定的SBP ID,对应的各个feature的开关,从而实现一个load可以对应多个运营商的目的。

其次,如果只是在现有load上开关某一个feature的话,建议可以直接修改modem的对应的NVRAM,而不是通过AP的SBP ID设定的方式。

要找某个feature有没有开关的话,请参看dcc上的文档:SBP_Design.doc.链接为:

http://dms.mediatek.inc:80/Webtop/drl/objectId/0900006f80a220d6

其中,修改modem的对应的nvram的值分两种方式:

1.在code里修改默认值,这样修改的好处就是即使恢复出厂设置,或者升级软件,这个修改也是生效的;

修改默认值分两种case:

[1]这个feature是定义在除NVRAM_EF_SBP_MODEM_CONFIG_LID/NVRAM_EF_SBP_MODEM_DATA_CONFIG_LID的其他NVRAM里的:

以要disable bit 1: slotFormat4 and bit 4: supportEDPDCHpowerInterpolation in “r7_cap2”为例:

查看文档可以看到这个是定义在NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID里,要修改default值的话,首先贵司要了解NVRAM的一些基本内容,比如nvram的dafault值在哪里定义的,首先搜这个LID的total这个参数,以NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID为例,就是搜索NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL,搜到包含这个NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL的.c文件,而不是.h文件,贵司可以看到这个是对NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID的元素的基本定义,其中第四个参数就是default值。

举例,NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID的元素定义就在nvram_data_items.c里,内容如下:

{

NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID,

NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL,

NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_SIZE,

NVRAM_NORMAL(NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_DEFAULT),

NVRAM_CATEGORY_USER,

NVRAM_ATTR_AVERAGE,

#ifdef __UMTS_FDD_MODE__

"UM04",

#endif

#ifdef __UMTS_TDD128_MODE__

"UM05",

#endif

VER(NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID)

},

可以看到第4个参数是:NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_DEFAULT

点进这个default值看一下,贵司可以看到注释里有:r7_cap2:

/* r7_cap2: USIME_R7_Cap2

* bit 8~7: not uSED

* bit 6: supportofPSHandoverToGAN

* bit 5: supportofTxDivOnNonMIMOChannel

* bit 4: supportEDPDCHPowerInterpolation

* bit 3: supportForTwoDRXSchemesInPCH

* bit 2: supportForEDPCCHPowerBoosting

* bit 1: slotFormat4 */

0x00+ /* supportofPSHandoverToGAN: 0x20 supported, 0x00 not supported */

0x00+ /* supportofTxDivOnNonMIMOChannel: 0x10 supported, 0x00 not supported */

0x00+ /* supportEDPDCHPowerInterpolation: 0x08 supported, 0x00 not supported */

0x04+ /* supportForTwoDRXSchemesInPCH: 0x04 supported, 0x00 not supported */

0x02+ /* supportForEDPCCHPowerBoosting: 0x02 supported, 0x00 not supported */

0x01 /* slotFormat4: 0x01 supported, 0x00 not supported */

#endif /* __UMTS_R7__ */

比如说,我现在要disable bit 1,只要修改为:

/* r7_cap2: USIME_R7_Cap2

* bit 8~7: not used

* bit 6: supportofPSHandoverToGAN

* bit 5: supportofTxDivOnNonMIMOChannel

* bit 4: supportEDPDCHPowerInterpolation

* bit 3: supportForTwoDRXSchemesInPCH

* bit 2: supportForEDPCCHPowerBoosting

* bit 1: slotFormat4 */

0x00+ /* supportofPSHandoverToGAN: 0x20 supported, 0x00 not supported */

0x00+ /* supportofTxDivOnNonMIMOChannel: 0x10 supported, 0x00 not supported */

0x00+ /* supportEDPDCHPowerInterpolation: 0x08 supported, 0x00 not supported */

0x04+ /* supportForTwoDRXSchemesInPCH: 0x04 supported, 0x00 not supported */

0x02+ /* supportForEDPCCHPowerBoosting: 0x02 supported, 0x00 not supported */

#endif /* __UMTS_R7__ */

就可以了。

最后,修改完之后,要生效的话,需要升级这个nvram lid的verno,只需要找到这个nvram verno,然后加1就可以了。

以NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID为例,他的verno值就是NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID_VERNO,如果它原来是018的话,将其修改为019就可以了,或者贵司不想修改verno值的话,那total format之后升级,也可以达到更新nvram的目的。

[2]这个feature是定义在除NVRAM_EF_SBP_MODEM_CONFIG_LID/NVRAM_EF_SBP_MODEM_DATA_CONFIG_LID;

以Disable "MM_RETRY_ABNORMAL_LAI_TIMER" and enable "PLMN_SEARCH_AFTER_LU_ABNORMAL"为例:

disable "MM_RETRY_ABNORMAL_LAI_TIMER"对应的是SBP_MM_DISABLE_RETRY_ABNORMAL_LAI,

Enable "PLMN_SEARCH_AFTER_LU_ABNORMAL"对应的是SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL,关于sbp的enum值可参见sbp_md_feature_enum。

像这种修改SBP NVRAM的feature也是一样,先找到default值在哪里,以NVRAM_EF_SBP_MODEM_CONFIG_LID为例,他的defaut值就是

:NVRAM_EF_SBP_MODEM_CONFIG_DEFAULT,通过sbp_md_feature_enum我们可以知道SBP_MM_DISABLE_RETRY_ABNORMAL_LAI是第1个字节第4个bit(从1数起),SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL对应第4个字节的第7个bit,要enable的话,只需要将这个bit改为1,要disable的话,只需改为0。

举例,disable SBP_MM_DISABLE_RETRY_ABNORMAL_LAI的话,只需要找到NVRAM_EF_SBP_MODEM_CONFIG_DEFAULT,看到他的第1个字节第4个bit是这样定义的:

#if defined(__MM_DISABLE_RETRY_ABNORMAL_LAI__)

0x08 |

#endif

之所以还有宏控制,是因为要兼容以前的版本,要disable的话,只需要将这三行全部注释掉:

//#if defined(__MM_DISABLE_RETRY_ABNORMAL_LAI__)

// 0x08 |

//#endif

同时要enable SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL的话 :只需要将

#if defined(__MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL__)

0x40 |

#endif

修改为 :

0x40 |

也就是将判断条件删掉。

最后,nvram的修改要生效的话,需要修改nvram verno值,也就是升级: NVRAM_EF_SBP_MODEM_CONFIG_LID_VERNO。

2.使用META修改,这种方法是修改现有值,而不是默认值,这样修改的弊端是在恢复出厂设置和升级版本之后,会恢复默认值,而不是meta修改后的值,关于meta修改哪一个字节,可以通过方法1介绍的找default值的方法找到这个nvram的结构体定义,从而知道这个feature具体修改哪一个字节或者bit。

android feature开关,Modem如何修改一个SBP feature的值相关推荐

  1. Android程序暂停sh,init进程 解析Android启动脚本init.rc 修改它使不启动android init.rc中启动一个sh文件...

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径: system/core/init,编 ...

  2. Android系统定制源码修改 - MTK平台

                                         Android系统定制源码修改 -  MTK平台  1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...

  3. Android 4.4 CTS 代码修改日记

    1.直接设置问题 estUnknownSourcesOffByDefault fail junit.framework.AssertionFailedError: Deviceshould not s ...

  4. 本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板

    目  录 前言 一.任务书 二.目录 三.论文正文 摘要 ABSTRACT 1.引言 2.系统开发环境 2.1可行性分析 2.2 开发工具介绍 3.需求分析 3.1 功能需求分析 3.2 数据流程图 ...

  5. Android 修改SIM卡默认VOLTE值

    Android 9.0之前版本修改如下 //frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\D ...

  6. 树莓派Android Things物联网开发:创建一个Things项目

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...

  7. 【Android 逆向】修改 Android 系统文件 ( Android 逆向中需要经常修改的文件和目录 | 在 root 后的设备中获取 / 目录的 rw 权限后注意事项 )

    文章目录 一.Android 逆向中需要经常修改的文件和目录 二.在 root 后的设备中获取 / 目录的 rw 权限后注意事项 1.不要随意执行 wipe 命令 2.不要随意执行 rm 命令 一.A ...

  8. Android 系统默认参数的修改

    转自: http://www.th7.cn/Program/Android/201505/447097.shtml 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置, ...

  9. android修改dll文件,Android中dll文件的修改

    Android中dll文件的修改,最近下载了一款非常不错的益智类游戏,一打开,顶部还有广告,最讨厌游戏中还带广告的,点又点不掉,又怕误点,真的看了都烦...作为程序员,就有种想要把它干掉的想法,作为玩 ...

最新文章

  1. 一文了解动态场景中的SLAM的研究现状
  2. WPF:Animation动画--AnimationTiming动画时机
  3. java统计_java统计当前在线数
  4. 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
  5. Oracle连接查询
  6. 4 个关键步骤打造用户满意的产品体验
  7. 华为鸿蒙os手机图片,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  8. C++顺序容器之deque初探
  9. paip.mysql 性能跟iops的以及硬盘缓存的关系
  10. 配置F5 负载均衡(转)
  11. 2018考研数学经验详谈
  12. android购物车计数器,Axure教程:计数器的实战应用场景 —— 商品购件数
  13. Nginx(1)— Nginx工作原理
  14. matlab图像的直方图,Matlab图像直方图相关函数
  15. 肝了一宿才收集的48个超炫酷的 CSS 文字特效,绝对值得收藏!!!
  16. Koo叔说Shader-调试Shader
  17. 一位新竹科学园区朋友的来信
  18. Angular4介绍
  19. cadence怎么使用
  20. mysql日志文件在哪_linux中mysql日志文件在哪里?

热门文章

  1. codesign 想要访问您的钥匙串中的密钥
  2. [源庚]花开的瞬间——大本营全分析
  3. 派网AX50C设备上线做VPN服务器
  4. Flink前世今生和原理
  5. 【色彩管理】YIQ色彩模式详解
  6. Confluence 6 通过用户管理编辑组成员
  7. python 打印日历
  8. 开发一个完整的iOS直播app必须技能
  9. 测序总结,高通量测序名词
  10. 「斜」italics() //使用斜体显示字符串 20140817 ①文本处理