EC600U_esp32_iap_uart/LinkSDK/components/dynreg-mqtt/aiot_dynregmq_api.h

356 lines
10 KiB
C
Raw Normal View History

2024-02-05 17:39:56 +08:00
/**
* @file aiot_dynregmq_api.h
* @brief dynregmq模块头文件, MQTT的设备信息动态注册能力
*
* @copyright Copyright (C) 2015-2020 Alibaba Group Holding Limited
*
*/
#ifndef __AIOT_DYNREGMQ_API_H__
#define __AIOT_DYNREGMQ_API_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <stdint.h>
/**
* @brief -0x0500~-0x05FFSDK在dynregmq模块内的状态码
*/
#define STATE_DYNREGMQ_BASE (-0x0500)
/**
* @brief @ref aiot_dynregmq_deinit , API执行结束的超过设定的超时时间, DYNREGMQ实例销毁失败
*/
#define STATE_DYNREGMQ_DEINIT_TIMEOUT (-0x0501)
/**
* @brief @ref aiot_dynregmq_send_request
*/
#define STATE_DYNREGMQ_NEED_SEND_REQUEST (-0x0502)
/**
* @brief
*/
#define STATE_DYNREGMQ_AUTH_TIMEOUT (-0x0503)
/**
* @brief @ref aiot_dynregmq_setopt option参数可选值.
*
* @details , @ref aiot_dynregmq_setopt , data参数的数据类型
*
* 1. data的数据类型是char *, @ref AIOT_DYNREGMQOPT_HOST :
*
* char *host = "xxx";
* aiot_dynregmq_setopt(dynregmq_handle, AIOT_DYNREGMQOPT_HOST, host);
*
* 2. data的数据类型是其他数据类型时, @ref AIOT_DYNREGMQOPT_PORT :
*
* uint16_t port = 443;
* aiot_mqtt_setopt(dynregmq_handle, AIOT_DYNREGMQOPT_PORT, (void *)&port);
*/
typedef enum {
/**
* @brief mqtt动态注册 , 使, 使TLS方式建连
*
* @details
*
* @ref aiot_sysdep_network_cred_t
*
* @ref aiot_sysdep_network_cred_t option配置为@ref AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA , tls方式建联
*
* : (aiot_sysdep_network_cred_t *)
*/
AIOT_DYNREGMQOPT_NETWORK_CRED,
/**
* @brief mqtt动态注册 ip地址
*
* @details
*
* (使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_HOST,
/**
* @brief mqtt动态注册
*
* @details
*
* mqtt动态注册 :
*
* 使tls方式建联, 443
*
* : (uint16_t *)
*/
AIOT_DYNREGMQOPT_PORT,
/**
* @brief quectel EC100Y平台适配数据通道
*
* @details
*
*
* : (int)
*/
AIOT_DYNREGMQOPT_PROFILE_INDEX,
/**
* @brief productKey, <a href="http://iot.console.aliyun.com/"></a>
*
* @details
*
* : (char *)
*/
AIOT_DYNREGMQOPT_PRODUCT_KEY,
/**
* @brief productSecret, <a href="http://iot.console.aliyun.com/"></a>
*
* @details
*
* : (char *)
*/
AIOT_DYNREGMQOPT_PRODUCT_SECRET,
/**
* @brief deviceName, <a href="http://iot.console.aliyun.com/"></a>
*
* @details
*
* : (char *)
*/
AIOT_DYNREGMQOPT_DEVICE_NAME,
/**
* @brief dynregmq会话发送消息时可消费的最长时间间隔
*
* @details
*
* : (uint32_t) : (5 * 1000) ms
*/
AIOT_DYNREGMQOPT_CONNECT_TIMEOUT_MS,
/**
* @brief dynregmq建立连接超时时间
*
* @details
*
* : (uint32_t) : (5 * 1000) ms
*/
AIOT_DYNREGMQOPT_SEND_TIMEOUT_MS,
/**
* @brief dynregmq会话接收消息时可消费的最长时间间隔
*
* @details
*
* : (uint32_t) : (5 * 1000) ms
*/
AIOT_DYNREGMQOPT_RECV_TIMEOUT_MS,
/**
* @brief , SDK收到网络报文的时候被调用,
*
* @details
*
* : (aiot_dynregmq_http_recv_handler_t)
*/
AIOT_DYNREGMQOPT_RECV_HANDLER,
/**
* @brief SDK暂存的上下文
*
* @details
*
* AIOT_DYNREGMQOPT_RECV_HANDLER AIOT_DYNREGMQOPT_EVENT_HANDLER , SDK传给用户
*
* : (void *)
*/
AIOT_DYNREGMQOPT_USERDATA,
/**
* @brief dynregmq模块接收消息的超时时间
*
* @details
*
* : (uint32_t) : (5 * 1000) ms
*/
AIOT_DYNREGMQOPT_TIMEOUT_MS,
/**
* @brief dynregmq实例时, api执行完毕的时间
*
* @details
*
* @ref aiot_dynregmq_deinit MQTT实例时, aiot_dynregmq_xxx API, API会返回@ref STATE_USER_INPUT_EXEC_DISABLED
*
* , aiot_dynregmq_xxx API
*
* : (uint32_t *) : (2 * 1000) ms
*/
AIOT_DYNREGMQOPT_DEINIT_TIMEOUT_MS,
/**
* @brief 使
*
* @details
*
* 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_NO_WHITELIST,
/**
* @brief ID. 使, 使, ID
*
* @details
*
* : (char *)
*
*/
AIOT_DYNREGMQOPT_INSTANCE_ID,
AIOT_DYNREGMQOPT_MAX
} aiot_dynregmq_option_t;
/**
* @brief dynregmq模块收到从网络上来的报文时,
*/
typedef enum {
/**
* @brief
*/
AIOT_DYNREGMQRECV_DEVICEINFO_WL,
/**
* @brief
*/
AIOT_DYNREGMQRECV_DEVICEINFO_NWL,
} aiot_dynregmq_recv_type_t;
/**
* @brief dynregmq模块收到从网络上来的报文时,
*/
typedef struct {
/**
* @brief , @ref aiot_dynregmq_recv_type_t
*/
aiot_dynregmq_recv_type_t type;
union {
/**
* @brief
*/
struct {
char *device_secret;
} deviceinfo_wl;
/**
* @brief
*/
struct {
char *clientid;
char *username;
char *password;
} deviceinfo_nwl;
} data;
} aiot_dynregmq_recv_t;
/**
* @brief dynregmq模块收到从网络上来的报文时,
*
* @param[in] handle dynregmq会话句柄
* @param[in] packet dynregmq消息结构体, dynregmq报文内容
* @param[in] userdata
*
* @return void
*/
typedef void (* aiot_dynregmq_recv_handler_t)(void *handle,
const aiot_dynregmq_recv_t *packet, void *userdata);
/**
* @brief dynregmq会话实例,
*
* @return void *
* @retval NULL dynregmq实例的句柄
* @retval NULL ,
*
*/
void *aiot_dynregmq_init(void);
/**
* @brief dynregmq会话
*
* @param[in] handle dynregmq会话句柄
* @param[in] option , @ref aiot_dynregmq_option_t
* @param[in] data , @ref aiot_dynregmq_option_t
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_dynregmq_setopt(void *handle, aiot_dynregmq_option_t option, void *data);
/**
* @brief dynregmq会话,
*
* @param[in] handle dynregmq会话句柄的指针
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_dynregmq_deinit(void **handle);
/**
* @brief dynregmq服务器发送dynregmq消息请求
*
* @param handle dynregmq会话句柄
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*/
int32_t aiot_dynregmq_send_request(void *handle);
/**
* @brief dynregmq消息
*
* @param handle dynregmq会话句柄
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*/
int32_t aiot_dynregmq_recv(void *handle);
#if defined(__cplusplus)
}
#endif
#endif /* __AIOT_DYNREGMQMQ_API_H__ */