EC600U_esp32_iap_uart/LinkSDK/components/devinfo/aiot_devinfo_api.h

316 lines
9.3 KiB
C
Raw Normal View History

2024-02-05 17:39:56 +08:00
/**
* @file aiot_devinfo_api.h
* @brief devinfo模块头文件,
*
* @copyright Copyright (C) 2015-2020 Alibaba Group Holding Limited
*
* @details
*
* Devinfo模块用于向阿里云物联网平台更新或删除设备的标签, API的使用流程如下:
*
* 1. @ref aiot_mqtt_api.h , `MQTT`
*
* 2. @ref aiot_devinfo_init devinfo会话,
*
* 3. @ref aiot_devinfo_setopt devinfo会话的参数, @ref aiot_devinfo_setopt
*
* 4. @ref aiot_devinfo_send ,
*
* 5. SDK处理后会调用由 @ref aiot_devinfo_setopt @ref AIOT_DEVINFOOPT_RECV_HANDLER ,
*
*/
#ifndef __AIOT_DEVINFO_API_H__
#define __AIOT_DEVINFO_API_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <stdint.h>
/**
* @brief -0x1200~-0x12FFSDK在devinfo模块内的状态码
*/
#define STATE_DEVINFO_BASE (-0x1200)
/**
* @brief MQTT会话句柄未设置, @ref aiot_devinfo_setopt MQTT会话句柄
*/
#define STATE_DEVINFO_MISSING_MQTT_HANDLE (-0x1201)
/**
* @brief devinfo模块收到从网络上来的报文时,
*/
typedef enum {
AIOT_DEVINFORECV_GENERIC_REPLY,
} aiot_devinfo_recv_type_t;
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_devinfo_recv_generic_reply_t;
/**
* @brief devinfo模块收到从网络上来的报文时,
*/
typedef struct {
char *product_key;
char *device_name;
/**
* @brief , @ref aiot_devinfo_recv_type_t
*/
aiot_devinfo_recv_type_t type;
union {
/**
* @brief
*/
aiot_devinfo_recv_generic_reply_t generic_reply;
} data;
} aiot_devinfo_recv_t;
/**
* @brief devinfo模块收到从网络上来的报文时,
*
* @param[in] handle devinfo会话句柄
* @param[in] packet devinfo消息结构体, devinfo报文内容
* @param[in] userdata
*
* @return void
*/
typedef void (* aiot_devinfo_recv_handler_t)(void *handle, const aiot_devinfo_recv_t *packet, void *userdata);
/**
* @brief devinfo模块内部发生值得用户关注的状态变化时,
*/
typedef enum {
/**
* @brief , product key和device name
*/
AIOT_DEVINFOEVT_INVALID_DEVINFO,
/**
* @brief
*/
AIOT_DEVINFOEVT_INVALID_RESPONSE,
/**
* @brief
*/
AIOT_DEVINFOEVT_INVALID_RESPONSE_FORMAT,
} aiot_devinfo_event_type_t;
/**
* @brief devinfo模块内部发生值得用户关注的状态变化时,
*/
typedef struct {
/**
* @brief , @ref aiot_devinfo_event_type_t
*/
aiot_devinfo_event_type_t type;
} aiot_devinfo_event_t;
/**
* @brief devinfo模块内部发生值得用户关注的状态变化时,
*
* @param[in] handle, devinfo会话句柄
* @param[in] event, devinfo模块中发生的事件的内容
* @param[in] userdata,
*
* @return void
*/
typedef void (*aiot_devinfo_event_handler_t)(void *handle, const aiot_devinfo_event_t *event, void *userdata);
/**
* @brief @ref aiot_devinfo_msg_t
*
* @details
*
* ,
*/
typedef enum {
/**
* @brief
*/
AIOT_DEVINFO_MSG_UPDATE,
/**
* @brief
*/
AIOT_DEVINFO_MSG_DELETE
} aiot_devinfo_msg_type_t;
/**
* @brief params内容
*/
typedef struct {
char *params;
} aiot_devinfo_msg_data_t;
typedef struct {
/**
* @brief product key
*/
char *product_key;
/**
* @brief device name
*/
char *device_name;
/**
* @brief , @ref aiot_devinfo_msg_type_t
*/
aiot_devinfo_msg_type_t type;
union {
/**
* @brief , "[{\"attrKey\":\"xxx\",\"attrValue\":\"yyy\"}]"
*
* @details
*
* JSON数组attrKey和attrValue上报多组设备标签
*/
aiot_devinfo_msg_data_t update;
/**
* @brief , "[{\"attrKey\":\"xxx\"}]"
*
* @details
*
* JSON数组attrKey删除多组设备标签
*/
aiot_devinfo_msg_data_t delete;
} data;
} aiot_devinfo_msg_t;
/**
* @brief @ref aiot_devinfo_setopt option参数可选值.
*
* @details , @ref aiot_devinfo_setopt , data参数的数据类型
*
* 1. data的数据类型是void *, @ref AIOT_DEVINFOOPT_MQTT_HANDLE :
*
* void *mqtt_handle = aiot_mqtt_init();
* aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_MQTT_HANDLE, mqtt_handle);
*
* 2. data的数据类型是其他数据类型时, @ref AIOT_DEVINFOOPT_DEINIT_TIMEOUT_MS :
*
* uint32_t deinit_timeout_ms = 443;
* aiot_devinfo_setopt(devinfo_handle, AIOT_DEVINFOOPT_DEINIT_TIMEOUT_MS, (void *)&deinit_timeout_ms);
*/
typedef enum {
/**
* @brief devinfo会话 MQTT句柄, MQTT连接, MQTT句柄
*/
AIOT_DEVINFOOPT_MQTT_HANDLE,
/**
* @brief , SDK收到网络报文的时候被调用,
*
* @details
*
* : ( @ref aiot_devinfo_recv_handler_t)
*/
AIOT_DEVINFOOPT_RECV_HANDLER,
/**
* @brief , SDK发生内部状态变更时被调用,
*
* @details
*
* : ( @ref aiot_devinfo_event_handler_t)
*/
AIOT_DEVINFOOPT_EVENT_HANDLER,
/**
* @brief SDK暂存的上下文, (void *)
*
* @details AIOT_DEVINFOOPT_RECV_HANDLER AIOT_DEVINFOOPT_EVENT_HANDLER , SDK传给用户
*/
AIOT_DEVINFOOPT_USERDATA,
/**
* @brief devinfo实例时, api执行完毕的时间
*
* @details
*
* @ref aiot_devinfo_deinit devinfo实例时, aiot_devinfo_xxx API, API会返回@ref STATE_USER_INPUT_EXEC_DISABLED
*
* , aiot_devinfo_xxx API
*
* : (uint32_t *) : (2 * 1000) ms
*/
AIOT_DEVINFOOPT_DEINIT_TIMEOUT_MS,
AIOT_DEVINFOOPT_MAX
} aiot_devinfo_option_t;
/**
* @brief devinfo会话实例,
*
* @return void *
* @retval NULL devinfo实例的句柄
* @retval NULL ,
*
*/
void *aiot_devinfo_init(void);
/**
* @brief devinfo会话
*
* @param[in] handle devinfo会话句柄
* @param[in] option , @ref aiot_devinfo_option_t
* @param[in] data , @ref aiot_devinfo_option_t
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_devinfo_setopt(void *handle, aiot_devinfo_option_t option, void *data);
/**
* @brief devinfo会话,
*
* @param[in] handle devinfo会话句柄的指针
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_devinfo_deinit(void **handle);
/**
* @brief devinfo服务器发送devinfo消息请求
*
* @param handle devinfo会话句柄
* @param msg devinfo发送给云端的删除/
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*/
int32_t aiot_devinfo_send(void *handle, aiot_devinfo_msg_t *msg);
#if defined(__cplusplus)
}
#endif
#endif /* __AIOT_DEVINFO_API_H__ */