Browse Source

1、更新web到7.18版本
2、添加snmp nms接口
3、解决功率显示单位错误的问题
4、解决升级服务管道通讯问题

guohui 2 years ago
parent
commit
18bf93c596

File diff suppressed because it is too large
+ 1 - 1
output/t113i/root/run/web/index.html


File diff suppressed because it is too large
+ 1 - 0
output/t113i/root/run/web/js/app.a59ccd08.js


File diff suppressed because it is too large
+ 1 - 0
output/t113i/root/run/web/js/chunk-1f8e7bbc.61cda6cc.js


File diff suppressed because it is too large
+ 1 - 0
output/t113i/root/run/web/js/chunk-c44a84d2.988d7b6f.js


+ 10 - 13
pro/CMakeLists.txt

@@ -88,9 +88,8 @@ set(PDU_SRC_LIST
 set(NO_WARNNING_FLAGS "-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable")
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NO_WARNNING_FLAGS} -Werror")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NO_WARNNING_FLAGS} -Werror")
-#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
-#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
-#target_link_options(my_target PRIVATE "-s")
+
+#set_target_properties(my_executable PROPERTIES LINK_FLAGS "-pthread")
 
 
 add_executable(smartPDU ${PDU_SRC_LIST})
@@ -104,21 +103,19 @@ set(CHIP t113i)
 
 add_custom_command(TARGET  smartPDU  POST_BUILD
                    COMMAND mkdir -p ${DST_DIR}/${CHIP}/root/run/app
-                   COMMAND cp -upf  ${SRC_DIR}/smartPDU ${DST_DIR}/${CHIP}//root/run/app
+                   COMMAND cp -upf  ${SRC_DIR}/smartPDU ${DST_DIR}/${CHIP}/root/run/app
 				   COMMAND ${DST_DIR}/pack.sh
 				   )
 
-
-#[[
-set(UPG_SRC_LIST   ${PROJECT_SOURCE_DIR}/upgrade/md5.c
-				   ${PROJECT_SOURCE_DIR}/upgrade/upgrade.c)
+if(0)
+	set(UPG_SRC_LIST   ${PROJECT_SOURCE_DIR}/upgrade/md5.c
+				   	   ${PROJECT_SOURCE_DIR}/upgrade/upgrade.c)
 				   
-add_executable(smartUPG ${UPG_SRC_LIST})
-target_link_libraries(smartUPG -lc -lpthread)
+	add_executable(smartUPG ${UPG_SRC_LIST})
+	target_link_libraries(smartUPG -lc -lpthread)
 
-add_custom_command(TARGET  smartUPG  POST_BUILD
+	add_custom_command(TARGET  smartUPG  POST_BUILD
                    COMMAND mkdir -p ${DST_DIR}/${CHIP}/usr/sbin
                    COMMAND cp -upf  ${SRC_DIR}/smartUPG ${DST_DIR}/${CHIP}/usr/sbin)
-]]
-
+endif()
 

+ 2 - 8
pro/src/appweb_handle.c

@@ -156,21 +156,15 @@ static int upload_handle(void *conn, char *upload_path)
     int r=-1;
     struct mg_http_part part;
     mg_stream_t *s=(mg_stream_t*)conn;
+    size_t pos = 0, total_bytes = 0;
     struct mg_http_message *hm = (struct mg_http_message *)s->ev_data;
     
-    MG_INFO(("New request to: [%.*s], body size: %lu", (int) hm->uri.len,
-             hm->uri.buf, (unsigned long) hm->body.len));
-    size_t pos = 0, total_bytes = 0, num_files = 0;
     while ((pos = mg_http_next_multipart(hm->body, pos, &part)) > 0) {
-        MG_INFO(("Chunk name: [%.*s] filename: [%.*s] length: %lu bytes",
-                (int) part.name.len, part.name.buf, (int) part.filename.len,
-                part.filename.buf, (unsigned long) part.body.len));
+        printf("filename: %s length: %lu bytes", part.filename.buf, (unsigned long) part.body.len);
 
         if (mg_path_is_sane(mg_str(upload_path))) {
             mg_file_write(&mg_fs_posix, upload_path, part.body.buf, part.body.len);
             total_bytes += part.body.len;
-            num_files++;
-            r = 0;
         }
     }
     return r;

+ 5 - 5
pro/src/json_handle.c

@@ -1581,7 +1581,7 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
 
-    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->power);
+    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->power/1000);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
 
     sprintf(temp,"%d",AC_MAX_POWER_VAL);
@@ -1619,7 +1619,7 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
     cJSON_AddStringToObject(data_filed1,"productCurrentMaximum",temp);
 
-    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->power);
+    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->power/1000);
     cJSON_AddStringToObject(data_filed1,"productPower",temp);
 
     sprintf(temp,"%d",AC_MAX_POWER_VAL);
@@ -1657,7 +1657,7 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
     cJSON_AddStringToObject(data_filed2,"productCurrentMaximum",temp);
 
-    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->power);
+    sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->power/1000);
     cJSON_AddStringToObject(data_filed2,"productPower",temp);
 
     sprintf(temp,"%d",AC_MAX_POWER_VAL);
@@ -1748,7 +1748,7 @@ char* over_all_pwr_monitor_to_json(int phaseType,_OverAllPwrAckInfo* _over_all_p
     sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
 
-    sprintf(temp,"%0.3f",_over_all_pwr_back_info->power);
+    sprintf(temp,"%0.3f",_over_all_pwr_back_info->power/1000.0);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
 
     sprintf(temp,"%d",AC_MAX_POWER_VAL);
@@ -3042,7 +3042,7 @@ char* ws_over_status_ack_to_json(int type,_OverAllPwrAckInfo* _over_all_pwr_back
     cJSON_AddStringToObject(data_filed,"productCurrent",temp);
     sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
-    sprintf(temp,"%0.3f",_over_all_pwr_back_info->power);
+    sprintf(temp,"%0.3f",_over_all_pwr_back_info->power/1000);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
     sprintf(temp,"%d",AC_MAX_POWER_VAL);
     cJSON_AddStringToObject(data_filed,"productPowerMaximum",temp);

+ 163 - 0
pro/src/snmp_nms.c

@@ -0,0 +1,163 @@
+#include "snmpget.h"
+#include "sys.h"
+
+#include <net-snmp/utilities.h>
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+
+
+
+typedef struct {
+    
+}snmp_handle_t;
+static snmp_handle_t snHandle;
+
+int snmp_nms_init(void)
+{
+    snmp_handle_t   *sh=&snHandle;
+
+    SOCK_STARTUP;
+    
+    return 0;
+}
+
+
+//snmp_get("public","192.168.1.133","1.3.6.1.2.1.1.1.0");
+static char* snmp_get(char *community, char *ip, char *oid, int msgtype)
+{
+    int             count;
+    int             current_name = 0;
+    char           *names[SNMP_MAX_CMDLINE_OIDS];
+    oid             name[MAX_OID_LEN];
+    size_t          name_length;
+    int             status;
+    int             failures = 0;
+    int             exitval = 0;
+    netsnmp_pdu    *response;
+    netsnmp_variable_list *vars=NULL;
+    
+    netsnmp_session  *ss;
+    netsnmp_session  session;
+    
+    snmp_sess_init(&session);
+    session.version  = SNMP_VERSION_2c;
+    session.peername = ip;
+    session.community = (unsigned char*)community;
+    session.community_len = strlen(community);
+    
+    ss = snmp_open(&session);
+    if (ss == NULL) {
+        return -1;
+    }
+    
+    names[0] = oid;
+    current_name = 1;
+    
+    pdu = snmp_pdu_create(msgtype);
+    for (count = 0; count < current_name; count++) {
+        name_length = MAX_OID_LEN;
+        if (!snmp_parse_oid(names[count], name, &name_length)) {
+            snmp_perror(names[count]);
+            failures++;
+        }
+        else {
+            snmp_add_null_var(pdu, name, name_length);
+        }
+    }
+
+    retry:
+    status = snmp_synch_response(ss, pdu, &response);
+    if (status == STAT_SUCCESS) {
+        if (response->errstat == SNMP_ERR_NOERROR) {
+            for (vars = response->variables; vars;
+                 vars = vars->next_variable)
+                print_variable(vars->name, vars->name_length, vars);
+
+        } else {
+            fprintf(stderr, "Error in packet\nReason: %s\n",
+                    snmp_errstring(response->errstat));
+
+            if (response->errindex != 0) {
+                fprintf(stderr, "Failed object: ");
+                for (count = 1, vars = response->variables;
+                     vars && count != response->errindex;
+                     vars = vars->next_variable, count++)
+                    /*EMPTY*/;
+                if (vars) {
+                    fprint_objid(stderr, vars->name, vars->name_length);
+		}
+                fprintf(stderr, "\n");
+            }
+            exitval = 2;
+
+            //retry if the errored variable was successfully removed 
+            if (!netsnmp_ds_get_boolean(NETSNMP_DS_APPLICATION_ID,
+					NETSNMP_DS_APP_DONT_FIX_PDUS)) {
+                pdu = snmp_fix_pdu(response, SNMP_MSG_GET);
+                snmp_free_pdu(response);
+                response = NULL;
+                if (pdu != NULL) {
+                    goto retry;
+		        }
+            }
+        }
+
+    } else if (status == STAT_TIMEOUT) {
+        fprintf(stderr, "Timeout: No Response from %s.\n", session.peername);
+        exitval = 1;
+
+    } else {                    /* status == STAT_ERROR */
+        snmp_sess_perror("snmpget", ss);
+        exitval = 1;
+    }
+    
+    if (response) {
+        snmp_free_pdu(response);
+    }
+    
+    snmp_close(ss);
+    netsnmp_cleanup_session(&session);
+    
+    return 0;
+}
+
+//SNMP_VERSION_1 SNMP_VERSION_2c SNMP_VERSION_3
+//SNMP_MSG_GET SNMP_MSG_GETNEXT SNMP_MSG_GETBULK  SNMP_MSG_INFORM SNMP_MSG_SET
+char* snmp_nms_get(snmp_req_t *req)
+{
+    if(!req) {
+        return NULL;
+    }
+    return snmp_get(req->community, req->ip, req->oid, SNMP_MSG_GET);
+}
+
+
+char* snmp_nms_getnext(snmp_req_t *req)
+{
+    if(!req) {
+        return NULL;
+    }
+    return snmp_get(req->community, req->ip, req->oid, SNMP_MSG_GETNEXT);
+}
+
+
+char* snmp_nms_getbulk(snmp_req_t *req)
+{
+    if(!req) {
+        return NULL;
+    }
+    return snmp_get(req->community, req->ip, req->oid, SNMP_MSG_GETBULK);
+}
+
+
+int snmp_nms_deinit(void)
+{
+    SOCK_CLEANUP;
+    
+    return 0;
+}
+
+
+
+
+

+ 32 - 0
pro/src/snmp_nms.h

@@ -0,0 +1,32 @@
+#ifndef __SNMP_NMS_Hx__
+#define __SNMP_NMS_Hx__
+
+enum {
+    NMS_GET=0,
+    NMS_GETNEXT,
+    NMS_GETBULK,
+    
+    NMS_SET,
+};
+
+typedef struct {
+    char  *buf;
+    int   len;
+}snmp_data_t;
+
+typedef struct {
+    char *community;
+    char *ip;
+    char *oid;
+}snmp_req_t;
+
+
+int snmp_nms_init(void);
+
+char* snmp_nms_get(snmp_req_t *req);
+char* snmp_nms_getnext(snmp_req_t *req);
+char* snmp_nms_getbulk(snmp_req_t *req);
+
+
+#endif
+

+ 1 - 1
pro/src/sqlite_handle.c

@@ -583,7 +583,7 @@ int dev_search_latest_power_statistic_info(GlobalDeviceManager* globalDeviceMang
     all->voltage = fSaveVoltage ; 
     all->freq =  fSaveFreq ;
     all->factor = fSaveFactor;      
-    all->power = all->power/1000;
+    all->power = all->power;
     
     return 0;
 }

+ 21 - 10
pro/src/upg.c

@@ -1,23 +1,34 @@
 #include <errno.h>
+#include <stdio.h>
 #include <sys/ipc.h> 
 #include <sys/msg.h>
 #include "elog.h"
 #include "upg.h"
 
+#if 0
+#define LOGD  log_d
+#define LOGE  log_e
+#else
+#define LOGD  printf
+#define LOGE  printf
+#endif
 
-static key_t upgkey=0;
-
+static key_t ukey=0;
 static int upg_send(int evt)
 {
     int r,msgid;
-    upgrade_msg_t msg={.type=1, .evt=evt};
+    msgbuf_t mb;
 
-    msgid = msgget(upgkey, 0666| IPC_CREAT);
-    log_e("+++++++++++ key: %d, msgid: %d\n", upgkey, msgid);
+    msgid = msgget(ukey, 0666| IPC_CREAT);
+    //LOGD("+++++++++++ key: %d, msgid: %d\n", ukey, msgid);
     
-    r = msgsnd(msgid, &msg, sizeof(msg), IPC_NOWAIT);
+    mb.evt = evt;
+    r = msgsnd(msgid, &mb, sizeof(mb.evt), IPC_NOWAIT);
     if(r<0) {
-        log_e("+++++++++++ msgsnd failed, %d, errno: %d\n", r, errno);
+        LOGE("msgsnd failed, %d, errno: %d\n", r, errno);
+    }
+    else {
+        LOGD("msgsnd evt 0x%02x ok\n", evt);
     }
     
     return r;
@@ -28,9 +39,9 @@ int upg_init(void)
 {
     int r,msgid;
     
-    upgkey = ftok(UPG_KEY_PATH, UPG_KEY_SN);
-    if(upgkey<0) {
-        log_e("ftok %s failed, errno: %d\n", UPG_KEY_PATH, errno);
+    ukey = ftok(UPG_KEY_PATH, UPG_KEY_SN);
+    if(ukey<0) {
+        LOGE("ftok %s failed, errno: %d\n", UPG_KEY_PATH, errno);
         return -1;
     }
     

+ 77 - 77
pro/upgrade/upgrade.c

@@ -16,10 +16,13 @@
 #include "md5.h"
 
 
-//#define LOG log_print
-#define LOG printf
-
-
+#if 0
+#define LOGD log_print
+#define LOGE log_print
+#else
+#define LOGD printf
+#define LOGE printf
+#endif
 
 typedef struct {
 	char *pbuf;
@@ -34,7 +37,6 @@ typedef struct {
 
 	pthread_t tid;
     FILE*     log;
-    key_t     key;
 }upg_handle_t;
 static upg_handle_t upgHandle;
 static int log_print(const char *fmt, ...);
@@ -74,14 +76,14 @@ static int exe_cmd(char *cmd, node_t *nd)
 	while(1) {
         r = fread(pbuf+dlen, sizeof(char), onelen, fp);
         if(r<=0) {
-            LOG("upgrade relloac %d failed\n", dlen+onelen);
+            LOGE("upgrade relloac %d failed\n", dlen+onelen);
             break;
         }
         dlen += r;
         if(dlen+onelen>blen) {
             char* p = realloc(pbuf, dlen+onelen);
             if(!p) {
-                LOG("upgrade relloac %d failed\n", dlen+onelen);
+                LOGE("upgrade relloac %d failed\n", dlen+onelen);
                 free(pbuf); pclose(fp);
                 return -1;
             }
@@ -117,7 +119,7 @@ static int log_init(void)
 
     upgHandle.log = fopen(path, "wt");
     if (!upgHandle.log) {
-        printf("%s open failed\n", path);
+        LOGE("%s open failed\n", path);
         return -1;
     }
 
@@ -219,12 +221,12 @@ static int file_save(char *path, void *buf, int len)
     
     fp = fopen(path, "wb");
     if(!fp) {
-        LOG("file_save, fopen %s failed\n", path);
+        LOGE("file_save, fopen %s failed\n", path);
         return -1;
     }
     r = fwrite(buf, 1, len, fp);
     if(r!=len) {
-        LOG("file_save %s failed\n", path);
+        LOGE("file_save %s failed\n", path);
         r = -1;
     }
     else {
@@ -241,12 +243,12 @@ static int file_load(char* path, void* buf, int len)
 
     fp = fopen(path, "rb");
     if (!fp) {
-        LOG("file_load, fopen %s failed\n", path);
+        LOGE("file_load, fopen %s failed\n", path);
         return -1;
     }
     r = fread(buf, 1, len, fp);
     if (r != len) {
-        LOG("file_load %s failed\n", path);
+        LOGE("file_load %s failed\n", path);
         r = -1;
     }
     else {
@@ -272,7 +274,7 @@ static int file_cover(char *path)
     snprintf(cmd, sizeof(cmd), "tar -xpf %s -C / > /dev/null 2>&1", path);
     r = system(cmd);
     if(r) {
-        LOG("%s failed\n", cmd);
+        LOGE("%s failed\n", cmd);
         return -1;
     }
 
@@ -313,34 +315,34 @@ static int file_backup(void)
     //dl目录有tar压缩包,则拷贝到bak目录
     snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_TAR_NAME);
     if(file_exist(tmp)) {
-        LOG("%s exist\n", tmp);
+        LOGD("%s exist\n", tmp);
         snprintf(cmd, sizeof(cmd), "cp -f %s %s/", tmp, BAK_FOLDER);
         r = system(cmd);
         if(r==0) {
             return 0;
         }
-        LOG("cp %s to %s failed\n", tmp, BAK_FOLDER);
+        LOGD("cp %s to %s failed\n", tmp, BAK_FOLDER);
     }
     else {
-        LOG("%s not exist\n", tmp);
+        LOGD("%s not exist\n", tmp);
     }
 
     //bak目录有tar压缩包,则退出
     snprintf(tmp, sizeof(tmp), "%s/%s", BAK_FOLDER, UPG_TAR_NAME);
     if(file_exist(tmp)) {
-        LOG("%s exist\n", tmp);
+        LOGD("%s exist\n", tmp);
         return 0;
     }
     else {
-        LOG("%s not exist\n", tmp);
+        LOGD("%s not exist\n", tmp);
     }
 
     //bak目录没有tar压缩包,则将run目录打包存进bak目录
-    LOG("tar %s to %s/%s\n", RUN_FOLDER, BAK_FOLDER, UPG_TAR_NAME);
+    LOGD("tar %s to %s/%s\n", RUN_FOLDER, BAK_FOLDER, UPG_TAR_NAME);
     snprintf(cmd, sizeof(cmd), "tar -czpPf %s/%s %s > /dev/null 2>&1", BAK_FOLDER, UPG_TAR_NAME, RUN_FOLDER);
     r = system(cmd);
     if(r) {
-        LOG("%s failed, %d\n", cmd, r);
+        LOGE("%s failed, %d\n", cmd, r);
         return -1;
     }
 
@@ -358,7 +360,7 @@ static int file_restore(void)
     snprintf(cmd, sizeof(cmd), "tar -xpf %s/%s -C / > /dev/null 2>&1", DOWN_FOLDER, UPG_TAR_NAME);
     r = system(cmd);
     if(r) {
-        LOG("%s failed, %d\n", cmd, r);
+        LOGE("%s failed, %d\n", cmd, r);
         return -1;
     }
 
@@ -376,11 +378,11 @@ static void print_md5(char *s, md5_t *m)
 {
     int i;
     
-    LOG("__%s", s);
+    LOGD("__%s", s);
     for(i=0; i<32; i++) {
-        LOG("%c", m->data[i]);
+        LOGD("%c", m->data[i]);
     }
-    LOG("\n");
+    LOGD("\n");
 }
 
 //md5相同返回0,否则返回1
@@ -416,19 +418,19 @@ static int file_split(void)
     snprintf(path, sizeof(path), "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
     flen = file_length(path);
     if(flen<=0) {
-        LOG("file_length %s failed\n", path);
+        LOGE("file_length %s failed\n", path);
         return -1;
     }
     
     fbuf = (char*)malloc(flen);
     if(!fbuf) {
-        LOG("malloc %d failed\n", flen);
+        LOGE("malloc %d failed\n", flen);
         return -1;
     }
     
     r = file_load(path, fbuf, flen);
     if(r) {
-        LOG("%s load failed\n", path);
+        LOGE("%s load failed\n", path);
         return -1;
     }
     upgrade_file_t *hfile = (upgrade_file_t*)fbuf;
@@ -436,21 +438,21 @@ static int file_split(void)
     snprintf(path, sizeof(path), "%s/%s", DOWN_FOLDER, UPG_HDR_NAME);
     r = file_save(path, hfile, sizeof(upgrade_file_t));
     if(r) {
-        LOG("file_save %s failed\n", path);
+        LOGE("file_save %s failed\n", path);
         return -1;
     }
 
     snprintf(path, sizeof(path), "%s/%s", DOWN_FOLDER, UPG_TAR_NAME);
     r = file_save(path, hfile->data, hfile->dlen);
     if(r) {
-        LOG("file_save %s failed\n", path);
+        LOGE("file_save %s failed\n", path);
         return -1;
     }
 
     snprintf(path, sizeof(path), "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
     r = file_remove(path);
     if(r) {
-        LOG("file_remove %s failed\n", path);
+        LOGE("file_remove %s failed\n", path);
         return -1;
     }
 
@@ -465,19 +467,19 @@ static int file_check(char *path)
 
     flen = file_length(path);
     if(flen<=0) {
-        LOG("file_length %s failed\n", path);
+        LOGE("file_length %s failed\n", path);
         return -1;
     }
     
     fbuf = (char*)malloc(flen);
     if(!fbuf) {
-        LOG("malloc %d failed\n", flen);
+        LOGE("malloc %d failed\n", flen);
         return -1;
     }
     
     r = file_load(path, fbuf, flen);
     if(r) {
-        LOG("%s load failed\n", path);
+        LOGE("%s load failed\n", path);
         return -1;
     }
 
@@ -485,17 +487,17 @@ static int file_check(char *path)
     if(hfile->magic!=UPG_FILE_MAGIC ||
        hfile->dlen!=flen-sizeof(upgrade_file_t)-sizeof(md5_t)) {
         r = -1;
-        LOG("magic: 0x%08x, should be: 0x%08x\n", hfile->magic, UPG_FILE_MAGIC);
-        LOG("num:  %d, should < %d\n", hfile->obj.num,  UPGRADE_NUM_MAX);
-        LOG("stra: %d, should < %d\n", hfile->obj.stra, UPGRADE_STRA_MAX);
+        LOGE("magic: 0x%08x, should be: 0x%08x\n", hfile->magic, UPG_FILE_MAGIC);
+        LOGE("num:  %d, should < %d\n", hfile->obj.num,  UPGRADE_NUM_MAX);
+        LOGE("stra: %d, should < %d\n", hfile->obj.stra, UPGRADE_STRA_MAX);
         
-        LOG("file hdr check failed\n");
+        LOGE("file hdr check failed\n");
         goto fail;
     }
     
     r = md5_check(hfile);
     if(r) {
-        LOG("md5 check failed\n");
+        LOGE("md5 check failed\n");
         goto fail;
     }
     
@@ -526,15 +528,11 @@ static int file_clear(void)
 //////////////////////////////////////////////////
 static int app_start(void)
 {
-    return system("/etc/init.d/S90PDUApp start");
+    return 0;//system("smartMonitor.sh &");
 }
 static int app_stop(void)
 {
-    return system("/etc/init.d/S90PDUApp stop");
-}
-static int app_restart(void)
-{
-    return system("/etc/init.d/S90PDUApp restart");
+    return 0;//system("killall smartMonitor.sh && /etc/init.d/S90PDUApp stop");
 }
 
 //////////////////////////////////////////////////
@@ -542,36 +540,45 @@ static void* upg_thread(void *arg)
 {
     int r=0;
     int msgid;
-    upgrade_msg_t msg;
+    key_t key;
+    msgbuf_t mb;
     upg_handle_t *h=(upg_handle_t*)arg;
 
-    LOG("upg_thread running\n");
-    msgid = msgget(h->key, 0666| IPC_CREAT);
-    LOG("___ key: %d, msgid: %d\n", h->key, msgid);
+    LOGD("upg_thread running\n");
+    key = ftok(UPG_KEY_PATH, UPG_KEY_SN);
+    if(key<0) {
+        LOGE("ftok %s failed, errno: %d\n", UPG_KEY_PATH, errno);
+        pthread_exit(NULL);
+    }
+
+    msgid = msgget(key, 0666|IPC_CREAT);
+    LOGD("___ key: %d, msgid: %d\n", key, msgid);
+
+    //msgctl(msgid, IPC_RMID, NULL);
 
     while(1) {
-        r = msgrcv(msgid, &msg, sizeof(msg), 1, 0); 
-        if(r<=0) {
+        r = msgrcv(msgid, &mb, sizeof(mb.evt), 0, 0);
+        if(r<0) {
+            LOGE("___msgrcv failed, %d\n", errno);
             continue;
         }
-        LOG("___ msg.evt: 0x%02x\n", msg.evt);
+        LOGD("___ msgrcv evt: 0x%02x\n", mb.evt);
         
-        switch(msg.evt) {
+        switch(mb.evt) {
             case UPGRADE_EVT_APP_RUNNING:
             {
-                LOG("___ smartPDU running!\n");
+                LOGD("___ smartPDU running!\n");
                 h->step = UPGRADE_STEP_SUCCESS;
             }
             break;
 
             case UPGRADE_EVT_UPLOAD_FINISH:
             {
-                LOG("___ upgrade package upload finished!\n");
+                LOGD("___ upgrade package upload finished!\n");
                 h->step = UPGRADE_STEP_DOWN;
                 file_touch(UPGRADE_STEP_DOWN);
             }
             break;
-
         }
     }
 
@@ -579,19 +586,12 @@ static void* upg_thread(void *arg)
 }
 static int upg_init(upg_handle_t *h)
 {
-    int id,r;
-    char tmp[200];
-    key_t key;
+    int r;
 
     folder_init();
-        
-    key = ftok(UPG_KEY_PATH, UPG_KEY_SN);
-    if(key<0) {
-        LOG("ftok %s failed, errno: %d\n", UPG_KEY_PATH, errno);
-    }
+    
 	h->src  = UPGRADE_SRC_NONE;
     h->stat = UPGRADE_STAT_NONE;
-    h->key  = key;
 
     return pthread_create(&h->tid, NULL, upg_thread, h);
 }
@@ -604,12 +604,12 @@ static int upg_check(upg_handle_t *h)
         snprintf(tmp, sizeof(tmp), "%s/s%d", UPG_FOLDER, i);
         r = file_exist(tmp);
         if(r) {
-            LOG("%s exist\n", tmp);
+            LOGD("%s exist\n", tmp);
             //重启后如果是覆盖完成,则将进度置为SUCCESS
             h->step = i+1;
             break;
         }
-        LOG("%s not exist\n", tmp);
+        LOGD("%s not exist\n", tmp);
     }
 
     return r;
@@ -619,12 +619,12 @@ static int upg_handle(upg_handle_t *h)
     int r=-1;
     char tmp[200];
 
-    LOG("___h->step: %d\n", h->step);
+    LOGD("___h->step: %d\n", h->step);
     while(h->step!=UPGRADE_STEP_NONE) {
         switch(h->step) {
             case UPGRADE_STEP_DOWN:
             {
-                LOG("___ UPGRADE_STEP_DOWN\n");
+                LOGD("___ UPGRADE_STEP_DOWN\n");
 
                 //先检查下载目录是否存在pdupkg文件
                 snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
@@ -633,11 +633,11 @@ static int upg_handle(upg_handle_t *h)
                     h->step = UPGRADE_STEP_SPLIT;
                 }
                 else {
-                    LOG("___ %s not exist, ", tmp);
+                    LOGD("___ %s not exist, ", tmp);
 
                     //下载目录不存在pdupkg文件,则继续检查是否存在pdutar文件
                     snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_TAR_NAME);
-                    LOG("read %s\n", tmp);
+                    LOGD("read %s\n", tmp);
                     
                     if(file_exist(tmp)) {
                         file_touch(UPGRADE_STEP_DOWN);
@@ -653,7 +653,7 @@ static int upg_handle(upg_handle_t *h)
 
             case UPGRADE_STEP_SPLIT:
             {
-                LOG("___ UPGRADE_STEP_SPLIT\n");
+                LOGD("___ UPGRADE_STEP_SPLIT\n");
 
                 snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_PKG_NAME);
                 r = file_check(tmp);
@@ -678,7 +678,7 @@ static int upg_handle(upg_handle_t *h)
 
             case UPGRADE_STEP_COVER:
             {
-                LOG("___ UPGRADE_STEP_COVER\n");
+                LOGD("___ UPGRADE_STEP_COVER\n");
                 app_stop();
 
                 snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_TAR_NAME);
@@ -689,7 +689,7 @@ static int upg_handle(upg_handle_t *h)
                     app_start();
                 }
                 else {
-                    LOG("file_cover, delete %s!\n", tmp);
+                    LOGD("file_cover, delete %s!\n", tmp);
                     file_remove(tmp);
                     snprintf(tmp, sizeof(tmp), "%s/%s", DOWN_FOLDER, UPG_HDR_NAME);
                     file_remove(tmp);
@@ -707,14 +707,14 @@ static int upg_handle(upg_handle_t *h)
 
             case UPGRADE_STEP_FINISH:
             {
-                LOG("___ UPGRADE_STEP_FINISH\n");
+                LOGD("___ UPGRADE_STEP_FINISH\n");
                 h->step = UPGRADE_STEP_NONE;
             }
             break;
 
             case UPGRADE_STEP_SUCCESS:
             {
-                LOG("___ UPGRADE_STEP_SUCCESS\n");
+                LOGD("___ UPGRADE_STEP_SUCCESS\n");
 
                 h->step = UPGRADE_STEP_NONE;
                 
@@ -727,7 +727,7 @@ static int upg_handle(upg_handle_t *h)
             break;
 
             default:
-            LOG("___ wrong step: %d\n", h->step);
+            LOGD("___ wrong step: %d\n", h->step);
             r = 1;
             break;
         }
@@ -741,7 +741,7 @@ int main(void)
     int id,r=0;
     upg_handle_t *h=&upgHandle;
 
-    LOG("___ upgd running ...\n");
+    LOGD("___upgrade running ...\n");
     
     upg_init(h);
     upg_check(h);

+ 5 - 1
pro/upgrade/upgrade.h

@@ -85,7 +85,6 @@ enum {  //升级进度step
 #pragma pack(1)
 
 typedef struct {    //升级目标数据结构
-    uint32_t        type;
     uint32_t        evt;					//upgrade_evt
     uint32_t        flag;					//reserved
 }upgrade_msg_t;
@@ -119,5 +118,10 @@ typedef struct {
 }upgrade_file_t;
 #pragma pack()
 
+typedef struct {
+    long         	type;
+    uint32_t        evt;
+}msgbuf_t;
+
 
 #endif