/*
* Copyright 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef CONFIG_LGE_WLAN_QCOM_PATCH
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "wfc_util_log.h"
#include "wfc_util_fctrl.h"
#include "wfc_util_common.h"
#include "cutils/properties.h"
#include "private/android_filesystem_config.h"
#define WFC_UTIL_FEAUTRE_COPY_NV_BIN
#ifdef WLAN_CHIP_VERSION_WCNSS
#ifndef WFC_UTIL_CFG_FILE_NAME
#define WFC_UTIL_CFG_FILE_NAME "/data/misc/wifi/WCNSS_qcom_cfg.ini"
#endif
#ifndef WFC_UTIL_CFG_TEMPFILE_NAME
#define WFC_UTIL_CFG_TEMPFILE_NAME "/system/etc/wifi/WCNSS_qcom_cfg.ini"
#endif
#else /* WLAN_CHIP_VERSION_WCN1314 */
#ifndef WFC_UTIL_CFG_FILE_NAME
#define WFC_UTIL_CFG_FILE_NAME "/data/misc/wifi/WCN1314_qcom_cfg.ini"
#endif
#ifndef WFC_UTIL_CFG_TEMPFILE_NAME
#define WFC_UTIL_CFG_TEMPFILE_NAME "/system/etc/wifi/WCN1314_qcom_cfg.ini"
#endif
#endif /* WLAN_CHIP_VERSION_XXXX */
#ifdef WFC_UTIL_FEAUTRE_COPY_NV_BIN
#ifdef WLAN_CHIP_VERSION_WCNSS
#ifndef WFC_UTIL_NV_BIN_TEMPFILE_NAME
#define WFC_UTIL_NV_BIN_TEMPFILE_NAME "/system/etc/wifi/WCNSS_qcom_wlan_nv.bin"
#endif
#ifndef WFC_UTIL_NV_BIN_FILE_NAME
#define WFC_UTIL_NV_BIN_FILE_NAME "/data/misc/wifi/WCNSS_qcom_wlan_nv.bin"
#endif
#else /* WLAN_CHIP_VERSION_WCN1314 */
#ifndef WFC_UTIL_NV_BIN_TEMPFILE_NAME
#define WFC_UTIL_NV_BIN_TEMPFILE_NAME "/persist/WCN1314_qcom_wlan_nv.bin"
#endif
#ifndef WFC_UTIL_NV_BIN_FILE_NAME
#define WFC_UTIL_NV_BIN_FILE_NAME "/data/misc/wifi/WCN1314_qcom_wlan_nv.bin"
#endif
#endif /* WLAN_CHIP_VERSION_XXXX */
#else /* WFC_UTIL_FEAUTRE_COPY_NV_BIN */
#ifndef WFC_UTIL_NV_BIN_FILE_NAME
#ifdef WLAN_CHIP_VERSION_WCNSS
#define WFC_UTIL_NV_BIN_FILE_NAME "/persist/WCNSS_qcom_wlan_nv.bin"
#else /* WLAN_CHIP_VERSION_WCN1314 */
#define WFC_UTIL_NV_BIN_FILE_NAME "/persist/WCN1314_qcom_wlan_nv.bin"
#endif /* WLAN_CHIP_VERSION_XXXX */
#endif
#endif /* WFC_UTIL_FEAUTRE_COPY_NV_BIN */
#define WFC_UTIL_CFG_TAG_END_OF_CFG "END"
/*
* Station Mode MAC Address
*/
#ifdef WLAN_CHIP_VERSION_WCNSS
#define WFC_UTIL_CFG_TAG_MAC_ADDRESS "Intf0MacAddress="
#else /* WLAN_CHIP_VERSION_WCN1314 */
#define WFC_UTIL_CFG_TAG_MAC_ADDRESS "NetworkAddress="
#endif /* WLAN_CHIP_VERSION_XXXX */
/*
* AP Mode MAC Address
*/
#define WFC_UTIL_CFG_TAG_AP_MAC_ADDRESS "gAPMacAddr="
/*
* Idle Mode Power Save enable/disable for OTA test
*/
#define WFC_UTIL_CFG_TAG_IDLE_MODE_POWER_SAVE "gEnableImps="
/*
* Beacon Mode Power Save enable/disable for OTA test
*/
#define WFC_UTIL_CFG_TAG_POWER_SAVE "gEnableBmps="
/*
* L2 roaming on/off for OTA test
*/
#define WFC_UTIL_CFG_TAG_L2Roaming "gEnableHandoff="
/*
* Heartbeat24 changing for OtA test
*/
#define WFC_UTIL_CFG_TAG_HEARTBEAT24 "gHeartbeat24="
/*
* TAG for end of line
*/
#define WFC_UTIL_CFG_TAG_END_OF_LINE "\n"
#define WFC_UTIL_CFG_LENGHT_MAC (6)
#define WFC_UTIL_CFG_LENGHT_MAC_STRING (WFC_UTIL_CFG_LENGHT_MAC*2)
/*
* persist/WCNSS_qcom_wlan_nv.bin
*
* NV validity bitmap (4 bytes)
* {
* Bit 0 - Regulatory domain tables
* Bit 1 - Fields(including product ID, product bands, number of Tx/Rx chains, MAC address, manufacturing board number)
* Bit 2 - Optimal power per rate table
* Bit 3 - Default regulatory domain and country code
* Bit 4:31 - Reserved; always 0
* }
*
* typedef PACKED_PRE struct PACKED_POST
* {
* //always ensure fields are aligned to 32-bit boundaries
* tANI_U16 productId;
* tANI_U8 productBands; //0: 0.4 GHz, 1: 2.4+5.0 GHz, 2: 5.0 GHz
* tANI_U8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: PRIMA
*
* tANI_U8 numOfTxChains;
* tANI_U8 numOfRxChains;
* tANI_U8 macAddr[NV_FIELD_MAC_ADDR_SIZE];
* tANI_U8 mfgSN[NV_FIELD_MFG_SN_SIZE];
* } sNvFields;
*/
#define WFC_UTIL_NV_BIN_HEADER_LENGTH (4)
#define WFC_UTIL_NV_BIN_POS_PRODUCT_ID (WFC_UTIL_NV_BIN_HEADER_LENGTH + 0)
#define WFC_UTIL_NV_BIN_POS_MAC_ADDR (WFC_UTIL_NV_BIN_HEADER_LENGTH + 6)
#ifdef WLAN_CHIP_VERSION_WCNSS
/* refer to prima/CORE/WDA/src/wlan_nv.c */
static unsigned char nvFilelds_default[6] = {0, 0, /* productId */
1, /* productBands */
2, /* wlanNvRevId */
1, /* numOfTxChains */
2}; /* numOfRxChains */
#else /* WLAN_CHIP_VERSION_WCN1314 */
static unsigned char nvFilelds_default[6] = {1, 0, /* productId */
1, /* productBands */
1, /* wlanNvRevId */
1, /* numOfTxChains */
1}; /* numOfRxChains */
#endif /* WLAN_CHIP_VERSION_XXXX */
/*
* wfc_util_qcom_is_default_mac
*
*
*
* return : it will return 1 if mac_add is default mac address,
* 2 if mac_add is RFT mac address
* or 0 if not.
*/
static int wfc_util_qcom_is_default_mac(char *mac_add)
{
#define WFC_UTIL_CFG_DEFAULT_MAC_RFT "00900CBACD88"
#define WFC_UTIL_CFG_DEFAULT_MAC_00 "000000000000"
#define WFC_UTIL_CFG_DEFAULT_MAC_FF "FFFFFFFFFFFF"
#define WFC_UTIL_CFG_DEFAULT_MAC_QCOM_I0 "000AF58989FF"
#define WFC_UTIL_CFG_DEFAULT_MAC_QCOM_I1 "000AF58989FE"
#define WFC_UTIL_CFG_DEFAULT_MAC_QCOM_I2 "000AF58989FD"
#define WFC_UTIL_CFG_DEFAULT_MAC_QCOM_I3 "000AF58989FC"
#define WFC_UTIL_CFG_DEFAULT_MAC_QCOM_AP "000AF58989EF"
int i, sZarray=0;
/*
* default mac address array
*/
char mac_add_buff[][WFC_UTIL_CFG_LENGHT_MAC_STRING+1] = {
{WFC_UTIL_CFG_DEFAULT_MAC_00},
{WFC_UTIL_CFG_DEFAULT_MAC_FF},
{WFC_UTIL_CFG_DEFAULT_MAC_QCOM_I0}
};
sZarray = sizeof(mac_add_buff) / sizeof(mac_add_buff[0]);
for(i=0; i<sZarray ;i++) {
if(0 == strncmp(mac_add, mac_add_buff[i], WFC_UTIL_CFG_LENGHT_MAC_STRING)) {
wfc_util_log_error("This is default MAC address [%s]", mac_add_buff[i]);
return 1;
}
}
/*
if(1 == wfc_util_is_random_mac(mac_add)) {
wfc_util_log_error("This is Random MAC address");
return 1;
}
*/
if(0 == strncmp(mac_add, WFC_UTIL_CFG_DEFAULT_MAC_RFT, WFC_UTIL_CFG_LENGHT_MAC_STRING)) {
wfc_util_log_error("This is RFT MAC address [%s]", WFC_UTIL_CFG_DEFAULT_MAC_RFT);
return 2;
}
return 0;
}
static void wfc_util_qcom_write_mac(char *mac_add)
{
/*
* Station Mode MAC Address
*/
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_MAC_ADDRESS,
WFC_UTIL_CFG_TAG_END_OF_LINE,
mac_add);
/*
* AP Mode MAC Address
*/
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_AP_MAC_ADDRESS,
WFC_UTIL_CFG_TAG_END_OF_LINE,
mac_add);
return;
}
/*
* When OTA is enabled, power save mode and L2 roaming trigger should be off
*/
static void wfc_util_qcom_write_ota_enable(void)
{
/*
* write Beacon Mode Power Save off and L2 Roaming off
*/
char *PowerSaveOff = "0";
//char *L2RoamingOff = "0";
char *Heartbeat24 = "120";
char string_buff[5];
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_IDLE_MODE_POWER_SAVE,
WFC_UTIL_CFG_TAG_END_OF_LINE,
PowerSaveOff);
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_POWER_SAVE,
WFC_UTIL_CFG_TAG_END_OF_LINE,
PowerSaveOff);
/* We don't need to change this becasue the default value of WFC_UTIL_CFG_TAG_L2Roaming is 0.
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_L2Roaming,
WFC_UTIL_CFG_TAG_END_OF_LINE,
L2RoamingOff);
*/
if(0 < wfc_util_fget_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_HEARTBEAT24,
WFC_UTIL_CFG_TAG_END_OF_LINE,
string_buff,
5)) {
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_HEARTBEAT24,
WFC_UTIL_CFG_TAG_END_OF_LINE,
Heartbeat24);
} else {
wfc_util_log_error("%s is not exist", WFC_UTIL_CFG_TAG_HEARTBEAT24);
}
return;
}
/*
* When OTA is enabled, power save mode and L2 roaming trigger should be off
*/
static void wfc_util_qcom_write_ota_disable(void)
{
/*
* write Beacon Mode Power Save on and L2 Roaming on
*/
char *PowerSaveOff = "1";
//char *L2RoamingOff = "1";
char *Heartbeat24 = "40";
char string_buff[5];
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_IDLE_MODE_POWER_SAVE,
WFC_UTIL_CFG_TAG_END_OF_LINE,
PowerSaveOff);
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_POWER_SAVE,
WFC_UTIL_CFG_TAG_END_OF_LINE,
PowerSaveOff);
/* We don't need to change this becasue the default value of WFC_UTIL_CFG_TAG_L2Roaming is 0.
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_L2Roaming,
WFC_UTIL_CFG_TAG_END_OF_LINE,
L2RoamingOff);
*/
if(0 < wfc_util_fget_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_HEARTBEAT24,
WFC_UTIL_CFG_TAG_END_OF_LINE,
string_buff,
5)) {
wfc_util_fset_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_HEARTBEAT24,
WFC_UTIL_CFG_TAG_END_OF_LINE,
Heartbeat24);
} else {
wfc_util_log_error("%s is not exist", WFC_UTIL_CFG_TAG_HEARTBEAT24);
}
return;
}
static void wfc_util_qcom_write_mac_to_bin(unsigned char *mac_add)
{
unsigned char nvValidityBitmap[WFC_UTIL_NV_BIN_HEADER_LENGTH];
if(0 != wfc_util_ffile_check(WFC_UTIL_NV_BIN_FILE_NAME,
F_OK|R_OK|W_OK)) {
wfc_util_log_error("We don't access file [%s]", WFC_UTIL_NV_BIN_FILE_NAME);
return;
}
memset(nvValidityBitmap, 0, WFC_UTIL_NV_BIN_HEADER_LENGTH);
/*
* Write RFT MAC Address
*/
wfc_util_fset_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
WFC_UTIL_NV_BIN_POS_MAC_ADDR,
mac_add,
WFC_UTIL_CFG_LENGHT_MAC);
/*
* Read NV validity bitmap
*/
if (0 < wfc_util_fget_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
0,
WFC_UTIL_NV_BIN_HEADER_LENGTH,
nvValidityBitmap,
WFC_UTIL_NV_BIN_HEADER_LENGTH)){
/*
* Check whether Fields bit(Bit 1) is set
*/
if (0x02 & nvValidityBitmap[0]) {
wfc_util_log_info("We don't need to write the default value for NvFilelds");
} else {
/*
* Update the Fields bit(Bit 1)
*/
nvValidityBitmap[0] |= 0x02;
wfc_util_fset_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
0,
nvValidityBitmap,
WFC_UTIL_NV_BIN_HEADER_LENGTH);
/*
* Write the default value for NvFilelds
*/
wfc_util_fset_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
WFC_UTIL_NV_BIN_POS_PRODUCT_ID,
nvFilelds_default,
6);
}
} else {
wfc_util_log_error("Read Fail nvValidityBitmap");
}
return;
}
/*
* wfc_util_qcom_reset_mac_to_bin
*
* reset the mac address of nv bin file
*
* return : void
*/
static void wfc_util_qcom_reset_mac_to_bin(void)
{
unsigned char mac_addr[WFC_UTIL_CFG_LENGHT_MAC];
if(0 != wfc_util_ffile_check(WFC_UTIL_NV_BIN_FILE_NAME,
F_OK|R_OK|W_OK)) {
wfc_util_log_error("We don't access file [%s]", WFC_UTIL_NV_BIN_FILE_NAME);
return;
}
if(0 < wfc_util_fget_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
WFC_UTIL_NV_BIN_POS_MAC_ADDR,
WFC_UTIL_CFG_LENGHT_MAC,
mac_addr,
WFC_UTIL_CFG_LENGHT_MAC)) {
if(0x00 == mac_addr[0] && 0x00 == mac_addr[1] && 0x00 == mac_addr[2] &&
0x00 == mac_addr[3] && 0x00 == mac_addr[4] && 0x00 == mac_addr[5])
{
return;
}
}
memset(mac_addr, 0, WFC_UTIL_CFG_LENGHT_MAC);
wfc_util_fset_buffer(WFC_UTIL_NV_BIN_FILE_NAME,
WFC_UTIL_NV_BIN_POS_MAC_ADDR,
mac_addr,
WFC_UTIL_CFG_LENGHT_MAC);
return;
}
static int wfc_util_qcom_write_mac_process(unsigned char *nv_mac_addr, char *mac_add_buff)
{
char nv_mac_add_buff[WFC_UTIL_CFG_LENGHT_MAC_STRING+1];
int is_default_nv_mac = 0;
int is_same_mac = -1;
if (NULL == nv_mac_addr) {
return 0;
}
wfc_util_htoa(nv_mac_addr, WFC_UTIL_CFG_LENGHT_MAC,
nv_mac_add_buff, WFC_UTIL_CFG_LENGHT_MAC_STRING+1);
is_default_nv_mac = wfc_util_qcom_is_default_mac(nv_mac_add_buff);
is_same_mac = strncmp(mac_add_buff, nv_mac_add_buff, WFC_UTIL_CFG_LENGHT_MAC_STRING);
/*
* 1. nv mac address is not a default mac address
* 2. same with mac address of config file
*/
if (((!is_default_nv_mac) && (0==is_same_mac)) ||
/*
* 1. nv mac address is RFT mac address
* 2. same with mac address of config file
*/
((2==is_default_nv_mac) && (0==is_same_mac))
) {
return 1;
}
/*
* 1. nv mac address not a default mac address excepting RFT mac address
* 2. does not same with mac address of config file
*/
else if ((1!=is_default_nv_mac) && (0!=is_same_mac)) {
wfc_util_log_error("Change %s%s", WFC_UTIL_CFG_TAG_MAC_ADDRESS, nv_mac_add_buff);
/*
* Update MAC address
*/
wfc_util_qcom_write_mac(nv_mac_add_buff);
#ifdef WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN
/*
* Write RFT MAC address to nv.bin
*/
if (2==is_default_nv_mac) {
wfc_util_qcom_write_mac_to_bin(nv_mac_addr);
/*
* reset mac address of nv.bin if nv_mac_addr is not RFT mac address
*/
} else {
wfc_util_qcom_reset_mac_to_bin();
}
#else /* WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN */
/*
* Write MAC address to nv.bin
*/
wfc_util_qcom_write_mac_to_bin(nv_mac_addr);
#endif /* WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN */
return 1;
}
return 0;
}
static void wfc_util_qcom_create_random_mac(void)
{
unsigned char random_mac_addr[WFC_UTIL_CFG_LENGHT_MAC];
char mac_add_buff[WFC_UTIL_CFG_LENGHT_MAC_STRING+1];
wfc_util_log_info("wfc_util_qcom_create_random_mac");
wfc_util_random_mac(random_mac_addr);
wfc_util_htoa(random_mac_addr, WFC_UTIL_CFG_LENGHT_MAC, mac_add_buff, WFC_UTIL_CFG_LENGHT_MAC_STRING+1);
wfc_util_qcom_write_mac(mac_add_buff);
#ifdef WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN
wfc_util_qcom_reset_mac_to_bin();
#else /* WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN */
wfc_util_qcom_write_mac_to_bin(random_mac_addr);
#endif /* WFC_UTIL_FEATURE_DO_NOT_WRITE_MAC_TO_BIN */
return;
}
/*
* wfc_util_qcom_check_config
*
* check the qcom wlan driver config file
*
* return : it will return 0 if procedure is success
* or will return -1 if not.
*/
int wfc_util_qcom_check_config(unsigned char *nv_mac_addr)
{
char mac_add_buff[WFC_UTIL_CFG_LENGHT_MAC_STRING+1];
/* make sure driver config file exists */
if(0 > wfc_util_ffile_check_copy(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TEMPFILE_NAME,
0660,
AID_SYSTEM,
/* we use "radio" for gid to access from "rild" for AT cmd. */
AID_WIFI/*AID_WIFI*/)) {
wfc_util_log_error("Fail to Access [%s]", WFC_UTIL_CFG_FILE_NAME);
return -1;
}
#ifdef WFC_UTIL_FEAUTRE_COPY_NV_BIN
char nv_bin_tempfile_name[50];
char baseband[PROPERTY_VALUE_MAX];
// Default use WCNSS_qcom_wlan_nv_flo.bin
property_get("ro.boot.baseband", baseband, "apq");
if(!strncmp(baseband, "apq", 3)) {
sprintf(nv_bin_tempfile_name, "/system/etc/wifi/WCNSS_qcom_wlan_nv_flo.bin");
} else if( !strncmp(baseband, "mdm", 3)){
sprintf(nv_bin_tempfile_name, "/system/etc/wifi/WCNSS_qcom_wlan_nv_deb.bin");
}
wfc_util_log_error("nv bin : %s", nv_bin_tempfile_name);
if(0 > wfc_util_ffile_check_copy(WFC_UTIL_NV_BIN_FILE_NAME,
nv_bin_tempfile_name,
0660,
AID_SYSTEM,
/* we use "radio" for gid to access from "rild" for AT cmd. */
AID_WIFI/*AID_WIFI*/)) {
wfc_util_log_error("Fail to Access [%s]", WFC_UTIL_NV_BIN_FILE_NAME);
return -1;
}
#endif /* WFC_UTIL_FEAUTRE_COPY_NV_BIN */
/*
* Read MAC address from config file
*/
if(0 < wfc_util_fget_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
WFC_UTIL_CFG_TAG_MAC_ADDRESS,
WFC_UTIL_CFG_TAG_END_OF_LINE,
mac_add_buff,
WFC_UTIL_CFG_LENGHT_MAC_STRING+1)) {
wfc_util_log_info("%s%s", WFC_UTIL_CFG_TAG_MAC_ADDRESS, mac_add_buff);
/*
* Write nv mac address
*/
if (1 != wfc_util_qcom_write_mac_process(nv_mac_addr, mac_add_buff)) {
/*
* Check whether this is default mac address or not
*/
if (wfc_util_qcom_is_default_mac(mac_add_buff)) {
/*
* Create random MAC address
*/
wfc_util_qcom_create_random_mac();
}
}
} else {
wfc_util_log_error("%s does not have mac address", WFC_UTIL_CFG_FILE_NAME);
memset( mac_add_buff, 0, WFC_UTIL_CFG_LENGHT_MAC_STRING+1 );
/*
* Write nv mac address
*/
if (1 != wfc_util_qcom_write_mac_process(nv_mac_addr, mac_add_buff)) {
/*
* Create random MAC address
*/
wfc_util_qcom_create_random_mac();
}
}
return 0;
}
/*
* wfc_util_qcom_reset_mac
*
* reset the mac address of config file
*
* return : void
*/
void wfc_util_qcom_reset_mac(void)
{
wfc_util_qcom_write_mac("000000000000");
wfc_util_qcom_reset_mac_to_bin();
return;
}
/*
* wfc_util_qcom_ota_enable
*
* enable ota mode by reconfiguring BMPS and L2Roaming
*
* return : int (boolean)
*/
int wfc_util_qcom_ota_enable(void)
{
wfc_util_qcom_write_ota_enable();
return 1;
}
/*
* wfc_util_qcom_ota_disable
*
* disable ota mode by reconfiguring BMPS and L2Roaming
*
* return : int (boolean)
*/
int wfc_util_qcom_ota_disable(void)
{
wfc_util_qcom_write_ota_disable();
return 1;
}
/*
* wfc_util_qcom_checkt_roaming_off
*
* Check L2Roaming configuration
*
* return : int (boolean)
*/
int wfc_util_qcom_checkt_roaming_off(void)
{
char string_buff[5];
/*
* check whether OTA test is enabled or not.
*/
if(0 < wfc_util_fget_string(WFC_UTIL_CFG_FILE_NAME,
WFC_UTIL_CFG_TAG_END_OF_CFG,
//WFC_UTIL_CFG_TAG_L2Roaming,
WFC_UTIL_CFG_TAG_POWER_SAVE,
WFC_UTIL_CFG_TAG_END_OF_LINE,
string_buff,
5)) {
//wfc_util_log_info("%s%s", WFC_UTIL_CFG_TAG_L2Roaming, string_buff);
wfc_util_log_info("%s%s", WFC_UTIL_CFG_TAG_POWER_SAVE, string_buff);
if(0 == strncmp(string_buff, "0", 1)) {
return 1;
}
}
return 0;
}
#endif /* CONFIG_LGE_WLAN_QCOM_PATCH */