Browse Source

添加级联处理逻辑

guohui 1 year ago
parent
commit
4e824615e1
3 changed files with 100 additions and 16 deletions
  1. 15 3
      f407/applications/datadef.h
  2. 70 11
      f407/applications/web.c
  3. 15 2
      f407/tools/web/JS/data.js

+ 15 - 3
f407/applications/datadef.h

@@ -485,6 +485,16 @@ typedef struct {
     uint8_t             flag;
 }mesg_data_t;
 
+typedef struct {
+    uint8_t             addr;
+    power_ch_t          pch;
+}power_slave_t;
+
+typedef struct {
+    uint8_t             cnt;
+    uint8_t             addr[0];
+}slave_list_t;
+
 enum {
     PKT_TYPE_ACK=0,             
     PKT_TYPE_PARAS,             
@@ -500,6 +510,7 @@ enum {
     PKT_TYPE_STAT,
     PKT_TYPE_MESG,
     PKT_TYPE_FILE,
+    PKT_TYPE_SLAVE_LIST,        //slave addr list
     
     PKT_TYPE_MAX
 };
@@ -517,6 +528,7 @@ enum {
 #define PKT_MAGIC  0xdead
 typedef struct {
     uint16_t  magic;
+    uint8_t   addr;
     uint8_t   type;
     uint8_t   subtype;
     uint8_t   nack;
@@ -545,9 +557,9 @@ typedef struct ac_dc_in{
 typedef struct md_ac_dc{
     uint16_t          dev_cnt;                   //设备类型和通道数
     ac_dc_out_t       power[64];                 //最大64通道
-		ac_dc_in_t        power_all;
+    ac_dc_in_t        power_all;
     uint16_t          temp;
-		uint16_t          humity;
+    uint16_t          humity;
     uint16_t          switch_stu[64];
     uint16_t          delay_open[64];
     uint16_t          delay_close[64];
@@ -585,7 +597,7 @@ typedef struct md_3_ac{
     all_chn_info_t      ac_3_all_chn[64];
     chn_phase_info_t    ac_3_chn_p[64][3];
     uint16_t            temp;
-		uint16_t            humity;
+    uint16_t            humity;
     uint16_t            switch_chn[64];
     uint16_t            delay_open[64];
     uint16_t            delay_close[64];

+ 70 - 11
f407/applications/web.c

@@ -4,6 +4,7 @@
 #include "list.h"
 #include "power.h"
 #include "paras.h"
+#include "cascade.h"
 #include "cfg.h"
 #include <stdio.h>
 #include "datadef.h"
@@ -189,38 +190,65 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
                 switch(hdr->subtype) {
                     case SUB_TYPE_POWER_SWITCH:
                     {
-                        r = power_set_ch_sw(pch->info.ch, pch->power[0].status);
+                        if(hdr->addr==0) {
+                            r = power_set_ch_sw(pch->info.ch, pch->power[0].status);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_ALARM:
                     {
-                        r = power_set_alarm(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_alarm(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_THRESHOLD:
                     {
-                        r = power_set_threshold(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_threshold(pch);
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_START_DELAY:
                     {
-                        r = power_set_start_delay(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_start_delay(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_STOP_DELAY:
                     {
-                        r = power_set_stop_delay(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_stop_delay(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                 }
             }
             else {
                 LOGD("_____ send_powerc\n");
-                send_powerc(h, c);
+                if(hdr->addr==0) {
+                    send_powerc(h, c);
+                }
+                else {
+                    
+                }
             }
         }
         break;
@@ -228,31 +256,56 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         case PKT_TYPE_POWER_TOTAL:
         {
             LOGD("_____ send_powert\n");
-            send_powert(h, c);
+            if(hdr->addr==0) {
+                send_powert(h, c);
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_CH_ALL:
         {
-            power_set_all_sw(hdr->flag);
+            if(hdr->addr==0) {
+                power_set_all_sw(hdr->flag);
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_POWER_RESET:
         {
-            r = power_reset();
+            if(hdr->addr==0) {
+                r = power_reset();
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_SCAN:
         {
-            r = power_scan();
+            if(hdr->addr==0) {
+                r = power_scan();
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_FACTORY:
         {
-            //r = power_scan();
+            if(hdr->addr==0) {
+                //r = power_scan();
+            }
+            else {
+                
+            }
         }
         break;
         
@@ -274,6 +327,12 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         }
         break;
         
+        case PKT_TYPE_SLAVE_LIST:
+        {
+            //cascade_data_t();
+        }
+        break;
+        
     }
 }
 

+ 15 - 2
f407/tools/web/JS/data.js

@@ -16,6 +16,7 @@ const PKT_TYPE=function(){
         PKT_TYPE_STAT:len++,
         PKT_TYPE_MESG:len++,
         PKT_TYPE_FILE:len++,
+        PKT_TYPE_SLAVE_LIST:len++,
     }
 }();
 const SUB_TYPE=function(){
@@ -23,7 +24,7 @@ const SUB_TYPE=function(){
     return {
         SUB_TYPE_POWER_SWITCH:len++,             
         SUB_TYPE_POWER_ALARM:len++,             
-        SUB_TYPE_POWER_THRESHOLD:len++,          //power_ch_t
+        SUB_TYPE_POWER_THRESHOLD:len++,         //power_ch_t
         SUB_TYPE_POWER_START_DELAY:len++,       //power_total_t
         SUB_TYPE_POWER_STOP_DELAY:len++,
     }
@@ -80,7 +81,7 @@ function array_cat(a1,a2){
     }
     return buffer;
 }
-function mk_hdr(type,flag)
+function mk_hdr(addr,type,flag)
 {
     var tmp,length=0;
     var buffer = new ArrayBuffer(13);
@@ -90,6 +91,10 @@ function mk_hdr(type,flag)
     tmp.setUint16(0,t,true);//magic
     length += 2;
 
+    tmp = new DataView(buffer, length);
+    tmp.setUint8(0,addr,true);  //addr
+    length += 1;
+
     tmp = new DataView(buffer, length);
     tmp.setUint8(0,type,true);  //type
     length += 1;
@@ -175,6 +180,10 @@ function bin_to_pkt(bin)
                 hdr.powert = BIN.powert.b2j(data);
                 break;
                
+           case PKT_TYPE.PKT_TYPE_ALARM:
+                hdr.alarmd = BIN.alarmd.b2j(data);
+                break;
+            
            case PKT_TYPE.PKT_TYPE_ALARM:
                 hdr.alarmd = BIN.alarmd.b2j(data);
                 break;
@@ -194,6 +203,10 @@ function bin_to_hdr(bin) {
     this.magic = tmp.getUint16(0,true);
     length += 2;
 
+    tmp = new DataView(bin, length);
+    this.addr = tmp.getUint8(0,true);
+    length += 1;
+
     tmp = new DataView(bin, length);
     this.type = tmp.getUint8(0,true);
     length += 1;