Просмотр исходного кода

1、添加内存剩余检测,低于50MB将重启设备
2、mqtt加密连接ok(需使能mongoose内的openssl宏)

guohui лет назад: 2
Родитель
Сommit
1a351e8ad0
12 измененных файлов с 654 добавлено и 2046 удалено
  1. 457 1804
      pro/mongoose/mongoose.c
  2. 12 142
      pro/mongoose/mongoose.h
  3. 3 4
      pro/src/app.c
  4. 0 44
      pro/src/appweb.conf
  5. 3 5
      pro/src/appweb_handle.c
  6. 13 6
      pro/src/dflt.c
  7. 2 2
      pro/src/main.c
  8. 111 29
      pro/src/mqtt.c
  9. 1 1
      pro/src/netswitch.c
  10. 37 8
      pro/src/sqlite_handle.c
  11. 1 1
      pro/src/switch_ctrl.c
  12. 14 0
      pro/src/thread.c

Разница между файлами не показана из-за своего большого размера
+ 457 - 1804
pro/mongoose/mongoose.c


+ 12 - 142
pro/mongoose/mongoose.h

@@ -186,7 +186,7 @@ extern "C" {
 #define calloc(a, b) mg_calloc(a, b)
 #define free(a) vPortFree(a)
 #define malloc(a) pvPortMalloc(a)
-#define strdup(s) ((char *) mg_strdup(mg_str(s)).buf)
+#define strdup(s) mg_mprintf("%s", s)
 
 // Re-route calloc/free to the FreeRTOS's functions, don't use stdlib
 static inline void *mg_calloc(size_t cnt, size_t size) {
@@ -288,7 +288,7 @@ extern uint32_t rt_time_get(void);
 #include "cmsis_os2.h"  // keep this include
 #endif
 
-#define strdup(s) ((char *) mg_strdup(mg_str(s)).buf)
+#define strdup(s) mg_mprintf("%s", s)
 
 #if defined(__ARMCC_VERSION)
 #define mode_t size_t
@@ -549,6 +549,7 @@ int sscanf(const char *, const char *, ...);
 
 #include <FreeRTOS_IP.h>
 #include <FreeRTOS_Sockets.h>
+#include <FreeRTOS_errno_TCP.h>  // contents to be moved and file removed, some day
 
 #define MG_SOCKET_TYPE Socket_t
 #define MG_INVALID_SOCKET FREERTOS_INVALID_SOCKET
@@ -580,7 +581,6 @@ int sscanf(const char *, const char *, ...);
 
 #define sockaddr_in freertos_sockaddr
 #define sockaddr freertos_sockaddr
-#define sin_addr sin_address.ulIP_IPv4
 #define accept(a, b, c) FreeRTOS_accept((a), (b), (c))
 #define connect(a, b, c) FreeRTOS_connect((a), (b), (c))
 #define bind(a, b, c) FreeRTOS_bind((a), (b), (c))
@@ -707,7 +707,7 @@ struct timeval {
 #endif
 
 #ifndef MG_ENABLE_IPV6
-#define MG_ENABLE_IPV6 0
+#define MG_ENABLE_IPV6 1
 #endif
 
 #ifndef MG_IPV6_V6ONLY
@@ -861,7 +861,6 @@ struct mg_str mg_str_n(const char *s, size_t n);
 int mg_casecmp(const char *s1, const char *s2);
 int mg_strcmp(const struct mg_str str1, const struct mg_str str2);
 int mg_strcasecmp(const struct mg_str str1, const struct mg_str str2);
-struct mg_str mg_strdup(const struct mg_str s);
 bool mg_match(struct mg_str str, struct mg_str pattern, struct mg_str *caps);
 bool mg_span(struct mg_str s, struct mg_str *a, struct mg_str *b, char delim);
 
@@ -1052,6 +1051,7 @@ uint16_t mg_ntohs(uint16_t net);
 uint32_t mg_ntohl(uint32_t net);
 uint32_t mg_crc32(uint32_t crc, const char *buf, size_t len);
 uint64_t mg_millis(void);  // Return milliseconds since boot
+uint64_t mg_now(void);     // Return milliseconds since Epoch
 bool mg_path_is_sane(const struct mg_str path);
 
 #define mg_htons(x) mg_ntohs(x)
@@ -1935,116 +1935,6 @@ typedef uint64_t mg_uecc_word_t;
 
 #endif /* _UECC_TYPES_H_ */
 // End of uecc BSD-2
-// portable8439 v1.0.1
-// Source: https://github.com/DavyLandman/portable8439
-// Licensed under CC0-1.0
-// Contains poly1305-donna e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781 (Public
-// Domain)
-
-
-
-
-#ifndef __PORTABLE_8439_H
-#define __PORTABLE_8439_H
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-// provide your own decl specificier like -DPORTABLE_8439_DECL=ICACHE_RAM_ATTR
-#ifndef PORTABLE_8439_DECL
-#define PORTABLE_8439_DECL
-#endif
-
-/*
- This library implements RFC 8439 a.k.a. ChaCha20-Poly1305 AEAD
-
- You can use this library to avoid attackers mutating or reusing your
- encrypted messages. This does assume you never reuse a nonce+key pair and,
- if possible, carefully pick your associated data.
-*/
-
-// Make sure we are either nested in C++ or running in a C99+ compiler
-#if !defined(__cplusplus) && !defined(_MSC_VER) && \
-    (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L)
-#error "C99 or newer required"
-#endif
-
-// #if CHAR_BIT > 8
-// #    error "Systems without native octals not suppoted"
-// #endif
-
-#if defined(_MSC_VER) || defined(__cplusplus)
-// add restrict support is possible
-#if (defined(_MSC_VER) && _MSC_VER >= 1900) || defined(__clang__) || \
-    defined(__GNUC__)
-#define restrict __restrict
-#else
-#define restrict
-#endif
-#endif
-
-#define RFC_8439_TAG_SIZE (16)
-#define RFC_8439_KEY_SIZE (32)
-#define RFC_8439_NONCE_SIZE (12)
-
-/*
-    Encrypt/Seal plain text bytes into a cipher text that can only be
-    decrypted by knowing the key, nonce and associated data.
-
-    input:
-        - key: RFC_8439_KEY_SIZE bytes that all parties have agreed
-            upon beforehand
-        - nonce: RFC_8439_NONCE_SIZE bytes that should never be repeated
-            for the same key. A counter or a pseudo-random value are fine.
-        - ad: associated data to include with calculating the tag of the
-            cipher text. Can be null for empty.
-        - plain_text: data to be encrypted, pointer + size should not overlap
-            with cipher_text pointer
-
-    output:
-        - cipher_text: encrypted plain_text with a tag appended. Make sure to
-            allocate at least plain_text_size + RFC_8439_TAG_SIZE
-
-    returns:
-        - size of bytes written to cipher_text, can be -1 if overlapping
-            pointers are passed for plain_text and cipher_text
-*/
-PORTABLE_8439_DECL size_t mg_chacha20_poly1305_encrypt(
-    uint8_t *restrict cipher_text, const uint8_t key[RFC_8439_KEY_SIZE],
-    const uint8_t nonce[RFC_8439_NONCE_SIZE], const uint8_t *restrict ad,
-    size_t ad_size, const uint8_t *restrict plain_text, size_t plain_text_size);
-
-/*
-    Decrypt/unseal cipher text given the right key, nonce, and additional data.
-
-    input:
-        - key: RFC_8439_KEY_SIZE bytes that all parties have agreed
-            upon beforehand
-        - nonce: RFC_8439_NONCE_SIZE bytes that should never be repeated for
-            the same key. A counter or a pseudo-random value are fine.
-        - ad: associated data to include with calculating the tag of the
-            cipher text. Can be null for empty.
-        - cipher_text: encrypted message.
-
-    output:
-        - plain_text: data to be encrypted, pointer + size should not overlap
-            with cipher_text pointer, leave at least enough room for
-            cipher_text_size - RFC_8439_TAG_SIZE
-
-    returns:
-        - size of bytes written to plain_text, -1 signals either:
-            - incorrect key/nonce/ad
-            - corrupted cipher_text
-            - overlapping pointers are passed for plain_text and cipher_text
-*/
-PORTABLE_8439_DECL size_t mg_chacha20_poly1305_decrypt(
-    uint8_t *restrict plain_text, const uint8_t key[RFC_8439_KEY_SIZE],
-    const uint8_t nonce[RFC_8439_NONCE_SIZE],
-    const uint8_t *restrict cipher_text, size_t cipher_text_size);
-#if defined(__cplusplus)
-}
-#endif
-#endif
 
 
 struct mg_connection;
@@ -2265,7 +2155,7 @@ void mg_http_serve_ssi(struct mg_connection *c, const char *root,
 #define MG_TLS_CUSTOM 4   // Custom implementation
 
 #ifndef MG_TLS
-#define MG_TLS MG_TLS_BUILTIN
+#define MG_TLS MG_TLS_OPENSSL
 #endif
 
 
@@ -2375,8 +2265,6 @@ struct mg_connection *mg_sntp_connect(struct mg_mgr *mgr, const char *url,
 void mg_sntp_request(struct mg_connection *c);
 int64_t mg_sntp_parse(const unsigned char *buf, size_t len);
 
-uint64_t mg_now(void);     // Return milliseconds since Epoch
-
 
 
 
@@ -2683,16 +2571,6 @@ struct mg_tcpip_driver {
   bool (*up)(struct mg_tcpip_if *);                           // Up/down status
 };
 
-typedef void (*mg_tcpip_event_handler_t)(struct mg_tcpip_if *ifp, int ev,
-                                         void *ev_data);
-
-enum {
-  MG_TCPIP_EV_ST_CHG,     // state change             uint8_t * (&ifp->state)
-  MG_TCPIP_EV_DHCP_DNS,   // DHCP DNS assignment      uint32_t *ipaddr
-  MG_TCPIP_EV_DHCP_SNTP,  // DHCP SNTP assignment     uint32_t *ipaddr
-  MG_TCPIP_EV_USER        // Starting ID for user events
-};
-
 // Network interface
 struct mg_tcpip_if {
   uint8_t mac[6];                  // MAC address. Must be set to a valid MAC
@@ -2701,13 +2579,10 @@ struct mg_tcpip_if {
   bool enable_dhcp_client;         // Enable DCHP client
   bool enable_dhcp_server;         // Enable DCHP server
   bool enable_get_gateway;         // DCHP server sets client as gateway
-  bool enable_req_dns;             // DCHP client requests DNS server
-  bool enable_req_sntp;            // DCHP client requests SNTP server
   bool enable_crc32_check;         // Do a CRC check on RX frames and strip it
   bool enable_mac_check;           // Do a MAC check on RX frames
   struct mg_tcpip_driver *driver;  // Low level driver
   void *driver_data;               // Driver-specific data
-  mg_tcpip_event_handler_t fn;     // User-specified event handler function
   struct mg_mgr *mgr;              // Mongoose event manager
   struct mg_queue recv_queue;      // Receive queue
   uint16_t mtu;                    // Interface MTU
@@ -2977,14 +2852,8 @@ struct mg_tcpip_driver_stm32f_data {
 #endif
 
 
-#if MG_ENABLE_TCPIP
-#if !defined(MG_ENABLE_DRIVER_STM32H)
-#define MG_ENABLE_DRIVER_STM32H 0
-#endif
-#if !defined(MG_ENABLE_DRIVER_MCXN)
-#define MG_ENABLE_DRIVER_MCXN 0
-#endif
-#if MG_ENABLE_DRIVER_STM32H || MG_ENABLE_DRIVER_MCXN
+#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_STM32H) && \
+    MG_ENABLE_DRIVER_STM32H
 
 struct mg_tcpip_driver_stm32h_data {
   // MDC clock divider. MDC clock is derived from HCLK, must not exceed 2.5MHz
@@ -2997,8 +2866,7 @@ struct mg_tcpip_driver_stm32h_data {
   //    35-60 MHz     HCLK/26        3
   //    150-250 MHz   HCLK/102       4  <-- value for max speed HSI
   //    250-300 MHz   HCLK/124       5  <-- value for Nucleo-H* on CSI
-  //    300-500 MHz   HCLK/204       6
-  //    500-800 MHz   HCLK/324       7
+  //    110, 111 Reserved
   int mdc_cr;  // Valid values: -1, 0, 1, 2, 3, 4, 5
 
   uint8_t phy_addr;  // PHY address
@@ -3030,7 +2898,6 @@ struct mg_tcpip_driver_stm32h_data {
   } while (0)
 
 #endif
-#endif
 
 
 #if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_TM4C) && MG_ENABLE_DRIVER_TM4C
@@ -3057,6 +2924,9 @@ struct mg_tcpip_driver_tm4c_data {
 
 #if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_W5500) && MG_ENABLE_DRIVER_W5500
 
+#undef MG_ENABLE_TCPIP_DRIVER_INIT
+#define MG_ENABLE_TCPIP_DRIVER_INIT 0
+
 #endif
 
 

+ 3 - 4
pro/src/app.c

@@ -1954,10 +1954,6 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "SNMP");
 
-    // 初始化web
-    websocket_init();
-    appweb_init();
-
     cascade_init();
     netswitch_init();
     smtp_init();
@@ -1965,6 +1961,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     mqtt_init();
 
+    websocket_init();
+    appweb_init();
+
     //通知smartUPG,app已经运行起来
     upg_init();
     

+ 0 - 44
pro/src/appweb.conf

@@ -1,44 +0,0 @@
-#
-#   appweb.conf - Configuration for simple action sample
-#
-
-Listen 80
-AddHandler fileHandler
-# AddHandler espHandler esp
-
-Documents ../web
-UploadDir /root/dl
-LimitUpload 100MB
-
-
-<Route ^/action/>
-    SetHandler actionHandler
-</Route>
-
-
-# <Route /systemConfiguration>
-#     SetHandler actionHandler
-# </Route>
-
-<Route /login>
-    SetHandler actionHandler
-</Route>
-
-<Route /logout>
-    SetHandler actionHandler
-</Route>
-
-<Route /getInfo>
-    SetHandler actionHandler
-</Route>
-
-<Route /getRouters>
-    SetHandler actionHandler
-</Route>
-
-<Route ^/pdu/>
-    SetHandler actionHandler
-</Route>
-
-
-

+ 3 - 5
pro/src/appweb_handle.c

@@ -3377,18 +3377,16 @@ static void serviceManagement(void *conn)
         }
 
         for(int i=0; i<SMTP_RECV_MAX; i++) {
-            if(info->recvAccount[i]) {
-                recv[i].idx = i;
+            recv[i].idx = i;
+           if(info->recvAccount[i]) {
                 recv[i].use = 1;
                 strcpy(recv[i].account, info->recvAccount[i]);
-                dev_smtp_update_recv(gdm->db, &recv[i]);
             }
 			else{
-                recv[i].idx = i;
                 recv[i].use = 0;
                 strcpy(recv[i].account,"");
-                dev_smtp_update_recv(gdm->db, &recv[i]);
             }
+            dev_smtp_update_recv(gdm->db, &recv[i]);
         }
     }
     else if(strcmp(_serviceManageRequestInfo.type,"listMqttQuery")==0)

+ 13 - 6
pro/src/dflt.c

@@ -53,13 +53,20 @@ smtp_send_t DFLT_SMTP_SEND={
 };
 
 mqtt_server_t DFLT_MQTT={
+
     .id = 0,
     .mode = 1,
-    .server = "192.168.234.10",
-    .ip = "192.168.234.10",
-    .port = "25",
-    .cid = "mqtlx_928507fe",
-    .user = "root",
-    .password = "root",
+    .cid = "mqtt_928507fe",
+#if 0
+    .server = "192.168.1.12:1883",
+    .ip = "",
+    .port = "1883",
+#else
+    .server = "gaae4d7b.ala.cn-hangzhou.emqxsl.cn:8883",
+    .ip = "",
+    .port = "8883",
+#endif
+    .user = "gowone100",
+    .password = "gowone100",
 };
 

+ 2 - 2
pro/src/main.c

@@ -14,10 +14,10 @@ int main(int argc,char* argv[])
     while(1) {
         cnt++;
 
-        printf("___ main loop %d\n", cnt);
+        //printf("main loop %d\n", cnt);
         if(cnt%60==0) {
             if(!sys_mem_enough(50*MB)) {
-                printf("___ mem less than 50MB, reboot now ...\n");
+                printf("$$$ mem less than 50MB, reboot now ...\n");
                 sys_reboot();
             }
         }

+ 111 - 29
pro/src/mqtt.c

@@ -9,6 +9,7 @@
 #include "sys.h"
 #include "cfg.h"
 #include "xlist.h"
+#include "sqlite_handle.h"
 
 #if 0
     #define LOGD            log_d
@@ -71,6 +72,31 @@ static mqtt_handle_t mqHandle={0};
 static int my_recv(char *topic, char *data);
 static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data);
 
+//emqx serttle
+const char *ca_cert=
+"-----BEGIN CERTIFICATE-----\r\n"
+"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n"
+"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n"
+"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n"
+"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n"
+"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n"
+"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n"
+"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n"
+"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n"
+"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n"
+"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n"
+"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n"
+"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n"
+"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n"
+"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n"
+"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n"
+"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n"
+"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n"
+"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n"
+"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n"
+"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n"
+"-----END CERTIFICATE-----\r\n";
+
 
 static int ser_cmp(mqtt_server_t *a, mqtt_server_t *b)
 {
@@ -261,9 +287,8 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
             char path[200];
             sys_get_path(path, "emqxsl-ca.crt");
             if (mg_url_is_ssl(mc->ser.server)) {
-                struct mg_tls_opts opts = {.ca = mg_str(path),
-                                           //.cert = mg_str(path),
-                                           //.key = mg_str(path),
+
+                struct mg_tls_opts opts = {.ca = mg_str(ca_cert),
                                            .name = mg_url_host(mc->ser.server)};
                 mg_tls_init(c, &opts);
             }
@@ -272,7 +297,7 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
 
         case  MG_EV_MQTT_OPEN:
         {
-            
+            //
         }
         break;
 
@@ -284,13 +309,9 @@ static void mqtt_fn(mg_conn_t *c, int ev, void *ev_data)
         
         case MG_EV_MQTT_MSG:
         {
-            if(ev_data) {
-                // When we receive MQTT message, print it
-                struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data;
-                if(mm->topic.buf && mm->data.buf) {
-                    MG_INFO(("Received on %.*s : %.*s", (int) mm->topic.len, mm->topic.buf, (int) mm->data.len, mm->data.buf));
-                    my_recv(mm->topic.buf, mm->data.buf);
-                }
+            struct mg_mqtt_message *mm=(struct mg_mqtt_message*)ev_data;
+            if(mm && mm->topic.buf && mm->data.buf) {
+                my_recv(mm->topic.buf, mm->data.buf);
             }
         }
         break;
@@ -350,6 +371,8 @@ int mqtt_init(void)
     lc.log = 0;
     h->list = xlist_init(&lc);
 
+    dev_mqtt_init(h->dm->db, h->dm->mqttInfo.ser);
+
     thread_start(THREAD_ID_MQTT, mqtt_thread, h, 4*MB, 0);
     h->inited = 1;
     r = 0;
@@ -727,6 +750,28 @@ static int my_recv(char *topic, char *data)
                 {
                     int id=atoi(topic+strlen(temp));
                     cmd = get_cmd(data);
+                    switch(id) {
+                        case SENSOR_TYPE_TEMPERATURE:
+                        break;
+
+                        case SENSOR_TYPE_SMOKE:
+                        break;
+
+                        case SENSOR_TYPE_WATER:
+                        break;
+
+                        case SENSOR_TYPE_DOOR:
+                        break;
+
+                        case SENSOR_TYPE_GAS:
+                        break;
+
+                        case SENSOR_TYPE_AIR_PRESS:
+                        break;
+
+                        case SENSOR_TYPE_DoubleT:
+                        break;
+                    }
 
                     LOGD("___ MQTT_SUB_CMD_POWER_CHN, %d\n", id);
                 }
@@ -734,16 +779,24 @@ static int my_recv(char *topic, char *data)
 
                 case MQTT_SUB_CMD_RESTART:
                 {
-                    LOGD("___ MQTT_SUB_CMD_RESTART\n");
                     cmd = get_cmd(data);
-                    
+                    LOGD("___ MQTT_SUB_CMD_RESTART, %d\n", cmd);
+                    if(cmd==0) {
+                        system("shutdown");
+                    }
+                    else if(cmd==1) {
+                        system("reboot");
+                    }
                 }
                 break;
 
                 case MQTT_SUB_CMD_RESET:
                 {
-                    LOGD("___ MQTT_SUB_CMD_RESET\n");
                     cmd = get_cmd(data);
+                    LOGD("___ MQTT_SUB_CMD_RESET, %d\n", cmd);
+                    if(cmd==1) {
+                        sys_set_factory();
+                    }
                 }
                 break;
 
@@ -751,6 +804,36 @@ static int my_recv(char *topic, char *data)
                 {
                     LOGD("___ MQTT_SUB_CMD_SERVICE\n");
                     uint32_t flag=get_serv(data);
+                    if(flag&(1<<SERV_NTP)) {
+
+                    }
+                    if(flag&(1<<SERV_SMTP)) {
+
+                    }
+                    if(flag&(1<<SERV_MESG)) {
+
+                    }
+                    if(flag&(1<<SERV_MQTT)) {
+
+                    }
+                    if(flag&(1<<SERV_CLOUD)) {
+
+                    }
+                    if(flag&(1<<SERV_TELNET)) {
+
+                    }
+                    if(flag&(1<<SERV_SNMP_V1)) {
+
+                    }
+                    if(flag&(1<<SERV_SNMP_V2C)) {
+
+                    }
+                    if(flag&(1<<SERV_SNMP_V3)) {
+
+                    }
+                    if(flag&(1<<SERV_SNMP_TRAP)) {
+
+                    }
                 }
                 break;
             }
@@ -771,28 +854,26 @@ int mqtt_test(void)
     mqtt_server_t ser={
             .id = 0,
             .mode = 1,
-#if 0
-            .server = "mqtts://gaae4d7b.ala.cn-hangzhou.emqxsl.cn:8883",
-            .ip = "",
-            .port = "8883",
-            .cid = "mqtlx_e92334545",
-            .user = "AABB123",
-            .password = "asdfasd3225",
-#else
+            .cid = "mqtlx_e92334545tet3465",
+
+    #if 0
             .server = "192.168.1.12:1883",
             .ip = "",
             .port = "1883",
-            .cid = "mqtlx_asdjflsd",
 
+            //root
+            //root0219107X
+    #else
+            .server = "mqtts://gaae4d7b.ala.cn-hangzhou.emqxsl.cn:8883",
+            .ip = "",
+            .port = "8883",
+    #endif
             .user = "gowone100",
             .password = "gowone100",
 
             //.user = "gowone101",
             //.password = "gowone101",
-#endif
-
-            //.user = "adsg33434",
-            //.password = "aafweertzv",
+            
         }; 
 
     mInfo.ser[0] = ser;
@@ -800,9 +881,10 @@ int mqtt_test(void)
     h->dm->mqttInfo = mInfo;
     //mg_log_set(MG_LL_VERBOSE);
 
-    while(1) {
+    while(cnt<3) {
         mqtt_post(MQTT_PUB_INFO_DEVICE, 0, 0);
-        sleep(2);
+        sleep(1);
+        cnt++;
     }
 
 

+ 1 - 1
pro/src/netswitch.c

@@ -548,7 +548,7 @@ static int sw_get(netswitch_info_t *sw)
         h->ipflag = 1;
 #endif
     }
-    LOGD("___netswitch ip: %s\n", h->host_ip);
+    //LOGD("___netswitch ip: %s\n", h->host_ip);
 
     if(h->port_start==-1) {
         h->port_start = get_port_start(h->host_ip);

+ 37 - 8
pro/src/sqlite_handle.c

@@ -3929,7 +3929,9 @@ static int sw_update_all(sqlite3 *db, netswitch_info_t *sw)
 
 int dev_switch_init(sqlite3 *db, netswitch_info_t *sw)
 {
-    int r;
+    int r=-1;
+
+#ifdef USE_NETSWITCH
     char *table=SWITCH_TABLE;
     
     if(!tab_exists(db, table)) {
@@ -3952,26 +3954,35 @@ int dev_switch_init(sqlite3 *db, netswitch_info_t *sw)
         sw_update_all(db, sw);
     }
 
-    return sw_load(db, sw);
+    r = sw_load(db, sw);
+#endif
+
+    return r;
 }
 
 int dev_switch_update_port(sqlite3 *db, port_info_t *pt)
 {
-    int r;
+    int r=-1;
+
+#ifdef USE_NETSWITCH
     pthread_mutex_lock(&__globalDeviceManage.dbThreadlock);
     r = sw_update_port(db, pt);
     pthread_mutex_unlock(&__globalDeviceManage.dbThreadlock);
+#endif
 
     return r;
 }
 int dev_switch_update_all(sqlite3 *db, netswitch_info_t *sw)
 {
-    int r;
+    int r=-1;
+
+#ifdef USE_NETSWITCH
     pthread_mutex_lock(&__globalDeviceManage.dbThreadlock);
     r = sw_update_all(db, sw);
     pthread_mutex_unlock(&__globalDeviceManage.dbThreadlock);
+#endif
 
-    return 0;
+    return r;
 }
 
 
@@ -3980,7 +3991,9 @@ int dev_switch_update_all(sqlite3 *db, netswitch_info_t *sw)
 #define SMTP_RECVEIVE_TABLE  "Table_SMTPReceive"
 int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
 {
-    int i,r;
+    int i,r=-1;
+
+#ifdef USE_SMTP
     char temp[1024];
     char *err_msg=NULL;
     char *table=NULL;
@@ -4064,6 +4077,7 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
         }
     }
     sqlite3_free_table(pResult);
+#endif
     
     return 0;
 }
@@ -4071,7 +4085,9 @@ int dev_smtp_init(sqlite3 *db, smtp_info_t *info)
 
 int dev_smtp_update_send(sqlite3 *db, smtp_send_t *send)
 {
-    int i,r=0,exist=0,cnt=0;
+    int i,r=-1,exist=0,cnt=0;
+
+#ifdef USE_SMTP
     char temp[1024];
     sqlite3_stmt *stmt;
     char *err_msg=NULL;
@@ -4114,7 +4130,11 @@ int dev_smtp_update_send(sqlite3 *db, smtp_send_t *send)
             log_e("___sw_update_all, sqlite3_step failed\n");
             r = -1;
         }
+        else {
+            r = 0;
+        }
     }
+#endif
 
 quit:
     return r;
@@ -4123,6 +4143,8 @@ quit:
 int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *recv)
 {
     int i,r=0,exist=0,cnt=0;
+
+#ifdef USE_SMTP
     char temp[1024];
     sqlite3_stmt *stmt;
     char *err_msg=NULL;
@@ -4163,6 +4185,7 @@ int dev_smtp_update_recv(sqlite3 *db, smtp_recv_t *recv)
             r = -1;
         }
     }
+#endif
 
 quit:
     return r;
@@ -4174,6 +4197,8 @@ quit:
 int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
 {
     int i,r;
+
+#ifdef USE_MQTT
     char temp[1024];
     char *errmsg=NULL;
     char *table=NULL;
@@ -4223,13 +4248,16 @@ int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
         strcpy(ser->user, pResult[ncol+6]);
         strcpy(ser->password, pResult[ncol+7]);
     }
-    
+#endif
+
     return 0;
 }
 
 int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
 {
     int i,r=0,exist=0,cnt=0;
+
+#ifdef USE_MQTT
     char temp[1024];
     sqlite3_stmt *stmt;
     char *errmsg=NULL;
@@ -4274,6 +4302,7 @@ int dev_mqtt_update(sqlite3 *db, mqtt_server_t *ser)
             r = -1;
         }
     }
+#endif
 
 quit:
     return r;

+ 1 - 1
pro/src/switch_ctrl.c

@@ -1927,7 +1927,7 @@ int g_switch_set_t_ac_alarm_missing_ph(void* manger,int saddr,int* MissStatus)
     ret = g_modbus_read_x_reg(manger, saddr, offset, 6, data_temp);
     if (ret < 0)
     {
-        log_w("g_switch_get_t_ac_alarm_missing_ph:addrs:%d OffSet:%d Ret=%d:%s", saddr, offset, ret, modbus_strerror(errno));
+        //log_w("g_switch_get_t_ac_alarm_missing_ph:addrs:%d OffSet:%d Ret=%d:%s", saddr, offset, ret, modbus_strerror(errno));
         // log_d("threshold_Addr:%d OffSet:%d Ret=%d",saddr,offset,ret);
         return ret;
     }

+ 14 - 0
pro/src/thread.c

@@ -82,6 +82,20 @@ int thread_stop_all(void)
 }
 
 
+int thread_is_running(int id)
+{
+    //if(pthread_kill(0, 0)==0)
+    if(1)
+    {
+        //exist
+    }
+    else {
+        //not exist
+    }
+    return 0;
+}
+
+
 int thread_start_simp(thread_fn fn, void *arg, int stksize)
 {
     int r;