blob: 1930846b54874231ec6c97e232ced0fc6e5233e8 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include <stdio.h>
2#include <string.h>
3#include <strings.h>
4#include <stdlib.h>
5#include <errno.h>
6#include <fcntl.h>
7#include <signal.h>
8#include <sys/types.h>
9#include <unistd.h>
10#include <pthread.h>
11#include <termios.h>
12#include <time.h>
13#include <sys/ioctl.h>
14#include <dlfcn.h>
15#include <stdint.h>
16#include <stdbool.h>
17
18typedef struct
19{
20 /**< set to sizeof(GpsLocation) */
21 size_t size;
22 /**< Contains GpsLocationFlags bits. */
23 unsigned short int flags;
24 /**< Represents latitude in degrees. */
25 double latitude;
26 /**< Represents longitude in degrees. */
27 double longitude;
28 /**< Represents altitude in meters above the WGS 84 reference ellipsoid. */
29 double altitude;
30 /**< Represents speed in meters per second. */
31 float speed;
32 /**< Represents heading in degrees. */
33 float bearing;
34 /**< Represents expected accuracy in meters. */
35 float accuracy;
36 /**< Timestamp for the location fix. */
37 long long int timestamp;
38}GSW_GNSS_LOCATION_T;
39
40typedef struct {
41 GSW_GNSS_LOCATION_T legacyLocation;
42 float horizontalAccuracyMeters;
43 /**< Represents expected vertical position accuracy in meters
44 * (68% confidence).*/
45 float verticalAccuracyMeters;
46 /**< Represents expected speed accuracy in meter per seconds
47 * (68% confidence).*/
48 float speedAccuracyMetersPerSecond;
49 /**< Represents expected bearing accuracy in degrees
50 * (68% confidence).*/
51 float bearingAccuracyDegrees;
52}GSW_GNSS_LOCATION_EXT_T;
53
54
55typedef enum{
56 GSW_SWITCH_DISABLE = 0, /**< configuration switch disable :0 */
57 GSW_SWITCH_ENABLE /**< configuration switch enable :1 */
58}GSW_GNSS_CONF_SWITCH;
59
60typedef enum{
61 GSW_MODE_GPS = 1, /**< GPS only */
62 GSW_MODE_BEIDOU, /**< BEIDOU only*/
63 GSW_MODE_GPS_BEIDOU, /**< GPS+BEIDOU */
64 GSW_MODE_GLONASS, /**< GLONASS only */ /* The high-tech platform does not support this type */
65 GSW_MODE_GPS_GLONASS, /**< GPS+GLONASS */
66 GSW_MODE_GLONASS_BEIDOU, /**< GLONASS+BEIDOU */ /* The high-tech platform does not support this type */
67 GSW_MODE_GPS_GLONASS_BEIDOU, /**< GPS+GLONASS+BEIDOU */ /* The high-tech platform does not support this type */
68 GSW_MODE_GALILEO, /**< GALILEO only */
69 GSW_MODE_GPS_GALILEO, /**< GPS+GALILEO */
70 GSW_MODE_BEIDOU_GALILEO, /**< BEIDOU+GALILEO */
71 GSW_MODE_GPS_BEIDOU_GALILEO, /**< GPS+BEIDOU+GALILEO */
72 GSW_MODE_GLONASS_GALILEO, /**< GLONASS+GALILEO */
73 GSW_MODE_GPS_GLONASS_GALILEO, /**< GPS+GLONASS+GALILEO */
74 GSW_MODE_BEIDOU_GLONASS_GALILEO, /**< BEIDOU+GLONASS+GALILEO */ /* The high-tech platform does not support this type */
75}GSW_GNSS_MODE_CONFIGURATION;
76
77typedef void (*gsw_gnss_location_callback_ext)(GSW_GNSS_LOCATION_EXT_T* location);
78typedef void (*gsw_gnss_nmea_callback )(const char* nmea, int length);
79
80typedef struct{
81gsw_gnss_location_callback_ext gsw_location_cb;
82gsw_gnss_nmea_callback gsw_nmea_cb;
83}gsw_gnss_cb;
84
zw.wang581aab12025-05-28 19:43:53 +080085typedef enum {
86 GNSS_FREQ_1HZ = 1, /**< 1Hz */
87 GNSS_FREQ_2HZ = 2, /**< 2Hz */
88 GNSS_FREQ_5HZ = 5, /**< 5Hz */
89 GNSS_FREQ_10HZ = 10, /**< 10Hz */
90} gnss_freq_type;
b.liu68a94c92025-05-24 12:53:41 +080091
92typedef struct{
93GSW_GNSS_MODE_CONFIGURATION start_mode;
94gnss_freq_type freq;
95gsw_gnss_cb callback;
96}gsw_gnss_init_configure_t;
97
98int (*gsw_gnss_set_freq)(int freq);
99int (*gsw_gnss_init)(void);
100int (*gsw_gnss_start)(void);
101int (*gsw_gnss_stop)(void);
102int (*gsw_gnss_deinit)(void);
zw.wang75e98ea2025-05-29 17:57:38 +0800103int (*gsw_gnss_add_lib)(void);
b.liu68a94c92025-05-24 12:53:41 +0800104int (*gsw_gnss_set_start_mode)(GSW_GNSS_MODE_CONFIGURATION start_mode);
105int (*gsw_gnss_epo_switch)(GSW_GNSS_CONF_SWITCH switch_op);
106int (*gsw_gnss_reg_cb_group)(gsw_gnss_cb callback);
107//int (*gsw_gnss_xtra_is_enable)(gsw_xtra_state_e state);
108int (*gsw_gnss_delete_aiding_data)(unsigned int flags);
109int (*gsw_gnss_init_configure_gps)(gsw_gnss_init_configure_t init_configure);
110
111void *dlHandle_gnss_test;
112char *lynqLib_gnss_test = "/lib/libgsw_lib.so";
113
114
115void tmp_gnss_callack(const char* nmea, int length)
116{
117 printf("%s",nmea);
118}
119
120gsw_gnss_cb tmp_ptr = {
121 NULL,
122 tmp_gnss_callack
123};
124
125void user_help(void)
126{
127 printf("\t-1 exit\n"
128 "\t1 gnss init\n"
129 "\t2 gnss deinit \n"
130 "\t3 gnss reg_cb\n"
131 "\t6 gnss start\n"
132 "\t7 gnss stop\n"
133 "\t8 gnss Delete_Aiding_Data and reset\n"
134 "\t9 gnss epo switch\n"
135 "\t10 gnss set startmode\n"
136 "\t11 gnss set frequency\n"
137 "please input operator: >> ");
138}
139void delete_type(void)
140{
141 printf("\t0 DELETE_NOTHING\n"
142 "\t1 DELETE_EPHEMERIS\n"
143 "\t2 DELETE_ALL\n"
144 "please input operator: >> ");
145}
146
147int main(void)
148{
149 int ret;
150 int opt = 0;
151 dlHandle_gnss_test = dlopen(lynqLib_gnss_test, RTLD_NOW);
zw.wang75e98ea2025-05-29 17:57:38 +0800152 gsw_gnss_add_lib=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_add_lib");
153 ret = gsw_gnss_add_lib();
154 if(ret < 0)
155 {
156 printf("gsw_gnss_add_lib FAIL.\n");
157 return -1;
158 }
b.liu68a94c92025-05-24 12:53:41 +0800159 while(1)
160 {
161 printf("=========gnss main=========\n");
162 user_help();
163 if (scanf("%d", &opt) != 1)
164 {
165 printf("Input error, please check it\n");
166 while (getchar() != '\n');
167 continue;
168 }
169 while(getchar()!='\n');
170 switch (opt)
171 {
172 case -1:
173 {
174 printf("main exit\n");
175 return 0;
176 }
177
178 case 1:
179 {
180 gsw_gnss_init=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_init");
181 ret = gsw_gnss_init();
182 if(ret < 0)
183 {
184 printf("gsw_gnss_init FAIL.\n");
185 return -1;
186 }
187 printf("gsw_gnss_init success.\n");
188 break;
189 }
190 case 2:
191 {
192 gsw_gnss_deinit=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_deinit");
193 ret =gsw_gnss_deinit();
194 if(ret < 0)
195 {
196 printf("gsw_gnss_deinit FAIL.\n");
197 return -1;
198 }
199 printf("gsw_gnss_deinit success \n");
200 break;
201 }
202 case 3:
203 {
204 gsw_gnss_reg_cb_group=(int(*)(gsw_gnss_cb))dlsym(dlHandle_gnss_test, "gsw_gnss_reg_cb_group");
205 ret =gsw_gnss_reg_cb_group(tmp_ptr);
206 if(ret < 0)
207 {
208 printf("gsw_gnss_reg_cb_group FAIL.\n");
209 return -1;
210 }
211 printf("gsw_gnss_reg_cb_group success \n");
212 break;
213 }
214 // case 4:
215 // {
216 // qser_Gnss_Deinit=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Deinit");
217 // ret =qser_Gnss_Deinit(ph_gnss);
218 // if(ret < 0)
219 // {
220 // printf("mopen_gnss_client_Deinit FAIL.\n");
221 // return -1;
222 // }
223 // printf("mopen_gnss_client_Deinit success \n");
224 // break;
225 // }
226 // case 5:
227 // {
228 // qser_Gnss_Deinit=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Deinit");
229 // ret =qser_Gnss_Deinit(ph_gnss);
230 // if(ret < 0)
231 // {
232 // printf("mopen_gnss_client_Deinit FAIL.\n");
233 // return -1;
234 // }
235 // printf("mopen_gnss_client_Deinit success \n");
236 // break;
237 // }
238 case 6:
239 {
240 gsw_gnss_start=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_start");
241 ret =gsw_gnss_start();
242 if(ret < 0)
243 {
244 printf("gsw_gnss_start FAIL.\n");
245 return -1;
246 }
247 printf("gsw_gnss_start success \n");
248 break;
249 }
250 case 7:
251 {
252 gsw_gnss_stop=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_stop");
253 ret =gsw_gnss_stop();
254 if(ret < 0)
255 {
256 printf("gsw_gnss_stop FAIL.\n");
257 return -1;
258 }
259 printf("gsw_gnss_stop success \n");
260 break;
261 }
262 case 8:
263 {
264 int flags; // 1-dele no ; 2- dele eph ; 3 dele all
265 gsw_gnss_delete_aiding_data=(int(*)(unsigned int))dlsym(dlHandle_gnss_test, "gsw_gnss_delete_aiding_data");
266 delete_type();
267 if (scanf("%d", &flags) != 1)
268 printf("input error,please check it");
269 ret =gsw_gnss_delete_aiding_data(flags);
270 if(ret < 0)
271 {
272 printf("gsw_gnss_delete_aiding_data FAIL.\n");
273 return -1;
274 }
275 printf("gsw_gnss_delete_aiding_data success \n");
276 break;
277 }
278 case 9:
279 {
280 int able;
281 gsw_gnss_epo_switch=(int(*)(GSW_GNSS_CONF_SWITCH))dlsym(dlHandle_gnss_test, "gsw_gnss_epo_switch");
282 if (scanf("%d", &able) != 1)
283 printf("input error,please check it");
284 ret =gsw_gnss_epo_switch(able);
285 if(ret < 0)
286 {
287 printf("mopen_gnss_client_Deinit FAIL.\n");
288 return -1;
289 }
290 printf("mopen_gnss_client_Deinit success \n");
291 break;
292 }
293 case 10:
294 {
295 int conf;
296 gsw_gnss_set_start_mode=(int(*)(uint32_t))dlsym(dlHandle_gnss_test, "gsw_gnss_set_start_mode");
297 if (scanf("%d", &conf) != 1)
298 printf("input error,please check it");
299 ret =gsw_gnss_set_start_mode(conf);
300 if(ret < 0)
301 {
302 printf("gsw_gnss_set_start_mode FAIL.\n");
303 return -1;
304 }
305 printf("gsw_gnss_set_start_mode success \n");
306 break;
307 }
308 case 11:
309 {
310 int frequency;
311 gsw_gnss_set_freq=(int(*)(int))dlsym(dlHandle_gnss_test, "gsw_gnss_set_freq");
312 if (scanf("%d", &frequency) != 1)
313 printf("input error,please check it");
314 ret =gsw_gnss_set_freq(frequency);
315 if(ret < 0)
316 {
317 printf("gsw_gnss_set_freq FAIL.\n");
318 return -1;
319 }
320 printf("frequency is %d\n",frequency);
321 printf("gsw_gnss_set_freq success\n");
322 break;
323 }
324 }
325 }
326}