跳到主要内容

ISP IPC模块框架说明及接口规范

文件标识:RK-KF-YF-519

发布版本:V1.0.0

日期:2020-06-19

文件密级:□绝密 □秘密 □内部资料 ■公开

免责声明

本文档按“现状”提供,瑞芯微电子股份有限公司(“本公司”,下同)不对本文档的任何陈述、信息和内容的准确性、可靠性、完整性、适销性、特定目的性和非侵权性提供任何明示或暗示的声明或保证。本文档仅作为使用指导的参考。

由于产品版本升级或其他原因,本文档将可能在未经任何通知的情况下,不定期进行更新或修改。

商标声明

“Rockchip”、“瑞芯微”、“瑞芯”均为本公司的注册商标,归本公司所有。

本文档可能提及的其他所有注册商标或商标,由其各自拥有者所有。

版权所有 © 2020 瑞芯微电子股份有限公司

超越合理使用范畴,非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

瑞芯微电子股份有限公司

Rockchip Electronics Co., Ltd.

地址: 福建省福州市铜盘路软件园A区18号

网址: www.rock-chips.com

客户服务电话: +86-4007-700-590

客户服务传真: +86-591-83951833

客户服务邮箱: fae@rock-chips.com


前言

概述

本文旨在描述RkAiq(Rk Auto Image Quality)模块的作用,整体工作流程,及相关的API接口。主要给 使用RkAiq模块进行ISP功能开发的工程师提供帮助。

产品版本

芯片名称内核版本
RV1126/RV1109Linux 4.19

读者对象

本文档(本指南)主要适用于以下工程师:

ISP模块软件开发工程师

系统集成软件开发工程师

各芯片系统支持状态

芯片名称BuildRootDebianYoctoAndroid
RV1126YNNN
RV1109YNNN

修订记录

版本号作者修改日期修改说明
V1.0.0邱恩2020-06-19初始版本

目录

[TOC]


框架概述

概述

该模块功能主要实现ispclient应用与服务端ispserver进程间通讯的协议规范,进程间通讯的接口的规范。客户通过我们提供的接口文件,实现客户端应用与ispserver进程间交互。ispserver主要依赖于rkaiq库,通过rkaiq库跟isp交互.ispclient不直接跟rkaiq库交互。

软件架构图

isp20_ipc_framework

图1-1 ISP20 IPC模块框架图

ISP20 IPC模块框架图如图1-1所示。该模块设计按照层次模型进行设计。

  • ISP uAPI层:主要是负责调用aiq库提供的接口。
  • 协议层:进程间通讯的协议,采用json的协议结构。
  • IPC层:主要提供进程间通讯的基础接口,主要采用dbus,共享内存。
  • 接口层:给客户端提供的最终调用的接口,协议的封装对客户是透明的。
  • 应用层:应用层的接口调用。

接口规范

接口层规范

提供给服务端和客户端的接口。

服务端:

【接口规范】
uAPI接口名+_ipc+(void *args)
void* args:共享内存结构体指针。args是接口的参数的结构体,定义可以详见协议层部分
【接口路径】

$project/isp2-ipc/interface/

【接口说明】

由于接口的功能和rkaiq库的uAPI接口是对应关系的,因此各个接口的具体功能可以参见《Rockchip_Developer_Guide_ISP20_RkAiq_CN.md》功能描述部分。==注意: 服务端编译的时候要注意链接的库是librkaiq.so。==

客户端:

uAPI的.h文件接口的实现,客户端可以不依赖rkaiq库。通过dbus接口调用到服务端接口 (uAPI接口名+_ipc+(void *args)), 然后通过服务端接口调用aiq库实现 头文件的路径目录$sysroot/usr/include/rkaiq/uApi目录。==注意:编译客户端的时候要注意链接ispclient.so。==

协议层的规范

由于IPC层通讯机制基于共享内存和DBUS的机制,共享内存的主要作用是传输接口的参数数据。dbus的主要作用是同步共享内存,用于客户端通知服务端同步共享内存。

【协议规范】

   typedef   struct uAPI接口名 {
rk_aiq_sys_ctx_t* sys_ctx;
参数2
....
参数N;
xCamReturn returnvalue;
}
  • 结构体名字用接口名字,为了调用接口能够统一处理,简化代码。
  • 结构体的字段代表接口的每个参数。
  • 结构体的returnvalue代表每个接口的返回值。
  • 结构体的数据存储在共享内存中,通过dbus进行同步。dbus协议是基于json进行传输的。
  • json的结构体主要是告诉对方调用的接口名字,共享内存的id。

【协议路径】

$project/isp2-ipc/protocol/

一个协议文件对应头文件对应uAPI的一个头文件,每个结构体对应相应的接口的参数。

【协议说明】

客户端要通过协议跟服务端,客户端使用的时候协议包含在ispclient中了。每个协议字段的含义可以参考《Rockchip_Developer_Guide_ISP20_RkAiq_CN.md》


DBSERVER的模式适配

dbserver模式主要采用数据库的方式进行进程间通讯, 客户端将isp配置的数据写入数据库,然后通过dbus广播一个消息到ispserver,ispserver收到消息后调用aiq的接口,更新配置。该功能要开启,需要在buildroot/config/xxx.config.h的BR2_PACKAGE_DBSERVER配置打开。

源码的构成

isp2-ipc
├── client*******************************客户端库的实现
│ ├── CMakeLists.txt
│ ├── dbusconfig***********************dbus配置文件
│ └── impl*****************************客户端uAPI接口的实现
├── CMakeLists.txt
├── common*******************************公共目录
├── demo*********************************客户端的测试demo
├── interface****************************服务端的接口定义
├── libs*********************************aiq库目录
│ └── librkaiq.so
├── LICENSE
├── protocol*****************************协议定义目录
└── server*******************************服务端的实现
├── impl*****************************服务端的接口实现,主要实现interface接口
└── main.c***************************服务端的主程序接口

获取这份代码,在 buildroot/config/xxxconfig.h 中加入 BR2_PACKAGE_ISP2_IPC=y。服务端的代码编译后生成 ispserver 的 bin 文件。

A 缩略语

缩写全称
isp2-ipcISP2.0 Interprocess Communication
RkAiqRockchip Automatical Image Quality
ISPImage Signal Process