# SDK开发过程
SDK头文件的功能实现是基于对SDK的调用映射到对客户端的调用。Client端提供的接口如下表所示。
**表1** Client端提供的接口
| 接口名 | 接口说明 | 参数要求 |
| -------- | -------- | -------- |
| int **AieClientInit**(const ConfigInfo &configInfo,
ClientInfo &clientInfo, const AlgorithmInfo
&algorithmInfo, IServiceDeadCb \*cb) | **作用**:链接并初始化引擎服务,激活跨进程调用。
**返回值**:0为成功,其他返回值失败。 | **configInfo**(不能为NULL):引擎相关初始化配置数据
**clientInfo**(不能为NULL):引擎客户端信息
**algorithmInfo**(不能为NULL):调用算法信息
**cb**(可为NULL):死亡回调对象 |
| int **AieClientPrepare**(const ClientInfo &clientInfo
, const AlgorithmInfo &algorithmInfo, const DataInfo
&inputInfo, DataInfo &outputInfo, IClientCb \*cb) | **作用**:加载算法插件。
**返回值**: 0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**algorithmInfo**(不能为NULL):调用算法信息
**inputInfo**(可为NULL):加载算法插件时输入所需信息
**outputInfo**(可为NULL):加载算法插件之后如需返回信息则通过此出参返回
**cb**:异步算法通过此回调返回运算结果,因此**异步算法此结构体不能为空** 若为同步算法,传入空值即可 |
| int **AieClientAsyncProcess**(const ClientInfo &clientInfo,
const AlgorithmInfo &algorithmInfo, const DataInfo
&inputInfo) | **作用**:执行异步算法。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**algorithmInfo**(不能为NULL):调用算法信息
**inputInfo**(可为NULL):算法运算入参 |
| int **AieClientSyncProcess**(const ClientInfo &clientInfo,
const AlgorithmInfo &algorithmInfo, const
DataInfo &inputInfo, DataInfo &outputInfo) | **作用**:执行同步算法。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**algorithmInfo**(不能为NULL):调用算法信息
**inputInfo**(可为NULL):算法运算入参
**outputInfo**(可为NULL):同步算法运算结果出参 |
| int **AieClientRelease**(const ClientInfo &clientInfo,
const AlgorithmInfo &algorithmInfo, const
DataInfo &inputInfo) | **作用**:卸载算法插件。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**algorithmInfo**(不能为NULL):卸载算法插件的相关信息
**inputInfo**(可为NULL):调用卸载接口时的输入信息 |
| int **AieClientDestroy**(ClientInfo &clientInfo) | **作用**:断开与服务端的链接,释放相关缓存。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):所要销毁的引擎客户端信息 |
| int **AieClientSetOption**(const ClientInfo &clientInfo,
int optionType, const DataInfo &inputInfo) | **作用**:设置配置项,可将一些算法的拓展信息通过此接口传入插件。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**optionType** (不能为NULL):算法配置项,算法插件可根据需要利用此状态位
**inputInfo**(可为NULL):插件可根据需要通过此入参设置算法参数信息 |
| int **AieClientGetOption**(const ClientInfo &clientInfo,
int optionType, const DataInfo &inputInfo,
DataInfo &outputInfo) | **作用**:给定特定的optionType和inputInfo,获取其对应的配置项信息。
**返回值**:0为成功,其他返回值失败。 | **clientInfo**(不能为NULL):引擎客户端信息
**optionType**(不能为NULL):所获取配置项信息的对应算法状态位
**inputInfo**(可为NULL):所获取配置项信息的对应算法参数信息
**outputInfo**(可为NULL):所要获取的配置项信息返回结果 |
其中,ConfigInfo,ClientInfo,AlgorithmInfo,DataInfo的数据结构如下表所示。
**表2** ConfigInfo,ClientInfo,AlgorithmInfo,DataInfo的数据结构
| 结构体名称 | 说明 | 属性 |
| -------- | -------- | -------- |
| ConfigInfo | 算法配置项信息。 | **const char \*description**:配置项信息主体 |
| ClientInfo | 客户端信息。 | **long long clientVersion**:客户端设备版本号(当前还未启用)
**int clientId**:客户端ID
**int sessionId**:会话ID
**uid_t serverUid**:server端UID
**uid_t clientUid**:client端UID
**int extendLen**:拓展信息(extendMsg)长度
**unsigned char \*extendMsg**:拓展信息主体 |
| AlgorithmInfo | 算法信息。 | **long long clientVersion**:客户端设备版本号(当前还未启用)
**bool isAsync**:是否为异步执行
**int algorithmType**:引擎框架根据插件加载顺序分配的算法类型ID
**long long algorithmVersion**:算法版本号
**bool isCloud**:是否上云(当前还未启用)
**int operateId**:执行ID(当前还未启用)
**int requestId**:请求ID,标识每次request,以对应执行结果
**int extendLen**:拓展信息(extendMsg)长度
**unsigned char \*extendMsg**:拓展信息主体 |
| DataInfo | 算法数据入参(inputInfo)、
接口调用结果出参(outputInfo)。 | **unsigned char \*data**:数据主体
**int length**:数据(data)长度 |
具体开发过程可参考[唤醒词识别SDK开发示例](../subsystems/subsys-aiframework-demo-sdk.md)。