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

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()来释放返回的字典。
/
/--------------------------------------------------------------------------*/

相关文章:

  • vue3项目开发总结
  • Java 12~14 新特性
  • 力扣LeetCode: 2506 统计相似字符串对的数目
  • 围棋打谱应用软件设计制作
  • C++ Primer 容器库概述
  • RocketMq\Kafka如何保障消息不丢失?
  • 【微服务优化】ELK日志聚合与查询性能提升实战指南
  • 【多线程】线程安全
  • [LeetCode]day27 28. 找出字符串中第一个匹配项的下标
  • 音视频入门基础:RTP专题(10)——FFmpeg源码中,解析RTP header的实现
  • Docker仿真宇树狗GO1
  • Spring Security+JWT+Redis实现项目级前后端分离认证授权
  • 【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
  • 深入解析适配器模式:软件架构中的接口协调大师
  • printf和 vprintf的区别
  • MongoDB学习
  • CASS11快捷键设置
  • 国内三大知名开源批发订货系统对比
  • 【React】React 基础(2)
  • 深度解读DeepSeek:从原理到模型
  • 罗氏制药全新生物制药生产基地投资项目在沪启动:预计投资20.4亿元,2031年投产
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿助力人文学科与社会科学创新
  • “用鲜血和生命凝结的深厚情谊”——习近平主席署名文章中的中俄友好故事
  • 巴国家安全委员会授权军方自主决定对印反击措施
  • 哥伦比亚总统称将在访华期间签署“一带一路”倡议意向书,外交部回应
  • 专访|“甲亢哥”的操盘手,带NBA球星们玩转中国流量