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

1、添加控制板升级逻辑
2、添加数据库查询时间区间限制

guohui лет назад: 2
Родитель
Сommit
9364faf327
5 измененных файлов с 123 добавлено и 2 удалено
  1. 111 0
      pro/src/app.c
  2. 1 1
      pro/src/common.h
  3. 8 0
      pro/src/json_handle.c
  4. 2 0
      pro/src/json_handle.h
  5. 1 1
      pro/src/upg.c

+ 111 - 0
pro/src/app.c

@@ -68,6 +68,117 @@ static void db_ow_test(sqlite3 *db, int *index, int *index3)
     }
 }
 
+#include "file.h"
+typedef struct {
+    uint16_t  pid;
+    uint8_t   dlen;
+    uint8_t   data[0];
+}upg_pkt_t;
+
+#define REG_UPGRADE  0xff
+#define REG_CHECK    0xfe
+
+static void mem_swap(void *buf, int len)
+{
+    int i;
+    uint8_t tmp,*pbuf=(uint8_t*)buf;
+    for(i=0; i<len; i+=2) {
+        tmp = pbuf[i];
+        pbuf[i] = pbuf[i+1];
+        pbuf[i+1] = tmp;
+    }
+}
+static int mb_read(uint16_t addr, uint16_t reg, void *data, int len)
+{
+    int r,cnt=len+len%2;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    Modbus_Manger *mm=&dm->_globalRelaySampManger;
+
+    r = g_modbus_read_x_reg(mm, addr, reg, len+len%2, data);
+    if(r>0) mem_swap(data, r*2);
+    return r;
+
+}
+static int mb_write(uint16_t addr, uint16_t reg, void *data, int len)
+{
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    Modbus_Manger *mm=&dm->_globalRelaySampManger;
+    return g_modbus_write_x_reg(mm, addr, reg, len+len%2, data);
+}
+static int upgrade_send(uint16_t addr, char *data, int dlen)
+{
+    int r,pid=0;
+    int slen=0,onelen=0,onemax=200;
+    char temp[400];
+
+    upg_pkt_t *pkt=(upg_pkt_t*)temp;
+    while(1) {
+        onelen = ((slen+onemax)>dlen)?(dlen-(slen+onemax)):onemax;
+        memcpy(pkt->data, data+slen, onelen);
+        pkt->pid = pid++;
+        pkt->dlen = onelen;
+        mb_write(addr, REG_UPGRADE, data+slen, onelen+sizeof(upg_pkt_t));
+        slen += onelen;
+    }
+
+    return 0;
+}
+static int upgrade_check(uint16_t addr)
+{
+    char temp[300];
+
+    upg_pkt_t *pkt=(upg_pkt_t*)temp;
+    while(1) {
+        mb_read(addr, REG_CHECK, pkt, sizeof(upg_pkt_t));
+        if(pkt->dlen>0) {
+            return 0;
+        }
+    }
+    return -1;
+}
+
+int power_upgrade(char *path)
+{
+    int i,j,r;
+    buf_t fbuf;
+    int slen=0,onelen=0,onemax=200;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    GlobalPowerCtrlBoard *pboard=dm->_all_ctrl_board;
+
+    #define RETRY_MAX  3
+
+    thread_stop(THREAD_ID_SNMP);
+    thread_stop(THREAD_ID_POWER);
+
+    r = file_load(path, &fbuf);
+    if(r) {
+        return -1;
+    }
+    
+    //broad upgrade file
+    upgrade_send(0, fbuf.buf, fbuf.dlen);
+    for(i=0; i<MAX_CHN_COUNT; i++) {
+        if(pboard[i].product_saddr==0) {
+            continue;
+        }
+
+        for(j=0; j<RETRY_MAX; j++) {
+            r = upgrade_check(i);
+            if(r==0) {
+                break;
+            }
+            upgrade_send(i, fbuf.buf, fbuf.dlen);
+        }
+    }
+
+    free(fbuf.buf);
+    thread_start(THREAD_ID_SNMP, dm);
+    thread_start(THREAD_ID_POWER, dm);
+    
+    return 0;
+}
+
+
 
 void* power_thread(void* arg)
 {

+ 1 - 1
pro/src/common.h

@@ -255,7 +255,7 @@ typedef struct
 
 typedef struct
 {
-    int           mode;    						//1: static  0: dhcp
+    int           mode;    						//0:dhcp  1:static  
     char          ip_address[64] ; 				//ip地址
     char          mask[64]; 					//子网掩码
     char          gateway[64]; 					//网关

+ 8 - 0
pro/src/json_handle.c

@@ -4111,6 +4111,14 @@ cJSON* json_to_alarm_manage(const char* str,_AlarmRequestInfo* _alarm_request_in
     if(cjson_pagesize!=NULL)
         _alarm_request_info->pagesize = cjson_pagesize->valueint ;  
 
+    cJSON* cjson_start_time  = cJSON_GetObjectItem(cjson,"startTime");
+    if(cjson_start_time!=NULL)
+        _alarm_request_info->startTime = cjson_start_time->valuestring ;  
+
+    cJSON* cjson_end_time  = cJSON_GetObjectItem(cjson,"endTime");
+    if(cjson_end_time!=NULL)
+        _alarm_request_info->endTime = cjson_end_time->valuestring ;
+
     _alarm_request_info->_pwr_info.bUpdatealarmContentUpperValue = false;
     cJSON* cjson_alarmContentUpperValue = cJSON_GetObjectItem(cjson,"alarmContentUpperValue");
     if(cjson_alarmContentUpperValue!=NULL)

+ 2 - 0
pro/src/json_handle.h

@@ -323,6 +323,8 @@ typedef struct
     char* type;
     int pagenum;
     int pagesize;
+    char *startTime;
+    char *endTime;
     _Power_AlarmRequestInfo _pwr_info;
     _Sensor_AlarmRequestInfo _sensor_info;
     char* strProductChIds;

+ 1 - 1
pro/src/upg.c

@@ -5,7 +5,7 @@
 #include "elog.h"
 #include "upg.h"
 
-#if 0
+#if 1
 #define LOGD  log_d
 #define LOGE  log_e
 #else