blob: 0a9f6d2e756d13a5ab18b69a505aa81176b0f3bd [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);
28
29int flag_init = 0;
30typedef struct
31{
32 int cmdIdx;
33 char *funcName;
34}st_api_test_case;
35
36st_api_test_case api_testcases[] =
37{
38 {0, "lynq_sim_init"},
39 {1, "lynq_enable_pin"},
40 {2, "lynq_disable_pin"},
41 {4, "lynq_get_iccid"},
42 {5, "lynq_query_pin_lock"},
43 {6, "lynq_verify_pin"},
44 {7, "lynq_change_pin"},
45 {8, "lynq_unlock_pin"},
46 {9, "lynq_query_phone_number"},
47 {10, "lynq_get_imsi"},
48 {11, "lynq_get_sim_status"},
49 {12, "lynq_sim_deinit"},
50 {13, "lynq_get_imei"},
51 {14, "lynq_get_imei_and_sv"},
52 {15, "lynq_req_sim_io"},
53 {-1, NULL}
54};
55
56void print_help(void)
57{
58 int i;
59
60 printf("Supported test cases:\n");
61 for(i = 0; ; i++)
62 {
63 if(api_testcases[i].cmdIdx == -1)
64 {
65 break;
66 }
67 printf("%d:\t%s\n", api_testcases[i].cmdIdx, api_testcases[i].funcName);
68 }
69}
70
71
72int main(void){
73 int cmdIdx = 0;
74 int flag = 0;
75 int res = 0;
76
77 const char *lynq_libpath_sim = "/lib64/liblynq-sim.so";
78 const char *lynq_libpath_log = "/lib64/liblynq-log.so";
79
80 dlHandle_sim = dlopen(lynq_libpath_sim,RTLD_NOW);
81 if(dlHandle_sim == NULL)
82 {
83 printf("dlopen dlHandle_sim failed: %s", dlerror());
84 exit(EXIT_FAILURE);
85 }
86 dlHandle_log = dlopen(lynq_libpath_log,RTLD_NOW);
87 if(dlHandle_log == NULL)
88 {
89 printf("dlopen dlHandle_log failed: %s", dlerror());
90 exit(EXIT_FAILURE);
91 }
92
93 print_help();
94 while(1)
95 {
96 printf("please input cmd index(-1 exit, 80-help): ");
97 if (scanf("%d", &cmdIdx) != 1)
98 {
99 char c;
100 while((c = getchar()) != '\n' && c != EOF);
101 printf("Illegal input.Please input correctly\n");
102 print_help();
103 continue;
104 }
105 switch(cmdIdx)
106 {
107 case 0: /* lynq_sim_init */
108 {
109
110 if(flag_init == 1)
111 {
112 printf("init is already\n");
113 break;
114 }
115 else{
116 int token;
117 printf("input token\n");
118 scanf("%d", &token);
119 lynq_sim_init = (int(*)(int utoken))dlsym(dlHandle_sim,"lynq_sim_init");
120 if(NULL != lynq_sim_init)
121 {
122 res = lynq_sim_init(token);
123 if(res == 0)
124 {
125 printf("Run lynq_sim_init\n");
126 flag_init = 1;
127 }else{
128 printf("lynq sim init error\n");
129 }
130 }else{
131 printf("lynq_sim_init dlsym error\n");
132 }
133 break;
134 }
135
136 }
137 case 1: /* lynq_enable_pin */
138 {
139 if(flag_init == 0){
140 printf("must init first\n");
141 }
142 else{
143 char pin[BUF_PIN] = {0};
144 printf("input pin\n");
145 scanf("%s", pin);
146 lynq_enable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_enable_pin");
147 if(NULL != lynq_enable_pin)
148 {
149 res = lynq_enable_pin(pin);
150 if(res == 0)
151 {
152 printf("pin enabled!!!\n");
153 }else{
154 printf("pin enable error\n");
155 }
156 }else{
157 printf("lynq_enable_pin dlsym error\n");
158 }
159 }
160 break;
161 }
162
163 case 2: /* lynq_disable_pin */
164 {
165 if(flag_init == 0){
166 printf("must init first\n");
167 }
168 else{
169 char pin[BUF_PIN] = {0};
170 printf("input pin\n");
171 scanf("%s", pin);
172 lynq_disable_pin = (int(*)(char pin[]))dlsym(dlHandle_sim,"lynq_disable_pin");
173 if(NULL != lynq_disable_pin)
174 {
175 res = lynq_disable_pin(pin);
176 if(res == 0)
177 {
178 printf("pin disnabled!!!\n");
179 }else{
180 printf("pin disable error\n");
181 }
182 }else{
183 printf("lynq_disable_pin dlsym error\n");
184 }
185 }
186 break;
187 }
188
189 case 4: /* lynq_get_iccid */
190 {
191 if(flag_init == 0){
192 printf("must init first\n");
193 }
194 else{
195 char iccid[BUF_SIZE] = {0};
196 lynq_get_iccid = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_iccid");
197 if(NULL != lynq_get_iccid)
198 {
199 res = lynq_get_iccid(iccid);
200 if(res == 0)
201 {
202 printf("get iccid success!!! iccid is %s\n",iccid);
203 }else{
204 printf("get iccid error\n");
205 }
206 }else{
207 printf("lynq_get_iccid dlsym error\n");
208 }
209 }
210 break;
211 }
212
213 case 5: /* lynq_query_pin_lock */
214 {
215 if(flag_init == 0){
216 printf("must init first\n");
217 }
218 else{
219 char pin[BUF_PIN] = {0};
220 printf("input pin\n");
221 scanf("%s", pin);
222 int lock[BUF_SIZE] = {0};
223
224 lynq_query_pin_lock = (int(*)(char *pin,int buf[]))dlsym(dlHandle_sim,"lynq_query_pin_lock");
225 if(NULL != lynq_query_pin_lock)
226 {
227 res = lynq_query_pin_lock(pin,lock);
228 if(res == 0)
229 {
230 printf("query pin lock success!!! iccid is %d\n",lock);
231 }else{
232 printf("query pin lock error\n");
233 }
234 }else{
235 printf("lynq_query_pin_lock dlsym error\n");
236 }
237 }
238 break;
239 }
240 case 6: /* lynq_verify_pin */
241 {
242 if(flag_init == 0){
243 printf("must init first\n");
244 }
245 else{
246 char pin[BUF_PIN] = {0};
247 printf("input pin\n");
248 scanf("%s", pin);
249
250 lynq_verify_pin = (int(*)(char *pin))dlsym(dlHandle_sim,"lynq_verify_pin");
251 if(NULL != lynq_verify_pin)
252 {
253 res = lynq_verify_pin(pin);
254 if(res == 0)
255 {
256 printf("verify pin success!!!\n");
257 }else{
258 printf("verify pin error\n");
259 }
260 }else{
261 printf("lynq_verify_pin dlsym error\n");
262 }
263 }
264 break;
265 }
266 case 7: /* lynq_change_pin */
267 {
268 if(flag_init == 0){
269 printf("must init first\n");
270 }
271 else{
272 char old_pin[BUF_PIN] = {0};
273 printf("input old pin\n");
274 scanf("%s", old_pin);
275 char new_pin[BUF_PIN] = {0};
276 printf("input new pin\n");
277 scanf("%s", new_pin);
278
279 lynq_change_pin = (int(*)(char *old_pin,char *new_pin))dlsym(dlHandle_sim,"lynq_change_pin");
280 if(NULL != lynq_change_pin)
281 {
282 res = lynq_change_pin(old_pin,new_pin);
283 if(res == 0)
284 {
285 printf("change pin success!!!\n");
286 }else{
287 printf("change pin error\n");
288 }
289 }else{
290 printf("lynq_change_pin dlsym error\n");
291 }
292 }
293 break;
294 }
295 case 8: /* lynq_unlock_pin */
296 {
297 if(flag_init == 0){
298 printf("must init first\n");
299 }
300 else{
301 char puk[BUF_SIZE] = {0};
302 printf("input puk\n");
303 scanf("%s", puk);
304 char new_pin[BUF_PIN] = {0};
305 printf("input new pin\n");
306 scanf("%s", new_pin);
307 lynq_unlock_pin = (int(*)(char *puk,char *pin))dlsym(dlHandle_sim,"lynq_unlock_pin");
308 if(NULL != lynq_unlock_pin)
309 {
310 res = lynq_unlock_pin(puk,new_pin);
311 if(res == 0)
312 {
313 printf("unlock pin success!!!\n");
314 }else{
315 printf("unlock pin error\n");
316 }
317 }else{
318 printf("lynq_unlock_pin dlsym error\n");
319 }
320 }
321 break;
322 }
323 case 9: /* lynq_query_phone_number */
324 {
325 if(flag_init == 0){
326 printf("must init first\n");
327 }
328 else{
329 char number[BUF_SIZE] = {0};
330 lynq_query_phone_number = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_query_phone_number");
331 if(NULL != lynq_query_phone_number)
332 {
333 res = lynq_query_phone_number(number);
334 if(res == 0)
335 {
336 printf("phone number is %s!!!\n",number);
337 }else{
338 printf("unlock pin error\n");
339 }
340 }else{
341 printf("lynq_query_phone_number dlsym error\n");
342 }
343 }
344 break;
345 }
346 case 10: /* lynq_get_imsi */
347 {
348 if(flag_init == 0){
349 printf("must init first\n");
350 }
351 else{
352 char imsi[BUF_SIZE] = {0};
353
354 lynq_get_imsi = (int(*)(char buf[]))dlsym(dlHandle_sim,"lynq_get_imsi");
355 if(NULL != lynq_get_imsi)
356 {
357 res = lynq_get_imsi(imsi);
358 if(res == 0)
359 {
360 printf("imsi is %s!!!\n",imsi);
361 }else{
362 printf("get imsi error\n");
363 }
364 }else{
365 printf("lynq_get_imsi dlsym error\n");
366 }
367 }
368 break;
369 }
370 case 11: /* lynq_get_sim_status */
371 {
372 if(flag_init == 0){
373 printf("must init first\n");
374 }
375 else{
376 int x = -1;
377 int *y = &x;
378
379 lynq_get_sim_status = (int(*)(int* card_status))dlsym(dlHandle_sim,"lynq_get_sim_status");
380 if(NULL != lynq_get_sim_status)
381 {
382 res = lynq_get_sim_status(y);
383 if(res == 0)
384 {
385 printf("state is %d!!!\n",*y);
386 }else{
387 printf("get imsi error\n");
388 }
389 }else{
390 printf("lynq_get_sim_status dlsym error\n");
391 }
392 }
393 break;
394 }
395 case 12:
396 {
397 lynq_sim_deinit = (int(*)(void))dlsym(dlHandle_sim,"lynq_sim_deinit");
398 if(NULL != lynq_sim_deinit)
399 {
400 res = lynq_sim_deinit();
401 if(res == 0)
402 {
403 printf("sim deinit success is!!!\n");
404 }else{
405 printf("get imsi error\n");
406 }
407 }else{
408 printf("lynq_sim_deinit dlsym error\n");
409 }
410 flag_init = 0;
411 break;
412 }
413 case 13:
414 {
415 lynq_get_imei = (int (*)(char *buf))dlsym(dlHandle_sim,"lynq_get_imei");
416 if(NULL != lynq_get_imei)
417 {
418 char buf[20] = {0};
419 res = lynq_get_imei(buf);
420 if(res == 0)
421 {
422 printf("imei is %s!!!\n",buf);
423 }
424 else
425 {
426 printf("get imei error %d\n", res);
427 }
428 }
429 else
430 {
431 printf("lynq_get_imei dlsym error\n");
432 }
433 break;
434 }
435 case 14:
436 {
437 lynq_get_imei_and_sv = (int (*)(char *imei, char* sv))dlsym(dlHandle_sim,"lynq_get_imei_and_sv");
438 if(NULL != lynq_get_imei_and_sv)
439 {
440 char imei[20] = {0};
441 char sv[20] = {0};
442 res = lynq_get_imei_and_sv(imei,sv);
443 if(res == 0)
444 {
445 printf("imei is %s sv is %s!!!\n",imei,sv);
446 }
447 else
448 {
449 printf("get imei sv error %d\n", res);
450 }
451 }
452 else
453 {
454 printf("lynq_get_imei_and_sv dlsym error\n");
455 }
456 break;
457 }
458 case 15:
459 {
460 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");
461 if(NULL != lynq_req_sim_io)
462 {
463 int list[5] = {176,28423,0,0,9};
464 char *path = "3F007F20";
465 char *data = NULL;
466 char *pin2 = NULL;
467 char *aidPtr = NULL;
468 int sw[2];
469 char simResponse[256] = {0};
470 res = lynq_req_sim_io(list, path, data, pin2, aidPtr, sw, simResponse);
471 if(res == 0)
472 {
473 printf("%d %d %s\n", sw[0], sw[1], simResponse);
474 }
475 else
476 {
477 printf("lynq_req_sim_io error %d\n", res);
478 }
479 }
480 else
481 {
482 printf("lynq_req_sim_io dlsym error \n");
483 }
484 break;
485 }
486 case -1:
487 {
488 flag = 1; /* exit */
489 break;
490 }
491 case 80:
492 print_help();
493 break;
494 default:
495 print_help();
496 break;
497 }
498 if(flag == 1)
499 break;
500 }
501 return 0;
502}