blob: a5b0af898cbf3638ff86025ab0cc6dbdc70aeb41 [file] [log] [blame]
b.liu8583dce2024-04-03 13:30:08 +08001#include <stdlib.h>
2#include <stdio.h>
3#include <string.h>
4#include <sys/types.h>
5#include <pthread.h>
6#include <unistd.h>
7#include <dlfcn.h>
8#include <stdint.h>
9
10#include"lynq-qser-sim-demo.h"
11#include "mbtk_log.h"
12
13
14#define BUF_SIZE 32
15#define BUF_PIN 8
16#define VER_SIZE 128
17
18typedef uint32_t sim_client_handle_type;
19
wangyouqiang80b65562024-04-03 18:34:12 +080020//sim_client_handle_type ph_sim = 2023;
b.liu8583dce2024-04-03 13:30:08 +080021sim_client_handle_type h_sim = 2023;
22int flag_init = 0;
23
24int (*qser_sim_client_init)(sim_client_handle_type *ph_sim);
25int (*qser_sim_client_deinit)(sim_client_handle_type h_sim);
26int (*qser_sim_getimsi)(
27 sim_client_handle_type h_sim,
28 QSER_SIM_APP_ID_INFO_T *pt_info, ///< [IN] The SIM identifier info.
29 char *imsi, ///< [OUT] IMSI buffer
30 size_t imsiLen ///< [IN] IMSI buffer length
31);
32
33int (*qser_sim_geticcid)
34(
35 sim_client_handle_type h_sim,
36 QSER_SIM_SLOT_ID_TYPE_T simId, ///< [IN] The SIM identifier.
37 char *iccid, ///< [OUT] ICCID
38 size_t iccidLen ///< [IN] ICCID buffer length
39);
40
41int (*qser_sim_getphonenumber)
42(
43 sim_client_handle_type h_sim,
44 QSER_SIM_APP_ID_INFO_T *pt_info, ///< [IN] The SIM identifier.
45 char *phone_num, ///< [OUT] phone number
46 size_t phoneLen ///< [IN] phone number buffer length
47);
48int (*qser_sim_verifypin)(sim_client_handle_type h_sim, QSER_SIM_VERIFY_PIN_INFO_T *pt_info);
49int (*qser_sim_changepin)(sim_client_handle_type h_sim, QSER_SIM_CHANGE_PIN_INFO_T *pt_info);
50int (*qser_sim_unblockpin)(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info);
51int (*qser_sim_enablepin)(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info);
52int (*qser_sim_disablepin)(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info);
53int (*qser_sim_getcardstatus)(sim_client_handle_type h_sim, QSER_SIM_SLOT_ID_TYPE_T simId, QSER_SIM_CARD_STATUS_INFO_T *pt_info);
54int (*qser_sim_getimei)(sim_client_handle_type h_sim, char *imei);
55int (*qser_get_imei_and_sv)(sim_client_handle_type h_sim,char *imei, char*sv);
56int (*qser_reset_modem)(sim_client_handle_type h_sim);
57int (*qser_get_version)(sim_client_handle_type h_sim, char *buf);
58int (*qser_reset_sim)(sim_client_handle_type h_sim);
59int (*qser_sim_addrxmsghandler)(QSER_SIM_RxMsgHandlerFunc_t handlerPtr);
60
61
62typedef struct
63{
64 int cmdIdx;
65 const char *funcName;
66} st_api_test_case;
67
68//for server test
69st_api_test_case at_api_testcases[] =
70{
71 {0, "qser_sim_init"},
72 {1, "qser_get_imsi"},
73 {2, "qser_get_iccid"},
74 {3, "qser_get_phonenumber"},
75 {4, "qser_verify_pin"},
76 {5, "qser_change_pin"},
77 {6, "qser_unlock_pin"},
78 {7, "qser_enable_pin"},
79 {8, "qser_disable_pin"},
80 {9, "qser_get_sim_status"},
81 {10, "qser_get_imei"},
82 {11, "qser_get_imei_and_sv"},
83 {12, "qser_reset_modem"},
84 {13, "qser_get_version"},
85 {14, "qser_reset_sim"},
86 {15, "qser_sim_addrxmsghandler"},
87 {16, "qser_deinit_sim"},
88 {-1, NULL}
89};
90
91void print_help(void)
92{
93 int i;
94 printf("Supported test cases:\n");
95 for(i = 0; ; i++)
96 {
97 if(at_api_testcases[i].cmdIdx == -1)
98 {
99 break;
100 }
101 printf("%d:\t%s\n", at_api_testcases[i].cmdIdx, at_api_testcases[i].funcName);
102 }
103}
104
105void qser_sim_handler(QSER_SIM_MsgRef msgRef) {
106 printf("[%s-%d] sim, state = 0x%x========\n", __FUNCTION__, __LINE__, msgRef->e_card_state);
107}
108
109int main(int argc, char const *argv[])
110{
111 int cmdIdx = 0;
112 int res = 0;
113
114 mbtk_log_init("radio", "MBTK");
115
116 const char *lynq_libpath_sim = "/lib/liblynq-qser-sim.so";
117 void *dlHandle_sim = dlopen(lynq_libpath_sim, RTLD_NOW);
118 if (dlHandle_sim == NULL)
119 {
120 printf("dlopen dlHandle_sim failed: %s\n", dlerror());
121 exit(EXIT_FAILURE);
122 }
123
124 print_help();
125 while(1)
126 {
127 printf("\nplease input cmd index(-1 exit): ");
128 scanf("%d", &cmdIdx);
129 if(cmdIdx == -1)
130 {
131 break;
132 }
133
134 switch(cmdIdx)
135 {
136 //"qser_sim_init"
137 case 0:
138 {
139 if(flag_init == 1)
140 {
141 printf("init is already\n");
142 break;
143 }
144 else{
145 //int token;
146 //printf("input token\n");
147 //scanf("%d", &token);
wangyouqiang80b65562024-04-03 18:34:12 +0800148 qser_sim_client_init = (int(*)(sim_client_handle_type *h_sim))dlsym(dlHandle_sim,"qser_sim_client_init");
b.liu8583dce2024-04-03 13:30:08 +0800149 if(NULL != qser_sim_client_init)
150 {
wangyouqiang80b65562024-04-03 18:34:12 +0800151 res = qser_sim_client_init(&h_sim);
b.liu8583dce2024-04-03 13:30:08 +0800152 if(res == 0)
153 {
154 printf("Run qser_sim_client_init\n");
155 flag_init = 1;
156 }else{
157 printf("qser_sim_client_init error\n");
158 }
159 }else{
160 printf("qser_sim_client_init dlsym error\n");
161 }
162 break;
163 }
164 }
165
166 //"qser_sim_getimsi"
167 case 1:
168 {
169 if(flag_init == 0){
170 printf("must init first\n");
171 }
172 else{
173 char imsi[BUF_SIZE] = {0};
174 QSER_SIM_APP_ID_INFO_T pt_info;
175 qser_sim_getimsi = (int(*)(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info, char *imsi, size_t imsiLen))dlsym(dlHandle_sim,"qser_sim_getimsi");
176 if(NULL != qser_sim_getimsi)
177 {
wangyouqiang80b65562024-04-03 18:34:12 +0800178 res = qser_sim_getimsi(h_sim, &pt_info, imsi, BUF_SIZE);
b.liu8583dce2024-04-03 13:30:08 +0800179 if(res == 0)
180 {
181 printf("imsi is %s!!!\n",imsi);
182 }else{
183 printf("get imsi error, res = %d\n", res);
184 }
185 }else{
186 printf("qser_sim_getimsi dlsym error\n");
187 }
188 }
189 break;
190 }
191
192 //"qser_get_iccid"
193 case 2:
194 {
195 if(flag_init == 0){
196 printf("must init first\n");
197 }
198 else{
199 char iccid[BUF_SIZE] = {0};
200 qser_sim_geticcid = (int(*)(sim_client_handle_type h_sim, QSER_SIM_SLOT_ID_TYPE_T simId, char *iccid, size_t iccidLen))dlsym(dlHandle_sim,"qser_sim_geticcid");
201 if(NULL != qser_sim_geticcid)
202 {
wangyouqiang80b65562024-04-03 18:34:12 +0800203 res = qser_sim_geticcid(h_sim, QSER_SIM_SLOT_ID_1, iccid, BUF_SIZE);
b.liu8583dce2024-04-03 13:30:08 +0800204 if(res == 0)
205 {
206 printf("get iccid success!!! iccid is %s\n",iccid);
207 }else{
208 printf("get iccid error, res = %d\n", res);
209 }
210 }else{
211 printf("qser_sim_geticcid dlsym error\n");
212 }
213 }
214 break;
215 }
216 //qser_get_phonenumber
217 case 3:
218 {
219 if(flag_init == 0){
220 printf("must init first\n");
221 }
222 else{
223 char phonenumber[BUF_SIZE] = "";
224 QSER_SIM_APP_ID_INFO_T pt_info;
225 qser_sim_getphonenumber = (int(*)(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info, char *phone_num, size_t phoneLen))dlsym(dlHandle_sim,"qser_sim_getphonenumber");
226 if(NULL != qser_sim_getphonenumber)
227 {
wangyouqiang80b65562024-04-03 18:34:12 +0800228 res = qser_sim_getphonenumber(h_sim, &pt_info, phonenumber, BUF_SIZE);
b.liu8583dce2024-04-03 13:30:08 +0800229 if(res == 0)
230 {
231 printf("get phonenumber success!!! phonenumber is %s\n",phonenumber);
232 }else{
233 printf("get phonenumber error, res = %d\n", res);
234 }
235 }else{
236 printf("qser_sim_getphonenumber dlsym error\n");
237 }
238 }
239 break;
240 }
241 //qser_verify_pin
242 case 4:
243 {
244 if(flag_init == 0){
245 printf("must init first\n");
246 }
247 else{
248 char pin[BUF_PIN] = {0};
249 QSER_SIM_VERIFY_PIN_INFO_T pt_info;
250 printf("input pin\n");
251 scanf("%s", pin);
252 strncpy(pt_info.pin_value, pin, BUF_PIN);
253 printf("pin_value = %s , pin = %s\n", pt_info.pin_value, pin);
254
255 qser_sim_verifypin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_VERIFY_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_verifypin");
256 if(NULL != qser_sim_verifypin)
257 {
258 res = qser_sim_verifypin(h_sim, &pt_info);
259 if(res == 0)
260 {
261 printf("verify pin success!!!\n");
262 }else{
263 printf("verify pin error, res = %d\n", res);
264 }
265 }else{
266 printf("qser_sim_verifypin dlsym error\n");
267 }
268 }
269 break;
270 }
271 //qser_change_pin
272 case 5:
273 {
274 if(flag_init == 0){
275 printf("must init first\n");
276 }
277 else{
278 char old_pin[BUF_PIN] = {0};
279 QSER_SIM_CHANGE_PIN_INFO_T pt_info;
280 printf("input old pin\n");
281 scanf("%s", old_pin);
282 char new_pin[BUF_PIN] = {0};
283 printf("input new pin\n");
284 scanf("%s", new_pin);
285 strncpy(pt_info.old_pin_value, old_pin, BUF_PIN);
286 strncpy(pt_info.new_pin_value, new_pin, BUF_PIN);
287 printf("pt_info.old_pin_value = %s, old_pin = %s\n", pt_info.old_pin_value, old_pin);
288 printf("pt_info.new_pin_value = %s, new_pin = %s\n", pt_info.new_pin_value, new_pin);
289
290 qser_sim_changepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_CHANGE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_changepin");
291 if(NULL != qser_sim_changepin)
292 {
293 res = qser_sim_changepin(h_sim, &pt_info);
294 if(res == 0)
295 {
296 printf("change pin success!!!\n");
297 }else{
298 printf("change pin error, res = %d\n", res);
299 }
300 }else{
301 printf("lynq_change_pin dlsym error\n");
302 }
303 }
304 break;
305 }
306 //qser_unlock_pin
307 case 6:
308 {
309 if(flag_init == 0){
310 printf("must init first\n");
311 }
312 else{
313 char puk[BUF_PIN] = {0};
314 QSER_SIM_UNBLOCK_PIN_INFO_T pt_info;
315 printf("input puk\n");
316 scanf("%s", puk);
317 char new_pin[BUF_PIN] = {0};
318 printf("input new pin\n");
319 scanf("%s", new_pin);
320 memset(pt_info.puk_value, 0, sizeof(pt_info.puk_value));
321 memset(pt_info.new_pin_value, 0, sizeof(pt_info.new_pin_value));
322 strncpy(pt_info.puk_value, puk, BUF_PIN);
323 strncpy(pt_info.new_pin_value, new_pin, BUF_PIN);
324 printf("pt_info.puk_value = %s, puk = %s\n", pt_info.puk_value, puk);
325 printf("pt_info.new_pin_value = %s, new_pin = %s\n", pt_info.new_pin_value, new_pin);
326
327 qser_sim_unblockpin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_unblockpin");
328 if(NULL != qser_sim_unblockpin)
329 {
330 res = qser_sim_unblockpin(h_sim, &pt_info);
331 if(res == 0)
332 {
333 printf("unlock pin success!!!\n");
334 }else{
335 printf("unlock pin error, res = %d\n", res);
336 }
337 }else{
338 printf("qser_sim_unblockpin dlsym error\n");
339 }
340 }
341 break;
342 }
343 //qser_enable_pin
344 case 7:
345 {
346 if(flag_init == 0){
347 printf("must init first\n");
348 }
349 else{
350 char pin[BUF_PIN] = {0};
351 QSER_SIM_ENABLE_PIN_INFO_T pt_info;
352 printf("input pin\n");
353 scanf("%s", pin);
354 strncpy(pt_info.pin_value, pin, BUF_PIN);
355
356 qser_sim_enablepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_enablepin");
357 if(NULL != qser_sim_enablepin)
358 {
359 res = qser_sim_enablepin(h_sim, &pt_info);
360 if(res == 0)
361 {
362 printf("pin enabled!!!\n");
363 }else{
364 printf("pin enable error, res =%d\n", res);
365 }
366 }else{
367 printf("qser_sim_enablepin dlsym error\n");
368 }
369 }
370 break;
371 }
372 //qser_disable_pin
373 case 8:
374 {
375 if(flag_init == 0){
376 printf("must init first\n");
377 }
378 else{
379 char pin[BUF_PIN] = {0};
380 QSER_SIM_ENABLE_PIN_INFO_T pt_info;
381 printf("input pin\n");
382 scanf("%s", pin);
383 strncpy(pt_info.pin_value, pin, BUF_PIN);
384
385 qser_sim_disablepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_disablepin");
386 if(NULL != qser_sim_disablepin)
387 {
388 res = qser_sim_disablepin(h_sim, &pt_info);
389 if(res == 0)
390 {
391 printf("pin disnabled!!!\n");
392 }else{
393 printf("pin disable error,res = %d\n", res);
394 }
395 }else{
396 printf("qser_sim_disablepin dlsym error\n");
397 }
398 }
399 break;
400 }
401 //qser_get_sim_status
402 case 9:
403 {
404 if(flag_init == 0){
405 printf("must init first\n");
406 }
407 else{
408 QSER_SIM_CARD_STATUS_INFO_T pt_info;
409
410 qser_sim_getcardstatus = (int(*)(sim_client_handle_type h_sim, QSER_SIM_SLOT_ID_TYPE_T simId, QSER_SIM_CARD_STATUS_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_getcardstatus");
411 if(NULL != qser_sim_getcardstatus)
412 {
413 res = qser_sim_getcardstatus(h_sim, QSER_SIM_SLOT_ID_1, &pt_info);
414 if(res == 0)
415 {
416 printf("state is 0x%x !!!\n",pt_info.e_card_state);
417 }else{
418 printf("get imsi error,res = %d\n", res);
419 }
420 }else{
421 printf("qser_sim_getcardstatus dlsym error\n");
422 }
423 }
424 break;
425 }
426 //qser_deinit_sim
427 case 10:
428 {
429 if(flag_init == 0){
430 printf("must init first\n");
431 }
432 else{
433 char imei[BUF_SIZE]="";
434 qser_sim_getimei = (int(*)(sim_client_handle_type h_sim, char *imei))dlsym(dlHandle_sim,"qser_sim_getimei");
435 if(NULL != qser_sim_getimei)
436 {
437 res = qser_sim_getimei(h_sim, imei);
438 if(res == 0)
439 {
440 printf("get imei success!!!\n");
441 }else{
442 printf("get imei error, res = %d\n", res);
443 }
444 }else{
445 printf("qser_sim_getimei dlsym error\n");
446 }
447 }
448 //flag_init = 0;
449 break;
450 }
451 //qser_get_imei_and_sv
452 case 11:
453 {
454 if(flag_init == 0){
455 printf("must init first\n");
456 }
457 else{
458 char imei[BUF_SIZE]="";
459 char sv[BUF_SIZE]="";
460 qser_get_imei_and_sv = (int(*)(sim_client_handle_type h_sim, char *imei, char *sv))dlsym(dlHandle_sim,"qser_get_imei_and_sv");
461 if(NULL != qser_get_imei_and_sv)
462 {
463 res = qser_get_imei_and_sv(h_sim, imei, sv);
464 if(res == 0)
465 {
466 printf("get imei and sv success!!!\n");
467 }else{
468 printf("get imei and sv error, res = %d\n", res);
469 }
470 }else{
471 printf("qser_get_imei_and_sv dlsym error\n");
472 }
473 }
474 //flag_init = 0;
475 break;
476 }
477 //qser_reset_modem
478 case 12:
479 {
480 if(flag_init == 0){
481 printf("must init first\n");
482 }
483 else{
484 qser_reset_modem = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_modem");
485 if(NULL != qser_reset_modem)
486 {
487 res = qser_reset_modem(h_sim);
488 if(res == 0)
489 {
490 printf("reset modem success!!!\n");
491 }else{
492 printf("reset modem error, res = %d\n", res);
493 }
494 }else{
495 printf("qser_reset_modem dlsym error\n");
496 }
497 }
498 //flag_init = 0;
499 break;
500 }
501 //qser_get_version
502 case 13:
503 {
504 if(flag_init == 0){
505 printf("must init first\n");
506 }
507 else{
508 char buf[VER_SIZE]="";
509 qser_get_version = (int(*)(sim_client_handle_type h_sim, char *buf))dlsym(dlHandle_sim,"qser_get_version");
510 if(NULL != qser_get_version)
511 {
512 res = qser_get_version(h_sim, buf);
513 if(res == 0)
514 {
515 printf("get version success!!!\n");
516 }else{
517 printf("get version error, res = %d\n", res);
518 }
519 }else{
520 printf("qser_get_version dlsym error\n");
521 }
522 }
523 //flag_init = 0;
524 break;
525 }
526 //qser_reset_sim
527 case 14:
528 {
529 if(flag_init == 0){
530 printf("must init first\n");
531 }
532 else{
533 qser_reset_sim = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_sim");
534 if(NULL != qser_reset_sim)
535 {
536 res = qser_reset_sim(h_sim);
537 if(res == 0)
538 {
539 printf("reset sim success!!!\n");
540 }else{
541 printf("reset sim error, res = %d\n", res);
542 }
543 }else{
544 printf("qser_reset_sim dlsym error\n");
545 }
546 }
547 //flag_init = 0;
548 break;
549 }
550 case 15://qser_sim_addrxmsghandler
551 {
552 if(flag_init == 0){
553 printf("must init first\n");
554 }
555 else{
556 qser_sim_addrxmsghandler = (int(*)(QSER_SIM_RxMsgHandlerFunc_t handlerPtr))dlsym(dlHandle_sim,"qser_sim_addrxmsghandler");
557 if(NULL != qser_sim_addrxmsghandler)
558 {
559 res = qser_sim_addrxmsghandler(qser_sim_handler);
560 if(res == 0)
561 {
562 printf("sim addrxmsghandler success is!!!\n");
563 }else{
564 printf("sim addrxmsghandler errors, res = %d\n", res);
565 }
566 }else{
567 printf("qser_sim_addrxmsghandler dlsym error\n");
568 }
569 }
570 //flag_init = 0;
571 break;
572 }
573 //qser_deinit_sim
574 case 16:
575 {
576 if(flag_init == 0){
577 printf("must init first\n");
578 }
579 else{
580 qser_sim_client_deinit = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_sim_client_deinit");
581 if(NULL != qser_sim_client_deinit)
582 {
583 res = qser_sim_client_deinit(h_sim);
584 if(res == 0)
585 {
586 printf("sim deinit success is!!!\n");
587 }else{
588 printf("sim deint errors, res = %d\n", res);
589 }
590 }else{
591 printf("qser_sim_client_deinit dlsym error\n");
592 }
593 }
594 flag_init = 0;
595 break;
596 }
597 default:
598 print_help();
599 break;
600 }
601
602 }
603
604 return 0;
605
606
607}
608
609