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

1.同步李毅修改WS定时器导致级联从机崩溃bug,最后一个从机控制板无法控制bug。

liyuezong 1 год назад
Родитель
Сommit
0ea81ddaaa
2 измененных файлов с 19 добавлено и 11 удалено
  1. 17 10
      pro/src/cascade.c
  2. 2 1
      pro/src/websocket_handle.c

+ 17 - 10
pro/src/cascade.c

@@ -1843,20 +1843,27 @@ static void *cmd_thread(void *arg)
     if (pcmd->chId == 0xff)
     {
         int sendAddr = 0;
+        uint8_t  saddr_flag[128] = {0};
+
         for (i = 0; i < info->cnt; i++)
         {
-            if (info->ch[i].product_ch_addr > 0)
+            if (info->ch[i].product_saddr > 0)
             {
-                if (info->ch[i].product_ch_addr == sendAddr)
-                {
+                // if (info->ch[i].product_ch_addr == sendAddr)
+                // {
+                //     continue;
+                // }
+                // else
+                // {
+                //     sendAddr = info->ch[i].product_ch_addr;
+
+                // }
+                if(saddr_flag[info->ch[i].product_saddr])
                     continue;
-                }
-                else
-                {
-                    sendAddr = info->ch[i].product_ch_addr;
-                }
-
-                t = g_switch_set_all_ctrl(&dm->_globalRelaySampManger, info->ch[i].product_ch_type, info->ch[i].product_ch_addr, flag);
+                saddr_flag[info->ch[i].product_saddr] = 1;
+                
+                t = g_switch_set_all_ctrl(&dm->_globalRelaySampManger, info->ch[i].product_ch_type, info->ch[i].product_saddr, flag);
+                LOGD("close  or open addr %d \n",info->ch[i].product_ch_addr);
                 if (t < 0)
                 {
                     LOGE("___ %d %s failed\n", info->ch[i].product_ch_addr, (pcmd->cmd == CASCADE_CMD_OPEN) ? "open" : "close");

+ 2 - 1
pro/src/websocket_handle.c

@@ -293,8 +293,9 @@ static int ws_WIFI_update(ws_handle_t *h)
 static int ws_DS_update(ws_handle_t *h)
 {
     char *json;
-
+    lock_s_hold(LOCK_ID_POWER_UPDATE);
     json = service_ds_all_ack_to_json("","","0",&__globalDeviceManage._globalPowerManger, 1);
+    lock_s_release(LOCK_ID_POWER_UPDATE);
     if (json)
     {
         ws_send_data(h, json, strlen(json));