130 lines
4.6 KiB
C
130 lines
4.6 KiB
C
#ifndef _QCLOUD_EVENT_H_
|
||
#define _QCLOUD_EVENT_H_
|
||
|
||
#define QCLOUD_EVENT_TOKEN_MAX (32)
|
||
|
||
#define EVENT_FIELD_POST "event_post"
|
||
#define EVENT_FIELD_POSTS "events_post"
|
||
#define EVENT_FIELD_REPLY "event_reply"
|
||
|
||
#define EVENT_REPLY_FIELD_CODE "code"
|
||
#define EVENT_REPLY_FIELD_STATUS "status"
|
||
|
||
typedef void (*event_reply_handler_fn_t)(void *client, mqtt_incoming_msg_t *msg);
|
||
|
||
typedef struct qcloud_event_reply_st {
|
||
qcloud_list_t list;
|
||
|
||
char client_token[QCLOUD_EVENT_TOKEN_MAX]; // 鏍囪瘑璇ヨ<E79287>姹傜殑clientToken瀛楁<E7809B>
|
||
osal_timer_t timer; // 璇锋眰瓒呮椂瀹氭椂鍣<E6A482>
|
||
event_reply_handler_fn_t handler; // 浜嬩欢涓婃姤鍥炲<E98DA5>鍥炶皟
|
||
} qcloud_event_reply_t;
|
||
|
||
typedef enum event_sync_state_en {
|
||
QCLOUD_EVENT_SYNC_STATE_NONE,
|
||
QCLOUD_EVENT_SYNC_STATE_PENDACK,
|
||
QCLOUD_EVENT_SYNC_STATE_SUCCESS,
|
||
QCLOUD_EVENT_SYNC_STATE_TIMEOUT,
|
||
QCLOUD_EVENT_SYNC_STATE_NACK,
|
||
} event_sync_state_t;
|
||
|
||
typedef struct qcloud_event_st {
|
||
char *event_name; // event name
|
||
char *type; // event type
|
||
uint32_t timestamp; // timestamp
|
||
uint8_t event_payload_count; // count of event_payload
|
||
shadow_dev_property_t *event_payload; // payload of the event
|
||
} qcloud_event_t;
|
||
|
||
typedef struct qcloud_event_client_st {
|
||
void *reply_list_lock;
|
||
qcloud_list_t reply_list;
|
||
|
||
char down_topic[QCLOUD_MQTT_TOPIC_SIZE_MAX];
|
||
char up_topic[QCLOUD_MQTT_TOPIC_SIZE_MAX];
|
||
|
||
event_sync_state_t sync_state;
|
||
|
||
qcloud_shadow_client_t *shadow_client;
|
||
} qcloud_event_client_t;
|
||
|
||
__QCLOUD_API__ qcloud_err_t qcloud_event_client_create(qcloud_event_client_t *client, qcloud_shadow_client_t *shadow_client, qcloud_device_t *device);
|
||
|
||
__QCLOUD_API__ qcloud_err_t qcloud_event_client_destroy(qcloud_event_client_t *client);
|
||
|
||
/**
|
||
* @brief 事件上报,传入事件数组,SDK完成事件的json格式封装
|
||
* @param pClient shadow 实例指针
|
||
* @param pJsonDoc 用于构建json格式上报信息的buffer
|
||
* @param sizeOfBuffer 用于构建json格式上报信息的buffer大小
|
||
* @param event_count 待上报的事件个数
|
||
* @param pEventArry 待上报的事件数组指
|
||
* @param replyCb 事件回复消息的回调
|
||
* @return @see IoT_Error_Code
|
||
*/
|
||
__QCLOUD_API__ qcloud_err_t qcloud_event_client_post(qcloud_event_client_t *client,
|
||
char *json_doc,
|
||
size_t json_doc_size,
|
||
int event_count,
|
||
qcloud_event_t *events[],
|
||
event_reply_handler_fn_t handler);
|
||
|
||
/**
|
||
* @brief 事件上报,用户传入已构建好的事件的json格式,SDK增加事件头部即上报
|
||
* @param pClient shadow 实例指针
|
||
* @param pJsonDoc 用于构建json格式上报信息的buffer
|
||
* @param sizeOfBuffer 用于构建json格式上报信息的buffer大小
|
||
* @param pEventMsg 待上报的事件json信息
|
||
* json事件格式:
|
||
* 单个事件:
|
||
* {"method": "event_post",
|
||
* "clientToken": "123",
|
||
* "version": "1.0",
|
||
* "eventId": "PowerAlarm",
|
||
* "type": "fatal",
|
||
* "timestamp": 1212121221,
|
||
* "params": {
|
||
* "Voltage": 2.8,
|
||
* "Percent": 20
|
||
* }
|
||
* }
|
||
*
|
||
* 多个事件:
|
||
* {
|
||
* "eventId": "PowerAlarm",
|
||
* "type": "fatal",
|
||
* "timestamp": 1212121221,
|
||
* "params": {
|
||
* "Voltage": 2.8,
|
||
* "Percent": 20
|
||
* }
|
||
* },
|
||
* {
|
||
* "name": "PowerAlarm",
|
||
* "type": "fatal",
|
||
* "timestamp": 1212121223,
|
||
* "params": {
|
||
* "Voltage": 2.1,
|
||
* "Percent": 10
|
||
* }
|
||
* },
|
||
* ....
|
||
*
|
||
* @param replyCb 事件回复消息的回调
|
||
* @return @see IoT_Error_Code
|
||
*/
|
||
__QCLOUD_API__ qcloud_err_t qcloud_event_client_post_raw(qcloud_event_client_t *client,
|
||
char *json_doc,
|
||
size_t json_doc_size,
|
||
char *event_msg,
|
||
event_reply_handler_fn_t handler);
|
||
|
||
__QCLOUD_INTERNAL__ qcloud_err_t event_json_node_add(char *json_doc, size_t json_doc_size, const char *key, void *data, json_data_type_t type);
|
||
|
||
__QCLOUD_INTERNAL__ int event_json_return_code_parse(char *json_doc, int32_t *return_code);
|
||
|
||
__QCLOUD_INTERNAL__ int event_json_status_parse(char *json_doc, char **return_status);
|
||
|
||
#endif
|
||
|