[Feature] You can specify the address for obtaining the upgrade package(The third party code )

Change-Id: I294c21d33d84d53c700598624e6863737ae97414
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
old mode 100644
new mode 100755
index 339e4e1..492f15a
--- 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"
+DEPENDS += "bootctrl nandapi liblynq-protcl liblynq-log liblynq-uci"
 
 inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-fota"
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/lynq-konoda-nrock/lynq-konoda-nrock.bb b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-konoda-nrock/lynq-konoda-nrock.bb
new file mode 100755
index 0000000..45c1992
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-konoda-nrock/lynq-konoda-nrock.bb
@@ -0,0 +1,48 @@
+inherit externalsrc package
+
+DESCRIPTION = "carota update"
+SECTION = "base"
+#LICENSE = "MediaTekProprietary"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
+
+DEPENDS += "bootctrl liblynq-log liblynq-fota"
+
+inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\
+                'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\
+                'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	if [ "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" ]; then
+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"
+	elif [ "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4" ]; then
+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"
+	elif [ "${PACKAGE_ARCH}" = "cortexa53hf-neon-fp-armv8" ]; then
+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE -mhard-float -mfpu=neon-fp-armv8 -mfloat-abi=hard -mcpu=cortex-a53 -mtune=cortex-a53"
+	else
+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"
+	fi
+}
+
+
+do_install () {
+   install -d ${D}${bindir}/
+
+    if [ -d "${WORKONSRC}" ] ; then
+       install -m 0755 ${S}/lynq-konoda-nrock ${D}${bindir}/
+       install -d ${D}${includedir}
+      fi
+}
+
+addtask bachclean
+do_bachclean () {
+    oe_runmake clean
+}
\ No newline at end of file
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
index eb5569e..7a31269 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
@@ -28,6 +28,7 @@
     liblynq-media \
     lynq-framework-service \
     lynq-konoda-rock \
+    lynq-konoda-nrock \
     lynq-factory-test \
     lynq-function-test \
     lynq-low-power \
diff --git a/src/lynq/lib/liblynq-fota/include/iot_rock.h b/src/lynq/lib/liblynq-fota/include/iot_rock.h
index fbeba75..3fe2427 100755
--- a/src/lynq/lib/liblynq-fota/include/iot_rock.h
+++ b/src/lynq/lib/liblynq-fota/include/iot_rock.h
@@ -17,6 +17,7 @@
 #define E_ROCK_WRITE_BLOCK_ERROR (-12)

 #define E_ROCK_RAM_NOT_ENOUGH (-20)

 #define E_ROCK_INVALID_CTX	(-30)

+#define E_ROCK_FOTA_ADDR (-50)

 

 

 #define PATCH_SYSTEM   (1)

@@ -129,6 +130,10 @@
 ssize_t lynq_nand_write(int fd, void *buf, size_t count);

 int lynq_nand_close(int fd);

 int lynq_get_upgrade_status(void);

+void lynq_reboot_device(void);

+int lynq_fota_nrestart(void);

+int lynq_fota_set_addr_value(char *value,int size);

+int lynq_fota_get_addr_value(char *tmp);

 #endif

 

 

diff --git a/src/lynq/lib/liblynq-fota/makefile b/src/lynq/lib/liblynq-fota/makefile
old mode 100644
new mode 100755
index dfdb8f6..b460dbc
--- a/src/lynq/lib/liblynq-fota/makefile
+++ b/src/lynq/lib/liblynq-fota/makefile
@@ -34,6 +34,7 @@
     -lbootctrl  \
     -llynq-log \
     -llynq-protcl \
+    -llynq-uci \
 
 SOURCES = $(wildcard *.c wildcard *.h rock_ua/*.c  MD5/*c)
 
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 50b3c37..8a80ac2 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -30,6 +30,7 @@
 
 #include "liblog/lynq_deflog.h"
 #include "mtk_device_wrap.h"
+#include <include/lynq_uci.h>
 
 #define ROCK_DEFAULT_BLOCK_SIZE 0x40000
 #define ROCK_RAM_LEN  (1024*1024)
@@ -69,6 +70,9 @@
 #define DEV_DELTA       "/dev/mtd41"	
 #endif
 
+#define FOTA_UCI_MODULE "lynq_fota"
+#define FOTA_UCI_FILE "lynq_uci"
+#define FOTA_UCI_ADDR "lynq_fota_addr"
 
 #define FILE_UPDATE_STATE  "/data/.update_status"
 #define FILE_FOTA_STATE    "/data/.fota_status"
@@ -292,7 +296,7 @@
     int ret = 0,err = 0;
 	
     
-    if (mtk_device_wrap_seek(fd_delta, offset + delta_offset, SEEK_SET) < 0) {
+    if (lseek(fd_delta, offset + delta_offset, SEEK_SET) < 0) {
         err = -errno;
         rock_trace(ctx, "mtk_device_wrap_seek df_delta err\n");
 		return err;
@@ -300,7 +304,7 @@
 
     do {
 
-        ret = mtk_device_wrap_read(fd_delta, dest, size);
+        ret = read(fd_delta, dest, size);
 
         if (ret == 0) {
             break;
@@ -311,7 +315,7 @@
             err = -errno;
             rock_trace(ctx," Error reading metadata file\n");
 
-            mtk_device_wrap_close(fd_delta);
+            close(fd_delta);
 
             return err;
         }
@@ -338,9 +342,14 @@
 {
 
     int err;
-
+    char lynq_fota_addr[64] = {0};
+    if(0 != lynq_fota_get_addr_value(lynq_fota_addr))
+    {
+        return E_ROCK_FOTA_ADDR;
+    }
+    LYERRLOG("+[UA]: get fota pack addr: %s\n",lynq_fota_addr);
     //fd_delta = mtk_device_wrap_open(DEV_DELTA,O_RDONLY);
-    fd_delta = mtk_device_wrap_open(DEV_DELTA,O_RDWR);
+    fd_delta = open(lynq_fota_addr,O_RDWR);
 
     if (fd_delta < 0) {
         err = errno;
@@ -366,7 +375,7 @@
 
 static int close_dev_fd(int fd)
 {
-    mtk_device_wrap_close(fd);
+    close(fd);
 }
 
 
@@ -451,7 +460,7 @@
 	int err;
 
 
-	if (mtk_device_wrap_seek(fd_delta, start, SEEK_SET) < 0) {
+	if (lseek(fd_delta, start, SEEK_SET) < 0) {
         LYERRLOG("+[UA]: delta_copyto_nand seek err\n");
 		return -1;
     }
@@ -464,7 +473,7 @@
  
     do {
 
-        ret = mtk_device_wrap_read(fd_delta, delta_data, NAND_PAGE_SIZE);
+        ret = read(fd_delta, delta_data, NAND_PAGE_SIZE);
 
         if (ret == 0) {
             break;
@@ -559,9 +568,11 @@
     //ctx.first_run = first_run;
     ctx.first_run = 1;
 
-	
-    init_dev_fd();
-	
+    if(0 != init_dev_fd())
+    {
+        LYVERBLOG("+[UA]: get fota addr error\n");
+        return E_ROCK_FOTA_ADDR;
+    }
 
     memset(&up_info, 0, sizeof(up_info));
 	
@@ -594,7 +605,7 @@
 	
     memset(&da_head, 0, sizeof(da_head));
 
-	mtk_device_wrap_read(fd_delta, (unsigned char*)&da_head, 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.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.bl33);
@@ -1491,13 +1502,13 @@
 		fota_status.switch_slot = WAIT;
 		save_fota_status();
 		
-	    if (mtk_device_wrap_seek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
+	    if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
             err = errno;
             LYERRLOG("+[UA]: mtk_device_wrap_seek df_delta err\n");
 		    return -1;
         }
 		
-		mtk_device_wrap_read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
+		read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
 		
 
 	    if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
@@ -2093,25 +2104,25 @@
 
 int lynq_nand_open(const char *pathname, int flags)
 {
-    printf("pathname:%s---flags:%d",pathname,flags);
-    return mtk_device_wrap_open(pathname,flags);
+//    printf("pathname:%s---flags:%d",pathname,flags);
+    return open(pathname,flags);
 }
 
 ssize_t lynq_nand_read(int fd, void *buf, size_t count)
 {
-    printf("rfd:%d---buf:%s---count:%d",fd,buf,count);
-    return mtk_device_wrap_read(fd,buf,count);
+//    printf("rfd:%d---buf:%s---count:%d",fd,buf,count);
+    return read(fd,buf,count);
 }
 
 ssize_t lynq_nand_write(int fd, void *buf, size_t count)
 {
-    printf("wfd:%d---buf:%s---count:%d",fd,buf,count);
-    return mtk_device_wrap_write(fd,buf,count);
+ //   printf("wfd:%d---buf:%s---count:%d",fd,buf,count);
+    return write(fd,buf,count);
 }
 
 int lynq_nand_close(int fd)
 {
-    return mtk_device_wrap_close(fd);
+    return close(fd);
 }
 
 /**
@@ -2224,9 +2235,11 @@
     //ctx.first_run = first_run;
     ctx.first_run = 1;
 
-	
-    init_dev_fd();
-	
+    if(0 != init_dev_fd())
+    {
+        LYVERBLOG("+[UA]: get fota addr error\n");
+        return E_ROCK_FOTA_ADDR;
+    }
 
     memset(&up_info, 0, sizeof(up_info));
 	
@@ -2259,7 +2272,7 @@
 	
     memset(&da_head, 0, sizeof(da_head));
 
-	mtk_device_wrap_read(fd_delta, (unsigned char*)&da_head, 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.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.bl33);
@@ -3156,13 +3169,13 @@
 		fota_status.switch_slot = WAIT;
 		save_fota_status();
 		
-	    if (mtk_device_wrap_seek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
+	    if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
             err = errno;
             LYERRLOG("+[UA]: mtk_device_wrap_seek df_delta err\n");
 		    return -1;
         }
 		
-		mtk_device_wrap_read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
+	    read(fd_delta, full_header, DELTA_FULL_HEARD_SIZE);
 		
 
 	    if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
@@ -3682,4 +3695,31 @@
     save_fota_status();
 	
 	return status;
-}
\ No newline at end of file
+}
+
+/**
+ * @brief Set the upgrade package address
+ * 
+ * @param1 value:fota addr
+ * @param1 szie:fota addr length
+ * @return 0:set success other:set fail
+ */
+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);
+}
+
diff --git a/src/lynq/lib/liblynq-uci/lynq_uci.config b/src/lynq/lib/liblynq-uci/lynq_uci.config
old mode 100644
new mode 100755
index f19ffc1..6e1a5be
--- a/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -13,3 +13,5 @@
 config  lynq_autosuspend  'lynq_autosuspend'

         option auto_enable '0'

         option debug '1'

+

+config  lynq_fota_rw  'lynq_fota'
\ No newline at end of file
diff --git a/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/main.c b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/main.c
new file mode 100755
index 0000000..3855f4f
--- /dev/null
+++ b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/main.c
@@ -0,0 +1,123 @@
+#include <stdio.h>
+#include "include/iot_rock.h"
+#include "fcntl.h"
+
+#include "liblog/lynq_deflog.h"
+
+//lynq_ftp_socker_info ftp_log_info;
+
+#define USER_LOG_TAG "UA_UP"
+
+
+#define UPDATA_ADDR "/tmp/fota.delta"
+#define READ_BLOCK_SIZE 0x40000
+#if 0
+#define FLASH_DEV_DELTA       "/dev/disk/by-partlabel/delta"
+#else
+#define FLASH_DEV_DELTA       "/dev/mtd41"	
+#endif
+
+
+int main(int argc,char argv[])
+{
+    
+    int lynq_upgrade_state = 0;
+    int first_run = 1; 
+    int ret = 0;
+    int fd_down,size,fd_target;
+    char input_md5_data[64];
+    char input_order_data[64];
+    char delta_data[READ_BLOCK_SIZE];
+    char lynq_fota_data[64] = {0};
+	
+   LYLOGEINIT(USER_LOG_TAG);
+   LYLOGSET(4);
+/*
+   ftp_log_info.portnum = 6521;
+
+
+   sprintf(ftp_log_info.sevname,"58.246.1.50");
+   sprintf(ftp_log_info.username,"VEH_USER_SWAP");
+   sprintf(ftp_log_info.pw,"user_swap_file_0129");
+   sprintf(ftp_log_info.getfilename,"fota.delta");
+   sprintf(ftp_log_info.getfilename_path,"/FOTA/UpFile/");
+
+   sprintf(ftp_log_info.is_pasv_mode,"pasv");
+   sprintf(ftp_log_info.file_type,"A");
+   sprintf(ftp_log_info.put_opt,"APPE");
+
+   LYVERBLOG("[+UP]: Download the FTP data\n");
+   lynq_ftp_login(&ftp_log_info);
+   lynq_ftp_download(&ftp_log_info);
+   LYVERBLOG("[+UP]: Download the FTP data success\n");
+*/
+
+    lynq_upgrade_state = lynq_get_upgrade_status();
+    LYVERBLOG("[+UP]:Upgrade state:%d",lynq_upgrade_state);
+
+    LYVERBLOG("[+UP]: input MD5 data:");	
+    while(fgets(input_md5_data,64,stdin) != NULL)
+    {
+        LYVERBLOG("[+UP]: receive MD5 data:%s\n",input_md5_data);
+        ret = lynq_md5_file_verfy(UPDATA_ADDR, input_md5_data);
+        break;
+    }
+
+    fd_down = open(UPDATA_ADDR,O_RDONLY);
+    if (fd_down < 0)
+    {
+        LYVERBLOG("[+UP]: open source  error\n");
+        return 1;
+    }
+
+    fd_target = lynq_nand_open(FLASH_DEV_DELTA,O_RDWR);
+
+    if (fd_target < 0) 
+    {
+        lynq_nand_close(fd_target);
+        close(fd_down);
+        LYERRLOG("+[UA]: open target  error\n");
+        return 1;
+    } 
+
+    LYVERBLOG("[+UP]: Write data to flash\n");
+    while(( size = read(fd_down,delta_data,READ_BLOCK_SIZE))>0) {
+    	   lynq_nand_write(fd_target,delta_data,READ_BLOCK_SIZE);
+    }
+    LYVERBLOG("[+UP]: Write data to flash success\n");
+
+    lynq_nand_close(fd_target);
+    close(fd_down);
+
+    if(0 == lynq_fota_set_addr_value(FLASH_DEV_DELTA,10))
+    {
+        lynq_fota_get_addr_value(lynq_fota_data);
+        LYVERBLOG("+[UA]: get fota addr:%s\n",lynq_fota_data);
+    }
+    else
+    {
+        LYVERBLOG("+[UA]: get fota addr error\n");
+        return -1;
+    }
+
+    sleep(10);
+    
+    LYVERBLOG("+[UA]: Upgrade to start ret:%d\n",ret);
+    if(ret == 0)
+    {
+    	lynq_fota_nrestart();
+    }
+    LYVERBLOG("+[UA]: Upgrade to end\n");
+
+    LYVERBLOG("+[UA]: input reboot order(reboot):\n");
+    while(fgets(input_order_data,64,stdin) != NULL)
+    {
+        if(0 == strncmp(input_order_data,"reboot",6))
+        {
+            lynq_reboot_device();
+        }
+    }
+    
+    return 0;
+
+}
diff --git a/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/makefile b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/makefile
new file mode 100755
index 0000000..f6c5348
--- /dev/null
+++ b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-nrock/src/makefile
@@ -0,0 +1,54 @@
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+                -Os \
+                -flto \
+                -fpermissive \
+
+    LOCAL_CFLAGS += -fPIC -O2 $(INCLUDE) -D_LARGEFILE64_SOURCE
+
+$(warning ################# rock ROOT: $(ROOT),includedir:$(includedir))
+LOCAL_PATH   = .
+
+LOCAL_C_INCLUDES = \
+  -I. \
+  -I$(ROOT)$(includedir) \
+  -I$(ROOT)$(includedir)/logger \
+  -I$(ROOT)$(includedir)/liblog \
+  -I$(ROOT)$(includedir)/glib-2.0 \
+  -I$(ROOT)$(libdir)/glib-2.0/include \
+
+
+
+LOCAL_LIBS := \
+    -L. \
+    -L./lib \
+    -llog \
+    -lstdc++ \
+    -lbootctrl  \
+    -llynq-log \
+    -llynq-fota \
+
+SOURCES = $(wildcard *.c wildcard *.h)
+
+EXECUTABLE = lynq-konoda-nrock
+
+OBJECTS=$(SOURCES:.c=.o)
+
+
+.PHONY: build clean install pack_rootfs 
+
+all: build
+$(EXECUTABLE): $(OBJECTS)
+	$(CXX) $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.c
+	$(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $< 
+
+build:  $(EXECUTABLE)
+	$(warning ########## build $(EXECUTABLE)  ##########)
+
+.PHONY: clean
+clean:
+	$(RM) $(OBJECTS) $(EXECUTABLE)
diff --git a/src/lynq/packages/thirdpart/Konoda/lynq-konoda-rock/src/main.c b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-rock/src/main.c
index 6a76781..5a1f166 100755
--- a/src/lynq/packages/thirdpart/Konoda/lynq-konoda-rock/src/main.c
+++ b/src/lynq/packages/thirdpart/Konoda/lynq-konoda-rock/src/main.c
@@ -17,6 +17,8 @@
 #define FLASH_DEV_DELTA       "/dev/mtd41"	
 #endif
 
+#define EMMC_DEV_DELTA      "/dev/mmcblk0"
+
 int main(int argc,char argv[])
 {
     
@@ -26,6 +28,7 @@
     int fd_down,size,fd_target;
     char input_md5_data[64];
     char delta_data[READ_BLOCK_SIZE];
+    char lynq_fota_data[64] = {0};
 	
    LYLOGEINIT(USER_LOG_TAG);
    LYLOGSET(4);
@@ -48,6 +51,7 @@
    lynq_ftp_download(&ftp_log_info);
    LYVERBLOG("[+UP]: Download the FTP data success\n");
 */
+
     lynq_upgrade_state = lynq_get_upgrade_status();
     LYVERBLOG("[+UP]:Upgrade state:%d",lynq_upgrade_state);
 
@@ -60,37 +64,52 @@
     }
 
     fd_down = open(UPDATA_ADDR,O_RDONLY);
-    if (fd_down < 0) {
-    	LYVERBLOG("[+UP]: open source  error\n");
+    if (fd_down < 0)
+    {
+        LYVERBLOG("[+UP]: open source  error\n");
         return 1;
     }
 
-    fd_target = lynq_nand_open(FLASH_DEV_DELTA,O_RDWR);
- 
-    if (fd_target < 0) {
+    fd_target = lynq_nand_open(EMMC_DEV_DELTA,O_RDWR);
+
+    if (fd_target < 0) 
+    {
         lynq_nand_close(fd_target);
-	    close(fd_down);
-	LYERRLOG("+[UA]: open target  error\n");
+        close(fd_down);
+        LYERRLOG("+[UA]: open target  error\n");
         return 1;
     } 
 
-	LYVERBLOG("[+UP]: Write data to flash\n");
-	while(( size = read(fd_down,delta_data,READ_BLOCK_SIZE))>0) {
+    LYVERBLOG("[+UP]: Write data to flash\n");
+    while(( size = read(fd_down,delta_data,READ_BLOCK_SIZE))>0) {
     	   lynq_nand_write(fd_target,delta_data,READ_BLOCK_SIZE);
     }
-	LYVERBLOG("[+UP]: Write data to flash success\n");
-	
-	lynq_nand_close(fd_target);
-	close(fd_down);
+    LYVERBLOG("[+UP]: Write data to flash success\n");
+
+    lynq_nand_close(fd_target);
+    close(fd_down);
+
+    if(0 == lynq_fota_set_addr_value(EMMC_DEV_DELTA,13))
+    {
+        lynq_fota_get_addr_value(lynq_fota_data);
+        LYVERBLOG("+[UA]: get fota addr:%s\n",lynq_fota_data);
+    }
+    else
+    {
+        LYVERBLOG("+[UA]: get fota addr error\n");
+        return -1;
+    }
+
+    sleep(10);
 
     LYVERBLOG("+[UA]: Upgrade to start ret:%d\n",ret);
-//	if(ret == 0)
-	{
-		lynq_rock_main(first_run);
-	}
+    if(ret == 0)
+    {
+    	lynq_rock_main(first_run);
+    }
     LYVERBLOG("+[UA]: Upgrade to end\n");
-  
-  return 0;
+
+    return 0;
 
 }