| #include <stdlib.h> | |
| #include <stdio.h> | |
| #include <string.h> | |
| #include <sys/types.h> | |
| #include <pthread.h> | |
| #include <unistd.h> | |
| #include <dlfcn.h> | |
| #include <stdint.h> | |
| #include"lynq-qser-sim-demo.h" | |
| #include "mbtk_log.h" | |
| #define BUF_SIZE 32 | |
| #define BUF_PIN 8 | |
| #define VER_SIZE 128 | |
| typedef uint32_t sim_client_handle_type; | |
| //sim_client_handle_type ph_sim = 2023; | |
| sim_client_handle_type h_sim = 2023; | |
| int flag_init = 0; | |
| int (*qser_sim_client_init)(sim_client_handle_type *ph_sim); | |
| int (*qser_sim_client_deinit)(sim_client_handle_type h_sim); | |
| int (*qser_sim_getimsi)( | |
| sim_client_handle_type h_sim, | |
| QSER_SIM_APP_ID_INFO_T *pt_info, ///< [IN] The SIM identifier info. | |
| char *imsi, ///< [OUT] IMSI buffer | |
| size_t imsiLen ///< [IN] IMSI buffer length | |
| ); | |
| int (*qser_sim_geticcid) | |
| ( | |
| sim_client_handle_type h_sim, | |
| QSER_SIM_SLOT_ID_TYPE_T simId, ///< [IN] The SIM identifier. | |
| char *iccid, ///< [OUT] ICCID | |
| size_t iccidLen ///< [IN] ICCID buffer length | |
| ); | |
| int (*qser_sim_getphonenumber) | |
| ( | |
| sim_client_handle_type h_sim, | |
| QSER_SIM_APP_ID_INFO_T *pt_info, ///< [IN] The SIM identifier. | |
| char *phone_num, ///< [OUT] phone number | |
| size_t phoneLen ///< [IN] phone number buffer length | |
| ); | |
| int (*qser_sim_verifypin)(sim_client_handle_type h_sim, QSER_SIM_VERIFY_PIN_INFO_T *pt_info); | |
| int (*qser_sim_changepin)(sim_client_handle_type h_sim, QSER_SIM_CHANGE_PIN_INFO_T *pt_info); | |
| int (*qser_sim_unblockpin)(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info); | |
| int (*qser_sim_enablepin)(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info); | |
| int (*qser_sim_disablepin)(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info); | |
| int (*qser_sim_getcardstatus)(sim_client_handle_type h_sim, QSER_SIM_SLOT_ID_TYPE_T simId, QSER_SIM_CARD_STATUS_INFO_T *pt_info); | |
| int (*qser_sim_getimei)(sim_client_handle_type h_sim, char *imei); | |
| int (*qser_get_imei_and_sv)(sim_client_handle_type h_sim,char *imei, char*sv); | |
| int (*qser_reset_modem)(sim_client_handle_type h_sim); | |
| int (*qser_get_version)(sim_client_handle_type h_sim, char *buf); | |
| int (*qser_reset_sim)(sim_client_handle_type h_sim); | |
| int (*qser_sim_addrxmsghandler)(QSER_SIM_RxMsgHandlerFunc_t handlerPtr); | |
| typedef struct | |
| { | |
| int cmdIdx; | |
| const char *funcName; | |
| } st_api_test_case; | |
| //for server test | |
| st_api_test_case at_api_testcases[] = | |
| { | |
| {0, "qser_sim_init"}, | |
| {1, "qser_get_imsi"}, | |
| {2, "qser_get_iccid"}, | |
| {3, "qser_get_phonenumber"}, | |
| {4, "qser_verify_pin"}, | |
| {5, "qser_change_pin"}, | |
| {6, "qser_unlock_pin"}, | |
| {7, "qser_enable_pin"}, | |
| {8, "qser_disable_pin"}, | |
| {9, "qser_get_sim_status"}, | |
| {10, "qser_get_imei"}, | |
| {11, "qser_get_imei_and_sv"}, | |
| {12, "qser_reset_modem"}, | |
| {13, "qser_get_version"}, | |
| {14, "qser_reset_sim"}, | |
| {15, "qser_sim_addrxmsghandler"}, | |
| {16, "qser_deinit_sim"}, | |
| {-1, NULL} | |
| }; | |
| void print_help(void) | |
| { | |
| int i; | |
| printf("Supported test cases:\n"); | |
| for(i = 0; ; i++) | |
| { | |
| if(at_api_testcases[i].cmdIdx == -1) | |
| { | |
| break; | |
| } | |
| printf("%d:\t%s\n", at_api_testcases[i].cmdIdx, at_api_testcases[i].funcName); | |
| } | |
| } | |
| void qser_sim_handler(QSER_SIM_MsgRef msgRef) { | |
| printf("[%s-%d] sim, state = 0x%x========\n", __FUNCTION__, __LINE__, msgRef->e_card_state); | |
| } | |
| int main(int argc, char const *argv[]) | |
| { | |
| int cmdIdx = 0; | |
| int res = 0; | |
| mbtk_log_init((char*)"radio", (char*)"MBTK"); | |
| const char *lynq_libpath_sim = (char*)"/lib/liblynq-qser-sim.so"; | |
| void *dlHandle_sim = dlopen(lynq_libpath_sim, RTLD_NOW); | |
| if (dlHandle_sim == NULL) | |
| { | |
| printf("dlopen dlHandle_sim failed: %s\n", dlerror()); | |
| exit(EXIT_FAILURE); | |
| } | |
| print_help(); | |
| while(1) | |
| { | |
| printf("\nplease input cmd index(-1 exit): "); | |
| if(1 != scanf("%d", &cmdIdx)) | |
| break; | |
| if(cmdIdx == -1) | |
| { | |
| break; | |
| } | |
| switch(cmdIdx) | |
| { | |
| //"qser_sim_init" | |
| case 0: | |
| { | |
| if(flag_init == 1) | |
| { | |
| printf("init is already\n"); | |
| break; | |
| } | |
| else{ | |
| //int token; | |
| //printf("input token\n"); | |
| //scanf("%d", &token); | |
| qser_sim_client_init = (int(*)(sim_client_handle_type *h_sim))dlsym(dlHandle_sim,"qser_sim_client_init"); | |
| if(NULL != qser_sim_client_init) | |
| { | |
| res = qser_sim_client_init(&h_sim); | |
| if(res == 0) | |
| { | |
| printf("Run qser_sim_client_init\n"); | |
| flag_init = 1; | |
| }else{ | |
| printf("qser_sim_client_init error\n"); | |
| } | |
| }else{ | |
| printf("qser_sim_client_init dlsym error\n"); | |
| } | |
| break; | |
| } | |
| } | |
| //"qser_sim_getimsi" | |
| case 1: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char imsi[BUF_SIZE] = {0}; | |
| QSER_SIM_APP_ID_INFO_T pt_info; | |
| 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"); | |
| if(NULL != qser_sim_getimsi) | |
| { | |
| res = qser_sim_getimsi(h_sim, &pt_info, imsi, BUF_SIZE); | |
| if(res == 0) | |
| { | |
| printf("imsi is %s!!!\n",imsi); | |
| }else{ | |
| printf("get imsi error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_getimsi dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //"qser_get_iccid" | |
| case 2: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char iccid[BUF_SIZE] = {0}; | |
| 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"); | |
| if(NULL != qser_sim_geticcid) | |
| { | |
| res = qser_sim_geticcid(h_sim, QSER_SIM_SLOT_ID_1, iccid, BUF_SIZE); | |
| if(res == 0) | |
| { | |
| printf("get iccid success!!! iccid is %s\n",iccid); | |
| }else{ | |
| printf("get iccid error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_geticcid dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_get_phonenumber | |
| case 3: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char phonenumber[BUF_SIZE] = ""; | |
| QSER_SIM_APP_ID_INFO_T pt_info; | |
| 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"); | |
| if(NULL != qser_sim_getphonenumber) | |
| { | |
| res = qser_sim_getphonenumber(h_sim, &pt_info, phonenumber, BUF_SIZE); | |
| if(res == 0) | |
| { | |
| printf("get phonenumber success!!! phonenumber is %s\n",phonenumber); | |
| }else{ | |
| printf("get phonenumber error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_getphonenumber dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_verify_pin | |
| case 4: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char pin[BUF_PIN] = {0}; | |
| QSER_SIM_VERIFY_PIN_INFO_T pt_info; | |
| printf("input pin\n"); | |
| if(1 != scanf("%s", pin)) | |
| break; | |
| strncpy(pt_info.pin_value, pin, BUF_PIN); | |
| printf("pin_value = %s , pin = %s\n", pt_info.pin_value, pin); | |
| qser_sim_verifypin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_VERIFY_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_verifypin"); | |
| if(NULL != qser_sim_verifypin) | |
| { | |
| res = qser_sim_verifypin(h_sim, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("verify pin success!!!\n"); | |
| }else{ | |
| printf("verify pin error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_verifypin dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_change_pin | |
| case 5: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char old_pin[BUF_PIN] = {0}; | |
| QSER_SIM_CHANGE_PIN_INFO_T pt_info; | |
| printf("input old pin\n"); | |
| if(1 != scanf("%s", old_pin)) | |
| break; | |
| char new_pin[BUF_PIN] = {0}; | |
| printf("input new pin\n"); | |
| if(1 != scanf("%s", new_pin)) | |
| break; | |
| strncpy(pt_info.old_pin_value, old_pin, BUF_PIN); | |
| strncpy(pt_info.new_pin_value, new_pin, BUF_PIN); | |
| printf("pt_info.old_pin_value = %s, old_pin = %s\n", pt_info.old_pin_value, old_pin); | |
| printf("pt_info.new_pin_value = %s, new_pin = %s\n", pt_info.new_pin_value, new_pin); | |
| qser_sim_changepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_CHANGE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_changepin"); | |
| if(NULL != qser_sim_changepin) | |
| { | |
| res = qser_sim_changepin(h_sim, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("change pin success!!!\n"); | |
| }else{ | |
| printf("change pin error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("lynq_change_pin dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_unlock_pin | |
| case 6: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char puk[BUF_PIN] = {0}; | |
| QSER_SIM_UNBLOCK_PIN_INFO_T pt_info; | |
| printf("input puk\n"); | |
| if(1 != scanf("%s", puk)) | |
| break; | |
| char new_pin[BUF_PIN] = {0}; | |
| printf("input new pin\n"); | |
| if(1 != scanf("%s", new_pin)) | |
| break; | |
| memset(pt_info.puk_value, 0, sizeof(pt_info.puk_value)); | |
| memset(pt_info.new_pin_value, 0, sizeof(pt_info.new_pin_value)); | |
| strncpy(pt_info.puk_value, puk, BUF_PIN); | |
| strncpy(pt_info.new_pin_value, new_pin, BUF_PIN); | |
| printf("pt_info.puk_value = %s, puk = %s\n", pt_info.puk_value, puk); | |
| printf("pt_info.new_pin_value = %s, new_pin = %s\n", pt_info.new_pin_value, new_pin); | |
| qser_sim_unblockpin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_unblockpin"); | |
| if(NULL != qser_sim_unblockpin) | |
| { | |
| res = qser_sim_unblockpin(h_sim, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("unlock pin success!!!\n"); | |
| }else{ | |
| printf("unlock pin error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_unblockpin dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_enable_pin | |
| case 7: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char pin[BUF_PIN] = {0}; | |
| QSER_SIM_ENABLE_PIN_INFO_T pt_info; | |
| printf("input pin\n"); | |
| if(1 != scanf("%s", pin)) | |
| break; | |
| strncpy(pt_info.pin_value, pin, BUF_PIN); | |
| qser_sim_enablepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_enablepin"); | |
| if(NULL != qser_sim_enablepin) | |
| { | |
| res = qser_sim_enablepin(h_sim, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("pin enabled!!!\n"); | |
| }else{ | |
| printf("pin enable error, res =%d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_enablepin dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_disable_pin | |
| case 8: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char pin[BUF_PIN] = {0}; | |
| QSER_SIM_ENABLE_PIN_INFO_T pt_info; | |
| printf("input pin\n"); | |
| if(1 != scanf("%s", pin)) | |
| break; | |
| strncpy(pt_info.pin_value, pin, BUF_PIN); | |
| qser_sim_disablepin = (int(*)(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info))dlsym(dlHandle_sim,"qser_sim_disablepin"); | |
| if(NULL != qser_sim_disablepin) | |
| { | |
| res = qser_sim_disablepin(h_sim, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("pin disnabled!!!\n"); | |
| }else{ | |
| printf("pin disable error,res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_disablepin dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_get_sim_status | |
| case 9: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| QSER_SIM_CARD_STATUS_INFO_T pt_info; | |
| 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"); | |
| if(NULL != qser_sim_getcardstatus) | |
| { | |
| res = qser_sim_getcardstatus(h_sim, QSER_SIM_SLOT_ID_1, &pt_info); | |
| if(res == 0) | |
| { | |
| printf("state is 0x%x !!!\n",pt_info.e_card_state); | |
| }else{ | |
| printf("get imsi error,res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_getcardstatus dlsym error\n"); | |
| } | |
| } | |
| break; | |
| } | |
| //qser_deinit_sim | |
| case 10: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char imei[BUF_SIZE]=""; | |
| qser_sim_getimei = (int(*)(sim_client_handle_type h_sim, char *imei))dlsym(dlHandle_sim,"qser_sim_getimei"); | |
| if(NULL != qser_sim_getimei) | |
| { | |
| res = qser_sim_getimei(h_sim, imei); | |
| if(res == 0) | |
| { | |
| printf("get imei success!!!\n"); | |
| }else{ | |
| printf("get imei error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_getimei dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| //qser_get_imei_and_sv | |
| case 11: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char imei[BUF_SIZE]=""; | |
| char sv[BUF_SIZE]=""; | |
| qser_get_imei_and_sv = (int(*)(sim_client_handle_type h_sim, char *imei, char *sv))dlsym(dlHandle_sim,"qser_get_imei_and_sv"); | |
| if(NULL != qser_get_imei_and_sv) | |
| { | |
| res = qser_get_imei_and_sv(h_sim, imei, sv); | |
| if(res == 0) | |
| { | |
| printf("get imei and sv success!!!\n"); | |
| }else{ | |
| printf("get imei and sv error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_get_imei_and_sv dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| //qser_reset_modem | |
| case 12: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| qser_reset_modem = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_modem"); | |
| if(NULL != qser_reset_modem) | |
| { | |
| res = qser_reset_modem(h_sim); | |
| if(res == 0) | |
| { | |
| printf("reset modem success!!!\n"); | |
| }else{ | |
| printf("reset modem error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_reset_modem dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| //qser_get_version | |
| case 13: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| char buf[VER_SIZE]=""; | |
| qser_get_version = (int(*)(sim_client_handle_type h_sim, char *buf))dlsym(dlHandle_sim,"qser_get_version"); | |
| if(NULL != qser_get_version) | |
| { | |
| res = qser_get_version(h_sim, buf); | |
| if(res == 0) | |
| { | |
| printf("get version success!!!\n"); | |
| }else{ | |
| printf("get version error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_get_version dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| //qser_reset_sim | |
| case 14: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| qser_reset_sim = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_reset_sim"); | |
| if(NULL != qser_reset_sim) | |
| { | |
| res = qser_reset_sim(h_sim); | |
| if(res == 0) | |
| { | |
| printf("reset sim success!!!\n"); | |
| }else{ | |
| printf("reset sim error, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_reset_sim dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| case 15://qser_sim_addrxmsghandler | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| qser_sim_addrxmsghandler = (int(*)(QSER_SIM_RxMsgHandlerFunc_t handlerPtr))dlsym(dlHandle_sim,"qser_sim_addrxmsghandler"); | |
| if(NULL != qser_sim_addrxmsghandler) | |
| { | |
| res = qser_sim_addrxmsghandler(qser_sim_handler); | |
| if(res == 0) | |
| { | |
| printf("sim addrxmsghandler success is!!!\n"); | |
| }else{ | |
| printf("sim addrxmsghandler errors, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_addrxmsghandler dlsym error\n"); | |
| } | |
| } | |
| //flag_init = 0; | |
| break; | |
| } | |
| //qser_deinit_sim | |
| case 16: | |
| { | |
| if(flag_init == 0){ | |
| printf("must init first\n"); | |
| } | |
| else{ | |
| qser_sim_client_deinit = (int(*)(sim_client_handle_type h_sim))dlsym(dlHandle_sim,"qser_sim_client_deinit"); | |
| if(NULL != qser_sim_client_deinit) | |
| { | |
| res = qser_sim_client_deinit(h_sim); | |
| if(res == 0) | |
| { | |
| printf("sim deinit success is!!!\n"); | |
| }else{ | |
| printf("sim deint errors, res = %d\n", res); | |
| } | |
| }else{ | |
| printf("qser_sim_client_deinit dlsym error\n"); | |
| } | |
| } | |
| flag_init = 0; | |
| break; | |
| } | |
| default: | |
| print_help(); | |
| break; | |
| } | |
| } | |
| return 0; | |
| } | |