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