Переглянути джерело

继续完善系统参数处理

guohui 1 рік тому
батько
коміт
8063e08d39

+ 79 - 68
f407/applications/datadef.h

@@ -150,6 +150,15 @@ enum {
 ////////////////////////////////////////////////
 #pragma pack (1)
 
+typedef struct {
+    uint16_t     year;
+    uint8_t      mon;
+    uint8_t      day;
+    uint8_t      hour;
+    uint8_t      min;
+    uint8_t      sec;
+}datetime_t;
+
 typedef struct {
     uint8_t             mode;
     uint8_t             addr;               
@@ -216,6 +225,13 @@ typedef struct {
 }board_key_t;
 
 typedef struct {
+    char                ver[16];
+    char                bldtime[32];
+}version_data_t;
+
+typedef struct {
+    uint8_t             lang;
+    version_data_t      ver;
     modbus_data_t       cas;
     misc_data_t         misc;
     product_data_t      prod;
@@ -227,7 +243,6 @@ typedef struct {
     uint8_t             lang;
 }sys_data_t;
 
-
 typedef struct power_data{
     float               voltage;                //电压
     float               current;                //电流
@@ -476,68 +491,6 @@ typedef struct {
 }mqtt_info_t;
 
 ///////////////////////////////////////////////////////////
-
-typedef struct {
-    uint8_t             flag;
-}sys_stat_t;
-
-typedef struct {
-    uint8_t             flag;
-}mesg_data_t;
-
-typedef struct {
-    uint8_t             cnt;
-    uint8_t             addr[CASCADE_MAX];
-}slave_list_t;
-
-enum {
-    PKT_TYPE_ACK=0,             
-    PKT_TYPE_PARAS,             
-    PKT_TYPE_POWER_CH,          //power_ch_t
-    PKT_TYPE_POWER_TOTAL,       //power_total_t
-    PKT_TYPE_POWER_RESET,
-    PKT_TYPE_CH_ALL,
-    PKT_TYPE_SCAN,
-    PKT_TYPE_FACTORY,
-    PKT_TYPE_ALARM,
-    PKT_TYPE_SENSOR,
-    PKT_TYPE_BREAKER,
-    PKT_TYPE_STAT,
-    PKT_TYPE_MESG,
-    PKT_TYPE_FILE,
-    PKT_TYPE_SLAVE_LIST,        //slave addr list
-    
-    PKT_TYPE_MAX
-};
-
-enum {
-    SUB_TYPE_POWER_SWITCH=0,            //set relay switch
-    SUB_TYPE_POWER_ALARM,
-    SUB_TYPE_POWER_THRESHOLD,
-    SUB_TYPE_POWER_START_DELAY,
-    SUB_TYPE_POWER_STOP_DELAY,
-    
-    SUB_TYPE_PARAS_MODBUS,
-    SUB_TYPE_PARAS_MISC,
-    SUB_TYPE_PARAS_PROD,
-    SUB_TYPE_PARAS_SERV,
-    SUB_TYPE_PARAS_NETWORK,
-    
-    SUB_TYPE_MAX
-};
-
-#define PKT_MAGIC  0xdead
-typedef struct {
-    uint16_t  magic;
-    uint8_t   addr;
-    uint8_t   type;
-    uint8_t   subtype;
-    uint8_t   nack;
-    uint32_t  flag;
-    uint32_t  dlen;
-    uint8_t   data[0];
-}pkt_hdr_t;
-
 typedef struct ac_dc_out{
 	uint32_t voltage;
 	uint32_t current;
@@ -554,7 +507,6 @@ typedef struct ac_dc_in{
 	uint32_t all_consumer;
 }ac_dc_in_t;
 
-
 typedef struct md_ac_dc{
     uint16_t          dev_cnt;                   //设备类型和通道数
     ac_dc_out_t       power[SLAVE_CH_MAX];                 //最大64通道
@@ -583,7 +535,6 @@ typedef struct {
     uint32_t out_type;
 }all_chn_info_t;
 
-
 typedef struct chn_phase_info{
     uint32_t p_voltage;
     uint32_t p_current;
@@ -606,11 +557,73 @@ typedef struct md_3_ac{
     //uint16_t            dry_node[4];
 }md_3_ac_t;
 
-
 typedef struct cascade_data{
     uint8_t         chs;                    //从机读取通道数
     power_ch_t      *pch;
 }cascade_data_t;
+///////////////////////////////////////////////////////////
+
+typedef struct {
+    uint8_t             flag;
+}sys_stat_t;
+
+typedef struct {
+    uint8_t             flag;
+}mesg_data_t;
+
+typedef struct {
+    uint8_t             cnt;
+    uint8_t             addr[CASCADE_MAX];
+}slave_list_t;
+
+enum {
+    PKT_TYPE_ACK=0,             
+    PKT_TYPE_PARAS,             
+    PKT_TYPE_POWER_CH,          //power_ch_t
+    PKT_TYPE_POWER_TOTAL,       //power_total_t
+    PKT_TYPE_POWER_RESET,
+    PKT_TYPE_CH_ALL,
+    PKT_TYPE_SCAN,
+    PKT_TYPE_FACTORY,
+    PKT_TYPE_ALARM,
+    PKT_TYPE_SENSOR,
+    PKT_TYPE_BREAKER,
+    PKT_TYPE_STAT,
+    PKT_TYPE_MESG,
+    PKT_TYPE_FILE,
+    PKT_TYPE_SLAVE_LIST,        //slave addr list
+    
+    PKT_TYPE_MAX
+};
+
+enum {
+    SUB_TYPE_POWER_SWITCH=0,            //set relay switch
+    SUB_TYPE_POWER_ALARM,
+    SUB_TYPE_POWER_THRESHOLD,
+    SUB_TYPE_POWER_START_DELAY,
+    SUB_TYPE_POWER_STOP_DELAY,
+    
+    SUB_TYPE_PARAS_LANG,
+    SUB_TYPE_PARAS_MODBUS,
+    SUB_TYPE_PARAS_MISC,
+    SUB_TYPE_PARAS_PROD,
+    SUB_TYPE_PARAS_SERV,
+    SUB_TYPE_PARAS_NETWORK,
+    
+    SUB_TYPE_MAX
+};
+
+#define PKT_MAGIC  0xdead
+typedef struct {
+    uint16_t  magic;
+    uint8_t   addr;
+    uint8_t   type;
+    uint8_t   subtype;
+    uint8_t   nack;
+    uint32_t  flag;
+    uint32_t  dlen;
+    uint8_t   data[0];
+}pkt_hdr_t;
 
 #pragma pack ()
 
@@ -618,7 +631,5 @@ typedef struct cascade_data{
 #define INI_NAME        "smartPDU.ini"
 #define INF_NAME        "PDUInfo.txt"
 
-
-
 #endif
 

+ 8 - 1
f407/applications/dflt.c

@@ -2,7 +2,14 @@
 #include "cfg.h"
 
 const paras_data_t DFLT_PARAS={
-
+        
+        .lang = LANG_ID_CHINESE,
+    
+        .ver = {
+            .ver = VERSION,
+            .bldtime = "__DATE__""__TIME__",
+        },
+    
         .prod = {
             .id         = 1011,
             .pname = "Smart PDU",

+ 25 - 1
f407/applications/fs.c

@@ -1,6 +1,7 @@
 #include <rtdbg.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <rtdevice.h>
 #include <rtthread.h>
 #include <dfs_posix.h>
 #include "fs.h"
@@ -35,7 +36,23 @@ static mnt_info_t MNT_INFO[FS_DEV_MAX]={
     //{FS_DEV_NOR, "nor", "/mnt/nor", "lfs"},
 };
 
-
+static int sd_mount(void)
+{
+    int r=1,n=0;
+    while(n<10) {
+        r = mmcsd_wait_cd_changed(500);
+        if(r==MMCSD_HOST_PLUGED) {
+            r = fs_mount("sd", 1);
+        }
+        else if(r==MMCSD_HOST_UNPLUGED) {
+            r = fs_mount("sd", 0);
+        }
+        
+        if(r<=0) break;
+        n++;
+    }
+    return r;
+}
 static int is_mounted(fs_handle_t *h, char *dev, char *path)
 {
     int i;
@@ -186,6 +203,13 @@ int fs_mkdir(char *path)
 }
 
 
+int fs_init(void)
+{
+    sd_mount();
+    fs_mkdir("/cfg");
+    return 0;
+}
+
 
 int fs_length(char* path)
 {

+ 1 - 0
f407/applications/fs.h

@@ -17,6 +17,7 @@ typedef struct {
     int  blen;
 }buf_t;
 
+int fs_init(void);
 int fs_mount(char *dev, int flag);
 int fs_mkdir(char *path);
 int fs_length(char* path);

+ 1 - 4
f407/applications/main.c

@@ -8,7 +8,6 @@
 #include <netdb.h>
 #include <unistd.h>
 #include "web.h"
-#include "ui.h"
 #include "sys.h"
 #include "power.h"
 #include "cfg.h"
@@ -95,11 +94,9 @@ __exit:
 
 static int user_init(void)
 {
-   // ui_init();
     power_init();
-		LOGD("____________cascade thread!!!!!\n");
     web_init();
-	  LOGD("cascade thread!!!!!\n");
+    LOGD("cascade thread!!!!!\n");
     cascade_init(CASCADE_PORT,1,1,115200);
     return 0;
 }

+ 8 - 108
f407/applications/paras.c

@@ -3080,14 +3080,13 @@ static int ini_reset(paras_handle_t *h)
 
     fprintf(fp, "[misc]\n");
     fprintf(fp, "watchdog    = \"%d\"\n", p->misc.watchdog);
-    fprintf(fp, "flip_time   = \"%d\"\n", p->misc.flip_time);
+    fprintf(fp, "fliptime    = \"%d\"\n", p->misc.flip_time);
     fprintf(fp, "led         = \"%d\"\n", p->misc.led);
     fprintf(fp, "beep        = \"%d\"\n", p->misc.beep);
     fprintf(fp, "rotate      = \"%d\"\n", p->misc.rotate);
     fprintf(fp, "\n");
 
     fclose(fp);
-
     if(h->dic) {
         iniparser_freedict(h->dic);
     }
@@ -3128,124 +3127,25 @@ static int ini_save(paras_handle_t *h)
 }
 #endif
 ////////////////////////////////////////////////////////////
-static char *str_get(char *buf, char *tok, char *dst, int dstlen)
-{
-    int n=0;
-    char *t=dst,*p=strstr(buf,tok);
-    if(!p) {
-        return NULL;
-    }
-    while((*p)!=':') {
-        if((*p)=='\r' || (*p)=='\n') {
-            return NULL;
-        }
-        p++;
-    }
-    p++;
-
-    while((*p)!='"') {
-        if((*p)=='\r' || (*p)=='\n') {
-            return NULL;
-        }
-        p++;
-    }
-    p++;
-
-    while((*p)!='"') {
-        if((*p)=='\r' || (*p)=='\n') {
-            return NULL;
-        }
-
-        *dst++ = *p++;
-        n++;
-        if(n>=dstlen-1) {
-            LOGE("str_get %s, dst buf length %d is too small!\n", tok, dstlen);
-            return NULL;
-        }
-    }
-    *dst = 0;
-
-    return t;
-}
-
-static int get_prod(paras_data_t *info)
-{
-    int r;
-    char *p,*tok;
-    buf_t fbuf;
-    char path[100]={0};
-
-    r = fs_load(INF_NAME, &fbuf);
-    if(r) {
-        return -1;
-    }
-
-    tok = "product_name";
-    p = str_get(fbuf.buf, tok, info->prod.pname, sizeof(info->prod.pname));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "product_sn";
-    p = str_get(fbuf.buf, tok, info->prod.pnumber, sizeof(info->prod.pnumber));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-#if 0
-    tok = "device_name";
-    p = str_get(fbuf.buf, tok, info->prod.name, sizeof(info->prod.name));
-    if(p) LOGD("___%s:%s\n", tok, p);
-#endif
-
-    tok = "device_no";
-    p = str_get(fbuf.buf, tok, info->prod.number, sizeof(info->prod.number));
-    if (p)
-        LOGD("___%s:%s\n", tok, p);
-
-    tok = "device_date";
-    p = str_get(fbuf.buf, tok,  info->prod.date, sizeof(info->prod.date));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "device_batch";
-    p = str_get(fbuf.buf, tok, info->prod.batch, sizeof(info->prod.batch));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "service_name";
-    p = str_get(fbuf.buf, tok, info->serv.name, sizeof(info->serv.name));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "service_site";
-    p = str_get(fbuf.buf, tok, info->serv.site, sizeof(info->serv.site));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "service_mail";
-    p = str_get(fbuf.buf, tok, info->serv.mail, sizeof(info->serv.mail));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "service_address";
-    p = str_get(fbuf.buf, tok, info->serv.addr, sizeof(info->serv.addr));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    tok = "service_telephone";
-    p = str_get(fbuf.buf, tok, info->serv.tele, sizeof(info->serv.tele));
-    if(p) LOGD("___%s:%s\n", tok, p);
-
-    FREE(fbuf.buf);
-    return 0;
-}
-
-
 int paras_init(void)
 {
     int r=0;
-    paras_handle_t  *h=&paraHandle;
+    char tmp[50];
+    paras_handle_t *h=&paraHandle;
+    version_data_t *pv=&h->paras.ver;
     
     memset(h, 0, sizeof(paraHandle));
     h->lck = lock_init();
     h->paras = DFLT_PARAS;
-    get_prod(&h->paras);
     sprintf(h->path, "/cfg/%s", INI_NAME);
     h->dic = ini_load(h->path, &h->paras);
     if(h->dic==NULL) {
         r = ini_reset(h);
     }
+    strcpy(pv->ver, VERSION);
+    sprintf(tmp, "/cfg/%s", INF_NAME);
+    sys_get_prod(tmp, &h->paras);
+    sys_get_bldtime(pv->bldtime, sizeof(pv->bldtime));
     
     return r;
 }

+ 121 - 31
f407/applications/sys.c

@@ -4,18 +4,17 @@
 #include <unistd.h>
 #include <string.h>
 #include <limits.h>
-#include <rtdevice.h>
+#include "fs.h"
 #include "log.h"
 #include "sys.h"
 #include "lock.h"
 #include "paras.h"
 #include "cfg.h"
 #include "fs.h"
+#include "ui.h"
 #include "thread.h"
 
 
-
-
 ////////////////////////////////////////////////////////////////////
 int sys_reboot(void)
 {
@@ -31,9 +30,6 @@ int sys_reboot(void)
 }
 
 
-
-
-
 int sys_get_chip_id(int *id)
 {
     if(!id) {
@@ -45,48 +41,142 @@ int sys_get_chip_id(int *id)
 }
 
 
-static void* poll_thread(void *arg)
+int sys_get_bldtime(char *buf, int len)
 {
-    thread_handle_t *h=(thread_handle_t*)arg;
-
-    //wdog_init();
-    //tmp_create();
-    while(h->quit==0) {
-        sleep(1);
+    char mon[10]={0};
+    datetime_t dt;
+    char *mon2[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
+
+    sscanf(__DATE__, "%s %hhu %hu", mon,&dt.day,&dt.year);
+    sscanf(__TIME__, "%hhu:%hhu:%hhu", &dt.hour,&dt.min,&dt.sec);
+    for(int i=0;i<12;i++) {
+        if(strcmp(mon, mon2[i])==0) {
+            dt.mon = i+1; break;
+        }
     }
-    pthread_exit(NULL);
+    return snprintf(buf,len,"%04hu/%02hhu/%02hhu %02hhu:%02hhu:%02hhu",dt.year,dt.mon,dt.day,dt.hour,dt.min,dt.sec);
 }
 
-
-
-static int sd_mount(void)
+static char *str_get(char *buf, char *tok, char *dst, int dstlen)
 {
-    int r=1,n=0;
-    while(n<10) {
-        r = mmcsd_wait_cd_changed(500);
-        if(r==MMCSD_HOST_PLUGED) {
-            r = fs_mount("sd", 1);
+    int n=0;
+    char *t=dst,*p=strstr(buf,tok);
+    if(!p) {
+        return NULL;
+    }
+    while((*p)!=':') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
         }
-        else if(r==MMCSD_HOST_UNPLUGED) {
-            r = fs_mount("sd", 0);
+        p++;
+    }
+    p++;
+
+    while((*p)!='"') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
+        }
+        p++;
+    }
+    p++;
+
+    while((*p)!='"') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
         }
-        
-        if(r<=0) break;
+
+        *dst++ = *p++;
         n++;
+        if(n>=dstlen-1) {
+            LOGE("str_get %s, dst buf length %d is too small!\n", tok, dstlen);
+            return NULL;
+        }
     }
-    return r;
+    *dst = 0;
+
+    return t;
 }
-static void mk_dir(void)
+int sys_get_prod(char *path, paras_data_t *info)
 {
-    fs_mkdir("/cfg");
+    int r;
+    char *p,*tok;
+    buf_t fbuf;
+
+    r = fs_load(path, &fbuf);
+    if(r) {
+        return -1;
+    }
+
+    tok = "product_name";
+    p = str_get(fbuf.buf, tok, info->prod.pname, sizeof(info->prod.pname));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "product_sn";
+    p = str_get(fbuf.buf, tok, info->prod.pnumber, sizeof(info->prod.pnumber));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+#if 0
+    tok = "device_name";
+    p = str_get(fbuf.buf, tok, info->prod.name, sizeof(info->prod.name));
+    if(p) LOGD("___%s:%s\n", tok, p);
+#endif
+
+    tok = "device_no";
+    p = str_get(fbuf.buf, tok, info->prod.number, sizeof(info->prod.number));
+    if (p)
+        LOGD("___%s:%s\n", tok, p);
+
+    tok = "device_date";
+    p = str_get(fbuf.buf, tok,  info->prod.date, sizeof(info->prod.date));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "device_batch";
+    p = str_get(fbuf.buf, tok, info->prod.batch, sizeof(info->prod.batch));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_name";
+    p = str_get(fbuf.buf, tok, info->serv.name, sizeof(info->serv.name));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_site";
+    p = str_get(fbuf.buf, tok, info->serv.site, sizeof(info->serv.site));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_mail";
+    p = str_get(fbuf.buf, tok, info->serv.mail, sizeof(info->serv.mail));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_address";
+    p = str_get(fbuf.buf, tok, info->serv.addr, sizeof(info->serv.addr));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_telephone";
+    p = str_get(fbuf.buf, tok, info->serv.tele, sizeof(info->serv.tele));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    free(fbuf.buf);
+    return 0;
+}
+
+
+static void* poll_thread(void *arg)
+{
+    thread_handle_t *h=(thread_handle_t*)arg;
+
+    //wdog_init();
+    //tmp_create();
+    while(h->quit==0) {
+        sleep(1);
+    }
+    pthread_exit(NULL);
 }
 
 
 int sys_init(void)
 {
-    sd_mount();
-    mk_dir();
+    fs_init();
     paras_init();
+    ui_init();
     
     //thread_start(THREAD_ID_POLL, poll_thread, NULL);
 

+ 3 - 3
f407/applications/sys.h

@@ -19,8 +19,9 @@ int sys_reboot(void);
 int sys_set_factory(void);
 
 int sys_chmod(void);
-int sys_get_disk_ava_MB(char *path);
-int sys_get_mem_ava_MB(void);
+int sys_get_bldtime(char *buf, int len);
+int sys_get_prod(char *path, paras_data_t *info);
+
 int sys_is_running(char *prog);
 int sys_get_path(char *path, char *name);
 int sys_get_net(network_data_t *para, int ipVersion);
@@ -28,6 +29,5 @@ int sys_set_net(network_data_t *para, int ipVersion);
 int sys_get_mac(char *mac, int maclen);
 int sys_get_chip_id(int *id);
 int sys_ip_check(char *ip);
-int sys_get_prod(product_data_t *prod);
 
 #endif

+ 22 - 8
f407/applications/web.c

@@ -6,6 +6,7 @@
 #include "paras.h"
 #include "cascade.h"
 #include "cfg.h"
+#include "lcd.h"
 #include <stdio.h>
 #include "datadef.h"
 #include "cascade.h"
@@ -207,6 +208,16 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         {
             paras_data_t* para=paras_get();
             switch(hdr->subtype) {
+                
+                case SUB_TYPE_PARAS_LANG:
+                {
+                    if(hdr->flag<LANG_ID_MAX) {
+                        para->lang = hdr->flag;
+                        paras_save();
+                    }
+                }
+                break;
+                
                 case SUB_TYPE_PARAS_MODBUS:
                 {
                     modbus_data_t *p=(modbus_data_t*)hdr->data;
@@ -219,7 +230,10 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
                 case SUB_TYPE_PARAS_MISC:
                 {
                     misc_data_t *p=(misc_data_t*)hdr->data;
-                    //
+                    
+                    if(p->rotate!=para->misc.rotate) {
+                        lcd_rotate(p->rotate);
+                    }
                     
                     para->misc = *p;
                     paras_save();
@@ -241,8 +255,10 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
                 case SUB_TYPE_PARAS_NETWORK:
                 {
                     network_data_t *p=(network_data_t*)hdr->data;
-                    
-                    //set_if
+                    extern void set_dns(uint8_t dns_num, char* dns_server);
+                    extern void set_if(char* netif_name, char* ip_addr, char* gw_addr, char* nm_addr);
+                    set_if("e0", p->ipaddr, p->gateway, p->mask);
+                    set_dns(0, p->dns1); set_dns(1, p->dns2);
                 }
                 break;
                 
@@ -309,10 +325,6 @@ 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) {
-                    //cascade_reinit(MODBUS_SLAVE, hdr->addr, 115200);
-                }
                 send_powerc(h, c, hdr->addr);
             }
         }
@@ -418,6 +430,8 @@ static void http_fn(mg_conn_t *c, int ev, void *ev_data)
         if (c->fn_data) {
             mg_tls_init(c, &h->tls);
         }
+        paras_data_t *p=paras_get();
+        ws_send_pkt(h, c, 0, PKT_TYPE_PARAS, p, sizeof(paras_data_t), 1);
     }
     else if(ev == MG_EV_WS_MSG) {
         struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;
@@ -430,7 +444,7 @@ static void http_fn(mg_conn_t *c, int ev, void *ev_data)
     }
     else if(ev == MG_EV_WEBSOCKET_HANDSHAKE_DONE) {
         paras_data_t *p=paras_get();
-        //ws_send(h, c, PKT_TYPE_PARAS, p, sizeof(paras_data_t), 1);
+        ws_send_pkt(h, c, 0, PKT_TYPE_PARAS, p, sizeof(paras_data_t), 1);
         set_timer(c, TIMER_INTERVAL);
     }
     else if(ev == MG_EV_WEBSOCKET_FRAME) {

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

@@ -87,6 +87,8 @@ const LANG_ID=function(){
     LANG_ID_FRENCH:len++,
     LANG_ID_ITALIAN:len++,
     LANG_ID_JAPANESE:len++,
+    
+    LANG_ID_MAX:len++,
     }
 }();
 
@@ -265,7 +267,7 @@ function bin_to_hdr(bin) {
 function bin_to_info(bin) {
     var tmp, length=0;
 
-    this.name = array_to_string(bin.slice(0,32));
+    this.name = array_to_string(bin.slice(length,32));
     length += 32;
 
     tmp = new DataView(bin, length);
@@ -425,6 +427,17 @@ function bin_to_thr(bin) {
     this.len = length;
 }
 ////////////////////////////////
+function bin_to_ver(bin) {
+    var tmp, length=0;
+    
+    this.ver = array_to_string(bin.slice(length,16));
+    length += 16;
+    
+    this.addr = array_to_string(bin.slice(length,32));
+    length += 32;
+
+    this.len = length;
+}
 function bin_to_modbus(bin) {
     var tmp, length=0;
     
@@ -672,6 +685,13 @@ function bin_to_alarmd(bin) {
 function bin_to_paras(bin) {
     var tmp, length=0;
     
+    tmp = new DataView(bin, length);
+    this.lang = tmp.getUint8(0,true);
+    length += 1;
+    
+    this.ver = new bin_to_ver(bin.slice(length));
+    length += this.ver.len;
+    
     this.cas = new bin_to_modbus(bin.slice(length));
     length += this.cas.len;
     
@@ -1199,7 +1219,7 @@ function bin_parse(bin)
             break;
            
            case PKT_TYPE.PKT_TYPE_PARAS:
-            h.alarmd = new bin_to_paras(data);
+            h.paras = new bin_to_paras(data);
             break;
            
            default :