---
title: InitVmiEngine
description: "初始化云手机服务端。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC2/armnative/kunpengcpsvideo_16_0017.html
sourcePath: /source/zh/kunpengboostkithistory/240RC2/armnative/kunpengcpsvideo_16_0017.html
indexId: a480ba415669b5576ee8e6880a6d8ecde263f1d6ee849c7820298c668f383c6d79
---
# InitVmiEngine

#### 函数功能

初始化云手机服务端。


#### 约束说明

- 不支持反复调用，初始化成功后，不允许再次调用。
- 不允许长时间阻塞数据输出的回调函数，建议回调函数需在1ms内返回。


#### 函数原型

VmiErrCode InitVmiEngine(VmiConfigEngine *config);


#### 参数说明

| 字段名称 | 输入/输出 | 字段类型 | 字段描述 |
| --- | --- | --- | --- |
| config | 输入 | VmiConfigEngine | 该结构体由DataCallback和DataTypeConfig数组构成。 |


启动引擎需要的配置项为VmiConfigEngine，包含DataCallback数据回调和需要启动的模块列表。

```
struct VmiConfigEngine {
DataCallback dataCallback = nullptr;        // 用于发送服务端数据的回调
DataTypeConfig dataTypeConfig[DATA_TYPE_MAX];
} __attribute__((packed));
```

数据输出统一使用回调函数实现，不提供数据输出的函数接口。回调函数定义如下：

```
using DataCallback = int(*)(VmiDataType module, VmiCmd cmd, uint8_t *data, uint32_t size);
```

DataTypeConfig数组指明每个模块是否需要初始化，以及初始化时数据包头前需要预留的内存空间大小，便于开发者填充需要的数据。

若sendDataOffset不为0，则引擎调dataCallback接口时，第三个参数data指针的内存排布为|SendDataOffset预留数据|size长度的有效数据|，第四个参数size指示有效数据长度，即data指针前面会预留SendDataOffset字节的数据后再接size长度的有效数据。

```
struct DataTypeConfig {
bool shouldInit = false;
uint32_t sendDataOffset = 0;                // 通过回调函数发送数据时，在数据头预留的空间，最小值是0，最大值是1024，单位为Byte
} __attribute__((packed));
```


#### 返回值说明

数据类型：enum VmiErrCode : int32_t

取值如下：

- OK（0）：表示初始化成功。
- 非0值：表示初始化失败，返回值指示错误码。
