blob: 3b5236c4f5501dafe723b058a79ed5fe1c072f3f [file] [log] [blame]
wangyouqiang3d09b4d2024-01-04 13:50:51 +08001#include <time.h>
wangyouqiang75b6cfd2024-05-31 14:25:45 +08002#include <pthread.h>
liuyanga812f1b2024-07-25 17:49:14 +08003#include <stdio.h>
4#include <stdlib.h>
5#include <string.h>
wangyouqiang75b6cfd2024-05-31 14:25:45 +08006
b.liu4e243dc2023-11-27 11:20:00 +08007#include "lynq_gnss.h"
liuyanga812f1b2024-07-25 17:49:14 +08008
wangyouqiang3d09b4d2024-01-04 13:50:51 +08009#define QSER_RESULT_SUCCESS 0
10#define QSER_RESULT_FAIL -1
liuyanga812f1b2024-07-25 17:49:14 +080011#define QSER_GNSS_TIMEOUT 5
yq.wang9dd771b2024-09-13 23:38:40 -070012#define QSER_AGNSS_DOWNLOAD_TIMEPUT 60
13#define QSER_AGNSS_INJECT_TIMEOUT 20
wangyouqiang3d09b4d2024-01-04 13:50:51 +080014
15/**********************************VARIABLE***********************************/
16static bool inited = FALSE;
yq.wang6a3437f2024-07-27 02:57:20 -070017static uint32_t qser_h_gnss = 0x5F6F7F8F;
wangyouqiang3d09b4d2024-01-04 13:50:51 +080018gnss_handler_func_t qser_gnss_callback = NULL;
wangyouqiang3d09b4d2024-01-04 13:50:51 +080019static time_t qser_gnss_time = 0;
yq.wang937355d2024-07-26 01:24:42 -070020qser_agps_info qser_agps_info_save = {0};
wangyouqiang75b6cfd2024-05-31 14:25:45 +080021gnss_async_func_t qser_gnss_async_callback = NULL;
wangyouqiang3d09b4d2024-01-04 13:50:51 +080022
23extern long timezone;
24/**********************************VARIABLE***********************************/
25
26/**********************************FUNC***********************************/
wangyouqiang75b6cfd2024-05-31 14:25:45 +080027static void qser_gnss_async_set_cb(gnss_async_func_t cb)
28{
29 qser_gnss_async_callback = cb;
30}
31
32static gnss_async_func_t qser_gnss_async_get_cb(void)
33{
34 return qser_gnss_async_callback;
35}
36
37
wangyouqiang3d09b4d2024-01-04 13:50:51 +080038static time_t qser_get_timestamp(char *time)
39{
40 char tmp_char[4] = {0};
41 struct tm* tmp_time = (struct tm*)malloc(sizeof(struct tm));
42
43 memset(tmp_time, 0, sizeof(struct tm));
44 memset(tmp_char, 0, sizeof(tmp_char));
45 memcpy(tmp_char, &time[4], 2);
46 tmp_time->tm_sec = atoi(tmp_char);
47 memcpy(tmp_char, &time[2], 2);
48 tmp_time->tm_min = atoi(tmp_char);
49 memcpy(tmp_char, &time[0], 2);
50 tmp_time->tm_hour = atoi(tmp_char);
51 memcpy(tmp_char, &time[6], 2);
52 tmp_time->tm_mday = atoi(tmp_char);
53 memcpy(tmp_char, &time[8], 2);
54 tmp_time->tm_mon = atoi(tmp_char) - 1;
55 memcpy(tmp_char, &time[10], 2);
56 tmp_time->tm_year = 100 + atoi(tmp_char);
57
58 time_t _t = mktime(tmp_time);//按当地时区解析tmp_time
59 //gnss_log("timestamp: %ld\n",_t);
60 tzset(); // 自动设置本地时区
61 _t = _t - timezone;
62 //gnss_log("timestamp: %ld\n",_t);
63
64 free(tmp_time);
65 return _t;
66}
67
yq.wang937355d2024-07-26 01:24:42 -070068static time_t qser_get_gnss_time_sec(const void *data, int data_len)
wangyouqiang3d09b4d2024-01-04 13:50:51 +080069{
70 int i = 0, num = 0;
yq.wang937355d2024-07-26 01:24:42 -070071 const char *nmea = (const char *)data;
wangyouqiang3d09b4d2024-01-04 13:50:51 +080072 char time[15] = {0};
73 char *check_state = NULL;
74
75 //$GNRMC,024142.000,A,3039.364421,N,10403.417935,E,0.051,0.00,030124,,E,A*00
76 check_state = strstr(nmea, "RMC");
77 if(check_state != NULL)
78 {
79 for(i = 0; i < data_len; i++)
80 {
81 if(check_state[i] == ',')
82 {
83 num++;
84 i++;
wangyouqiange039fe32024-01-04 16:02:42 +080085 if(num == 1)//get time
wangyouqiang3d09b4d2024-01-04 13:50:51 +080086 {
wangyouqiange039fe32024-01-04 16:02:42 +080087 if(check_state[i] >= '0' && check_state[i] <= '9')
88 {
89 memcpy(time, check_state + i, 6);
yq.wang9dd771b2024-09-13 23:38:40 -070090 //LOGE("[qser_gnss] %s.", time);
wangyouqiange039fe32024-01-04 16:02:42 +080091 }
92 else
93 {
94 qser_gnss_time = 0;
95 return qser_gnss_time;
96 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +080097 }
wangyouqiange039fe32024-01-04 16:02:42 +080098 else if(num == 9)//get date
wangyouqiang3d09b4d2024-01-04 13:50:51 +080099 {
wangyouqiange039fe32024-01-04 16:02:42 +0800100 if(check_state[i] >= '0' && check_state[i] <= '9')
101 {
102 memcpy(time + 6, check_state + i, 6);
yq.wang9dd771b2024-09-13 23:38:40 -0700103 //LOGE("[qser_gnss] %s.", time);
wangyouqiange039fe32024-01-04 16:02:42 +0800104 break;
105 }
106 else
107 {
108 qser_gnss_time = 0;
109 return qser_gnss_time;
110 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800111 }
wangyouqiange039fe32024-01-04 16:02:42 +0800112 else if(num > 9)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800113 {
114 qser_gnss_time = 0;
115 return qser_gnss_time;
116 }
117 }
118 }
119
120 qser_gnss_time = qser_get_timestamp(time);
121 }
122
123 return qser_gnss_time;
124}
125
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800126static void* gnss_async_thread(void* arg)
127{
128 qser_gnss_error_e state = QSER_GNSS_ERROR_SUCCESS;
129 gnss_async_func_t cb = qser_gnss_async_get_cb();
yq.wang6a3437f2024-07-27 02:57:20 -0700130 int ret = qser_Gnss_Start(qser_h_gnss);
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800131 if(ret != QSER_RESULT_SUCCESS)
132 {
133 LOGE("[qser_gnss] gnss_async_thread() fail.");
134 state = QSER_GNSS_ERROR_FAIL;
135 }
136
137 if(cb != NULL)
138 {
139 cb(state);
140 }
141 return NULL;
142}
143
liuyanga812f1b2024-07-25 17:49:14 +0800144static void gnss_callback(uint32 ind_type, const void* data, uint32 data_len)
145{
yq.wang937355d2024-07-26 01:24:42 -0700146 if(data == NULL || data_len <= 0)
147 {
148 LOGE("[qser_gnss] data is NULL.");
149 return;
150 }
151
152 if(qser_gnss_callback == NULL)
153 {
154 //LOGE("[qser_gnss] qser_gnss_callback is NULL.");
155 return;
156 }
157
liuyanga812f1b2024-07-25 17:49:14 +0800158 if(ind_type == MBTK_GNSS_IND_LOCATION) {
yq.wang937355d2024-07-26 01:24:42 -0700159 if(data_len != sizeof(mbtk_gnss_location_info_t))
160 {
161 LOGE("[qser_gnss] data size error");
162 return;
163 }
164 mbtk_gnss_location_info_t *locl_info = (mbtk_gnss_location_info_t *)data;
165 mopen_location_info_t qser_locl_info;
166 memset(&qser_locl_info, 0x0, sizeof(mopen_location_info_t));
167 qser_locl_info.latitude = locl_info->latitude;
168 qser_locl_info.longitude = locl_info->longitude;
169 qser_locl_info.altitude = locl_info->altitude;
170 qser_locl_info.speed = locl_info->speed;
171 qser_locl_info.bearing = locl_info->bearing;
172 qser_locl_info.timestamp = locl_info->timestamp;
173 qser_gnss_callback(NULL, E_MT_LOC_MSG_ID_LOCATION_INFO, (void *)(&qser_locl_info), NULL);
liuyanga812f1b2024-07-25 17:49:14 +0800174 } else if(ind_type == MBTK_GNSS_IND_NMEA) {
yq.wang937355d2024-07-26 01:24:42 -0700175 mopen_gnss_nmea_info_t qser_nmea = {0};
176 memset(&qser_nmea, 0x0, sizeof(mopen_gnss_nmea_info_t));
177 qser_nmea.length = data_len;
178 memcpy(qser_nmea.nmea, (char *)data, data_len);
179 qser_nmea.timestamp = qser_get_gnss_time_sec(data, data_len);
180 qser_gnss_callback(NULL, E_MT_LOC_MSG_ID_NMEA_INFO, (void *)(&qser_nmea), NULL);
liuyanga812f1b2024-07-25 17:49:14 +0800181 } else {
182 printf("Unknown IND : %d\n", ind_type);
183 }
184}
185
186
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800187/**********************************FUNC***********************************/
188
189/**********************************API***********************************/
b.liu4e243dc2023-11-27 11:20:00 +0800190int qser_Gnss_Init (uint32_t *h_gnss)
liubin281ac462023-07-19 14:22:54 +0800191{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800192 //UNUSED(h_gnss);
liuyanga812f1b2024-07-25 17:49:14 +0800193 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
liubin281ac462023-07-19 14:22:54 +0800194
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800195 if(!inited)
196 {
liuyanga812f1b2024-07-25 17:49:14 +0800197 ret = mbtk_gnss_init(gnss_callback);
198 if(ret == GNSS_ERR_OK)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800199 {
yq.wang937355d2024-07-26 01:24:42 -0700200 ret = mbtk_gnss_ind_set(MBTK_GNSS_IND_NMEA, QSER_GNSS_TIMEOUT);
201 if(ret == GNSS_ERR_OK)
202 {
203 inited = TRUE;
204 }
205 else
206 {
yq.wang5c647e02024-08-10 00:01:11 -0700207 LOGE("[qser_gnss] init mbtk_gnss_ind_set() fail.ret = [%d]", ret);
yq.wang937355d2024-07-26 01:24:42 -0700208 return QSER_RESULT_FAIL;
209 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800210 }
211 else
212 {
yq.wang5c647e02024-08-10 00:01:11 -0700213 LOGE("[qser_gnss] mbtk_gnss_init() fail.ret = [%d]", ret);
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800214 return QSER_RESULT_FAIL;
215 }
216 }
yq.wang6a3437f2024-07-27 02:57:20 -0700217 *h_gnss = qser_h_gnss;
liubin281ac462023-07-19 14:22:54 +0800218
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800219 return QSER_RESULT_SUCCESS;
liubin281ac462023-07-19 14:22:54 +0800220}
221
b.liu4e243dc2023-11-27 11:20:00 +0800222int qser_Gnss_Deinit (uint32_t h_gnss)
liubin281ac462023-07-19 14:22:54 +0800223{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800224 //UNUSED(h_gnss);
yq.wang6a3437f2024-07-27 02:57:20 -0700225 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800226 {
yq.wang6a3437f2024-07-27 02:57:20 -0700227 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800228 return QSER_RESULT_FAIL;
229 }
230
liuyanga812f1b2024-07-25 17:49:14 +0800231 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
liubin281ac462023-07-19 14:22:54 +0800232
yq.wang6a3437f2024-07-27 02:57:20 -0700233 if(inited)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800234 {
yq.wang6a3437f2024-07-27 02:57:20 -0700235 ret = mbtk_gnss_deinit();
236 if(ret == GNSS_ERR_OK)
237 {
238 inited = FALSE;
239 }
240 else
241 {
yq.wang5c647e02024-08-10 00:01:11 -0700242 LOGE("[qser_gnss] mbtk_gnss_init() fail.ret = [%d]", ret);
yq.wang6a3437f2024-07-27 02:57:20 -0700243 return QSER_RESULT_FAIL;
244 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800245 }
liubin281ac462023-07-19 14:22:54 +0800246
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800247 return QSER_RESULT_SUCCESS;
liubin281ac462023-07-19 14:22:54 +0800248}
b.liu5fa9e772023-11-23 18:00:55 +0800249
b.liu4e243dc2023-11-27 11:20:00 +0800250int qser_AddRxIndMsgHandler (gnss_handler_func_t handler_ptr,uint32_t h_gnss)
251{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800252 //UNUSED(handler_ptr);
253 //UNUSED(h_gnss);
yq.wang6a3437f2024-07-27 02:57:20 -0700254 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800255 {
yq.wang6a3437f2024-07-27 02:57:20 -0700256 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800257 return QSER_RESULT_FAIL;
258 }
b.liu4e243dc2023-11-27 11:20:00 +0800259
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800260 if(handler_ptr == NULL)
261 {
262 LOGE("[qser_gnss] handler_ptr is NULL.");
263 return QSER_RESULT_FAIL;
264 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800265
266 qser_gnss_callback = handler_ptr;
267 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800268}
269
b.liu4e243dc2023-11-27 11:20:00 +0800270int qser_Set_Indications (uint32_t h_gnss,e_msg_id_t type)
271{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800272 //UNUSED(h_gnss);
273 //UNUSED(type);
yq.wang6a3437f2024-07-27 02:57:20 -0700274 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800275 {
yq.wang6a3437f2024-07-27 02:57:20 -0700276 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800277 return QSER_RESULT_FAIL;
278 }
b.liu4e243dc2023-11-27 11:20:00 +0800279
yq.wang937355d2024-07-26 01:24:42 -0700280 gnss_err_enum ret = GNSS_ERR_OK;
281 if(type == E_MT_LOC_MSG_ID_LOCATION_INFO)
282 {
283 ret = mbtk_gnss_ind_set(MBTK_GNSS_IND_LOCATION, QSER_GNSS_TIMEOUT);
284 }
285 else if(type == E_MT_LOC_MSG_ID_NMEA_INFO)
286 {
287 ret = mbtk_gnss_ind_set(MBTK_GNSS_IND_NMEA, QSER_GNSS_TIMEOUT);
288 }
289 else
290 {
291 LOGE("[qser_gnss] type is fail.");
292 return QSER_RESULT_FAIL;
293 }
294
295 if(ret != GNSS_ERR_OK)
296 {
yq.wang5c647e02024-08-10 00:01:11 -0700297 LOGE("[qser_gnss] mbtk_gnss_ind_set() fail.ret = [%d]", ret);
yq.wang937355d2024-07-26 01:24:42 -0700298 return QSER_RESULT_FAIL;
299 }
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800300 return QSER_RESULT_SUCCESS;
b.liu4e243dc2023-11-27 11:20:00 +0800301}
302
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800303int qser_Gnss_Set_Async_Callback(gnss_async_func_t cb)
304{
305 qser_gnss_async_set_cb(cb);
306 return QSER_RESULT_SUCCESS;
307}
308
b.liu4e243dc2023-11-27 11:20:00 +0800309int qser_Gnss_Start (uint32_t h_gnss)
310{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800311 //UNUSED(h_gnss);
yq.wang6a3437f2024-07-27 02:57:20 -0700312 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800313 {
yq.wang6a3437f2024-07-27 02:57:20 -0700314 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800315 return QSER_RESULT_FAIL;
316 }
b.liu4e243dc2023-11-27 11:20:00 +0800317
liuyanga812f1b2024-07-25 17:49:14 +0800318 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
wangyouqiang7d66fb12024-01-26 19:19:00 +0800319
yq.wang937355d2024-07-26 01:24:42 -0700320 ret = mbtk_gnss_open(255, QSER_GNSS_TIMEOUT);
liuyanga812f1b2024-07-25 17:49:14 +0800321 if(ret != GNSS_ERR_OK)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800322 {
yq.wang5c647e02024-08-10 00:01:11 -0700323 LOGE("[qser_gnss] mbtk_gnss_open is error.ret = [%d]", ret);
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800324 return QSER_RESULT_FAIL;
325 }
326
327 return QSER_RESULT_SUCCESS;
b.liu4e243dc2023-11-27 11:20:00 +0800328}
329
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800330int qser_Gnss_Start_Async(uint32_t h_gnss)
331{
332 //UNUSED(h_gnss);
yq.wang6a3437f2024-07-27 02:57:20 -0700333 if(h_gnss != qser_h_gnss)
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800334 {
yq.wang6a3437f2024-07-27 02:57:20 -0700335 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang75b6cfd2024-05-31 14:25:45 +0800336 return QSER_RESULT_FAIL;
337 }
338
339 pthread_attr_t thread_attr;
340 pthread_t gnss_thread_id;
341 pthread_attr_init(&thread_attr);
342 if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
343 {
344 LOGE("[qser_gnss] pthread_attr_setdetachstate() fail.");
345 return QSER_RESULT_FAIL;
346 }
347
348 //memcpy(&qser_data_backup, data_call, sizeof(qser_data_call_s));
349 if(pthread_create(&gnss_thread_id, &thread_attr, gnss_async_thread, NULL))
350 {
351 LOGE("[qser_gnss] pthread_create() fail.");
352 return QSER_RESULT_FAIL;
353 }
354 pthread_attr_destroy(&thread_attr);
355
356 return QSER_RESULT_SUCCESS;
357}
358
b.liu4e243dc2023-11-27 11:20:00 +0800359int qser_Gnss_Stop (uint32_t h_gnss)
360{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800361 //UNUSED(h_gnss);
yq.wang6a3437f2024-07-27 02:57:20 -0700362 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800363 {
yq.wang6a3437f2024-07-27 02:57:20 -0700364 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800365 return QSER_RESULT_FAIL;
366 }
b.liu4e243dc2023-11-27 11:20:00 +0800367
liuyanga812f1b2024-07-25 17:49:14 +0800368 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
369 ret = mbtk_gnss_close(QSER_GNSS_TIMEOUT);
370 if(ret != GNSS_ERR_OK)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800371 {
yq.wang5c647e02024-08-10 00:01:11 -0700372 LOGE("[qser_gnss] mbtk_gnss_close is error.ret = [%d]", ret);
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800373 return QSER_RESULT_FAIL;
374 }
liuyanga812f1b2024-07-25 17:49:14 +0800375
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800376 return QSER_RESULT_SUCCESS;
b.liu4e243dc2023-11-27 11:20:00 +0800377}
378
379int qser_Gnss_InjectTime (uint32_t h_gnss,LYNQ_INJECT_TIME_INTO_T *time_info)
380{
yq.wang6a3437f2024-07-27 02:57:20 -0700381 //UNUSED(h_gnss);
b.liu4e243dc2023-11-27 11:20:00 +0800382 UNUSED(time_info);
383
yq.wang6a3437f2024-07-27 02:57:20 -0700384 if(h_gnss != qser_h_gnss)
385 {
386 LOGE("[qser_gnss] h_gnss is error.");
387 return QSER_RESULT_FAIL;
388 }
389 return QSER_RESULT_SUCCESS;
b.liu4e243dc2023-11-27 11:20:00 +0800390}
391
392int qser_Gnss_Delete_Aiding_Data (uint32_t h_gnss,DELETE_AIDING_DATA_TYPE_T flags)
393{
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800394 //UNUSED(h_gnss);
395 //UNUSED(flags);
396
yq.wang6a3437f2024-07-27 02:57:20 -0700397 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800398 {
yq.wang6a3437f2024-07-27 02:57:20 -0700399 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800400 return QSER_RESULT_FAIL;
401 }
402 return QSER_RESULT_SUCCESS;
403}
404
405int qser_Gnss_Server_Configuration(char *host, char *id, char *password)
406{
wangyouqiang7d66fb12024-01-26 19:19:00 +0800407 //UNUSED(host);
408 //UNUSED(id);
409 //UNUSED(password);
410
yq.wang6a3437f2024-07-27 02:57:20 -0700411 if(!inited)
412 {
413 LOGE("[qser_gnss] api not init.");
414 return QSER_RESULT_FAIL;
415 }
yq.wang9dd771b2024-09-13 23:38:40 -0700416
417 memset(qser_agps_info_save.host, 0x0, QSER_LEN_MAX);
418 if(host != NULL && strlen(host) > 0 && strlen(host) < QSER_LEN_MAX)
wangyouqiang7d66fb12024-01-26 19:19:00 +0800419 {
yq.wang9dd771b2024-09-13 23:38:40 -0700420 memcpy(qser_agps_info_save.host, host, strlen(host));
wangyouqiang7d66fb12024-01-26 19:19:00 +0800421 }
422
yq.wang9dd771b2024-09-13 23:38:40 -0700423 memset(qser_agps_info_save.id, 0x0, QSER_LEN_MAX);
424 if(id != NULL && strlen(id) > 0 && strlen(id) < QSER_LEN_MAX)
wangyouqiang7d66fb12024-01-26 19:19:00 +0800425 {
yq.wang9dd771b2024-09-13 23:38:40 -0700426 memcpy(qser_agps_info_save.id, id, strlen(id));
wangyouqiang7d66fb12024-01-26 19:19:00 +0800427 }
428
yq.wang9dd771b2024-09-13 23:38:40 -0700429 memset(qser_agps_info_save.passwd, 0x0, QSER_LEN_MAX);
430 if(password != NULL && strlen(password) > 0 && strlen(password) < QSER_LEN_MAX)
wangyouqiang7d66fb12024-01-26 19:19:00 +0800431 {
yq.wang9dd771b2024-09-13 23:38:40 -0700432 memcpy(qser_agps_info_save.passwd, password, strlen(password));
433 }
434
435 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
436 char write_buff[512] = {0};
437 int write_length = 0;
438 write_length = snprintf(write_buff, 512, "$AGPSCFG,%s,%s,%s", strlen(qser_agps_info_save.host) > 0 ? qser_agps_info_save.host : "NULL",
439 strlen(qser_agps_info_save.id) > 0 ? qser_agps_info_save.id : "NULL",
440 strlen(qser_agps_info_save.passwd) > 0 ? qser_agps_info_save.passwd : "NULL");
441 ret = mbtk_gnss_setting(write_buff, QSER_GNSS_TIMEOUT);
442 if(ret != GNSS_ERR_OK)
443 {
444 LOGE("[qser_gnss] mbtk_gnss_setting fail.ret = [%d]", ret);
445 return QSER_RESULT_FAIL;
wangyouqiang7d66fb12024-01-26 19:19:00 +0800446 }
447 return QSER_RESULT_SUCCESS;
b.liu4e243dc2023-11-27 11:20:00 +0800448}
449
yq.wang6a3437f2024-07-27 02:57:20 -0700450int qser_Gnss_download_tle()
b.liu5fa9e772023-11-23 18:00:55 +0800451{
yq.wang6a3437f2024-07-27 02:57:20 -0700452 if(!inited)
wangyouqiang7d66fb12024-01-26 19:19:00 +0800453 {
yq.wang6a3437f2024-07-27 02:57:20 -0700454 LOGE("[qser_gnss] api not init.");
wangyouqiang7d66fb12024-01-26 19:19:00 +0800455 return QSER_RESULT_FAIL;
456 }
yq.wang9dd771b2024-09-13 23:38:40 -0700457
458 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
459 ret = mbtk_gnss_eph_download(QSER_AGNSS_DOWNLOAD_TIMEPUT);
460 if(ret != GNSS_ERR_OK)
461 {
462 LOGE("[qser_gnss] mbtk_gnss_eph_download fail.ret = [%d]", ret);
463 return QSER_RESULT_FAIL;
464 }
wangyouqiang7d66fb12024-01-26 19:19:00 +0800465 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800466}
467
yq.wang6a3437f2024-07-27 02:57:20 -0700468int qser_Gnss_injectEphemeris(uint32_t h_gnss)
469{
470 //UNUSED(h_gnss);
471
472 if(h_gnss != qser_h_gnss)
473 {
474 LOGE("[qser_gnss] h_gnss is error.");
475 return QSER_RESULT_FAIL;
476 }
yq.wang9dd771b2024-09-13 23:38:40 -0700477
478 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
479 ret = mbtk_gnss_eph_inject(QSER_AGNSS_INJECT_TIMEOUT);
480 if(ret != GNSS_ERR_OK)
481 {
482 LOGE("[qser_gnss] mbtk_gnss_eph_inject fail.ret = [%d]", ret);
483 return QSER_RESULT_FAIL;
484 }
yq.wang6a3437f2024-07-27 02:57:20 -0700485 return QSER_RESULT_SUCCESS;
486}
487
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800488int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency)
489{
490 //UNUSED(h_gnss);
491 //UNUSED(frequency);
492
yq.wang6a3437f2024-07-27 02:57:20 -0700493 if(h_gnss != qser_h_gnss)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800494 {
yq.wang6a3437f2024-07-27 02:57:20 -0700495 LOGE("[qser_gnss] h_gnss is error.");
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800496 return QSER_RESULT_FAIL;
497 }
498
499 if(frequency != 1 && frequency != 2 && frequency != 5)
500 {
501 LOGE("[qser_gnss] frequency out of range.");
502 return QSER_RESULT_FAIL;
503 }
504
liuyanga812f1b2024-07-25 17:49:14 +0800505 gnss_err_enum ret = GNSS_ERR_UNKNOWN;
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800506 char param_buf[32] = {0};
507 int length = 0;
yq.wang6a3437f2024-07-27 02:57:20 -0700508 length = snprintf(param_buf, 32, "$FREQCFG,%d", frequency);
509 ret = mbtk_gnss_setting(param_buf, QSER_GNSS_TIMEOUT);
510 if(ret != GNSS_ERR_OK)
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800511 {
yq.wang5c647e02024-08-10 00:01:11 -0700512 LOGE("[qser_gnss] mbtk_gnss_setting fail.ret = [%d]", ret);
wangyouqiang3d09b4d2024-01-04 13:50:51 +0800513 return QSER_RESULT_FAIL;
514 }
515 return QSER_RESULT_SUCCESS;
516}
517/**********************************API***********************************/
518
519