[Bugfix][API-1103][FOTA]medmcu and bl33 fota upgrade
Change-Id: I7e92c81d38dd115f1dcd07b6d16f048fd46c636b
diff --git a/src/lynq/lib/liblynq-fota/include/iot_rock.h b/src/lynq/lib/liblynq-fota/include/iot_rock.h
index aa7236d..e757a42 100755
--- a/src/lynq/lib/liblynq-fota/include/iot_rock.h
+++ b/src/lynq/lib/liblynq-fota/include/iot_rock.h
@@ -28,18 +28,22 @@
#define PATCH_VBMETA (6)
#define PATCH_OEMAPP (7)
#define PATCH_OEMAPP2 (8)
-#define PATCH_BL33 (9)
-#define FULL_SYSTEM (10)
-#define FULL_BOOT (11)
-#define FULL_TEE (12)
-#define FULL_MD1IMG (13)
-#define FULL_MD1DSP (14)
-#define FULL_VBMETA (15)
-#define FULL_OEMAPP (16)
-#define FULL_OEMAPP2 (17)
-#define FULL_BL33 (18)
+#define PATCH_MEDMCU (9)
+#define PATCH_BL33 (10)
+#define PATCH_RESERVE (11)
+#define FULL_SYSTEM (12)
+#define FULL_BOOT (13)
+#define FULL_TEE (14)
+#define FULL_MD1IMG (15)
+#define FULL_MD1DSP (16)
+#define FULL_VBMETA (17)
+#define FULL_OEMAPP (18)
+#define FULL_OEMAPP2 (19)
+#define FULL_MEDMCU (20)
+#define FULL_BL33 (21)
+#define FULL_RESERVE (22)
-#define MAX_OTA_ROLE (18)
+#define MAX_OTA_ROLE (22)
@@ -76,7 +80,9 @@
unsigned int vbmeta; //vbmeta 差分包大小
unsigned int oemapp;
unsigned int oemapp2;
+ unsigned int medmcu;
unsigned int bl33; //bl33 差分包大小
+ unsigned int reserve;
unsigned int full_sys; //system 整包大小
unsigned int full_boot; //boot
unsigned int full_tee; //tee 整包大小
@@ -85,7 +91,9 @@
unsigned int full_vbmeta; //vbmeta 整包大小
unsigned int full_oemapp;
unsigned int full_oemapp2;
+ unsigned int full_medmcu;
unsigned int full_bl33; //bl33 整包大小
+ unsigned int full_reserve;
} DELTA_HEAD;
typedef struct {
@@ -121,7 +129,7 @@
//#define DELTA_HEARD_SIZE (4*5)
-#define DELTA_HEARD_SIZE (4*9 + 4*9)
+#define DELTA_HEARD_SIZE (4*11 + 4*11)
#define DELTA_FULL_HEARD_SIZE 8
@@ -130,7 +138,6 @@
unsigned int iot_hash(unsigned char *buf,unsigned int len, unsigned int* value);
int lynq_md5_file_verfy(char* filePath, char* file_md5);
-//int md5_file_verfy_new(char* filePath, char* file_md5,int packe_len);
int lynq_rock_main(int first_run);
int lynq_fota_func(void);
int lynq_nand_open(const char *pathname, int flags);
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 a22752c..4106d5c 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -68,6 +68,12 @@
#define DEV_MISC "/dev/disk/by-partlabel/misc"
+#define DEV_MEDMCU_A "/dev/mtd32"
+#define DEV_MEDMCU_B "/dev/mtd33"
+
+#define DEV_BL33_A "/dev/disk/by-partlabel/bl33_a"
+#define DEV_BL33_B "/dev/disk/by-partlabel/bl33_b"
+
//#define DEV_DELTA "/dev/disk/by-partlabel/delta"
#if 0
@@ -98,7 +104,7 @@
-int fd_system_a,fd_system_b,fd_boot_a,fd_boot_b,fd_tee_a,fd_tee_b,fd_bl2,fd_bl33,fd_delta,fd_curr,fd_log,fd_update_status,fd_md1img_a,fd_md1img_b,fd_fota_status,fd_md1dsp_a,fd_md1dsp_b,fd_vbmeta_a,fd_vbmeta_b,fd_oemapp_a,fd_oemapp_b,fd_oemapp2_a,fd_oemapp2_b;
+int fd_system_a,fd_system_b,fd_boot_a,fd_boot_b,fd_tee_a,fd_tee_b,fd_bl2,fd_bl33,fd_delta,fd_curr,fd_log,fd_update_status,fd_md1img_a,fd_md1img_b,fd_fota_status,fd_md1dsp_a,fd_md1dsp_b,fd_vbmeta_a,fd_vbmeta_b,fd_oemapp_a,fd_oemapp_b,fd_oemapp2_a,fd_oemapp2_b,fd_medmcu_a,fd_medmcu_b,fd_bl33_a,fd_bl33_b;
int fd_write,fd_read;
static unsigned int delta_offset = 0;
@@ -118,6 +124,27 @@
static void lynq_fota_grab_artial_wake_lock(void);
static void lynq_fota_release_wake_lock(void);
+
+static const char hex_chars[] = "0123456789abcdef";
+
+
+void convert_hex(unsigned char *sha, unsigned char *shastr)
+{
+ int i;
+ int j = 0;
+ unsigned int c;
+
+ for (i = 0; i < 20; i++) {
+ c = (sha[i] >> 4) & 0x0f;
+ shastr[j++] = hex_chars[c];
+ shastr[j++] = hex_chars[sha[i] & 0x0f];
+ }
+ shastr[40] = '\0';
+}
+
+
+
+
int rock_mismatch(void* ctx, unsigned char* buf, unsigned int start, unsigned int size,
unsigned int source_hash,unsigned int target_hash) {
@@ -136,7 +163,7 @@
vsnprintf(rock_debug_buffer,sizeof(rock_debug_buffer),fmt,ap);
- LYDBGLOG("+[UA]: %s",rock_debug_buffer);
+ RLOGD("+[ROCK_TRACE]: %s",rock_debug_buffer);
va_end (ap);
@@ -164,14 +191,19 @@
void rock_progress(void* ctx, int percent) {
int i = 0;
+ static int tmp_percent = -1;
rock_trace(ctx, "rock update progress %d\n", percent);
- if (percent > 20) {
- i = fota_status.ota_run;
- if (fota_status.update_status[i-1].check_delta != PASS) {
- fota_status.update_status[i-1].check_delta = PASS;
- fota_status.update_status[i-1].check_rom= PASS;
- save_fota_status();
- }
+
+ if (tmp_percent != percent) {
+ tmp_percent = percent;
+ if (percent > 20) {
+ i = fota_status.ota_run;
+ if (fota_status.update_status[i-1].check_delta != PASS) {
+ fota_status.update_status[i-1].check_delta = PASS;
+ fota_status.update_status[i-1].check_rom= PASS;
+ save_fota_status();
+ }
+ }
}
}
@@ -470,12 +502,12 @@
if (lseek(fd_delta, start, SEEK_SET) < 0) {
- LYERRLOG("+[UA]: delta_copyto_nand seek err\n");
+ 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");
+ RLOGD("+[UA]: delta_copyto_nand seek err\n");
return -1;
}
@@ -512,7 +544,9 @@
-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) {
+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 reboot_flag) {
int status,err,start;
int ret = 0;
int i = 0;
@@ -532,6 +566,9 @@
char digest_s[SHA_DIGEST_SIZE];
char digest_t[SHA_DIGEST_SIZE];
+ char str_sha[40];
+
+ int sha_size = 0;
hw_module = &HAL_MODULE_INFO_SYM;
@@ -646,6 +683,9 @@
if (da_head.oemapp2>0) {
fota_status.update_status[PATCH_OEMAPP2 - 1].need_update = 1;
}
+ if (da_head.medmcu>0) {
+ fota_status.update_status[PATCH_MEDMCU - 1].need_update = 1;
+ }
if (da_head.bl33>0) {
fota_status.update_status[PATCH_BL33 - 1].need_update = 1;
}
@@ -677,11 +717,51 @@
if (da_head.full_oemapp2>0) {
fota_status.update_status[FULL_OEMAPP2 - 1].need_update = 1;
}
+ if (da_head.full_medmcu>0) {
+ fota_status.update_status[FULL_MEDMCU - 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;
+ 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.medmcu+da_head.bl33;
+ sha_size = 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_medmcu+da_head.full_bl33;
+
+ if(sha_size>0) {
+
+ sha_size+=8;
+ }
+
+ sha_size+=delta_size;
+
+ memset(digest_s,0,SHA_DIGEST_SIZE);
+ memset(digest_t,0,SHA_DIGEST_SIZE);
+ memset(str_sha,0,40);
+
+ lseek(fd_delta, sha_size + sizeof(da_head), SEEK_SET);
+ read(fd_delta, digest_s, SHA_DIGEST_SIZE);
+ convert_hex(digest_s,str_sha);
+ RLOGD("+[UA]: delta save sha = %s\n",str_sha);
+
+ ROCK_SHA_FILE_COMMON(fd_delta,sizeof(da_head),sha_size,digest_t);
+ memset(str_sha,0,40);
+ convert_hex(digest_t,str_sha);
+ RLOGD("+[UA]: delta calc sha = %s\n",str_sha);
+
+ if(memcmp(digest_s,digest_t,SHA_DIGEST_SIZE)==0) {
+
+ RLOGD("sha verify pass\n");
+
+ }else{
+ RLOGD("delta sha verify fial!\n");
+
+ lynq_fota_release_wake_lock();
+ return -1;
+
+ }
+
+ memset(digest_s,0,SHA_DIGEST_SIZE);
+ memset(digest_t,0,SHA_DIGEST_SIZE);
if ((da_head.sys>0) && (up_info.ota_run <= PATCH_SYSTEM))
{
@@ -705,7 +785,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
return -err;
}
fd_curr = fd_system_a;
@@ -713,7 +793,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
return -err;
}
fd_curr = fd_system_b;
@@ -1472,7 +1552,7 @@
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;
}
@@ -1481,7 +1561,7 @@
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;
}
@@ -1589,7 +1669,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1598,7 +1678,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1679,15 +1759,16 @@
}
+
- if ((da_head.bl33>0) && (up_info.ota_run <= PATCH_BL33))
+ if ((da_head.medmcu>0) && (up_info.ota_run <= PATCH_MEDMCU))
{
- 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;
+ now_patch = PATCH_MEDMCU;
+ 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)
+
+ if (up_info.ota_run == PATCH_MEDMCU)
{
ctx.first_run = 0;
@@ -1697,58 +1778,83 @@
- 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;
+ if(current_slot==SLOT_B) {
+ system("flash_eraseall /dev/mtd32");
+ } else {
+ system("flash_eraseall /dev/mtd33");
+ }
+// if(current_slot==SLOT_B) {
+ fd_medmcu_a = mtk_device_wrap_open(DEV_MEDMCU_A,O_RDWR);
+ if (fd_medmcu_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_medmcu_b = mtk_device_wrap_open(DEV_MEDMCU_B,O_RDWR);
+ if (fd_medmcu_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 = 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;
+ if(current_slot==SLOT_B){
+ fd_read = fd_medmcu_b;
+ fd_write = fd_medmcu_a;
+ } else {
+ fd_read = fd_medmcu_a;
+ fd_write = fd_medmcu_b;
+ }
+
+
+ fota_status.ota_run = PATCH_MEDMCU;
+ fota_status.update_status[PATCH_MEDMCU-1].check_delta = WAIT;
+ fota_status.update_status[PATCH_MEDMCU-1].check_rom = WAIT;
+ fota_status.update_status[PATCH_MEDMCU-1].update_result= WAIT;
save_fota_status();
-
- up_info.ota_run = PATCH_BL33;
+
+ up_info.ota_run = PATCH_MEDMCU;
lseek(fd_update_status,0,SEEK_SET);
write(fd_update_status, &up_info,sizeof(up_info));
sync();
-
- RLOGD("+[UA]: Start upgrading bl33.\n");
+
+ LYVERBLOG("+[UA]: Start upgrading medmcu.\n");
status = iot_patch(&ctx);
- RLOGD("+[UA]: bl33 upgrade result:%d\n",status);
-
+ LYVERBLOG("+[UA]: medmcu 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;
+ fota_status.update_status[PATCH_MEDMCU-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");
-
+ fota_status.update_status[PATCH_MEDMCU-1].check_delta = PASS;
+ fota_status.update_status[PATCH_MEDMCU-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;
+ fota_status.update_status[PATCH_MEDMCU-1].check_delta = ERROR;
+ fota_status.update_status[PATCH_MEDMCU-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;
+ fota_status.update_status[PATCH_MEDMCU-1].check_delta = PASS;
+ fota_status.update_status[PATCH_MEDMCU-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;
+ //fota_status.update_status[PATCH_OEMAPP2 -1].check_delta = PASS;
+ //fota_status.update_status[PATCH_OEMAPP2 -1].check_rom = WAIT;
}
- save_fota_status();
+ save_fota_status();
+
if ((status != 0) &&(status != 1))
{
@@ -1759,13 +1865,139 @@
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);
+ mtk_device_wrap_close(fd_read);
+ mtk_device_wrap_close(fd_write);
lynq_fota_release_wake_lock();
return status;
}
- mtk_device_wrap_close(fd_curr);
+ 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 + da_head.medmcu;
+
+
+ if (up_info.ota_run == PATCH_BL33)
+ {
+ ctx.first_run = 0;
+
+ }else{
+ ctx.first_run = 1;
+ }
+
+
+
+ if(current_slot==SLOT_B) {
+ system("flash_eraseall /dev/disk/by-partlabel/bl33_a");
+ } else {
+ system("flash_eraseall /dev/disk/by-partlabel/bl33_b");
+ }
+// if(current_slot==SLOT_B) {
+ fd_bl33_a = mtk_device_wrap_open(DEV_BL33_A,O_RDWR);
+ if (fd_bl33_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_bl33_b = mtk_device_wrap_open(DEV_BL33_B,O_RDWR);
+ if (fd_bl33_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_read = fd_bl33_b;
+ fd_write = fd_bl33_a;
+ } else {
+ fd_read = fd_bl33_a;
+ fd_write = fd_bl33_b;
+ }
+
+
+ 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 medmcu.\n");
+ status = iot_patch(&ctx);
+ LYVERBLOG("+[UA]: medmcu 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_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);
+
}
@@ -1935,7 +2167,7 @@
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));
+ RLOGD("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2320,7 +2552,7 @@
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;
}
@@ -2329,7 +2561,7 @@
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;
}
@@ -2338,7 +2570,7 @@
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);
@@ -2347,7 +2579,7 @@
}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);
+ RLOGD("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2360,7 +2592,7 @@
}
}
- LYVERBLOG("+[UA]: oemapp upgrade result:%d\n",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();
@@ -2398,7 +2630,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2407,7 +2639,7 @@
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));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2416,7 +2648,7 @@
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);
@@ -2425,7 +2657,7 @@
}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);
+ RLOGD("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2438,7 +2670,7 @@
}
}
- LYVERBLOG("+[UA]: oemapp2 upgrade result:%d\n",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();
@@ -2460,9 +2692,161 @@
}
+
+
+ if(da_head.full_medmcu>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 +da_head.full_oemapp2;
+
+
+ if(current_slot==SLOT_B) {
+ system("flash_eraseall /dev/mtd32");
+ } else {
+ system("flash_eraseall /dev/mtd33");
+ }
+
+ if(current_slot==SLOT_B) {
+ fd_medmcu_a = mtk_device_wrap_open(DEV_MEDMCU_A,O_RDWR);
+ if (fd_medmcu_a < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ lynq_fota_release_wake_lock();
+ return -err;
+ }
+ fd_curr = fd_medmcu_a;
+ }else{
+ fd_medmcu_b = mtk_device_wrap_open(DEV_MEDMCU_B,O_RDWR);
+ if (fd_medmcu_b < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ lynq_fota_release_wake_lock();
+ return -err;
+ }
+ fd_curr = fd_medmcu_b;
+ }
+ fota_status.ota_run = FULL_MEDMCU;
+ save_fota_status();
+ retry_cnt = 0;
+ RLOGD("+[UA]: Start upgrading medmcu full.\n");
+ do {
+ status = delta_copyto_nand(delta_offset,da_head.full_medmcu);
+ ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_medmcu,digest_s);
+ ROCK_SHA_FILE(fd_curr,0,da_head.full_medmcu,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]: medmcu 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_MEDMCU_B,DEV_MEDMCU_A);
+ }
+ else{
+ nand_copyto_nand(DEV_MEDMCU_A,DEV_MEDMCU_B);
+ }
+ }
+ RLOGD("+[UA]: medmcu upgrade result:%d\n",status);
+ fota_status.update_result = status;
+ fota_status.update_status[FULL_MEDMCU-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) {
+ 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 +da_head.full_oemapp2 + da_head.full_medmcu;
+
+
+ if(current_slot==SLOT_B) {
+ system("flash_eraseall /dev/disk/by-partlabel/bl33_a");
+ } else {
+ system("flash_eraseall /dev/disk/by-partlabel/bl33_b");
+ }
+
+ if(current_slot==SLOT_B) {
+ fd_bl33_a = mtk_device_wrap_open(DEV_BL33_A,O_RDWR);
+ if (fd_bl33_a < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ lynq_fota_release_wake_lock();
+ return -err;
+ }
+ fd_curr = fd_bl33_a;
+ }else{
+ fd_bl33_b = mtk_device_wrap_open(DEV_BL33_B,O_RDWR);
+ if (fd_bl33_b < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ lynq_fota_release_wake_lock();
+ return -err;
+ }
+ fd_curr = fd_bl33_b;
+ }
+ fota_status.ota_run = FULL_BL33;
+ save_fota_status();
+ retry_cnt = 0;
+ RLOGD("+[UA]: Start upgrading bl33 full.\n");
+ do {
+ status = delta_copyto_nand(delta_offset,da_head.full_bl33);
+ ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_bl33,digest_s);
+ ROCK_SHA_FILE(fd_curr,0,da_head.full_bl33,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]: bl33 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_BL33_B,DEV_BL33_A);
+ }
+ else{
+ nand_copyto_nand(DEV_BL33_A,DEV_BL33_B);
+ }
+ }
+ RLOGD("+[UA]: bl33 upgrade result:%d\n",status);
+ fota_status.update_result = status;
+ fota_status.update_status[FULL_BL33-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;
+ }
+
+
}
@@ -2523,7 +2907,7 @@
lynq_fota_release_wake_lock();
- if(update_mode==MODE_NORMAL){
+ if(reboot_flag==1){
reboot_device();
}
@@ -2536,7 +2920,7 @@
{
int ret = 0;
RLOGD("rock_fail_handler start\n");
- ret = rock_update_main(0, 0, 0, 0, 1, 1);
+ //ret = rock_update_main(0, 0, 0, 0, 1, 1);
if(ret)
{
RLOGD("fota update fail again!\n");
@@ -2556,7 +2940,7 @@
#endif
- ret = rock_update_main(0, 0, 0, 0, first_run, 1);
+ ret = rock_update_main(0, 0, 0, 0, first_run, 1,1);
RLOGD("rock_update_main ret = %d\n", ret);
if(ret)
{
@@ -2587,7 +2971,7 @@
{
//Power off, call UA
RLOGD("[+UP]: ***Power off, call UA***\n");
- ret = rock_update_main(0, 0, 0, 0, first_run, 1);
+ ret = rock_update_main(0, 0, 0, 0, first_run, 1, 0);
RLOGD("rock_update_main ret = %d\n", ret);
if(ret)
{
@@ -2599,7 +2983,7 @@
{
//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);
+ ret = rock_update_main(0, 0, 0, 0, first_run, 0, 0);
RLOGD("rock_update_main ret = %d\n", ret);
if(ret)
{
@@ -2681,2000 +3065,14 @@
*/
int lynq_fota_nrestart(void)
{
- 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) {
- LYERRLOG("+[UA]: Error loading boot_control HAL implementation.\n");
- return -1;
- }
-
- module = (boot_control_module_t*)hw_module;
- module->init(module);
-
-
- if (module == NULL) {
- LYERRLOG("+[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);
-
- LYVERBLOG("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, 1, 0);
+ RLOGD("lynq_fota_nrestart ret = %d\n", ret);
+ if(ret)
{
- LYVERBLOG("+[UA]: get fota addr error\n");
- lynq_fota_release_wake_lock();
- return E_ROCK_FOTA_ADDR;
+ RLOGD("fota update fail!\n");
}
-
- 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));
-
- LYVERBLOG("+[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;
- }
-
- LYVERBLOG("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
- LYVERBLOG("+[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;
- 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);
-
-
- }
-
- 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;
- 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 ((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))
- {
- RLOGD("+[UA]: start full upgrade\n");
- 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) {
-
- 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 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;
- }
-
-
- }
-
- 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;
- }
- }
-
- 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);
-
- module->setActiveBootSlot(module,slot);
- RLOGD("+[UA]: upgrade is success!!!!\n");
-
- fota_status.ota_run = 0;
- fota_status.switch_slot = PASS;
- fota_status.update_result = status;
- save_fota_status();
- sleep(5);
- sync();
- sleep(5);
- lynq_fota_release_wake_lock();
- return status;
+ return ret;
}
/**
@@ -4777,3 +3175,4 @@
* @brief This is the wake up call
* end
*/
+
diff --git a/src/lynq/lib/liblynq-fota/rock_ua/sha.c b/src/lynq/lib/liblynq-fota/rock_ua/sha.c
index bdb29de..ce52383 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/sha.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/sha.c
@@ -342,7 +342,11 @@
else
{
size = read(fd_sha,data,totale_size_common);
- }
+ }
+ if(size==0){
+
+ break;
+ }
SHA_update(&ctx, data, size);
totale_size_common -= size;