blob: 3dac4c90c8bc2aff1d6b577f6bd9453a7a76fb6c [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
l.yang82a297c2025-05-13 01:12:41 -070019static int s_ota_flag = -1;
b.liud440f9f2025-04-18 10:44:31 +080020int funstat( char *filename)
21{
22 int ret = 0;
23 struct stat tmep_s;
24
25 memset(&tmep_s, 0, sizeof(stat));
26 ret = StatFunc(filename, &tmep_s);
27
28 if (ret)
29 {
30 LOGE("stat %s failed! error_code: %s", filename ,strerror(errno));
31 return -1;
32 }
33
34 if (tmep_s.st_size > 0)
35 {
36 segment_size = tmep_s.st_size;
37 }
38
39 return 0;
40}
41
42
43int ql_fota_cb(int status, int percent)
44{
45 LOGE("%d: percent: %d%%\n", percent/10, percent);
46 Process_flag = percent;
47 return 0;
48}
49
50int ql_abfota_start_update(const char *package_path)
51{
52 LOGI("%s, %d", __FUNCTION__, __LINE__);
53 int ret = 0;
54 int len = 0;
55
l.yang82a297c2025-05-13 01:12:41 -070056 if(s_ota_flag == -1)
b.liud440f9f2025-04-18 10:44:31 +080057 {
l.yang82a297c2025-05-13 01:12:41 -070058 ret = mbtk_fota_init(ql_fota_cb);
59 if (ret)
60 {
61 LOGE("ql_abfota_start_update init fail");
62 return -1;
63 }
64 else
65 {
66 s_ota_flag = 0;
67 }
b.liud440f9f2025-04-18 10:44:31 +080068 }
69
70 memset(addr_buf, 0, sizeof(addr_buf));
71 sprintf(addr_buf, "%supdata.bin", package_path);
72 len = strlen(addr_buf);
73 if (len > 127)
74 {
75 LOGE("ql_abfota_start_update get package_path fail");
76 return -1;
77 }
78
79 if(strncmp(addr_buf, "http", 4) == 0)
80 {
81 segment_size = 62914560;
82 ret = mbtk_fota_fw_write_by_url(addr_buf, segment_size,10, 600);
83 }
84 else
85 {
86 /*获取升级文件的大小*/
87 ret = funstat(addr_buf);
88 if (ret)
89 {
90 LOGE("ql_abfota_start_update get segment_size fail");
91 return -1;
92 }
93
94 LOGI("addr_buf:%s, segment_size:%d", addr_buf, segment_size);
95 ret = mbtk_fota_fw_write(addr_buf, segment_size);
96 }
97
98 if (ret)
99 {
100 LOGE("ql_abfota_start_update fail");
101 return -1;
102 }
103
104 mbtk_system("sync");
105
106 return 0;
107}
108
109int ql_abfota_get_update_status(update_info_t * update_info)
110{
111 int fota_t;
112
113 fota_t = mbtk_fota_status();
114
115 if (fota_t == 3)
116 {
117 update_info->ota_state = UPDATE;
118 update_info->percentage = Process_flag;
119 update_info->exit_code = E_UPDATE_PACKAGE_NOEXIST;
120 }
121 else if (fota_t == 4)
122 {
123 update_info->ota_state = WRITEDONE;
124 update_info->percentage = Process_flag;
125 update_info->exit_code = E_NO_ERROR;
126 }
127 else if (fota_t == 5)
128 {
129 update_info->ota_state = FAILED;
130 update_info->percentage = Process_flag;
131 update_info->exit_code = E_WRITE_SEG_FAILED;
132 }
133 else if (fota_t == -1)
134 {
135 LOGE("ql_abfota_get_update_status fail");
136 return -1;
137 }
138
139 return 0;
140}
141