blob: 7c3a3a5ffc303b4b466bebb51f8226264f28d9a7 [file] [log] [blame]
b.liu4e243dc2023-11-27 11:20:00 +08001#include "lynq_qser_sim.h"
2#include "mbtk_type.h"
wangyouqiang3e3bf922024-01-05 15:38:34 +08003#include "mbtk_info_api.h"
b.liu5fa9e772023-11-23 18:00:55 +08004
wangyouqiang3e3bf922024-01-05 15:38:34 +08005/****************************DEFINE***************************************/
6#define QSER_RESULT_SUCCESS 0
7#define QSER_RESULT_FAIL -1
8/****************************DEFINE***************************************/
9
10/****************************VARIABLE***************************************/
11extern mbtk_info_handle_t* qser_info_handle;
12extern int qser_info_handle_num;
13static bool inited = FALSE;
14static uint qser_h_sim = 0x5F6F7F8F;
wangyouqiang45cfff82024-04-15 19:35:15 +080015static QSER_SIM_RxMsgHandlerFunc_t qser_sim_state_cb = NULL;
16static bool qser_sim_cb_state = false;
wangyouqiang3e3bf922024-01-05 15:38:34 +080017/****************************VARIABLE***************************************/
18
19/******************************FUNC*****************************************/
wangyouqiang45cfff82024-04-15 19:35:15 +080020void qser_sim_state_change_cb(const void* data, int data_len)
21{
22 uint8 *ptr = (uint8*)data;
wangyouqiangc42b85d2024-04-24 17:05:06 +080023 LOGE("[qser_sim] SIM state : %d\n", *ptr);
wangyouqiang45cfff82024-04-15 19:35:15 +080024 QSER_SIM_CARD_STATUS_INFO_T qser_sim_statue = {0};
25 if(*ptr == 0)
26 {
27 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_ABSENT;
28 }
29 else if(*ptr == 1)
30 {
31 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_PRESENT;
32 }
33 else if(*ptr == 18)
34 {
35 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_ABSENT;
36 }
37 else
38 {
39 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
40 }
41 if(qser_sim_state_cb != NULL)
42 {
43 qser_sim_state_cb(&qser_sim_statue);
44 }
45}
46
wangyouqiang3e3bf922024-01-05 15:38:34 +080047/******************************FUNC*****************************************/
48
49/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +080050int qser_sim_client_init(sim_client_handle_type *ph_sim)
51{
wangyouqiang3e3bf922024-01-05 15:38:34 +080052 //UNUSED(ph_sim);
53 if(ph_sim == NULL)
54 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080055 LOGE("[qser_sim] ph_sim is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080056 return QSER_RESULT_FAIL;
57 }
b.liu5fa9e772023-11-23 18:00:55 +080058
wangyouqiang3e3bf922024-01-05 15:38:34 +080059 if(!inited && qser_info_handle == NULL)
60 {
61 qser_info_handle = mbtk_info_handle_get();
62 if(qser_info_handle)
63 {
64 qser_info_handle_num++;
65 inited = TRUE;
66 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
67 }
68 else
69 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080070 LOGE("[qser_sim] mbtk_info_handle_get() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080071 return QSER_RESULT_FAIL;
72 }
73 }
74 else
75 {
76 if(!inited)
77 {
78 qser_info_handle_num++;
79 inited = TRUE;
80 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
81 }
82 }
83 *ph_sim = qser_h_sim;
84
wangyouqiangc42b85d2024-04-24 17:05:06 +080085 LOGE("[qser_sim] mbtk_info_handle_get() success.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080086 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +080087}
88
89int qser_sim_getimsi(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info,char *imsi,size_t imsiLen)
90{
wangyouqiang3e3bf922024-01-05 15:38:34 +080091 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +080092 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +080093 //UNUSED(imsi);
94 //UNUSED(imsiLen);
b.liu5fa9e772023-11-23 18:00:55 +080095
wangyouqiang3e3bf922024-01-05 15:38:34 +080096 if(h_sim != qser_h_sim)
97 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080098 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080099 return QSER_RESULT_FAIL;
100 }
101
102 if(qser_info_handle == NULL)
103 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800104 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800105 return QSER_RESULT_FAIL;
106 }
107
108 if(imsi == NULL || imsiLen < 15)
109 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800110 LOGE("[qser_sim] imsi is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800111 return QSER_RESULT_FAIL;
112 }
113
114 memset(imsi,0,imsiLen);
115 int err = mbtk_imsi_get(qser_info_handle, imsi);
116 if(err)
117 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800118 LOGE("[qser_sim] mbtk_imsi_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800119 return QSER_RESULT_FAIL;
120 }
121
122 if(strlen(imsi) > imsiLen)
123 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800124 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800125 return QSER_RESULT_FAIL;
126 }
127
128 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800129}
130
131int qser_sim_geticcid(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,char *iccid, size_t iccidLen)
132{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800133 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800134 UNUSED(simId);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800135 //UNUSED(iccid);
136 //UNUSED(iccidLen);
b.liu5fa9e772023-11-23 18:00:55 +0800137
wangyouqiang3e3bf922024-01-05 15:38:34 +0800138 if(h_sim != qser_h_sim)
139 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800140 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800141 return QSER_RESULT_FAIL;
142 }
143
144 if(qser_info_handle == NULL)
145 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800146 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800147 return QSER_RESULT_FAIL;
148 }
149
r.xiao2ad43d12024-03-23 00:03:29 -0700150 if(iccid == NULL || iccidLen < QSER_SIM_ICCID_LEN_MAX)
wangyouqiang3e3bf922024-01-05 15:38:34 +0800151 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800152 LOGE("[qser_sim] iccid is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800153 return QSER_RESULT_FAIL;
154 }
155
156 memset(iccid, 0, iccidLen);
157 int err = mbtk_iccid_get(qser_info_handle, iccid);
158 if(err)
159 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800160 LOGE("[qser_sim] mbtk_iccid_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800161 return QSER_RESULT_FAIL;
162 }
163
164 if(strlen(iccid) > iccidLen)
165 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800166 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800167 return QSER_RESULT_FAIL;
168 }
169
170 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800171}
172
173int qser_sim_getphonenumber(sim_client_handle_type h_sim,QSER_SIM_APP_ID_INFO_T *pt_info, char*phone_num, size_t phoneLen)
174{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800175 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800176 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800177 //UNUSED(phone_num);
178 //UNUSED(phoneLen);
b.liu5fa9e772023-11-23 18:00:55 +0800179
wangyouqiang3e3bf922024-01-05 15:38:34 +0800180 if(h_sim != qser_h_sim)
181 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800182 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800183 return QSER_RESULT_FAIL;
184 }
185
186 if(qser_info_handle == NULL)
187 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800188 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800189 return QSER_RESULT_FAIL;
190 }
191
192 if(phone_num == NULL || phoneLen < 11)
193 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800194 LOGE("[qser_sim] phone_num is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800195 return QSER_RESULT_FAIL;
196 }
197
198 memset(phone_num, 0, phoneLen);
199 int err = mbtk_phone_number_get(qser_info_handle, phone_num);
200 if(err)
201 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800202 LOGE("[qser_sim] mbtk_phone_number_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800203 return QSER_RESULT_FAIL;
204 }
205
206 if(strlen(phone_num) > phoneLen)
207 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800208 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800209 return QSER_RESULT_FAIL;
210 }
211
212 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800213}
214
215int qser_sim_verifypin(sim_client_handle_type h_sim,QSER_SIM_VERIFY_PIN_INFO_T *pt_info)
216{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800217 //UNUSED(h_sim);
218 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800219
wangyouqiang3e3bf922024-01-05 15:38:34 +0800220 if(h_sim != qser_h_sim)
221 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800222 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800223 return QSER_RESULT_FAIL;
224 }
225
226 if(qser_info_handle == NULL)
227 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800228 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800229 return QSER_RESULT_FAIL;
230 }
231
232 if(pt_info == NULL)
233 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800234 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800235 return QSER_RESULT_FAIL;
236 }
237
238 int err = mbtk_verify_pin(qser_info_handle, pt_info->pin_value);
239 if(err)
240 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800241 LOGE("[qser_sim] mbtk_verify_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800242 return QSER_RESULT_FAIL;
243 }
244
245 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800246}
247
248int qser_sim_changepin(sim_client_handle_type h_sim,QSER_SIM_CHANGE_PIN_INFO_T *pt_info)
249{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800250 //UNUSED(h_sim);
251 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800252
wangyouqiang3e3bf922024-01-05 15:38:34 +0800253 if(h_sim != qser_h_sim)
254 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800255 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800256 return QSER_RESULT_FAIL;
257 }
258
259 if(qser_info_handle == NULL)
260 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800261 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800262 return QSER_RESULT_FAIL;
263 }
264
265 if(pt_info == NULL)
266 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800267 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800268 return QSER_RESULT_FAIL;
269 }
270
271 mbtk_change_pin_info pin_info = {0};
272 memcpy(pin_info.old_pin_value, pt_info->old_pin_value, pt_info->old_pin_value_len);
273 memcpy(pin_info.new_pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
274 int err = mbtk_change_pin(qser_info_handle, &pin_info);
275 if(err)
276 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800277 LOGE("[qser_sim] mbtk_change_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800278 return QSER_RESULT_FAIL;
279 }
280
281 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800282}
283
284int qser_sim_unblockpin(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info)
285{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800286 //UNUSED(h_sim);
287 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800288
wangyouqiang3e3bf922024-01-05 15:38:34 +0800289 if(h_sim != qser_h_sim)
290 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800291 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800292 return QSER_RESULT_FAIL;
293 }
294
295 if(qser_info_handle == NULL)
296 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800297 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800298 return QSER_RESULT_FAIL;
299 }
300
301 if(pt_info == NULL)
302 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800303 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800304 return QSER_RESULT_FAIL;
305 }
306
307 mbtk_unlock_pin_info puk_pin_info = {0};
308 memcpy(puk_pin_info.pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
309 memcpy(puk_pin_info.puk_value, pt_info->puk_value, pt_info->puk_value_len);
310 int err = mbtk_unlock_pin(qser_info_handle, &puk_pin_info);
311 if(err)
312 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800313 LOGE("[qser_sim] mbtk_unlock_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800314 return QSER_RESULT_FAIL;
315 }
316
317 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800318}
319
320int qser_sim_enablepin(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info)
321{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800322 //UNUSED(h_sim);
323 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800324
wangyouqiang3e3bf922024-01-05 15:38:34 +0800325 if(h_sim != qser_h_sim)
326 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800327 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800328 return QSER_RESULT_FAIL;
329 }
330
331 if(qser_info_handle == NULL)
332 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800333 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800334 return QSER_RESULT_FAIL;
335 }
336
337 if(pt_info == NULL)
338 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800339 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800340 return QSER_RESULT_FAIL;
341 }
342
343 mbtk_enable_pin_info pin_info = {0};
344 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
345 pin_info.enable = 1;
346 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
347 if(err)
348 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800349 LOGE("[qser_sim] mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800350 return QSER_RESULT_FAIL;
351 }
352
353 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800354}
355
356int qser_sim_disablepin(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info)
357{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800358 //UNUSED(h_sim);
359 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800360
wangyouqiang3e3bf922024-01-05 15:38:34 +0800361 if(h_sim != qser_h_sim)
362 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800363 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800364 return QSER_RESULT_FAIL;
365 }
366
367 if(qser_info_handle == NULL)
368 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800369 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800370 return QSER_RESULT_FAIL;
371 }
372
373 if(pt_info == NULL)
374 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800375 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800376 return QSER_RESULT_FAIL;
377 }
378
379 mbtk_enable_pin_info pin_info = {0};
380 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
381 pin_info.enable = 0;
382 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
383 if(err)
384 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800385 LOGE("[qser_sim] mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800386 return QSER_RESULT_FAIL;
387 }
388
389 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800390}
391
392int qser_sim_getcardstatus(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,QSER_SIM_CARD_STATUS_INFO_T *pt_info)
393{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800394 //UNUSED(h_sim);
395 //UNUSED(simId);
396 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800397
wangyouqiang3e3bf922024-01-05 15:38:34 +0800398 if(h_sim != qser_h_sim)
399 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800400 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800401 return QSER_RESULT_FAIL;
402 }
403
404 if(qser_info_handle == NULL)
405 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800406 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800407 return QSER_RESULT_FAIL;
408 }
409
410 if(pt_info == NULL)
411 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800412 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800413 return QSER_RESULT_FAIL;
414 }
415
416 mbtk_sim_state_enum sim;
417 mbtk_sim_card_type_enum sim_card_type;
418 mbtk_pin_puk_last_times qser_last_times = {0};
419 int err = mbtk_sim_state_get(qser_info_handle, &sim);
420 if(err)
421 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800422 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800423 return QSER_RESULT_FAIL;
424 }
425 else
426 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800427 LOGE("[qser_sim] sim = %d.", sim);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800428 memset(pt_info, 0x0, sizeof(QSER_SIM_CARD_STATUS_INFO_T));
429 switch (sim)
430 {
431 case 0: //ABSENT
432 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
433 break;
434 case 1: //NOT READY
r.xiao2ad43d12024-03-23 00:03:29 -0700435 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800436 break;
437 case 2: //READY
438 pt_info->e_card_state = QSER_SIM_CARD_STATE_PRESENT;
439 break;
440 case 3: //SIM PIN
441 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
442 break;
443 case 4: //SIM PUK
444 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
445 break;
446 case 5: //NETWORK
447 pt_info->e_card_state = QSER_SIM_CARD_STATE_ERROR_SIM_TECHNICAL_PROBLEMS;
448 break;
449 default:
450 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
451 break;
452 }
453 }
454
455 err = mbtk_sim_card_type_get(qser_info_handle, &sim_card_type);
456 if(err)
457 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800458 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800459 return QSER_RESULT_FAIL;
460 }
461 else
462 {
463 if(sim_card_type == 0 || sim_card_type == 2)
464 pt_info->e_card_type = QSER_SIM_CARD_TYPE_ICC;
465 else if(sim_card_type == 1 || sim_card_type == 3)
466 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UICC;
467 else
468 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UNKNOWN;
469 }
470
471 err = mbtk_pin_last_num_get(qser_info_handle, &qser_last_times);
472 if(err)
473 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800474 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800475 return QSER_RESULT_FAIL;
476 }
477 else
478 {
479 pt_info->card_app_info.app_3gpp.pin1_num_retries = qser_last_times.p1_retry;
480 pt_info->card_app_info.app_3gpp.pin2_num_retries = qser_last_times.p2_retry;
481 pt_info->card_app_info.app_3gpp.puk1_num_retries = qser_last_times.puk1_retry;
482 pt_info->card_app_info.app_3gpp.puk2_num_retries = qser_last_times.puk2_retry;
483 }
484
485 return QSER_RESULT_SUCCESS;
486}
487
488int qser_sim_getimei(sim_client_handle_type h_sim, char *imei)
489{
490 //UNUSED(h_sim);
491 //UNUSED(imei);
492
493 if(h_sim != qser_h_sim)
494 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800495 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800496 return QSER_RESULT_FAIL;
497 }
498
499 if(qser_info_handle == NULL)
500 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800501 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800502 return QSER_RESULT_FAIL;
503 }
504
505 if(imei == NULL)
506 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800507 LOGE("[qser_sim] imei is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800508 return QSER_RESULT_FAIL;
509 }
510
511 int err = mbtk_imei_get(qser_info_handle, imei);
512 if(err)
513 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800514 LOGE("[qser_sim] mbtk_imei_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800515 return QSER_RESULT_FAIL;
516 }
517 return QSER_RESULT_SUCCESS;
518}
519
520int qser_get_imei_and_sv(sim_client_handle_type h_sim,char *imei, char*sv)
521{
522 //UNUSED(h_sim);
523 //UNUSED(imei);
524 //UNUSED(sv);
525 if(h_sim != qser_h_sim)
526 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800527 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800528 return QSER_RESULT_FAIL;
529 }
530
531 if(qser_info_handle == NULL)
532 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800533 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800534 return QSER_RESULT_FAIL;
535 }
536
537 if(imei == NULL || sv == NULL)
538 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800539 LOGE("[qser_sim] param is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800540 return QSER_RESULT_FAIL;
541 }
542
543 int length = 0;
544 int err = mbtk_imei_get(qser_info_handle, imei);
545 if(err)
546 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800547 LOGE("[qser_sim] mbtk_imei_get Error: %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800548 return QSER_RESULT_FAIL;
549 }
550
551 length = strlen(imei);
552 memcpy(sv, imei, length);
553 memcpy(sv + length - 1, "01", 2);
554 return QSER_RESULT_SUCCESS;
555}
556
557int qser_reset_modem(sim_client_handle_type h_sim)
558{
559 //UNUSED(h_sim);
560
561 if(h_sim != qser_h_sim)
562 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800563 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800564 return QSER_RESULT_FAIL;
565 }
566
567 if(qser_info_handle == NULL)
568 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800569 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800570 return QSER_RESULT_FAIL;
571 }
572
wangyouqiangc80c92a2024-04-12 17:58:37 +0800573 //mbtk_system_reboot(0);
574 mbtk_modem_info_t info;
575 info.fun = MBTK_DEV_MODEM_MIN_FUN;
576 info.rst = 0;
577 int err = mbtk_set_modem_fun(qser_info_handle, &info);
578 if(err)
579 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800580 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800581 return QSER_RESULT_FAIL;
582 }
583
584 info.fun = MBTK_DEV_MODEM_FULL_FUN;
585 err = mbtk_set_modem_fun(qser_info_handle, &info);
586 if(err)
587 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800588 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800589 return QSER_RESULT_FAIL;
590 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800591 return QSER_RESULT_SUCCESS;
592}
593
594int qser_get_version(sim_client_handle_type h_sim, char *buf)
595{
596 //UNUSED(h_sim);
597 //UNUSED(buf);
598
599 if(h_sim != qser_h_sim)
600 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800601 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800602 return QSER_RESULT_FAIL;
603 }
604
605 if(qser_info_handle == NULL)
606 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800607 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800608 return QSER_RESULT_FAIL;
609 }
610
611 if(buf == NULL)
612 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800613 LOGE("[qser_sim] buf is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800614 return QSER_RESULT_FAIL;
615 }
616
617 int err = mbtk_version_get(qser_info_handle, buf);
618 if(err)
619 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800620 LOGE("[qser_sim] mbtk_version_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800621 return QSER_RESULT_FAIL;
622 }
623 return QSER_RESULT_SUCCESS;
624}
625
626int qser_reset_sim(sim_client_handle_type h_sim)
627{
628 //UNUSED(h_sim);
629
630 if(h_sim != qser_h_sim)
631 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800632 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800633 return QSER_RESULT_FAIL;
634 }
635
636 if(qser_info_handle == NULL)
637 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800638 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800639 return QSER_RESULT_FAIL;
640 }
641
642 //mbtk_sim_power_set(0);
643 //sleep(1);
644 //mbtk_sim_power_set(1);
wangyouqiang924284e2024-02-19 17:40:16 +0800645 mbtk_modem_info_t info;
646 info.fun = MBTK_DEV_MODEM_DISABLE_SIM;
647 info.rst = 0;
648 int err = mbtk_set_modem_fun(qser_info_handle, &info);
649 if(err)
650 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800651 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800652 return QSER_RESULT_FAIL;
653 }
654
655 info.fun = MBTK_DEV_MODEM_FULL_FUN;
656 err = mbtk_set_modem_fun(qser_info_handle, &info);
657 if(err)
658 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800659 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800660 return QSER_RESULT_FAIL;
661 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800662 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800663}
664
wangyouqiang45cfff82024-04-15 19:35:15 +0800665int qser_sim_addrxmsghandler(QSER_SIM_RxMsgHandlerFunc_t handlerPtr)
666{
667 if(qser_info_handle == NULL)
668 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800669 LOGE("[qser_sim] handle is NULL.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800670 return QSER_RESULT_FAIL;
671 }
672
673 if(handlerPtr == NULL)
674 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800675 LOGE("[qser_sim] param is NULL.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800676 qser_sim_state_cb = NULL;
677 return QSER_RESULT_SUCCESS;
678 }
679
680 qser_sim_state_cb = handlerPtr;
681 if(!qser_sim_cb_state)
682 {
683 int ret = mbtk_sim_state_change_cb_reg(qser_info_handle, qser_sim_state_change_cb);
684 if(ret != 0)
685 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800686 LOGE("[qser_sim] set cb fail.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800687 qser_sim_state_cb = NULL;
688 return QSER_RESULT_FAIL;
689 }
690 }
691
692 return QSER_RESULT_SUCCESS;
693}
694
695
b.liu5fa9e772023-11-23 18:00:55 +0800696int qser_sim_client_deinit(sim_client_handle_type h_sim)
697{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800698 //UNUSED(h_sim);
699 if(h_sim != qser_h_sim)
700 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800701 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800702 return QSER_RESULT_FAIL;
703 }
704
705 if(qser_info_handle)
706 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800707 LOGE("[qser_sim] qser_info_handle_num = %d", qser_info_handle_num);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800708 if(qser_info_handle_num == 1)
709 { // 最后一个引用,可释放。
710 int ret = mbtk_info_handle_free(&qser_info_handle);
711 if(ret)
712 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800713 LOGE("[qser_sim] mbtk_info_handle_free() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800714 return QSER_RESULT_FAIL;
715 }
716 else
717 {
718 qser_info_handle_num = 0;
719 qser_info_handle = NULL;
wangyouqiang45cfff82024-04-15 19:35:15 +0800720 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800721 inited = FALSE;
722 }
723 }
724 else
725 {
726 qser_info_handle_num--;
wangyouqiang45cfff82024-04-15 19:35:15 +0800727 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800728 }
729 }
730 else
731 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800732 LOGE("[qser_sim] handle not inited.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800733 return QSER_RESULT_FAIL;
734 }
b.liu5fa9e772023-11-23 18:00:55 +0800735
wangyouqiang3e3bf922024-01-05 15:38:34 +0800736 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800737}
wangyouqiang3e3bf922024-01-05 15:38:34 +0800738/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800739