|
|
@@ -8,6 +8,7 @@
|
|
|
#include "cfg.h"
|
|
|
#include <stdio.h>
|
|
|
#include "datadef.h"
|
|
|
+#include "cascade.h"
|
|
|
|
|
|
#define TIMER_INTERVAL 1000
|
|
|
#define ONCE_SEND_CH_CNT 10
|
|
|
@@ -66,6 +67,8 @@ typedef struct {
|
|
|
char rootDir[MG_PATH_MAX];
|
|
|
char *buf;
|
|
|
int buflen;
|
|
|
+
|
|
|
+ uint8_t cur_addr;
|
|
|
}web_handle_t;
|
|
|
static web_handle_t webHandle={0};
|
|
|
|
|
|
@@ -94,7 +97,7 @@ static int ws_send(mg_conn_t *c, void *data, int len, int isbin)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data, int len, int isbin)
|
|
|
+static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t addr, uint8_t type, void *data, int len, int isbin)
|
|
|
{
|
|
|
pkt_hdr_t *hdr=NULL;
|
|
|
|
|
|
@@ -105,6 +108,7 @@ static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data,
|
|
|
hdr = (pkt_hdr_t*)h->buf;
|
|
|
|
|
|
hdr->magic = PKT_MAGIC;
|
|
|
+ hdr->addr = addr;
|
|
|
hdr->type = type;
|
|
|
hdr->nack = 0;
|
|
|
hdr->dlen = len;
|
|
|
@@ -115,18 +119,20 @@ static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void send_powerc(web_handle_t *h, mg_conn_t *c)
|
|
|
+static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
|
|
|
{
|
|
|
int i,j,xlen,offset,times,left;
|
|
|
pkt_hdr_t *hdr=NULL;
|
|
|
power_data_t pd=power_data_get();
|
|
|
|
|
|
+ pd = (addr==0)?power_data_get():cascade_power_get();
|
|
|
if(pd.chs==0 || h->buf==NULL ) {
|
|
|
return;
|
|
|
}
|
|
|
hdr = (pkt_hdr_t*)h->buf;
|
|
|
|
|
|
hdr->magic = PKT_MAGIC;
|
|
|
+ hdr->addr = addr;
|
|
|
hdr->type = PKT_TYPE_POWER_CH;
|
|
|
hdr->nack = 0;
|
|
|
|
|
|
@@ -151,17 +157,32 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c)
|
|
|
ws_send(c, h->buf, xlen, 1);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-static void send_powert(web_handle_t *h, mg_conn_t *c)
|
|
|
+static void send_powert(web_handle_t *h, mg_conn_t *c, uint8_t addr)
|
|
|
{
|
|
|
int i,r;
|
|
|
- power_data_t pd=power_data_get();
|
|
|
+ power_data_t pd=(addr==0)?power_data_get():cascade_power_get();
|
|
|
+ ws_send_pkt(h, c, addr, PKT_TYPE_POWER_TOTAL, &pd.ttl, sizeof(power_total_t), 1);
|
|
|
+}
|
|
|
+static void send_dlist(web_handle_t *h, mg_conn_t *c)
|
|
|
+{
|
|
|
+ int i,j=0,r;
|
|
|
+ dev_list_t dl;
|
|
|
+ slave_list_t sl;
|
|
|
|
|
|
- ws_send_pkt(h, c, PKT_TYPE_POWER_TOTAL, &pd.ttl, sizeof(power_total_t), 1);
|
|
|
+ r = cascade_get_dlist(&dl);
|
|
|
+ if(r==0) {
|
|
|
+ sl.cnt = dl.cnt-1;
|
|
|
+ if(sl.cnt>0) {
|
|
|
+ for(i=1; i<dl.cnt; i++) {
|
|
|
+ sl.addr[j++] = dl.slave[i].addr;
|
|
|
+ }
|
|
|
+ ws_send_pkt(h, c, 0, PKT_TYPE_POWER_TOTAL, &sl, 1+sl.cnt, 1);
|
|
|
+ }
|
|
|
+ cascade_free_dlist(&dl);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
|
|
|
{
|
|
|
int r=0;
|
|
|
@@ -175,11 +196,55 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+ if(hdr->addr>0 && h->cur_addr!=hdr->addr) {
|
|
|
+ //paras_data_t *p=paras_get();
|
|
|
+ //cascade_reinit();
|
|
|
+ }
|
|
|
+
|
|
|
//LOGD("_____ ws handle, type: %d, flag: %d\n", hdr->type, hdr->flag);
|
|
|
switch(hdr->type) {
|
|
|
case PKT_TYPE_PARAS:
|
|
|
{
|
|
|
- //setup
|
|
|
+ paras_data_t* para=paras_get();
|
|
|
+ switch(hdr->subtype) {
|
|
|
+ case SUB_TYPE_PARAS_MODBUS:
|
|
|
+ {
|
|
|
+ modbus_data_t *p=(modbus_data_t*)hdr->data;
|
|
|
+ cascade_reinit(p->mode, p->addr, p->baud);
|
|
|
+ para->cas = *p;
|
|
|
+ paras_save();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SUB_TYPE_PARAS_MISC:
|
|
|
+ {
|
|
|
+ misc_data_t *p=(misc_data_t*)hdr->data;
|
|
|
+ //
|
|
|
+
|
|
|
+ para->misc = *p;
|
|
|
+ paras_save();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SUB_TYPE_PARAS_PROD:
|
|
|
+ {
|
|
|
+ product_data_t *p=(product_data_t*)hdr->data;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SUB_TYPE_PARAS_SERV:
|
|
|
+ {
|
|
|
+ service_data_t *p=(service_data_t*)hdr->data;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case SUB_TYPE_PARAS_NETWORK:
|
|
|
+ {
|
|
|
+ network_data_t *p=(network_data_t*)hdr->data;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -243,12 +308,10 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
|
|
|
}
|
|
|
else {
|
|
|
LOGD("_____ send_powerc\n");
|
|
|
- if(hdr->addr==0) {
|
|
|
- send_powerc(h, c);
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
+ if(hdr->addr!=0) {
|
|
|
+ //cascade_reinit(MODBUS_SLAVE, hdr->addr, 115200);
|
|
|
}
|
|
|
+ send_powerc(h, c, hdr->addr);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
@@ -256,12 +319,7 @@ 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");
|
|
|
- if(hdr->addr==0) {
|
|
|
- send_powert(h, c);
|
|
|
- }
|
|
|
- else {
|
|
|
-
|
|
|
- }
|
|
|
+ send_powert(h, c, hdr->addr);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -329,7 +387,7 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
|
|
|
|
|
|
case PKT_TYPE_SLAVE_LIST:
|
|
|
{
|
|
|
- //cascade_data_t();
|
|
|
+ send_dlist(h, c);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -383,7 +441,7 @@ static void http_fn(mg_conn_t *c, int ev, void *ev_data)
|
|
|
r = list_take_node(h->list, &ln, 0);
|
|
|
if(r==0) {
|
|
|
node_t *n=&ln->data;
|
|
|
- ws_send_pkt(h, c, n->tp, n->buf, n->dlen, 1);
|
|
|
+ ws_send_pkt(h, c, 0, n->tp, n->buf, n->dlen, 1);
|
|
|
list_back_node(h->list, ln);
|
|
|
}
|
|
|
}
|