blob: cdcc9a766f288fde6a8cf3adee734eac1df8d2c0 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include "gsw_nw_interface.h"
2#include <unistd.h>
3#include <dlfcn.h>
4#include <time.h>
5
6#define MBTK_BUFF_TEMP_SIZE_32 32
7#define MBTK_ERR_OK 0
8#define MBTK_ERR_FAIL -1
9#define GSW_SIM_ICCID_LENGTH 20+1
10#define GSW_SIM_IMSI_LENGTH 20+1
11#define GSW_SIM_MSISDN_LENGTH 20+1
12#define GSW_SIM_IMEI_LENGTH 20+1
13
14//mbtk include
15typedef unsigned int uint32;
16typedef unsigned char uint8;
17typedef unsigned short uint16;
18typedef void (*mbtk_info_callback_func)(const void* data, int data_len);
19typedef struct
20{
21 int client_fd;
22 pthread_t read_thread_id;
23 int exit_fd[2];
24 bool is_waitting;
25 pthread_cond_t cond;
26 pthread_mutex_t mutex;
27
28 pthread_mutex_t send_mutex;
29
30 // Temp response data.
31 uint16 info_err;
32 uint16 data_len;
33 void *data;
34
35 //mbtk wyq for server_ready_status add start
36 char server_ready_status;
37 //mbtk wyq for server_ready_status add end
38
39 mbtk_info_callback_func net_state_cb;
40 mbtk_info_callback_func call_state_cb;
41 mbtk_info_callback_func sms_state_cb;
42 mbtk_info_callback_func radio_state_cb;
43 mbtk_info_callback_func sim_state_cb;
44 mbtk_info_callback_func pdp_state_cb;
45 //add signal by xr
46 mbtk_info_callback_func signal_state_cb;
47} mbtk_info_handle_t;
48
49typedef enum {
50 MBTK_SIM_ABSENT = 0,
51 MBTK_SIM_NOT_READY = 1,
52 MBTK_SIM_READY = 2,
53 MBTK_SIM_PIN = 3,
54 MBTK_SIM_PUK = 4,
55 MBTK_SIM_NETWORK_PERSONALIZATION = 5
56} mbtk_sim_state_enum;
57
58typedef enum
59{
60 MBTK_DEV_MODEM_MIN_FUN, //Modem 最小功能
61 MBTK_DEV_MODEM_FULL_FUN, //Modem 全功能
62 MBTK_DEV_MODEM_DISABLE_RECEIVE_RF_CIRCUITS = 3, //Modem 禁用射频接收电路
63 MBTK_DEV_MODEM_DISABLE_TRANSMIT_AND_RECEIVE_RF_CIRCUITS, //Modem禁用射频发射和接收电路
64 MBTK_DEV_MODEM_DISABLE_SIM, //Modem 禁用(U)SIM 卡
65 MBTK_DEV_MODEM_TURN_OFF_FULL_SECONDARY_RECEIVE, //Modem 完全禁用辅助接收
66}MBTK_DEV_MODEM_FUNCTION;
67
68typedef struct
69{
70 MBTK_DEV_MODEM_FUNCTION fun;
71 int rst;
72} mbtk_modem_info_t;
73
74//api
75
76static mbtk_info_handle_t* (*mbtk_info_handle_get)(void);
b.liu68a94c92025-05-24 12:53:41 +080077#define lib_mbtk_path "/lib/libmbtk_lib.so"
78
79static int sim_init_flag = 0;
80mbtk_info_handle_t* sim_info_handle = NULL;
81static int (*mbtk_info_handle_free)(mbtk_info_handle_t** handle);
82int (*mbtk_sim_state_get)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state);
83int (*mbtk_imsi_get)(mbtk_info_handle_t* handle, void *imsi);
84int (*mbtk_iccid_get)(mbtk_info_handle_t* handle, void *iccid);
85int (*mbtk_phone_number_get)(mbtk_info_handle_t* handle, void *phone_number);
86int (*mbtk_imei_get)(mbtk_info_handle_t* handle, void *imei);
87int (*mbtk_set_modem_fun)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info);
88int (*mbtk_sim_power_set)(int power);
89static void (*mbtk_log)(int level, const char *format, ...);
90static void (*mbtk_log_init)(char *path, char *tag);
91
92#ifndef LOG_ERR_LEVEL
93#define LOG_ERR_LEVEL 3 /* error conditions */
94#endif
95#ifndef LOG_WARN_LEVEL
96#define LOG_WARN_LEVEL 4 /* warning conditions */
97#endif
98#ifndef LOG_INFO_LEVEL
99#define LOG_INFO_LEVEL 6 /* informational */
100#endif
101#ifndef LOG_DEBUG_LEVEL
102#define LOG_DEBUG_LEVEL 7 /* debug-level messages */
103#endif
104#ifndef LOG_VERBOSE_LEVEL
105#define LOG_VERBOSE_LEVEL 8
106#endif
107
l.yang6a42e4d2025-05-28 01:04:20 -0700108#define GSW_SIM "[HAL][GSW_SIM]"
109
b.liu68a94c92025-05-24 12:53:41 +0800110#define LOGV(fmt, args ...) \
111 do{ \
112 char *file_ptr_1001 = __FILE__; \
113 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
114 char line_1001[10] = {0}; \
115 sprintf(line_1001, "%d", __LINE__); \
116 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
117 if(*ptr_1001 == '/') \
118 break; \
119 ptr_1001--; \
120 } \
l.yang6a42e4d2025-05-28 01:04:20 -0700121 mbtk_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +0800122 } while(0)
123
124#define LOGI(fmt, args...) \
125 do{ \
126 char *file_ptr_1001 = __FILE__; \
127 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
128 char line_1001[10] = {0}; \
129 sprintf(line_1001, "%d", __LINE__); \
130 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
131 if(*ptr_1001 == '/') \
132 break; \
133 ptr_1001--; \
134 } \
l.yang6a42e4d2025-05-28 01:04:20 -0700135 mbtk_log(LOG_INFO_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +0800136 } while(0)
137
138#define LOGD(fmt, args...) \
139 do{ \
140 char *file_ptr_1001 = __FILE__; \
141 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
142 char line_1001[10] = {0}; \
143 sprintf(line_1001, "%d", __LINE__); \
144 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
145 if(*ptr_1001 == '/') \
146 break; \
147 ptr_1001--; \
148 } \
l.yang6a42e4d2025-05-28 01:04:20 -0700149 mbtk_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +0800150 } while(0)
151
152#define LOGW(fmt, args...) \
153 do{ \
154 char *file_ptr_1001 = __FILE__; \
155 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
156 char line_1001[10] = {0}; \
157 sprintf(line_1001, "%d", __LINE__); \
158 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
159 if(*ptr_1001 == '/') \
160 break; \
161 ptr_1001--; \
162 } \
l.yang6a42e4d2025-05-28 01:04:20 -0700163 mbtk_log(LOG_WARN_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +0800164 } while(0)
165
166#define LOGE(fmt, args...) \
167 do{ \
168 char *file_ptr_1001 = __FILE__; \
169 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
170 char line_1001[10] = {0}; \
171 sprintf(line_1001, "%d", __LINE__); \
172 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
173 if(*ptr_1001 == '/') \
174 break; \
175 ptr_1001--; \
176 } \
l.yang6a42e4d2025-05-28 01:04:20 -0700177 mbtk_log(LOG_ERR_LEVEL, "%s#%s: "GSW_SIM"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +0800178 } while(0)
179
180
181
182
183static void *dlHandle_mbtk;
184
185
186static int gsw_sim_api_import()
187{
188 dlHandle_mbtk = dlopen(lib_mbtk_path, RTLD_NOW);
189 if (dlHandle_mbtk == NULL)
190 {
xy.heb41615b2025-05-28 16:33:20 +0800191 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800192 }
193
194 mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");
195 if (mbtk_log_init == NULL)
196 {
xy.heb41615b2025-05-28 16:33:20 +0800197 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800198 }
199
200 mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");
201 if (mbtk_log == NULL)
202 {
xy.heb41615b2025-05-28 16:33:20 +0800203 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800204 }
205
206 mbtk_info_handle_get = (mbtk_info_handle_t* (*)(void))dlsym(dlHandle_mbtk, "mbtk_info_handle_get");
207 if (mbtk_info_handle_get == NULL)
208 {
209 LOGE("mbtk_info_handle_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800210 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800211 }
212
213 mbtk_info_handle_free = (int (*)(mbtk_info_handle_t** handle))dlsym(dlHandle_mbtk, "mbtk_info_handle_free");
214 if (mbtk_info_handle_free == NULL)
215 {
216 LOGE("mbtk_info_handle_free dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800217 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800218 }
219
220 mbtk_imsi_get = (int (*)(mbtk_info_handle_t* handle, void *imsi))dlsym(dlHandle_mbtk, "mbtk_imsi_get");
221 if (mbtk_imsi_get == NULL)
222 {
223 LOGE("mbtk_imsi_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800224 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800225 }
226
227 mbtk_iccid_get = (int (*)(mbtk_info_handle_t* handle, void *iccid))dlsym(dlHandle_mbtk, "mbtk_iccid_get");
228 if (mbtk_iccid_get == NULL)
229 {
230 LOGE("mbtk_iccid_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800231 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800232 }
233
234 mbtk_phone_number_get = (int (*)(mbtk_info_handle_t* handle, void *phone_number))dlsym(dlHandle_mbtk, "mbtk_phone_number_get");
235 if (mbtk_phone_number_get == NULL)
236 {
237 LOGE("mbtk_phone_number_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800238 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800239 }
240
241 mbtk_imei_get = (int (*)(mbtk_info_handle_t* handle, void *imei))dlsym(dlHandle_mbtk, "mbtk_imei_get");
242 if (mbtk_imei_get == NULL)
243 {
244 LOGE("mbtk_imei_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800245 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800246 }
247
248 mbtk_sim_state_get = (int (*)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state))dlsym(dlHandle_mbtk, "mbtk_sim_state_get");
249 if (mbtk_sim_state_get == NULL)
250 {
251 LOGE("mbtk_sim_state_get dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800252 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800253 }
254
255 mbtk_set_modem_fun = (int (*)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info))dlsym(dlHandle_mbtk, "mbtk_set_modem_fun");
256 if (mbtk_set_modem_fun == NULL)
257 {
258 LOGE("mbtk_set_modem_fun dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800259 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800260 }
261
262 mbtk_sim_power_set = (int (*)(int power))dlsym(dlHandle_mbtk, "mbtk_sim_power_set");
263 if (mbtk_sim_power_set == NULL)
264 {
265 LOGE("mbtk_sim_power_set dlsym fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800266 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800267 }
268
269 LOGD("gsw_sim_api_import end\n");
270 return GSW_HAL_SUCCESS;
271}
272
273/**
274 * @brief sim sdk init
275 * @param [in] token usr id define by who use
276 * @retval 0: success
277 * @retval other: fail
278 */
279int gsw_sim_sdk_init(int32_t token)
280{
xy.heb41615b2025-05-28 16:33:20 +0800281 int ret = GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800282
283 if(sim_init_flag == 1 && sim_info_handle != NULL)
284 {
285 return GSW_HAL_SUCCESS;
286 }
287
288 ret = gsw_sim_api_import();
289 if(ret != GSW_HAL_SUCCESS)
290 {
291 if(mbtk_log != NULL)
292 {
293 LOGE("gsw_sim_import fail\n");
294 }
xy.heb41615b2025-05-28 16:33:20 +0800295 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800296 }
297
298 mbtk_log_init("syslog", "MBTK_RIL");
299
300 sim_info_handle = mbtk_info_handle_get();
301 if(sim_info_handle == NULL)
302 {
303 LOGE("mbtk_info_handle_get fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800304 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800305 }
306
307 sim_init_flag = 1;
308 return GSW_HAL_SUCCESS;
309}
310
311
312/**
313 * @brief sim sdk deinit
314 * @param
315 * @retval 0: success
316 * @retval other: fail
317 */
318int gsw_sim_sdk_deinit(void)
319{
320 int ret = -1;
321
322 if(sim_init_flag == 0 && sim_info_handle == NULL)
323 {
324 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800325 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800326 }
327
328 ret = mbtk_info_handle_free(&sim_info_handle);
329 if(ret != GSW_HAL_SUCCESS)
330 {
331 LOGE("mbtk_info_handle_free fail\n");
xy.heb41615b2025-05-28 16:33:20 +0800332 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800333 }
334
335 sim_init_flag = 0;
336 sim_info_handle = NULL;
337 dlclose(dlHandle_mbtk);
338
339 return GSW_HAL_SUCCESS;
340
341}
342
343
344/**
345 * @brief get sim state
346 * @param [out] sim_state sim status as sim_status_e_type
347 * @retval 0: success
348 * @retval other: fail
349 */
350int gsw_get_sim_status(int *sim_state)
351{
352 LOGD("gsw_get_sim_status enter\n");
353 int ret = -1;
354
355 if(sim_init_flag == 0 && sim_info_handle == NULL)
356 {
357 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800358 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800359 }
360
361 mbtk_sim_state_enum sim = MBTK_SIM_ABSENT;
362
363 LOGD("mbtk_get_sim_status start\n");
364 ret = mbtk_sim_state_get(sim_info_handle, &sim);
365 if(ret)
366 {
367 LOGE("[gsw_get_sim_status] mbtk_sim_state_get fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800368 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800369 }
370
371 else
372 {
373 LOGD("[gsw_get_sim_status] sim = %d\n", sim);
374 switch (sim)
375 {
376 case MBTK_SIM_ABSENT:
377 {
378 *sim_state = SIM_STATUS_ABSENT;
379 break;
380 }
381 case MBTK_SIM_NOT_READY:
382 {
q.huangba7f39c2025-06-06 18:44:46 +0800383 *sim_state = SIM_STATUS_ERROR;// not SIM_STATUS_PRESENT, changed for gsw requirement, hq at 250606
b.liu68a94c92025-05-24 12:53:41 +0800384 break;
385 }
386
387 case MBTK_SIM_READY:
388 {
q.huangba7f39c2025-06-06 18:44:46 +0800389 *sim_state = SIM_STATUS_PRESENT;// not SIM_STATUS_READY, changed for gsw requirement, hq at 250606
b.liu68a94c92025-05-24 12:53:41 +0800390 break;
391 }
392
393 case MBTK_SIM_PIN:
394 {
395 *sim_state = SIM_STATUS_PIN;
396 break;
397 }
398
399 case MBTK_SIM_PUK:
400 {
401 break;
402 }
403
404 case MBTK_SIM_NETWORK_PERSONALIZATION:
405 {
406 break;
407 }
408
409 }
410 }
411
412 return GSW_HAL_SUCCESS;
413}
414
415/**
416 * @brief get iccid function
417 * @param [in] len iccid length,max is 20
418 * @param [out] iccid return iccid from this func
419 * @retval 0: success
420 * @retval other: fail
421 */
422int gsw_get_sim_iccid(int len, char *iccid)
423{
424 int ret = -1;
425
426 if(sim_init_flag == 0 && sim_info_handle == NULL)
427 {
428 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800429 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800430 }
431
432 if(iccid == NULL)
433 {
434 LOGE("iccid is NULL.");
xy.heb41615b2025-05-28 16:33:20 +0800435 return GSW_HAL_ARG_INVALID;
b.liu68a94c92025-05-24 12:53:41 +0800436 }
437
438 if(len < GSW_SIM_ICCID_LENGTH)
439 {
440 LOGE("iccid len is too short,len = %d\n", len);
xy.heb41615b2025-05-28 16:33:20 +0800441 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800442 }
443
444 ret = mbtk_iccid_get(sim_info_handle, (void *)iccid);
445 if(ret != MBTK_ERR_OK)
446 {
447 LOGE("[gsw_sim] mbtk_iccid_get fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800448 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800449 }
450
451 return GSW_HAL_SUCCESS;
452}
453
454/**
455 * @brief get imsi function
456 * @param [in] len imsi length,max is 20
457 * @param [out] iccid return imsi from this func
458 * @retval 0: success
459 * @retval other: fail
460 */
461int gsw_get_sim_imsi(int len, char *imsi)
462{
463 int ret = -1;
464
465 if(sim_init_flag == 0 && sim_info_handle == NULL)
466 {
467 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800468 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800469 }
470
471 if(imsi == NULL)
472 {
473 LOGE("imsi is NULL.");
xy.heb41615b2025-05-28 16:33:20 +0800474 return GSW_HAL_ARG_INVALID;
b.liu68a94c92025-05-24 12:53:41 +0800475 }
476
477 if(len < GSW_SIM_IMSI_LENGTH)
478 {
479 LOGE("imsi len is too short,len = %d\n", len);
xy.heb41615b2025-05-28 16:33:20 +0800480 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800481 }
482
483 ret = mbtk_imsi_get(sim_info_handle, (void *)imsi);
484 if(ret != MBTK_ERR_OK)
485 {
486 LOGE("[gsw_sim] mbtk_imsi_get fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800487 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800488 }
489
490 return GSW_HAL_SUCCESS;
491}
492
493/**
494 * @brief get sim msisdn function
495 * @param [in] len msisdn length,max is 20
496 * @param [out] msisdn msisdn length,max is 20
497 * @retval 0: success
498 * @retval other: fail
499 */
500int gsw_get_sim_msisdn(int len, char *msisdn)
501{
502 int ret = -1;
503
504 if(sim_init_flag == 0 && sim_info_handle == NULL)
505 {
506 printf("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800507 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800508 }
509
510 if(msisdn == NULL)
511 {
512 printf("msisdn is NULL.");
xy.heb41615b2025-05-28 16:33:20 +0800513 return GSW_HAL_ARG_INVALID;
b.liu68a94c92025-05-24 12:53:41 +0800514 }
515
516 if(len < GSW_SIM_MSISDN_LENGTH)
517 {
518 printf("msisdn len is too short,len = %d\n", len);
xy.heb41615b2025-05-28 16:33:20 +0800519 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800520 }
521
522 ret = mbtk_phone_number_get(sim_info_handle, (void *)msisdn);
523 if(ret != MBTK_ERR_OK)
524 {
525 LOGE("[gsw_sim] mbtk_phone_number_get fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800526 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800527 }
528
529 return GSW_HAL_SUCCESS;
530}
531
532/**
533 * @brief get imei function
534 * @param [in] len imei length,max is 20
535 * @param [out] imei return imei from this func
536 * @retval 0: success
537 * @retval other: fail
538 */
539int gsw_get_imei(int len, char *imei)
540{
541 int ret = -1;
542
543 if(sim_init_flag == 0 && sim_info_handle == NULL)
544 {
545 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800546 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800547 }
548
549 if(imei == NULL)
550 {
551 LOGE("imei is NULL.");
xy.heb41615b2025-05-28 16:33:20 +0800552 return GSW_HAL_ARG_INVALID;
b.liu68a94c92025-05-24 12:53:41 +0800553 }
554
555 if(len < GSW_SIM_MSISDN_LENGTH)
556 {
557 LOGE("imei len is too short,len = %d\n", len);
xy.heb41615b2025-05-28 16:33:20 +0800558 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800559 }
560
561 ret = mbtk_imei_get(sim_info_handle, (void *)imei);
562 if(ret != MBTK_ERR_OK)
563 {
564 LOGE("[gsw_sim] mbtk_imei_get fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800565 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800566 }
567
568 return GSW_HAL_SUCCESS;
569}
570
571
572/**
573 * @brief set sim power down
574 * @param
575 * @retval 0: success
576 * @retval other: fail
577 */
578int gsw_set_sim_power_down(void)
579{
580 int ret = -1;
581 if(sim_init_flag == 0 && sim_info_handle == NULL)
582 {
583 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800584 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800585 }
586
587 ret = mbtk_sim_power_set(0);
588 if(ret != MBTK_ERR_OK)
589 {
590 LOGE("[gsw_sim] mbtk_sim_power_set fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800591 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800592 }
593 return GSW_HAL_SUCCESS;
594}
595
596
597
598/**
599 * @brief set sim power up
600 * @param
601 * @retval 0: success
602 * @retval other: fail
603 */
604int gsw_set_sim_power_up(void)
605{
606 int ret = -1;
607 if(sim_init_flag == 0 && sim_info_handle == NULL)
608 {
609 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800610 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800611 }
612
613 ret = mbtk_sim_power_set(1);
614 if(ret != MBTK_ERR_OK)
615 {
616 LOGE("[gsw_sim] mbtk_sim_power_set fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800617 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800618 }
619 return GSW_HAL_SUCCESS;
620}
621
622
623/**
624 * @brief reset modem stack only, notice: after use this method, all ril sdk
625 * need restart by app, means network, sim, sms, data need deinit then init!
626 * @param
627 * @retval 0: success
628 * @retval other: fail
629 */
630int gsw_reset_modem(void)
631{
632 int ret = -1;
633 if(sim_init_flag == 0 && sim_info_handle == NULL)
634 {
635 LOGE("sim sdk has been deinit\n");
xy.heb41615b2025-05-28 16:33:20 +0800636 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800637 }
638
639 mbtk_modem_info_t info;
640 info.fun = MBTK_DEV_MODEM_MIN_FUN;
641 info.rst = 0;
642
643 ret = mbtk_set_modem_fun(sim_info_handle, &info);
644 if(ret)
645 {
646 LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800647 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800648 }
649
650 sleep(1);
651
652 info.fun = MBTK_DEV_MODEM_FULL_FUN;
653 ret = mbtk_set_modem_fun(sim_info_handle, &info);
654 if(ret)
655 {
656 LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);
xy.heb41615b2025-05-28 16:33:20 +0800657 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800658 }
659 return GSW_HAL_SUCCESS;
660}