blob: 9a053ec74516442f6583a2ca6d8d5601ab26f72f [file] [log] [blame]
b.liud440f9f2025-04-18 10:44:31 +08001
2#include <stdio.h>
3#include <string.h>
4#include <stdlib.h>
5#include <unistd.h>
6#include <ctype.h>
7#include <stdio.h>
8#include <sys/time.h>
9
10#include "ql_v2/ql_type.h"
11#include "ql_dm.h"
12
13
14
15#define T_ARRAY_SIZE(items) (sizeof(items)/sizeof(items[0]))
16
17typedef void (*item_handler_f)(void);
18typedef int (*init_handler_f)(void);
19typedef int (*deinit_handler_f)(void);
20
21
22
23typedef struct
24{
25 const char *name;
26 item_handler_f handle;
27} t_item_t;
28
29typedef struct
30{
31 const char *name;
32 int item_len;
33 t_item_t *item_list;
34} t_module_t;
35
36typedef struct
37{
38 const char *name;
39 init_handler_f init_handle;
40 deinit_handler_f deinit_handle;
41} t_init_t;
42
43int t_get_int(int *val)
44{
45 int dat;
46 char *ptr_end = NULL;
47 char buf[256] = {0};
48
49 if(NULL == fgets(buf, sizeof(buf)-1, stdin))
50 {
51 return -1;
52 }
53
54 if(0 == buf[0])
55 {
56 return -1;
57 }
58
59 if(buf[0] == '\n')
60 {
61 return 1;
62 }
63
64 dat = strtol(buf, &ptr_end, 10);
65 if(ptr_end!=NULL && ptr_end[0]!='\n')
66 {
67 return -1;
68 }
69
70 if(val)
71 {
72 val[0] = dat;
73 }
74
75 return 0;
76}
77
78
79static int internal_dm_get_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E mode, char* buf, int buf_len);
80
81
82void dm_air_plane_mode_event_ind_cb(QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode)
83{
84 char mode_info[16] = {0};
85
86 printf("Recv event indication : air plane mode changed event\n");
87
88 if(internal_dm_get_air_plane_mode(air_plane_mode, mode_info, sizeof(mode_info)) == 0)
89 {
90 printf("unrecognized air plane mode:%d\n", air_plane_mode);
91 }
92 else
93 {
94 printf("current air plane mode is %s\n", mode_info);
95 }
96}
97
98void dm_modem_state_change_ind_cb(int modem_state)
99{
100 printf("Recv event indication : modem status changed event\n");
101 if(QL_DM_MODEM_STATE_ONLINE == modem_state)
102 {
103 printf("current modem status is ONLINE\n");
104 }
105 else if(QL_DM_MODEM_STATE_OFFLINE == modem_state)
106 {
107 printf("current modem status is OFFLINE\n");
108 }
109 else
110 {
111 printf("current modem status is UNKNOWN\n");
112 }
113}
114
115void dm_service_error_cb(int error)
116{
117 printf("===== DM Service Abort =====\n");
118}
119
120void item_ql_dm_init(void)
121{
122 int ret = 0;
123
124 printf("Start to ql_dm_init: ");
125 ret = ql_dm_init();
126 if(ret == QL_ERR_OK)
127 {
128 printf("dm init ok\n");
129 }
130 else
131 {
132 printf("failed, ret=%d\n", ret);
133 }
134}
135
136void item_ql_dm_set_service_error_cb(void)
137{
138 int ret = 0;
139
140 printf("Start to item_ql_dm_set_service_error_cb : ");
141 ret = ql_dm_set_service_error_cb(dm_service_error_cb);
142 if(ret != QL_ERR_OK)
143 {
144 printf("failed, ret=%d\n", ret);
145 }
146 else
147 {
148 printf("successful\n");
149 }
150}
151
152void item_ql_dm_deinit(void)
153{
154 int ret = 0;
155
156 printf("Start to ql_dm_deinit: ");
157 ret = ql_dm_deinit();
158 if(ret == QL_ERR_OK)
159 {
160 printf("dm deinit ok\n");
161 }
162 else
163 {
164 printf("failed, ret=%d\n", ret);
165 }
166}
167
168void item_ql_dm_set_air_plane_mode_ind_cb(void)
169{
170 int ret = 0;
171 int reg_flag = 0;
172
173 printf("please input air plane mode reg option: (0: unreg, other: reg): ");
174 ret = t_get_int(&reg_flag);
175 if(ret != 0)
176 {
177 printf("Invalid input\n");
178 return;
179 }
180
181 if(reg_flag)
182 {
183 ret = ql_dm_set_air_plane_mode_ind_cb(dm_air_plane_mode_event_ind_cb);
184 }
185 else
186 {
187 ret = ql_dm_set_air_plane_mode_ind_cb(NULL);
188 }
189 printf("ql_dm_set_air_plane_mode_ind_cb ret = %d\n", ret);
190}
191
192void item_ql_dm_get_software_version(void)
193{
194 int ret;
195 char soft_ver[128] = {0};
196
197 ret = ql_dm_get_software_version(soft_ver, sizeof(soft_ver));
198
199 printf("ql_dm_get_software_version ret = %d, software version is %s\n", ret, soft_ver);
200}
201
202void item_ql_dm_set_modem_state_change_ind_cb(void)
203{
204 int ret = 0;
205 int reg_flag = 0;
206
207 printf("please input modem state reg option: (0: unreg, other: reg): ");
208 ret = t_get_int(&reg_flag);
209 if(ret != 0)
210 {
211 printf("Invalid input\n");
212 return;
213 }
214
215 if(reg_flag)
216 {
217 ret = ql_dm_set_modem_state_change_ind_cb(dm_modem_state_change_ind_cb);
218 }
219 else
220 {
221 ret = ql_dm_set_modem_state_change_ind_cb(NULL);
222 }
223 printf("ql_dm_set_modem_state_change_ind_cb ret = %d\n", ret);
224}
225
226void item_ql_dm_get_device_serial_numbers(void)
227{
228 int ret;
229 ql_dm_device_serial_numbers_info_t t_info;
230 memset(&t_info, 0, sizeof(ql_dm_device_serial_numbers_info_t));
231
232 ret = ql_dm_get_device_serial_numbers(&t_info);
233 printf("ql_dm_get_device_serial_number ret = %d", ret);
234 if(t_info.imei_valid)
235 {
236 printf(", imei is %s", t_info.imei);
237 }
238 if(t_info.imei2_valid)
239 {
240 printf(", imei2 is %s", t_info.imei2);
241 }
242 if(t_info.meid_valid)
243 {
244 printf(", meid is %s ", t_info.meid);
245 }
246 printf("\n");
247}
248
249void item_ql_dm_get_device_firmware_rev_id(void)
250{
251 int ret;
252 char firmware_rev_id[QL_DM_FIRMWARE_REV_MAX_LEN + 1] = {0};
253
254 ret = ql_dm_get_device_firmware_rev_id(firmware_rev_id, sizeof(firmware_rev_id));
255 printf("ql_dm_get_device_firmware_rev_id ret = %d, device revision id is %s\n",
256 ret, firmware_rev_id);
257}
258
259void item_ql_dm_get_air_plane_mode(void)
260{
261 int ret;
262 char mode_info[16] = {0};
263 QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode;
264
265 ret = ql_dm_get_air_plane_mode(&air_plane_mode);
266
267 printf("ql_dm_get_air_plane_mode ret = %d, ", ret);
268 if(internal_dm_get_air_plane_mode(air_plane_mode, mode_info, sizeof(mode_info)) == 0)
269 {
270 printf("unrecognized air plane mode:%d\n", air_plane_mode);
271 }
272 else
273 {
274 printf("current air plane mode is %s\n", mode_info);
275 }
276}
277
278void item_ql_dm_set_air_plane_mode(void)
279{
280 int ret;
281 int mode;
282 QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode;
283
l.yang860a8e72025-05-13 01:55:38 -0700284 printf("please input air plane mode(1: ON, 2: OFF): \n");
b.liud440f9f2025-04-18 10:44:31 +0800285 ret = t_get_int(&mode);
286 if(ret != 0)
287 {
288 printf("Invalid input\n");
289 return;
290 }
291 air_plane_mode = mode;
292 if(air_plane_mode != QL_DM_AIR_PLANE_MODE_ON && air_plane_mode != QL_DM_AIR_PLANE_MODE_OFF)
293 {
294 printf("please input 1 or 2\n");
295 return;
296 }
297
298 ret = ql_dm_set_air_plane_mode(air_plane_mode);
299 printf("ql_dm_set_air_plane_mode ret = %d\n", ret);
300}
301
302static int internal_dm_get_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E mode, char* buf, int buf_len)
303{
304 int ret_val = 1;
305
306 if(buf == NULL || buf_len < 2)
307 {
308 printf("param is valid\n");
309 return 0;
310 }
311
312 memset(buf, 0, buf_len);
313
314 switch(mode)
315 {
316 case QL_DM_AIR_PLANE_MODE_UNKNOWN:
317 strncpy(buf, "UNKNOWN", buf_len - 1);
318 buf[buf_len - 1] = '\0';
319 break;
320 case QL_DM_AIR_PLANE_MODE_ON:
321 strncpy(buf, "ON", buf_len - 1);
322 buf[buf_len - 1] = '\0';
323 break;
324 case QL_DM_AIR_PLANE_MODE_OFF:
325 strncpy(buf, "OFF", buf_len - 1);
326 buf[buf_len - 1] = '\0';
327 break;
328 case QL_DM_AIR_PLANE_MODE_NA:
329 strncpy(buf, "UNAVAILABLE", buf_len - 1);
330 buf[buf_len - 1] = '\0';
331 break;
332 default:
333 ret_val = 0;
334 break;
335 }
336 return ret_val;
337}
338
339
l.yang860a8e72025-05-13 01:55:38 -0700340void item_ql_dm_get_modem_state(void)
341{
342 int ret;
343 QL_DM_MODEM_STATE_TYPE_E modem_state = QL_DM_MODEM_STATE_UNKNOWN;
344
345 ret = ql_dm_get_modem_state(&modem_state);
346 if(QL_DM_MODEM_STATE_ONLINE == modem_state)
347 {
348 printf("ql_dm_get_modem_state ret = %d, modem state is ONLINE\n", ret);
349 }
350 else if(QL_DM_MODEM_STATE_OFFLINE == modem_state)
351 {
352 printf("ql_dm_get_modem_state ret = %d, modem state is OFFLINE\n", ret);
353 }
354 else
355 {
356 printf("ql_dm_get_modem_state ret = %d, modem state UNKNOWN\n", ret);
357 }
358}
359
360
b.liud440f9f2025-04-18 10:44:31 +0800361static t_item_t ql_dm_items[] =
362{
363 {"ql_dm_init", item_ql_dm_init},
364 {"ql_dm_set_air_plane_mode_ind_cb", item_ql_dm_set_air_plane_mode_ind_cb},
365 {"ql_dm_get_software_version", item_ql_dm_get_software_version},
366 {"ql_dm_set_modem_state_change_ind_cb", item_ql_dm_set_modem_state_change_ind_cb},
367 {"ql_dm_get_device_serial_numbers", item_ql_dm_get_device_serial_numbers},
368 {"ql_dm_get_device_firmware_rev_id", item_ql_dm_get_device_firmware_rev_id},
369 {"ql_dm_get_air_plane_mode", item_ql_dm_get_air_plane_mode},
370 {"ql_dm_set_air_plane_mode", item_ql_dm_set_air_plane_mode},
l.yang860a8e72025-05-13 01:55:38 -0700371 {"ql_dm_get_modem_state", item_ql_dm_get_modem_state},
b.liud440f9f2025-04-18 10:44:31 +0800372 {"ql_dm_set_service_error_cb", item_ql_dm_set_service_error_cb},
373 {"ql_dm_deinit", item_ql_dm_deinit}
374};
375
376t_module_t ql_dm_module =
377{
378 "dm",
379 T_ARRAY_SIZE(ql_dm_items),
380 ql_dm_items
381};
382
383
384t_module_t *test_modules[] =
385{
386 &ql_dm_module,
387
388};
389
390void dump_modules(void)
391{
392 int i;
393
394 printf("\n");
395 for(i=0; i<T_ARRAY_SIZE(test_modules); i++)
396 {
397 printf("%d\t%s\n", i, test_modules[i]->name);
398 }
399 printf("-1\texit\n");
400}
401
402void dump_items(t_module_t *m)
403{
404 int i;
405
406 printf("\n");
407 printf("The current module is: \n");
408
409 for(i=0; i<m->item_len; i++)
410 {
411 printf("%d\t%s\n", i, m->item_list[i].name);
412 }
413 printf("-1\texit\n");
414}
415
416void enter_modules(t_module_t *m)
417{
418 int ret;
419 int idx;
420
421 dump_items(m);
422
423 while(1)
424 {
425 printf("Please enter your choice: ");
426 ret = t_get_int(&idx);
427 printf("\n");
428 if(ret < 0)
429 {
430 printf("Invalid input\n");
431 continue;
432 }
433 else if(ret == 1)
434 {
435 dump_items(m);
436 continue;
437 }
438
439 if(idx == -1)
440 {
441 break;
442 }
443
444 if(idx<0 || idx>=m->item_len)
445 {
446 printf("Not support idx: %d\n", idx);
447 continue;
448 }
449
450 printf("->Item : %s\n", m->item_list[idx].name);
451 m->item_list[idx].handle();
452 }
453}
454
455 static t_init_t init_func[] = {
456 {"ql_dm_init",ql_dm_init,ql_dm_deinit},
457
458
459};
460
461
462void test_init(int retry)
463{
464
465 int i = 0,j = 0;
466 for(i=0; i<T_ARRAY_SIZE(init_func); i++)
467 {
468 printf("Exec %s time = \n", init_func[i].name);
469 //clock_t start,end;
470 struct timeval start,end;
471
472 double cost_time = 0;
473 int ret = QL_ERR_OK;
474 for(j = 0;j < retry; j++)
475 {
476 if(QL_ERR_OK == ret )
477 {
478 //start = clock();
479 gettimeofday(&start, NULL);
480 }
481
482 ret = -1;
483 ret = init_func[i].init_handle();
484 if(QL_ERR_OK == ret)
485 {
486 //end = clock();
487 gettimeofday(&end, NULL);
488 long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
489 //printf("%6.0f ",(double)(end-start));
490 printf("%ld ",timeuse/1000);
491 //cost_time = cost_time > (end-start) ?cost_time:(end-start);
492 cost_time = cost_time > (timeuse/1000) ?cost_time:(timeuse/1000);
493
494 init_func[i].deinit_handle();
495 }
496
497
498 }
499 printf("\n");
500 printf("Finish test. %s max cost time = %6.0f ms\n",init_func[i].name, cost_time);
501
502 }
503
504
505}
506
507
508int main(int argc, char *argv[])
509{
510 int ret;
511 int idx;
512
513 if(argc > 1)
514 {
515 int c = -1;
516 int retry = -1;
517
518 while((c = getopt(argc, argv, "i:")) != -1)
519 {
520 if(-1 == c)
521 {
522 break;
523 }
524
525 switch(c)
526 {
527 case 'i':
528 retry = atoi(optarg);
529 test_init(retry);
530 return 0;
531
532 default:
533 printf("usage: ql_sdk_api_test -i <retry count> to test init func\n");
534 printf(" ql_sdk_api_test to test sdk api\n");
535 return -1;
536 }
537 }
538 }
539
540
541 dump_modules();
542
543 while(1)
544 {
545 printf("Please enter your choice: ");
546 ret = t_get_int(&idx);
547 printf("\n");
548 if(ret < 0)
549 {
550 printf("Invalid input\n");
551 continue;
552 }
553 else if(ret == 1)
554 {
555 dump_modules();
556 continue;
557 }
558
559 if(idx == -1)
560 {
561 break;
562 }
563
564 if(idx<0 || idx>=T_ARRAY_SIZE(test_modules))
565 {
566 printf("Not support idx: %d\n", idx);
567 continue;
568 }
569
570 enter_modules(test_modules[idx]);
571 }
572
573 return 0;
574}
575