背景
硬件差异的前提,wifi功率会有差异,软件上可以做功率补偿方案,但是需要知道整机状态,然后设定一个flag, 软件根据flag,选择使用预制的多NVRAM,简单点来说就是
“根据不同条件,加载不同的NVRAM”
实现原理
1,根据不同的射频参数生成不同的NVRAM
2,WLAN开机加载时根据条件选择对应的NV
软件实现
一、生成不同的NVRAM
生成不同的NVRAM ,需要射频提供不同的射频参数
MTK平台 默认的射频参数路径为vendor/mediatek/proprietary/custom/selene/cgen/cfgdefault/CFG_WIFI_Default.h
阅读源码,生成的nvram就是把WIFI_CFG_PARAM_STRUCT结构体类型 stWifiCfgDefault变量的值写入文件的过程,所以我们可以仿照这个定义不同的变量,设置不同的射频参数
比如CFG_WIFI_Default_High2DB.h (stWifiCfgHigh), CFG_WIFI_Default_Low2DB.h (stWifiCfgLow)
1,添加射频参数
WIFI_CFG_PARAM_STRUCT stWifiCfgDefault =
{
0x0001, /* Part1OwnVersion | offset:0x0000 *//* Part1OwnVersion | offset:0x0001 */
0x0009, /* Part1PeerVersion | offset:0x0002 *//* Part1PeerVersion | offset:0x0003 */
0x00, /* MAC address 0 | offset:0x0004 */
0x00, /* MAC address 1 | offset:0x0005 */
0x00, /* MAC address 2 | offset:0x0006 */
0x00, /* MAC address 3 | offset:0x0007 */
0x00, /* MAC address 4 | offset:0x0008 */
0x00, /* MAC address 5 | offset:0x0009 */
WIFI_CFG_PARAM_STRUCT stWifiCfgHigh =
{
0x0001, /* Part1OwnVersion | offset:0x0000 *//* Part1OwnVersion | offset:0x0001 */
0x0009, /* Part1PeerVersion | offset:0x0002 *//* Part1PeerVersion | offset:0x0003 */
0x00, /* MAC address 0 | offset:0x0004 */
0x00, /* MAC address 1 | offset:0x0005 */
0x00, /* MAC address 2 | offset:0x0006 */
0x00, /* MAC address 3 | offset:0x0007 */
0x00, /* MAC address 4 | offset:0x0008 */
0x00, /* MAC address 5 | offset:0x0009 */
WIFI_CFG_PARAM_STRUCT stWifiCfgLow =
{
0x0001, /* Part1OwnVersion | offset:0x0000 *//* Part1OwnVersion | offset:0x0001 */
0x0009, /* Part1PeerVersion | offset:0x0002 *//* Part1PeerVersion | offset:0x0003 */
0x00, /* MAC address 0 | offset:0x0004 */
0x00, /* MAC address 1 | offset:0x0005 */
0x00, /* MAC address 2 | offset:0x0006 */
0x00, /* MAC address 3 | offset:0x0007 */
0x00, /* MAC address 4 | offset:0x0008 */
0x00, /* MAC address 5 | offset:0x0009 */
2,添加NVRAM LID
vendor/mediatek/proprietary/custom/selene/cgen/inc/Custom_NvRam_LID.h
/* the definition of file LID */
typedef enum
{
AP_CFG_RDCL_FILE_AUDIO_LID=AP_CFG_CUSTOM_BEGIN_LID, //AP_CFG_CUSTOM_BEGIN_LID: this lid must not be changed, it is reserved for system.
AP_CFG_CUSTOM_FILE_GPS_LID,
AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID,
AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID,
AP_CFG_RDEB_FILE_WIFI_LID,
AP_CFG_RDEB_FILE_WIFIHIGH_LID, &nb