xiaoyu/project/app/uvc_app_tiny/uvc_app/param/param.c
2025-03-04 22:36:42 +08:00

140 lines
3.3 KiB
C

// Copyright 2021 Rockchip Electronics Co., Ltd. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "iniparser.h"
#include "uvc_log.h"
#include <pthread.h>
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "param.c"
char g_ini_path_[256];
dictionary *g_ini_d_;
static pthread_mutex_t g_param_mutex = PTHREAD_MUTEX_INITIALIZER;
int rk_param_dump() {
const char *section_name;
const char *keys[32];
int section_keys;
int section_num = iniparser_getnsec(g_ini_d_);
LOG_INFO("section_num is %d\n", section_num);
for (int i = 0; i < section_num; i++) {
section_name = iniparser_getsecname(g_ini_d_, i);
LOG_INFO("section_name is %s\n", section_name);
section_keys = iniparser_getsecnkeys(g_ini_d_, section_name);
for (int j = 0; j < section_keys; j++) {
iniparser_getseckeys(g_ini_d_, section_name, keys);
LOG_INFO("%s = %s\n", keys[j],
iniparser_getstring(g_ini_d_, keys[j], ""));
}
}
return 0;
}
int rk_param_save() {
FILE *fp = fopen(g_ini_path_, "w");
if (fp == NULL) {
LOG_ERROR("%s, fopen error!\n", g_ini_path_);
iniparser_freedict(g_ini_d_);
g_ini_d_ = NULL;
return -1;
}
iniparser_dump_ini(g_ini_d_, fp);
fflush(fp);
fclose(fp);
return 0;
}
int rk_param_get_int(const char *entry, int default_val) {
int ret;
pthread_mutex_lock(&g_param_mutex);
ret = iniparser_getint(g_ini_d_, entry, default_val);
pthread_mutex_unlock(&g_param_mutex);
return ret;
}
int rk_param_set_int(const char *entry, int val) {
char tmp[8];
sprintf(tmp, "%d", val);
pthread_mutex_lock(&g_param_mutex);
iniparser_set(g_ini_d_, entry, tmp);
rk_param_save();
pthread_mutex_unlock(&g_param_mutex);
return 0;
}
const char *rk_param_get_string(const char *entry, const char *default_val) {
const char *ret;
pthread_mutex_lock(&g_param_mutex);
ret = iniparser_getstring(g_ini_d_, entry, default_val);
pthread_mutex_unlock(&g_param_mutex);
return ret;
}
int rk_param_set_string(const char *entry, const char *val) {
pthread_mutex_lock(&g_param_mutex);
iniparser_set(g_ini_d_, entry, val);
rk_param_save();
pthread_mutex_unlock(&g_param_mutex);
return 0;
}
int rk_param_init(char *ini_path) {
LOG_INFO("%s\n", __func__);
pthread_mutex_lock(&g_param_mutex);
g_ini_d_ = NULL;
if (ini_path)
memcpy(g_ini_path_, ini_path, strlen(ini_path));
else
memcpy(g_ini_path_, "/oem/usr/share/rkuvc.ini", strlen("/oem/usr/share/rkuvc.ini"));
LOG_INFO("g_ini_path_ is %s\n", g_ini_path_);
g_ini_d_ = iniparser_load(g_ini_path_);
if (g_ini_d_ == NULL) {
LOG_ERROR("iniparser_load error!\n");
return -1;
}
rk_param_dump();
pthread_mutex_unlock(&g_param_mutex);
return 0;
}
int rk_param_deinit() {
LOG_INFO("%s\n", __func__);
if (g_ini_d_ == NULL)
return 0;
pthread_mutex_lock(&g_param_mutex);
rk_param_save();
if (g_ini_d_)
iniparser_freedict(g_ini_d_);
pthread_mutex_unlock(&g_param_mutex);
return 0;
}
int rk_param_reload() {
LOG_INFO("%s\n", __func__);
pthread_mutex_lock(&g_param_mutex);
if (g_ini_d_)
iniparser_freedict(g_ini_d_);
g_ini_d_ = iniparser_load(g_ini_path_);
if (g_ini_d_ == NULL) {
LOG_ERROR("iniparser_load error!\n");
return -1;
}
rk_param_dump();
pthread_mutex_unlock(&g_param_mutex);
return 0;
}