EC600U_esp32_iap_uart/LinkSDK/components/shadow/aiot_shadow_api.h

412 lines
12 KiB
C
Raw Permalink Normal View History

2024-02-05 17:39:56 +08:00
/**
* @file aiot_shadow_api.h
* @brief shadow模块头文件, , ,
*
* @copyright Copyright (C) 2015-2020 Alibaba Group Holding Limited
*
* @details
*
* 使API
*
* 1. 使, MQTT实例
*
* 2. `aiot_shadow_init`,
*
* 3. `aiot_shadow_setopt``AIOT_SHADOWOPT_MQTT_HANDLE`MQTT句柄,
*
* 4. `aiot_shadow_setopt``AIOT_SHADOWOPT_RECV_HANDLER``AIOT_SHADOWOPT_USERDATA`
*
* 5. 使`aiot_shadow_send`, MQTT实例的建连
*
* 6. `aiot_shadow_send`, ,
*
*/
#ifndef __AIOT_SHADOW_API_H__
#define __AIOT_SHADOW_API_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <stdint.h>
/**
* @brief -0x1300~-0x13FFSDK在data-model模块内的状态码
*/
#define STATE_SHADOW_BASE (-0x1300)
/**
* @brief @ref aiot_shadow_setopt MQTT句柄
*/
#define STATE_SHADOW_MQTT_HANDLE_IS_NULL (-0x1301)
/**
* @brief @ref AIOT_SHADOWMSG_UPDATE @ref AIOT_SHADOWMSG_DELETE_REPORTED , reported为NULL
*
*/
#define STATE_SHADOW_REPORTED_DATA_IS_NULL (-0x1302)
/**
* @brief topic时发生错误
*/
#define STATE_SHADOW_INTERNAL_TOPIC_ERROR (-0x1303)
/**
* @brief
*/
#define STATE_SHADOW_LOG_RECV (-0x1304)
/**
* @brief
*/
#define SATAE_SHADOW_LOG_PARSE_RECV_MSG_FAILED (-0x1305)
/**
* @brief @ref aiot_shadow_setopt option参数可选值.
*
* @details , @ref aiot_shadow_setopt , data参数的数据类型
*
* data的数据类型是char *, @ref AIOT_SHADOWOPT_PRODUCT_KEY :
*
* char *product_key = "xxx";
* aiot_shadow_setopt(shadow_handle, AIOT_SHADOWOPT_PRODUCT_KEY, product_key);
*
*/
typedef enum {
/**
* @brief MQTT句柄
*
* @details
*
* shadow模块依赖底层的MQTT模块, MQTT句柄, , (void *)
*/
AIOT_SHADOWOPT_MQTT_HANDLE,
/**
* @brief , SDK收到网络报文的时候被调用, , (aiot_shadow_recv_handler_t)
*/
AIOT_SHADOWOPT_RECV_HANDLER,
/**
* @brief SDK暂存的上下文, (void *)
*
* @details AIOT_SHADOWOPT_RECV_HANDLER , SDK传给用户
*/
AIOT_SHADOWOPT_USERDATA,
/**
* @brief ,
*/
AIOT_SHADOWOPT_MAX,
} aiot_shadow_option_t;
/**
* @brief shadow模块发送消息类型
*
* @details
*
* shadow模块支持发送的所有数据类型,
*
*/
typedef enum {
/**
* @brief reported值, @ref aiot_shadow_msg_update_t
*
*/
AIOT_SHADOWMSG_UPDATE,
/**
* @brief desired值, @ref aiot_shadow_msg_clean_desired_t
*
*/
AIOT_SHADOWMSG_CLEAN_DESIRED,
/**
* @brief , @ref aiot_shadow_msg_get_t
*
*/
AIOT_SHADOWMSG_GET,
/**
* @brief reported值, @ref aiot_shadow_msg_delete_reported_t
*
*/
AIOT_SHADOWMSG_DELETE_REPORTED,
/**
* @brief ,
*/
AIOT_SHADOWMSG_MAX,
} aiot_shadow_msg_type_t;
/**
* @brief <b>reported数据</b>
*/
typedef struct {
/**
* @brief reported object字符串, <b>'\0'</b>, "{\"LightSwitch\": 1}"
*/
char *reported;
/**
* @brief , <b></b>, -1, 0
*/
int64_t version;
} aiot_shadow_msg_update_t;
/**
* @brief <b>desired数据</b>
*/
typedef struct {
/**
* @brief , <b></b>
*/
int64_t version;
} aiot_shadow_msg_clean_desired_t;
/**
* @brief <b></b>,
*/
typedef struct {
/**
* @brief
*/
uint32_t resevered;
} aiot_shadow_msg_get_t;
/**
* @brief <b>reported数据</b>
*/
typedef struct {
/**
* @brief reported数据, <b>'\0'</b>. \n
* reported数据, "\"null\"" \n
* reported数据, null, LightSwitch的值应填写"{\"LightSwitch\":\"null\"}"
*/
char *reported;
/**
* @brief , <b></b>
*/
int64_t version;
} aiot_shadow_msg_delete_reported_t;
/**
* @brief data-model模块发送消息的消息结构体
*/
typedef struct {
/**
* @brief product_key, NULL则使用通过aiot_shadow_setopt配置的product_key \n
* , product_key来发送子设备的消息到云端
*/
char *product_key;
/**
* @brief device_name, NULL则使用通过aiot_shadow_setopt配置的device_name \n
* , product_key来发送子设备的消息到云端
*/
char *device_name;
/**
* @brief , @ref aiot_shadow_msg_type_t
*/
aiot_shadow_msg_type_t type;
/**
* @brief , 使
*/
union {
aiot_shadow_msg_update_t update;
aiot_shadow_msg_clean_desired_t clean_desired;
aiot_shadow_msg_get_t get;
aiot_shadow_msg_delete_reported_t delete_reporte;
} data;
} aiot_shadow_msg_t;
/**
* @brief shadow模块收到从网络上来的报文时,
*/
typedef enum {
/**
* @brief @ref AIOT_SHADOWMSG_UPDATE, @ref AIOT_SHADOWMSG_CLEAN_DESIRED @ref AIOT_SHADOWMSG_DELETE_REPORTED 3, , \n
* @ref aiot_shadow_recv_generic_reply_t
*/
AIOT_SHADOWRECV_GENERIC_REPLY,
/**
* @brief 线, , @ref aiot_shadow_recv_control_t
*/
AIOT_SHADOWRECV_CONTROL,
/**
* @brief , @ref aiot_shadow_recv_get_reply_t
*/
AIOT_SHADOWRECV_GET_REPLY,
} aiot_shadow_recv_type_t;
/**
* @brief @ref AIOT_SHADOWMSG_UPDATE, @ref AIOT_SHADOWMSG_CLEAN_DESIRED @ref AIOT_SHADOWMSG_DELETE_REPORTED ,
*/
typedef struct {
/**
* @brief
*/
char *payload;
/**
* @brief
*/
uint32_t payload_len;
/**
* @brief , <b>success</b>, <b>error</b>, payload中
*/
char *status;
/**
* @brief
*/
uint64_t timestamp;
} aiot_shadow_recv_generic_reply_t;
/**
* @brief 线, API<a href="https://help.aliyun.com/document_detail/69954.html#doc-api-Iot-UpdateDeviceShadow">UpdateDeviceShadow</a>
*/
typedef struct {
/**
* @brief
*/
char *payload;
/**
* @brief
*/
uint32_t payload_len;
/**
* @brief
*/
uint64_t version;
} aiot_shadow_recv_control_t;
/**
* @brief @ref AIOT_SHADOWMSG_GET ,
*/
typedef struct {
/**
* @brief
*/
char *payload;
/**
* @brief
*/
uint32_t payload_len;
/**
* @brief
*/
uint64_t version;
} aiot_shadow_recv_get_reply_t;
/**
* @brief shadow模块收到从网络上来的报文时,
*/
typedef struct {
/**
* @brief product_key
*/
char *product_key;
/**
* @brief device_name
*/
char *device_name;
/**
* @brief , @ref aiot_shadow_recv_type_t
*/
aiot_shadow_recv_type_t type;
/**
* @brief , 使
*/
union {
aiot_shadow_recv_generic_reply_t generic_reply;
aiot_shadow_recv_control_t control;
aiot_shadow_recv_get_reply_t get_reply;
} data;
} aiot_shadow_recv_t;
/**
* @brief shadow模块收到从网络上来的报文时,
*
* @param[in] handle shadow会话句柄
* @param[in] recv shadow接受消息结构体, shadow报文内容
* @param[in] userdata , @ref aiot_shadow_setopt @ref AIOT_SHADOWOPT_USERDATA
*
* @return void
*/
typedef void (* aiot_shadow_recv_handler_t)(void *handle,
const aiot_shadow_recv_t *recv, void *userdata);
/**
* @brief shadow会话实例,
*
* @return void *
* @retval NULL shadow实例的句柄
* @retval NULL ,
*
*/
void *aiot_shadow_init(void);
/**
* @brief shadow会话
*
* @param[in] handle shadow会话句柄
* @param[in] option , @ref aiot_shadow_option_t
* @param[in] data , @ref aiot_shadow_option_t
*
* @return int32_t
* @retval STATE_SUCCESS
* @retval STATE_USER_INPUT_NULL_POINTER handle或data为NULL
* @retval STATE_USER_INPUT_OUT_RANGE optioin的枚举值>=AIOT_SHADOWOPT_MAX
* @retval others @ref aiot_state_api.h
*
*/
int32_t aiot_shadow_setopt(void *handle, aiot_shadow_option_t option, void *data);
/**
* @brief shadow消息请求
*
* @param[in] handle shadow会话句柄
* @param[in] msg , <i>productKey</i>, <i>deviceName</i>; , , @ref aiot_shadow_msg_t
*
* @return int32_t
* @retval STATE_SUCCESS
* @retval STATE_USER_INPUT_NULL_POINTER <i>handle</i><i>msg</i>NULL
* @retval STATE_USER_INPUT_OUT_RANGE <i>msg</i><i>type</i> >= AIOT_SHADOWMSG_MAX
* @retval STATE_SYS_DEPEND_MALLOC_FAILED
* @retval STATE_SHADOW_MQTT_HANDLE_IS_NULL @ref aiot_shadow_setopt MQTT句柄
* @retval others @ref aiot_state_api.h @ref STATE_SHADOW_BASE
*
*/
int32_t aiot_shadow_send(void *handle, aiot_shadow_msg_t *msg);
/**
* @brief shadow会话,
*
* @param[in] handle shadow会话句柄的指针
*
* @return int32_t
* @retval STATE_SUCCESS
* @retval <STATE_SUCCESS
*
*/
int32_t aiot_shadow_deinit(void **handle);
#if defined(__cplusplus)
}
#endif
#endif /* __AIOT_SHADOW_API_H__ */