int32 get_cust_conf_int32(int32 modu, int8 * puc_var, int32* puc_value)
{
    int32  ret = 0;
#ifdef INI_KO_MODULE
    struct device_node * np;
#endif

	switch (modu)
	{
#ifdef INI_KO_MODULE
        case CUST_MODU_DTS:
        {
            np = of_find_compatible_node(NULL, NULL, CUST_COMP_NODE);
            if (NULL == np)
            {
                INI_ERROR("no compatible node found");
                return INI_FAILED;
            }

            ret = of_property_read_u32(np, puc_var, puc_value);
            if (ret < 0)
            {
                /* driver has log, delete this log */
                INI_DEBUG("conf %s is not exist, ret = %d", puc_var, ret);
                return INI_FAILED;
            }

            INI_DEBUG("conf %s get vale:%d", puc_var, *puc_value);
            return INI_SUCC;
        }
#endif
        default:
        {
            int8  out_str[INI_READ_VALUE_LEN] = {0};

            ret = ini_find_var_value(modu, puc_var, out_str, sizeof(out_str));
            if (ret < 0)
            {
                /* ini_find_var_value has error log, delete this log */
                INI_DEBUG("cust modu didn't get var of %s.", puc_var);
                return INI_FAILED;
            }
            if ( !strncmp(out_str, "0x", strlen("0x")) || !strncmp(out_str, "0X", strlen("0X")))
            {
                INI_DEBUG("get hex of:%s.", puc_var);
                ret = sscanf(out_str, "%x", puc_value);
            }
            else
            {
                ret = sscanf(out_str, "%d", puc_value);
            }

	        if(ret < 0)
            {
	            INI_ERROR("%s trans to int failed", puc_var);
                return INI_FAILED;
            }
            INI_DEBUG("conf %s get vale:%d", puc_var, *puc_value);

            return INI_SUCC;
        }
    }
    return INI_SUCC;
}
int32 get_cust_conf_string(int32 modu, int8 * puc_var, int8* puc_value, uint32 size)
{
    int32 ret = 0;

#ifdef INI_KO_MODULE
    struct device_node *np;
    int32  len;
    int8   out_str[HISI_CUST_NVRAM_LEN] = {0};
#endif

    switch (modu)
    {
#ifdef INI_KO_MODULE
        case CUST_MODU_DTS:
        {
            np = of_find_compatible_node(NULL, NULL, CUST_COMP_NODE);
            if (NULL == np)
            {
                INI_ERROR("no compatible node found");
                return INI_FAILED;
            }

            //ret = of_property_read_string(np, puc_var, (const char **)&out_str);
            len = of_property_count_u8_elems(np, puc_var);
            if (len < 0)
            {
                INI_ERROR("can't get len of value(%s)", puc_var);
                return INI_FAILED;
            }
            len = INI_MIN(len, NUM_OF_NV_PARAMS);
            INI_DEBUG("get len of value(%s), read len is %d", puc_var, len);
            ret = of_property_read_u8_array(np, puc_var, out_str, len);
            if (0 > ret)
            {
                INI_ERROR("conf str:%s property is not found", puc_var);
                return INI_FAILED;
            }
            //strncpy(puc_value, out_str, INI_FILE_PATH_LEN);
            memcpy(puc_value, out_str, len);
            INI_DEBUG("conf string:%s get value:%s", puc_var, puc_value);
            return INI_SUCC;
        }
#endif
        case CUST_MODU_NVRAM:
            #ifdef HISI_NVRAM_SUPPORT
            ret = read_conf_from_nvram(puc_var, puc_value, size);
            #else
            ret = read_conf_from_file(puc_var, puc_value, size);
            #endif
            if (ret < 0)
            {
                INI_ERROR("read nv_conf failed, ret(%d)", ret);
                return INI_FAILED;
            }
            return INI_SUCC;

        default:
        {
            return ini_find_var_value(modu, puc_var, puc_value, size);
        }
    }
    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;
}
int32 main(int32 argc, int8** argv)
{
    int8 auc_value[50];

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

#if 1
	ini_write_var_value(INI_MODU_WIFI, "wifi_ini_mode", "2");
	ini_write_var_value(INI_MODU_WIFI, "wifi_ini_mode", "1");
	ini_write_var_value(INI_MODU_WIFI, "wifi_ini_mode", "0");
	ini_write_var_value(INI_MODU_GNSS, "gnss_ini_mode", "1");
#endif

#if 1
	ini_write_var_value(INI_MODU_BT, "bt_ini_mode", "0");
	ini_write_var_value(INI_MODU_FM, "fm_ini_mode", "0");
	ini_write_var_value(INI_MODU_WIFI_PLAT, "wifi_plat_ini_mode", "0");
	ini_write_var_value(INI_MODU_BFG_PLAT, "bfg_plat_ini_mode", "0");
	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_WIFI, "hcc_rx_lo_queue", 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

	ini_find_var_value(INI_MODU_PLAT, "g_param_version.param_version", auc_value);

    INI_DEBUG("k3v2 .ini config over!\n");
	return 0;
}
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;
}