[MTK] Wifi Countrycode 参数确定/修改/查看

文摘 MediaTek 2021-08-26 阅读:1007

[DESCRIPTION]

Country code代表的是device扫描的channel list,与其他的属性(ex:Tx power)无关,在软件版本中,如果没有设定过country code 的值,则默认值为{0x00,0x00},存储在nvram中;按照SW设计流程, 通过firemware读取nvram中存储的属性值,当country code默认为0时,firmware会自动将country code设为EU信道,规定为1~13;类似于没有设置MAC地址时,firmware会自动随机生成一个mac地址一样;

一. Country code的值如何确定:

1)查找需要确定的国家的国家代码,如土耳其,国际域名缩写为TR,其他国家码可在如下链接查找:http://ipseeker.cn/wcode.php;

2)对照ASCII表,查找对应字母的ASCII 16进制的值:T(0x54)R(0x52);

如此,即确定了土耳其的国家代码为{0x54, 0x52};

二.确定该软件版本是否支持特定的国家:

  在如下路径的文件中:

alps/mediatek/kernel/drivers/conn_soc/drv_wlan/mt_wifi/wlan/mgmt/rlm_domain.c

如土耳其(TR),则查找COUNTRY_CODE_TR,如果能够查找到,则表示是支持土耳其的channellist,则在上层设定country code值时,可以直接写为TR,如何写入,操作如下:

三. 如何写入country code:

1)通过Meta Tool 对NVRAM上存储的数据结构中的 aucCountryCode值进行修改,例如需要支持土耳其,则将aucCountryCode设为{0x54, 0x52}即可。

1.bmp
2) 通过修改代码进行配置

修改下列位置:

alpsmediatekcustom{ProjectName}cgencfgdefaultCFG_WIFI_Default.h

选择使用的chip的结构体

WIFI_CFG_PARAM_STRUCT stWifiCfgDefault =

{

      0x0103,                                /* Own Version */

      0x0000,                                /* Peer Version */

      { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },       /* MAC ADDRESS */

      { 0x00, 0x00 },                          /* COUNTRY CODE */

特别注意:修改完成后,需要build工程,下载进手机之前要先format,然后再download,否则修改不会生效。

4.如何确认device中country code:

方法一:查看kernellog

录一份打开wifi过程的log,会有如下信息:

[  262.824837] (1)263:mtk_wmtd rlmDomainGetDomainInfo: (RLM INFO) Domain: map=0, idx=1, code=0x5553

code=0x5553 表示当前的country code设定为 US

方法二:进工程模式查看country code值

路径如下:engineerMode-->Connectivity-->wifi-->NVRAM-->

  1.WORD Access

      addr :5 

      click read 得到country code 的值,从高位开始显示;

  2.byte string access

     addr:a

     length:2

     click read 得到country 的值,从低位开始显示;

有代表性国家信道的:

US 支持1~11 channle 此处log显示code=0x5553

EU 支持1~13 channle 此处log显示code=0x4555

JP  支持1~14 channle  此处log显示code=0x4a50

MTK平台

按照我司的设计,如果插入了sim卡,在手机识别到SIM卡之后,会优先获取sim卡中的country code信息,这里的country code信息即是指SIM卡在被出售之前,由SIM卡中心写入的一个重要数据,为国际移动用户识别号(IMSI),IMSI共有15位,结构为MCC+MNC+MSIN,其中MCC:Mobile Country Code,即移动国家码,由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,根据移动国家码device对country code进行sim所属国家的channellist设定,如果不能获取到或者没有插入sim卡,则按照nvram中存储的country code 值进行设定;

在插入sim卡的情况下,会通过如下命令确认,是从sim卡中获取到的country code值:

WifiHW  : enter -->wifi_send_command cmd=DRIVER COUNTRY CN

L版本

在L版本上,新增加了一种设定country code 的来源---通过获取设备所在位置的基站信息得到country code 值,从而对手机的country code 进行设定;

优先顺序: 

  1. NVRAM 設定country code
  2. Framework config 設定country code
  3. Framework透過基地台取得國碼,並設定country code

 順序是1->2->3,后面的設定會把前面的覆盖掉 

如果要確保客戶country code不會被改掉的話,需要disable 功能3,因為3是會自動更新,沒辦法控制

N版本关于country code 有新的设定:

/frameworks/base/core/res/res/values/config.xml

<bool translatable="false" name="config_wifi_revert_country_code_on_cellular_loss">true</bool>

 此feature 开关如果设为true,在不插入sim 卡同时处于屏蔽室的状态下,会使用之前保留的country code ;

例如:最开始,手机插入美国sim 卡,会设定country code 为US ;当手机关机移动到中国的屏蔽房,并将卡拔掉,开wifi 时,依然会设定为US;

如果不需要达到此状态,则可以将feature 开关修改为false;

Android P版可以透過以下方式從framework設country code

Turn on airplane mode

set: adb shell service call wifi 27 s16 "US"

get: adb shell service call wifi 28


0条评论

© 2021 芯缘异码. Powered by Typecho