blob: dc766a922d76e49fcfa86de8e1b2175b22e7225f [file] [log] [blame]
b.liud440f9f2025-04-18 10:44:31 +08001/*-----------------------------------------------------------------------------------------------*/
2/**
3 @file ql_gnss_test.c
4 @brief GNSS service API
5*/
6/*-----------------------------------------------------------------------------------------------*/
7
8/*-------------------------------------------------------------------------------------------------
9 Copyright (c) 2024 mobiletek Wireless Solution, Co., Ltd. All Rights Reserved.
10 mobiletek Wireless Solution Proprietary and Confidential.
11-------------------------------------------------------------------------------------------------*/
12
13/*-------------------------------------------------------------------------------------------------
14 EDIT HISTORY
15 This section contains comments describing changes made to the file.
16 Notice that changes are listed in reverse chronological order.
17 $Header: $
18 when who what, where, why
19 -------- --------- -----------------------------------------------------------------
20 20241022 yq.wang Created .
21-------------------------------------------------------------------------------------------------*/
22
23#include <stdio.h>
24#include <time.h>
25#include <string.h>
26#include <stdlib.h>
27
28#include "ql_test_utils.h"
29#include "ql_type.h"
30#include "ql_gnss.h"
31
32#define IS_DIGIT(x) ( ((x-'0')>=0) && ((x-'0')<=9) )
33
34
35static void gnss_ind_cb(void *msg)
36{
37 uint8_t *msg_id = NULL;
38 msg_id = msg;
39 if(*msg_id == QL_GNSS_NMEA_MSG)
40 {
41 nmea_srv_ind_msg *data = (nmea_srv_ind_msg *)msg;
42 printf("time=%d %s",data->time,data->nmea_sentence);
43 }
44 else if (*msg_id == QL_GNSS_STATUS_MSG)
45 {
46 gnss_status_ind_msg *data = (gnss_status_ind_msg *)msg;
47 switch(data->g_status)
48 {
49 case QL_GNSS_STATUS_FOTA_START:
50 printf("gnss engine fota req\n");
51 break;
52 case QL_GNSS_STATUS_FOTA_BOOT:
53 printf("gnss engine fota bootloader\n");
54 break;
55 case QL_GNSS_STATUS_FOTA_FIRM:
56 printf("gnss engine fota firmware\n");
57 break;
58 case QL_GNSS_STATUS_WORKING:
59 printf("gnss engine working\n");
60 break;
61 default:
62 break;
63 };
64 }
65 else
66 {
67 printf("Invalue msg !!!");
68 }
69}
70
71#if 0
72static void gnss_service_error_cb(int error)
73{
74 printf("===== GNSS Service Abort =====\n");
75}
76#endif
77
78static void item_ql_gnss_init(void)
79{
80 int err = QL_ERR_OK;
81 printf("Start to ql_gnss_init\n");
82 err = ql_gnss_init();
83 if(err == QL_ERR_OK)
84 {
85 printf("Successful\n");
86 }
87 else
88 {
89 printf("Failed to ql_gnss_init, err=%d\n", err);
90 }
91}
92
93
94static void item_ql_gnss_set_ind_cb(void)
95{
96 int err = QL_ERR_OK;
97
98 printf("Start to ql_gnss_set_ind_cb\n");
99 err = ql_gnss_set_ind_cb(gnss_ind_cb);
100 if(err != QL_ERR_OK)
101 {
102 printf("Failed to ql_gnss_set_ind_cb, err=%d\n", err);
103 }
104 else
105 {
106 printf("Successful\n");
107 }
108}
109
110#if 0
111static void item_ql_gnss_set_service_error_cb(void)
112{
113 int err = QL_ERR_OK;
114 printf("Start to item_ql_gnss_set_service_error_cb\n");
115 err = ql_gnss_set_service_error_cb(gnss_service_error_cb);
116 if(err == QL_ERR_OK)
117 {
118 printf("Successful\n");
119 }
120 else
121 {
122 printf("Failed to item_ql_gnss_set_service_error_cb, err=%d\n", err);
123 }
124
125}
126#endif
127
128static void item_ql_gnss_start(void)
129{
130 int err = QL_ERR_OK;
131
132 printf("Start to ql_gnss_start\n");
133 err = ql_gnss_start();
134 if(err != QL_ERR_OK)
135 {
136 printf("Failed to start gnss , err=%d\n", err);
137 }
138 else
139 {
140 printf("Successful\n");
141 }
142}
143
144
145static void item_ql_gnss_stop(void)
146{
147 int err = QL_ERR_OK;
148
149 printf("Start to ql_gnss_stop\n");
150 err = ql_gnss_stop();
151 if(err != QL_ERR_OK)
152 {
153 printf("Failed to stop gnss, err=%d\n", err);
154 }
155 else
156 {
157 printf("Successful\n");
158 }
159}
160
161#if 0
162static void item_ql_gnss_get_engine_state(void)
163{
164 int err = QL_ERR_OK;
165 QL_GNSS_ENGINE_STATE_E state = 0;
166
167 printf("Start ql_gnss_get_engine_state : \n");
168 err = ql_gnss_get_engine_state(&state);
169 if(err != QL_ERR_OK)
170 {
171 printf("Get engine state faild %d\n",err);
172 }
173 else
174 {
175 if(state)
176 {
177 printf("Engine state is on\n");
178 }
179 else
180 {
181 printf("Engine state is off\n");
182 }
183 }
184}
185#endif
186
187#if 0
188static void ql_gnss_get_constellation_show(char *str_p, QL_GNSS_CONSTELLATION_MASK_E mask)
189{
190 switch (mask)
191 {
192 case GPS_ONLY:
193 snprintf(str_p, 100, "%s", "GPS");
194 break;
195 case BDS_ONLY:
196 snprintf(str_p, 100, "%s", "BDS_ONLY");
197 break;
198 case GPS_BDS:
199 snprintf(str_p, 100, "%s", "GPS+BDS");
200 break;
201 case GLONASS_ONLY:
202 snprintf(str_p, 100, "%s", "GLONASS_ONLY");
203 break;
204 case GPS_GLONASS:
205 snprintf(str_p, 100, "%s", "GPS+GLONASS");
206 break;
207 case BDS_GLONASS:
208 snprintf(str_p, 100, "%s", "BDS+GLONASS");
209 break;
210 case GPS_BDS_GLONASS:
211 snprintf(str_p, 100, "%s", "GPS+BDS+GLONASS");
212 break;
213 case GPS_SBAS_QZSS:
214 snprintf(str_p, 100, "%s", "GPS+SBAS+QZSS");
215 break;
216 case GPS_BDS_GALILEO_SBAS_QZSS:
217 snprintf(str_p, 100, "%s", "GPS+BDS+GALILEO+SBAS+QZSS");
218 break;
219 case GPS_GLONASS_GALILEO_SBAS_QZSS:
220 snprintf(str_p, 100, "%s", "GPS+GLONASS+GALILEO+SBAS+QZSS");
221 break;
222 default:
223 snprintf(str_p, 100, "%s", "error");
224 break;
225 };
226}
227
228static void item_ql_gnss_get_constellation(void)
229{
230 int err = QL_ERR_OK;
231 QL_GNSS_CONSTELLATION_MASK_E mask = 0;
232 printf("Start ql_gnss_get_constellation : \n");
233 err = ql_gnss_get_constellation(&mask);
234 if (err != QL_ERR_OK)
235 {
236 printf("Set Constellation faild %d\n", err);
237 }
238 else
239 {
240 switch (mask)
241 {
242 case GPS_SBAS_QZSS:
243 printf("GPS+SBAS+QZSS\n");
244 break;
245 case BDS_ONLY:
246 printf("BDS_ONLY\n");
247 break;
248 case GPS_BDS_GALILEO_SBAS_QZSS:
249 printf("GPS+BDS+GALILEO+SBAS+QZSS\n");
250 break;
251 case GPS_GLONASS_GALILEO_SBAS_QZSS:
252 printf("GPS+GLONASS+GALILEO+SBAS+QZSS\n");
253 break;
254 case GPS_ONLY:
255 printf("GPS_ONLY\n");
256 break;
257 case GPS_BDS:
258 printf("GPS_BDS\n");
259 break;
260 case GLONASS_ONLY:
261 printf("GLONASS_ONLY\n");
262 break;
263 case GPS_GLONASS:
264 printf("GPS+GLONASS\n");
265 break;
266 case BDS_GLONASS:
267 printf("BDS+GLONASS\n");
268 break;
269 case GPS_BDS_GLONASS:
270 printf("GPS+BDS+GLONASS\n");
271 break;
272 default:
273 break;
274 };
275 }
276}
277
278/*
279EC200 Supported constellations
280(GPS+SBAS+QZSS--0x08|BDS_ONLY--0x10|GPS+BDS+GALILEO+SBAS+QZSS--0x11|GPS+GLONASS+GALILEO+SBAS+QZSS--0x101)");
281
282AG35CET Supported constellations
283(GPS_ONLY--0x01|BDS_ONLY--0x02|GPS_BDS--0x03|GLONASS_ONLY--0x04)|GPS_GLONASS--0x05|BDS_GLONASS--0x06|GPS_BDS_GLONASS--0x07")
284
285AG35EUT Supported constellations
286(GPS_ONLY--0x01|BDS_ONLY--0x02|GPS_BDS--0x03|GLONASS_ONLY--0x04)|GPS_GLONASS--0x05|BDS_GLONASS--0x06|GPS_BDS_GLONASS--0x07|
287GALILEO_ONLY--0x08|GPS_GALILEO--0x09|BD_GALILEO--0x10|GPS_BDS_GLONASS_GALILEO--0x11")
288*/
289static void item_ql_gnss_set_constellation(void)
290{
291 int err = QL_ERR_OK;
292 uint32_t input = 0;
293 QL_GNSS_CONSTELLATION_MASK_E constellation = 0;
294 printf("Please input gnss constellation:\n");
295 scanf("%x",&input);
296 printf("input=%x\n",input);
297 constellation = (QL_GNSS_CONSTELLATION_MASK_E)input;
298 err = ql_gnss_set_constellation(constellation);
299 if(err != QL_ERR_OK)
300 {
301 printf("Failed to set gnss constellation mask:%x err=%d\n",constellation,err);
302 }
303 else
304 {
305 printf("Successful\n");
306 }
307}
308
309static void item_ql_gnss_set_nmea_type(void)
310{
311 int err = QL_ERR_OK;
312 uint32_t input = 0;
313
314 printf("Please input nmea type bitmask:\n");
315 printf("(GST|ZDA|VTG|RMC|GSV|GSA|GLL|GGA)(HEX Base, i.e.0xff)\n");
316 scanf("%x",&input);
317 printf("input=%x\n",input);
318 err = ql_gnss_set_nmea_type(input);
319 if(err != QL_ERR_OK)
320 {
321 printf("Failed to set nmea type with type:%x: err=%d\n",input,err);
322 }
323 else
324 {
325 printf("Successful\n");
326 }
327}
328
329static void item_ql_gnss_get_nmea_version(void)
330{
331 int err = QL_ERR_OK;
332 QL_GNSS_NMEA_VERSION_ID_E version = 0;
333
334 printf("Start to get nmea_version \n");
335 err = ql_gnss_get_nmea_version(&version);
336 if(err != QL_ERR_OK)
337 {
338 printf("Failed to get nmea_version with version:%d, err=%d\n",version, err);
339 }
340 else
341 {
342 printf("Successful\n");
343 if(QL_GNSS_NMEA_VERSION_V30 == version)
344 {
345 printf("Nmea_version is 3.0\n");
346 }
347 else if(QL_GNSS_NMEA_VERSION_V41 == version)
348 {
349 printf("Nmea_version is 4.0\n");
350 }
351 }
352
353}
354
355
356static void item_ql_gnss_set_nmea_version(void)
357{
358 int err = QL_ERR_OK;
359 uint32_t input=0;
360 QL_GNSS_NMEA_VERSION_ID_E version;
361
362 printf("Please input nmea verson : 0--nema v3.0|1--nema v4.1\n");
363 scanf("%d",&input);
364 printf("Start to set nmea_version with version:%d\n",input);
365 version = (QL_GNSS_NMEA_VERSION_ID_E)input;
366 err = ql_gnss_set_nmea_version(version);
367 if(err != QL_ERR_OK)
368 {
369 printf("Failed to set nmea_version with version:%d, err=%d\n",version, err);
370 }
371 else
372 {
373 printf("Successful\n");
374 }
375}
376#endif
377
378static void item_ql_gnss_set_start_mode(void)
379{
380 int err = QL_ERR_OK;
381 uint32_t input=0;
382 QL_GNSS_START_MODE_E mode;
383
384 printf("Please input mode : 0--cold start|1--warm start|2--hot start\n");
385 scanf("%d",&input);
386 printf("Start to ql_set_start_mode with modem:%d\n",input);
387 mode = (QL_GNSS_START_MODE_E)input;
388 err = ql_gnss_set_start_mode(mode);
389 if(err != QL_ERR_OK)
390 {
391 printf("Failed to Start to ql_set_start_mode with modem:%d, err=%d\n",mode, err);
392 }
393 else
394 {
395 printf("Successful\n");
396 }
397}
398
399
400static void item_ql_gnss_set_agnss_mode(void)
401{
402 int err = QL_ERR_OK;
403 uint32_t input=0;
404
405 printf("Please input mode : 0x01--GPS| 0x02--BD| 0x04--GLONASS| 0x08--GALILEO| 0x10--QZSS \n");
406 scanf("%x",&input);
407 printf("Start to ql_set_agnss_mode with modem:%x\n",input);
408 err = ql_gnss_set_agnss_mode(input);
409 if(err != QL_ERR_OK)
410 {
411 printf("Failed to Start to ql_set_agnss_mode with modem:%d, err=%d\n",input, err);
412 }
413 else
414 {
415 printf("Successful\n");
416 }
417
418}
419
420static void item_ql_gnss_inject_agnss_data(void)
421{
422 int err = QL_ERR_OK;
423
424 err = ql_gnss_inject_agnss_data();
425 if (err != QL_ERR_OK)
426 {
427 printf("Failed to inject agnss err=%d\n", err);
428 }
429 else
430 {
431 printf("Successful\n");
432 }
433}
434
435#if 0
436static int convertUtcTimeMsec(char *utc_str,uint64_t *msec)
437{
438 int i =0;
439 int temp =0;
440 int date[6] = {0};
441 char ch;
442 unsigned char field = 0;
443 struct tm t;
444 while(1)
445 {
446 ch = utc_str[i++];
447
448 if(IS_DIGIT(ch))
449 {
450 temp *= 10;
451 temp += ch - '0';
452 }
453 else if(ch == ' ')
454 {
455 continue;
456 }
457 else if(ch == '-' || ch == ' ' || ch == ':' || ch == '\0')
458 {
459 date[field] = temp;
460 field++;
461 temp = 0;
462
463 if(ch == '\0')
464 {
465 printf("parse char success\n");
466 break;
467 }
468 }
469 else
470 {
471 printf("ch=%c,ch=%d,invalid char\n",ch,ch);
472 return -1;
473 }
474 }
475
476 if(date[0] < 1900
477 || date[1] < 1 || date[1] > 12
478 || date[2] < 1 || date[2] > 31
479 || date[3] < 0 || date[3] > 23
480 || date[4] < 0 || date[4] > 59
481 || date[5] < 0 || date[5] > 59
482 )
483 {
484 return -1;
485 }
486
487 t.tm_sec = date[5];
488 t.tm_min = date[4];
489 t.tm_hour = date[3];
490 t.tm_mday = date[2];
491 t.tm_mon = date[1] -1;
492 t.tm_year = date[0] - 1900;
493 t.tm_isdst = 0;
494
495 *msec = (uint64_t)1000 * (uint64_t)mktime(&t);
496 return 0;
497
498}
499
500static void item_ql_gnss_inject_utc_time(void)
501{
502 int err = QL_ERR_OK;
503 int input = 0;
504 uint64_t utc_time;
505 char buff[128]={0};
506 printf("Start ql_inject_utc_time : \n");
507 printf("Please Select Time:\n1-Current System time\n2-Input Time,Format:YYYY-MM-DD hh:mm:ss\n:");
508 scanf("%d",&input);
509 if(err !=0)
510 {
511 printf("Input error\n");
512 return ;
513 }
514 switch(input)
515 {
516 case 1:
517 utc_time=(uint64_t)time(NULL)*1000;
518 system("date");
519 break;
520 case 2:
521 err = t_get_string(buff, sizeof(buff));
522 if(err !=0)
523 {
524 printf("Input error\n");
525 return ;
526 }
527 convertUtcTimeMsec(buff,&utc_time);
528 break;
529 default:
530 printf("Not select!!!\n");
531 return ;
532 }
533 err = ql_gnss_inject_utc_time(utc_time);
534 if(err != QL_ERR_OK)
535 {
536 printf("Failed to Inject Utc Time %d\n",err);
537 }
538 else
539 {
540 printf("Successful!\n");
541 }
542}
543
544
545
546
547static void item_ql_gnss_suspend(void)
548{
549 int err = QL_ERR_OK;
550
551 printf("Start to ql_gnss_suspend\n");
552 err = ql_gnss_suspend();
553 if(err != QL_ERR_OK)
554 {
555 printf("Failed to set ql_gnss_suspend\n");
556 }
557 else
558 {
559 printf("Successful\n");
560 }
561}
562
563
564static void item_ql_gnss_resume(void)
565{
566 int err = QL_ERR_OK;
567
568 printf("Start to ql_gnss_resume\n");
569 err = ql_gnss_resume();
570 if(err != QL_ERR_OK)
571 {
572 printf("Failed to set ql_gnss_resume\n");
573 }
574 else
575 {
576 printf("Successful\n");
577 }
578}
579#endif
580
581static void item_ql_gnss_deinit(void)
582{
583 int err = QL_ERR_OK;
584
585 printf("Start to ql_gnss_deinit\n");
586 err = ql_gnss_deinit();
587 if(err == QL_ERR_OK)
588 {
589 printf("Successful\n");
590 }
591 else
592 {
593 printf("Failed to ql_gnss_deinit, err=%d\n", err);
594 }
595}
596
597static t_item_t ql_gnss_items[] =
598{
599 {"ql_gnss_init", item_ql_gnss_init},
600 {"ql_gnss_nmea_ind_cb", item_ql_gnss_set_ind_cb},
601// {"ql_gnss_get_engine_state",item_ql_gnss_get_engine_state},
602 {"ql_gnss_start",item_ql_gnss_start},
603 {"ql_gnss_stop", item_ql_gnss_stop},
604// {"ql_gnss_get_nmea_version",item_ql_gnss_get_nmea_version},
605// {"ql_gnss_set_nmea_version",item_ql_gnss_set_nmea_version},
606// {"ql_gnss_set_nmea_type",item_ql_gnss_set_nmea_type},
607// {"ql_gnss_get_constellation",item_ql_gnss_get_constellation},
608// {"ql_gnss_set_constellation",item_ql_gnss_set_constellation},
609 {"ql_gnss_set_start_mode",item_ql_gnss_set_start_mode},
610 {"ql_gnss_set_agnss_mode",item_ql_gnss_set_agnss_mode},
611 {"ql_gnss_inject_agnss_data",item_ql_gnss_inject_agnss_data},
612// {"ql_gnss_inject_utc_time",item_ql_gnss_inject_utc_time},
613// {"ql_gnss_suspend", item_ql_gnss_suspend},
614// {"ql_gnss_resume", item_ql_gnss_resume},
615// {"ql_gnss_set_service_error_cb",item_ql_gnss_set_service_error_cb},
616 {"ql_gnss_deinit", item_ql_gnss_deinit},
617};
618
619t_module_t ql_gnss_module =
620{
621 "gnss",
622 T_ARRAY_SIZE(ql_gnss_items),
623 ql_gnss_items
624};
625
626/*-----------------------------------------------------------------------------------------------*/
627/**
628 @brief Read a int value from stdin
629 @param[out] val, Return read data
630 @return
631 0 - successful
632 1 - read an enter
633 -1 - invalid input
634 */
635/*-----------------------------------------------------------------------------------------------*/
636int t_get_int(int *val)
637{
638 int dat;
639 char *ptr_end = NULL;
640 char buf[256] = {0};
641
642 if(NULL == fgets(buf, sizeof(buf)-1, stdin))
643 {
644 return -1;
645 }
646#if 0
647 if(0 == buf[0])
648 {
649 return -1;
650 }
651#endif
652 if(buf[0] == '\n')
653 {
654 return 1;
655 }
656
657 dat = strtol(buf, &ptr_end, 10);
658 if(ptr_end!=NULL && ptr_end[0]!='\n')
659 {
660 return -1;
661 }
662
663 if(val)
664 {
665 val[0] = dat;
666 }
667
668 return 0;
669}
670
671void dump_items()
672{
673 int i;
674
675 printf("\n");
676 printf("The current module is: \n");
677
678 for(i=0; i< ql_gnss_module.item_len; i++)
679 {
680 printf("%d\t%s\n", i, ql_gnss_module.item_list[i].name);
681 }
682 printf("-1\texit\n");
683}
684
685int main(int argc, char *argv[])
686{
687 int ret;
688 int idx;
689
690 dump_items();
691
692 while(1)
693 {
694 printf("Please enter your choice: ");
695 ret = t_get_int(&idx);
696 printf("\n");
697 if(ret < 0)
698 {
699 printf("Invalid input\n");
700 continue;
701 }
702 else if(ret == 1)
703 {
704 dump_items();
705 continue;
706 }
707
708 if(idx == -1)
709 {
710 break;
711 }
712
713 if(idx<0 || idx>=ql_gnss_module.item_len)
714 {
715 printf("Not support idx: %d\n", idx);
716 continue;
717 }
718
719 printf("->Item : %s\n", ql_gnss_module.item_list[idx].name);
720 ql_gnss_module.item_list[idx].handle();
721 }
722
723 return 0;
724}
725