EC600U_esp32_iap_uart/LinkSDK/components/data-model/aiot_dm_api.h

647 lines
22 KiB
C
Raw Permalink Normal View History

2024-02-05 17:39:56 +08:00
/**
* @file aiot_dm_api.h
* @brief , , , ,
* @date 2020-01-20
*
* @copyright Copyright (C) 2015-2020 Alibaba Group Holding Limited
*
* @details
*
* 使API
*
* 1. 使, MQTT实例
*
* 2. `aiot_dm_init`,
*
* 3. `aiot_dm_setopt``AIOT_DMOPT_MQTT_HANDLE`MQTT句柄,
*
* 4. `aiot_dm_setopt``AIOT_DMOPT_RECV_HANDLER``AIOT_DMOPT_USERDATA`
*
* 5. 使`aiot_dm_send`, MQTT实例的建连
*
* 6. `aiot_dm_send`,
*
*/
#ifndef __AIOT_DM_API_H__
#define __AIOT_DM_API_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <stdint.h>
/**
* @brief -0x0A00~-0x0AFFSDK在data-model模块内的状态码
*/
#define STATE_DM_BASE (-0x0A00)
/**
* @brief @ref AIOT_DMMSG_EVENT_POST , event_id为NULL
*/
#define STATE_DM_EVENT_ID_IS_NULL (-0x0A01)
/**
* @brief @ref AIOT_DMMSG_ASYNC_SERVICE_REPLY @ref AIOT_DMMSG_SYNC_SERVICE_REPLY , event_id为NULL
*/
#define STATE_DM_SERVICE_ID_IS_NULL (-0x0A02)
/**
* @brief @ref AIOT_DMMSG_SYNC_SERVICE_REPLY , rrpc_id为NULL
*/
#define STATE_DM_RRPC_ID_IS_NULL (-0x0A03)
/**
* @brief , param为NULL
*/
#define STATE_DM_MSG_PARAMS_IS_NULL (-0X0A04)
/**
* @brief , data为NULL
*/
#define STATE_DM_MSG_DATA_IS_NULL (-0X0A05)
/**
* @brief topic时发生错误
*/
#define STATE_DM_INTERNAL_TOPIC_ERROR (-0x0A06)
/**
* @brief @ref aiot_dm_setopt MQTT句柄
*/
#define STATE_DM_MQTT_HANDLE_IS_NULL (-0x0A07)
/**
* @brief
*/
#define STATE_DM_LOG_RECV (-0x0A08)
/**
* @brief
*/
#define SATAE_DM_LOG_PARSE_RECV_MSG_FAILED (-0x0A09)
/**
* @brief data-model模块的配置选项枚举类型定义. @ref aiot_dm_setopt data的数据类型根据不同的选项而不同
*
*/
typedef enum {
/**
* @brief MQTT句柄
*
* @details
*
* data-model模块依赖底层的MQTT模块, MQTT句柄,
*
* : (void *)
*/
AIOT_DMOPT_MQTT_HANDLE,
/**
* @brief , data-model接收物联网平台的下行消息后调用此回调函数
*
* @details
*
* : (aiot_dm_recv_handler_t), @ref aiot_dm_recv_handler_t
*/
AIOT_DMOPT_RECV_HANDLER,
/**
* @brief
*
* @details
*
* @ref aiot_dm_recv_handler_t userdata参数将此指针返回给用户
*
* : (void *)
*/
AIOT_DMOPT_USERDATA,
/**
* @brief ,
*/
AIOT_DMOPT_MAX,
} aiot_dm_option_t;
/**
* @brief data-model模块发送消息类型
*
* @details
*
* dm模块支持发送的所有数据类型,
* <a href="https://help.aliyun.com/document_detail/89301.html">//</a>
*
*/
typedef enum {
/**
* @brief , @ref aiot_dm_msg_property_post_t \n
* , @ref AIOT_DMRECV_GENERIC_REPLY
*/
AIOT_DMMSG_PROPERTY_POST,
/**
* @brief , @ref aiot_dm_msg_event_post_t \n
* , @ref AIOT_DMRECV_GENERIC_REPLY
*/
AIOT_DMMSG_EVENT_POST,
/**
* @brief , @ref aiot_dm_msg_property_set_reply_t
*/
AIOT_DMMSG_PROPERTY_SET_REPLY,
/**
* @brief , @ref aiot_dm_msg_async_service_reply_t
*/
AIOT_DMMSG_ASYNC_SERVICE_REPLY,
/**
* @brief , @ref aiot_dm_msg_sync_service_reply_t
*/
AIOT_DMMSG_SYNC_SERVICE_REPLY,
/**
* @brief , @ref aiot_dm_msg_raw_data_t
*/
AIOT_DMMSG_RAW_DATA,
/**
* @brief , @ref aiot_dm_msg_raw_service_reply_t
*/
AIOT_DMMSG_RAW_SERVICE_REPLY,
/**
* @brief , @ref aiot_dm_msg_get_desired_t, \n
* , @ref AIOT_DMRECV_GENERIC_REPLY
*/
AIOT_DMMSG_GET_DESIRED,
/**
* @brief , @ref aiot_dm_msg_delete_desired_t \n
* , @ref AIOT_DMRECV_GENERIC_REPLY
*/
AIOT_DMMSG_DELETE_DESIRED,
/**
* @brief ,
*/
AIOT_DMMSG_MAX,
} aiot_dm_msg_type_t;
/**
* @brief <b></b>
*/
typedef struct {
/**
* @brief JSON结构体, <b>'\0'</b>. , <i>"{\"LightSwitch\":0}"</i>
*/
char *params;
} aiot_dm_msg_property_post_t;
/**
* @brief <b></b>
*/
typedef struct {
/**
* @brief , <b>'\0'</b>
*/
char *event_id;
/**
* @brief JSON结构体, <b>'\0'</b>. , <i>"{\"ErrorNum\":0}"</i>
*/
char *params;
} aiot_dm_msg_event_post_t;
/**
* @brief <b></b>, @ref AIOT_DMRECV_PROPERTY_SET ,
*/
typedef struct {
/**
* @brief , uint64_t类型的整数, <b></b>
*/
uint64_t msg_id;
/**
* @brief , 200-, <a href="https://help.aliyun.com/document_detail/89309.html">code</a>
*/
uint32_t code;
/**
* @brief , JSON结构体, <b>'\0'</b>, <i>"{}"</i>
*/
char *data;
} aiot_dm_msg_property_set_reply_t;
/**
* @brief <b></b>, @ref AIOT_DMRECV_ASYNC_SERVICE_INVOKE ,
*/
typedef struct {
/**
* @brief , uint64_t类型的整数, <b></b>
*/
uint64_t msg_id;
/**
* @brief ,
*/
char *service_id;
/**
* @brief , 200-, <a href="https://help.aliyun.com/document_detail/89309.html">code</a>
*/
uint32_t code;
/**
* @brief , JSON结构体, <b>'\0'</b>, <i>"{}"</i>
*/
char *data;
} aiot_dm_msg_async_service_reply_t;
/**
* @brief <b></b>, @ref AIOT_DMRECV_SYNC_SERVICE_INVOKE , (7s)
*/
typedef struct {
/**
* @brief , uint64_t类型的整数, <b></b>
*/
uint64_t msg_id;
/**
* @brief RRPC标示符, , <b>RRPC标示符一致</b>
*/
char *rrpc_id;
/**
* @brief ,
*/
char *service_id;
/**
* @brief , 200-, <a href="https://help.aliyun.com/document_detail/89309.html">code</a>
*/
uint32_t code;
/**
* @brief , JSON结构体, <b>'\0'</b>, <i>"{}"</i>
*/
char *data;
} aiot_dm_msg_sync_service_reply_t;
/**
* @brief <b></b>, JavaScript脚本转化为JSON格式数据,
*/
typedef struct {
/**
* @brief
*/
uint8_t *data;
/**
* @brief
*/
uint32_t data_len;
} aiot_dm_msg_raw_data_t;
/**
* @brief <b></b>, @ref AIOT_DMRECV_RAW_SYNC_SERVICE_INVOKE , (7s)\n
* 使,
*/
typedef struct {
/**
* @brief RRPC标示符, , <b>RRPC标示符一致</b>
*/
char *rrpc_id;
/**
* @brief
*/
uint8_t *data;
/**
* @brief
*/
uint32_t data_len;
} aiot_dm_msg_raw_service_reply_t;
/**
* @brief <b></b>,
*/
typedef struct {
/**
* @brief JSON<b></b>, <b>'\0'</b>. ID, <i>"[\"LightSwitch\"]"</i>
*/
char *params;
} aiot_dm_msg_get_desired_t;
/**
* @brief <b></b>
*/
typedef struct {
/**
* @brief JSON结构体, <b>'\0'</b>. ID和期望值版本号, <i>"{\"LightSwitch\":{\"version\":1},\"Color\":{}}"</i>
*/
char *params;
} aiot_dm_msg_delete_desired_t;
/**
* @brief data-model模块发送消息的消息结构体
*/
typedef struct {
/**
* @brief product_key, NULL则使用通过aiot_dm_setopt配置的product_key\n
* , product_key来发送子设备的消息到云端
*/
char *product_key;
/**
* @brief device_name, NULL则使用通过aiot_dm_setopt配置的device_name\n
* , product_key来发送子设备的消息到云端
*/
char *device_name;
/**
* @brief , @ref aiot_dm_msg_type_t
*/
aiot_dm_msg_type_t type;
/**
* @brief , 使
*/
union {
aiot_dm_msg_property_post_t property_post;
aiot_dm_msg_event_post_t event_post;
aiot_dm_msg_property_set_reply_t property_set_reply;
aiot_dm_msg_sync_service_reply_t sync_service_reply;
aiot_dm_msg_async_service_reply_t async_service_reply;
aiot_dm_msg_raw_data_t raw_data;
aiot_dm_msg_raw_service_reply_t raw_service_reply;
aiot_dm_msg_get_desired_t get_desired;
aiot_dm_msg_delete_desired_t delete_desired;
} data;
} aiot_dm_msg_t;
/**
* @brief data-model模块接受消息类型枚举
*
* @details
*
* dm模块支持接收的所有数据类型,
* <a href="https://help.aliyun.com/document_detail/89301.html">//</a>
*
*/
typedef enum {
/**
* @brief /, @ref aiot_dm_recv_generic_reply_t
*/
AIOT_DMRECV_GENERIC_REPLY,
/**
* @brief , @ref aiot_dm_recv_property_set_t
*/
AIOT_DMRECV_PROPERTY_SET,
/**
* @brief , @ref aiot_dm_recv_async_service_invoke_t
*/
AIOT_DMRECV_ASYNC_SERVICE_INVOKE,
/**
* @brief , @ref aiot_dm_recv_sync_service_invoke_t
*/
AIOT_DMRECV_SYNC_SERVICE_INVOKE,
/**
* @brief , @ref aiot_dm_recv_raw_data_t
*/
AIOT_DMRECV_RAW_DATA,
/**
* @brief , @ref aiot_dm_recv_raw_service_invoke_t
*/
AIOT_DMRECV_RAW_SYNC_SERVICE_INVOKE,
/**
* @brief ,
*/
AIOT_DMRECV_MAX,
} aiot_dm_recv_type_t;
/**
* @brief <b></b>, @ref AIOT_DMMSG_PROPERTY_POST, @ref AIOT_DMMSG_EVENT_POST @ref AIOT_DMMSG_GET_DESIRED ,
*/
typedef struct {
/**
* @brief , uint64_t类型的整数,
*/
uint32_t msg_id;
/**
* @brief , 200-, <a href="https://help.aliyun.com/document_detail/120329.html"></a>
*/
uint32_t code;
/**
* @brief
*/
char *data;
/**
* @brief
*/
uint32_t data_len;
/**
* @brief , "success",
*/
char *message;
/**
* @brief
*/
uint32_t message_len;
} aiot_dm_recv_generic_reply_t;
/**
* @brief <b></b>
*/
typedef struct {
/**
* @brief , uint64_t类型的整数
*/
uint64_t msg_id;
/**
* @brief , JSON结构体, <b></b>'\0', <i>"{\"LightSwitch\":0}"</i>
*/
char *params;
/**
* @brief
*/
uint32_t params_len;
} aiot_dm_recv_property_set_t;
/**
* @brief <b></b>, , (7s)
*/
typedef struct {
/**
* @brief , uint64_t类型的整数
*/
uint64_t msg_id;
/**
* @brief RRPC标识符,
*/
char *rrpc_id;
/**
* @brief ,
*/
char *service_id;
/**
* @brief , JSON结构体, <b></b>'\0', <i>"{\"LightSwitch\":0}"</i>
*/
char *params;
/**
* @brief
*/
uint32_t params_len;
} aiot_dm_recv_sync_service_invoke_t;
/**
* @brief <b></b>
*/
typedef struct {
/**
* @brief , uint64_t类型的整数
*/
uint64_t msg_id;
/**
* @brief ,
*/
char *service_id;
/**
* @brief , JSON结构体, <b></b>'\0', <i>"{\"LightSwitch\":0}"</i>
*/
char *params;
/**
* @brief
*/
uint32_t params_len;
} aiot_dm_recv_async_service_invoke_t;
/**
* @brief <b></b>, JSON格式物模型数据将通过物联网平台的JavaScript脚本转化为二进制数据,
*/
typedef struct {
/**
* @brief
*/
uint8_t *data;
/**
* @brief
*/
uint32_t data_len;
} aiot_dm_recv_raw_data_t;
/**
* @brief <b></b>, JSON格式物模型数据将通过物联网平台的JavaScript脚本转化为二进制数据,
*/
typedef struct {
/**
* @brief RRPC标识符,
*/
char *rrpc_id;
/**
* @brief
*/
uint8_t *data;
/**
* @brief
*/
uint32_t data_len;
} aiot_dm_recv_raw_service_invoke_t;
/**
* @brief data-model模块接收消息的结构体
*/
typedef struct {
/**
* @brief product_key, 使MQTT模块配置的product_key
*/
char *product_key;
/**
* @brief device_name, 使MQTT模块配置的device_name
*/
char *device_name;
/**
* @brief , @ref aiot_dm_recv_type_t
*/
aiot_dm_recv_type_t type;
/**
* @brief , 使
*/
union {
aiot_dm_recv_generic_reply_t generic_reply;
aiot_dm_recv_property_set_t property_set;
aiot_dm_recv_async_service_invoke_t async_service_invoke;
aiot_dm_recv_sync_service_invoke_t sync_service_invoke;
aiot_dm_recv_raw_data_t raw_data;
aiot_dm_recv_raw_service_invoke_t raw_service_invoke;
} data;
} aiot_dm_recv_t;
/**
* @brief data-model模块消息接收回调函数的函数原型定义, , <i>recv</i>, \n
* <i>userdata</i>
*
* @param[in] handle data-model实例句柄
* @param[in] recv , <b>, 使</b>
* @param[in] userdata , @ref aiot_dm_setopt @ref AIOT_DMOPT_USERDATA
*
* @return void
*/
typedef void (*aiot_dm_recv_handler_t)(void *handle, const aiot_dm_recv_t *recv, void *userdata);
/**
* @brief data-model实例
*
* @return void*
* @retval NULL data-model实例句柄
* @retval NULL ,
*/
void *aiot_dm_init(void);
/**
* @brief data-model参数
*
* @param[in] handle data-model实例句柄
* @param[in] option , @ref aiot_dm_option_t
* @param[in] data , @ref aiot_dm_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_DMOPT_MAX
* @retval others @ref aiot_state_api.h
*
*/
int32_t aiot_dm_setopt(void *handle, aiot_dm_option_t option, void *data);
/**
* @brief data-model消息到物联网平台, msg入参决定
*
* @param[in] handle data-model实例句柄
* @param[in] msg , <i>productKey</i>, <i>deviceName</i>; , , @ref aiot_dm_msg_t
*
* @return int32_t
* @retval >=STATE_SUCCESS , @ref AIOT_DMMSG_PROPERTY_POST, @ref AIOT_DMMSG_EVENT_POST, @ref AIOT_DMMSG_GET_DESIRED @ref AIOT_DMMSG_DELETE_DESIRED , \n
* >STATE_SUCCESS的消息标示符<i>msg_id</i>
* @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_DMMSG_MAX
* @retval STATE_SYS_DEPEND_MALLOC_FAILED
* @retval STATE_DM_MQTT_HANDLE_IS_NULL @ref aiot_dm_setopt MQTT句柄
* @retval others @ref aiot_state_api.h @ref STATE_DM_BASE
*
*/
int32_t aiot_dm_send(void *handle, const aiot_dm_msg_t *msg);
/**
* @brief data-model实例,
*
* @param[in] p_handle data-model实例句柄的指针
* @return int32_t
* @retval STATE_SUCCESS
* @retval <STATE_SUCCESS
*
*/
int32_t aiot_dm_deinit(void **p_handle);
#if defined(__cplusplus)
}
#endif
#endif /* #ifndef __AIOT_DM_API_H__ */