blob: 7a454796621ddf9475f5a8bc9dfacb73b1dcc42a [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;
23 LOGE("SIM state : %d\n", *ptr);
24 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);
wangyouqiang45cfff82024-04-15 19:35:15 +080053 mbtk_log_init("radio", "QSER_SIM");
wangyouqiang3e3bf922024-01-05 15:38:34 +080054 if(ph_sim == NULL)
55 {
wangyouqiang45cfff82024-04-15 19:35:15 +080056 LOGE("ph_sim is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080057 return QSER_RESULT_FAIL;
58 }
b.liu5fa9e772023-11-23 18:00:55 +080059
wangyouqiang3e3bf922024-01-05 15:38:34 +080060 if(!inited && qser_info_handle == NULL)
61 {
62 qser_info_handle = mbtk_info_handle_get();
63 if(qser_info_handle)
64 {
65 qser_info_handle_num++;
66 inited = TRUE;
67 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
68 }
69 else
70 {
wangyouqiang45cfff82024-04-15 19:35:15 +080071 LOGE("mbtk_info_handle_get() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080072 return QSER_RESULT_FAIL;
73 }
74 }
75 else
76 {
77 if(!inited)
78 {
79 qser_info_handle_num++;
80 inited = TRUE;
81 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
82 }
83 }
84 *ph_sim = qser_h_sim;
85
wangyouqiang45cfff82024-04-15 19:35:15 +080086 LOGE("mbtk_info_handle_get() success.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080087 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +080088}
89
90int qser_sim_getimsi(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info,char *imsi,size_t imsiLen)
91{
wangyouqiang3e3bf922024-01-05 15:38:34 +080092 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +080093 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +080094 //UNUSED(imsi);
95 //UNUSED(imsiLen);
b.liu5fa9e772023-11-23 18:00:55 +080096
wangyouqiang3e3bf922024-01-05 15:38:34 +080097 if(h_sim != qser_h_sim)
98 {
wangyouqiang45cfff82024-04-15 19:35:15 +080099 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800100 return QSER_RESULT_FAIL;
101 }
102
103 if(qser_info_handle == NULL)
104 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800105 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800106 return QSER_RESULT_FAIL;
107 }
108
109 if(imsi == NULL || imsiLen < 15)
110 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800111 LOGE("imsi is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800112 return QSER_RESULT_FAIL;
113 }
114
115 memset(imsi,0,imsiLen);
116 int err = mbtk_imsi_get(qser_info_handle, imsi);
117 if(err)
118 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800119 LOGE("mbtk_imsi_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800120 return QSER_RESULT_FAIL;
121 }
122
123 if(strlen(imsi) > imsiLen)
124 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800125 LOGE("get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800126 return QSER_RESULT_FAIL;
127 }
128
129 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800130}
131
132int qser_sim_geticcid(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,char *iccid, size_t iccidLen)
133{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800134 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800135 UNUSED(simId);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800136 //UNUSED(iccid);
137 //UNUSED(iccidLen);
b.liu5fa9e772023-11-23 18:00:55 +0800138
wangyouqiang3e3bf922024-01-05 15:38:34 +0800139 if(h_sim != qser_h_sim)
140 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800141 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800142 return QSER_RESULT_FAIL;
143 }
144
145 if(qser_info_handle == NULL)
146 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800147 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800148 return QSER_RESULT_FAIL;
149 }
150
r.xiao2ad43d12024-03-23 00:03:29 -0700151 if(iccid == NULL || iccidLen < QSER_SIM_ICCID_LEN_MAX)
wangyouqiang3e3bf922024-01-05 15:38:34 +0800152 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800153 LOGE("iccid is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800154 return QSER_RESULT_FAIL;
155 }
156
157 memset(iccid, 0, iccidLen);
158 int err = mbtk_iccid_get(qser_info_handle, iccid);
159 if(err)
160 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800161 LOGE("mbtk_iccid_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800162 return QSER_RESULT_FAIL;
163 }
164
165 if(strlen(iccid) > iccidLen)
166 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800167 LOGE("get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800168 return QSER_RESULT_FAIL;
169 }
170
171 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800172}
173
174int qser_sim_getphonenumber(sim_client_handle_type h_sim,QSER_SIM_APP_ID_INFO_T *pt_info, char*phone_num, size_t phoneLen)
175{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800176 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800177 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800178 //UNUSED(phone_num);
179 //UNUSED(phoneLen);
b.liu5fa9e772023-11-23 18:00:55 +0800180
wangyouqiang3e3bf922024-01-05 15:38:34 +0800181 if(h_sim != qser_h_sim)
182 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800183 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800184 return QSER_RESULT_FAIL;
185 }
186
187 if(qser_info_handle == NULL)
188 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800189 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800190 return QSER_RESULT_FAIL;
191 }
192
193 if(phone_num == NULL || phoneLen < 11)
194 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800195 LOGE("phone_num is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800196 return QSER_RESULT_FAIL;
197 }
198
199 memset(phone_num, 0, phoneLen);
200 int err = mbtk_phone_number_get(qser_info_handle, phone_num);
201 if(err)
202 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800203 LOGE("mbtk_phone_number_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800204 return QSER_RESULT_FAIL;
205 }
206
207 if(strlen(phone_num) > phoneLen)
208 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800209 LOGE("get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800210 return QSER_RESULT_FAIL;
211 }
212
213 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800214}
215
216int qser_sim_verifypin(sim_client_handle_type h_sim,QSER_SIM_VERIFY_PIN_INFO_T *pt_info)
217{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800218 //UNUSED(h_sim);
219 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800220
wangyouqiang3e3bf922024-01-05 15:38:34 +0800221 if(h_sim != qser_h_sim)
222 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800223 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800224 return QSER_RESULT_FAIL;
225 }
226
227 if(qser_info_handle == NULL)
228 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800229 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800230 return QSER_RESULT_FAIL;
231 }
232
233 if(pt_info == NULL)
234 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800235 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800236 return QSER_RESULT_FAIL;
237 }
238
239 int err = mbtk_verify_pin(qser_info_handle, pt_info->pin_value);
240 if(err)
241 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800242 LOGE("mbtk_verify_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800243 return QSER_RESULT_FAIL;
244 }
245
246 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800247}
248
249int qser_sim_changepin(sim_client_handle_type h_sim,QSER_SIM_CHANGE_PIN_INFO_T *pt_info)
250{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800251 //UNUSED(h_sim);
252 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800253
wangyouqiang3e3bf922024-01-05 15:38:34 +0800254 if(h_sim != qser_h_sim)
255 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800256 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800257 return QSER_RESULT_FAIL;
258 }
259
260 if(qser_info_handle == NULL)
261 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800262 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800263 return QSER_RESULT_FAIL;
264 }
265
266 if(pt_info == NULL)
267 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800268 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800269 return QSER_RESULT_FAIL;
270 }
271
272 mbtk_change_pin_info pin_info = {0};
273 memcpy(pin_info.old_pin_value, pt_info->old_pin_value, pt_info->old_pin_value_len);
274 memcpy(pin_info.new_pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
275 int err = mbtk_change_pin(qser_info_handle, &pin_info);
276 if(err)
277 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800278 LOGE("mbtk_change_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800279 return QSER_RESULT_FAIL;
280 }
281
282 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800283}
284
285int qser_sim_unblockpin(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info)
286{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800287 //UNUSED(h_sim);
288 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800289
wangyouqiang3e3bf922024-01-05 15:38:34 +0800290 if(h_sim != qser_h_sim)
291 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800292 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800293 return QSER_RESULT_FAIL;
294 }
295
296 if(qser_info_handle == NULL)
297 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800298 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800299 return QSER_RESULT_FAIL;
300 }
301
302 if(pt_info == NULL)
303 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800304 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800305 return QSER_RESULT_FAIL;
306 }
307
308 mbtk_unlock_pin_info puk_pin_info = {0};
309 memcpy(puk_pin_info.pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
310 memcpy(puk_pin_info.puk_value, pt_info->puk_value, pt_info->puk_value_len);
311 int err = mbtk_unlock_pin(qser_info_handle, &puk_pin_info);
312 if(err)
313 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800314 LOGE("mbtk_unlock_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800315 return QSER_RESULT_FAIL;
316 }
317
318 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800319}
320
321int qser_sim_enablepin(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info)
322{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800323 //UNUSED(h_sim);
324 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800325
wangyouqiang3e3bf922024-01-05 15:38:34 +0800326 if(h_sim != qser_h_sim)
327 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800328 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800329 return QSER_RESULT_FAIL;
330 }
331
332 if(qser_info_handle == NULL)
333 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800334 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800335 return QSER_RESULT_FAIL;
336 }
337
338 if(pt_info == NULL)
339 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800340 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800341 return QSER_RESULT_FAIL;
342 }
343
344 mbtk_enable_pin_info pin_info = {0};
345 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
346 pin_info.enable = 1;
347 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
348 if(err)
349 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800350 LOGE("mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800351 return QSER_RESULT_FAIL;
352 }
353
354 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800355}
356
357int qser_sim_disablepin(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info)
358{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800359 //UNUSED(h_sim);
360 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800361
wangyouqiang3e3bf922024-01-05 15:38:34 +0800362 if(h_sim != qser_h_sim)
363 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800364 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800365 return QSER_RESULT_FAIL;
366 }
367
368 if(qser_info_handle == NULL)
369 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800370 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800371 return QSER_RESULT_FAIL;
372 }
373
374 if(pt_info == NULL)
375 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800376 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800377 return QSER_RESULT_FAIL;
378 }
379
380 mbtk_enable_pin_info pin_info = {0};
381 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
382 pin_info.enable = 0;
383 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
384 if(err)
385 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800386 LOGE("mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800387 return QSER_RESULT_FAIL;
388 }
389
390 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800391}
392
393int qser_sim_getcardstatus(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,QSER_SIM_CARD_STATUS_INFO_T *pt_info)
394{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800395 //UNUSED(h_sim);
396 //UNUSED(simId);
397 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800398
wangyouqiang3e3bf922024-01-05 15:38:34 +0800399 if(h_sim != qser_h_sim)
400 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800401 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800402 return QSER_RESULT_FAIL;
403 }
404
405 if(qser_info_handle == NULL)
406 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800407 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800408 return QSER_RESULT_FAIL;
409 }
410
411 if(pt_info == NULL)
412 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800413 LOGE("pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800414 return QSER_RESULT_FAIL;
415 }
416
417 mbtk_sim_state_enum sim;
418 mbtk_sim_card_type_enum sim_card_type;
419 mbtk_pin_puk_last_times qser_last_times = {0};
420 int err = mbtk_sim_state_get(qser_info_handle, &sim);
421 if(err)
422 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800423 LOGE("mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800424 return QSER_RESULT_FAIL;
425 }
426 else
427 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800428 LOGE("sim = %d.", sim);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800429 memset(pt_info, 0x0, sizeof(QSER_SIM_CARD_STATUS_INFO_T));
430 switch (sim)
431 {
432 case 0: //ABSENT
433 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
434 break;
435 case 1: //NOT READY
r.xiao2ad43d12024-03-23 00:03:29 -0700436 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800437 break;
438 case 2: //READY
439 pt_info->e_card_state = QSER_SIM_CARD_STATE_PRESENT;
440 break;
441 case 3: //SIM PIN
442 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
443 break;
444 case 4: //SIM PUK
445 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
446 break;
447 case 5: //NETWORK
448 pt_info->e_card_state = QSER_SIM_CARD_STATE_ERROR_SIM_TECHNICAL_PROBLEMS;
449 break;
450 default:
451 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
452 break;
453 }
454 }
455
456 err = mbtk_sim_card_type_get(qser_info_handle, &sim_card_type);
457 if(err)
458 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800459 LOGE("mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800460 return QSER_RESULT_FAIL;
461 }
462 else
463 {
464 if(sim_card_type == 0 || sim_card_type == 2)
465 pt_info->e_card_type = QSER_SIM_CARD_TYPE_ICC;
466 else if(sim_card_type == 1 || sim_card_type == 3)
467 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UICC;
468 else
469 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UNKNOWN;
470 }
471
472 err = mbtk_pin_last_num_get(qser_info_handle, &qser_last_times);
473 if(err)
474 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800475 LOGE("mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800476 return QSER_RESULT_FAIL;
477 }
478 else
479 {
480 pt_info->card_app_info.app_3gpp.pin1_num_retries = qser_last_times.p1_retry;
481 pt_info->card_app_info.app_3gpp.pin2_num_retries = qser_last_times.p2_retry;
482 pt_info->card_app_info.app_3gpp.puk1_num_retries = qser_last_times.puk1_retry;
483 pt_info->card_app_info.app_3gpp.puk2_num_retries = qser_last_times.puk2_retry;
484 }
485
486 return QSER_RESULT_SUCCESS;
487}
488
489int qser_sim_getimei(sim_client_handle_type h_sim, char *imei)
490{
491 //UNUSED(h_sim);
492 //UNUSED(imei);
493
494 if(h_sim != qser_h_sim)
495 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800496 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800497 return QSER_RESULT_FAIL;
498 }
499
500 if(qser_info_handle == NULL)
501 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800502 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800503 return QSER_RESULT_FAIL;
504 }
505
506 if(imei == NULL)
507 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800508 LOGE("imei is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800509 return QSER_RESULT_FAIL;
510 }
511
512 int err = mbtk_imei_get(qser_info_handle, imei);
513 if(err)
514 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800515 LOGE("mbtk_imei_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800516 return QSER_RESULT_FAIL;
517 }
518 return QSER_RESULT_SUCCESS;
519}
520
521int qser_get_imei_and_sv(sim_client_handle_type h_sim,char *imei, char*sv)
522{
523 //UNUSED(h_sim);
524 //UNUSED(imei);
525 //UNUSED(sv);
526 if(h_sim != qser_h_sim)
527 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800528 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800529 return QSER_RESULT_FAIL;
530 }
531
532 if(qser_info_handle == NULL)
533 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800534 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800535 return QSER_RESULT_FAIL;
536 }
537
538 if(imei == NULL || sv == NULL)
539 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800540 LOGE("param is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800541 return QSER_RESULT_FAIL;
542 }
543
544 int length = 0;
545 int err = mbtk_imei_get(qser_info_handle, imei);
546 if(err)
547 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800548 LOGE("mbtk_imei_get Error: %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800549 return QSER_RESULT_FAIL;
550 }
551
552 length = strlen(imei);
553 memcpy(sv, imei, length);
554 memcpy(sv + length - 1, "01", 2);
555 return QSER_RESULT_SUCCESS;
556}
557
558int qser_reset_modem(sim_client_handle_type h_sim)
559{
560 //UNUSED(h_sim);
561
562 if(h_sim != qser_h_sim)
563 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800564 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800565 return QSER_RESULT_FAIL;
566 }
567
568 if(qser_info_handle == NULL)
569 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800570 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800571 return QSER_RESULT_FAIL;
572 }
573
wangyouqiangc80c92a2024-04-12 17:58:37 +0800574 //mbtk_system_reboot(0);
575 mbtk_modem_info_t info;
576 info.fun = MBTK_DEV_MODEM_MIN_FUN;
577 info.rst = 0;
578 int err = mbtk_set_modem_fun(qser_info_handle, &info);
579 if(err)
580 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800581 LOGE("mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800582 return QSER_RESULT_FAIL;
583 }
584
585 info.fun = MBTK_DEV_MODEM_FULL_FUN;
586 err = mbtk_set_modem_fun(qser_info_handle, &info);
587 if(err)
588 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800589 LOGE("mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800590 return QSER_RESULT_FAIL;
591 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800592 return QSER_RESULT_SUCCESS;
593}
594
595int qser_get_version(sim_client_handle_type h_sim, char *buf)
596{
597 //UNUSED(h_sim);
598 //UNUSED(buf);
599
600 if(h_sim != qser_h_sim)
601 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800602 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800603 return QSER_RESULT_FAIL;
604 }
605
606 if(qser_info_handle == NULL)
607 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800608 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800609 return QSER_RESULT_FAIL;
610 }
611
612 if(buf == NULL)
613 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800614 LOGE("buf is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800615 return QSER_RESULT_FAIL;
616 }
617
618 int err = mbtk_version_get(qser_info_handle, buf);
619 if(err)
620 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800621 LOGE("mbtk_version_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800622 return QSER_RESULT_FAIL;
623 }
624 return QSER_RESULT_SUCCESS;
625}
626
627int qser_reset_sim(sim_client_handle_type h_sim)
628{
629 //UNUSED(h_sim);
630
631 if(h_sim != qser_h_sim)
632 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800633 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800634 return QSER_RESULT_FAIL;
635 }
636
637 if(qser_info_handle == NULL)
638 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800639 LOGE("handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800640 return QSER_RESULT_FAIL;
641 }
642
643 //mbtk_sim_power_set(0);
644 //sleep(1);
645 //mbtk_sim_power_set(1);
wangyouqiang924284e2024-02-19 17:40:16 +0800646 mbtk_modem_info_t info;
647 info.fun = MBTK_DEV_MODEM_DISABLE_SIM;
648 info.rst = 0;
649 int err = mbtk_set_modem_fun(qser_info_handle, &info);
650 if(err)
651 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800652 LOGE("mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800653 return QSER_RESULT_FAIL;
654 }
655
656 info.fun = MBTK_DEV_MODEM_FULL_FUN;
657 err = mbtk_set_modem_fun(qser_info_handle, &info);
658 if(err)
659 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800660 LOGE("mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800661 return QSER_RESULT_FAIL;
662 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800663 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800664}
665
wangyouqiang45cfff82024-04-15 19:35:15 +0800666int qser_sim_addrxmsghandler(QSER_SIM_RxMsgHandlerFunc_t handlerPtr)
667{
668 if(qser_info_handle == NULL)
669 {
670 LOGE("handle is NULL.");
671 return QSER_RESULT_FAIL;
672 }
673
674 if(handlerPtr == NULL)
675 {
676 LOGE("param is NULL.");
677 qser_sim_state_cb = NULL;
678 return QSER_RESULT_SUCCESS;
679 }
680
681 qser_sim_state_cb = handlerPtr;
682 if(!qser_sim_cb_state)
683 {
684 int ret = mbtk_sim_state_change_cb_reg(qser_info_handle, qser_sim_state_change_cb);
685 if(ret != 0)
686 {
687 LOGE("set cb fail.");
688 qser_sim_state_cb = NULL;
689 return QSER_RESULT_FAIL;
690 }
691 }
692
693 return QSER_RESULT_SUCCESS;
694}
695
696
b.liu5fa9e772023-11-23 18:00:55 +0800697int qser_sim_client_deinit(sim_client_handle_type h_sim)
698{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800699 //UNUSED(h_sim);
700 if(h_sim != qser_h_sim)
701 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800702 LOGE("h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800703 return QSER_RESULT_FAIL;
704 }
705
706 if(qser_info_handle)
707 {
708 LOGE("qser_info_handle_num = %d", qser_info_handle_num);
709 if(qser_info_handle_num == 1)
710 { // 最后一个引用,可释放。
711 int ret = mbtk_info_handle_free(&qser_info_handle);
712 if(ret)
713 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800714 LOGE("mbtk_info_handle_free() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800715 return QSER_RESULT_FAIL;
716 }
717 else
718 {
719 qser_info_handle_num = 0;
720 qser_info_handle = NULL;
wangyouqiang45cfff82024-04-15 19:35:15 +0800721 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800722 inited = FALSE;
723 }
724 }
725 else
726 {
727 qser_info_handle_num--;
wangyouqiang45cfff82024-04-15 19:35:15 +0800728 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800729 }
730 }
731 else
732 {
wangyouqiang45cfff82024-04-15 19:35:15 +0800733 LOGE("handle not inited.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800734 return QSER_RESULT_FAIL;
735 }
b.liu5fa9e772023-11-23 18:00:55 +0800736
wangyouqiang3e3bf922024-01-05 15:38:34 +0800737 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800738}
wangyouqiang3e3bf922024-01-05 15:38:34 +0800739/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800740