/* * 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 */