blob: 9b833daa960011349ac2bfc66457c5d743ed955f [file] [log] [blame]
b.liud440f9f2025-04-18 10:44:31 +08001#include <stdlib.h>
2#include <stdio.h>
3#include <errno.h>
4#include <sys/types.h>
5#include <sys/stat.h>
6
7#include "ql_fota_api.h"
8#include "mbtk_type.h"
9#include "mbtk_fota.h"
10#include "mbtk_log.h"
11#include "mbtk_utils.h"
12
13unsigned int Process_flag = 0;
14char addr_buf[128]={0};
15int segment_size =0;
16
17#define StatFunc(x,y) stat(x,y)
18
19int funstat( char *filename)
20{
21 int ret = 0;
22 struct stat tmep_s;
23
24 memset(&tmep_s, 0, sizeof(stat));
25 ret = StatFunc(filename, &tmep_s);
26
27 if (ret)
28 {
29 LOGE("stat %s failed! error_code: %s", filename ,strerror(errno));
30 return -1;
31 }
32
33 if (tmep_s.st_size > 0)
34 {
35 segment_size = tmep_s.st_size;
36 }
37
38 return 0;
39}
40
41
42int ql_fota_cb(int status, int percent)
43{
44 LOGE("%d: percent: %d%%\n", percent/10, percent);
45 Process_flag = percent;
46 return 0;
47}
48
49int ql_abfota_start_update(const char *package_path)
50{
51 LOGI("%s, %d", __FUNCTION__, __LINE__);
52 int ret = 0;
53 int len = 0;
54
55 ret = mbtk_fota_init(ql_fota_cb);
56 if (ret)
57 {
58 LOGE("ql_abfota_start_update init fail");
59 return -1;
60 }
61
62 memset(addr_buf, 0, sizeof(addr_buf));
63 sprintf(addr_buf, "%supdata.bin", package_path);
64 len = strlen(addr_buf);
65 if (len > 127)
66 {
67 LOGE("ql_abfota_start_update get package_path fail");
68 return -1;
69 }
70
71 if(strncmp(addr_buf, "http", 4) == 0)
72 {
73 segment_size = 62914560;
74 ret = mbtk_fota_fw_write_by_url(addr_buf, segment_size,10, 600);
75 }
76 else
77 {
78 /*获取升级文件的大小*/
79 ret = funstat(addr_buf);
80 if (ret)
81 {
82 LOGE("ql_abfota_start_update get segment_size fail");
83 return -1;
84 }
85
86 LOGI("addr_buf:%s, segment_size:%d", addr_buf, segment_size);
87 ret = mbtk_fota_fw_write(addr_buf, segment_size);
88 }
89
90 if (ret)
91 {
92 LOGE("ql_abfota_start_update fail");
93 return -1;
94 }
95
96 mbtk_system("sync");
97
98 return 0;
99}
100
101int ql_abfota_get_update_status(update_info_t * update_info)
102{
103 int fota_t;
104
105 fota_t = mbtk_fota_status();
106
107 if (fota_t == 3)
108 {
109 update_info->ota_state = UPDATE;
110 update_info->percentage = Process_flag;
111 update_info->exit_code = E_UPDATE_PACKAGE_NOEXIST;
112 }
113 else if (fota_t == 4)
114 {
115 update_info->ota_state = WRITEDONE;
116 update_info->percentage = Process_flag;
117 update_info->exit_code = E_NO_ERROR;
118 }
119 else if (fota_t == 5)
120 {
121 update_info->ota_state = FAILED;
122 update_info->percentage = Process_flag;
123 update_info->exit_code = E_WRITE_SEG_FAILED;
124 }
125 else if (fota_t == -1)
126 {
127 LOGE("ql_abfota_get_update_status fail");
128 return -1;
129 }
130
131 return 0;
132}
133