blob: 316381940a47af4b00c3bc973f83419d76d39ada [file] [log] [blame]
b.liuf9fbfa12024-06-14 15:53:59 +08001/*
2* gnss_hd8122.c
3*
4* HD8122 GNSS source.
5*
6*/
7/******************************************************************************
8
9 EDIT HISTORY FOR FILE
10
11 WHEN WHO WHAT,WHERE,WHY
12-------- -------- -------------------------------------------------------
132024/6/14 LiuBin Initial version
14
15******************************************************************************/
16#include <stdio.h>
17#include <stdlib.h>
18#include <unistd.h>
19#include <errno.h>
20#include <fcntl.h>
b.liu778645e2024-06-21 16:47:42 +080021#include <pthread.h>
b.liuf9fbfa12024-06-14 15:53:59 +080022
23#include "mbtk_log.h"
24#include "mbtk_type.h"
25#include "mbtk_gpio.h"
b.liu778645e2024-06-21 16:47:42 +080026#include "mbtk_utils.h"
b.liuf9fbfa12024-06-14 15:53:59 +080027#include "gnss_utils.h"
28#include "gnss_hd8122.h"
b.liudbc3f4b2024-06-25 18:22:24 +080029#include "hd8122_dl/hd8040_upgrade.h"
yq.wang99db6f52024-09-12 01:58:48 -070030#include "agps/agnss_http_download.h"
31#include "agps/8122_agnss.h"
b.liuf9fbfa12024-06-14 15:53:59 +080032
33#define UART_BITRATE_NMEA_DEF_FW 115200 // Default bitrate.
34#define GNSS_POWER_GPIO 43
b.liu5f950c52024-06-15 20:13:12 +080035#define GNSS_SET_TIMEOUT 3000 // 3s
36#define GNSS_PACK_BUFF_SIZE 1024
b.liud0ba7152024-06-19 14:47:21 +080037#define GNSS_MSG_NUM_MAX 30
b.liudbc3f4b2024-06-25 18:22:24 +080038#define READ_LEN_MAX 1024 //BOOT_UPGRADE_BUFF_MAX_1
yq.wangaf363dc2024-08-06 20:16:00 -070039#define GNSS_FW_GQALS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0035.720e5.53ef0.GQALS.ANT.EPH.CFG.PPS13.240115R1.bin"
40#define GNSS_FW_GAQBS_PATH "/lib/firmware/HD8122.YIKE.GN3.115200.0037.dbd12.53ef0.GAQBS.B1C.ANT.EPH.CFG.PPS13.240416R1.bin"
b.liuf9fbfa12024-06-14 15:53:59 +080041
yq.wang99db6f52024-09-12 01:58:48 -070042//#define AGNSS_TEST_URL "http://aclientt.allystar.com:80/ephemeris/HD_GPS_BDS.hdb"
43#define AGNSS_URL "http://uagnss.allystar.com:80/ephemeris/%s?compid=yikecs1&token=Z38w5urAuawubTxi"
44#define AGNSS_INDIVIDUATION_URL_HEAD "http://cagnss.allystar.com/api/v1/eph/rt?"
45#define AGNSS_ALLSTAR_URL_HEAD "http://cagnss.allystar.com/api/v1/eph/rta?"
46#define AGNSS_EPH_FILE_PATH "/lib/firmware/eph_data.txt"
47
48#define AGNSS_EPH_GPS "HD_GPS.hdb"
49#define AGNSS_EPH_BDS "HD_BDS.hdb"
50#define AGNSS_EPH_GLO "HD_GLO.hdb"
51#define AGNSS_EPH_GPS_BDS "HD_GPS_BDS.hdb"
52#define AGNSS_EPH_GPS_GLO "HD_GPS_GLO.hdb"
53
b.liuf9fbfa12024-06-14 15:53:59 +080054static pthread_cond_t read_cond;
55static pthread_mutex_t read_mutex;
b.liud0ba7152024-06-19 14:47:21 +080056static bool setting_waitting = FALSE;
b.liu5f950c52024-06-15 20:13:12 +080057static bool setting_busy = FALSE;
58static void *gnss_set_rsp_ptr = NULL;
59static gnss_err_enum gnss_set_result = GNSS_ERR_OK;
b.liud0ba7152024-06-19 14:47:21 +080060static hd8122_msg_id_t msg_array[GNSS_MSG_NUM_MAX];
yq.wangaf363dc2024-08-06 20:16:00 -070061static char gnss_ctrl_path[128] = "/sys/devices/platform/mbtk-gnss/ctrl";
62
b.liuf9fbfa12024-06-14 15:53:59 +080063
b.liu5f950c52024-06-15 20:13:12 +080064int gnss_write(int fd, const void *data, int data_len);
b.liudbc3f4b2024-06-25 18:22:24 +080065int OpenUart(char* UART_DEV);
66int uart_close(int fd);
67int fw_update_boot(int uart_fd, uint8_t *data, uint32_t len);
b.liu5f950c52024-06-15 20:13:12 +080068
b.liudbc3f4b2024-06-25 18:22:24 +080069static uint16 fletcher16(const uint8_t* data, int data_len)
70{
b.liud0ba7152024-06-19 14:47:21 +080071 uint32_t sum1 = 0;
72 uint32_t sum2 = 0;
b.liu5f950c52024-06-15 20:13:12 +080073 int index;
74
b.liudbc3f4b2024-06-25 18:22:24 +080075 for (index = 0; index < data_len; ++index )
76 {
b.liud0ba7152024-06-19 14:47:21 +080077 sum1 += data[index];
78 sum2 += sum1;
b.liu5f950c52024-06-15 20:13:12 +080079 }
80
b.liud0ba7152024-06-19 14:47:21 +080081 return ((0xFF & sum2) << 8) | (0xFF & sum1);
b.liu5f950c52024-06-15 20:13:12 +080082}
83
84static void gnss_set_timer_cb(int signo)
85{
b.liudbc3f4b2024-06-25 18:22:24 +080086 if(setting_busy)
87 {
b.liu5f950c52024-06-15 20:13:12 +080088 pthread_mutex_lock(&read_mutex);
89 pthread_cond_signal(&read_cond);
90 pthread_mutex_unlock(&read_mutex);
91 gnss_set_result = GNSS_ERR_TIMEOUT;
92 }
93 return;
94}
95
b.liud0ba7152024-06-19 14:47:21 +080096static void msg_init()
97{
b.liu778645e2024-06-21 16:47:42 +080098 unsigned int i = 0;
b.liudbc3f4b2024-06-25 18:22:24 +080099 while(i < ARRAY_SIZE(msg_array))
100 {
b.liud0ba7152024-06-19 14:47:21 +0800101 msg_array[i].enable = FALSE;
102 i++;
103 }
104}
105
b.liud0ba7152024-06-19 14:47:21 +0800106static int msg_insert(uint8 gid, uint8 sid)
107{
b.liu778645e2024-06-21 16:47:42 +0800108 unsigned int i = 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800109 while(i < ARRAY_SIZE(msg_array))
110 {
b.liud0ba7152024-06-19 14:47:21 +0800111 if(!msg_array[i].enable)
112 break;
113 i++;
114 }
115
b.liudbc3f4b2024-06-25 18:22:24 +0800116 if(i == ARRAY_SIZE(msg_array))
117 {
b.liud0ba7152024-06-19 14:47:21 +0800118 LOGE("Msg full : %d", i);
119 return -1;
b.liudbc3f4b2024-06-25 18:22:24 +0800120 }
121 else
122 {
b.liud0ba7152024-06-19 14:47:21 +0800123 msg_array[i].enable = TRUE;
124 msg_array[i].gid = gid;
125 msg_array[i].sid = sid;
126 return 0;
127 }
128}
129
130static int msg_find(uint8 gid, uint8 sid)
131{
b.liu778645e2024-06-21 16:47:42 +0800132 unsigned int i = 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800133 while(i < ARRAY_SIZE(msg_array))
134 {
b.liud0ba7152024-06-19 14:47:21 +0800135 if(msg_array[i].enable && gid == msg_array[i].gid && sid == msg_array[i].sid)
136 break;
137 i++;
138 }
139
b.liudbc3f4b2024-06-25 18:22:24 +0800140 if(i == ARRAY_SIZE(msg_array))
141 {
b.liud0ba7152024-06-19 14:47:21 +0800142 LOGE("No found %d - %d", gid, sid);
143 return -1;
b.liudbc3f4b2024-06-25 18:22:24 +0800144 }
145 else
146 {
b.liud0ba7152024-06-19 14:47:21 +0800147 return i;
148 }
149}
150
151static int msg_remove(uint8 gid, uint8 sid)
152{
153 int i = msg_find(gid, sid);
b.liudbc3f4b2024-06-25 18:22:24 +0800154 if(i >= 0)
155 {
b.liud0ba7152024-06-19 14:47:21 +0800156 msg_array[i].enable = FALSE;
157 msg_array[i].gid = 0;
158 msg_array[i].sid = 0;
159 return 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800160 }
161 else
162 {
b.liud0ba7152024-06-19 14:47:21 +0800163 return -1;
164 }
165}
166
167static int msg_count()
168{
b.liu778645e2024-06-21 16:47:42 +0800169 unsigned int i = 0;
b.liud0ba7152024-06-19 14:47:21 +0800170 int count = 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800171 while(i < ARRAY_SIZE(msg_array))
172 {
b.liud0ba7152024-06-19 14:47:21 +0800173 if(msg_array[i].enable)
174 count++;
175 i++;
176 }
177 return count;
178}
b.liu5f950c52024-06-15 20:13:12 +0800179
yq.wangaf363dc2024-08-06 20:16:00 -0700180static int gnss_ctrl_write(char* str)
181{
182 int fd = -1;
183 int ret = -1;
184 fd = open((const char*)gnss_ctrl_path, O_WRONLY);
185 if (fd < 0)
186 {
187 LOGE("open %s fail", gnss_ctrl_path);
188 return -1;
189 }
190 else
191 {
192 ret = write(fd, str, strlen(str));
193 close(fd);
194 if(ret < 0)
195 {
196 LOGE("write %s fail", str);
197 return -1;
198 }
199 }
200 return 0;
201}
202
203static int gnss_fwdl_enable()
204{
205 int ret = -1;
206 ret = gnss_ctrl_write("fdl");
207 if(ret < 0)
208 {
209 LOGE("gnss_ctrl_write fail");
210 return -1;
211 }
212 return 0;
213}
214
b.liudbc3f4b2024-06-25 18:22:24 +0800215static uint32_t read_bin_file(uint8_t *path, uint8_t *buff)
216{
217 int fp = -1;
218 int ret = 0;
219 int i = 0;
220 int size = 0;
221
222 if (NULL == path || NULL == buff)
223 {
224 LOGE("ARG error");
225 return 0;
226 }
227
228 fp = open((char *)path, O_RDONLY);
229 if(fp < 0)
230 {
231 LOGE( "open file failed ! errno is %d", errno);
232 return 0;
233 }
234
235 size = lseek(fp, 0x00, SEEK_END);
236 if(size <= 0)
237 {
238 LOGE( "file is empty.");
239 return 0;
240 }
241
242 LOGD( "file size is:%d", size);
243 lseek(fp, 0x00, SEEK_SET);
244 while(1)
245 {
246 ret = read(fp, buff, READ_LEN_MAX);
247 i += ret;
248 if(ret == READ_LEN_MAX)
249 {
250 buff += READ_LEN_MAX;
251 }
252 else
253 {
254 break;
255 }
256 }
257
258 LOGD("file size is:%d,i:%d", size, i);
259 close(fp);
260 if(size != i)
261 {
262 return 0;
263 }
264 return size;
265}
266
267
b.liu5f950c52024-06-15 20:13:12 +0800268static int pack_create(hd8122_id_type_enum id_type, uint8 id, uint16 data_len, const uint8 *data, uint8 *pack, int pack_len)
269{
b.liudbc3f4b2024-06-25 18:22:24 +0800270 if(pack == NULL || pack_len < HD8122_PACK_LEN_MIN)
271 {
b.liu5f950c52024-06-15 20:13:12 +0800272 return -1;
273 }
274 memset(pack, 0, pack_len);
275 uint8 *data_ptr = pack;
276 data_ptr += uint16_2_byte(HD8122_PACK_HEAD, data_ptr, false);
277 *data_ptr++ = (uint8)id_type;
278 *data_ptr++ = id;
279 data_ptr += uint16_2_byte(data_len, data_ptr, false);
b.liudbc3f4b2024-06-25 18:22:24 +0800280 if(data_len > 0)
281 {
b.liu5f950c52024-06-15 20:13:12 +0800282 memcpy(data_ptr, data, data_len);
283 data_ptr += data_len;
284 }
285 data_ptr += uint16_2_byte(fletcher16(pack + 2, 4 + data_len), data_ptr, false);
286 return (data_ptr - pack);
287}
288
b.liud0ba7152024-06-19 14:47:21 +0800289// f1 d9 05 01 02 00 06 01 0f 38
290// or
291// f1 d9 05 00 02 00 06 01 0f 38
292static int msg_array_change(const uint8 *pack, int pack_len, hd8122_id_ack_enum *ack_nak)
293{
b.liudbc3f4b2024-06-25 18:22:24 +0800294 if(pack_len == 0 || pack_len % 10)
295 {
b.liud0ba7152024-06-19 14:47:21 +0800296 LOGE("pack_len(%d) error.", pack_len);
297 return -1;
298 }
299 int count = pack_len / 10;
300 int i = 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800301 while(i < count)
302 {
b.liu778645e2024-06-21 16:47:42 +0800303 const uint8 *ptr = pack + i * 10;
b.liudbc3f4b2024-06-25 18:22:24 +0800304 if(ptr[0] != 0xf1 || ptr[1] != 0xd9)
305 {
b.liud0ba7152024-06-19 14:47:21 +0800306 LOGE("Pack head error : %02x %02x", ptr[0], ptr[1]);
307 return -1;
308 }
309
b.liudbc3f4b2024-06-25 18:22:24 +0800310 if(ptr[2] != 0x05)
311 {
b.liud0ba7152024-06-19 14:47:21 +0800312 LOGE("Type not 0x05 : %02x", ptr[2]);
313 return -1;
314 }
315
316 int index = msg_find(ptr[6], ptr[7]);
b.liudbc3f4b2024-06-25 18:22:24 +0800317 if(index >= 0)
318 {
319 if(ptr[3] == 0x01)
320 {
b.liud0ba7152024-06-19 14:47:21 +0800321 msg_array[index].ack_nak = HD8122_ID_ACK_ACK;
b.liudbc3f4b2024-06-25 18:22:24 +0800322 }
323 else if(ptr[3] == 0x00)
324 {
b.liud0ba7152024-06-19 14:47:21 +0800325 msg_array[index].ack_nak = HD8122_ID_ACK_NAK;
326
327 // There is a nak as a failure.
328 *ack_nak = HD8122_ID_ACK_NAK;
b.liudbc3f4b2024-06-25 18:22:24 +0800329 }
330 else
331 {
b.liud0ba7152024-06-19 14:47:21 +0800332 LOGE("ID not 0x00 or 0x01 : %02x", ptr[3]);
333 return -1;
334 }
335
336 msg_array[index].enable = FALSE;
b.liudbc3f4b2024-06-25 18:22:24 +0800337 }
338 else
339 {
b.liud0ba7152024-06-19 14:47:21 +0800340 LOGE("Unknown gid - %d, sid - %d", ptr[6], ptr[7]);
341 return -1;
342 }
343 i++;
344 }
345
346 return 0;
347}
348
b.liudbc3f4b2024-06-25 18:22:24 +0800349static void gnss_cmd_rsp_process(const void *data, int data_len)
350{
b.liu5f950c52024-06-15 20:13:12 +0800351 const char *ptr = (const char*)data;
352 log_hex("RSP", data, data_len);
b.liu5f950c52024-06-15 20:13:12 +0800353
b.liud0ba7152024-06-19 14:47:21 +0800354 hd8122_id_ack_enum ack_nak = HD8122_ID_ACK_ACK;
b.liudbc3f4b2024-06-25 18:22:24 +0800355 if(!msg_array_change((const uint8*)data, data_len, &ack_nak))
356 {
b.liud0ba7152024-06-19 14:47:21 +0800357 if(setting_waitting && msg_count() == 0)
358 {
b.liudbc3f4b2024-06-25 18:22:24 +0800359 if(ack_nak == HD8122_ID_ACK_ACK)
360 {
b.liud0ba7152024-06-19 14:47:21 +0800361 gnss_set_result = GNSS_ERR_OK;
b.liudbc3f4b2024-06-25 18:22:24 +0800362 }
363 else
364 {
b.liud0ba7152024-06-19 14:47:21 +0800365 gnss_set_result = GNSS_ERR_UNKNOWN;
366 }
367
368 mbtk_timer_clear();
369
370 pthread_mutex_lock(&read_mutex);
371 pthread_cond_signal(&read_cond);
372 pthread_mutex_unlock(&read_mutex);
373 setting_waitting = FALSE;
374 }
yq.wang99db6f52024-09-12 01:58:48 -0700375
b.liudbc3f4b2024-06-25 18:22:24 +0800376 }
377 else
378 {
b.liud0ba7152024-06-19 14:47:21 +0800379 LOGW("Unknown rsp data.");
b.liu5f950c52024-06-15 20:13:12 +0800380 }
381}
382
b.liud0ba7152024-06-19 14:47:21 +0800383static gnss_err_enum gnss_8122_reset(int fd, uint8 reset)
b.liu5f950c52024-06-15 20:13:12 +0800384{
385 uint8 buff[GNSS_PACK_BUFF_SIZE];
386 LOGD("RESET");
387 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_SIMPLERST, 1, (uint8*)(&reset), buff, sizeof(buff));
b.liudbc3f4b2024-06-25 18:22:24 +0800388 if(len <= 0)
389 {
b.liu5f950c52024-06-15 20:13:12 +0800390 LOGE("pack_create() fail.");
391 return GNSS_ERR_ARG;
392 }
393 log_hex("PACK", buff, len);
394 gnss_write(fd, buff, len);
395 return GNSS_ERR_OK;
396}
b.liuf9fbfa12024-06-14 15:53:59 +0800397
b.liud0ba7152024-06-19 14:47:21 +0800398static gnss_err_enum gnss_8122_syscfg(int fd, uint32 mode)
399{
400 uint8 buff[GNSS_PACK_BUFF_SIZE];
401 LOGD("SYSCFG");
402 //uint8 mode_str[4];
403 //uint32_2_byte(mode, mode_str, TRUE);
404 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_NAVSAT, 4, (uint8*)(&mode), buff, sizeof(buff));
b.liudbc3f4b2024-06-25 18:22:24 +0800405 if(len <= 0)
406 {
b.liud0ba7152024-06-19 14:47:21 +0800407 LOGE("pack_create() fail.");
408 return GNSS_ERR_ARG;
409 }
410 log_hex("PACK", buff, len);
411 gnss_write(fd, buff, len);
412 msg_insert(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_NAVSAT);
413 return GNSS_ERR_OK;
414}
415
yq.wang6a3437f2024-07-27 02:57:20 -0700416static gnss_err_enum gnss_8122_freqcfg(int fd, uint8 mode)
417{
418 uint8 buff[GNSS_PACK_BUFF_SIZE];
419 LOGD("FREQCFG");
420 uint8 data[20];
421 memset(data, 0x00, 20);
422 data[1] = mode;
423 data[2] = 0x66;
424 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_PWRCTL, 20, data, buff, sizeof(buff));
425 if(len <= 0)
426 {
427 LOGE("pack_create() fail.");
428 return GNSS_ERR_ARG;
429 }
430 log_hex("PACK", buff, len);
431 gnss_write(fd, buff, len);
432 msg_insert(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_PWRCTL);
433 return GNSS_ERR_OK;
434}
435
b.liud0ba7152024-06-19 14:47:21 +0800436static gnss_err_enum gnss_8122_msgcfg(int fd, uint8 type, uint8 id, uint8 period)
437{
438 uint8 buff[GNSS_PACK_BUFF_SIZE];
439 LOGD("MSGCFG");
440 uint8 data[3];
441 data[0] = type;
442 data[1] = id;
443 data[2] = period;
444 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_MSG, 3, data, buff, sizeof(buff));
b.liudbc3f4b2024-06-25 18:22:24 +0800445 if(len <= 0)
446 {
b.liud0ba7152024-06-19 14:47:21 +0800447 LOGE("pack_create() fail.");
448 return GNSS_ERR_ARG;
449 }
450 log_hex("PACK", buff, len);
451 gnss_write(fd, buff, len);
452 msg_insert(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_MSG);
453 return GNSS_ERR_OK;
454}
455
456static gnss_err_enum gnss_8122_minel(int fd, float *elev)
457{
458 uint8 buff[GNSS_PACK_BUFF_SIZE];
459 LOGD("ELEV");
460 //uint8 elev_buff[4];
461 //uint32_2_byte((uint32)elev, elev_buff, TRUE);
462 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_ELEV, 8, (uint8*)elev, buff, sizeof(buff));
b.liudbc3f4b2024-06-25 18:22:24 +0800463 if(len <= 0)
464 {
b.liud0ba7152024-06-19 14:47:21 +0800465 LOGE("pack_create() fail.");
466 return GNSS_ERR_ARG;
467 }
468 log_hex("PACK", buff, len);
469 gnss_write(fd, buff, len);
470 return GNSS_ERR_OK;
471}
472
473static gnss_err_enum gnss_8122_nmeaver(int fd, uint8 ver)
474{
475 uint8 buff[GNSS_PACK_BUFF_SIZE];
476 LOGD("NMEA-VER");
477 int len = pack_create(HD8122_ID_TYPE_CFG, HD8122_ID_CFG_NMEAVER, 1, (uint8*)(&ver), buff, sizeof(buff));
b.liudbc3f4b2024-06-25 18:22:24 +0800478 if(len <= 0)
479 {
b.liud0ba7152024-06-19 14:47:21 +0800480 LOGE("pack_create() fail.");
481 return GNSS_ERR_ARG;
482 }
483 log_hex("PACK", buff, len);
484 gnss_write(fd, buff, len);
485 return GNSS_ERR_OK;
486}
487
b.liuf9fbfa12024-06-14 15:53:59 +0800488int gnss_8122_dev_open()
489{
yq.wang5fe6e612024-07-17 01:18:12 -0700490 //return mbtk_gpio_value_set(GNSS_POWER_GPIO, MBTK_GPIO_DIRECT_OUT, 1);
491 system("i2cset -y -f 2 0x31 0x15 0x86");
492 return 0;
b.liuf9fbfa12024-06-14 15:53:59 +0800493}
494
b.liu978f5432024-07-01 18:04:18 +0800495int gnss_8122_dev_close(int fd)
b.liuf9fbfa12024-06-14 15:53:59 +0800496{
yq.wang5fe6e612024-07-17 01:18:12 -0700497 //return mbtk_gpio_value_set(GNSS_POWER_GPIO, MBTK_GPIO_DIRECT_OUT, 0);
498 system("i2cset -y -f 2 0x31 0x15 0x00");
499 return 0;
b.liuf9fbfa12024-06-14 15:53:59 +0800500}
501
502int gnss_8122_open(const char *dev)
503{
504 pthread_mutex_init(&read_mutex, NULL);
505 pthread_cond_init(&read_cond, NULL);
506 return gnss_port_open(dev, O_RDWR | O_NONBLOCK | O_NOCTTY, UART_BITRATE_NMEA_DEF_FW, TRUE);
507}
508
509int gnss_8122_close(int fd)
510{
511 pthread_mutex_destroy(&read_mutex);
512 pthread_cond_destroy(&read_cond);
513 return gnss_port_close(fd);
514}
515
b.liudbc3f4b2024-06-25 18:22:24 +0800516int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev)
b.liuf9fbfa12024-06-14 15:53:59 +0800517{
b.liudbc3f4b2024-06-25 18:22:24 +0800518 int uart_fd = OpenUart(dev);//PORT_NAME234
519 if (uart_fd < 0)
520 {
521 LOGE("open uart failed %d[%d]", uart_fd, errno);
522 return GNSS_ERR_OPEN_DEV;
523 }
524
yq.wangaf363dc2024-08-06 20:16:00 -0700525 uint8_t fw_path[256] = {0};
526 memset(fw_path, 0x0, 256);
527 if(memcmp(fw_name, "gp_gl_ga", 8) == 0)
528 {
529 memcpy(fw_path, GNSS_FW_GQALS_PATH, strlen(GNSS_FW_GQALS_PATH));
530 }
531 else if(memcmp(fw_name, "gp_bd_ga", 8) == 0)
532 {
533 memcpy(fw_path, GNSS_FW_GAQBS_PATH, strlen(GNSS_FW_GAQBS_PATH));
534 }
535 else
536 {
537 LOGE("fw dl param error");
538 return GNSS_ERR_ARG;
539 }
540
b.liudbc3f4b2024-06-25 18:22:24 +0800541 uint8_t *g_bin_buff = (uint8_t*)malloc(500*1024);
542 if(g_bin_buff == NULL) {
543 LOGE("malloc() fail : %d", errno);
544 return GNSS_ERR_UNKNOWN;
545 }
546 memset(g_bin_buff, 0, 500*1024);
yq.wangaf363dc2024-08-06 20:16:00 -0700547 uint32_t len = read_bin_file(fw_path, g_bin_buff);
b.liudbc3f4b2024-06-25 18:22:24 +0800548 if (len <= 0)
549 {
550 LOGE("Read file failed ,len = %d", len);
yq.wangaf363dc2024-08-06 20:16:00 -0700551 goto error;
b.liudbc3f4b2024-06-25 18:22:24 +0800552 }
yq.wangaf363dc2024-08-06 20:16:00 -0700553 if(gnss_8122_dev_open())
554 {
b.liudbc3f4b2024-06-25 18:22:24 +0800555 LOGE("open gnss device fail:%d", errno);
yq.wangaf363dc2024-08-06 20:16:00 -0700556 goto error;
b.liudbc3f4b2024-06-25 18:22:24 +0800557 }
yq.wangaf363dc2024-08-06 20:16:00 -0700558
559 if(gnss_fwdl_enable() < 0)
560 {
561 LOGE("gnss_fwdl_enable fail");
562 goto error;
563 }
564
b.liudbc3f4b2024-06-25 18:22:24 +0800565 int ret = fw_update_boot(uart_fd, g_bin_buff, len);
b.liudbc3f4b2024-06-25 18:22:24 +0800566 if (ret < 0)
567 {
568 LOGE("fw_update_boot() fail : %d", ret);
yq.wangaf363dc2024-08-06 20:16:00 -0700569 goto error;
b.liudbc3f4b2024-06-25 18:22:24 +0800570 }
b.liudbc3f4b2024-06-25 18:22:24 +0800571 if(ret == HDBD_UPG_SUCESS)
572 {
573 LOGD("upgrade sucess!");
b.liudbc3f4b2024-06-25 18:22:24 +0800574 }
575 else
576 {
577 LOGD("upgrade FAIL, fail style:%d", ret);
yq.wangaf363dc2024-08-06 20:16:00 -0700578 goto error;
b.liudbc3f4b2024-06-25 18:22:24 +0800579 }
yq.wangaf363dc2024-08-06 20:16:00 -0700580
581 if(gnss_8122_dev_close(0))
582 {
583 LOGE("close gnss device fail:%d", errno);
584 goto error;
585 }
586 free(g_bin_buff);
587 g_bin_buff = NULL;
588 uart_close(uart_fd);
589 return GNSS_ERR_OK;
590error:
591 if(g_bin_buff)
592 {
593 free(g_bin_buff);
594 g_bin_buff = NULL;
595 }
596 if(uart_fd > 0)
597 {
598 uart_close(uart_fd);
599 uart_fd = -1;
600 }
601 return GNSS_ERR_DL_FW;
b.liuf9fbfa12024-06-14 15:53:59 +0800602}
603
yq.wang99db6f52024-09-12 01:58:48 -0700604gnss_err_enum gnss_8122_agnss_get_eph(const char *param)
605{
606 if(param == NULL)
607 {
608 LOGD("gnss_8122_agnss_get_eph param is NULL");
609 return GNSS_ERR_ARG;
610 }
611
612 int eph_type = 0;
613 int alam_flag = 0;
614 int ret = -1;
615 char url[256] = {0};
616 if(2 == sscanf(param, "%d,%d", &eph_type, &alam_flag))
617 {
618 if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS)
619 {
620 snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS);
621 }
622 else if((gnss_eph_data_enum)eph_type == GNSS_EPH_BDS)
623 {
624 snprintf(url, 256,AGNSS_URL, AGNSS_EPH_BDS);
625 }
626 else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GLO)
627 {
628 snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GLO);
629 }
630 else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS_BDS)
631 {
632 snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS_BDS);
633 }
634 else if((gnss_eph_data_enum)eph_type == GNSS_EPH_GPS_GLO)
635 {
636 snprintf(url, 256,AGNSS_URL, AGNSS_EPH_GPS_GLO);
637 }
638 else
639 {
640 return GNSS_ERR_UNSUPPORT;
641 }
642
643 ret = eph_data_from_http_get(url, AGNSS_EPH_FILE_PATH);
644 if (ret < 0)
645 {
646 LOGD("eph_data_from_http_get fail");
647 return GNSS_ERR_EPH_GET_FAIL;
648 }
649 LOGD("get_eph_data_from_http success");
650 }
651 else
652 {
653 LOGD("param num error");
654 return GNSS_ERR_ARG;
655 }
656 return GNSS_ERR_OK;
657}
658
659
660gnss_err_enum gnss_8122_agnss_inject(int fd)
661{
662 int ret = 0;
663 hd_set_gnss_dev_fd(fd);
664 ret = hd_agnss_inject(AGNSS_EPH_FILE_PATH, 0, 0, 0, 0, NULL);
665 hd_set_gnss_dev_fd(-1);
666 if(ret < 0)
667 {
668 LOGD("hd_agnss_inject fail");
669 return GNSS_ERR_EPH_INJECT_FAIL;
670 }
671 return GNSS_ERR_OK;
672}
673
b.liu5f950c52024-06-15 20:13:12 +0800674void gnss_8122_set_cb(const void *data, int data_len)
675{
676 const char *buff = (const char*)data;
b.liudbc3f4b2024-06-25 18:22:24 +0800677 if(setting_busy) // Has setting cmd process.
678 {
b.liu5f950c52024-06-15 20:13:12 +0800679 gnss_cmd_rsp_process(data, data_len);
680 }
yq.wang99db6f52024-09-12 01:58:48 -0700681
682 if(hd_get_eph_inject_status() == HD_EPH_INJECT_STATUS_WAIT_RETURN)
683 {
684 log_hex("EPH_RSP", (const char*)data, data_len);
685 int ret = hd_eph_inject_result_check(data, data_len);
686 if(ret < 0)
687 {
688 hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_FAIL);
689 }
690 else
691 {
692 hd_set_eph_inject_status(HD_EPH_INJECT_STATUS_SUCCESS);
693 }
694 }
b.liu5f950c52024-06-15 20:13:12 +0800695}
b.liuf9fbfa12024-06-14 15:53:59 +0800696
697gnss_err_enum gnss_8122_set(int fd, const char *cmd, void *cmd_rsp, int cmd_rsp_len)
698{
b.liudbc3f4b2024-06-25 18:22:24 +0800699 if(setting_busy)
700 {
b.liu5f950c52024-06-15 20:13:12 +0800701 return GNSS_ERR_SET_BUSY;
b.liudbc3f4b2024-06-25 18:22:24 +0800702 }
703 else
704 {
b.liu5f950c52024-06-15 20:13:12 +0800705 bool should_wait_rsp = TRUE;
706 setting_busy = TRUE;
707 gnss_set_rsp_ptr = cmd_rsp;
708 gnss_set_result = GNSS_ERR_OK;
b.liud0ba7152024-06-19 14:47:21 +0800709 msg_init();
b.liu5f950c52024-06-15 20:13:12 +0800710 mbtk_timer_set(gnss_set_timer_cb, GNSS_SET_TIMEOUT);
711
b.liudbc3f4b2024-06-25 18:22:24 +0800712 if(memcmp(cmd, "$RESET", 6) == 0) // $RESET,<mode>
713 {
b.liud0ba7152024-06-19 14:47:21 +0800714 gnss_reset_type_enum mode = (gnss_reset_type_enum)atoi(cmd + 7);
yq.wang1ddd1fd2024-07-25 23:00:14 -0700715 LOGD("set reset: %d", mode);
b.liudbc3f4b2024-06-25 18:22:24 +0800716 if(mode == GNSS_RESET_TYPE_HOT)
717 {
b.liud0ba7152024-06-19 14:47:21 +0800718 gnss_set_result = gnss_8122_reset(fd, 3);
b.liudbc3f4b2024-06-25 18:22:24 +0800719 }
720 else if(mode == GNSS_RESET_TYPE_WARM)
721 {
b.liud0ba7152024-06-19 14:47:21 +0800722 gnss_set_result = gnss_8122_reset(fd, 2);
b.liudbc3f4b2024-06-25 18:22:24 +0800723 }
724 else if(mode == GNSS_RESET_TYPE_COLD)
725 {
b.liud0ba7152024-06-19 14:47:21 +0800726 gnss_set_result = gnss_8122_reset(fd, 1);
b.liudbc3f4b2024-06-25 18:22:24 +0800727 }
728 else
729 {
b.liud0ba7152024-06-19 14:47:21 +0800730 gnss_set_result = GNSS_ERR_ARG;
731 goto set_fail;
732 }
b.liudbc3f4b2024-06-25 18:22:24 +0800733 if(gnss_set_result != GNSS_ERR_OK)
734 {
b.liu5f950c52024-06-15 20:13:12 +0800735 goto set_fail;
736 }
737 should_wait_rsp = FALSE;
b.liudbc3f4b2024-06-25 18:22:24 +0800738 }
739 else if(memcmp(cmd, "$SYSCFG", 7) == 0) // $SYSCFG,<mode>
740 {
b.liud0ba7152024-06-19 14:47:21 +0800741 uint32 mode = 0;
742 mode = (uint32)atoi(cmd + 8);
743 uint32 new_mode = 0;
b.liudbc3f4b2024-06-25 18:22:24 +0800744 if(((GNSS_SET_SYSCFG_GPS | GNSS_SET_SYSCFG_BDS | GNSS_SET_SYSCFG_GLO | GNSS_SET_SYSCFG_GAL) & mode) != mode)
745 {
b.liud0ba7152024-06-19 14:47:21 +0800746 gnss_set_result = GNSS_ERR_ARG;
747 goto set_fail;
748 }
749
b.liudbc3f4b2024-06-25 18:22:24 +0800750 if(mode & GNSS_SET_SYSCFG_GPS) // GPS
751 {
b.liud0ba7152024-06-19 14:47:21 +0800752 new_mode |= 0x00000001;
753 }
b.liudbc3f4b2024-06-25 18:22:24 +0800754 if(mode & GNSS_SET_SYSCFG_BDS) // BDS
755 {
b.liud0ba7152024-06-19 14:47:21 +0800756 new_mode |= 0x00000002;
757 }
b.liudbc3f4b2024-06-25 18:22:24 +0800758 if(mode & GNSS_SET_SYSCFG_GLO) // GLO
759 {
b.liud0ba7152024-06-19 14:47:21 +0800760 new_mode |= 0x00000004;
761 }
b.liudbc3f4b2024-06-25 18:22:24 +0800762 if(mode & GNSS_SET_SYSCFG_GAL) // GAL
763 {
b.liud0ba7152024-06-19 14:47:21 +0800764 new_mode |= 0x00000010;
765 }
766
767 gnss_set_result = gnss_8122_syscfg(fd, new_mode);
b.liudbc3f4b2024-06-25 18:22:24 +0800768 if(gnss_set_result != GNSS_ERR_OK)
769 {
b.liud0ba7152024-06-19 14:47:21 +0800770 goto set_fail;
771 }
772 should_wait_rsp = TRUE;
b.liudbc3f4b2024-06-25 18:22:24 +0800773 }
yq.wang6a3437f2024-07-27 02:57:20 -0700774 else if(memcmp(cmd, "$FREQCFG", 8) == 0) //$FREQCFG,<freq>
775 {
776 uint32 freq = 0;
777 freq = (uint32)atoi(cmd + 9);
778 LOGD("set freq: %d", freq);
779 if((GNSS_SET_FREQCFG_1 != freq) && (GNSS_SET_FREQCFG_2 != freq) && (GNSS_SET_FREQCFG_5 != freq))
780 {
781 gnss_set_result = GNSS_ERR_ARG;
782 goto set_fail;
783 }
784 gnss_set_result = gnss_8122_freqcfg(fd, (uint8)freq);
785 if(gnss_set_result != GNSS_ERR_OK)
786 {
787 goto set_fail;
788 }
789 should_wait_rsp = TRUE;
790 }
b.liudbc3f4b2024-06-25 18:22:24 +0800791 else if(memcmp(cmd, "$MSGCFG", 7) == 0) // $MSGCFG,<mode>,<rate>
792 {
b.liud0ba7152024-06-19 14:47:21 +0800793 uint32 mode;
794 int rate;
b.liudbc3f4b2024-06-25 18:22:24 +0800795 if(2 == sscanf(cmd, "$MSGCFG,%d,%d", &mode, &rate))
796 {
yq.wang1ddd1fd2024-07-25 23:00:14 -0700797 LOGD("set msgcfg: %d, %d", mode, rate);
b.liud0ba7152024-06-19 14:47:21 +0800798 int time = rate / 1000; // s
b.liudbc3f4b2024-06-25 18:22:24 +0800799 if(time < 0)
800 {
b.liud0ba7152024-06-19 14:47:21 +0800801 gnss_set_result = GNSS_ERR_ARG;
802 goto set_fail;
803 }
804
805 if(((GNSS_SET_MSGCFG_RMC | GNSS_SET_MSGCFG_VTG | GNSS_SET_MSGCFG_GGA | GNSS_SET_MSGCFG_GSA
b.liudbc3f4b2024-06-25 18:22:24 +0800806 | GNSS_SET_MSGCFG_GRS | GNSS_SET_MSGCFG_GSV | GNSS_SET_MSGCFG_GLL | GNSS_SET_MSGCFG_ZDA
807 | GNSS_SET_MSGCFG_GST | GNSS_SET_MSGCFG_TXT) & mode) != mode)
808 {
yq.wang1ddd1fd2024-07-25 23:00:14 -0700809 LOGD("msgcfg not support mode");
b.liud0ba7152024-06-19 14:47:21 +0800810 gnss_set_result = GNSS_ERR_ARG;
811 goto set_fail;
812 }
813
b.liudbc3f4b2024-06-25 18:22:24 +0800814 if(mode & GNSS_SET_MSGCFG_RMC)
815 {
yq.wang1ddd1fd2024-07-25 23:00:14 -0700816 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x05, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800817 if(gnss_set_result != GNSS_ERR_OK)
818 {
b.liud0ba7152024-06-19 14:47:21 +0800819 goto set_fail;
820 }
821 }
822
b.liudbc3f4b2024-06-25 18:22:24 +0800823 if(mode & GNSS_SET_MSGCFG_VTG)
824 {
b.liud0ba7152024-06-19 14:47:21 +0800825 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x06, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800826 if(gnss_set_result != GNSS_ERR_OK)
827 {
b.liud0ba7152024-06-19 14:47:21 +0800828 goto set_fail;
829 }
830 }
831
b.liudbc3f4b2024-06-25 18:22:24 +0800832 if(mode & GNSS_SET_MSGCFG_GGA)
833 {
b.liud0ba7152024-06-19 14:47:21 +0800834 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x00, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800835 if(gnss_set_result != GNSS_ERR_OK)
836 {
b.liud0ba7152024-06-19 14:47:21 +0800837 goto set_fail;
838 }
839 }
840
b.liudbc3f4b2024-06-25 18:22:24 +0800841 if(mode & GNSS_SET_MSGCFG_GSA)
842 {
b.liud0ba7152024-06-19 14:47:21 +0800843 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x02, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800844 if(gnss_set_result != GNSS_ERR_OK)
845 {
b.liud0ba7152024-06-19 14:47:21 +0800846 goto set_fail;
847 }
848 }
849
b.liudbc3f4b2024-06-25 18:22:24 +0800850 if(mode & GNSS_SET_MSGCFG_GRS)
851 {
b.liud0ba7152024-06-19 14:47:21 +0800852 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x03, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800853 if(gnss_set_result != GNSS_ERR_OK)
854 {
b.liud0ba7152024-06-19 14:47:21 +0800855 goto set_fail;
856 }
857 }
858
b.liudbc3f4b2024-06-25 18:22:24 +0800859 if(mode & GNSS_SET_MSGCFG_GSV)
860 {
b.liud0ba7152024-06-19 14:47:21 +0800861 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x04, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800862 if(gnss_set_result != GNSS_ERR_OK)
863 {
b.liud0ba7152024-06-19 14:47:21 +0800864 goto set_fail;
865 }
866 }
867
b.liudbc3f4b2024-06-25 18:22:24 +0800868 if(mode & GNSS_SET_MSGCFG_GLL)
869 {
b.liud0ba7152024-06-19 14:47:21 +0800870 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x01, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800871 if(gnss_set_result != GNSS_ERR_OK)
872 {
b.liud0ba7152024-06-19 14:47:21 +0800873 goto set_fail;
874 }
875 }
876
b.liudbc3f4b2024-06-25 18:22:24 +0800877 if(mode & GNSS_SET_MSGCFG_ZDA)
878 {
b.liud0ba7152024-06-19 14:47:21 +0800879 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x07, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800880 if(gnss_set_result != GNSS_ERR_OK)
881 {
b.liud0ba7152024-06-19 14:47:21 +0800882 goto set_fail;
883 }
884 }
885
b.liudbc3f4b2024-06-25 18:22:24 +0800886 if(mode & GNSS_SET_MSGCFG_GST)
887 {
b.liud0ba7152024-06-19 14:47:21 +0800888 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x08, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800889 if(gnss_set_result != GNSS_ERR_OK)
890 {
b.liud0ba7152024-06-19 14:47:21 +0800891 goto set_fail;
892 }
893 }
894
b.liudbc3f4b2024-06-25 18:22:24 +0800895 if(mode & GNSS_SET_MSGCFG_TXT)
896 {
b.liud0ba7152024-06-19 14:47:21 +0800897 gnss_set_result = gnss_8122_msgcfg(fd, 0xF0, 0x20, time);
b.liudbc3f4b2024-06-25 18:22:24 +0800898 if(gnss_set_result != GNSS_ERR_OK)
899 {
b.liud0ba7152024-06-19 14:47:21 +0800900 goto set_fail;
901 }
902 }
b.liudbc3f4b2024-06-25 18:22:24 +0800903 }
904 else
905 {
b.liud0ba7152024-06-19 14:47:21 +0800906 gnss_set_result = GNSS_ERR_ARG;
907 goto set_fail;
908 }
909
910 should_wait_rsp = TRUE;
b.liudbc3f4b2024-06-25 18:22:24 +0800911 }
912 else if(memcmp(cmd, "$MINEL", 6) == 0) // $MINEL,<elev>
913 {
b.liud0ba7152024-06-19 14:47:21 +0800914#if 0
915 float elev = 0.0f;
916 elev = (float)atof(cmd + 7);
917// LOGD("ELEV : %f", elev);
918// log_hex("ELEV", &elev, sizeof(double));
b.liudbc3f4b2024-06-25 18:22:24 +0800919 if(elev < -90.0f || elev > 90.0f)
920 {
b.liud0ba7152024-06-19 14:47:21 +0800921 gnss_set_result = GNSS_ERR_ARG;
922 goto set_fail;
923 }
924 float elevs[2];
925 elevs[0] = elev;
926 elevs[1] = elev;
927 gnss_set_result = gnss_8122_minel(fd, elevs);
b.liudbc3f4b2024-06-25 18:22:24 +0800928 if(gnss_set_result != GNSS_ERR_OK)
929 {
b.liud0ba7152024-06-19 14:47:21 +0800930 goto set_fail;
931 }
932 should_wait_rsp = FALSE;
933#else
934 gnss_set_result = GNSS_ERR_UNSUPPORT;
935 goto set_fail;
936#endif
b.liudbc3f4b2024-06-25 18:22:24 +0800937 }
938 else if(memcmp(cmd, "$NMEACFG", 8) == 0) // $NMEACFG,<ver>
939 {
b.liud0ba7152024-06-19 14:47:21 +0800940#if 0
941 gnss_memaver_type_enum version = (gnss_memaver_type_enum)atoi(cmd + 9);
b.liudbc3f4b2024-06-25 18:22:24 +0800942 if(version == GNSS_MEMAVER_TYPE_3_0)
943 {
b.liud0ba7152024-06-19 14:47:21 +0800944 gnss_set_result = gnss_8122_nmeaver(fd, 1);
b.liudbc3f4b2024-06-25 18:22:24 +0800945 }
946 else if(version == GNSS_MEMAVER_TYPE_4_0)
947 {
b.liud0ba7152024-06-19 14:47:21 +0800948 gnss_set_result = gnss_8122_nmeaver(fd, 2);
b.liudbc3f4b2024-06-25 18:22:24 +0800949 }
950 else if(version == GNSS_MEMAVER_TYPE_4_1)
951 {
b.liud0ba7152024-06-19 14:47:21 +0800952 gnss_set_result = gnss_8122_nmeaver(fd, 3);
b.liudbc3f4b2024-06-25 18:22:24 +0800953 }
954 else
955 {
b.liud0ba7152024-06-19 14:47:21 +0800956 gnss_set_result = GNSS_ERR_ARG;
957 goto set_fail;
958 }
b.liudbc3f4b2024-06-25 18:22:24 +0800959 if(gnss_set_result != GNSS_ERR_OK)
960 {
b.liud0ba7152024-06-19 14:47:21 +0800961 goto set_fail;
962 }
963 should_wait_rsp = FALSE;
964#else
965 gnss_set_result = GNSS_ERR_UNSUPPORT;
966 goto set_fail;
967#endif
b.liu5f950c52024-06-15 20:13:12 +0800968 }
969 else
970 {
971 LOGW("Unknown cmd:%s", cmd);
972 gnss_set_result = GNSS_ERR_UNSUPPORT;
973 goto set_fail;
974 }
975
b.liudbc3f4b2024-06-25 18:22:24 +0800976 set_success:
977 if(should_wait_rsp)
978 {
b.liud0ba7152024-06-19 14:47:21 +0800979 setting_waitting = TRUE;
b.liu5f950c52024-06-15 20:13:12 +0800980 pthread_mutex_lock(&read_mutex);
981 pthread_cond_wait(&read_cond, &read_mutex);
982 pthread_mutex_unlock(&read_mutex);
b.liudbc3f4b2024-06-25 18:22:24 +0800983 }
984 else
985 {
b.liu5f950c52024-06-15 20:13:12 +0800986 mbtk_timer_clear();
987 }
988
989 setting_busy = FALSE;
990 return gnss_set_result;
b.liudbc3f4b2024-06-25 18:22:24 +0800991 set_fail:
b.liu5f950c52024-06-15 20:13:12 +0800992 setting_busy = FALSE;
993 mbtk_timer_clear();
994 return gnss_set_result;
995 }
b.liuf9fbfa12024-06-14 15:53:59 +0800996}
997
b.liu5f950c52024-06-15 20:13:12 +0800998