| #include <stdlib.h> |
| #include <stdio.h> |
| #include <errno.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| |
| #include "ql_fota_api.h" |
| #include "mbtk_type.h" |
| #include "mbtk_fota.h" |
| #include "mbtk_log.h" |
| #include "mbtk_utils.h" |
| |
| unsigned int Process_flag = 0; |
| char addr_buf[128]={0}; |
| int segment_size =0; |
| |
| #define StatFunc(x,y) stat(x,y) |
| |
| static int s_ota_flag = -1; |
| int funstat( char *filename) |
| { |
| int ret = 0; |
| struct stat tmep_s; |
| |
| memset(&tmep_s, 0, sizeof(stat)); |
| ret = StatFunc(filename, &tmep_s); |
| |
| if (ret) |
| { |
| LOGE("stat %s failed! error_code: %s", filename ,strerror(errno)); |
| return -1; |
| } |
| |
| if (tmep_s.st_size > 0) |
| { |
| segment_size = tmep_s.st_size; |
| } |
| |
| return 0; |
| } |
| |
| |
| int ql_fota_cb(int status, int percent) |
| { |
| LOGE("%d: percent: %d%%\n", percent/10, percent); |
| Process_flag = percent; |
| return 0; |
| } |
| |
| int ql_abfota_start_update(const char *package_path) |
| { |
| LOGI("%s, %d", __FUNCTION__, __LINE__); |
| int ret = 0; |
| int len = 0; |
| |
| if(s_ota_flag == -1) |
| { |
| ret = mbtk_fota_init(ql_fota_cb); |
| if (ret) |
| { |
| LOGE("ql_abfota_start_update init fail"); |
| return -1; |
| } |
| else |
| { |
| s_ota_flag = 0; |
| } |
| } |
| |
| memset(addr_buf, 0, sizeof(addr_buf)); |
| sprintf(addr_buf, "%supdata.bin", package_path); |
| len = strlen(addr_buf); |
| if (len > 127) |
| { |
| LOGE("ql_abfota_start_update get package_path fail"); |
| return -1; |
| } |
| |
| if(strncmp(addr_buf, "http", 4) == 0) |
| { |
| segment_size = 62914560; |
| ret = mbtk_fota_fw_write_by_url(addr_buf, segment_size,10, 600); |
| } |
| else |
| { |
| /*获取升级文件的大小*/ |
| ret = funstat(addr_buf); |
| if (ret) |
| { |
| LOGE("ql_abfota_start_update get segment_size fail"); |
| return -1; |
| } |
| |
| LOGI("addr_buf:%s, segment_size:%d", addr_buf, segment_size); |
| ret = mbtk_fota_fw_write(addr_buf, segment_size); |
| } |
| |
| if (ret) |
| { |
| LOGE("ql_abfota_start_update fail"); |
| return -1; |
| } |
| |
| mbtk_system("sync"); |
| |
| return 0; |
| } |
| |
| int ql_abfota_get_update_status(update_info_t * update_info) |
| { |
| int fota_t; |
| |
| fota_t = mbtk_fota_status(); |
| |
| if (fota_t == 3) |
| { |
| update_info->ota_state = UPDATE; |
| update_info->percentage = Process_flag; |
| update_info->exit_code = E_UPDATE_PACKAGE_NOEXIST; |
| } |
| else if (fota_t == 4) |
| { |
| update_info->ota_state = WRITEDONE; |
| update_info->percentage = Process_flag; |
| update_info->exit_code = E_NO_ERROR; |
| } |
| else if (fota_t == 5) |
| { |
| update_info->ota_state = FAILED; |
| update_info->percentage = Process_flag; |
| update_info->exit_code = E_WRITE_SEG_FAILED; |
| } |
| else if (fota_t == -1) |
| { |
| LOGE("ql_abfota_get_update_status fail"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |