当前位置: 首页 > article >正文

rkipc main.c 中 rk_param_init函数分析

rk_param_init函数

这个函数是用来读取配置文件进行参数配置
这个函数在
luckfox-pico/project/app/rk_smart_door/smart_door/common/uvc/param/param.c

这个函数在main函数中被调用

//通过-c 配置文件路径  把配置文件传进来
case 'c':
			rkipc_ini_path_ = optarg;
//调用,根据文件中的配置项配置参数
rk_param_init(rkipc_ini_path_);

### 函数分析

```c
int rk_param_init(char *ini_path) {
  LOG_INFO("%s\n", __func__);
  //加锁
  pthread_mutex_lock(&g_param_mutex);
  g_ini_d_ = NULL;
  //存在配置文件,读路径进g_ini_path_
  if (ini_path)
    memcpy(g_ini_path_, ini_path, strlen(ini_path));
  //不存在则读缺省的
  else
    memcpy(g_ini_path_, "/usr/share/rkuvc.ini", strlen("/usr/share/rkuvc.ini"));
  LOG_INFO("g_ini_path_ is %s\n", g_ini_path_);

  //解析出所有的参数,放在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;
}

调用

g_ini_d_ 保存了所有的参数,要查看某一项的值,可以根据param.h里面的函数调用

extern dictionary *g_ini_d_;

//获取名为entry整型参数 
int rk_param_get_int(const char *entry, int default_val);
//设置名为entry整型参数 
int rk_param_set_int(const char *entry, int val);

//获取名为entry双精型参数
int rk_param_get_double(const char *entry, double default_val);

//获取名为entry字符型参数
const char *rk_param_get_string(const char *entry, const char *default_val);

//设置名为entry字符型参数
int rk_param_set_string(const char *entry, const char *val);

//将当前参数保存为文件
int rk_param_save();

//从指定ini文件初始化
int rk_param_init(char *ini_path);

//反初始化
int rk_param_deinit();

//rk_param_reload
int rk_param_reload();

例如 ini文件中

[video.source]
enable_aiq = 1
enable_vo = 0
vo_dev_id = 3 ; 0 is hdmi, 3 is mipi
enable_ivs = 1
enable_jpeg = 1
enable_venc_0 = 1
enable_venc_1 = 1
enable_venc_2 = 0
enable_npu = 0
npu_fps = 10
enable_rtsp = 1
enable_rtmp = 0
rotation = 0 ; available value:0 90 180 270

可以通过

rk_param_get_int("video.source:enable_npu", 0)

获得 enable_npu 的值得,用来控制npu开关。

关于iniparser_load函数

这个函数位于
luckfox-pico/project/app/component/rkadk/rkadk/src/third-party/iniparser/iniparser.c
中,用来分析ini文件

/*-------------------------------------------------------------------------*/
/**
  @brief    Parse an ini file and return an allocated dictionary object
  @param    ininame Name of the ini file to read.
  @return   Pointer to newly allocated dictionary

  This is the parser for ini files. This function is called, providing
  the name of the file to be read. It returns a dictionary object that
  should not be accessed directly, but through accessor functions
  instead.

  The returned dictionary must be freed using iniparser_freedict().
 */
/*--------------------------------------------------------------------------*/

deepseek翻译为

/--------------------------------------------------------------------------/
/**
@brief 解析一个ini文件并返回一个已分配的字典对象
@param ininame 要读取的ini文件的名称。
@return 指向新分配的字典的指针

这是ini文件的解析器。调用此函数时需提供要读取的文件名。它会返回一个字典对象,
该对象不应直接访问,而应通过访问器函数进行操作。

必须使用iniparser_freedict()来释放返回的字典。
/
/--------------------------------------------------------------------------*/

http://www.kler.cn/a/557224.html

相关文章:

  • C#-03-类继承
  • 【实战】ChatChat0.3.1+DeepSeek+本地知识库部署使用(上)
  • 10x Research:Secured Finance的稳定币如何推动Filecoin发展
  • 鸿蒙-如何发布一个三方库
  • 契约思维驱动开发:OpenAPI的最佳实践
  • MATLAB进阶之路:数据导入与处理
  • 【c语言】函数_作业详解
  • 一文读懂大模型文件后缀名,解锁 AI 世界的密码
  • 探索Android动态埋点的新视界:UprobeStats深度解析
  • 解决“error: Tried to call obs_frontend_start_virtualcam with no callbacks!”
  • 计算机视觉算法实战——智能零售货架监测(主页有源码)
  • 83_CentOS7通过yum无法安装软件问题解决方案
  • 基于springboot的攀枝花市鲜花销售系统
  • 【论文阅读】identifying backdoor data with optimized scaled prediction consistency
  • 蓝桥杯真题 - 缴纳过路费 - 题解
  • 氧化锆(化学式ZrO₂)在多个工业领域发挥重要作用京煌科技
  • 机器学习 - 投票感知器
  • VUE四:Vue-cli
  • Android 中 如何监控 某个磁盘有哪些进程或线程在持续的读写
  • 【WebGL】fbo双pass案例