blob: 78af51b6a3eccf30598da996e8ef16198e57a09a [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
b.liud110d122024-06-07 13:42:33 +08008
9#define QSER_IMEI_SV_VERSION "01"
10
wangyouqiang3e3bf922024-01-05 15:38:34 +080011/****************************DEFINE***************************************/
12
13/****************************VARIABLE***************************************/
14extern mbtk_info_handle_t* qser_info_handle;
15extern int qser_info_handle_num;
16static bool inited = FALSE;
17static uint qser_h_sim = 0x5F6F7F8F;
wangyouqiang45cfff82024-04-15 19:35:15 +080018static QSER_SIM_RxMsgHandlerFunc_t qser_sim_state_cb = NULL;
19static bool qser_sim_cb_state = false;
wangyouqiang3e3bf922024-01-05 15:38:34 +080020/****************************VARIABLE***************************************/
21
22/******************************FUNC*****************************************/
wangyouqiang45cfff82024-04-15 19:35:15 +080023void qser_sim_state_change_cb(const void* data, int data_len)
24{
25 uint8 *ptr = (uint8*)data;
wangyouqiangc42b85d2024-04-24 17:05:06 +080026 LOGE("[qser_sim] SIM state : %d\n", *ptr);
wangyouqiang45cfff82024-04-15 19:35:15 +080027 QSER_SIM_CARD_STATUS_INFO_T qser_sim_statue = {0};
28 if(*ptr == 0)
29 {
30 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_ABSENT;
31 }
32 else if(*ptr == 1)
33 {
34 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_PRESENT;
35 }
36 else if(*ptr == 18)
37 {
38 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_ABSENT;
39 }
40 else
41 {
42 qser_sim_statue.e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
43 }
44 if(qser_sim_state_cb != NULL)
45 {
46 qser_sim_state_cb(&qser_sim_statue);
47 }
48}
49
wangyouqiang3e3bf922024-01-05 15:38:34 +080050/******************************FUNC*****************************************/
51
52/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +080053int qser_sim_client_init(sim_client_handle_type *ph_sim)
54{
wangyouqiang3e3bf922024-01-05 15:38:34 +080055 //UNUSED(ph_sim);
56 if(ph_sim == NULL)
57 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080058 LOGE("[qser_sim] ph_sim is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080059 return QSER_RESULT_FAIL;
60 }
b.liu5fa9e772023-11-23 18:00:55 +080061
wangyouqiang3e3bf922024-01-05 15:38:34 +080062 if(!inited && qser_info_handle == NULL)
63 {
64 qser_info_handle = mbtk_info_handle_get();
65 if(qser_info_handle)
66 {
67 qser_info_handle_num++;
68 inited = TRUE;
69 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
70 }
71 else
72 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080073 LOGE("[qser_sim] mbtk_info_handle_get() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080074 return QSER_RESULT_FAIL;
75 }
76 }
77 else
78 {
79 if(!inited)
80 {
81 qser_info_handle_num++;
82 inited = TRUE;
83 //mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
84 }
85 }
86 *ph_sim = qser_h_sim;
87
wangyouqiangc42b85d2024-04-24 17:05:06 +080088 LOGE("[qser_sim] mbtk_info_handle_get() success.");
wangyouqiang3e3bf922024-01-05 15:38:34 +080089 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +080090}
91
92int qser_sim_getimsi(sim_client_handle_type h_sim, QSER_SIM_APP_ID_INFO_T *pt_info,char *imsi,size_t imsiLen)
93{
wangyouqiang3e3bf922024-01-05 15:38:34 +080094 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +080095 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +080096 //UNUSED(imsi);
97 //UNUSED(imsiLen);
b.liu5fa9e772023-11-23 18:00:55 +080098
wangyouqiang3e3bf922024-01-05 15:38:34 +080099 if(h_sim != qser_h_sim)
100 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800101 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800102 return QSER_RESULT_FAIL;
103 }
104
105 if(qser_info_handle == NULL)
106 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800107 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800108 return QSER_RESULT_FAIL;
109 }
110
111 if(imsi == NULL || imsiLen < 15)
112 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800113 LOGE("[qser_sim] imsi is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800114 return QSER_RESULT_FAIL;
115 }
116
117 memset(imsi,0,imsiLen);
118 int err = mbtk_imsi_get(qser_info_handle, imsi);
119 if(err)
120 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800121 LOGE("[qser_sim] mbtk_imsi_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800122 return QSER_RESULT_FAIL;
123 }
124
125 if(strlen(imsi) > imsiLen)
126 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800127 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800128 return QSER_RESULT_FAIL;
129 }
130
131 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800132}
133
134int qser_sim_geticcid(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,char *iccid, size_t iccidLen)
135{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800136 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800137 UNUSED(simId);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800138 //UNUSED(iccid);
139 //UNUSED(iccidLen);
b.liu5fa9e772023-11-23 18:00:55 +0800140
wangyouqiang3e3bf922024-01-05 15:38:34 +0800141 if(h_sim != qser_h_sim)
142 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800143 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800144 return QSER_RESULT_FAIL;
145 }
146
147 if(qser_info_handle == NULL)
148 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800149 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800150 return QSER_RESULT_FAIL;
151 }
152
r.xiao2ad43d12024-03-23 00:03:29 -0700153 if(iccid == NULL || iccidLen < QSER_SIM_ICCID_LEN_MAX)
wangyouqiang3e3bf922024-01-05 15:38:34 +0800154 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800155 LOGE("[qser_sim] iccid is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800156 return QSER_RESULT_FAIL;
157 }
158
159 memset(iccid, 0, iccidLen);
160 int err = mbtk_iccid_get(qser_info_handle, iccid);
161 if(err)
162 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800163 LOGE("[qser_sim] mbtk_iccid_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800164 return QSER_RESULT_FAIL;
165 }
166
167 if(strlen(iccid) > iccidLen)
168 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800169 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800170 return QSER_RESULT_FAIL;
171 }
172
173 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800174}
175
176int qser_sim_getphonenumber(sim_client_handle_type h_sim,QSER_SIM_APP_ID_INFO_T *pt_info, char*phone_num, size_t phoneLen)
177{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800178 //UNUSED(h_sim);
b.liu5fa9e772023-11-23 18:00:55 +0800179 UNUSED(pt_info);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800180 //UNUSED(phone_num);
181 //UNUSED(phoneLen);
b.liu5fa9e772023-11-23 18:00:55 +0800182
wangyouqiang3e3bf922024-01-05 15:38:34 +0800183 if(h_sim != qser_h_sim)
184 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800185 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800186 return QSER_RESULT_FAIL;
187 }
188
189 if(qser_info_handle == NULL)
190 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800191 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800192 return QSER_RESULT_FAIL;
193 }
194
195 if(phone_num == NULL || phoneLen < 11)
196 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800197 LOGE("[qser_sim] phone_num is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800198 return QSER_RESULT_FAIL;
199 }
200
201 memset(phone_num, 0, phoneLen);
202 int err = mbtk_phone_number_get(qser_info_handle, phone_num);
203 if(err)
204 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800205 LOGE("[qser_sim] mbtk_phone_number_get is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800206 return QSER_RESULT_FAIL;
207 }
208
209 if(strlen(phone_num) > phoneLen)
210 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800211 LOGE("[qser_sim] get datalength out of range.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800212 return QSER_RESULT_FAIL;
213 }
214
215 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800216}
217
218int qser_sim_verifypin(sim_client_handle_type h_sim,QSER_SIM_VERIFY_PIN_INFO_T *pt_info)
219{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800220 //UNUSED(h_sim);
221 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800222
wangyouqiang3e3bf922024-01-05 15:38:34 +0800223 if(h_sim != qser_h_sim)
224 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800225 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800226 return QSER_RESULT_FAIL;
227 }
228
229 if(qser_info_handle == NULL)
230 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800231 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800232 return QSER_RESULT_FAIL;
233 }
234
235 if(pt_info == NULL)
236 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800237 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800238 return QSER_RESULT_FAIL;
239 }
240
241 int err = mbtk_verify_pin(qser_info_handle, pt_info->pin_value);
242 if(err)
243 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800244 LOGE("[qser_sim] mbtk_verify_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800245 return QSER_RESULT_FAIL;
246 }
247
248 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800249}
250
251int qser_sim_changepin(sim_client_handle_type h_sim,QSER_SIM_CHANGE_PIN_INFO_T *pt_info)
252{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800253 //UNUSED(h_sim);
254 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800255
wangyouqiang3e3bf922024-01-05 15:38:34 +0800256 if(h_sim != qser_h_sim)
257 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800258 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800259 return QSER_RESULT_FAIL;
260 }
261
262 if(qser_info_handle == NULL)
263 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800264 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800265 return QSER_RESULT_FAIL;
266 }
267
268 if(pt_info == NULL)
269 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800270 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800271 return QSER_RESULT_FAIL;
272 }
273
274 mbtk_change_pin_info pin_info = {0};
275 memcpy(pin_info.old_pin_value, pt_info->old_pin_value, pt_info->old_pin_value_len);
276 memcpy(pin_info.new_pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
277 int err = mbtk_change_pin(qser_info_handle, &pin_info);
278 if(err)
279 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800280 LOGE("[qser_sim] mbtk_change_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800281 return QSER_RESULT_FAIL;
282 }
283
284 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800285}
286
287int qser_sim_unblockpin(sim_client_handle_type h_sim, QSER_SIM_UNBLOCK_PIN_INFO_T *pt_info)
288{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800289 //UNUSED(h_sim);
290 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800291
wangyouqiang3e3bf922024-01-05 15:38:34 +0800292 if(h_sim != qser_h_sim)
293 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800294 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800295 return QSER_RESULT_FAIL;
296 }
297
298 if(qser_info_handle == NULL)
299 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800300 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800301 return QSER_RESULT_FAIL;
302 }
303
304 if(pt_info == NULL)
305 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800306 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800307 return QSER_RESULT_FAIL;
308 }
309
310 mbtk_unlock_pin_info puk_pin_info = {0};
311 memcpy(puk_pin_info.pin_value, pt_info->new_pin_value, pt_info->new_pin_value_len);
312 memcpy(puk_pin_info.puk_value, pt_info->puk_value, pt_info->puk_value_len);
313 int err = mbtk_unlock_pin(qser_info_handle, &puk_pin_info);
314 if(err)
315 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800316 LOGE("[qser_sim] mbtk_unlock_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800317 return QSER_RESULT_FAIL;
318 }
319
320 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800321}
322
323int qser_sim_enablepin(sim_client_handle_type h_sim, QSER_SIM_ENABLE_PIN_INFO_T *pt_info)
324{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800325 //UNUSED(h_sim);
326 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800327
wangyouqiang3e3bf922024-01-05 15:38:34 +0800328 if(h_sim != qser_h_sim)
329 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800330 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800331 return QSER_RESULT_FAIL;
332 }
333
334 if(qser_info_handle == NULL)
335 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800336 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800337 return QSER_RESULT_FAIL;
338 }
339
340 if(pt_info == NULL)
341 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800342 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800343 return QSER_RESULT_FAIL;
344 }
345
346 mbtk_enable_pin_info pin_info = {0};
347 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
348 pin_info.enable = 1;
349 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
350 if(err)
351 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800352 LOGE("[qser_sim] mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800353 return QSER_RESULT_FAIL;
354 }
355
356 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800357}
358
359int qser_sim_disablepin(sim_client_handle_type h_sim, QSER_SIM_DISABLE_PIN_INFO_T *pt_info)
360{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800361 //UNUSED(h_sim);
362 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800363
wangyouqiang3e3bf922024-01-05 15:38:34 +0800364 if(h_sim != qser_h_sim)
365 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800366 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800367 return QSER_RESULT_FAIL;
368 }
369
370 if(qser_info_handle == NULL)
371 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800372 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800373 return QSER_RESULT_FAIL;
374 }
375
376 if(pt_info == NULL)
377 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800378 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800379 return QSER_RESULT_FAIL;
380 }
381
382 mbtk_enable_pin_info pin_info = {0};
383 memcpy(pin_info.pin_value, pt_info->pin_value, pt_info->pin_value_len);
384 pin_info.enable = 0;
385 int err = mbtk_enable_pin(qser_info_handle, &pin_info);
386 if(err)
387 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800388 LOGE("[qser_sim] mbtk_enable_pin is fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800389 return QSER_RESULT_FAIL;
390 }
391
392 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800393}
394
395int qser_sim_getcardstatus(sim_client_handle_type h_sim,QSER_SIM_SLOT_ID_TYPE_T simId,QSER_SIM_CARD_STATUS_INFO_T *pt_info)
396{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800397 //UNUSED(h_sim);
398 //UNUSED(simId);
399 //UNUSED(pt_info);
b.liu5fa9e772023-11-23 18:00:55 +0800400
wangyouqiang3e3bf922024-01-05 15:38:34 +0800401 if(h_sim != qser_h_sim)
402 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800403 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800404 return QSER_RESULT_FAIL;
405 }
406
407 if(qser_info_handle == NULL)
408 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800409 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800410 return QSER_RESULT_FAIL;
411 }
412
413 if(pt_info == NULL)
414 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800415 LOGE("[qser_sim] pt_info is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800416 return QSER_RESULT_FAIL;
417 }
418
419 mbtk_sim_state_enum sim;
420 mbtk_sim_card_type_enum sim_card_type;
421 mbtk_pin_puk_last_times qser_last_times = {0};
422 int err = mbtk_sim_state_get(qser_info_handle, &sim);
423 if(err)
424 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800425 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800426 return QSER_RESULT_FAIL;
427 }
428 else
429 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800430 LOGE("[qser_sim] sim = %d.", sim);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800431 memset(pt_info, 0x0, sizeof(QSER_SIM_CARD_STATUS_INFO_T));
432 switch (sim)
433 {
434 case 0: //ABSENT
435 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
436 break;
437 case 1: //NOT READY
r.xiao2ad43d12024-03-23 00:03:29 -0700438 pt_info->e_card_state = QSER_SIM_CARD_STATE_ABSENT;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800439 break;
440 case 2: //READY
441 pt_info->e_card_state = QSER_SIM_CARD_STATE_PRESENT;
442 break;
443 case 3: //SIM PIN
liuyang2248a592024-06-14 17:16:01 +0800444 pt_info->e_card_state = QSER_SIM_CARD_STATE_PRESENT;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800445 break;
446 case 4: //SIM PUK
liuyang2248a592024-06-14 17:16:01 +0800447 pt_info->e_card_state = QSER_SIM_CARD_STATE_PRESENT;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800448 break;
449 case 5: //NETWORK
450 pt_info->e_card_state = QSER_SIM_CARD_STATE_ERROR_SIM_TECHNICAL_PROBLEMS;
451 break;
452 default:
453 pt_info->e_card_state = QSER_SIM_CARD_STATE_UNKNOWN;
454 break;
455 }
456 }
457
458 err = mbtk_sim_card_type_get(qser_info_handle, &sim_card_type);
459 if(err)
460 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800461 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800462 return QSER_RESULT_FAIL;
463 }
464 else
465 {
466 if(sim_card_type == 0 || sim_card_type == 2)
467 pt_info->e_card_type = QSER_SIM_CARD_TYPE_ICC;
468 else if(sim_card_type == 1 || sim_card_type == 3)
469 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UICC;
470 else
471 pt_info->e_card_type = QSER_SIM_CARD_TYPE_UNKNOWN;
472 }
473
474 err = mbtk_pin_last_num_get(qser_info_handle, &qser_last_times);
475 if(err)
476 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800477 LOGE("[qser_sim] mbtk_sim_state_get fail [err = %d].", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800478 return QSER_RESULT_FAIL;
479 }
480 else
481 {
482 pt_info->card_app_info.app_3gpp.pin1_num_retries = qser_last_times.p1_retry;
483 pt_info->card_app_info.app_3gpp.pin2_num_retries = qser_last_times.p2_retry;
484 pt_info->card_app_info.app_3gpp.puk1_num_retries = qser_last_times.puk1_retry;
485 pt_info->card_app_info.app_3gpp.puk2_num_retries = qser_last_times.puk2_retry;
486 }
487
488 return QSER_RESULT_SUCCESS;
489}
490
491int qser_sim_getimei(sim_client_handle_type h_sim, char *imei)
492{
493 //UNUSED(h_sim);
494 //UNUSED(imei);
495
496 if(h_sim != qser_h_sim)
497 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800498 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800499 return QSER_RESULT_FAIL;
500 }
501
502 if(qser_info_handle == NULL)
503 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800504 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800505 return QSER_RESULT_FAIL;
506 }
507
508 if(imei == NULL)
509 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800510 LOGE("[qser_sim] imei is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800511 return QSER_RESULT_FAIL;
512 }
513
514 int err = mbtk_imei_get(qser_info_handle, imei);
515 if(err)
516 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800517 LOGE("[qser_sim] mbtk_imei_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800518 return QSER_RESULT_FAIL;
519 }
520 return QSER_RESULT_SUCCESS;
521}
522
523int qser_get_imei_and_sv(sim_client_handle_type h_sim,char *imei, char*sv)
524{
525 //UNUSED(h_sim);
526 //UNUSED(imei);
527 //UNUSED(sv);
528 if(h_sim != qser_h_sim)
529 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800530 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800531 return QSER_RESULT_FAIL;
532 }
533
534 if(qser_info_handle == NULL)
535 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800536 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800537 return QSER_RESULT_FAIL;
538 }
539
540 if(imei == NULL || sv == NULL)
541 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800542 LOGE("[qser_sim] param is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800543 return QSER_RESULT_FAIL;
544 }
545
wangyouqiang3e3bf922024-01-05 15:38:34 +0800546 int err = mbtk_imei_get(qser_info_handle, imei);
547 if(err)
548 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800549 LOGE("[qser_sim] mbtk_imei_get Error: %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800550 return QSER_RESULT_FAIL;
551 }
552
b.liud110d122024-06-07 13:42:33 +0800553 memcpy(sv, QSER_IMEI_SV_VERSION, strlen(QSER_IMEI_SV_VERSION));
554
wangyouqiang3e3bf922024-01-05 15:38:34 +0800555 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 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800564 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800565 return QSER_RESULT_FAIL;
566 }
567
568 if(qser_info_handle == NULL)
569 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800570 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800571 return QSER_RESULT_FAIL;
572 }
573
liuyang02e99312024-06-24 14:19:35 +0800574 for(int cid =0; cid < MBTK_APN_CID_MAX; cid++)
575 {
576 mbtk_data_call_stop(qser_info_handle, cid, 1);
577 }
578
579
wangyouqiangc80c92a2024-04-12 17:58:37 +0800580 //mbtk_system_reboot(0);
581 mbtk_modem_info_t info;
582 info.fun = MBTK_DEV_MODEM_MIN_FUN;
583 info.rst = 0;
584 int err = mbtk_set_modem_fun(qser_info_handle, &info);
585 if(err)
586 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800587 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800588 return QSER_RESULT_FAIL;
589 }
590
591 info.fun = MBTK_DEV_MODEM_FULL_FUN;
592 err = mbtk_set_modem_fun(qser_info_handle, &info);
593 if(err)
594 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800595 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiangc80c92a2024-04-12 17:58:37 +0800596 return QSER_RESULT_FAIL;
597 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800598 return QSER_RESULT_SUCCESS;
599}
600
601int qser_get_version(sim_client_handle_type h_sim, char *buf)
602{
603 //UNUSED(h_sim);
604 //UNUSED(buf);
605
606 if(h_sim != qser_h_sim)
607 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800608 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800609 return QSER_RESULT_FAIL;
610 }
611
612 if(qser_info_handle == NULL)
613 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800614 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800615 return QSER_RESULT_FAIL;
616 }
617
618 if(buf == NULL)
619 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800620 LOGE("[qser_sim] buf is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800621 return QSER_RESULT_FAIL;
622 }
623
624 int err = mbtk_version_get(qser_info_handle, buf);
625 if(err)
626 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800627 LOGE("[qser_sim] mbtk_version_get Error : %d\n", err);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800628 return QSER_RESULT_FAIL;
629 }
630 return QSER_RESULT_SUCCESS;
631}
632
633int qser_reset_sim(sim_client_handle_type h_sim)
634{
635 //UNUSED(h_sim);
636
637 if(h_sim != qser_h_sim)
638 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800639 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800640 return QSER_RESULT_FAIL;
641 }
642
643 if(qser_info_handle == NULL)
644 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800645 LOGE("[qser_sim] handle is NULL.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800646 return QSER_RESULT_FAIL;
647 }
648
649 //mbtk_sim_power_set(0);
650 //sleep(1);
651 //mbtk_sim_power_set(1);
wangyouqiang924284e2024-02-19 17:40:16 +0800652 mbtk_modem_info_t info;
653 info.fun = MBTK_DEV_MODEM_DISABLE_SIM;
654 info.rst = 0;
655 int err = mbtk_set_modem_fun(qser_info_handle, &info);
656 if(err)
657 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800658 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800659 return QSER_RESULT_FAIL;
660 }
661
662 info.fun = MBTK_DEV_MODEM_FULL_FUN;
663 err = mbtk_set_modem_fun(qser_info_handle, &info);
664 if(err)
665 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800666 LOGE("[qser_sim] mbtk_set_modem_fun Error : %d\n", err);
wangyouqiang924284e2024-02-19 17:40:16 +0800667 return QSER_RESULT_FAIL;
668 }
wangyouqiang3e3bf922024-01-05 15:38:34 +0800669 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800670}
671
wangyouqiang45cfff82024-04-15 19:35:15 +0800672int qser_sim_addrxmsghandler(QSER_SIM_RxMsgHandlerFunc_t handlerPtr)
673{
674 if(qser_info_handle == NULL)
675 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800676 LOGE("[qser_sim] handle is NULL.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800677 return QSER_RESULT_FAIL;
678 }
679
680 if(handlerPtr == NULL)
681 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800682 LOGE("[qser_sim] param is NULL.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800683 qser_sim_state_cb = NULL;
684 return QSER_RESULT_SUCCESS;
685 }
686
687 qser_sim_state_cb = handlerPtr;
688 if(!qser_sim_cb_state)
689 {
690 int ret = mbtk_sim_state_change_cb_reg(qser_info_handle, qser_sim_state_change_cb);
691 if(ret != 0)
692 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800693 LOGE("[qser_sim] set cb fail.");
wangyouqiang45cfff82024-04-15 19:35:15 +0800694 qser_sim_state_cb = NULL;
695 return QSER_RESULT_FAIL;
696 }
697 }
698
699 return QSER_RESULT_SUCCESS;
700}
701
702
b.liu5fa9e772023-11-23 18:00:55 +0800703int qser_sim_client_deinit(sim_client_handle_type h_sim)
704{
wangyouqiang3e3bf922024-01-05 15:38:34 +0800705 //UNUSED(h_sim);
706 if(h_sim != qser_h_sim)
707 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800708 LOGE("[qser_sim] h_sim is error.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800709 return QSER_RESULT_FAIL;
710 }
711
712 if(qser_info_handle)
713 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800714 LOGE("[qser_sim] qser_info_handle_num = %d", qser_info_handle_num);
wangyouqiang3e3bf922024-01-05 15:38:34 +0800715 if(qser_info_handle_num == 1)
716 { // 最后一个引用,可释放。
717 int ret = mbtk_info_handle_free(&qser_info_handle);
718 if(ret)
719 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800720 LOGE("[qser_sim] mbtk_info_handle_free() fail.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800721 return QSER_RESULT_FAIL;
722 }
723 else
724 {
725 qser_info_handle_num = 0;
726 qser_info_handle = NULL;
wangyouqiang45cfff82024-04-15 19:35:15 +0800727 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800728 inited = FALSE;
729 }
730 }
731 else
732 {
733 qser_info_handle_num--;
wangyouqiang45cfff82024-04-15 19:35:15 +0800734 qser_sim_state_cb = NULL;
wangyouqiang3e3bf922024-01-05 15:38:34 +0800735 }
736 }
737 else
738 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800739 LOGE("[qser_sim] handle not inited.");
wangyouqiang3e3bf922024-01-05 15:38:34 +0800740 return QSER_RESULT_FAIL;
741 }
b.liu5fa9e772023-11-23 18:00:55 +0800742
wangyouqiang3e3bf922024-01-05 15:38:34 +0800743 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800744}
wangyouqiang3e3bf922024-01-05 15:38:34 +0800745/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800746