void print_device_version(INI_FILE *fp)
{
    int8  version_buff[INI_VERSION_STR_LEN] = {0};
    int32 l_ret;

    l_ret = ini_find_var(fp, INI_MODU_PLAT, INI_VAR_PLAT_BOARD, version_buff, sizeof(version_buff));
    if (INI_FAILED == l_ret)
    {
        version_buff[0] = '\0';
        fp->f_pos = 0;
        return ;
    }
    if (INI_FAILED == ini_check_value(version_buff))
    {
        fp->f_pos = 0;
        return ;
    }
    strncpy(g_board_version.board_version, version_buff, INI_VERSION_STR_LEN);
    INI_INFO("::g_board_version.board_version = %s::", g_board_version.board_version);
    fp->f_pos = 0;

    l_ret = ini_find_var(fp, INI_MODU_PLAT, INI_VAR_PLAT_PARAM, version_buff, sizeof(version_buff));
    if (INI_FAILED == l_ret)
    {
        version_buff[0] = '\0';
        fp->f_pos = 0;
        return ;
    }
    if (INI_FAILED == ini_check_value(version_buff))
    {
        fp->f_pos = 0;
        return ;
    }
    strncpy(g_param_version.param_version, version_buff, INI_VERSION_STR_LEN);
    INI_INFO("::g_param_version.param_version = %s::", g_param_version.param_version);
    fp->f_pos = 0;
    return ;
}
static int __init ini_cfg_init(void)
{

	int8 auc_value[20];

#ifdef CONFIG_HWCONNECTIVITY
    if (!isMyConnectivityChip(CHIP_TYPE_HI110X)) {
        INI_ERROR("cfg ini chip type is not match, skip driver init");
        return -EINVAL;
    } else {
        INI_INFO("cfg init type is matched with hi110x, continue");
    }
#endif

	INI_DEBUG("k3v2 .ini config search init!\n");

    /*init mutex*/
    INI_INIT_MUTEX(&file_mutex);

#ifdef INI_TEST
#if 1
	ini_find_var_value(INI_MODU_WIFI, "wifi_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_GNSS, "gnss_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_BT, "bt_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_FM, "fm_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_ini_mode", auc_value);

	ini_find_var_value(INI_MODU_WIFI, "loglevel", auc_value);
	ini_find_var_value(INI_MODU_WIFI, "data_rate_down", auc_value);
	ini_find_var_value(INI_MODU_WIFI, "data_rate_up", auc_value);

	ini_find_var_value(INI_MODU_GNSS, "gnss_gpsglonass", auc_value);
	ini_find_var_value(INI_MODU_GNSS, "gnss_bdgps", auc_value);

	ini_find_var_value(INI_MODU_BT, "bt_normal", auc_value);

	ini_find_var_value(INI_MODU_FM, "fm_normal", auc_value);

	ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_normal", auc_value);
	
	ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_normal", auc_value);

#endif 
#endif 

	return INI_SUCC;
}
 int32 ini_config_init(int32 modu)
 {
     int8  log_status[10] = {0};
     int32 log_value;
	 int32 l_ret = INI_FAILED;
     INI_FILE *fp = NULL;
	/* init only once */

	if (INI_MODU_PLAT != modu)
    {
        if (NULL == INI_FILE_PATH)
        {
            INI_ERROR("didn't get ini file path!!!");
            return INI_FAILED;
        }
		strncpy(gac_file, INI_FILE_PATH, INI_VAR_FILE_LEN);
		gac_file[INI_VAR_FILE_LEN] = '\0';
		return INI_SUCC;
	}

	INI_DEBUG("open ini file:%s", gac_file);
	fp = ini_file_open(gac_file, "rt");
	if (0 == fp)
	{
		INI_ERROR("open %s failed!!!", gac_file);
        return INI_FAILED;
	}
    INI_DEBUG("open %s succ!", gac_file);

	l_ret = ini_find_var(fp, INI_MODU_PLAT, INI_VAR_LOG_CFG_STATUS, log_status);
	if (INI_FAILED == l_ret)
	{
		ini_file_close(fp);
		return INI_FAILED;
	}

	if (INI_FAILED == ini_check_value(log_status))
	{
		ini_file_close(fp);
		return INI_FAILED;
	}
	sscanf(log_status, "%d", &log_value);
	if (0 > log_value)
	{
		INI_ERROR("log_status value=%d not support!!!", log_value);
		ini_file_close(fp);
		return INI_FAILED;
	}
	INI_INFO("::log_status value=%d::", log_value);
	ini_file_close(fp);
#if 0
	if (INI_VAR_CFG_ENABLE == log_value)
	{
		fp = ini_file_open(INI_FILE_PATH, "rt");
		if (0 == fp)
		{
			INI_ERROR("open %s failed!!!", INI_FILE_PATH);
			return INI_FAILED;
		}

		l_ret = ini_find_var(fp, INI_MODU_PLAT, INI_VAR_LOG_CFG_FILE, gac_cfg_file);
		if (INI_FAILED == l_ret)
		{
			ini_file_close(fp);
			return INI_FAILED;
		}
		if (INI_FAILED == ini_check_value(gac_cfg_file))
		{
			ini_file_close(fp);
			return INI_FAILED;
		}
		//INI_DEBUG("::gac_cfg_file = %s::", gac_cfg_file);
		strncpy(gac_file, gac_cfg_file, INI_VAR_FILE_LEN);
		gac_file[INI_VAR_FILE_LEN] = '\0';
		if (INI_FAILED == access(gac_file, 0))
		{
			INI_ERROR("%s is not exist, init log control system", gac_file);
			l_ret = system("/system/bin/set_log_hisi -S init");
			if (INI_SUCC!= l_ret)
			{
				INI_ERROR("system() run err");
				ini_file_close(fp);
				return INI_FAILED;
			}
		}
	}
	ini_file_close(fp);
#endif

	return INI_SUCC;
 }
int ini_cfg_init(void)
{
//	int8 auc_value[20];
    int32 ret;
    int8 auc_dts_ini_path[INI_FILE_PATH_LEN]  = {0};
    int8 auc_cust_spec_ini_path[INI_FILE_PATH_LEN] = {0};
    int8 auc_cust_comm_ini_path[INI_FILE_PATH_LEN] = {0};

#ifdef CONFIG_HWCONNECTIVITY
    if (!isMyConnectivityChip(CHIP_TYPE_HI110X)) {
        INI_ERROR("cfg ini chip type is not match, skip driver init");
        return -EINVAL;
    } else {
        INI_INFO("cfg init type is matched with hi110x, continue");
    }
#endif

    INI_DEBUG("hi110x ini config search init!\n");

    ret = get_cust_conf_string(CUST_MODU_DTS, PROC_NAME_INI_FILE_NAME, auc_dts_ini_path, sizeof(auc_dts_ini_path));
    if ( 0 > ret )
    {
        INI_ERROR("can't find dts proc %s\n", PROC_NAME_INI_FILE_NAME);
        return INI_FAILED;
    }

    snprintf(auc_cust_spec_ini_path, sizeof(auc_cust_spec_ini_path), "%s%s", CUST_PATH_SPEC, auc_dts_ini_path);
    snprintf(auc_cust_comm_ini_path, sizeof(auc_cust_comm_ini_path), "%s%s", CUST_PATH_COMM, auc_dts_ini_path);

    /*如果ini文件在cust中,则使用cust中的ini文件,否则使用dts中配置的ini文件*/
    /*recovery 模式下,此时ini文件可能不能访问,这种情况下,使用dts里配置的值为默认值*/
    if (ini_file_exist(auc_cust_spec_ini_path))
    {
        snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_cust_spec_ini_path);
        INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name);
    }
    else if (ini_file_exist(auc_cust_comm_ini_path))
    {
        snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_cust_comm_ini_path);
        INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name);
    }
    else
    {
        snprintf(g_ini_file_name, sizeof(g_ini_file_name), "%s", auc_dts_ini_path);
        INI_INFO("%s@%s\n", PROC_NAME_INI_FILE_NAME, g_ini_file_name);
    }

    INI_INIT_MUTEX(&file_mutex);

#ifdef INI_TEST
#if 1
	ini_find_var_value(INI_MODU_WIFI, "wifi_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_GNSS, "gnss_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_BT, "bt_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_FM, "fm_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_ini_mode", auc_value);
	ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_ini_mode", auc_value);

	ini_find_var_value(INI_MODU_WIFI, "loglevel", auc_value);
	ini_find_var_value(INI_MODU_WIFI, "data_rate_down", auc_value);
	ini_find_var_value(INI_MODU_WIFI, "data_rate_up", auc_value);

	ini_find_var_value(INI_MODU_GNSS, "gnss_gpsglonass", auc_value);
	ini_find_var_value(INI_MODU_GNSS, "gnss_bdgps", auc_value);

	ini_find_var_value(INI_MODU_BT, "bt_normal", auc_value);

	ini_find_var_value(INI_MODU_FM, "fm_normal", auc_value);

	ini_find_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_normal", auc_value);
	
	ini_find_var_value(INI_MODU_BFG_PLAT, "bfg_plat_normal", auc_value);

#endif 
#endif 

	return INI_SUCC;
}
static int32 ini_write_mode_value(INI_FILE *fp, int32 modu, int8 * puc_var, int8 * puc_value)
{
	int32 l_len;
	int32 ret;
	int8 auc_tmp[MAX_READ_LINE_NUM + 1] = {0};
	int8 auc_mode_var[INI_STR_MODU_LEN + 1] = {0};
	int8 *puc_val = NULL;
	int8 auc_change_bin[INI_STR_MODU_LEN * 2 + 1] = {0};
	int8 auc_cmd[INI_STR_MODU_LEN * 4 + 1] = {0};
    int16 search_var_len;

	switch (modu)
	{
		case INI_MODU_WIFI:			 
			strncpy(auc_mode_var, INI_MODE_VAR_WIFI, INI_STR_MODU_LEN);
			if ('0' > puc_value[0] || '2' < puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			break;
		case INI_MODU_GNSS:			 
			if ('0' > puc_value[0] || '1' < puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			strncpy(auc_mode_var, INI_MODE_VAR_GNSS, INI_STR_MODU_LEN);
			break;
		case INI_MODU_BT:			 
			if ('0' != puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			strncpy(auc_mode_var, INI_MODE_VAR_BT, INI_STR_MODU_LEN);
			break;
		case INI_MODU_FM:			 
			if ('0' != puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			strncpy(auc_mode_var, INI_MODE_VAR_FM, INI_STR_MODU_LEN);
			break;
		case INI_MODU_WIFI_PLAT:			 
			if ('0' != puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			strncpy(auc_mode_var, INI_MODE_VAR_WIFI_PLAT, INI_STR_MODU_LEN);
			break;
		case INI_MODU_BFG_PLAT:			 
			if ('0' != puc_value[0])
			{
				INI_ERROR("not support mode!!!");
				return INI_FAILED;
			}
			strncpy(auc_mode_var, INI_MODE_VAR_BFG_PLAT, INI_STR_MODU_LEN);
			break;
		default :
			INI_ERROR("not suport modu type!!!");
			break;
	}

	while(1)
	{
        ret = ini_readline_func(fp, auc_tmp);
        if (INI_FAILED == ret)
        {
            INI_ERROR("have end of .ini file!!!");
            return INI_FAILED;
        }

		if (NULL != strstr(auc_tmp, INI_STR_WIFI_NORMAL0))
		{
			INI_ERROR("not find %s!!!", auc_mode_var);
			return INI_FAILED;
		}
		
        ret = ini_check_str(fp, auc_tmp, auc_mode_var);
        if (INI_SUCC == ret)
        {
            INI_DEBUG("have found %s", auc_mode_var);
            break;
        }
        else
        {
            continue;
        }
	}

	puc_val = strstr(auc_tmp, "=");
	if (NULL == puc_val)
	{
		INI_ERROR("has not find = in %s", auc_tmp);
		return INI_FAILED;
	}
	if (INI_FAILED == ini_check_value(puc_val + 1))
	{
		INI_ERROR("not support to write :%s:", auc_tmp);
		return INI_FAILED;
	}
	
	l_len = strlen(auc_tmp);
	search_var_len = strlen(puc_var);
    strncpy(&auc_tmp[search_var_len+1], puc_value, 1);

	if (INI_FAILED == fseek(fp, -l_len, SEEK_CUR))
	{
		INI_ERROR("file seek failed!!!");
		return INI_FAILED;
	}
	if (fputs(auc_tmp, fp))
	{
		INI_DEBUG("puc_write_val :%s: ok", auc_tmp);
	}
	
    if (INI_MODU_WIFI == modu)
    {
        if ('0' == puc_value[0])
        {
            strncpy(auc_change_bin, INI_SDIOBIN_NORMAL, INI_STR_MODU_LEN * 2);
        }
        else if ('1' == puc_value[0])
        {
            strncpy(auc_change_bin, INI_SDIOBIN_PERFORMANCE, INI_STR_MODU_LEN * 2);
        }
        else if ('2' == puc_value[0])
        {
            strncpy(auc_change_bin, INI_SDIOBIN_CERTIFY, INI_STR_MODU_LEN * 2);
        }
        else
        {
            INI_ERROR("not support to bin type %s", auc_change_bin);
            return INI_FAILED;
        }
        sprintf(auc_cmd, INI_STR_MODU_LEN * 4,"cp %s %s", auc_change_bin, INI_SDIOBIN_DEFAULT);
        INI_INFO("exct %s", auc_cmd);
        system(auc_cmd);
    }

	return INI_SUCC;
}