Преглед на файлове

Merge branch 'dev' of https://gogs.storlead.com/lusa/gd32450i-eval into dev
merger

lusa преди 5 години
родител
ревизия
44ad4ac26b

+ 2 - 2
app/UpdateFirmware/main.c

@@ -74,8 +74,8 @@ int main()
 
 	//Verify
 	printf("Verigy successful.\n");
-	//用来保存更新的进度
-	fprogress = fopen("/var/www/goahead/tmp/UpdateProgress.log", "w");
+	//用来保存校验结果
+	fprogress = fopen("/var/www/goahead/tmp/Verify.log", "w");
 	if(NULL == fp)
 	{
 		printf("Create UpdateProgress.log file fail!\n");

BIN
app/UpdateFirmware/updateFW_app


+ 1 - 0
app/goahead-3.6.5/src/goahead.c

@@ -206,6 +206,7 @@ websDefineAction("prepareDevice", prepareDevice);
 websDefineAction("uploadFirmware", uploadFirmware);
 websDefineAction("updateFlash", updateFlash);
 websDefineAction("getUpdateProgress", getUpdateProgress);
+websDefineAction("getVerifyStatus", getVerifyStatus);
 websDefineAction("resetBmc", resetBmc);
 /**************** user code after goahead end************************/
 

+ 4 - 2
app/goahead-3.6.5/src/web_interface/inc/fw_update.h

@@ -4,9 +4,10 @@
 2、	调用uploadFireware(wp), 开始上传固件到/var/www/goahead/tmp/tmp.uImage
 3、	调用updateFlash(wp), updateFlash会新建一个进程来将tmp.uImage写到Flash里面去。
 4、	循环调用getUpdateProgre(wp),来获取Flash的更新进度,返回百分比。
-5、  等到getUpdateProgress(wp)返回100%时,调用resetBmc(wp),复位BMC让新固件生效
-
+5、	循环调用getVerifyStatus(wp), 当返回Verifying时表示真正校验,当返回Verify OK或Verify Error时表示校验结束
+6、	当校验结束且返回Verify OK时才能调用resetBmc(wp)。如果校验出错,请提醒用户在不掉电的情况下重新更新固件,一定不能调用resetBmc(wp)。
 
+	警告: 固件更新失败,请重新更新,请勿掉电!
 */
 
 #ifndef __FW_UPDATE_H__
@@ -18,6 +19,7 @@ void prepareDevice(Webs *wp);
 void uploadFirmware(Webs *wp);
 void updateFlash(Webs *wp);
 void getUpdateProgress(Webs *wp);
+void getVerifyStatus(Webs *wp);
 void resetBmc(Webs *wp);
 
 #endif /* __FW_UPDATE_H__ */

+ 53 - 0
app/goahead-3.6.5/src/web_interface/src/fw_update.c

@@ -184,6 +184,59 @@ void getUpdateProgress(Webs *wp)
 }
 
 
+/*
+    获取Flash的校验结果
+    返回:Verifying 正在校验
+    返回:Verify OK 校验通过
+    返回:Verify Error 校验失败
+*/
+void getVerifyStatus(Webs *wp)
+{
+    uint8_t verigyStr[13] = {0};
+    FILE *fp;
+
+    //TODO:
+    fp = fopen("/var/www/goahead/tmp/Verify.log", "r");
+    if(NULL == fp)
+    {
+        printf("Open Verify.log failed!\n");
+        websError(wp, 200, "Open Verify.log failed!");
+        return;
+    }
+
+    if(NULL == fgets(verigyStr, 13, fp))
+    {
+        printf("Read Verify.log failed!\n");
+        websError(wp, 200, "Read Verify.log failed!");
+        fclose(fp);
+        return;
+    }
+    
+    printf("Update Firmware: %s\n", verigyStr);
+
+
+    char *pStr;
+    cJSON * root =  cJSON_CreateObject();
+    cJSON_AddStringToObject(root, "verify", verigyStr);
+    cJSON_AddNumberToObject(root, "code", 200);
+    
+
+    pStr = cJSON_PrintUnformatted(root);
+
+    websSetStatus(wp, 200);
+    websWriteHeaders(wp, -1, 0);
+    //websWriteHeader(wp, "getUpdateProgress");
+    websWriteEndHeaders(wp);
+    websWrite(wp, "%s", pStr);
+    websFlush(wp, 0);
+    websDone(wp);
+
+    if(pStr)
+        wfree(pStr);
+    if(root)
+        cJSON_Delete(root);
+}
+
 void resetBmc(Webs *wp)
 {
 #define DEV_NAME "/dev/platform"

+ 1 - 1
local/rc

@@ -35,6 +35,6 @@ mknod /dev/gpio c 103 0
 ################### run app ####################
 #/bin/telnetd
 /usr/bin/bmc_app & 
-sleep 3
+#sleep 3
 #/usr/bin/test_app 
 /usr/bin/goahead-3.6.5 -v --home /etc/goahead &