diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
index 9baced7..e0dcafd 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
@@ -28,14 +28,15 @@
 #include "include/lynq-qser-fota.h"
 #include "liblog/lynq_deflog.h"
 
+#define FOTA_FLAG_FILE "/mnt/userdata/.back_up_flag"
 
-#define USER_LOG_TAG "LYNQ_FOTA"
-
+#define USER_LOG_TAG    "LYNQ_FOTA"
+#define FOTA_ADDR_FILE  "/mnt/userdata/.addr_value"
+#define FOTA_FILE_NAME  "upgrade.package"
 
 #define  SYSTEM_A  "34650"
 #define  SYSTEM_B  "39019"
 
-char path[] = {0};
 
 #define BOOTABLE   "45227"
 #define UNBOOTABLE "47806"
@@ -49,7 +50,6 @@
 #define    LYNQ_UPGRADE_STATUS_UPDATE_FAIL         (5)
 
 
-
 typedef struct
 {
     int system;
@@ -121,7 +121,17 @@
     
     int ret = 0;
     int current_slot = 0;
-
+    int fota_sync_flag = 0;
+    FILE *fp = NULL;
+    fp = fopen(FOTA_FLAG_FILE,"w+");
+    if(fp == NULL)
+    {
+        LYINFLOG("Creat fota flag file failed");
+        return -1;
+    }
+    fwrite(&fota_sync_flag,sizeof(int),1,fp);
+    fclose(fp);
+    
     ret = lynq_fota_verify();
     if(ret != 0)
     {
@@ -209,7 +219,18 @@
         }
 
     }
-
+    
+    fp = fopen(FOTA_FLAG_FILE,"w+");
+    if(fp == NULL)
+    {
+        LYINFLOG("Creat fota flag file failed");
+        return -1;
+    }
+    
+    fota_sync_flag = 1;
+    fwrite(&fota_sync_flag,sizeof(int),1,fp);
+    fclose(fp);
+    
     if(reboot_flag == 1)
     {
         LYINFLOG("Enter reboot device");
@@ -251,7 +272,7 @@
 int lynq_fota_set_addr_value(char        *value,int size)
 {
     int ret =0;
-    
+    FILE *fp = NULL;    
     LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);
     
@@ -267,10 +288,62 @@
         return -1;
     }
     
+    fp = fopen(FOTA_ADDR_FILE,"w+");
+    if(fp == NULL)
+    {
+        LYINFLOG("Open addr file failed");
+        return -1;
+    }
+    
+    fprintf(fp,"%s",value);
+    fclose(fp);
+
     LYINFLOG("Configure upgrade package path success");
     return 0;
 }
 
+/*****************************************
+* @brief:lynq_fota_get_addr_value
+* @param count [IN]:char  *tmp_value
+* @param sum [OUT]:
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+int lynq_fota_get_addr_value(char *tmp_value)
+{
+    FILE *fp = NULL;
+    char tmp_addr[128] = {0};
+
+ 
+    fp = fopen(FOTA_ADDR_FILE,"r");
+    if(fp == NULL)
+    {
+        LYINFLOG("Open fota addr faile failed!!!");
+        return -1;
+    }
+    while(fgets(tmp_addr,sizeof(tmp_addr),fp) != NULL)
+    {
+        if( strstr(tmp_addr,FOTA_FILE_NAME) != NULL)
+        {
+            strncpy(tmp_value,tmp_addr,sizeof(tmp_addr) - 1);
+            break;
+        }
+        else
+        {
+            LYINFLOG("Get addr failed\n");
+            fclose(fp);
+            return -1;
+        }
+    }
+
+    fclose(fp);
+    return 0;
+        
+
+}
+
 
 /*****************************************
 * @brief:lynq_fota_verify
@@ -740,4 +813,3 @@
 #ifdef __cplusplus
 }
 #endif
-
