Преглед изворни кода

整理升级代码,准备调试

guohui пре 1 година
родитељ
комит
bb24274c61
4 измењених фајлова са 153 додато и 95 уклоњено
  1. 125 14
      pro/src/app.c
  2. 20 76
      pro/src/appweb_handle.c
  3. 6 3
      pro/src/json_handle.c
  4. 2 2
      pro/src/websocket_handle.c

+ 125 - 14
pro/src/app.c

@@ -52,6 +52,20 @@ static void mem_swap(void *buf, int len)
         pbuf[i+1] = tmp;
     }
 }
+
+static int mb_get_timeout(Modbus_Manger *mm)
+{
+    int r,timeout=0;;
+    r = g_modbus_get_timeout(mm, &timeout);
+    if(r) {
+        return -1;
+    }
+    return timeout;
+}
+static int mb_set_timeout(Modbus_Manger *mm, int timeout)
+{
+    return g_modbus_set_timeout(mm, timeout);
+}
 static int mb_read(Modbus_Manger *mm, uint16_t addr, uint16_t reg, void *data, int len)
 {
     int r,cnt=(len+len%2)/2;
@@ -66,6 +80,98 @@ static int mb_write(Modbus_Manger *mm, uint16_t addr, uint16_t reg, void *data,
     int r,cnt=(len+len%2)/2;
     return g_modbus_write_x_reg(mm, addr, reg, cnt, data);
 }
+///////////////////////////////////////////////////////////////////////
+enum {
+    ONLINE=0,
+    OFFLINE,
+    UPGRADING,
+    UPGRADE_OK,
+    UPGRADE_FAIL,
+};
+typedef struct {
+    char path[200]; int  flag;
+}upgrade_arg_t;
+static upgrade_arg_t upg_arg;
+static board_list_t brd_list={0},upg_list={0};
+board_list_t *board_upgrade_list_get(void)
+{
+    return &upg_list;
+}
+int board_upgrade_list_set(char *s)
+{
+    int i=0,n=0,max=0;
+    char tmp[10],*p=s;
+    char *tok="productId=";
+    board_list_t *l=&upg_list;
+
+    if(!s) {
+        return -1;
+    }
+    memset(l, 0, sizeof(board_list_t));
+
+    max = sizeof(l->info)/sizeof(l->info[0]);
+    p = strstr(p, tok);
+    if(!p) {
+        return -1;
+    }
+
+    while(1) {
+        if((*p)==',' || (*p)=='&') {
+            tmp[i] = 0;
+            l->info[n].addr = atoi(tmp);
+            i = 0; n++;
+
+            if((*p)=='&' || n>=max) {
+                break;
+            }
+        }
+        else {
+            tmp[i++] = *p;
+        }
+        p++;
+    }
+    l->cnt = n;
+
+    return (n>0)?0:-1;
+}
+int board_upgrade_status_set(int addr, int status)
+{
+    int r=-1;
+    board_list_t *l=&upg_list;
+    for(int i=0; i<l->cnt; i++) {
+        if(addr>0) {
+            if(l->info[i].addr==addr) {
+                l->info[i].status = status;
+                r = 0;
+            }
+        }
+        else {
+            l->info[i].status = status;
+            r = 0;
+        }
+    }
+    return r;
+}
+int board_list_get(board_list_t *list)
+{
+    int max=0;
+    board_list_t *l=&brd_list;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    GlobalPowerManger *tmp,*hd=&dm->_globalPowerManger;
+
+    memset(l, 0, sizeof(board_list_t));
+    max = sizeof(l->info)/sizeof(l->info[0]);
+    list_for_each_entry(tmp,&hd->list,list) {
+        if(tmp->product_saddr>0) {
+            l->info[l->cnt++].addr=tmp->product_saddr;
+            if(l->cnt>=max) break;
+        }
+    }
+    if(list) *list = *l;
+
+    return 0;
+}
+
 static int upgrade_send(Modbus_Manger *mm, uint16_t addr, char *data, int dlen)
 {
     int r,pid=0;
@@ -87,7 +193,7 @@ static int upgrade_send(Modbus_Manger *mm, uint16_t addr, char *data, int dlen)
         pkt->dlen = onelen;
         r = mb_write(mm, addr, REG_UPG_WRITE, pkt, onelen+sizeof(upg_pkt_t));
         slen += onelen;
-        usleep(10000);
+        if(pid) usleep(100000);
 
         if(pid<0) break;
         pid++;
@@ -108,10 +214,9 @@ static int upgrade_check(Modbus_Manger *mm, uint16_t addr)
     }
     return -1;
 }
-
 static int upgrade_proc(char *path, Modbus_Manger *mm)
 {
-    int i,j,r;
+    int i,j,r,timeout;
     buf_t fbuf;
     GlobalDeviceManager *dm=&__globalDeviceManage;
 
@@ -122,6 +227,10 @@ static int upgrade_proc(char *path, Modbus_Manger *mm)
         return -1;
     }
     
+    timeout = mb_get_timeout(mm);
+    mb_set_timeout(mm, 10);
+
+    board_upgrade_status_set(-1, UPGRADING);
     //broadcase upgrade file
     upgrade_send(mm, 0, fbuf.buf, fbuf.dlen);
     for(i=1; i<=dm->brdMax; i++) {
@@ -134,17 +243,19 @@ static int upgrade_proc(char *path, Modbus_Manger *mm)
             if(r==0) break;
             upgrade_send(mm, i, fbuf.buf, fbuf.dlen);
         }
+
+        if(r) {
+            board_upgrade_status_set(i, UPGRADE_FAIL);
+        }
+        else {
+            board_upgrade_status_set(i, UPGRADE_OK);
+        }
     }
     free(fbuf.buf);
+    mb_set_timeout(mm, timeout);
 
     return 0;
 }
-
-typedef struct {
-    char path[200];
-    int  flag;
-}upgrade_arg_t;
-static upgrade_arg_t upgrade_arg;
 static void* upgrade_thread(void *arg)
 {
     int r;
@@ -160,20 +271,20 @@ static void* upgrade_thread(void *arg)
     thread_restart(THREAD_ID_SNMP);
     thread_restart(THREAD_ID_POWER);
     
-    //file_remove(path);
+    file_remove(parg->path);
     parg->flag = 0;
 
     pthread_exit(NULL);
 }
 int board_upgrade(char *path)
 {
-    if(upgrade_arg.flag==1) {
+    if(upg_arg.flag==1) {
         return -1;
     }
-    strcpy(upgrade_arg.path,path);
-    upgrade_arg.flag = 1;
+    strcpy(upg_arg.path,path);
+    upg_arg.flag = 1;
 
-    thread_start_simp(upgrade_thread, &upgrade_arg, 4*MB);
+    thread_start_simp(upgrade_thread, &upg_arg, 4*MB);
     return 0;
 }
 

+ 20 - 76
pro/src/appweb_handle.c

@@ -440,13 +440,7 @@ static void *web_thread(void *arg)
     mg_mgr_init(&mgr);
 
     //sys_get_path(mh->rootDir, WEB_ROOT);
-#if(CHIP_TYPE == CHIP_T113s)  
-    strcpy(mh->rootDir, "/mnt/UDISK/web");
-    
-#else
     strcpy(mh->rootDir, "/root/run/web");
-#endif
-
 
    
     if (mg_http_listen(&mgr, http_addr, http_mg_cb, NULL) == NULL) {
@@ -463,13 +457,8 @@ static void *web_thread(void *arg)
     webSetCallback();
     printf("_____mgHandle.cnt: %d, rootdir: %s\n", mh->cnt, mh->rootDir);
 
-#if(CHIP_TYPE == CHIP_T113s)
-    mh->tls.cert = mg_str(file_load2("/mnt/UDISK/app/cert/server.crt",0));
-    mh->tls.key = mg_str(file_load2("/mnt/UDISK/app/cert/server.key",0));
-#else
     mh->tls.cert = mg_str(file_load2("/root/run/app/cert/server.crt",0));
     mh->tls.key = mg_str(file_load2("/root/run/app/cert/server.key",0));
-#endif
     //mh->tls.name = mg_url_host(https_addr);
     while(h->quit==0) {
         mg_mgr_poll(&mgr, 200);
@@ -5427,7 +5416,9 @@ static void equipmentMintenance(void *conn)
                         free(breakerManager);
                         breakerManager = NULL;
                         ack_str = ctrl_breaker_err_ack_to_json("jdh error!!!!");
-                }
+                    }
+               
+
             }else
             {
                 ack_str = ctrl_breaker_err_ack_to_json("ID More 48 !!!!");
@@ -5660,64 +5651,9 @@ static void equipmentMintenanceExport(void *conn)
         file_io(conn, FILE_SYS_CFG, FILE_EXPORT, NULL);
     }
 }
-
-static board_list_t brdList={0};
-static board_list_t upgList={0};
-static int get_list(char *s, board_list_t *l)
-{
-    int i=0,n=0,max=0;
-    char tmp[10];
-
-    char *p=strstr(s, "productId=");
-    if(!p || !l) {
-        return -1;
-    }
-    memset(l, 0, sizeof(board_list_t));
-
-    max = sizeof(l->info)/sizeof(l->info[0]);
-    while((*p)!='&') {
-        if((*p)==',') {
-            tmp[i] = 0;
-            if(n>=max) {
-                break;
-            }
-            else {
-                l->info[n].addr = atoi(tmp);
-                i = 0; n++;
-            }
-        }
-        else {
-            tmp[i++] = *p;
-        }
-    }
-    l->cnt = n;
-
-    return (n>0)?0:-1;
-}
-static void get_board(board_list_t *l)
-{
-    int max=0;
-    GlobalDeviceManager *dm=&__globalDeviceManage;
-    GlobalPowerManger *tmp,*hd=&dm->_globalPowerManger;
-
-    if(!l) {
-        return;
-    }
-    memset(l, 0, sizeof(board_list_t));
-
-    max = sizeof(l->info)/sizeof(l->info[0]);
-    list_for_each_entry(tmp,&hd->list,list) {
-        if(tmp->product_saddr>0) {
-            l->info[l->cnt++].addr=tmp->product_saddr;
-            if(l->cnt>=max) break;
-        }
-    }
-}
-board_list_t *get_board_list(void)
-{
-    return &upgList;
-}
-
+extern int board_upgrade_list_set(char *s);
+extern int board_list_get(board_list_t *list);
+extern int board_upgrade(char *path);
 
 static void controlBoardUpgrade(void *conn)
 {
@@ -5728,24 +5664,31 @@ static void controlBoardUpgrade(void *conn)
 
     if(strstr(hm->uri.buf, "listCbQuery")) {
         board_info_t info;
+        board_list_t list;
 
-        get_board(&brdList);
-        ack_str = board_to_json(&brdList);
+        board_list_get(&list);
+        ack_str = board_to_json(&list);
         
         http_reply(conn, 200, ack_str);
         cJSON_free(ack_str);
     }
-    else if(strstr(hm->uri.buf, "type=importData")) {
+}
+static void controlBoardUpgradeUpload(void *conn)
+{
+    int r = -1 ;
+    char* ack_str=NULL ;
+    mg_stream_t *s=(mg_stream_t*)conn;
+    struct mg_http_message *hm=s->ev_data;
+
+    if(strstr(hm->uri.buf, "type=importData")) {
         char path[100];
 
         sprintf(path, "%s/%s", DOWN_FOLDER, "fw.upg");
         r = upload_file(conn, path);
         if(r==0) {
-
-            get_list(hm->uri.buf, &upgList);
+            board_upgrade_list_set(hm->uri.buf);
 
             printf("_____ board upgrade now ...\n");
-            extern int board_upgrade(char *path);
             board_upgrade(path);
         }
     }
@@ -5772,6 +5715,7 @@ static int webSetCallback(void)
     httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备维护 
     httpAddCallback("/pdu/equipmentMintenanceUpload", equipmentMintenanceUpload); //固件升级
     httpAddCallback("/pdu/equipmentMintenanceExport", equipmentMintenanceExport);
+    httpAddCallback("/pdu/controlBoardUpgradeUpload", controlBoardUpgradeUpload);
     httpAddCallback("/pdu/controlBoardUpgrade", controlBoardUpgrade);
     
     return 0;

+ 6 - 3
pro/src/json_handle.c

@@ -1544,15 +1544,18 @@ char* board_to_json(board_list_t *l)
     for(i=0; i<l->cnt; i++) {
         tmp = cJSON_CreateObject();
         cJSON_AddStringToObject(tmp,"productName",  info->p_name);
-        cJSON_AddStringToObject(tmp,"productId",    info->p_sn);
 
         sprintf(temp, "%d",l->info[i].addr);
+        cJSON_AddStringToObject(tmp,"productId",    temp);
+
+        sprintf(temp, "%d",l->info[i].brd_id);
         cJSON_AddStringToObject(tmp,"productNumber",temp);
         
-        cJSON_AddStringToObject(tmp,"productChNumber","8");
+        sprintf(temp, "%d",l->info[i].channels);
+        cJSON_AddStringToObject(tmp,"productChNumber",temp);
         cJSON_AddStringToObject(tmp,"productVersion","0.0.0");
         cJSON_AddStringToObject(tmp,"upgradeDate","2020.11.11 1:2:3");
-        cJSON_AddStringToObject(tmp,"status","0");
+        cJSON_AddStringToObject(tmp,"status","1");      //0:offline  1:online  2:upgrading
 
         cJSON_AddItemToArray(array, tmp);
     }

+ 2 - 2
pro/src/websocket_handle.c

@@ -218,8 +218,8 @@ static int ws_breaker_update(ws_handle_t *h)
 
 static int ws_upg_update(ws_handle_t *h)
 {
-    extern board_list_t *get_board_list(void);
-    board_list_t *l=get_board_list();
+    extern board_list_t *board_upgrade_list_get(void);
+    board_list_t *l=board_upgrade_list_get();
 
     char* json = board_to_json(l);
     ws_send_data(h, json, strlen(json));