[MTK] Wifi Countrycode 参数确定/修改/查看
文摘 MediaTek 2021-08-26 阅读:18293[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}即可。
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 进行设定;
优先顺序:
- NVRAM 設定country code
- Framework config 設定country code
- 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