blob: 729d7a81a6603b78dfcc3abd9bff79035162b559 [file] [log] [blame]
rjwdbb8a262022-11-01 14:17:32 +08001#include <stdio.h>
2#include <dlfcn.h>
3#include <signal.h>
4#include <string.h>
5#include <stdlib.h>
6
7#define BUF_SIZE 32
8#define BUF_PIN 4
9
10void *dlHandle_sim;
11void *dlHandle_log;
12
13int (*lynq_sim_init)(int utoken);
14int (*lynq_sim_deinit)(void);
15int (*lynq_enable_pin)(char pin[]);
16int (*lynq_disable_pin)(char pin[]);
17int (*lynq_get_iccid)(char buf[]);
18int (*lynq_query_pin_lock)(char *pin,int buf[]);
19int (*lynq_verify_pin)(char *pin);
20int (*lynq_change_pin)(char *old_pin,char *new_pin);
21int (*lynq_unlock_pin)(char *puk,char *pin);
22int (*lynq_query_phone_number)(char buf[]);
23int (*lynq_get_sim_status)(int *card_status);
24int (*lynq_get_imsi)(char buf[]);
25int (*lynq_get_imei)(char buf[]);
26int (*lynq_get_imei_and_sv)(char imei[],char sv[]);
27int (*lynq_req_sim_io)(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse);
you.chen516f4172024-01-02 14:43:36 +080028int (*lynq_shutdown)(char options[],char time[],char message[]);
29int (*lynq_get_version)(char buf[]);
30int (*lynq_sim_power)(int mode);
31int (*lynq_reset_modem)(void);
32int (*lynq_screen)(int num);
lhd2aa3682025-09-12 18:42:11 +080033int (*lynq_set_default_sim)(const int slot);
34int (*lynq_set_default_sim_except_data)(const int slot);
35int (*lynq_get_default_sim_all)(int *bit_slot);
you.chen516f4172024-01-02 14:43:36 +080036
rjwdbb8a262022-11-01 14:17:32 +080037
38int flag_init = 0;
39typedef struct
40{
41 int cmdIdx;
42 char *funcName;
43}st_api_test_case;
44
45st_api_test_case api_testcases[] =
46{
lhd2aa3682025-09-12 18:42:11 +080047 {0, "lynq_sim_init"},
48 {1, "lynq_enable_pin"},
49 {2, "lynq_disable_pin"},
50 {4, "lynq_get_iccid"},
51 {5, "lynq_query_pin_lock"},
52 {6, "lynq_verify_pin"},
53 {7, "lynq_change_pin"},
54 {8, "lynq_unlock_pin"},
55 {9, "lynq_query_phone_number"},
rjwdbb8a262022-11-01 14:17:32 +080056 {10, "lynq_get_imsi"},
57 {11, "lynq_get_sim_status"},
58 {12, "lynq_sim_deinit"},
59 {13, "lynq_get_imei"},
60 {14, "lynq_get_imei_and_sv"},
61 {15, "lynq_req_sim_io"},
you.chen516f4172024-01-02 14:43:36 +080062 {16, "lynq_shutdown"},
63 {17, "lynq_get_version"},
64 {18, "lynq_sim_power"},
65 {19, "lynq_reset_modem"},
66 {20, "lynq_screen"},
lhd2aa3682025-09-12 18:42:11 +080067 {21, "lynq_set_default_sim"},
68 {22, "lynq_set_default_sim_except_data"},
69 {23, "lynq_get_default_sim_all"},
rjwdbb8a262022-11-01 14:17:32 +080070 {-1, NULL}
71};
72
73void print_help(void)
74{
75 int i;
76
77 printf("Supported test cases:\n");
78 for(i = 0; ; i++)
79 {
80 if(api_testcases[i].cmdIdx == -1)
81 {
82 break;
83 }
84 printf("%d:\t%s\n", api_testcases[i].cmdIdx, api_testcases[i].funcName);
85 }
86}
87
88
89int main(void){
90 int cmdIdx = 0;
91 int flag = 0;
92 int res = 0;
93
94 const char *lynq_libpath_sim = "/lib64/liblynq-sim.so";
95 const char *lynq_libpath_log = "/lib64/liblynq-log.so";
96
97 dlHandle_sim = dlopen(lynq_libpath_sim,RTLD_NOW);
98 if(dlHandle_sim == NULL)
99 {
100 printf("dlopen dlHandle_sim failed: %s", dlerror());
101 exit(EXIT_FAILURE);
102 }
103 dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);
104 if(dlHandle_log == NULL)
105 {
106 printf("dlopen dlHandle_log failed: %s", dlerror());
107 exit(EXIT_FAILURE);
108 }
109
110 print_help();
111 while(1)
112 {
113 printf("please input cmd index(-1 exit, 80-help): ");
114 if (scanf("%d", &cmdIdx) != 1)
115 {
116 char c;
117 while((c = getchar()) != '\n' && c != EOF);
118 printf("Illegal input.Please input correctly\n");
119 print_help();
120 continue;
121 }
122 switch(cmdIdx)
123 {
124 case 0: /* lynq_sim_init */
125 {
126
127 if(flag_init == 1)
128 {
129 printf("init is already\n");
130 break;
131 }
132 else{
133 int token;
134 printf("input token\n");
135 scanf("%d", &token);
136 lynq_sim_init = (int(*)(int utoken))dlsym(dlHandle_sim,"lynq_sim_init");
137 if(NULL != lynq_sim_init)
138 {
139 res = lynq_sim_init(token);
140 if(res == 0)
141 {
142 printf("Run lynq_sim_init\n");
143 flag_init = 1;
144 }else{
145 printf("lynq sim init error\n");
146 }
147 }else{
148 printf("lynq_sim_init dlsym error\n");
149 }
150 break;
151 }
152
153 }
154 case 1: /* lynq_enable_pin */
155 {
156 if(flag_init == 0){
157 printf("must init first\n");
158 }
159 else{
160 char pin[BUF_PIN] = {0};
161 printf("input pin\n");
162 scanf("%s", pin);
163 lynq_enable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_enable_pin");
164 if(NULL != lynq_enable_pin)
165 {
166 res = lynq_enable_pin(pin);
167 if(res == 0)
168 {
169 printf("pin enabled!!!\n");
170 }else{
171 printf("pin enable error\n");
172 }
173 }else{
174 printf("lynq_enable_pin dlsym error\n");
175 }
176 }
177 break;
178 }
179
180 case 2: /* lynq_disable_pin */
181 {
182 if(flag_init == 0){
183 printf("must init first\n");
184 }
185 else{
186 char pin[BUF_PIN] = {0};
187 printf("input pin\n");
188 scanf("%s", pin);
189 lynq_disable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_disable_pin");
190 if(NULL != lynq_disable_pin)
191 {
192 res = lynq_disable_pin(pin);
193 if(res == 0)
194 {
195 printf("pin disnabled!!!\n");
196 }else{
197 printf("pin disable error\n");
198 }
199 }else{
200 printf("lynq_disable_pin dlsym error\n");
201 }
202 }
203 break;
204 }
205
206 case 4: /* lynq_get_iccid */
207 {
208 if(flag_init == 0){
209 printf("must init first\n");
210 }
211 else{
212 char iccid[BUF_SIZE] = {0};
213 lynq_get_iccid = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_iccid");
214 if(NULL != lynq_get_iccid)
215 {
216 res = lynq_get_iccid(iccid);
217 if(res == 0)
218 {
219 printf("get iccid success!!! iccid is %s\n",iccid);
220 }else{
221 printf("get iccid error\n");
222 }
223 }else{
224 printf("lynq_get_iccid dlsym error\n");
225 }
226 }
227 break;
228 }
229
230 case 5: /* lynq_query_pin_lock */
231 {
232 if(flag_init == 0){
233 printf("must init first\n");
234 }
235 else{
236 char pin[BUF_PIN] = {0};
237 printf("input pin\n");
238 scanf("%s", pin);
239 int lock[BUF_SIZE] = {0};
240
241 lynq_query_pin_lock = (int(*)(char *pin,int buf[]))dlsym(dlHandle_sim,"lynq_query_pin_lock");
242 if(NULL != lynq_query_pin_lock)
243 {
244 res = lynq_query_pin_lock(pin,lock);
245 if(res == 0)
246 {
247 printf("query pin lock success!!! iccid is %d\n",lock);
248 }else{
249 printf("query pin lock error\n");
250 }
251 }else{
252 printf("lynq_query_pin_lock dlsym error\n");
253 }
254 }
255 break;
256 }
257 case 6: /* lynq_verify_pin */
258 {
259 if(flag_init == 0){
260 printf("must init first\n");
261 }
262 else{
263 char pin[BUF_PIN] = {0};
264 printf("input pin\n");
265 scanf("%s", pin);
266
267 lynq_verify_pin = (int(*)(char *pin))dlsym(dlHandle_sim,"lynq_verify_pin");
268 if(NULL != lynq_verify_pin)
269 {
270 res = lynq_verify_pin(pin);
271 if(res == 0)
272 {
273 printf("verify pin success!!!\n");
274 }else{
275 printf("verify pin error\n");
276 }
277 }else{
278 printf("lynq_verify_pin dlsym error\n");
279 }
280 }
281 break;
282 }
283 case 7: /* lynq_change_pin */
284 {
285 if(flag_init == 0){
286 printf("must init first\n");
287 }
288 else{
289 char old_pin[BUF_PIN] = {0};
290 printf("input old pin\n");
291 scanf("%s", old_pin);
292 char new_pin[BUF_PIN] = {0};
293 printf("input new pin\n");
294 scanf("%s", new_pin);
295
296 lynq_change_pin = (int(*)(char *old_pin,char *new_pin))dlsym(dlHandle_sim,"lynq_change_pin");
297 if(NULL != lynq_change_pin)
298 {
299 res = lynq_change_pin(old_pin,new_pin);
300 if(res == 0)
301 {
302 printf("change pin success!!!\n");
303 }else{
304 printf("change pin error\n");
305 }
306 }else{
307 printf("lynq_change_pin dlsym error\n");
308 }
309 }
310 break;
311 }
312 case 8: /* lynq_unlock_pin */
313 {
314 if(flag_init == 0){
315 printf("must init first\n");
316 }
317 else{
318 char puk[BUF_SIZE] = {0};
319 printf("input puk\n");
320 scanf("%s", puk);
321 char new_pin[BUF_PIN] = {0};
322 printf("input new pin\n");
323 scanf("%s", new_pin);
324 lynq_unlock_pin = (int(*)(char *puk,char *pin))dlsym(dlHandle_sim,"lynq_unlock_pin");
325 if(NULL != lynq_unlock_pin)
326 {
327 res = lynq_unlock_pin(puk,new_pin);
328 if(res == 0)
329 {
330 printf("unlock pin success!!!\n");
331 }else{
332 printf("unlock pin error\n");
333 }
334 }else{
335 printf("lynq_unlock_pin dlsym error\n");
336 }
337 }
338 break;
339 }
340 case 9: /* lynq_query_phone_number */
341 {
342 if(flag_init == 0){
343 printf("must init first\n");
344 }
345 else{
346 char number[BUF_SIZE] = {0};
347 lynq_query_phone_number = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_query_phone_number");
348 if(NULL != lynq_query_phone_number)
349 {
350 res = lynq_query_phone_number(number);
351 if(res == 0)
352 {
353 printf("phone number is %s!!!\n",number);
354 }else{
you.chen516f4172024-01-02 14:43:36 +0800355 printf("No phone write\n");
rjwdbb8a262022-11-01 14:17:32 +0800356 }
357 }else{
358 printf("lynq_query_phone_number dlsym error\n");
359 }
360 }
361 break;
362 }
363 case 10: /* lynq_get_imsi */
364 {
365 if(flag_init == 0){
366 printf("must init first\n");
367 }
368 else{
369 char imsi[BUF_SIZE] = {0};
370
371 lynq_get_imsi = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_imsi");
372 if(NULL != lynq_get_imsi)
373 {
374 res = lynq_get_imsi(imsi);
375 if(res == 0)
376 {
377 printf("imsi is %s!!!\n",imsi);
378 }else{
379 printf("get imsi error\n");
380 }
381 }else{
382 printf("lynq_get_imsi dlsym error\n");
383 }
384 }
385 break;
386 }
387 case 11: /* lynq_get_sim_status */
388 {
389 if(flag_init == 0){
390 printf("must init first\n");
391 }
392 else{
393 int x = -1;
394 int *y = &x;
395
396 lynq_get_sim_status = (int(*)(int* card_status))dlsym(dlHandle_sim,"lynq_get_sim_status");
397 if(NULL != lynq_get_sim_status)
398 {
399 res = lynq_get_sim_status(y);
400 if(res == 0)
401 {
402 printf("state is %d!!!\n",*y);
403 }else{
404 printf("get imsi error\n");
405 }
406 }else{
407 printf("lynq_get_sim_status dlsym error\n");
408 }
409 }
410 break;
411 }
412 case 12:
413 {
414 lynq_sim_deinit = (int(*)(void))dlsym(dlHandle_sim,"lynq_sim_deinit");
415 if(NULL != lynq_sim_deinit)
416 {
417 res = lynq_sim_deinit();
418 if(res == 0)
419 {
420 printf("sim deinit success is!!!\n");
421 }else{
422 printf("get imsi error\n");
423 }
424 }else{
425 printf("lynq_sim_deinit dlsym error\n");
426 }
427 flag_init = 0;
428 break;
429 }
430 case 13:
431 {
432 lynq_get_imei = (int (*)(char *buf))dlsym(dlHandle_sim,"lynq_get_imei");
433 if(NULL != lynq_get_imei)
434 {
435 char buf[20] = {0};
436 res = lynq_get_imei(buf);
437 if(res == 0)
438 {
439 printf("imei is %s!!!\n",buf);
440 }
441 else
442 {
443 printf("get imei error %d\n", res);
444 }
445 }
446 else
447 {
448 printf("lynq_get_imei dlsym error\n");
449 }
450 break;
451 }
452 case 14:
453 {
454 lynq_get_imei_and_sv = (int (*)(char *imei, char* sv))dlsym(dlHandle_sim,"lynq_get_imei_and_sv");
455 if(NULL != lynq_get_imei_and_sv)
456 {
457 char imei[20] = {0};
458 char sv[20] = {0};
459 res = lynq_get_imei_and_sv(imei,sv);
460 if(res == 0)
461 {
462 printf("imei is %s sv is %s!!!\n",imei,sv);
463 }
464 else
465 {
466 printf("get imei sv error %d\n", res);
467 }
468 }
469 else
470 {
471 printf("lynq_get_imei_and_sv dlsym error\n");
472 }
473 break;
474 }
475 case 15:
476 {
477 lynq_req_sim_io = (int (*)(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse))dlsym(dlHandle_sim,"lynq_req_sim_io");
478 if(NULL != lynq_req_sim_io)
479 {
480 int list[5] = {176,28423,0,0,9};
481 char *path = "3F007F20";
482 char *data = NULL;
483 char *pin2 = NULL;
484 char *aidPtr = NULL;
485 int sw[2];
486 char simResponse[256] = {0};
487 res = lynq_req_sim_io(list, path, data, pin2, aidPtr, sw, simResponse);
488 if(res == 0)
489 {
490 printf("%d %d %s\n", sw[0], sw[1], simResponse);
491 }
492 else
493 {
494 printf("lynq_req_sim_io error %d\n", res);
495 }
496 }
497 else
498 {
499 printf("lynq_req_sim_io dlsym error \n");
500 }
501 break;
502 }
you.chen516f4172024-01-02 14:43:36 +0800503 case 16:
504 {
505 lynq_shutdown = (int (*)(char *, char *, char *))dlsym(dlHandle_sim,"lynq_shutdown");
506 if(NULL != lynq_shutdown)
507 {
508 char *option = "-h";
509 char *time = "1";
510 char *message = "poweroff";
511 res = lynq_shutdown(option,time,message);
512 if(res == 0)
513 {
514 printf("shutdown -h 1\n");
515 }
516 else
517 {
518 printf("shutdown error\n");
519 }
520 }
521 break;
522 }
523 case 17:
524 {
525 lynq_get_version = (int (*)(char *))dlsym(dlHandle_sim,"lynq_get_version");
526 if(NULL != lynq_get_version)
527 {
528 char buf[32] = {0};
529 res = lynq_get_version(buf);
530 if(res == 0)
531 {
532 printf("version %s\n", buf);
533 }
534 else
535 {
536 printf("lynq_get_version error\n");
537 }
538 }
539 break;
540 }
541 case 18:
542 {
543 lynq_sim_power = (int (*)(int))dlsym(dlHandle_sim,"lynq_sim_power");
544 if(NULL != lynq_sim_power)
545 {
546 int token;
547 printf("input mode\n");
548 scanf("%d", &token);
549 res = lynq_sim_power(token);
550 if(res == 0)
551 {
552 printf("lynq_sim_power success\n");
553 }
554 else
555 {
556 printf("lynq_sim_power error\n");
557 }
558 }
559 break;
560 }
561 case 19:
562 {
563 lynq_reset_modem = (int (*)())dlsym(dlHandle_sim,"lynq_reset_modem");
564 if(NULL != lynq_reset_modem)
565 {
566 res = lynq_reset_modem();
567 if(res == 0)
568 {
569 printf("lynq_reset_modem success\n");
570 }
571 else
572 {
573 printf("lynq_reset_modem error\n");
574 }
575 }
576 break;
577 }
578 case 20:
579 {
580 lynq_screen = (int (*)(int))dlsym(dlHandle_sim,"lynq_screen");
581 if(NULL != lynq_screen)
582 {
583 int token;
584 printf("input mode\n");
585 scanf("%d", &token);
586 res = lynq_screen(token);
587 if(res == 0)
588 {
589 printf("lynq_screen success\n");
590 }
591 else
592 {
593 printf("lynq_screen error\n");
594 }
595 }
596 break;
597 }
lhd2aa3682025-09-12 18:42:11 +0800598 case 21:
599 {
600 lynq_set_default_sim = (int (*)(int))dlsym(dlHandle_sim,"lynq_set_default_sim");
601 if(NULL != lynq_set_default_sim)
602 {
603 int slot;
604 printf("input slot\n");
605 scanf("%d", &slot);
606 res = lynq_set_default_sim(slot);
607 if(res == 0)
608 {
609 printf("lynq_set_default_sim success\n");
610 }
611 else
612 {
613 printf("lynq_set_default_sim error\n");
614 }
615 }
616 break;
617 }
618 case 22:
619 {
620 lynq_set_default_sim_except_data = (int (*)(int))dlsym(dlHandle_sim,"lynq_set_default_sim_except_data");
621 if(NULL != lynq_set_default_sim_except_data)
622 {
623 int slot;
624 printf("input slot\n");
625 scanf("%d", &slot);
626 res = lynq_set_default_sim_except_data(slot);
627 if(res == 0)
628 {
629 printf("lynq_set_default_sim_except_data success\n");
630 }
631 else
632 {
633 printf("lynq_set_default_sim_except_data error\n");
634 }
635 }
636 break;
637 }
638 case 23:
639 {
640 lynq_get_default_sim_all = (int (*)(int *bit_slot))dlsym(dlHandle_sim,"lynq_get_default_sim_all");
641 if(NULL != lynq_get_default_sim_all)
642 {
643 int bit_slot;
644 res = lynq_get_default_sim_all(&bit_slot);
645 if(res == 0)
646 {
647 printf("BIT0:other service slot;BIT1:data call slot\n");
648 printf("BIT0=%d\n",(bit_slot&(1<<0))? 1 : 0);
649 printf("BIT1=%d\n",(bit_slot&(1<<1))? 1 : 0);
650 }
651 else
652 {
653 printf("lynq_get_default_sim_all error\n");
654 }
655 }
656 break;
657 }
rjwdbb8a262022-11-01 14:17:32 +0800658 case -1:
659 {
660 flag = 1; /* exit */
661 break;
662 }
663 case 80:
664 print_help();
665 break;
666 default:
667 print_help();
668 break;
669 }
670 if(flag == 1)
671 break;
672 }
673 return 0;
674}