
# 接口函数
表1edge.h中支持的接口函数 
| 接口                                      | 说明                                                    |
|:---|:---|
| edge_init                               | 初始化sdk的工作环境，加载证书、读取配置等                                |
| edge_set_callbacks                      | 注册回调接口，登录、子设备添加、删除、设备消息、设备命令等都是异步通知的，故需要注册对应的处理函数     |
| edge_login                              | 用于SDK登录边缘，该函数是异步函数，登录成功会调用4.2章节中已注册的pfn_connected回调函数 |
| edge_logout                             | 用于SDK登出边缘                                             |
| edge_destroy                            | 用于清理SDK资源                                             |
| edge_send_add_sub_device                | 网关添加子设备，可批量添加                                         |
| edge_send_delete_sub_device             | 删除子设备，可批量删除                                           |
| edge_send_batch_device_data             | 批量上报子设备数据，可以同时上报多个设备的多个service数据                      |
| edge_send_batch_device_data_v2          | 该接口主要用于上报单个设备单服务的属性数据                                 |
| edge_send_batch_device_data_v3          | 上报子设备数据，自行构造json数据                                    |
| edge_send_batch_device_discovery_data   | 上报子设备数据，若设备不存在则上报子设备发现事件                              |
| edge_send_command_rsp                   | 用于响应平台下发的设备命令                                         |
| edge_send_get_sub_device_shadow         | 用于网关发送请求给平台获取子设备影子                                    |
| edge_send_sub_device_event              | 用于网关给平台发送子设备事件                                        |
| edge_send_get_product                   | 用于网关给平台发送获取产品的请求                                      |
| edge_send_sub_device_property_get_rsp   | 用于网关响应平台的子设备属性获取请求                                    |
| edge_send_sub_device_property_set_rsp   | 用于网关响应平台的子设备属性设置请求                                    |
| edge_send_customized_message            | 用于网关发送自定义topic消息                                      |
| edge_set_bus_message_cb                 | 为消息总线输入点设置回调函数                                        |
| edge_send_bus_message                   | 向消息总线输出点发送数据                                          |
| edge_call_device_command                | 调用产品模型里定义的命令                                          |
| edge_set_send_mode                      | 设置发送模式（异步\|同步）                                        |
| edge_forbid_send_when_broker_overloaded | 设置是否在离线缓存满时禁止发送                                       |
| edge_get_devices_statuses               | 查询子设备状态                                               |
| edge_init_devices_statuses              | 初始化用于存放子设备状态查询结果的结构体                                  |
| edge_release_devices_statuses           | 释放子设备状态结构体                                            |
   
详细接口说明参见[代码解析](https://support.huaweicloud.com/devg-iotedge/iotedge_devg_0071.html)。
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/note_3.0-zh-cn.png)
include目录下的头文件**edge.h**，包括所有C SDK提供的回调函数和接口。以下是具体函数介绍。
#### edge.h回调函数说明
1. 模块影子数据回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_SHADOW_ARRIVED)(const char* shadow, unsigned int shadow_len);
   ```
   函数功能：
   当下发模块配置时，通过此函数通知到用户，用户应用的配置也通过此函数通知。
   表2参数说明 
   | 参数名称       | 类型           | 参数描述                           | 示例                                                                                                               |
   |:---|:---|:---|:---|
   | shadow     | char\*       | 模块影子数据（json字符串），第三方应用下发用户的配置数据 | { "config":"test" } |
   | shadow_len | unsigned int | 影子数据的长度                        | -                                                                                                                |
      
   
2. 命令下发回调 函数描述：
   ```
   typedef EDGE_RETCODE (FN_COMMAND_ARRIVED)(const char* command_name, const char* device_id, const char* service_id, const char* request_id, const char* body, unsigned int body_len);
   ```
   函数功能：
   此函数声明用户命令下发通知，设备命令下发即使用此函数声明。
   表3参数说明 
   | 参数名称         | 类型           | 参数描述                                |
   |:---|:---|:---|
   | command_name | char\*       | 设备命令名称，在设备关联的产品模型中定义。               |
   | device_id    | char\*       | 命令对应的目标设备ID，命令下发对应的最终目标设备           |
   | service_id   | char\*       | 设备的服务ID，在设备关联的产品模型中定义               |
   | request_id   | char\*       | {request_id}用于唯一标识这次请求，响应该命令时需要带上。  |
   | body         | char\*       | json字符串，设备命令的执行参数，具体字段在设备关联的产品模型中定义 |
   | body_len     | unsigned int | -                                   |
      
   
3. 消息下发回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_MESSAGE_ARRIVED)(const char* message_id, const char* message_name, const char* device_id, const char* body, unsigned int body_len);
   ```
   函数功能：
   此函数声明用于消息下发通知，平台使用此接口承接平台下发给设备的自定义格式的数据。
   表4参数说明 
   | 参数名称         | 类型           | 参数描述                      |
   |:---|:---|:---|
   | message_id   | char\*       | 消息名称                      |
   | message_name | char\*       | 消息的唯一标识                   |
   | device_id    | char\*       | 命令对应的目标设备ID，命令下发对应的最终目标设备 |
   | body         | char\*       | 消息内容。                     |
   | body_len     | unsigned int | 消息长度                      |
      
   
4. 事件下发回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_DEVICE_EVENT_ARRIVED)(const char* device_id, const char* body, unsigned int body_len);
   ```
   函数功能：
   此函数声明用于事件下发通知，平台使用此接口承接平台下发给设备的自定义格式的数据。
   表5参数说明 
   | 参数名称      | 类型           | 参数描述                      | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|:---|:---|
   | device_id | char\*       | 命令对应的目标设备ID，命令下发对应的最终目标设备 | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | body      | char\*       | 事件内容。                     | { "object_device_id":"deviceId", "services":\[ { "service_id":"serviceTest", "event_id":"eventTest", "event_type":"eventTypeTest", "event_time":"time", "paras":{ "test":"test" } } \] } |
   | body_len  | unsigned int | 消息长度                      | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
      
   
5. 子设备添加回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_SUB_DEVICE_ADD_ARRIVED)(const char* addSubDeviceInfo, unsigned int body_len);
   ```
   函数功能：
   此函数声明用于通知子设备添加，使用此接口承接平台添加成功子设备的通知。
   表6参数说明 
   | 参数名称             | 类型           | 参数描述               | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|:---|:---|
   | addSubDeviceInfo | char\*       | 添加成功的子设备信息，具体格式见示例 | {"devices": \[{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }\],"version":1} |
   | body_len         | unsigned int | 长度                 | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
      
   
6. 子设备删除回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_SUB_DEVICE_DELETED_ARRIVED)(const char* deleteSubDeviceInfo, unsigned int body_len);
   ```
   函数功能：
   此函数声明用于通知子设备删除，使用此接口承接平台删除成功子设备的通知。
   表7参数说明 
   | 参数名称                | 类型           | 参数描述               | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|:---|:---|
   | deleteSubDeviceInfo | char\*       | 删除成功的子设备信息，具体格式见示例 | {"devices": \[{"parent_device_id":"c6b39067b03421a48", "node_id": "subdevice11", "device_id":"2bb77-063ad2f5a6cc", "name": "subDevice11", "description": null, "product_id":"c6b3b34663d3ea42f6", "fw_version": null, "sw_version": null, "status": "ONLINE" }\],"version":1} |
   | body_len            | unsigned int | 长度                 | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
      
   
7. 子设备扫描回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_START_SCAN_ARRIVED)(const char* protocol, const char* channel, const char* parentDeviceId,const char* scan_setting, unsigned int body_len);
   ```
   函数功能：
   此函数声明用于通知网关扫描子设备。
   表8参数说明 
   | 参数名称           | 类型           | 参数描述  |
   |:---|:---|:---|
   | protocol       | char\*       | 协议    |
   | channel        | char\*       | 通道信息  |
   | parentDeviceId | char\*       | 父设备ID |
   | scan_setting   | char\*       | 扫描设备  |
   | body_len       | unsigned int | 配置长度  |
      
   
8. 子设备属性设置回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_DEVICE_PROPERTIES_SET_ARRIVED)(ST_PROPERTY_SET* sub_device_property_set);
   ```
   函数功能：
   此函数声明用于接收平台对子设备的属性设置。
   表9参数说明 
   | 参数名称                    | 类型                | 参数描述 | 示例       |
   |:---|:---|:---|:---|
   | sub_device_property_set | ST_PROPERTY_SET\* | 属性设置 | 参见edge.h |
      
   
9. 子设备属性获取回调 函数描述：
   ```
   typedef  EDGE_RETCODE (FN_DEVICE_PROPERTIES_GET_ARRIVED)(ST_PROPERTY_GET* sub_device_property_get);
   ```
   函数功能：
   此函数声明用于接收平台获取子设备的属性。
   表10参数说明 
   | 参数名称                    | 类型                | 参数描述 | 示例       |
   |:---|:---|:---|:---|
   | sub_device_property_get | ST_PROPERTY_GET\* | 属性设置 | 参见edge.h |
      
   
10. 子设备影子回调 函数描述：
    ```
    typedef  EDGE_RETCODE (FN_DEVICE_SHADOW_ARRIVED)(ST_DEVICE_SHADOW* sub_device_shadow);
    ```
    函数功能：
    此函数声明用于接收平台设置子设备的影子。
    表11参数说明 
    | 参数名称                    | 类型                 | 参数描述 | 示例       |
    |:---|:---|:---|:---|
    | sub_device_property_get | ST_DEVICE_SHADOW\* | 属性设置 | 参见edge.h |
       
    
11. 自定义topic消息通知回调 函数描述：
    ```
    typedef  EDGE_RETCODE (FN_CUSTOMIZED_MESSAGE_ARRIVED)(const char* topic, const char* payload, unsigned int len);
    ```
    函数功能：
    此函数声明用于接收平台设置子设备的影子。
    表12参数说明 
    | 参数名称    | 类型           | 参数描述     |
    |:---|:---|:---|
    | topic   | char\*       | 自定义topic |
    | payload | char\*       | 消息内容     |
    | len     | unsigned int | 消息长度     |
       
    
 
#### edge.h的接口函数介绍
所有接口函数定义的数据结构均呈现在edge_struct.h头文件中。
1. 初始化
接口描述：
```
int  edge_init(const char* workdir)
```
接口功能：
初始化sdk的工作环境，加载证书、读取配置等
表13参数说明 
| 参数名称    | 类型      | 参数描述                                       | 示例                                                       |
|:---|:---|:---|:---|
| workdir | workdir | 初始化文件所在目录，conf目录所在的目录，conf是存放证书文件以及日志配置的目录 | conf在/code/api_test/workdir目录下，就填写/code/api_test/workdir |
   
2. 注册回调接口
接口描述：
```
int edge_set_callbacks(ST_MODULE_CBS* module_cbs, ST_DEVICE_CBS* device_cbs)
```
接口功能：
注册回调接口，登录、子设备添加、删除、设备消息、设备命令等都是异步通知的，故需要注册对应的处理函数。
表14参数说明 
| 参数名称       | 类型            | 参数描述      |
|:---|:---|:---|
| module_cbs | ST_MODULE_CBS | 模块回调函数结构体 |
| device_cbs | ST_DEVICE_CBS | 设备回调函数结构体 |
   
表15ST_MODULE_CBS模块相关的回调函数说明 
| 参数名称             | 类型                   | 参数描述                     |
|:---|:---|:---|
| pfn_shadow_cb    | FN_SHADOW_ARRIVED\*  | 模块影子回调函数类型，模块的配置可以使该接口接收 |
| pfn_command_cb   | FN_COMMAND_ARRIVED\* | 发送到模块的命令的接收函数声明，         |
| pfn_connected    | FN_SDK_CONNECTED     | SDK连接到边缘hub的回调函数声明       |
| pfn_disconnected | FN_SDK_DISCONNECTED  | SDK和边缘hub断链的回调函数声明       |
   
表16ST_DEVICE_CBS子设备相关的回调函数 
| 参数名称                         | 类型                                 | 参数描述          |
|:---|:---|:---|
| pfn_device_message_cb        | FN_MESSAGE_ARRIVED\*               | 子设备消息回调       |
| pfn_device_command_cb        | FN_COMMAND_ARRIVED\*               | 子设备命令回调       |
| pfn_device_event_cb          | FN_DEVICE_EVENT_ARRIVED\*          | 子设备事件回调       |
| pfn_sub_device_add_cb        | FN_SUB_DEVICE_ADD_ARRIVED\*        | 子设备添加通知回调     |
| pfn_sub_device_deleted_cb    | FN_SUB_DEVICE_DELETED_ARRIVED\*    | 子设备删除通知回调     |
| pfn_on_start_scan_cb         | FN_START_SCAN_ARRIVED\*            | 收到子设备扫描通知回调   |
| pfn_device_properties_set_cb | FN_DEVICE_PROPERTIES_SET_ARRIVED\* | 收到子设备属性设置通知回调 |
| pfn_device_properties_get_cb | FN_DEVICE_PROPERTIES_GET_ARRIVED\* | 收到子设备属性获取通知回调 |
| pfn_device_shadow_cb         | FN_DEVICE_SHADOW_ARRIVED\*         | 收到子设备影子       |
   
3. 登录
接口描述：
```
int edge_login()
```
接口功能：
用于SDK登录边缘，该函数是异步函数，登录成功会调用4.2章节中已注册的pfn_connected回调函数。
4. 登出
接口描述：
```
void edge_logout()
```
接口功能：
用于SDK登出边缘
5. 清理
接口描述：
```
void edge_destroy()
```
接口功能：
用于清理SDK资源。
6. 网关添加子设备
接口描述：
```
int edge_send_add_sub_device(ST_DEVICE_INFO* device_info, unsigned int size)
```
接口功能：
网关添加子设备，可批量添加，device_info为ST_DEVICE_INFO数组，size为数组的大小（个数）；
表17参数描述 
| 参数名称        | 类型             | 参数描述 | 示例       |
|:---|:---|:---|:---|
| device_info | ST_DEVICE_INFO | 设备信息 | 参见edge.h |
| size        | Int            | 数组个数 | -        |
   
备注：
该接口的调用成功不代表添加成功，仅仅代表添加子设备的请求发送到hub，设备的添加成功与否需要edge.h中注册的设备回调接口pfn_sub_device_add_cb。
样例：
```
[{
"parent_device_id": "c6b39067b0325db34663d3ef421a42f6_12345678",
"node_id": "subdevice11",
"device_id": "2bb4ddba-fb56-4566-8577-063ad2f5a6cc",
"name": "subDevice11",
"description": null,
"product_id": "c6b39067b0325db34663d3ef421a42f6",
"fw_version": null,
"sw_version": null,
"status": "ONLINE"
}]
```
7. 网关删除子设备
接口描述：
```
int edge_send_delete_sub_device (ST_DEVICE_INFO* device_info, unsigned int size)
```
接口功能：
删除子设备，可批量删除，device_info为ST_DEVICE_INFO数组，size为数组的大小（个数）；
表18参数描述 
| 参数名称        | 类型             | 参数描述 | 示例 |
|:---|:---|:---|:---|
| device_info | ST_DEVICE_INFO | 设备信息 | -  |
| size        | Int            | 数组个数 | -  |
   
备注：
该接口的调用成功不代表删除成功，仅仅代表删除子设备的请求发送到hub，设备的删除成功与否需要edge.h中注册的设备回调接口pfn_sub_device_deleted_cb。
样例：
```
[{
"parent_device_id": "c6b39067b0325db34663d3ef421a42f6_12345678",
"node_id": "subdevice11",
"device_id": "2bb4ddba-fb56-4566-8577-063ad2f5a6cc",
"name": "subDevice11",
"description": null,
"product_id": "c6b39067b0325db34663d3ef421a42f6",
"fw_version": null,
"sw_version": null,
"status": "ONLINE"
}]
```
8. 设备数据批量上报v1
接口描述：
```
int edge_send_batch_device_data(ST_DEVICE_SERVICE* devices,unsigned int size)
```
接口功能：
批量上报子设备数据，可以同时上报多个设备的多个service数据，devices为ST_DEVICE_SERVICE数组，size为数组的个数；
表19参数描述 
| 参数名称    | 类型                | 参数描述 |
|:---|:---|:---|
| devices | ST_DEVICE_SERVICE | 设备数据 |
| size    | Int               | 数组个数 |
   
样例：
ST_DEVICE_SERVICE样式
```
{
"device_id":"bf40f0c4-4022-41c6-a201-c5133122054a",
"services":[
{
"service_id":"analog",
"properties":{
"PhV_phsA":"1",
"PhV_phsB":"2"
},
"event_time":"20190606T121212Z"
}
]
}
```
9. 设备数据批量上报v2（单设备单serviceId上报）
接口描述：
```
int edge_send_batch_device_data_v2(const char *device_id, const char *service_id, const char *service_properties, const char *event_time)
```
接口功能：
该接口主要用于上报单个设备单服务的属性数据；
表20参数描述 
| 参数名称       | 类型     | 参数描述         | 示例                 |
|:---|:---|:---|:---|
| device_id  | char\* | 设备ID         | -                  |
| service_id | char\* | 服务Id         | -                  |
| properties | char\* | 属性值（Json字符串） | -                  |
| event_time | char\* | 时间戳          | "20190606T121212Z" |
   
10. 设备数据批量上报v3（自行构造json体上报）
接口描述：
```
int edge_send_batch_device_data_v3(const char *service_properties, unsigned int size)
```
接口功能：
上报子设备数据，自行构造json数据；
表21参数描述 
| 参数名称               | 类型      | 参数描述 | 示例 |
|:---|:---|:---|:---|
| service_properties | Json字符串 | 设备数据 | -  |
| size               | Int     | 长度   | -  |
   
样例：
service_properties数据格式如下：
```
[{
"device_id":"bf40f0c4-4022-41c6-a201-c5133122054a",
"services":[
{
"service_id":"test",
"properties":{
"PhV_phsA":"1",
"PhV_phsB":"2"
},
"event_time":"20190606T121212Z"
}
]
}]
```
11. 设备命令响应
接口描述：
```
int  edge_send_command_rsp(const char* rsp_name, const char* request_id, int result_code, const char* rsp_body, unsigned int body_lens);
```
接口功能：
用于响应平台下发的设备命令，该接口和"命令下发回调"搭配使用。
表22参数描述 
| 参数名称        | 类型           | 参数描述       | 示例                               |
|:---|:---|:---|:---|
| request_id  | char\*       | 长度         | {request_id}用于唯一标识这次请求,匹配下发的命令，  |
| rsp_name    | char\*       | 命令响应名称     | 命令的响应名称，在设备关联的产品模型中定义            |
| result_code | char\*       | 命令响应码      | 标识命令的执行结果，0表示成功，其他表示失败。不带默认认为成功。 |
| rsp_body    | char\*       | 响应参数       | 命令的响应参数，具体字段在设备关联的产品模型中定义。       |
| body_lens   | unsigned int | rsp_body长度 | -                                |
   
12. 获取子设备影子
接口描述：
```
int edge_send_get_sub_device_shadow(const char* request_id, ST_DEVICE_SHADOW_GET* device_shadow_get);
```
接口功能：
用于网关发送请求给平台获取子设备影子，该接口和"子设备影子回调"搭配使用，请求后将通过"子设备影子回调"的回调函数通知到网关。
表23参数描述 
| 参数名称              | 类型                     | 参数描述   | 示例                      |
|:---|:---|:---|:---|
| request_id        | char\*                 | 长度     | {request_id}用于唯一标识这次请求, |
| device_shadow_get | ST_DEVICE_SHADOW_GET\* | 获取影子结构 | 具体示例参见edge.h            |
   
13. 发送子设备消息
接口描述：
```
int  edge_send_sub_device_message(ST_DEVICE_MESSAGE* device_message);
```
接口功能：
用于网关给平台发送子设备消息；
表24参数描述 
| 参数名称           | 类型                  | 参数描述   | 示例           |
|:---|:---|:---|:---|
| device_message | ST_DEVICE_MESSAGE\* | 设备消息格式 | 具体示例参见edge.h |
   
14. 发送子设备事件
接口描述：
```
int  edge_send_sub_device_event(ST_DEVICE_EVENT* device_event);
```
接口功能：
用于网关给平台发送子设备事件；
表25参数描述 
| 参数名称         | 类型                | 参数描述   | 示例           |
|:---|:---|:---|:---|
| device_event | ST_DEVICE_EVENT\* | 设备事件格式 | 具体示例参见edge.h |
   
15. 发送获取产品请求
接口描述：
```
int edge_send_get_product(const char** product_ids, unsigned int product_id_size);
```
接口功能：
用于网关给平台发送获取产品的请求；
表26参数描述 
| 参数名称            | 类型           | 参数描述      | 示例                                                                                                                                                                           |
|:---|:---|:---|:---|
| product_ids     | char\*\*     | 产品id的数组列表 | \[ "productId1", "productId2", \] |
| product_id_size | unsigned int | 数组长度      | -                                                                                                                                                                            |
   
16. 发送子设备属性获取响应
接口描述：
```
int edge_send_sub_device_property_get_rsp(const char* request_id, ST_DEVICE_PROPERTY_GET_RSP* device_property_get_rsp);
```
接口功能：
用于网关响应平台的子设备属性获取请求,和"子设备属性获取回调"回调请求搭配子设备属性获取回调子设备属性获取回调使用。
表27参数描述 
| 参数名称                    | 类型                                    | 参数描述   | 示例                      |
|:---|:---|:---|:---|
| request_id              | char\*                                | 请求id   | {request_id}用于唯一标识这次请求, |
| device_property_get_rsp | ST_DEVICE_PROPERTY_GET_RS子设备属性获取回调P\* | 属性获取响应 | 参见edge.h                |
   
17. 发送子设备属性设置响应
接口描述：
```
int edge_send_sub_device_property_set_rsp(const char* request_id, ST_IOT_RESULT* iot_result);
```
接口功能：子设备属性设置回调
用于网关响应平台的子设备属性设置请求,和"子设备属性获取回调"回调请求搭配使用。
表28参数描述 
| 参数名称       | 类型              | 参数描述   | 示例                      |
|:---|:---|:---|:---|
| request_id | char\*          | 请求id   | {request_id}用于唯一标识这次请求, |
| iot_result | ST_IOT_RESULT\* | 属性设置响应 | 参见edge.h子设备属性获取回调       |
   
18. 发送自定义topic消息
接口描述：
```
int edge_send_customized_message(const char* topic, const char* body, unsigned int body_len);
```
接口功能：
用于网关发送自定义topic消息。
表29参数描述 
| 参数名称     | 类型           | 参数描述     |
|:---|:---|:---|
| topic    | char\*       | 自定义topic |
| body     | char\*       | 消息体      |
| body_len | unsigned int | 消息长度     |
   
图1图示   
![](https://support.huaweicloud.com/devg-iotedge/figure/zh-cn_image_0000001152502382.png "点击放大")
解释：
用户在调用设备接入的自定义消息时，注册的自定义topic需要附加上/modules/{moduleId}/前缀。
19. 设置发送总线消息回调
接口描述：
```
int edge_set_bus_message_cb(const char* input_name);
```
接口功能
为消息总线输入点设置回调函数。
表30参数描述 
| 参数名称       | 类型     | 参数描述    | 示例    |
|:---|:---|:---|:---|
| input_name | char\* | 消息总线输入点 | 见Demo |
   
20. 发送总线消息
接口描述：
```
edge_send_bus_message(const char* output_name, const char* body, unsigned int body_len);
```
接口功能：
向消息总线输出点发送数据。
表31参数描述 
| 参数名称        | 类型           | 参数描述    |
|:---|:---|:---|
| output_name | char\*       | 消息总线输出点 |
| body        | char\*       | 消息体     |
| body_len    | unsigned int | 消息长度    |
   
21. 调用设备命令
接口描述
```
int   edge_call_device_command(ST_COMMAND* command, unsigned int timeout);
```
接口功能：
调用产品模型里定义的命令。
表32参数描述 
| 参数名称    | 类型           | 参数描述        | 示例                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| command | ST_COMMAND\* | 设备命令        | { "device_123", "power", "restart" } |
| timeout | unsigned int | 超时参数(以秒为单位) | -                                                                                                                                                                                                                                    |
   
22. 设置发送模式
接口描述
```
int edge_set_send_mode(EN_SEND_MODE mode);
```
接口功能
设置点位上报、属性上报的发送模式，有同步、异步两种可选。
表33参数描述 
| 参数名称 | 类型           | 参数描述 | 示例         |
|:---|:---|:---|:---|
| mode | EN_SEND_MODE | 上报模式 | SEND_ASYNC |
   
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
此设置只影响点位上报和属性上报。默认为异步发送，若您设置为同步后，所有的点位上报、属性上报发送请求都会调整为同步发送（最多阻塞3秒），超时则返回非0错误码。
23. 设置是否在Hub离线缓存满时禁止发送
接口描述
```
int edge_forbid_send_when_broker_overloaded(_BOOL forbidden);
```
接口功能
当SDK感知到Hub的离线缓存已满时，是否继续发送数据。
表34参数描述 
| 参数名称      | 类型    | 参数描述 | 示例    |
|:---|:---|:---|:---|
| forbidden | _BOOL | 是否禁止 | _TRUE |
   
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
此设置只影响点位上报和属性上报。默认为否（不禁止发送），若您设置为是，所有的点位上报、属性上报发送请求都会在Hub离线缓存满时被禁止，并返回非0错误码。
24. 获取子设备状态
接口描述
```
int edge_get_devices_statuses(ST_DEVICES_STATUSES* devices_statuses, const char** devices_ids, unsigned int device_id_size, unsigned int timeout
```
接口功能
用于获取指定的子设备的状态
表35参数描述 
| 参数名称             | 类型                    | 参数描述                     | 示例                                                                                                                                                                                              |
|:---|:---|:---|:---|
| devices_statuses | ST_DEVICES_STATUSES\* | 用于存放查询结果的结构体             | 见 25. 初始化子设备状态结构体                                                                                                                                                                               |
| devices_ids      | const char\*\*        | 存放要查询的子设备id（数组）          | const char\* devices_ids\[2\] = {0}; devices_ids\[0\] = "dev_id1"; devices_ids\[1\] = "dev_ids2"; |
| device_id_size   | unsigned int          | 上述数组的大小                  | 2                                                                                                                                                                                               |
| timeout          | unsigned int          | 超时，单位为毫秒，范围为1ms\~30000ms | 3000                                                                                                                                                                                            |
   
表36ST_DEVICES_STATUSES结构体描述 
| 参数名称    | 类型                 | 参数描述 |
|:---|:---|:---|
| devices | ST_DEVICE_STATUS\* | 设备状态 |
| size    | Int                | 数组个数 |
   
表37ST_DEVICE_STATUS结构体描述 
| 参数名称      | 类型     | 参数描述 |
|:---|:---|:---|
| device_id | char\* | 设备ID |
| status    | char\* | 设备状态 |
   
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
ST_DEVICES_STATUSES参数必须使用特定的接口进行初始化和释放操作，具体见25 和 26
25. 初始化子设备状态结构体
接口描述
```
int edge_init_devices_statuses(ST_DEVICES_STATUSES* devices_statuses, unsigned int size);
```
接口功能
用于存放子设备状态查询结果的结构体，需要使用该接口进行初始化后，才能传递给edge_get_devices_statuses
参数描述
表38参数描述 
| 参数名称             | 类型                    | 参数描述                              | 示例                                                                                                                                          |
|:---|:---|:---|:---|
| devices_statuses | ST_DEVICES_STATUSES\* | 指向该结构体的指针                         | ST_DEVICES_STATUSES devices_statuses = {0}; edge_init_devices_statuses(\&devices_statuses, 2); |
| size             | unsigned int          | 要查询的子设备数，与24. 中的devices_id_size一致 | 2                                                                                                                                           |
   
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
在调用子设备查询接口前，请务必使用本接口对ST_DEVICES_STATUSES进行初始化操作，查询结束后，必须使用对应的释放接口对资源进行释放。（具体见26.）
26. 释放子设备状态结构体
接口描述
```
int edge_release_devices_statuses(ST_DEVICES_STATUSES* devices_statuses);
```
接口功能
用于释放子设备状态结构体所占有的资源
表39参数描述 
| 参数名称             | 类型                    | 参数描述      | 示例                                                 |
|:---|:---|:---|:---|
| devices_statuses | ST_DEVICES_STATUSES\* | 指向该结构体的指针 | edge_release_devices_statuses(\&devices_statuses); |
   
![](https://support.huaweicloud.com/devg-iotedge/public_sys-resources/caution_3.0-zh-cn.png)
在调用edge_get_devices_statuses完成相关操作后，请及时使用该接口对资源进行释放，避免出现内存泄漏的问题。
27. 设备数据批量上报（支持子设备发现事件）
接口描述
```
int edge_send_batch_device_discovery_data(ST_DEVICE_DISCOVERY_SERVICE* devices, unsigned int size);
```
接口功能：
上报子设备数据，自行构造json体上报，支持在上报的数据中，携带product_id、device_name，当发现设备不存在时则上报子设备发现事件
表40参数描述 
| 参数名称    | 类型                             | 参数描述 | 示例 |
|:---|:---|:---|:---|
| devices | ST_DEVICES_DISCOVERY_SERVICE\* | 设备数据 | /  |
| size    | unsigned int                   | 长度   | /  |
   
表41ST_DEVICES_DISCOVERY_SERVICE结构体描述 
| 参数名称        | 类型                | 参数描述  |
|:---|:---|:---|
| device_id   | char\*            | 设备ID  |
| product_id  | char\*            | 产品ID  |
| device_name | char\*            | 设备名   |
| services    | ST_SERVICE_DATA\* | 子设备数据 |
| size        | unsigned int      | 数组长度  |
   
表42ST_SERVICE_DATA结构体描述 
| 参数名称       | 类型     | 参数描述         |
|:---|:---|:---|
| service_id | char\* | 服务ID         |
| properties | char\* | 属性值（Json字符串） |
| event_time | char\* | 时间戳          |
   
