Link Kit C-SDK  4.1.0
| 宏定义 | 类型定义 | 枚举 | 函数
aiot_dynregmq_api.h 文件参考

dynregmq模块头文件, 提供了基于MQTT的设备信息动态注册能力 更多...

#include <stdint.h>
aiot_dynregmq_api.h 的引用(Include)关系图:

浏览源代码.

struct  aiot_dynregmq_recv_t
 dynregmq模块收到从网络上来的报文时, 通知用户的报文内容 更多...
 

宏定义

#define STATE_DYNREGMQ_BASE   (-0x0500)
 -0x0500~-0x05FF表达SDK在dynregmq模块内的状态码 更多...
 
#define STATE_DYNREGMQ_DEINIT_TIMEOUT   (-0x0501)
 执行aiot_dynregmq_deinit 时, 等待其他API执行结束的超过设定的超时时间, DYNREGMQ实例销毁失败 更多...
 
#define STATE_DYNREGMQ_NEED_SEND_REQUEST   (-0x0502)
 需要首先执行aiot_dynregmq_send_request 发送动态注册请求 更多...
 
#define STATE_DYNREGMQ_AUTH_TIMEOUT   (-0x0503)
 接收服务器应答超时 更多...
 

类型定义

typedef void(* aiot_dynregmq_recv_handler_t) (void *handle, const aiot_dynregmq_recv_t *packet, void *userdata)
 dynregmq模块收到从网络上来的报文时, 通知用户所调用的数据回调函数 更多...
 

枚举

enum  aiot_dynregmq_option_t {
  AIOT_DYNREGMQOPT_NETWORK_CRED, AIOT_DYNREGMQOPT_HOST, AIOT_DYNREGMQOPT_PORT, AIOT_DYNREGMQOPT_PRODUCT_KEY,
  AIOT_DYNREGMQOPT_PRODUCT_SECRET, AIOT_DYNREGMQOPT_DEVICE_NAME, AIOT_DYNREGMQOPT_SEND_TIMEOUT_MS, AIOT_DYNREGMQOPT_RECV_TIMEOUT_MS,
  AIOT_DYNREGMQOPT_RECV_HANDLER, AIOT_DYNREGMQOPT_USERDATA, AIOT_DYNREGMQOPT_TIMEOUT_MS, AIOT_DYNREGMQOPT_DEINIT_TIMEOUT_MS,
  AIOT_DYNREGMQOPT_NO_WHITELIST, AIOT_DYNREGMQOPT_INSTANCE_ID, AIOT_DYNREGMQOPT_MAX
}
 aiot_dynregmq_setopt 接口的option参数可选值. 更多...
 
enum  aiot_dynregmq_recv_type_t { AIOT_DYNREGMQRECV_DEVICEINFO_WL, AIOT_DYNREGMQRECV_DEVICEINFO_NWL }
 dynregmq模块收到从网络上来的报文时, 通知用户的报文类型 更多...
 

函数

void * aiot_dynregmq_init (void)
 创建dynregmq会话实例, 并以默认值配置会话参数 更多...
 
int32_t aiot_dynregmq_setopt (void *handle, aiot_dynregmq_option_t option, void *data)
 配置dynregmq会话 更多...
 
int32_t aiot_dynregmq_deinit (void **handle)
 结束dynregmq会话, 销毁实例并回收资源 更多...
 
int32_t aiot_dynregmq_send_request (void *handle)
 向dynregmq服务器发送dynregmq消息请求 更多...
 
int32_t aiot_dynregmq_recv (void *handle)
 从网络上收取dynregmq消息 更多...
 

详细描述

dynregmq模块头文件, 提供了基于MQTT的设备信息动态注册能力

宏定义说明

#define STATE_DYNREGMQ_BASE   (-0x0500)

-0x0500~-0x05FF表达SDK在dynregmq模块内的状态码

#define STATE_DYNREGMQ_DEINIT_TIMEOUT   (-0x0501)

执行aiot_dynregmq_deinit 时, 等待其他API执行结束的超过设定的超时时间, DYNREGMQ实例销毁失败

#define STATE_DYNREGMQ_NEED_SEND_REQUEST   (-0x0502)

需要首先执行aiot_dynregmq_send_request 发送动态注册请求

#define STATE_DYNREGMQ_AUTH_TIMEOUT   (-0x0503)

接收服务器应答超时

类型定义说明

typedef void(* aiot_dynregmq_recv_handler_t) (void *handle, const aiot_dynregmq_recv_t *packet, void *userdata)

dynregmq模块收到从网络上来的报文时, 通知用户所调用的数据回调函数

参数
[in]handledynregmq会话句柄
[in]packetdynregmq消息结构体, 存放收到的dynregmq报文内容
[in]userdata用户上下文
返回
void

枚举类型说明

aiot_dynregmq_setopt 接口的option参数可选值.

下文每个选项中的数据类型, 指的是aiot_dynregmq_setopt 中, data参数的数据类型

  1. data的数据类型是char *时, 以配置AIOT_DYNREGMQOPT_HOST 为例:

    char *host = "xxx"; aiot_dynregmq_setopt(dynregmq_handle, AIOT_DYNREGMQOPT_HOST, host);

  2. data的数据类型是其他数据类型时, 以配置AIOT_DYNREGMQOPT_PORT 为例:

    uint16_t port = 443; aiot_mqtt_setopt(dynregmq_handle, AIOT_DYNREGMQOPT_PORT, (void *)&port);

枚举值
AIOT_DYNREGMQOPT_NETWORK_CRED 

mqtt动态注册 服务器建联时, 网络使用的安全凭据, 动态注册必需使用TLS方式建连

该配置项用于为底层网络配置aiot_sysdep_network_cred_t 安全凭据数据

应当把 aiot_sysdep_network_cred_t 中option配置为AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA , 以tls方式建联

数据类型: (aiot_sysdep_network_cred_t *)

AIOT_DYNREGMQOPT_HOST 

mqtt动态注册 服务器的域名地址或者ip地址

阿里云物联网平台域名地址列表(必须使用自己的product key替换${pk}):

使用tls证书方式建联:

域名地址 区域 端口号
${pk}.iot-as-mqtt.cn-shanghai.aliyuncs.com 上海 443
${pk}.iot-as-mqtt.ap-southeast-1.aliyuncs.com 新加坡 443
${pk}.iot-as-mqtt.ap-northeast-1.aliyuncs.com 日本 443
${pk}.iot-as-mqtt.us-west-1.aliyuncs.com 美西 443
${pk}.iot-as-mqtt.eu-central-1.aliyuncs.com 德国 443

数据类型: (char *)

AIOT_DYNREGMQOPT_PORT 

mqtt动态注册 服务器的端口号

连接阿里云物联网平台 mqtt动态注册 服务器时:

必须使用tls方式建联, 端口号设置为443

数据类型: (uint16_t *)

AIOT_DYNREGMQOPT_PRODUCT_KEY 

设备的productKey, 可从阿里云物联网平台控制台获取

数据类型: (char *)

AIOT_DYNREGMQOPT_PRODUCT_SECRET 

设备的productSecret, 可从阿里云物联网平台控制台获取

数据类型: (char *)

AIOT_DYNREGMQOPT_DEVICE_NAME 

设备的deviceName, 可从阿里云物联网平台控制台获取

数据类型: (char *)

AIOT_DYNREGMQOPT_SEND_TIMEOUT_MS 

dynregmq会话发送消息时可消费的最长时间间隔

数据类型: (uint32_t) 默认值: (5 * 1000) ms

AIOT_DYNREGMQOPT_RECV_TIMEOUT_MS 

dynregmq会话接收消息时可消费的最长时间间隔

数据类型: (uint32_t) 默认值: (5 * 1000) ms

AIOT_DYNREGMQOPT_RECV_HANDLER 

设置回调, 它在SDK收到网络报文的时候被调用, 告知用户

数据类型: (aiot_dynregmq_http_recv_handler_t)

AIOT_DYNREGMQOPT_USERDATA 

用户需要SDK暂存的上下文

这个上下文指针会在 AIOT_DYNREGMQOPT_RECV_HANDLER 和 AIOT_DYNREGMQOPT_EVENT_HANDLER 设置的回调被调用时, 由SDK传给用户

数据类型: (void *)

AIOT_DYNREGMQOPT_TIMEOUT_MS 

dynregmq模块接收消息的超时时间

数据类型: (uint32_t) 默认值: (5 * 1000) ms

AIOT_DYNREGMQOPT_DEINIT_TIMEOUT_MS 

销毁dynregmq实例时, 等待其他api执行完毕的时间

当调用aiot_dynregmq_deinit 销毁MQTT实例时, 若继续调用其他aiot_dynregmq_xxx API, API会返回STATE_USER_INPUT_EXEC_DISABLED 错误

此时, 用户应该停止调用其他aiot_dynregmq_xxx API

数据类型: (uint32_t *) 默认值: (2 * 1000) ms

AIOT_DYNREGMQOPT_NO_WHITELIST 

是否使用免白名单功能

  1. 配置为 0 则为白名单模式, 使用这种模式用户必须提前在控制台录入deviceName, 动态注册完成后服务会返回deviceSecret, 用户可通过 AIOT_DYNREGMQRECV_DEVICEINFO_WL类型数据回调获取到deviceSecret.
  2. 配置为 1 则为免白名单模式, 使用这种模式用户无需提前在控制台录入deviceName, 动态注册完成后服务会返回MQTT建连信息, 用户可通过 AIOT_DYNREGMQRECV_DEVICEINFO_NWL类型数据回调获取到clientid, username, password. 用户需要将这三个参数通过 aiot_mqtt_setopt接口以AIOT_MQTTOPT_CLIENTID, AIOT_MQTTOPT_USERNAME, AIOT_MQTTOPT_PASSWORD配置选项 配置到MQTT句柄中。

数据类型: (uint8_t *) 默认值: (0)

AIOT_DYNREGMQOPT_INSTANCE_ID 

用户购买的物联网平台实例ID. 当用户使用自购实例, 且使用免白名单方式时, 必须设置实例ID

数据类型: (char *)

AIOT_DYNREGMQOPT_MAX 

dynregmq模块收到从网络上来的报文时, 通知用户的报文类型

枚举值
AIOT_DYNREGMQRECV_DEVICEINFO_WL 

白名单模式下服务器返回的设备信息

AIOT_DYNREGMQRECV_DEVICEINFO_NWL 

免白名单模式下服务器返回的设备信息

函数说明

void* aiot_dynregmq_init ( void  )

创建dynregmq会话实例, 并以默认值配置会话参数

返回
void *
返回值
非NULLdynregmq实例的句柄
NULL初始化失败, 一般是内存分配失败导致

函数调用图:

int32_t aiot_dynregmq_setopt ( void *  handle,
aiot_dynregmq_option_t  option,
void *  data 
)

配置dynregmq会话

参数
[in]handledynregmq会话句柄
[in]option配置选项, 更多信息请参考aiot_dynregmq_option_t
[in]data配置选项数据, 更多信息请参考aiot_dynregmq_option_t
返回
int32_t
返回值
<STATE_SUCCESS参数配置失败
>=STATE_SUCCESS参数配置成功

函数调用图:

int32_t aiot_dynregmq_deinit ( void **  handle)

结束dynregmq会话, 销毁实例并回收资源

参数
[in]handle指向dynregmq会话句柄的指针
返回
int32_t
返回值
<STATE_SUCCESS执行失败
>=STATE_SUCCESS执行成功

函数调用图:

int32_t aiot_dynregmq_send_request ( void *  handle)

向dynregmq服务器发送dynregmq消息请求

参数
handledynregmq会话句柄
返回
int32_t
返回值
<STATE_SUCCESS请求发送失败
>=STATE_SUCCESS请求发送成功

函数调用图:

int32_t aiot_dynregmq_recv ( void *  handle)

从网络上收取dynregmq消息

参数
handledynregmq会话句柄
返回
int32_t
返回值
<STATE_SUCCESS数据接收失败
>=STATE_SUCCESS数据接收成功

函数调用图: