[Bugfix][API-822]lynq_fota_nrestart return -2

Change-Id: Ifb6ba1fbbf1ceb0a376cfa66197621fc51ea9681
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-fota/liblynq-fota.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-fota/liblynq-fota.bb
index b46e947..85ccbee 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-fota/liblynq-fota.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-fota/liblynq-fota.bb
@@ -6,7 +6,7 @@
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
 
-DEPENDS += "bootctrl nandapi liblynq-protcl liblynq-log liblynq-uci"
+DEPENDS += "bootctrl nandapi liblynq-protcl liblynq-log"
 
 inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-fota"
@@ -64,4 +64,4 @@
 addtask bachclean
 do_bachclean () {
     oe_runmake clean
-}
\ No newline at end of file
+}
diff --git a/src/lynq/lib/liblynq-fota/makefile b/src/lynq/lib/liblynq-fota/makefile
index 75b3e6e..26db17f 100755
--- a/src/lynq/lib/liblynq-fota/makefile
+++ b/src/lynq/lib/liblynq-fota/makefile
@@ -50,7 +50,6 @@
     -lbootctrl  \
     -llynq-log \
     -llynq-protcl \
-    -llynq-uci \
 
 SOURCES = $(wildcard *.c wildcard *.h rock_ua/*.c  MD5/*c)
 
@@ -85,4 +84,4 @@
 	$(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
 .PHONY: clean
 clean:
-	$(RM) $(OBJECTS) $(EXECUTABLE)
\ No newline at end of file
+	$(RM) $(OBJECTS) $(EXECUTABLE)
diff --git a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
index ead63c0..cd07981 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -5,7 +5,6 @@
 
 #ifdef ROCK_FOTA_SUPPORT
 
-
 #include "iot_rock.h"
 #include "iot_rock_ipl.h"
 #include "sha.h"
@@ -37,9 +36,7 @@
 
 #define LOG_TAG "LYNQ_FOTA"
 #define ROCK_BACKUP_LEN ROCK_DEFAULT_BLOCK_SIZE
-#ifdef GSW_FOTA_CFG
 #define READ_BLOCK_SIZE 0x40000
-#endif
 
 
 #define DEV_SYSTEM_A    "/dev/disk/by-partlabel/system_a"
@@ -54,18 +51,19 @@
 #define DEV_TEE_B       "/dev/disk/by-partlabel/tee_b" 
 
 #define DEV_MD1DSP_A       "/dev/disk/by-partlabel/md1dsp_a"
-#define DEV_MD1DSP_B       "/dev/disk/by-partlabel/md1dsp_b" 
+#define DEV_MD1DSP_B       "/dev/disk/by-partlabel/md1dsp_b"
 
 #define DEV_VBMETA_A       "/dev/disk/by-partlabel/vbmeta_a"
 #define DEV_VBMETA_B       "/dev/disk/by-partlabel/vbmeta_b" 
 
 #ifdef GSW_FOTA_CFG
 #define DEV_OEMAPP_A       "/dev/disk/by-partlabel/oemapp_a"
-#define DEV_OEMAPP_B       "/dev/disk/by-partlabel/oemapp_b" 
+#define DEV_OEMAPP_B       "/dev/disk/by-partlabel/oemapp_b"
 
 #define DEV_OEMAPP2_A       "/dev/disk/by-partlabel/oemapp2_a"
-#define DEV_OEMAPP2_B       "/dev/disk/by-partlabel/oemapp2_b" 
-#endif 
+#define DEV_OEMAPP2_B       "/dev/disk/by-partlabel/oemapp2_b"
+#endif
+
 #define DEV_BL2         "/dev/disk/by-partlabel/bl2"
 #define DEV_BL33        "/dev/disk/by-partlabel/bl33"
 
@@ -117,30 +115,27 @@
 
 OTA_STATUS  fota_status;
 
-#ifdef MOBILETEK_FOTA_CFG
 UPDATE_INFO up_info;
-#endif
+
 
 extern const hw_module_t HAL_MODULE_INFO_SYM;
 boot_control_module_t* module;
 
 static void lynq_init_wake_lock_func(void);
-static void lynq_fota_grab_artial_wake_lock(void);
+static void lynq_fota_acquire_wake_lock(void);
 static void lynq_fota_release_wake_lock(void);
-
-#ifdef MOBILETEK_FOTA_CFG
 int matchString(char* buf, char* sub);
 int reset_fota_flag(void);
 int get_fota_flag(void);
 void check_ril_service(void);
-#endif
 
-int rock_mismatch(void* ctx, unsigned char* buf, unsigned int start, unsigned int size, 
-					        unsigned int source_hash,unsigned int target_hash) {
 
-	  return 0;
+int rock_mismatch(void* ctx, unsigned char* buf, unsigned int start, unsigned int size,
+                    unsigned int source_hash,unsigned int target_hash) {
+
+      return 0;
 }
-							
+
 int rock_fatal(void* ctx, int error_code) {
     return 0;
 }
@@ -151,7 +146,7 @@
     memset(rock_debug_buffer,0x0,sizeof(rock_debug_buffer));
     va_start (ap, fmt);
     vsnprintf(rock_debug_buffer,sizeof(rock_debug_buffer),fmt,ap);
-    LYDBGLOG("+[UA]: %s",rock_debug_buffer);
+    RLOGD("+[UA]: %s",rock_debug_buffer);
     va_end (ap);
 
 }
@@ -350,36 +345,7 @@
 /* ROCK IPL end */
 
 
-#ifdef GSW_FOTA_CFG
-static int init_dev_fd()
-{
 
-    int err;
-    char lynq_fota_addr[64] = {0};
-    if(0 != lynq_fota_get_addr_value(lynq_fota_addr))
-    {
-        return E_ROCK_FOTA_ADDR;
-    }
-    RLOGD("+[UA]: get fota pack addr: %s\n", lynq_fota_addr);
-    fd_delta = open(lynq_fota_addr,O_RDWR);
-
-    if (fd_delta < 0) {
-        err = errno;
-        RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-        return -err;
-    }
-
-    fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
-    if (fd_update_status < 0) {
-        err = errno;
-        RLOGD("+[UA]: Error opening fd_delta file: %s\n",strerror(errno));
-        return -err;
-    }
-
-    return 0;
-}
-#endif
-#ifdef MOBILETEK_FOTA_CFG
 static int init_dev_fd()
 {
 
@@ -414,11 +380,7 @@
     get_fota_flag();
     return 0;
 }
-#endif
 
-
-
-#ifdef MOBILETEK_FOTA_CFG
 static int reboot_device()
 {
     sleep(5);
@@ -426,21 +388,6 @@
     sleep(5);
     system("reboot");
 }
-#endif
-#ifdef GSW_FOTA_CFG
-static int close_dev_fd(int fd)
-{
-    close(fd);
-}
-
-
-static int reboot_device() {
-	
-  reboot(RB_AUTOBOOT);
-  
-  while (1) pause();
-}
-#endif
 
 
 
@@ -463,9 +410,7 @@
         RLOGD("+[UA]: open target  error\n");
         return 1;
     }
-#ifdef MOBILETEK_FOTA_CFG
     system("flash_eraseall /dev/mtd41");
-#endif
     while(( size = read(fd_source,delta_data,ROCK_DEFAULT_BLOCK_SIZE))>0) {
            mtk_device_wrap_write(fd_target,delta_data,ROCK_DEFAULT_BLOCK_SIZE);
     }
@@ -501,7 +446,7 @@
 	while(( size = mtk_device_wrap_read(fd_source,delta_data,ROCK_DEFAULT_BLOCK_SIZE))>0) {
     	   mtk_device_wrap_write(fd_target,delta_data,ROCK_DEFAULT_BLOCK_SIZE);
     }
-	
+
 	mtk_device_wrap_close(fd_target);
 	mtk_device_wrap_close(fd_source);
 	return 0;
@@ -509,23 +454,23 @@
 
 int delta_copyto_nand(unsigned int start,int size)
 {
- 
+
     char delta_data[NAND_PAGE_SIZE];
-	unsigned int ret = 0;
-	int err;
+    unsigned int ret = 0;
+    int err;
 
 
-	if (lseek(fd_delta, start, SEEK_SET) < 0) {
-        LYERRLOG("+[UA]: delta_copyto_nand seek err\n");
-		return -1;
+    if (lseek(fd_delta, start, SEEK_SET) < 0) {
+        RLOGD("+[UA]: delta_copyto_nand seek err\n");
+        return -1;
     }
- 
- 	if (mtk_device_wrap_seek(fd_curr, 0, SEEK_SET) < 0) {
-        LYERRLOG("+[UA]: delta_copyto_nand seek err\n");
-		return -1;
+
+    if (mtk_device_wrap_seek(fd_curr, 0, SEEK_SET) < 0) {
+        RLOGD("+[UA]: delta_copyto_nand seek err\n");
+        return -1;
     }
- 
- 
+
+
     do {
         memset(delta_data,0,NAND_PAGE_SIZE);
         ret = read(fd_delta, delta_data, NAND_PAGE_SIZE);
@@ -540,23 +485,20 @@
 
             return err;
         }
-  
-        size -= NAND_PAGE_SIZE;
-		mtk_device_wrap_write(fd_curr,delta_data,NAND_PAGE_SIZE);
-		//mtk_device_wrap_write(fd_curr,delta_data,ret);
 
+        size -= NAND_PAGE_SIZE;
+        mtk_device_wrap_write(fd_curr,delta_data,NAND_PAGE_SIZE);
+        //mtk_device_wrap_write(fd_curr,delta_data,ret);
     } while(size > 0);
-  
- 
- return 0;
- 
+    return 0;
+
 }
 
 
 unsigned char ram_buffer[ROCK_RAM_LEN];
 
-#ifdef MOBILETEK_FOTA_CFG
-static int rock_update_main(unsigned int rom_base,  unsigned int backup_base, unsigned int backup_len, int read_rom_directly, int first_run) {
+
+static int rock_update_main(unsigned int rom_base,  unsigned int backup_base, unsigned int backup_len, int read_rom_directly, int first_run, int reboot_flag) {
     int status,err;
     int ret = 0;
     int i = 0;
@@ -594,13 +536,13 @@
     }
 
     lynq_init_wake_lock_func();
-    lynq_fota_grab_artial_wake_lock();
-     /*************    Bootctrl Init  End  *************/
+    lynq_fota_acquire_wake_lock();
+    /*************    Bootctrl Init  End  *************/
 
     current_slot = module->getCurrentSlot(module);
-    
+
     int is_successful = module->isSlotMarkedSuccessful(module, current_slot);
-  
+
     RLOGD("+[UA]: Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
 
 
@@ -657,11 +599,17 @@
     memset(&da_head, 0, sizeof(da_head));
     read(fd_delta, (unsigned char*)&da_head, sizeof(da_head));
 
-
+#ifdef MOBILETEK_FOTA_CFG
     rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.bl33);
     rock_trace(&ctx, "da_head.fullsys:%d,da_head.fullboot:%d,da_head.fulltee:%d,da_head.fullmd1img=%d,da_head.fullmd1dsp=%d,da_head.fullvbmeta=%d,da_head.fullbl33=%d\n", da_head.full_sys, da_head.full_boot,da_head.full_tee, da_head.full_md1img,da_head.full_md1dsp,da_head.full_vbmeta,da_head.full_bl33);
+#endif
 
-    
+#ifdef GSW_FOTA_CFG
+    rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.oemapp=%d,da_head.oemapp2=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.oemapp,da_head.oemapp2,da_head.bl33);
+    rock_trace(&ctx, "da_head.fullsys:%d,da_head.fullboot:%d,da_head.fulltee:%d,da_head.fullmd1img=%d,da_head.fullmd1dsp=%d,da_head.fullvbmeta=%d,da_head.full_oemapp=%d,da_head.full_oemapp2=%d,da_head.fullbl33=%d\n", da_head.full_sys, da_head.full_boot,da_head.full_tee, da_head.full_md1img,da_head.full_md1dsp,da_head.full_vbmeta,da_head.full_oemapp,da_head.full_oemapp2,da_head.full_bl33);
+#endif
+
+
     if (da_head.sys>0) {
 	    fota_status.update_status[PATCH_SYSTEM - 1].need_update = 1;
 	}
@@ -680,10 +628,20 @@
 	if (da_head.vbmeta>0) {
 		fota_status.update_status[PATCH_VBMETA - 1].need_update = 1;
 	}
+#ifdef GSW_FOTA_CFG
+    if (da_head.oemapp>0)
+    {
+        fota_status.update_status[PATCH_OEMAPP - 1].need_update = 1;
+    }
+    if (da_head.oemapp2>0)
+    {
+        fota_status.update_status[PATCH_OEMAPP2 - 1].need_update = 1;
+    }
+#endif
 	if (da_head.bl33>0) {
 		fota_status.update_status[PATCH_BL33 - 1].need_update = 1;
 	}
-	
+
 	if (da_head.full_sys>0) {
 		fota_status.update_status[FULL_SYSTEM - 1].need_update = 1;
 	}
@@ -705,11 +663,21 @@
 	if (da_head.full_vbmeta>0) {
 		fota_status.update_status[FULL_VBMETA - 1].need_update = 1;
 	}
+#ifdef GSW_FOTA_CFG
+    if (da_head.full_oemapp>0)
+    {
+        fota_status.update_status[FULL_OEMAPP - 1].need_update = 1;
+    }
+    if (da_head.full_oemapp2>0)
+    {
+        fota_status.update_status[FULL_OEMAPP2 - 1].need_update = 1;
+    }
+#endif
 	fota_status.switch_slot = WAIT;
 	save_fota_status();
 
     delta_size = da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.bl33;
-	
+
 
     if ((da_head.sys>0) && (up_info.ota_run <= PATCH_SYSTEM))
 	{
@@ -1465,9 +1433,226 @@
         mtk_device_wrap_close(fd_read);
 		mtk_device_wrap_close(fd_write);
 
+    }
+#ifdef GSW_FOTA_CFG
+if ((da_head.oemapp>0) && (up_info.ota_run <= PATCH_OEMAPP))
+    {
+        now_patch = PATCH_OEMAPP;
+        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta;
+
+        if (up_info.ota_run == PATCH_OEMAPP) 
+        {
+            ctx.first_run = 0;
+        }
+        else
+        {
+            ctx.first_run = 1;
+        }
+
+        if(current_slot==SLOT_B) {
+        system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
+        }
+        else
+        {
+        system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
+        }
+        fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
+        if (fd_oemapp_a < 0)
+        {
+                err = errno;
+                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+                lynq_fota_release_wake_lock();
+                return -err;
+        }
+
+        fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
+        if (fd_oemapp_b < 0)
+        {
+            err = errno;
+            RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+            lynq_fota_release_wake_lock();
+            return -err;
+        }
+
+        if(current_slot==SLOT_B)
+        {
+            fd_read  = fd_oemapp_b;
+            fd_write = fd_oemapp_a;
+        }
+        else
+        {
+            fd_read  = fd_oemapp_a;
+            fd_write = fd_oemapp_b;
+        }
+
+
+        fota_status.ota_run = PATCH_OEMAPP;
+        fota_status.update_status[PATCH_OEMAPP-1].check_delta = WAIT;
+        fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
+        fota_status.update_status[PATCH_OEMAPP-1].update_result= WAIT;
+
+        save_fota_status();
+
+        up_info.ota_run = PATCH_OEMAPP;
+
+        lseek(fd_update_status,0,SEEK_SET);
+        write(fd_update_status, &up_info,sizeof(up_info));
+        sync();
+
+        RLOGD("+[UA]: Start upgrading oemapp.\n");
+        status = iot_patch(&ctx);
+        RLOGD("+[UA]: oemapp upgrade result:%d\n",status);
+
+        up_info.ota_run = 0;
+        //fota_status.ota_run = 0;
+        fota_status.update_status[PATCH_OEMAPP-1].update_result= status;
+        fota_status.update_result= status;
+
+        if((status == 0)||(status ==1))
+        {
+            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
+            fota_status.update_status[PATCH_OEMAPP-1].check_rom = PASS;
+        }else if(status == E_ROCK_INVALID_DELTA) {
+            fota_status.update_status[PATCH_OEMAPP-1].check_delta = ERROR;
+            fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
+        }else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
+            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
+            fota_status.update_status[PATCH_OEMAPP-1].check_rom = ERROR;
+        }else{
+            //fota_status.update_status[PATCH_OEMAPP -1].check_delta = PASS;
+            //fota_status.update_status[PATCH_OEMAPP -1].check_rom = WAIT;
+        }
+
+        save_fota_status();
+
+        if ((status != 0) &&(status != 1))
+        {
+            up_info.fota_flag[0] = 'e';
+            up_info.fota_flag[1] = 'n';
+            up_info.fota_flag[2] = 'd';
+            up_info.update_result = status;
+            up_info.ota_run = 0;
+            lseek(fd_update_status,0,SEEK_SET);
+            write(fd_update_status, &up_info,sizeof(up_info));
+            sync();
+            close(fd_update_status);
+            mtk_device_wrap_close(fd_read);
+            mtk_device_wrap_close(fd_write);
+            lynq_fota_release_wake_lock();
+            return status;
+        }
+        mtk_device_wrap_close(fd_read);
+        mtk_device_wrap_close(fd_write);
 
     }
 
+    if ((da_head.oemapp2>0) && (up_info.ota_run <= PATCH_OEMAPP2))
+    {
+
+        now_patch = PATCH_OEMAPP2;
+        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp;
+
+        if (up_info.ota_run == PATCH_OEMAPP2) 
+        {
+            ctx.first_run = 0;
+        }
+        else
+        {
+            ctx.first_run = 1;
+        }
+
+        if(current_slot==SLOT_B)
+        {
+            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
+        }
+        else
+        {
+            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
+        }
+
+        fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
+        if (fd_oemapp2_a < 0)
+        {
+            err = errno;
+            RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+            lynq_fota_release_wake_lock();
+            return -err;
+        }
+
+        fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
+        if (fd_oemapp2_b < 0)
+        {
+            err = errno;
+            RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+            lynq_fota_release_wake_lock();
+            return -err;
+        }
+
+        if(current_slot==SLOT_B)
+        {
+            fd_read  = fd_oemapp2_b;
+            fd_write = fd_oemapp2_a;
+        }
+        else
+        {
+            fd_read  = fd_oemapp2_a;
+            fd_write = fd_oemapp2_b;
+        }
+
+        fota_status.ota_run = PATCH_OEMAPP2;
+        fota_status.update_status[PATCH_OEMAPP2-1].check_delta = WAIT;
+        fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
+        fota_status.update_status[PATCH_OEMAPP2-1].update_result= WAIT;
+
+        save_fota_status();
+        up_info.ota_run = PATCH_OEMAPP2;
+        lseek(fd_update_status,0,SEEK_SET);
+        write(fd_update_status, &up_info,sizeof(up_info));
+        sync();
+        RLOGD("+[UA]: Start upgrading oemapp2.\n");
+        status = iot_patch(&ctx);
+        RLOGD("+[UA]: oemapp2 upgrade result:%d\n",status);
+
+        up_info.ota_run = 0;
+        fota_status.update_status[PATCH_OEMAPP2-1].update_result= status;
+        fota_status.update_result= status;
+
+        if((status == 0)||(status ==1))
+        {
+            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
+            fota_status.update_status[PATCH_OEMAPP2-1].check_rom = PASS;
+        }else if(status == E_ROCK_INVALID_DELTA) {
+            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = ERROR;
+            fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
+        }else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
+            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
+            fota_status.update_status[PATCH_OEMAPP2-1].check_rom = ERROR;
+        }else{
+            //fota_status.update_status[PATCH_OEMAPP2 -1].check_delta = PASS;
+            //fota_status.update_status[PATCH_OEMAPP2 -1].check_rom = WAIT;
+        }
+
+        save_fota_status();
+        if ((status != 0) &&(status != 1))
+        {
+            up_info.fota_flag[0] = 'e';
+            up_info.fota_flag[1] = 'n';
+            up_info.fota_flag[2] = 'd';
+            up_info.update_result = status;
+            up_info.ota_run = 0;
+            lseek(fd_update_status,0,SEEK_SET);
+            write(fd_update_status, &up_info,sizeof(up_info));
+            sync();
+            close(fd_update_status);
+            mtk_device_wrap_close(fd_read);
+            mtk_device_wrap_close(fd_write);
+            lynq_fota_release_wake_lock();
+            return status;
+        }
+        mtk_device_wrap_close(fd_read);
+        mtk_device_wrap_close(fd_write);
+    }
+#endif
     if ((da_head.bl33>0) && (up_info.ota_run <= PATCH_BL33))
 	{
 
@@ -1723,1860 +1908,6 @@
 	        fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
             if (fd_boot_b < 0) {
                 err = errno;
-                RLOGD("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_boot_b;					
-		}
-		fota_status.ota_run = FULL_BOOT;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading boot full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_boot);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_boot,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_boot,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		
-		RLOGD("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
-		mtk_device_wrap_close(fd_curr);
-		
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_BOOT_B,DEV_BOOT_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_BOOT_A,DEV_BOOT_B);
-			}
-		}
-		
-		
-		RLOGD("+[UA]: boot full upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_BOOT-1].update_result = status;
-		save_fota_status();
-		
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}			
-	
-	}
-	
-	
-	if(da_head.full_tee>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/tee_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/tee_b");
-        }
-        
-		if(current_slot==SLOT_B) {
-	        fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
-            if (fd_tee_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_tee file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_tee_a;
-		}else{
-	        fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
-            if (fd_tee_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_tee file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_tee_b;			
-		}
-		fota_status.ota_run = FULL_TEE;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading tee full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_tee);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_tee,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_tee,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		RLOGD("+[UA]: tee full retry_cnt = %d\n",retry_cnt);		
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_TEE_B,DEV_TEE_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_TEE_A,DEV_TEE_B);
-			}
-		}
-		
-		printf("+[UA] tee full upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_TEE-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}		
-
-	
-	}
-	
-
-	if(da_head.full_md1img>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot + da_head.full_tee;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/md1img_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/md1img_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
-            if (fd_md1img_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_md1img file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1img_a;
-		}else{
-	        fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
-            if (fd_md1img_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_md1img file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1img_b;			
-		}
-		fota_status.ota_run = FULL_MD1IMG;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading md1img full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_md1img);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1img,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_md1img,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-		RLOGD("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_MD1IMG_B,DEV_MD1IMG_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_MD1IMG_A,DEV_MD1IMG_B);
-			}
-		}
-				
-		RLOGD("+[UA]: md1img upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_MD1IMG-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}
-		
-	
-	if(da_head.full_md1dsp>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot + da_head.full_tee + da_head.full_md1img;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/md1dsp_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/md1dsp_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
-            if (fd_md1dsp_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_md1dsp file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1dsp_a;
-		}else{
-	        fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
-            if (fd_md1dsp_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_md1dsp file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1dsp_b;			
-		}
-		fota_status.ota_run = FULL_MD1DSP;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading md1dsp full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_md1dsp);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1dsp,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_md1dsp,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-		RLOGD("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_MD1DSP_B,DEV_MD1DSP_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_MD1DSP_A,DEV_MD1DSP_B);
-			}
-		}
-				
-		RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_MD1DSP-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}
-	
-	
-	if(da_head.full_vbmeta>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/vbmeta_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/vbmeta_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
-            if (fd_vbmeta_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_vbmeta file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_vbmeta_a;
-		}else{
-	        fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
-            if (fd_vbmeta_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_vbmeta file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_vbmeta_b;			
-		}
-		fota_status.ota_run = FULL_VBMETA;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading vbmeta full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_vbmeta);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_vbmeta,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_vbmeta,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-		RLOGD("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_VBMETA_B,DEV_VBMETA_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_VBMETA_A,DEV_VBMETA_B);
-			}
-		}
-				
-		RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_VBMETA-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}	
-	
-	if(da_head.full_bl33>0) {
-		
-	}
-
-
-
-    if(update_mode == MODE_NORMAL)
-    {
-        RLOGD("set fota_flag start\n");
-        if(current_slot == SLOT_A) 
-        {
-            up_info.fota_flag[0] = 'B';
-            up_info.fota_flag[1] = '-';
-            up_info.fota_flag[2] = 'A';
-		}
-        else
-        {
-            up_info.fota_flag[0] = 'A';
-            up_info.fota_flag[1] = '-';
-            up_info.fota_flag[2] = 'B';
-        }
-    }
-    else
-    {
-        up_info.fota_flag[0] = 'e';
-        up_info.fota_flag[1] = 'n';
-        up_info.fota_flag[2] = 'd';
-    }
-    up_info.update_result = status;
-    up_info.ota_run = 0;
-    lseek(fd_update_status,0,SEEK_SET);
-    RLOGD("up_info: fota_flag: %s\n",up_info.fota_flag);
-    write(fd_update_status, &up_info,sizeof(up_info));
-    sync();
-    close(fd_delta);
-    close(fd_update_status);
-    sync();
-
-    slot = (current_slot == 0) ? 1 : 0;
-    RLOGD("+[UA]: slot SLOT = %d\n",slot);
-    if(update_mode==MODE_NORMAL){
-        module->setActiveBootSlot(module,slot);
-        RLOGD("+[UA]:slot %d upgrade is success!!!!\n", slot);
-    }
-    fota_status.ota_run = 0;
-    fota_status.switch_slot = PASS;
-    fota_status.update_result = status;
-    save_fota_status();
-    lynq_fota_release_wake_lock();
-
-    if(update_mode==MODE_NORMAL)
-    {
-        reboot_device();
-    }
-
-    return status;
-}
-#endif
-#ifdef GSW_FOTA_CFG
-static int rock_update_main(unsigned int rom_base,  unsigned int backup_base, unsigned int backup_len, int read_rom_directly, int first_run, int switch_slot_flag) {
-	int status,err,start;
-    int ret = 0;
-	int i = 0;
-	int retry_cnt = 0;
-	
-	IOT_UPDATA_CONTEXT ctx;
-	UPDATE_INFO up_info;
-	//OTA_STATUS  fota_status;
-
-
-    const hw_module_t* hw_module;
-    unsigned int  slot;
-
-	unsigned int  update_mode = MODE_NORMAL;
-	unsigned int  delta_size;
-    unsigned char full_header[9];
-	
-	char digest_s[SHA_DIGEST_SIZE];
-	char digest_t[SHA_DIGEST_SIZE];
-
-	
-    hw_module = &HAL_MODULE_INFO_SYM;
-
-    if (!hw_module ||
-        strcmp(BOOT_CONTROL_HARDWARE_MODULE_ID, hw_module->id) != 0) {
-        ret = -EINVAL;
-    }
-    if (ret != 0) {
-        RLOGD("+[UA]: Error loading boot_control HAL implementation.\n");
-        return -1;
-    }
-
-    module = (boot_control_module_t*)hw_module;
-    module->init(module);
-
-
-    if (module == NULL) {
-        RLOGD("+[UA]: Error getting bootctrl module.\n");
-	    return  -1;
-    }
-
-    lynq_init_wake_lock_func();
-    lynq_fota_grab_artial_wake_lock();
-     /*************    Bootctrl Init  End  *************/
-
-    current_slot = module->getCurrentSlot(module);
-    
-    int is_successful = module->isSlotMarkedSuccessful(module, current_slot);
-  
-    RLOGD("Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
-		
-
-
-	memset(&ctx, 0, sizeof(ctx));
-	ctx.rom_base = 0;
-	ctx.ram_base =(unsigned char *)&ram_buffer[0];
-	ctx.ram_len = ROCK_RAM_LEN;
-	ctx.backup_base = BACKUP_ADDR_FLAG;
-	ctx.backup_len = ROCK_DEFAULT_BLOCK_SIZE;	
-	ctx.update_nvram = 0;
-	ctx.read_rom_directly = read_rom_directly;
-    //ctx.first_run = first_run;
-    ctx.first_run = 1;
-
-    if(0 != init_dev_fd())
-    {
-        RLOGD("+[UA]: get fota addr error\n");
-        lynq_fota_release_wake_lock();
-        return E_ROCK_FOTA_ADDR;
-    }
-
-    memset(&up_info, 0, sizeof(up_info));
-	
-	memset(&fota_status,0,sizeof(fota_status));
-
-	
-    lseek(fd_update_status,0,SEEK_SET);
-    read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
-
-	RLOGD("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
-	
-	
-	if ((up_info.ota_run>PATCH_BL33)||(up_info.ota_run<PATCH_SYSTEM))
-	{
-		up_info.ota_run = 0;
-	}	
-	
-	up_info.ota_run = 0;
-	
-	if((up_info.fota_flag[0]=='A')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='B')){
-		update_mode = MODE_A2B;
-	}else if((up_info.fota_flag[0]=='B')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='A')){
-		update_mode = MODE_B2A;
-	}else{
-		update_mode = MODE_NORMAL;
-	}
-	
-	RLOGD("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
-	RLOGD("+[UA]: update_mode = %d\n",update_mode);
-	
-    memset(&da_head, 0, sizeof(da_head));
-
-	read(fd_delta, (unsigned char*)&da_head, sizeof(da_head));
-
-
-    rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.oemapp=%d,da_head.oemapp2=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.oemapp,da_head.oemapp2,da_head.bl33);
-    rock_trace(&ctx, "da_head.fullsys:%d,da_head.fullboot:%d,da_head.fulltee:%d,da_head.fullmd1img=%d,da_head.fullmd1dsp=%d,da_head.fullvbmeta=%d,da_head.full_oemapp=%d,da_head.full_oemapp2=%d,da_head.fullbl33=%d\n", da_head.full_sys, da_head.full_boot,da_head.full_tee, da_head.full_md1img,da_head.full_md1dsp,da_head.full_vbmeta,da_head.full_oemapp,da_head.full_oemapp2,da_head.full_bl33);
-
-    
-    if (da_head.sys>0) {
-	    fota_status.update_status[PATCH_SYSTEM - 1].need_update = 1;
-	}
-	if (da_head.boot>0) {
-		fota_status.update_status[PATCH_BOOT - 1].need_update = 1;
-	}
-	if (da_head.tee>0) {
-		fota_status.update_status[PATCH_TEE - 1].need_update = 1;
-	}
-	if (da_head.md1img>0) {
-		fota_status.update_status[PATCH_MD1IMG - 1].need_update = 1;
-	}
-	if (da_head.md1dsp>0) {
-		fota_status.update_status[PATCH_MD1DSP - 1].need_update = 1;
-	}
-	if (da_head.vbmeta>0) {
-		fota_status.update_status[PATCH_VBMETA - 1].need_update = 1;
-	}
-	if (da_head.oemapp>0) {
-		fota_status.update_status[PATCH_OEMAPP - 1].need_update = 1;
-	}
-	if (da_head.oemapp2>0) {
-		fota_status.update_status[PATCH_OEMAPP2 - 1].need_update = 1;
-	}
-	if (da_head.bl33>0) {
-		fota_status.update_status[PATCH_BL33 - 1].need_update = 1;
-	}
-	
-	if (da_head.full_sys>0) {
-		fota_status.update_status[FULL_SYSTEM - 1].need_update = 1;
-	}
-	if (da_head.full_boot>0) {
-		fota_status.update_status[FULL_BOOT - 1].need_update = 1;
-	}
-	if (da_head.full_tee>0) {
-		fota_status.update_status[FULL_TEE - 1].need_update = 1;
-	}
-	if (da_head.full_md1img>0) {
-		fota_status.update_status[FULL_MD1IMG - 1].need_update = 1;
-	}
-	if (da_head.full_bl33>0) {
-		fota_status.update_status[FULL_BL33 - 1].need_update = 1;
-	}
-	if (da_head.full_md1dsp>0) {
-		fota_status.update_status[FULL_MD1DSP - 1].need_update = 1;
-	}
-	if (da_head.full_vbmeta>0) {
-		fota_status.update_status[FULL_VBMETA - 1].need_update = 1;
-	}
-	if (da_head.full_oemapp>0) {
-		fota_status.update_status[FULL_OEMAPP - 1].need_update = 1;
-	}
-    if (da_head.full_oemapp2>0) {
-        fota_status.update_status[FULL_OEMAPP2 - 1].need_update = 1;
-    }
-	fota_status.switch_slot = WAIT;
-	save_fota_status();
-
-    delta_size = da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp + da_head.oemapp2 + da_head.bl33;
-	
-
-    if ((da_head.sys>0) && (up_info.ota_run <= PATCH_SYSTEM))
-	{
-
-        now_patch = PATCH_SYSTEM;
-        delta_offset = DELTA_HEARD_SIZE;
-  
-#if 0		
-		if (up_info.ota_run == PATCH_SYSTEM) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		//up_info.ota_run = 0;
-
-		
-        if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                return -err;
-            }
-			fd_curr = fd_system_a;
-		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                return -err;
-            }
-			fd_curr = fd_system_b;			
-		}
-
-#endif 
-
-
-        ctx.first_run = 1;   // always
-		
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/system_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/system_b");
-		}
-		
-//        if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening system file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_system_a;
-//		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening system file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_system_b;			
-//		}
-		
-		if(current_slot==SLOT_B){
-			fd_read  = fd_system_b;
-			fd_write = fd_system_a;	
-		} else {
-			fd_read  = fd_system_a;
-			fd_write = fd_system_b;
-		}
-
-		
-		fota_status.ota_run = PATCH_SYSTEM;
-        fota_status.update_status[PATCH_SYSTEM -1].check_delta = WAIT;
-		fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		fota_status.update_status[PATCH_SYSTEM-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		
-		up_info.ota_run = PATCH_SYSTEM;
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-		
-		RLOGD("+[UA]: Start upgrading system.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: system upgrade result:%d\n",status);
-		
-		//up_info.ota_run = 0;
-		
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_SYSTEM -1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = PASS;
-            RLOGD("system upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-		
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-            close(fd_update_status);
-			
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-	
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-		
-
-    }
-	
-	
-	
-	
-
-    if ((da_head.boot>0) && (up_info.ota_run <= PATCH_BOOT))
-	{
-
-        now_patch = PATCH_BOOT;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys;
-
-		
-		if (up_info.ota_run == PATCH_BOOT)
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/boot_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/boot_b");
-		}
-        //if(current_slot==SLOT_B) {
-	        fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
-            if (fd_boot_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening boot file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_boot_a;
-//		}else{
-	        fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
-            if (fd_boot_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening boot file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_boot_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_boot_b;
-			fd_write = fd_boot_a;	
-		} else {
-			fd_read  = fd_boot_a;
-			fd_write = fd_boot_b;
-		}
-
-
-		fota_status.ota_run = PATCH_BOOT;
-        fota_status.update_status[PATCH_BOOT-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_BOOT-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_BOOT-1].update_result= WAIT;
-
-		save_fota_status();
-
-		
-	    up_info.ota_run = PATCH_BOOT;
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-		
-		
-        RLOGD("+[UA]: Start upgrading boot.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: boot upgrade result:%d\n",status);
-        //up_info.ota_run = 0;
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_BOOT-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_BOOT-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = PASS;
-            RLOGD("boot upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_BOOT-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_BOOT-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-            close(fd_update_status);
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-	
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-
-    }
-	
-	
-	
-	
-
-    if ((da_head.tee>0) && (up_info.ota_run <= PATCH_TEE))
-	{
-
-        now_patch = PATCH_TEE;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot;
- 
-		
-		if (up_info.ota_run == PATCH_TEE) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/tee_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/tee_b");
-		}
-
-//        if(current_slot==SLOT_B) {
-	        fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
-            if (fd_tee_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening tee file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_tee_a;
-//		}else{
-	        fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
-            if (fd_tee_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening tee file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_tee_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_tee_b;
-			fd_write = fd_tee_a;	
-		} else {
-			fd_read  = fd_tee_a;
-			fd_write = fd_tee_b;
-		}
-
-
-		fota_status.ota_run = PATCH_TEE;
-        fota_status.update_status[PATCH_TEE-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_TEE-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_TEE-1].update_result= WAIT;
-		
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_TEE;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        RLOGD("+[UA]: Start upgrading tee.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: tee upgrade result:%d\n",status);
-        //up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_TEE-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_TEE-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = PASS;
-            RLOGD("tee upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_TEE-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_TEE-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-    }
-	
-	
-	
-
-    if ((da_head.md1img>0) && (up_info.ota_run <= PATCH_MD1IMG))
-	{
-
-        now_patch = PATCH_MD1IMG;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee;
-
-		
-		if (up_info.ota_run == PATCH_MD1IMG) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/md1img_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/md1img_b");
-		}
-
-//        if(current_slot==SLOT_B) {
-	        fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
-            if (fd_md1img_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening md1img file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1img_a;
-//		}else{
-	        fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
-            if (fd_md1img_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening md1img file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1img_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_md1img_b;
-			fd_write = fd_md1img_a;	
-		} else {
-			fd_read  = fd_md1img_a;
-			fd_write = fd_md1img_b;
-		}
-
-		fota_status.ota_run = PATCH_MD1IMG;
-        fota_status.update_status[PATCH_MD1IMG-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_MD1IMG-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_MD1IMG-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_MD1IMG;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();		
-		
-
-        RLOGD("+[UA]: Start upgrading md1img.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: md1img upgrade result:%d\n",status);
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_MD1IMG-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = PASS;
-            RLOGD("md1img upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-	
-	
-	
-	
-	if ((da_head.md1dsp>0) && (up_info.ota_run <= PATCH_MD1DSP))
-	{
-
-        now_patch = PATCH_MD1DSP;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img;
-
-		
-		if (up_info.ota_run == PATCH_MD1DSP) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/md1dsp_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/md1dsp_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
-            if (fd_md1dsp_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening md1dsp file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1dsp_a;
-//		}else{
-	        fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
-            if (fd_md1dsp_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening md1dsp file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1dsp_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_md1dsp_b;
-			fd_write = fd_md1dsp_a;	
-		} else {
-			fd_read  = fd_md1dsp_a;
-			fd_write = fd_md1dsp_b;
-		}
-
-
-		fota_status.ota_run = PATCH_MD1DSP;
-        fota_status.update_status[PATCH_MD1DSP-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_MD1DSP-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_MD1DSP-1].update_result= WAIT;
-
-		save_fota_status();
-
-
-		up_info.ota_run = PATCH_MD1DSP;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-
-        RLOGD("+[UA]: Start upgrading md1dsp.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_MD1DSP-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = PASS;
-            RLOGD("md1dsp upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-	
-	
-	if ((da_head.vbmeta>0) && (up_info.ota_run <= PATCH_VBMETA))
-	{
-
-        now_patch = PATCH_VBMETA;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp;
-
-		
-		if (up_info.ota_run == PATCH_VBMETA) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/vbmeta_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/vbmeta_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
-            if (fd_vbmeta_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening vbmeta file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_vbmeta_a;
-//		}else{
-	        fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
-            if (fd_vbmeta_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening vbmeta file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_vbmeta_b;			
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_vbmeta_b;
-			fd_write = fd_vbmeta_a;	
-		} else {
-			fd_read  = fd_vbmeta_a;
-			fd_write = fd_vbmeta_b;
-		}
-
-
-		fota_status.ota_run = PATCH_VBMETA;
-        fota_status.update_status[PATCH_VBMETA-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_VBMETA-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_VBMETA-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_VBMETA;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        RLOGD("+[UA]: Start upgrading vbmeta.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
-        
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_VBMETA-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = PASS;
-            RLOGD("vbmeta upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-
-	if ((da_head.oemapp>0) && (up_info.ota_run <= PATCH_OEMAPP))
-	{
-
-        now_patch = PATCH_OEMAPP;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta;
-
-
-		if (up_info.ota_run == PATCH_OEMAPP) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
-            if (fd_oemapp_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp_a;
-//		}else{
-	        fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
-            if (fd_oemapp_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp_b;
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_oemapp_b;
-			fd_write = fd_oemapp_a;
-		} else {
-			fd_read  = fd_oemapp_a;
-			fd_write = fd_oemapp_b;
-		}
-
-
-		fota_status.ota_run = PATCH_OEMAPP;
-        fota_status.update_status[PATCH_OEMAPP-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_OEMAPP-1].update_result= WAIT;
-
-		save_fota_status();
-
-		up_info.ota_run = PATCH_OEMAPP;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading oemapp.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: oemapp upgrade result:%d\n",status);
-
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_OEMAPP-1].update_result= status;
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = PASS;
-
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = ERROR;
-
-		}else{
-
-			//fota_status.update_status[PATCH_OEMAPP -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_OEMAPP -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
-            mtk_device_wrap_close(fd_read);
-            mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-
-    if ((da_head.oemapp2>0) && (up_info.ota_run <= PATCH_OEMAPP2))
-	{
-
-        now_patch = PATCH_OEMAPP2;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp;
-
-
-		if (up_info.ota_run == PATCH_OEMAPP2) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
-            if (fd_oemapp2_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp2_a;
-//		}else{
-	        fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
-            if (fd_oemapp2_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp2_b;
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_oemapp2_b;
-			fd_write = fd_oemapp2_a;
-		} else {
-			fd_read  = fd_oemapp2_a;
-			fd_write = fd_oemapp2_b;
-		}
-
-
-		fota_status.ota_run = PATCH_OEMAPP2;
-        fota_status.update_status[PATCH_OEMAPP2-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_OEMAPP2-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_OEMAPP2;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading oemapp2.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: oemapp2 upgrade result:%d\n",status);
-
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_OEMAPP2-1].update_result= status;
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = PASS;
-
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = ERROR;
-
-		}else{
-
-			//fota_status.update_status[PATCH_OEMAPP2 -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_OEMAPP2 -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
-            mtk_device_wrap_close(fd_read);
-            mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-
-    if ((da_head.bl33>0) && (up_info.ota_run <= PATCH_BL33))
-	{
-
-        now_patch = PATCH_BL33;
-       delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp + da_head.oemapp2;
-
-
-		if (up_info.ota_run == PATCH_BL33) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-	    fd_bl33 = mtk_device_wrap_open(DEV_BL33,O_RDWR);
-        if (fd_bl33 < 0) {
-            err = errno;
-            RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-            lynq_fota_release_wake_lock();
-            return -err;
-        }
-	    fd_curr = fd_bl33;
-
-        fota_status.ota_run = PATCH_BL33;
-        fota_status.update_status[PATCH_BL33-1].check_delta = WAIT;
-        fota_status.update_status[PATCH_BL33-1].check_rom = WAIT;
-        fota_status.update_status[PATCH_BL33-1].update_result= WAIT;
-
-		save_fota_status();
-
-		up_info.ota_run = PATCH_BL33;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-        RLOGD("+[UA]: Start upgrading bl33.\n");
-        status = iot_patch(&ctx);
-		RLOGD("+[UA]: bl33 upgrade result:%d\n",status);
-        
-		up_info.ota_run = 0;
-		
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_BL33-1].update_result= status; 
-        fota_status.update_result= status;
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_BL33-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = PASS;
-            RLOGD("bl33 upgrade success!!!\n");
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_BL33-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_BL33-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = ERROR;
-
-		}else{
-
-			//fota_status.update_status[PATCH_BL33 -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_BL33 -1].check_rom = WAIT;
-		}
-
-		save_fota_status();		
-
-		if ((status != 0) &&(status != 1))
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            mtk_device_wrap_close(fd_curr);
-            sync();
-            close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_curr);
-
-    }
-		
-
-    
-	//if(current_slot==SLOT_B)
-		
-    
-	
-	if ((da_head.full_sys>0)|| (da_head.full_boot>0)|| (da_head.full_tee>0)||(da_head.full_md1img>0)||(da_head.full_md1dsp>0)||(da_head.full_vbmeta>0)||(da_head.full_oemapp>0)||(da_head.full_oemapp2>0)||(da_head.full_bl33>0))
-	{
-
-	    now_patch = 0;
-		up_info.ota_run = 0;
-		
-		memset(&fota_status,0,sizeof(fota_status));
-		fota_status.switch_slot = WAIT;
-		save_fota_status();
-		
-	    if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
-            err = errno;
-            RLOGD("+[UA]: mtk_device_wrap_seek df_delta err\n");
-            lynq_fota_release_wake_lock();
-		    return -1;
-        }
-		
-		read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
-		
-
-	    if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
-	        RLOGD("+[UA]: invalid full delta header\r\n");
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = -1;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-	        //mtk_device_wrap_close(fd_curr);
-			sync();
-			close(fd_update_status);
-
-			for (i = FULL_SYSTEM;i<=FULL_BL33;i++){
-                if (fota_status.update_status[i-1].need_update ==1) {
-                    fota_status.ota_run = i;
-					fota_status.update_status[i-1].check_delta = ERROR;
-					fota_status.update_status[i-1].check_rom= WAIT;
-					fota_status.update_status[i-1].update_result= ERROR;
-				}
-			}
-            fota_status.update_result = ERROR;
-			save_fota_status();
-            lynq_fota_release_wake_lock();
-	        return -1;
-	    }
-	}
-	
-	
-
-	
-	
-	if(da_head.full_sys>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/system_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/system_b");
-        }
-        
-		if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_sys file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_system_a;
-		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_sys file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_system_b;			
-		}
-        fota_status.ota_run = FULL_SYSTEM;
-        save_fota_status();
-		
-		retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading system full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_sys);
-
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_sys,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_sys,digest_t);
-            retry_cnt++;
-        }while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		
-		mtk_device_wrap_close(fd_curr);
-		
-		RLOGD("+[UA]: system full retry_cnt = %d\n",retry_cnt);
-        
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_SYSTEM_B,DEV_SYSTEM_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_SYSTEM_A,DEV_SYSTEM_B);
-			}
-		}
-		
-		RLOGD("+[UA]: system full upgrade result:%d\n",status);
-
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_SYSTEM-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}		
-		
-	
-	}
-	
-	
-	
-	if(da_head.full_boot>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/boot_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/boot_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
-            if (fd_boot_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_boot_a;
-		}else{
-	        fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
-            if (fd_boot_b < 0) {
-                err = errno;
                 LYERRLOG("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
                 lynq_fota_release_wake_lock();
                 return -err;
@@ -3924,7 +2255,8 @@
 				nand_copyto_nand(DEV_VBMETA_A,DEV_VBMETA_B);
 			}
 		}
-				
+		
+
 		RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
 		fota_status.update_result = status;
 		fota_status.update_status[FULL_VBMETA-1].update_result = status;
@@ -3932,83 +2264,97 @@
 
 		if (status != 0)
 		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
+
+		    up_info.fota_flag[0] = 'e';
+	        up_info.fota_flag[1] = 'n';
+	        up_info.fota_flag[2] = 'd';
+	        up_info.update_result = status;
             up_info.ota_run = 0;
             lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
+			write(fd_update_status, &up_info,sizeof(up_info));
+			sync();
+			close(fd_update_status);
             lynq_fota_release_wake_lock();
             return status;
 		}
+		
+	
+	}
 
+#ifdef GSW_FOTA_CFG
+    if(da_head.full_oemapp>0)
+    {
+        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta;
 
-	}	
-
-	if(da_head.full_oemapp>0) {
-
-	    delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta;
-
-        if(current_slot==SLOT_B) {
+        if(current_slot==SLOT_B)
+        {
             system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
-        } else {
+        }
+        else
+        {
             system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
         }
 
-		if(current_slot==SLOT_B) {
-	        fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
-            if (fd_oemapp_a < 0) {
+        if(current_slot==SLOT_B)
+        {
+            fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
+            if (fd_oemapp_a < 0)
+            {
                 err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
                 lynq_fota_release_wake_lock();
                 return -err;
             }
-			fd_curr = fd_oemapp_a;
-		}else{
-	        fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
-            if (fd_oemapp_b < 0) {
+            fd_curr = fd_oemapp_a;
+        }
+        else
+        {
+            fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
+            if (fd_oemapp_b < 0)
+            {
                 err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
                 lynq_fota_release_wake_lock();
                 return -err;
             }
-			fd_curr = fd_oemapp_b;
-		}
-		fota_status.ota_run = FULL_OEMAPP;
+            fd_curr = fd_oemapp_b;
+        }
+        fota_status.ota_run = FULL_OEMAPP;
         save_fota_status();
         retry_cnt = 0;
-		LYVERBLOG("+[UA]: Start upgrading oemapp full.\n");
+        RLOGD("+[UA]: Start upgrading oemapp full.\n");
         do {
-		    status = delta_copyto_nand(delta_offset,da_head.full_oemapp);
-			ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp,digest_s);
-		    ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp,digest_t);
-		    retry_cnt++;	
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
+            status = delta_copyto_nand(delta_offset,da_head.full_oemapp);
+            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp,digest_s);
+            ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp,digest_t);
+            retry_cnt++;
+        }while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
+        mtk_device_wrap_close(fd_curr);
 
-		LYVERBLOG("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_OEMAPP_B,DEV_OEMAPP_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_OEMAPP_A,DEV_OEMAPP_B);
-			}
-		}
+        RLOGD("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
+        if (retry_cnt>3)
+        {
+            if (status == 0)
+            {
+                status = retry_cnt;
+            }
+            if(current_slot==SLOT_B)
+            {
+                nand_copyto_nand(DEV_OEMAPP_B,DEV_OEMAPP_A);
+            }
+            else
+            {
+                nand_copyto_nand(DEV_OEMAPP_A,DEV_OEMAPP_B);
+            }
+        }
 
-		LYVERBLOG("+[UA]: oemapp upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_OEMAPP-1].update_result = status;
-		save_fota_status();
+        RLOGD("+[UA]: oemapp upgrade result:%d\n",status);
+        fota_status.update_result = status;
+        fota_status.update_status[FULL_OEMAPP-1].update_result = status;
+        save_fota_status();
 
-		if (status != 0)
-		{
+        if (status != 0)
+        {
             up_info.fota_flag[0] = 'e';
             up_info.fota_flag[1] = 'n';
             up_info.fota_flag[2] = 'd';
@@ -4020,73 +2366,83 @@
             close(fd_update_status);
             lynq_fota_release_wake_lock();
             return status;
-		}
+        }
+    }
 
+    if(da_head.full_oemapp2>0)
+    {
+        int ret;
+        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta + da_head.full_oemapp;
 
-	}	
-
-	if(da_head.full_oemapp2>0) {
-
-	    delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta + da_head.full_oemapp;
-
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
+        if(current_slot==SLOT_B)
+        {
+            ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
+        }
+        else
+        {
+            ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
+        }
+        if(current_slot==SLOT_B)
+        {
+            fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
+            if (fd_oemapp2_a < 0)
+            {
+                err = errno;
+                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+                lynq_fota_release_wake_lock();
+                return -err;
+            }
+            fd_curr = fd_oemapp2_a;
+        }
+        else
+        {
+            fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
+            if (fd_oemapp2_b < 0)
+            {
+                err = errno;
+                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+                lynq_fota_release_wake_lock();
+                return -err;
+            }
+            fd_curr = fd_oemapp2_b;
         }
 
-		if(current_slot==SLOT_B) {
-	        fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
-            if (fd_oemapp2_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_oemapp2_a;
-		}else{
-	        fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
-            if (fd_oemapp2_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_oemapp2_b;
-		}
         fota_status.ota_run = FULL_OEMAPP2;
         save_fota_status();
         retry_cnt = 0;
-		LYVERBLOG("+[UA]: Start upgrading oemapp2 full.\n");
+        RLOGD("+[UA]: Start upgrading oemapp2 full.\n");
         do {
-		    status = delta_copyto_nand(delta_offset,da_head.full_oemapp2);
-			ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp2,digest_s);
-		    ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp2,digest_t);
-		    retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
+            status = delta_copyto_nand(delta_offset,da_head.full_oemapp2);
+            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp2,digest_s);
+            ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp2,digest_t);
+            retry_cnt++;
+        }while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
+        mtk_device_wrap_close(fd_curr);
 
-		LYVERBLOG("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_OEMAPP2_B,DEV_OEMAPP2_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_OEMAPP2_A,DEV_OEMAPP2_B);
-			}
-		}
+        RLOGD("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
+        if (retry_cnt>3)
+        {
+            if (status == 0)
+            {
+                status = retry_cnt;
+            }
+            if(current_slot==SLOT_B)
+            {
+                nand_copyto_nand(DEV_OEMAPP2_B,DEV_OEMAPP2_A);
+            }
+            else
+            {
+                nand_copyto_nand(DEV_OEMAPP2_A,DEV_OEMAPP2_B);
+            }
+        }
 
-		LYVERBLOG("+[UA]: oemapp2 upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_OEMAPP2-1].update_result = status;
-		save_fota_status();
+        RLOGD("+[UA]: oemapp2 upgrade result:%d\n",status);
+        fota_status.update_result = status;
+        fota_status.update_status[FULL_OEMAPP2-1].update_result = status;
+        save_fota_status();
 
-		if (status != 0)
-		{
+        if (status != 0)
+        {
             up_info.fota_flag[0] = 'e';
             up_info.fota_flag[1] = 'n';
             up_info.fota_flag[2] = 'd';
@@ -4098,118 +2454,363 @@
             close(fd_update_status);
             lynq_fota_release_wake_lock();
             return status;
-		}
+        }
+    }
+#endif
 
-
-	}
-
-	if(da_head.full_bl33>0) {
-
-	}
-
-
-
-    if(update_mode == MODE_NORMAL){ //need A VS B
-	    if(current_slot == SLOT_A) {
-
-	        up_info.fota_flag[0] = 'B';
-	        up_info.fota_flag[1] = '-';
-	        up_info.fota_flag[2] = 'A';
-
-		}else{
-
-	        up_info.fota_flag[0] = 'A';
-	        up_info.fota_flag[1] = '-';
-	        up_info.fota_flag[2] = 'B';	
-
-		}
-
-	}else{
-	    up_info.fota_flag[0] = 'e';
-	    up_info.fota_flag[1] = 'n';
-	    up_info.fota_flag[2] = 'd';
-
-	}
-
-
-	up_info.update_result = status;
-    up_info.ota_run = 0;
-    lseek(fd_update_status,0,SEEK_SET);       
-	write(fd_update_status, &up_info,sizeof(up_info));
-    sync();
-           
-    close_dev_fd(fd_delta);
-
-    //close_dev_fd(fd_curr);
-	
-
-	
-    close(fd_update_status);
-	sync();
-	
-
-	slot = (current_slot == 0) ? 1 : 0;
-	
-	RLOGD("+[UA]: slot SLOT = %d\n",slot);
-	
-        if(switch_slot_flag==1)
+    if(update_mode == MODE_NORMAL)
+    {
+        RLOGD("set fota_flag start\n");
+        if(current_slot == SLOT_A) 
         {
-            module->setActiveBootSlot(module,slot);
-            RLOGD("+[UA]: upgrade is success!!!!\n");
+            up_info.fota_flag[0] = 'B';
+            up_info.fota_flag[1] = '-';
+            up_info.fota_flag[2] = 'A';
+        }
+        else
+        {
+            up_info.fota_flag[0] = 'A';
+            up_info.fota_flag[1] = '-';
+            up_info.fota_flag[2] = 'B';
+        }
+    }
+    else
+    {
+        up_info.fota_flag[0] = 'e';
+        up_info.fota_flag[1] = 'n';
+        up_info.fota_flag[2] = 'd';
+    }
+    up_info.update_result = status;
+    up_info.ota_run = 0;
+    lseek(fd_update_status,0,SEEK_SET);
+    RLOGD("up_info: fota_flag: %s\n",up_info.fota_flag);
+    write(fd_update_status, &up_info,sizeof(up_info));
+    sync();
+    close(fd_delta);
+    close(fd_update_status);
+    sync();
+
+    slot = (current_slot == 0) ? 1 : 0;
+    RLOGD("+[UA]: slot SLOT = %d\n",slot);
+    module->setActiveBootSlot(module,slot);
+    RLOGD("+[UA]:slot %d upgrade is success!!!!\n", slot);
+    fota_status.ota_run = 0;
+    fota_status.switch_slot = PASS;
+    fota_status.update_result = status;
+    save_fota_status();
+    lynq_fota_release_wake_lock();
+
+    if(reboot_flag == 1)
+    {
+        reboot_device();
+    }
+
+    return status;
+    
+}
+
+int lynq_backup_main()
+{
+    const hw_module_t* hw_module;
+    hw_module = &HAL_MODULE_INFO_SYM;
+
+    int is_successful;
+    int ret = 0;
+    if (!hw_module || strcmp(BOOT_CONTROL_HARDWARE_MODULE_ID, hw_module->id) != 0) 
+    {
+        ret = -1;
+    }
+    RLOGD("ret = %d\n", ret);
+    if (ret != 0)
+    {
+        RLOGD("+[UA]: Error loading boot_control HAL implementation.\n");
+        return -1;
+    }
+    module = (boot_control_module_t*)hw_module;
+    module->init(module);
+    if (module == NULL) 
+    {
+        RLOGD("+[UA]: Error getting bootctrl module.\n");
+        return  -1;
+    }
+    lynq_init_wake_lock_func();
+    lynq_fota_acquire_wake_lock();
+
+    current_slot = module->getCurrentSlot(module);
+    is_successful = module->isSlotMarkedSuccessful(module, current_slot);
+    RLOGD("+[UA]: Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
+
+
+    if(current_slot==SLOT_B)
+    {
+        ret = system("flash_eraseall /dev/disk/by-partlabel/system_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase system_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_SYSTEM_B,DEV_SYSTEM_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup system_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
         }
 
-    fota_status.ota_run = 0;
-	fota_status.switch_slot = PASS;
-	fota_status.update_result = status;
-    save_fota_status();
-    
-    lynq_fota_release_wake_lock();
-    
-	if(update_mode==MODE_NORMAL){
-	reboot_device();
-	}	
+        ret = system("flash_eraseall /dev/disk/by-partlabel/boot_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase boot_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_BOOT_B,DEV_BOOT_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup boot_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
-	return status;
-}
-#endif
+        ret = system("flash_eraseall /dev/disk/by-partlabel/tee_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase tee_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_TEE_B,DEV_TEE_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup tee_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
+        ret = system("flash_eraseall /dev/disk/by-partlabel/md1img_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase md1img_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_MD1IMG_B,DEV_MD1IMG_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup md1img_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
+        ret = system("flash_eraseall /dev/disk/by-partlabel/md1dsp_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase md1dsp_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_MD1DSP_B,DEV_MD1DSP_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup md1dsp_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/vbmeta_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_VBMETA_B,DEV_VBMETA_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
 #ifdef GSW_FOTA_CFG
-static void rock_fail_handler()
-{
-    int ret = 0;
-    RLOGD("rock_fail_handler start\n");
-    ret = rock_update_main(0, 0, 0, 0, 1, 1);
-    if(ret)
-    {
-        RLOGD("fota update fail again!\n");
-    }
-}
+        ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase oemapp_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_OEMAPP_B,DEV_OEMAPP_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
+        ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase oemapp2_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_OEMAPP2_B,DEV_OEMAPP2_A);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 #endif
 
+    }
+    else
+    {
+        ret = system("flash_eraseall /dev/disk/by-partlabel/system_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase system_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_SYSTEM_A,DEV_SYSTEM_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup system_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
 
+        ret = system("flash_eraseall /dev/disk/by-partlabel/boot_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase boot_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_BOOT_A,DEV_BOOT_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup boot_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/tee_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase tee_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_TEE_A,DEV_TEE_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup tee_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+            }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/md1img_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase md1img_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_MD1IMG_A,DEV_MD1IMG_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup md1img_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/md1dsp_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase md1dsp_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_MD1DSP_A,DEV_MD1DSP_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup md1dsp_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/vbmeta_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase vbmeta_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_VBMETA_A,DEV_VBMETA_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+#ifdef GSW_FOTA_CFG
+        ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase oemapp_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_OEMAPP_A,DEV_OEMAPP_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+
+        ret = system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: erase oemapp2_b fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+        ret = nand_copyto_nand(DEV_OEMAPP2_A,DEV_OEMAPP2_B);
+        if(ret != 0)
+        {
+            RLOGD("+[UA]: backup vbmeta_a fail\n");
+            lynq_fota_release_wake_lock();
+            return 1;
+        }
+#endif
+
+    }
+
+    lynq_fota_release_wake_lock();
+    RLOGD("+[UA]: lynq_backup_main success \n");
+    return 0;
+}
 
 /* main entrpoint */
-int lynq_rock_main(int first_run)
-{
+int lynq_rock_main(int first_run)  {
+
     int ret = 0;
 
 #if 0
-    
+
     printf("-********copy delta ***-\n");
     test_write_delta("/data/delta",DEV_DELTA);
 #endif
-#ifdef MOBILETEK_FOTA_CFG
-	ret = rock_update_main(0, 0, 0, 0, first_run);
-#endif
-#ifdef GSW_FOTA_CFG
-    ret = rock_update_main(0, 0, 0, 0, first_run, 1);
-#endif 
+
+    ret = rock_update_main(0, 0, 0, 0, first_run,1);
     RLOGD("rock_update_main ret = %d\n", ret);
-    if(ret)
-	{
+    if(ret) {
         RLOGD("fota update fail!\n");
     }
     return ret;
@@ -4218,75 +2819,48 @@
 #endif
 
 //lt add @2021.9.23 for  deal with power down \ backup or upgrade.
-#ifdef GSW_FOTA_CFG
-int lynq_fota_func(void) 
+int lynq_fota_func(void)
 {
-    int fd;
-    int first_run = 1;   
-    int ret = 0;
-    UPDATE_INFO lynq_up_info;
-    memset(&lynq_up_info, 0, sizeof(lynq_up_info));
-    fd = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
-    if (fd < 0)
-    {
-        return -1;
-    }
-    read(fd,(unsigned char *)&lynq_up_info,sizeof(lynq_up_info));
-    close(fd);
-
-    if(lynq_up_info.ota_run != 0)
-    { 
-        //Power off, call UA
-        RLOGD("[+UP]: ***Power off, call UA***\n");
-        ret = rock_update_main(0, 0, 0, 0, first_run, 1);
-        RLOGD("rock_update_main ret = %d\n", ret);
-        if(ret) 
-        {
-            RLOGD("fota update fail!\n");
-        }
-    }
-    if(((lynq_up_info.fota_flag[0]=='A')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='B'))||
-        ((lynq_up_info.fota_flag[0]=='B')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='A')))
-    {
-        //Upgrade the other side and call UA
-        RLOGD("[+UP]: ***Upgrade the other side and call UA***\n");
-        ret = rock_update_main(0, 0, 0, 0, first_run, 0);
-        RLOGD("rock_update_main ret = %d\n", ret);
-        if(ret)
-        {
-            RLOGD("fota update fail!\n");
-        }
-    }
-    return 0;
-}	
-#endif
-#ifdef MOBILETEK_FOTA_CFG
-int lynq_fota_func(void) 
-{
-    int fd;
+    int fd, ret;
     int first_run = 1;
     UPDATE_INFO lynq_up_info;
+
     memset(&lynq_up_info, 0, sizeof(lynq_up_info));
+
     fd = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
-    if (fd < 0)
-    {
+    if (fd < 0) {
         return -1;
     }
     read(fd,(unsigned char *)&lynq_up_info,sizeof(lynq_up_info));
     close(fd);
     RLOGD("lynq_up_info: fota_flag: %s\n",lynq_up_info.fota_flag);
     if(lynq_up_info.ota_run != 0)
-    { 
+    {
         //Power off, call UA
         RLOGD("[+UP]: ***Power off, call UA***\n");
-        lynq_rock_main(first_run);
+        ret = rock_update_main(0, 0, 0, 0, first_run,0);
+        RLOGD("rock_update_main ret = %d\n", ret);
+        if(ret)
+        {
+        RLOGD("fota update fail!\n");
+        }
     }
     if (((lynq_up_info.fota_flag[0]=='A')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='B'))||
         ((lynq_up_info.fota_flag[0]=='B')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='A')))
     {
         //Upgrade the other side and call UA
         RLOGD("[+UP]: ***Upgrade the other side and call UA***\n");
-        lynq_rock_main(first_run);
+        ret = lynq_backup_main();
+        RLOGD("lynq_backup_main ret = %d\n", ret);
+        if(ret == 0)
+        {
+            RLOGD("fota backup success!!!\n");
+        }
+        else
+        {
+            RLOGD("fota backup fail!!!\n");
+        }
+
         if( 0 != reset_fota_flag())
         {
             RLOGD("reset_fota_flag fail\n");
@@ -4295,7 +2869,7 @@
     sleep(120);
     check_ril_service();
     return 0;
-}	
+}
 
 int reset_fota_flag(void)
 {
@@ -4381,7 +2955,6 @@
 
     return 0;
 }
-#endif
 
 int lynq_nand_open(const char *pathname, int flags)
 {
@@ -4446,6 +3019,7 @@
     reboot_device();
     return ;
 }
+ 
 
 /**
  * @brief fota no resatrt
@@ -4455,2048 +3029,21 @@
  */
 int lynq_fota_nrestart(void)
 {
-	int status,err;
-#ifdef GSW_FOTA_CFG
-	int start;
-#endif
     int ret = 0;
-	int i = 0;
-	int retry_cnt = 0;
-	
-	IOT_UPDATA_CONTEXT ctx;
-#ifdef GSW_FOTA_CFG
-	UPDATE_INFO up_info;
+
+#if 0
+
+    printf("-********copy delta ***-\n");
+    test_write_delta("/data/delta",DEV_DELTA);
 #endif
-	//OTA_STATUS  fota_status;
 
-
-    const hw_module_t* hw_module;
-    unsigned int  slot;
-
-	unsigned int  update_mode = MODE_NORMAL;
-	unsigned int  delta_size;
-    unsigned char full_header[9];
-	
-	char digest_s[SHA_DIGEST_SIZE];
-	char digest_t[SHA_DIGEST_SIZE];
-
-	
-    hw_module = &HAL_MODULE_INFO_SYM;
-
-    if (!hw_module ||
-        strcmp(BOOT_CONTROL_HARDWARE_MODULE_ID, hw_module->id) != 0) {
-        ret = -EINVAL;
-    }
-    if (ret != 0) {
-        RLOGD("+[UA]: Error loading boot_control HAL implementation.\n");
-        return -1;
-    }
-
-    module = (boot_control_module_t*)hw_module;
-    module->init(module);
-
-
-    if (module == NULL) {
-        RLOGD("+[UA]: Error getting bootctrl module.\n");
-	    return  -1;
-    }
-
-    lynq_init_wake_lock_func();
-    lynq_fota_grab_artial_wake_lock();
-     /*************    Bootctrl Init  End  *************/
-
-    current_slot = module->getCurrentSlot(module);
-    
-    int is_successful = module->isSlotMarkedSuccessful(module, current_slot);
-  
-    RLOGD("Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);  
-		
-
-
-	memset(&ctx, 0, sizeof(ctx));
-	ctx.rom_base = 0;
-	ctx.ram_base =(unsigned char *)&ram_buffer[0];
-	ctx.ram_len = ROCK_RAM_LEN;
-	ctx.backup_base = BACKUP_ADDR_FLAG;
-	ctx.backup_len = ROCK_DEFAULT_BLOCK_SIZE;	
-	ctx.update_nvram = 0;
-	ctx.read_rom_directly = 0;
-    //ctx.first_run = first_run;
-    ctx.first_run = 1;
-
-    if(0 != init_dev_fd())
+    ret = rock_update_main(0, 0, 0, 0, 1, 0);
+    RLOGD("rock_update_main ret = %d\n", ret);
+    if(ret)
     {
-        RLOGD("+[UA]: get fota addr error\n");
-        lynq_fota_release_wake_lock();
-        return E_ROCK_FOTA_ADDR;
+        RLOGD("fota update fail!\n");
     }
-
-    
-#ifdef GSW_FOTA_CFG
-	memset(&fota_status,0,sizeof(fota_status));
-#endif
-	
-    lseek(fd_update_status,0,SEEK_SET);
-    memset(&up_info, 0, sizeof(up_info));
-    read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
-
-	RLOGD("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
-	
-	
-	if ((up_info.ota_run>PATCH_BL33)||(up_info.ota_run<PATCH_SYSTEM))
-	{
-		up_info.ota_run = 0;
-	}	
-	
-	up_info.ota_run = 0;
-	
-	if((up_info.fota_flag[0]=='A')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='B')){
-		update_mode = MODE_A2B;
-	}else if((up_info.fota_flag[0]=='B')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='A')){
-		update_mode = MODE_B2A;
-	}else{
-		update_mode = MODE_NORMAL;
-	}
-	
-	RLOGD("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
-	RLOGD("+[UA]: update_mode = %d\n",update_mode);
-	
-    memset(&da_head, 0, sizeof(da_head));
-
-	read(fd_delta, (unsigned char*)&da_head, sizeof(da_head));
-
-#ifdef GSW_FOTA_CFG
-    rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.oemapp=%d,da_head.oemapp2=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.oemapp,da_head.oemapp2,da_head.bl33);
-    rock_trace(&ctx, "da_head.fullsys:%d,da_head.fullboot:%d,da_head.fulltee:%d,da_head.fullmd1img=%d,da_head.fullmd1dsp=%d,da_head.fullvbmeta=%d,da_head.full_oemapp=%d,da_head.full_oemapp2=%d,da_head.fullbl33=%d\n", da_head.full_sys, da_head.full_boot,da_head.full_tee, da_head.full_md1img,da_head.full_md1dsp,da_head.full_vbmeta,da_head.full_oemapp,da_head.full_oemapp2,da_head.full_bl33);
-#endif 
-
-#ifdef MOBILETEK_FOTA_CFG
-    rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.bl33);
-    rock_trace(&ctx, "da_head.fullsys:%d,da_head.fullboot:%d,da_head.fulltee:%d,da_head.fullmd1img=%d,da_head.fullmd1dsp=%d,da_head.fullvbmeta=%d,da_head.fullbl33=%d\n", da_head.full_sys, da_head.full_boot,da_head.full_tee, da_head.full_md1img,da_head.full_md1dsp,da_head.full_vbmeta,da_head.full_bl33);
-#endif
-    
-    if (da_head.sys>0) {
-	    fota_status.update_status[PATCH_SYSTEM - 1].need_update = 1;
-	}
-	if (da_head.boot>0) {
-		fota_status.update_status[PATCH_BOOT - 1].need_update = 1;
-	}
-	if (da_head.tee>0) {
-		fota_status.update_status[PATCH_TEE - 1].need_update = 1;
-	}
-	if (da_head.md1img>0) {
-		fota_status.update_status[PATCH_MD1IMG - 1].need_update = 1;
-	}
-	if (da_head.md1dsp>0) {
-		fota_status.update_status[PATCH_MD1DSP - 1].need_update = 1;
-	}
-	if (da_head.vbmeta>0) {
-		fota_status.update_status[PATCH_VBMETA - 1].need_update = 1;
-#ifdef GSW_FOTA_CFG
-	}
-	if (da_head.oemapp>0) {
-		fota_status.update_status[PATCH_OEMAPP - 1].need_update = 1;
-	}
-	if (da_head.oemapp2>0) {
-		fota_status.update_status[PATCH_OEMAPP2 - 1].need_update = 1;
-#endif
-	}
-	if (da_head.bl33>0) {
-		fota_status.update_status[PATCH_BL33 - 1].need_update = 1;
-	}
-	
-	if (da_head.full_sys>0) {
-		fota_status.update_status[FULL_SYSTEM - 1].need_update = 1;
-	}
-	if (da_head.full_boot>0) {
-		fota_status.update_status[FULL_BOOT - 1].need_update = 1;
-	}
-	if (da_head.full_tee>0) {
-		fota_status.update_status[FULL_TEE - 1].need_update = 1;
-	}
-	if (da_head.full_md1img>0) {
-		fota_status.update_status[FULL_MD1IMG - 1].need_update = 1;
-	}
-	if (da_head.full_bl33>0) {
-		fota_status.update_status[FULL_BL33 - 1].need_update = 1;
-	}
-	if (da_head.full_md1dsp>0) {
-		fota_status.update_status[FULL_MD1DSP - 1].need_update = 1;
-	}
-	if (da_head.full_vbmeta>0) {
-		fota_status.update_status[FULL_VBMETA - 1].need_update = 1;
-	}
-#ifdef GSW_FOTA_CFG
-	if (da_head.full_oemapp>0) {
-		fota_status.update_status[FULL_OEMAPP - 1].need_update = 1;
-	}
-    if (da_head.full_oemapp2>0) {
-        fota_status.update_status[FULL_OEMAPP2 - 1].need_update = 1;
-    }
-#endif
-	fota_status.switch_slot = WAIT;
-	save_fota_status();
-#ifdef GSW_FOTA_CFG
-    delta_size = da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp + da_head.oemapp2 + da_head.bl33;
-#endif
-#ifdef MOBILETEK_FOTA_CFG
-    delta_size = da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.bl33;
-#endif
-
-    if ((da_head.sys>0) && (up_info.ota_run <= PATCH_SYSTEM))
-	{
-
-        now_patch = PATCH_SYSTEM;
-        delta_offset = DELTA_HEARD_SIZE;
-  
-#if 0		
-		if (up_info.ota_run == PATCH_SYSTEM) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		//up_info.ota_run = 0;
-
-		
-        if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                return -err;
-            }
-			fd_curr = fd_system_a;
-		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                return -err;
-            }
-			fd_curr = fd_system_b;			
-		}
-
-#endif 
-
-
-        ctx.first_run = 1;   // always
-		
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/system_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/system_b");
-		}
-		
-//        if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_system_a;
-//		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_system_b;			
-//		}
-		
-		if(current_slot==SLOT_B){
-			fd_read  = fd_system_b;
-			fd_write = fd_system_a;	
-		} else {
-			fd_read  = fd_system_a;
-			fd_write = fd_system_b;
-		}
-
-		
-		fota_status.ota_run = PATCH_SYSTEM;
-        fota_status.update_status[PATCH_SYSTEM -1].check_delta = WAIT;
-		fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		fota_status.update_status[PATCH_SYSTEM-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		
-		up_info.ota_run = PATCH_SYSTEM;
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-		
-		LYVERBLOG("+[UA]: Start upgrading system.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: system upgrade result:%d\n",status);
-		
-		//up_info.ota_run = 0;
-		
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_SYSTEM -1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-		    fota_status.update_status[PATCH_SYSTEM -1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-		
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-            close(fd_update_status);
-			
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-		
-
-    }
-	
-	
-	
-	
-
-    if ((da_head.boot>0) && (up_info.ota_run <= PATCH_BOOT))
-	{
-
-        now_patch = PATCH_BOOT;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys;
-
-		
-		if (up_info.ota_run == PATCH_BOOT)
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/boot_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/boot_b");
-		}
-        //if(current_slot==SLOT_B) {
-	        fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
-            if (fd_boot_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_boot_a;
-//		}else{
-	        fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
-            if (fd_boot_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_boot_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_boot_b;
-			fd_write = fd_boot_a;	
-		} else {
-			fd_read  = fd_boot_a;
-			fd_write = fd_boot_b;
-		}
-
-
-		fota_status.ota_run = PATCH_BOOT;
-        fota_status.update_status[PATCH_BOOT-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_BOOT-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_BOOT-1].update_result= WAIT;
-
-		save_fota_status();
-
-		
-	    up_info.ota_run = PATCH_BOOT;
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-		
-		
-        LYVERBLOG("+[UA]: Start upgrading boot.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: boot upgrade result:%d\n",status);
-        //up_info.ota_run = 0;
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_BOOT-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_BOOT-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_BOOT-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_BOOT-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BOOT-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-            close(fd_update_status);
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-
-    }
-	
-	
-	
-	
-
-    if ((da_head.tee>0) && (up_info.ota_run <= PATCH_TEE))
-	{
-
-        now_patch = PATCH_TEE;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot;
- 
-		
-		if (up_info.ota_run == PATCH_TEE) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/tee_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/tee_b");
-		}
-
-//        if(current_slot==SLOT_B) {
-	        fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
-            if (fd_tee_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_tee_a;
-//		}else{
-	        fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
-            if (fd_tee_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_tee_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_tee_b;
-			fd_write = fd_tee_a;	
-		} else {
-			fd_read  = fd_tee_a;
-			fd_write = fd_tee_b;
-		}
-
-
-		fota_status.ota_run = PATCH_TEE;
-        fota_status.update_status[PATCH_TEE-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_TEE-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_TEE-1].update_result= WAIT;
-		
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_TEE;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading tee.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: tee upgrade result:%d\n",status);
-        //up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_TEE-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_TEE-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_TEE-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_TEE-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_TEE-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_SYSTEM -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-			mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-    }
-	
-	
-	
-
-    if ((da_head.md1img>0) && (up_info.ota_run <= PATCH_MD1IMG))
-	{
-
-        now_patch = PATCH_MD1IMG;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee;
-
-		
-		if (up_info.ota_run == PATCH_MD1IMG) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/md1img_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/md1img_b");
-		}
-
-//        if(current_slot==SLOT_B) {
-	        fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
-            if (fd_md1img_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1img_a;
-//		}else{
-	        fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
-            if (fd_md1img_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1img_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_md1img_b;
-			fd_write = fd_md1img_a;	
-		} else {
-			fd_read  = fd_md1img_a;
-			fd_write = fd_md1img_b;
-		}
-
-		fota_status.ota_run = PATCH_MD1IMG;
-        fota_status.update_status[PATCH_MD1IMG-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_MD1IMG-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_MD1IMG-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_MD1IMG;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();		
-		
-
-        LYVERBLOG("+[UA]: Start upgrading md1img.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: md1img upgrade result:%d\n",status);
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_MD1IMG-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_MD1IMG-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1IMG-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-	
-	
-	
-	
-	if ((da_head.md1dsp>0) && (up_info.ota_run <= PATCH_MD1DSP))
-	{
-
-        now_patch = PATCH_MD1DSP;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img;
-
-		
-		if (up_info.ota_run == PATCH_MD1DSP) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/md1dsp_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/md1dsp_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
-            if (fd_md1dsp_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1dsp_a;
-//		}else{
-	        fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
-            if (fd_md1dsp_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_md1dsp_b;			
-//		}
-
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_md1dsp_b;
-			fd_write = fd_md1dsp_a;	
-		} else {
-			fd_read  = fd_md1dsp_a;
-			fd_write = fd_md1dsp_b;
-		}
-
-
-		fota_status.ota_run = PATCH_MD1DSP;
-        fota_status.update_status[PATCH_MD1DSP-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_MD1DSP-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_MD1DSP-1].update_result= WAIT;
-
-		save_fota_status();
-
-
-		up_info.ota_run = PATCH_MD1DSP;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-
-        LYVERBLOG("+[UA]: Start upgrading md1dsp.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: md1dsp upgrade result:%d\n",status);
-
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_MD1DSP-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_MD1DSP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_MD1DSP-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-	
-	
-	if ((da_head.vbmeta>0) && (up_info.ota_run <= PATCH_VBMETA))
-	{
-
-        now_patch = PATCH_VBMETA;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp;
-
-		
-		if (up_info.ota_run == PATCH_VBMETA) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-		
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/vbmeta_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/vbmeta_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
-            if (fd_vbmeta_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_vbmeta_a;
-//		}else{
-	        fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
-            if (fd_vbmeta_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_vbmeta_b;			
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_vbmeta_b;
-			fd_write = fd_vbmeta_a;	
-		} else {
-			fd_read  = fd_vbmeta_a;
-			fd_write = fd_vbmeta_b;
-		}
-
-
-		fota_status.ota_run = PATCH_VBMETA;
-        fota_status.update_status[PATCH_VBMETA-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_VBMETA-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_VBMETA-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_VBMETA;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading vbmeta.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: vbmeta upgrade result:%d\n",status);
-        
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_VBMETA-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_VBMETA-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_VBMETA-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_MD1IMG -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_MD1IMG -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-
-
-#ifdef GSW_FOTA_CFG
-
-	if ((da_head.oemapp>0) && (up_info.ota_run <= PATCH_OEMAPP))
-	{
-
-        now_patch = PATCH_OEMAPP;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta;
-
-
-		if (up_info.ota_run == PATCH_OEMAPP) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
-            if (fd_oemapp_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp_a;
-//		}else{
-	        fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
-            if (fd_oemapp_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp_b;
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_oemapp_b;
-			fd_write = fd_oemapp_a;
-		} else {
-			fd_read  = fd_oemapp_a;
-			fd_write = fd_oemapp_b;
-		}
-
-
-		fota_status.ota_run = PATCH_OEMAPP;
-        fota_status.update_status[PATCH_OEMAPP-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_OEMAPP-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_OEMAPP;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading oemapp.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: oemapp upgrade result:%d\n",status);
-
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_OEMAPP-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_OEMAPP-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP-1].check_rom = ERROR;
-
-		}else{
-
-			//fota_status.update_status[PATCH_OEMAPP -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_OEMAPP -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-	        mtk_device_wrap_close(fd_read);
-			mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-
-    if ((da_head.oemapp2>0) && (up_info.ota_run <= PATCH_OEMAPP2))
-	{
-
-        now_patch = PATCH_OEMAPP2;
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp;
-
-		
-		if (up_info.ota_run == PATCH_OEMAPP2) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-		if(current_slot==SLOT_B) {
-		    system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
-		} else {
-			system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
-		}
-//        if(current_slot==SLOT_B) {
-	        fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
-            if (fd_oemapp2_a < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp2_a;
-//		}else{
-	        fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
-            if (fd_oemapp2_b < 0) {
-                err = errno;
-                LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-//			fd_curr = fd_oemapp2_b;
-//		}
-
-		if(current_slot==SLOT_B){
-			fd_read  = fd_oemapp2_b;
-			fd_write = fd_oemapp2_a;
-		} else {
-			fd_read  = fd_oemapp2_a;
-			fd_write = fd_oemapp2_b;
-		}
-
-
-		fota_status.ota_run = PATCH_OEMAPP2;
-        fota_status.update_status[PATCH_OEMAPP2-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_OEMAPP2-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_OEMAPP2;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-
-        LYVERBLOG("+[UA]: Start upgrading oemapp2.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: oemapp2 upgrade result:%d\n",status);
-
-		up_info.ota_run = 0;
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_OEMAPP2-1].update_result= status; 
-		fota_status.update_result= status;
-
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = PASS;
-
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_OEMAPP2-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_OEMAPP2-1].check_rom = ERROR;
-
-		}else{
-
-			//fota_status.update_status[PATCH_OEMAPP2 -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_OEMAPP2 -1].check_rom = WAIT;
-		}
-
-		save_fota_status();
-
-
-		if ((status != 0) &&(status != 1))
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
-            mtk_device_wrap_close(fd_read);
-            mtk_device_wrap_close(fd_write);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_read);
-		mtk_device_wrap_close(fd_write);
-
-
-    }
-#endif
-    if ((da_head.bl33>0) && (up_info.ota_run <= PATCH_BL33))
-	{
-
-        now_patch = PATCH_BL33;
-		
-#ifdef GSW_FOTA_CFG
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta + da_head.oemapp + da_head.oemapp2;
-#endif
-#ifdef MOBILETEK_FOTA_CFG
-        delta_offset = DELTA_HEARD_SIZE + da_head.sys + da_head.boot + da_head.tee + da_head.md1img + da_head.md1dsp + da_head.vbmeta;
-#endif
-		if (up_info.ota_run == PATCH_BL33) 
-		{
-			ctx.first_run = 0;
-
-		}else{
-		    ctx.first_run = 1;
-		}
-
-
-
-	    fd_bl33 = mtk_device_wrap_open(DEV_BL33,O_RDWR);
-        if (fd_bl33 < 0) {
-            err = errno;
-            LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-            lynq_fota_release_wake_lock();
-            return -err;
-        }
-	    fd_curr = fd_bl33;
-
-		fota_status.ota_run = PATCH_BL33;
-        fota_status.update_status[PATCH_BL33-1].check_delta = WAIT;
-		fota_status.update_status[PATCH_BL33-1].check_rom = WAIT;
-		fota_status.update_status[PATCH_BL33-1].update_result= WAIT;
-
-		save_fota_status();
-		
-		up_info.ota_run = PATCH_BL33;
-
-		lseek(fd_update_status,0,SEEK_SET);
-	    write(fd_update_status, &up_info,sizeof(up_info));
-		sync();
-		
-        LYVERBLOG("+[UA]: Start upgrading bl33.\n");
-        status = iot_patch(&ctx);
-		LYVERBLOG("+[UA]: bl33 upgrade result:%d\n",status);
-        
-		up_info.ota_run = 0;
-		
-        //fota_status.ota_run = 0;
-		fota_status.update_status[PATCH_BL33-1].update_result= status; 
-        fota_status.update_result= status;
-        if((status == 0)||(status ==1))
-        {
-
-            fota_status.update_status[PATCH_BL33-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = PASS;
-               
-		}else if(status == E_ROCK_INVALID_DELTA) {
-            fota_status.update_status[PATCH_BL33-1].check_delta = ERROR;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = WAIT;
-		}else if((status == E_ROCK_DELTA_MISMATCH)||(status == E_ROCK_DELTA_CHUNK_MISMATCH)) {
-            fota_status.update_status[PATCH_BL33-1].check_delta = PASS;
-		    fota_status.update_status[PATCH_BL33-1].check_rom = ERROR;
-
-		}else{
-		
-			//fota_status.update_status[PATCH_BL33 -1].check_delta = PASS;
-			//fota_status.update_status[PATCH_BL33 -1].check_rom = WAIT;
-		}
-
-		save_fota_status();		
-
-		if ((status != 0) &&(status != 1))
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-	        mtk_device_wrap_close(fd_curr);
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-        mtk_device_wrap_close(fd_curr);
-
-    }
-		
-
-    
-	//if(current_slot==SLOT_B)
-		
-#ifdef GSW_FOTA_CFG
-	if ((da_head.full_sys>0)|| (da_head.full_boot>0)|| (da_head.full_tee>0)||(da_head.full_md1img>0)||(da_head.full_md1dsp>0)||(da_head.full_vbmeta>0)||(da_head.full_oemapp>0)||(da_head.full_oemapp2>0)||(da_head.full_bl33>0))
-#endif
-    
-#ifdef MOBILETEK_FOTA_CFG
-	if ((da_head.full_sys>0)|| (da_head.full_boot>0)|| (da_head.full_tee>0)||(da_head.full_md1img>0)||(da_head.full_md1dsp>0)||(da_head.full_vbmeta>0)||(da_head.full_bl33>0))
-#endif
-	{
-
-	    now_patch = 0;
-		up_info.ota_run = 0;
-		
-		memset(&fota_status,0,sizeof(fota_status));
-		fota_status.switch_slot = WAIT;
-		save_fota_status();
-		
-	    if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
-            err = errno;
-            RLOGD("+[UA]: mtk_device_wrap_seek df_delta err\n");
-            lynq_fota_release_wake_lock();
-		    return -1;
-        }
-		
-	    read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
-		
-
-	    if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
-            RLOGD("+[UA]: invalid full delta header\r\n");
-	        up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = -1;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-	        //mtk_device_wrap_close(fd_curr);
-			sync();
-			close(fd_update_status);
-
-			for (i = FULL_SYSTEM;i<=FULL_BL33;i++){
-                if (fota_status.update_status[i-1].need_update ==1) {
-                    fota_status.ota_run = i;
-					fota_status.update_status[i-1].check_delta = ERROR;
-					fota_status.update_status[i-1].check_rom= WAIT;
-					fota_status.update_status[i-1].update_result= ERROR;
-				}
-			}
-            fota_status.update_result = ERROR;
-			save_fota_status();
-            lynq_fota_release_wake_lock();
-	        return -1;
-	    }
-	}
-	
-	
-
-	
-	
-	if(da_head.full_sys>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/system_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/system_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
-            if (fd_system_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_system_a;
-		}else{
-	        fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
-            if (fd_system_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_system_b;			
-		}
-        fota_status.ota_run = FULL_SYSTEM;
-        save_fota_status();
-		
-		retry_cnt = 0;
-               RLOGD("+[UA]: Start upgrading system full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_sys);
-
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_sys,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_sys,digest_t);
-            retry_cnt++;
-        }while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		
-		mtk_device_wrap_close(fd_curr);
-		
-                RLOGD("+[UA]: system full retry_cnt = %d\n",retry_cnt);
-        
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_SYSTEM_B,DEV_SYSTEM_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_SYSTEM_A,DEV_SYSTEM_B);
-			}
-		}
-		
-                RLOGD("+[UA]: system full upgrade result:%d\n",status);
-
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_SYSTEM-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}		
-		
-	
-	}
-	
-	
-	
-	if(da_head.full_boot>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/boot_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/boot_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
-            if (fd_boot_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_boot_a;
-		}else{
-	        fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
-            if (fd_boot_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_boot_b;					
-		}
-		fota_status.ota_run = FULL_BOOT;
-        save_fota_status();
-        retry_cnt = 0;
-                RLOGD("+[UA]: Start upgrading boot full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_boot);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_boot,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_boot,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		
-                RLOGD("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
-		mtk_device_wrap_close(fd_curr);
-		
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_BOOT_B,DEV_BOOT_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_BOOT_A,DEV_BOOT_B);
-			}
-		}
-		
-		
-                RLOGD("+[UA]: boot full upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_BOOT-1].update_result = status;
-		save_fota_status();
-		
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}			
-	
-	}
-	
-	
-	if(da_head.full_tee>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/tee_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/tee_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
-            if (fd_tee_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_tee_a;
-		}else{
-	        fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
-            if (fd_tee_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_tee_b;			
-		}
-		fota_status.ota_run = FULL_TEE;
-        save_fota_status();
-        retry_cnt = 0;
-        RLOGD("+[UA]: Start upgrading tee full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_tee);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_tee,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_tee,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-        RLOGD("+[UA]: tee full retry_cnt = %d\n",retry_cnt);		
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_TEE_B,DEV_TEE_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_TEE_A,DEV_TEE_B);
-			}
-		}
-		
-        RLOGD("+[UA] tee full upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_TEE-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}		
-
-	
-	}
-	
-
-	if(da_head.full_md1img>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot + da_head.full_tee;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/md1img_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/md1img_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
-            if (fd_md1img_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1img_a;
-		}else{
-	        fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
-            if (fd_md1img_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1img_b;			
-		}
-		fota_status.ota_run = FULL_MD1IMG;
-        save_fota_status();
-        retry_cnt = 0;
-        RLOGD("+[UA]: Start upgrading md1img full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_md1img);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1img,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_md1img,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-        RLOGD("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_MD1IMG_B,DEV_MD1IMG_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_MD1IMG_A,DEV_MD1IMG_B);
-			}
-		}
-				
-        RLOGD("+[UA]: md1img upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_MD1IMG-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}
-		
-	
-	if(da_head.full_md1dsp>0) {
-	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot + da_head.full_tee + da_head.full_md1img;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/md1dsp_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/md1dsp_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
-            if (fd_md1dsp_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1dsp_a;
-		}else{
-	        fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
-            if (fd_md1dsp_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_md1dsp_b;			
-		}
-		fota_status.ota_run = FULL_MD1DSP;
-        save_fota_status();
-        retry_cnt = 0;
-        RLOGD("+[UA]: Start upgrading md1dsp full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_md1dsp);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1dsp,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_md1dsp,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-        RLOGD("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_MD1DSP_B,DEV_MD1DSP_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_MD1DSP_A,DEV_MD1DSP_B);
-			}
-		}
-				
-        RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_MD1DSP-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}
-	
-	
-	if(da_head.full_vbmeta>0) {
-#ifdef GSW_FOTA_CFG
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp;
-#endif	
-
-#ifdef MOBILETEK_FOTA_CFG	
-        delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_boot + da_head.full_tee + da_head.full_md1img + da_head.full_md1dsp;
-#endif
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/vbmeta_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/vbmeta_b");
-        }
-	    
-		if(current_slot==SLOT_B) {
-	        fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
-            if (fd_vbmeta_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_vbmeta_a;
-		}else{
-	        fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
-            if (fd_vbmeta_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_vbmeta_b;			
-		}
-		fota_status.ota_run = FULL_VBMETA;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading vbmeta full.\n");
-        do{
-            status = delta_copyto_nand(delta_offset,da_head.full_vbmeta);
-            ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_vbmeta,digest_s);
-            ROCK_SHA_FILE(fd_curr,0,da_head.full_vbmeta,digest_t);
-            retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-		
-		RLOGD("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_VBMETA_B,DEV_VBMETA_A);
-			}
-		    else{
-				nand_copyto_nand(DEV_VBMETA_A,DEV_VBMETA_B);
-			}
-		}
-				
-		RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_VBMETA-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-
-		    up_info.fota_flag[0] = 'e';
-	        up_info.fota_flag[1] = 'n';
-	        up_info.fota_flag[2] = 'd';
-	        up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-			write(fd_update_status, &up_info,sizeof(up_info));
-			sync();
-			close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-		
-	
-	}	
-#ifdef GSW_FOTA_CFG
-	if(da_head.full_oemapp>0) {
-	
-	    delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta;
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp_b");
-        }
-
-		if(current_slot==SLOT_B) {
-	        fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
-            if (fd_oemapp_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_oemapp_a;
-		}else{
-	        fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
-            if (fd_oemapp_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_oemapp_b;			
-		}
-        fota_status.ota_run = FULL_OEMAPP;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading oemapp full.\n");
-        do {       
-		    status = delta_copyto_nand(delta_offset,da_head.full_oemapp);
-		    ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp,digest_s);
-		    ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp,digest_t);
-		    retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-
-		RLOGD("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_OEMAPP_B,DEV_OEMAPP_A);
-			}
-		    else{
-			    nand_copyto_nand(DEV_OEMAPP_A,DEV_OEMAPP_B);
-			}
-		}
-
-		RLOGD("+[UA]: oemapp upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_OEMAPP-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-
-	}
-
-	if(da_head.full_oemapp2>0) {
-
-	    delta_offset = DELTA_HEARD_SIZE + delta_size + DELTA_FULL_HEARD_SIZE + da_head.full_sys + da_head.full_tee  + da_head.full_boot + da_head.full_md1img + da_head.full_md1dsp + da_head.full_vbmeta + da_head.full_oemapp;
-
-
-        if(current_slot==SLOT_B) {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_a");
-        } else {
-            system("flash_eraseall /dev/disk/by-partlabel/oemapp2_b");
-        }
-
-		if(current_slot==SLOT_B) {
-	        fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
-            if (fd_oemapp2_a < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-			fd_curr = fd_oemapp2_a;
-		}else{
-	        fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
-            if (fd_oemapp2_b < 0) {
-                err = errno;
-                RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
-                lynq_fota_release_wake_lock();
-                return -err;
-            }
-		    fd_curr = fd_oemapp2_b;
-		}
-		fota_status.ota_run = FULL_OEMAPP2;
-        save_fota_status();
-        retry_cnt = 0;
-		RLOGD("+[UA]: Start upgrading oemapp2 full.\n");
-        do {
-		    status = delta_copyto_nand(delta_offset,da_head.full_oemapp2);
-		    ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp2,digest_s);
-		    ROCK_SHA_FILE(fd_curr,0,da_head.full_oemapp2,digest_t);
-		    retry_cnt++;
-		}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
-		mtk_device_wrap_close(fd_curr);
-        RLOGD("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
-		if (retry_cnt>3) {
-		    if (status == 0) {
-				status = retry_cnt;
-			}
-			if(current_slot==SLOT_B) {
-			    nand_copyto_nand(DEV_OEMAPP2_B,DEV_OEMAPP2_A);
-			}
-		    else{
-			    nand_copyto_nand(DEV_OEMAPP2_A,DEV_OEMAPP2_B);
-			}
-		}		
-		RLOGD("+[UA]: oemapp2 upgrade result:%d\n",status);
-		fota_status.update_result = status;
-		fota_status.update_status[FULL_OEMAPP2-1].update_result = status;
-		save_fota_status();
-
-		if (status != 0)
-		{
-            up_info.fota_flag[0] = 'e';
-            up_info.fota_flag[1] = 'n';
-            up_info.fota_flag[2] = 'd';
-            up_info.update_result = status;
-            up_info.ota_run = 0;
-            lseek(fd_update_status,0,SEEK_SET);
-            write(fd_update_status, &up_info,sizeof(up_info));
-            sync();
-            close(fd_update_status);
-            lynq_fota_release_wake_lock();
-            return status;
-		}
-	}
-	
-#endif
-	if(da_head.full_bl33>0) {
-		
-	}
-
-
-
-    if(update_mode == MODE_NORMAL){ //need A VS B
-	    if(current_slot == SLOT_A) {
-
-	        up_info.fota_flag[0] = 'B';
-	        up_info.fota_flag[1] = '-';
-	        up_info.fota_flag[2] = 'A';		
-		
-		}else{
-			
-	        up_info.fota_flag[0] = 'A';
-	        up_info.fota_flag[1] = '-';
-	        up_info.fota_flag[2] = 'B';	
-			
-		}
-	
-	}else{
-	    up_info.fota_flag[0] = 'e';
-	    up_info.fota_flag[1] = 'n';
-	    up_info.fota_flag[2] = 'd';		
-		
-	}
-
-
-    up_info.update_result = status;
-    up_info.ota_run = 0;
-    lseek(fd_update_status,0,SEEK_SET);       
-    write(fd_update_status, &up_info,sizeof(up_info));
-    sync();
-#ifdef GSW_FOTA_CFG
-    close_dev_fd(fd_delta);
-#endif 
-
-#ifdef MOBILETEK_FOTA_CFG
-	close(fd_delta);
-#endif
-	
-
-	
-    close(fd_update_status);
-    sync();
-
-    slot = (current_slot == 0) ? 1 : 0;
-    RLOGD("+[UA]: slot SLOT = %d\n",slot);
-#ifdef MOBILETEK_FOTA_CFG
-    if(update_mode==MODE_NORMAL)
-    {
-        module->setActiveBootSlot(module,slot);
-        RLOGD("+[UA]: upgrade is success!!!!\n");
-    }
-#endif
-
-#ifdef GSW_FOTA_CFG
-    module->setActiveBootSlot(module,slot);
-    RLOGD("+[UA]: upgrade is success!!!!\n");
-#endif 
-
-    fota_status.ota_run = 0;
-    fota_status.switch_slot = PASS;
-    fota_status.update_result = status;
-    save_fota_status();
-
-    lynq_fota_release_wake_lock();
-	return status;
+    return ret;
 }
 
 /**
@@ -6506,7 +3053,6 @@
  * @param1 szie:fota addr length
  * @return 0:set success other:set fail
  */
-#ifdef MOBILETEK_FOTA_CFG
 int lynq_fota_set_addr_value(char *value,int size)
 {
     int err = 0;
@@ -6548,29 +3094,7 @@
     sync();
     return 0;
 }
-#endif
 
-#ifdef GSW_FOTA_CFG
-int lynq_fota_set_addr_value(char *value,int size)
-{
-    if(size < 64)
-    {
-        return lynq_set_value(FOTA_UCI_MODULE,FOTA_UCI_ADDR, value);
-    }
-    return -1;
-}
-
-/**
- * @brief get the upgrade package address
- * 
- * @param1 value:fota addr
- * @return 0:get success other:set fail
- */
-int lynq_fota_get_addr_value(char *tmp)
-{
-	return lynq_get_value(FOTA_UCI_FILE, FOTA_UCI_MODULE,FOTA_UCI_ADDR, tmp);
-}
-#endif
 /**
  * @brief The following is the wake up
  * start
@@ -6622,18 +3146,18 @@
 
 /**
  * @brief fota wake lock
- * 
+ *
  * @param1 value:void
  * @return ;
  */
-static void lynq_fota_grab_artial_wake_lock(void) 
+static void lynq_fota_acquire_wake_lock(void)
 {
     acquire_wake_lock(PARTIAL_WAKE_LOCK, ANDROID_WAKE_LOCK_NAME);
 }
 
 /**
  * @brief get the upgrade package address
- * 
+ *
  * @param1 value:void
  * @return ;
  */