blob: 409c4606668506dd348a37287f59a267ff015184 [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
284 printf("please input air plane mode(1: ON, 2: OFF): ");
285 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
340static t_item_t ql_dm_items[] =
341{
342 {"ql_dm_init", item_ql_dm_init},
343 {"ql_dm_set_air_plane_mode_ind_cb", item_ql_dm_set_air_plane_mode_ind_cb},
344 {"ql_dm_get_software_version", item_ql_dm_get_software_version},
345 {"ql_dm_set_modem_state_change_ind_cb", item_ql_dm_set_modem_state_change_ind_cb},
346 {"ql_dm_get_device_serial_numbers", item_ql_dm_get_device_serial_numbers},
347 {"ql_dm_get_device_firmware_rev_id", item_ql_dm_get_device_firmware_rev_id},
348 {"ql_dm_get_air_plane_mode", item_ql_dm_get_air_plane_mode},
349 {"ql_dm_set_air_plane_mode", item_ql_dm_set_air_plane_mode},
350 {"ql_dm_set_service_error_cb", item_ql_dm_set_service_error_cb},
351 {"ql_dm_deinit", item_ql_dm_deinit}
352};
353
354t_module_t ql_dm_module =
355{
356 "dm",
357 T_ARRAY_SIZE(ql_dm_items),
358 ql_dm_items
359};
360
361
362t_module_t *test_modules[] =
363{
364 &ql_dm_module,
365
366};
367
368void dump_modules(void)
369{
370 int i;
371
372 printf("\n");
373 for(i=0; i<T_ARRAY_SIZE(test_modules); i++)
374 {
375 printf("%d\t%s\n", i, test_modules[i]->name);
376 }
377 printf("-1\texit\n");
378}
379
380void dump_items(t_module_t *m)
381{
382 int i;
383
384 printf("\n");
385 printf("The current module is: \n");
386
387 for(i=0; i<m->item_len; i++)
388 {
389 printf("%d\t%s\n", i, m->item_list[i].name);
390 }
391 printf("-1\texit\n");
392}
393
394void enter_modules(t_module_t *m)
395{
396 int ret;
397 int idx;
398
399 dump_items(m);
400
401 while(1)
402 {
403 printf("Please enter your choice: ");
404 ret = t_get_int(&idx);
405 printf("\n");
406 if(ret < 0)
407 {
408 printf("Invalid input\n");
409 continue;
410 }
411 else if(ret == 1)
412 {
413 dump_items(m);
414 continue;
415 }
416
417 if(idx == -1)
418 {
419 break;
420 }
421
422 if(idx<0 || idx>=m->item_len)
423 {
424 printf("Not support idx: %d\n", idx);
425 continue;
426 }
427
428 printf("->Item : %s\n", m->item_list[idx].name);
429 m->item_list[idx].handle();
430 }
431}
432
433 static t_init_t init_func[] = {
434 {"ql_dm_init",ql_dm_init,ql_dm_deinit},
435
436
437};
438
439
440void test_init(int retry)
441{
442
443 int i = 0,j = 0;
444 for(i=0; i<T_ARRAY_SIZE(init_func); i++)
445 {
446 printf("Exec %s time = \n", init_func[i].name);
447 //clock_t start,end;
448 struct timeval start,end;
449
450 double cost_time = 0;
451 int ret = QL_ERR_OK;
452 for(j = 0;j < retry; j++)
453 {
454 if(QL_ERR_OK == ret )
455 {
456 //start = clock();
457 gettimeofday(&start, NULL);
458 }
459
460 ret = -1;
461 ret = init_func[i].init_handle();
462 if(QL_ERR_OK == ret)
463 {
464 //end = clock();
465 gettimeofday(&end, NULL);
466 long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
467 //printf("%6.0f ",(double)(end-start));
468 printf("%ld ",timeuse/1000);
469 //cost_time = cost_time > (end-start) ?cost_time:(end-start);
470 cost_time = cost_time > (timeuse/1000) ?cost_time:(timeuse/1000);
471
472 init_func[i].deinit_handle();
473 }
474
475
476 }
477 printf("\n");
478 printf("Finish test. %s max cost time = %6.0f ms\n",init_func[i].name, cost_time);
479
480 }
481
482
483}
484
485
486int main(int argc, char *argv[])
487{
488 int ret;
489 int idx;
490
491 if(argc > 1)
492 {
493 int c = -1;
494 int retry = -1;
495
496 while((c = getopt(argc, argv, "i:")) != -1)
497 {
498 if(-1 == c)
499 {
500 break;
501 }
502
503 switch(c)
504 {
505 case 'i':
506 retry = atoi(optarg);
507 test_init(retry);
508 return 0;
509
510 default:
511 printf("usage: ql_sdk_api_test -i <retry count> to test init func\n");
512 printf(" ql_sdk_api_test to test sdk api\n");
513 return -1;
514 }
515 }
516 }
517
518
519 dump_modules();
520
521 while(1)
522 {
523 printf("Please enter your choice: ");
524 ret = t_get_int(&idx);
525 printf("\n");
526 if(ret < 0)
527 {
528 printf("Invalid input\n");
529 continue;
530 }
531 else if(ret == 1)
532 {
533 dump_modules();
534 continue;
535 }
536
537 if(idx == -1)
538 {
539 break;
540 }
541
542 if(idx<0 || idx>=T_ARRAY_SIZE(test_modules))
543 {
544 printf("Not support idx: %d\n", idx);
545 continue;
546 }
547
548 enter_modules(test_modules[idx]);
549 }
550
551 return 0;
552}
553