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_write_var_value(int32 modu, int8 * puc_var, int8 * puc_value) { INI_FILE *fp = NULL; int32 l_ret; if (NULL == puc_var || '\0' == puc_var[0] || NULL == puc_value ) { INI_ERROR("check if puc_var and puc_value is NULL or blank"); return INI_FAILED; } if (0 == init_mutex_flag) { INI_INIT_MUTEX(&file_mutex, NULL); init_mutex_flag = 1; } INI_MUTEX_LOCK(&file_mutex); fp = ini_file_open(INI_FILE_PATH, "r+"); if (0 == fp) { INI_ERROR("open %s failed!!!", INI_FILE_PATH); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } l_ret = ini_write_mode_value(fp, modu, puc_var, puc_value); if (INI_FAILED == l_ret) { ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); 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 ini_find_var_value(int32 modu, int8 * puc_var, int8* puc_value, uint32 size) { INI_FILE *fp = NULL; #ifdef INI_KO_MODULE static int32 sl_once = 1; #endif #ifdef INI_TIME_TEST struct timeval tv[2]; #endif int32 l_ret; if (NULL == puc_var || '\0' == puc_var[0] || NULL == puc_value) { INI_ERROR("check if puc_var and puc_value is NULL or blank"); return INI_FAILED; } #ifdef INI_TIME_TEST do_gettimeofday(&tv[0]); #endif #ifndef INI_KO_MODULE if (0 == init_mutex_flag) { INI_INIT_MUTEX(&file_mutex, NULL); init_mutex_flag = 1; } #endif INI_MUTEX_LOCK(&file_mutex); #ifndef INI_KO_MODULE l_ret = ini_config_init(modu); if (INI_FAILED == l_ret) { INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #endif fp = ini_file_open(INI_FILE_PATH, "rt"); if (0 == fp) { fp = NULL; INI_ERROR("open %s failed!!!", INI_FILE_PATH); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #ifdef INI_KO_MODULE /* init g_board_version.board_version and g_param_version.param_version * just once while call ini_find_var_value */ if (sl_once) { print_device_version(fp); sl_once = 0; } #endif l_ret = ini_find_mode(fp, modu, puc_var, puc_value, size); if (INI_FAILED == l_ret) { ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } else if (INI_SUCC_MODE_VAR == l_ret) { INI_DEBUG("::return %s:%s::", puc_var, puc_value); ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return ini_check_value(puc_value); } /* find puc_var in .ini return puc_value */ l_ret = ini_find_var(fp, modu, puc_var, puc_value, size); if (INI_FAILED == l_ret) { puc_value[0] = '\0'; ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #ifdef INI_TIME_TEST do_gettimeofday(&tv[1]); INI_DEBUG("time take = %ld", (tv[1].tv_sec - tv[0].tv_sec) * 1000 + (tv[1].tv_usec - tv[0].tv_usec) / 1000); #endif ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); /* check blank space of puc_value */ if (INI_SUCC == ini_check_value(puc_value)) { INI_DEBUG("::return %s:%s::", puc_var, puc_value); return INI_SUCC; } return INI_FAILED; }
int32 ini_find_var_value(int32 modu, int8 * puc_var, int8* puc_value) { INI_FILE *fp = NULL; #ifdef INI_KO_MODULE static int32 sl_once = 1; #endif #ifdef INI_TIME_TEST struct timeval tv[2]; #endif int32 l_ret; if (NULL == puc_var || '\0' == puc_var[0] || NULL == puc_value) { INI_ERROR("check if puc_var and puc_value is NULL or blank"); return INI_FAILED; } #ifdef INI_TIME_TEST do_gettimeofday(&tv[0]); #endif #ifndef INI_KO_MODULE if (0 == init_mutex_flag) { INI_INIT_MUTEX(&file_mutex, NULL); init_mutex_flag = 1; } #endif INI_MUTEX_LOCK(&file_mutex); strncpy(gac_file, INI_FILE_PATH, INI_VAR_FILE_LEN); gac_file[INI_VAR_FILE_LEN] = '\0'; #ifndef INI_KO_MODULE l_ret = ini_config_init(modu); if (INI_FAILED == l_ret) { INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #endif fp = ini_file_open(gac_file, "rt"); if (0 == fp) { fp = NULL; INI_ERROR("open %s failed!!!", INI_FILE_PATH); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #ifdef INI_KO_MODULE /* init g_board_version.board_version and g_param_version.param_version * just once while call ini_find_var_value */ if (sl_once) { int8 version_buff[32] = {0}; INI_DEBUG("sl_once = %d", sl_once); sl_once = 0; l_ret = ini_find_var(fp, INI_MODU_PLAT, INI_VAR_PLAT_BOARD, version_buff); if (INI_FAILED == l_ret) { version_buff[0] = '\0'; ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } if (INI_FAILED == ini_check_value(version_buff)) { ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } memset(g_board_version.board_version, 0, sizeof(g_board_version.board_version)); strncpy(g_board_version.board_version, version_buff, sizeof(g_board_version.board_version) - 1); INI_DEBUG("::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); if (INI_FAILED == l_ret) { version_buff[0] = '\0'; ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } if (INI_FAILED == ini_check_value(version_buff)) { ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } INI_DEBUG("::g_param_version.param_version = %s::", g_param_version.param_version); memset(g_param_version.param_version, 0, sizeof(g_param_version.param_version)); strncpy(g_param_version.param_version, version_buff, sizeof(g_param_version.param_version) - 1); fp->f_pos = 0; } #endif l_ret = ini_find_mode(fp, modu, puc_var, puc_value); if (INI_FAILED == l_ret) { ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } else if (INI_SUCC_MODE_VAR == l_ret) { INI_DEBUG("::return %s:%s::", puc_var, puc_value); ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return ini_check_value(puc_value); } /* find puc_var in .ini return puc_value */ l_ret = ini_find_var(fp, modu, puc_var, puc_value); if (INI_FAILED == l_ret) { puc_value[0] = '\0'; ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); return INI_FAILED; } #ifdef INI_TIME_TEST do_gettimeofday(&tv[1]); INI_DEBUG("time take = %ld", (tv[1].tv_sec - tv[0].tv_sec) * 1000 + (tv[1].tv_usec - tv[0].tv_usec) / 1000); #endif ini_file_close(fp); INI_MUTEX_UNLOCK(&file_mutex); /* check blank space of puc_value */ if (INI_SUCC == ini_check_value(puc_value)) { INI_DEBUG("::return %s:%s::", puc_var, puc_value); return INI_SUCC; } return INI_FAILED; }