blob: 17f3b187b63d58dab54f5dcb3e6a106e53dc2097 [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);
103int (*gsw_gnss_set_start_mode)(GSW_GNSS_MODE_CONFIGURATION start_mode);
104int (*gsw_gnss_epo_switch)(GSW_GNSS_CONF_SWITCH switch_op);
105int (*gsw_gnss_reg_cb_group)(gsw_gnss_cb callback);
106//int (*gsw_gnss_xtra_is_enable)(gsw_xtra_state_e state);
107int (*gsw_gnss_delete_aiding_data)(unsigned int flags);
108int (*gsw_gnss_init_configure_gps)(gsw_gnss_init_configure_t init_configure);
109
110void *dlHandle_gnss_test;
111char *lynqLib_gnss_test = "/lib/libgsw_lib.so";
112
113
114void tmp_gnss_callack(const char* nmea, int length)
115{
116 printf("%s",nmea);
117}
118
119gsw_gnss_cb tmp_ptr = {
120 NULL,
121 tmp_gnss_callack
122};
123
124void user_help(void)
125{
126 printf("\t-1 exit\n"
127 "\t1 gnss init\n"
128 "\t2 gnss deinit \n"
129 "\t3 gnss reg_cb\n"
130 "\t6 gnss start\n"
131 "\t7 gnss stop\n"
132 "\t8 gnss Delete_Aiding_Data and reset\n"
133 "\t9 gnss epo switch\n"
134 "\t10 gnss set startmode\n"
135 "\t11 gnss set frequency\n"
136 "please input operator: >> ");
137}
138void delete_type(void)
139{
140 printf("\t0 DELETE_NOTHING\n"
141 "\t1 DELETE_EPHEMERIS\n"
142 "\t2 DELETE_ALL\n"
143 "please input operator: >> ");
144}
145
146int main(void)
147{
148 int ret;
149 int opt = 0;
150 dlHandle_gnss_test = dlopen(lynqLib_gnss_test, RTLD_NOW);
151 while(1)
152 {
153 printf("=========gnss main=========\n");
154 user_help();
155 if (scanf("%d", &opt) != 1)
156 {
157 printf("Input error, please check it\n");
158 while (getchar() != '\n');
159 continue;
160 }
161 while(getchar()!='\n');
162 switch (opt)
163 {
164 case -1:
165 {
166 printf("main exit\n");
167 return 0;
168 }
169
170 case 1:
171 {
172 gsw_gnss_init=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_init");
173 ret = gsw_gnss_init();
174 if(ret < 0)
175 {
176 printf("gsw_gnss_init FAIL.\n");
177 return -1;
178 }
179 printf("gsw_gnss_init success.\n");
180 break;
181 }
182 case 2:
183 {
184 gsw_gnss_deinit=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_deinit");
185 ret =gsw_gnss_deinit();
186 if(ret < 0)
187 {
188 printf("gsw_gnss_deinit FAIL.\n");
189 return -1;
190 }
191 printf("gsw_gnss_deinit success \n");
192 break;
193 }
194 case 3:
195 {
196 gsw_gnss_reg_cb_group=(int(*)(gsw_gnss_cb))dlsym(dlHandle_gnss_test, "gsw_gnss_reg_cb_group");
197 ret =gsw_gnss_reg_cb_group(tmp_ptr);
198 if(ret < 0)
199 {
200 printf("gsw_gnss_reg_cb_group FAIL.\n");
201 return -1;
202 }
203 printf("gsw_gnss_reg_cb_group success \n");
204 break;
205 }
206 // case 4:
207 // {
208 // qser_Gnss_Deinit=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Deinit");
209 // ret =qser_Gnss_Deinit(ph_gnss);
210 // if(ret < 0)
211 // {
212 // printf("mopen_gnss_client_Deinit FAIL.\n");
213 // return -1;
214 // }
215 // printf("mopen_gnss_client_Deinit success \n");
216 // break;
217 // }
218 // case 5:
219 // {
220 // qser_Gnss_Deinit=(int(*)(uint32_t))dlsym(dlHandle_gnss, "qser_Gnss_Deinit");
221 // ret =qser_Gnss_Deinit(ph_gnss);
222 // if(ret < 0)
223 // {
224 // printf("mopen_gnss_client_Deinit FAIL.\n");
225 // return -1;
226 // }
227 // printf("mopen_gnss_client_Deinit success \n");
228 // break;
229 // }
230 case 6:
231 {
232 gsw_gnss_start=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_start");
233 ret =gsw_gnss_start();
234 if(ret < 0)
235 {
236 printf("gsw_gnss_start FAIL.\n");
237 return -1;
238 }
239 printf("gsw_gnss_start success \n");
240 break;
241 }
242 case 7:
243 {
244 gsw_gnss_stop=(int(*)())dlsym(dlHandle_gnss_test, "gsw_gnss_stop");
245 ret =gsw_gnss_stop();
246 if(ret < 0)
247 {
248 printf("gsw_gnss_stop FAIL.\n");
249 return -1;
250 }
251 printf("gsw_gnss_stop success \n");
252 break;
253 }
254 case 8:
255 {
256 int flags; // 1-dele no ; 2- dele eph ; 3 dele all
257 gsw_gnss_delete_aiding_data=(int(*)(unsigned int))dlsym(dlHandle_gnss_test, "gsw_gnss_delete_aiding_data");
258 delete_type();
259 if (scanf("%d", &flags) != 1)
260 printf("input error,please check it");
261 ret =gsw_gnss_delete_aiding_data(flags);
262 if(ret < 0)
263 {
264 printf("gsw_gnss_delete_aiding_data FAIL.\n");
265 return -1;
266 }
267 printf("gsw_gnss_delete_aiding_data success \n");
268 break;
269 }
270 case 9:
271 {
272 int able;
273 gsw_gnss_epo_switch=(int(*)(GSW_GNSS_CONF_SWITCH))dlsym(dlHandle_gnss_test, "gsw_gnss_epo_switch");
274 if (scanf("%d", &able) != 1)
275 printf("input error,please check it");
276 ret =gsw_gnss_epo_switch(able);
277 if(ret < 0)
278 {
279 printf("mopen_gnss_client_Deinit FAIL.\n");
280 return -1;
281 }
282 printf("mopen_gnss_client_Deinit success \n");
283 break;
284 }
285 case 10:
286 {
287 int conf;
288 gsw_gnss_set_start_mode=(int(*)(uint32_t))dlsym(dlHandle_gnss_test, "gsw_gnss_set_start_mode");
289 if (scanf("%d", &conf) != 1)
290 printf("input error,please check it");
291 ret =gsw_gnss_set_start_mode(conf);
292 if(ret < 0)
293 {
294 printf("gsw_gnss_set_start_mode FAIL.\n");
295 return -1;
296 }
297 printf("gsw_gnss_set_start_mode success \n");
298 break;
299 }
300 case 11:
301 {
302 int frequency;
303 gsw_gnss_set_freq=(int(*)(int))dlsym(dlHandle_gnss_test, "gsw_gnss_set_freq");
304 if (scanf("%d", &frequency) != 1)
305 printf("input error,please check it");
306 ret =gsw_gnss_set_freq(frequency);
307 if(ret < 0)
308 {
309 printf("gsw_gnss_set_freq FAIL.\n");
310 return -1;
311 }
312 printf("frequency is %d\n",frequency);
313 printf("gsw_gnss_set_freq success\n");
314 break;
315 }
316 }
317 }
318}