1 /*
2  * Copyright (C) 2015-2019 Alibaba Group Holding Limited
3  */
4 
5 #include "stdint.h"
6 #include "quickjs.h"
7 #include "aiot_mqtt_api.h"
8 
9 typedef enum {
10     AOS_MQTT_CONNECT,
11     AOS_MQTT_RECONNECT,
12     AOS_MQTT_DISCONNECT,
13     AOS_MQTT_MESSAGE
14 } aos_mqtt_res_type_t;
15 
16 /**
17  * @brief subdev模块内部发生值得用户关注的状态变化时, 通知用户的事件类型
18  */
19 typedef enum {
20     /**
21      * @brief 非法的应答报文
22      */
23     MQTT_JSCALLBACK_INVALID_REF,
24     /**
25      * @brief 应答报文的id字段非法
26      */
27     MQTT_JSCALLBACK_START_CLIENT_REF,
28     /**
29      * @brief 应答报文的id字段非法
30      */
31     MQTT_JSCALLBACK_SCRIBE_TOPIC_REF,
32     /**
33      * @brief 应答报文的id字段非法
34      */
35     MQTT_JSCALLBACK_UNSCRIBE_TOPIC_REF,
36     /**
37      * @brief 应答报文的id字段非法
38      */
39     MQTT_JSCALLBACK_PUBLISH_REF,
40     /**
41      * @brief 应答报文的id字段非法
42      */
43     MQTT_JSCALLBACK_CLIENT_STOP_REF,
44     /**
45      * @brief 应答报文的code字段非法
46      */
47     MQTT_JSCALLBACK_COMMON_REF,
48     /**
49      * @brief 应答报文的code字段非法
50      */
51     MQTT_JSCALLBACK_INVALID_CODE
52 } amp_mqtt_jscallback_type_t;
53 
54 typedef struct {
55     aiot_mqtt_recv_type_t type;
56     int code;
57     int topic_len;
58     int payload_len;
59     char *topic;
60     char *payload;
61 } aos_mqtt_recv_t;
62 
63 typedef struct {
64     aiot_mqtt_event_type_t type;
65     int code;
66 } aos_mqtt_event_t;
67 
68 typedef struct {
69     aiot_mqtt_option_t option;
70     aos_mqtt_recv_t recv;
71     aos_mqtt_event_t event;
72 } aos_mqtt_message_t;
73 
74 typedef struct {
75     void (*callback)(aos_mqtt_message_t *message, void *userdata);
76     void *handle;
77 } aos_mqtt_userdata_t;
78 
79 typedef struct aos_mqtt_handle {
80     char *host;
81     uint16_t port;
82     char *clientid;
83     char *username;
84     char *password;
85     uint16_t keepaliveSec;
86     void *mqtt_handle;
87     JSValue js_cb_ref[MQTT_JSCALLBACK_INVALID_CODE];
88     int res;
89 } aos_mqtt_handle_t;
90 
91 /* create mqtt client */
92 int32_t mqtt_client_start(void **handle, aos_mqtt_userdata_t *userdata);
93 
94 /* destroy mqtt client */
95 int32_t mqtt_client_stop(void **handle);
96