blob: 30e5ebaa269dc9f2630055c379c8e4bf9eec5107 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include "lynq_qser_network.h"
2#include "mbtk_type.h"
3#include "mbtk_info_api.h"
4#include "mbtk_log.h"
5
6#include <stdio.h>
7#include <stdlib.h>
8
9
10mbtk_info_handle_t* lynq_nw_info_handle = NULL;
11uint64_t tmp_mode = 0xFF;
12
13nw_client_handle_type g_nw_val = -1;
14
15typedef struct
16{
17 QSER_NW_RxMsgHandlerFunc_t handlerPtr;
18 void* contextPtr;
19} lynq_cust_cb_func;
20
21static lynq_cust_cb_func lynq_func_cb_handle;
22
23static int roaming_pref = 1; // Open roaming for default.
24
25typedef enum {
26 RADIO_TECH_3GPP = 1, /* 3GPP Technologies - GSM, WCDMA */
27 RADIO_TECH_3GPP2 = 2 /* 3GPP2 Technologies - CDMA */
28} RIL_RadioTechnologyFamily;
29
30
31typedef struct
32{
33 uint8 *lynq_operator_l;
34 uint8 *lynq_operator_s;
35 uint32 lynq_mcc_mnc;
36} lynq_operator_mcc_mnc_t;
37
38static lynq_operator_mcc_mnc_t lynq_operator_mcc_mnc[] =
39{
40 {(uint8*)"China Mobile",(uint8*)"CMCC",46000},
41 {(uint8*)"China Unicom",(uint8*)"CU",46001},
42 {(uint8*)"China Mobile",(uint8*)"CMCC",46002},
43 {(uint8*)"China Telecom",(uint8*)"CT",46003},
44 {(uint8*)"China Mobile",(uint8*)"CMCC",46004},
45 {(uint8*)"China Telecom",(uint8*)"CT",46005},
46 {(uint8*)"China Unicom",(uint8*)"CU",46006},
47 {(uint8*)"China Mobile",(uint8*)"CMCC",46007},
48 {(uint8*)"China Mobile",(uint8*)"CMCC",46008},
49 {(uint8*)"China Unicom",(uint8*)"CU",46009},
50 {(uint8*)"China Telecom",(uint8*)"CT",46011}
51};
52
53#if 0
54//T106的实现
55/*Used to wait for an update signal*/
56int lynq_wait_signalchanges(int *handle)
57{
58 LYDBGLOG("start wait signalchanges info");
59 if(NULL == handle)
60 {
61 LYERRLOG("illegal input");
62 return LYNQ_E_PARAMETER_ANONALY;
63 }
64 wait_urc_signal_changes();
65 LYDBGLOG("get signalchanges");
66 *handle = s_module_wait_urc_id;
67 return RESULT_OK;
68}
69
70bool is_support_urc(int urc_id)
71{
72 switch(urc_id)
73 {
74 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
75 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
76 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
77 case RIL_UNSOL_SIGNAL_STRENGTH:
78 return true;
79 default:
80 return false;
81 }
82}
83
84/*Used to get urc info*/
85int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
86{
87 if(g_module_init_flag != MODULE_RUNNING)
88 {
89 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
90 return -1;
91 }
92 LYDBGLOG("start get urc info");
93 if(is_support_urc(handle)==false)
94 {
95 LYINFLOG("invalid handle!!!");
96 return -1;
97 }
98 if((handle ==RIL_UNSOL_SIGNAL_STRENGTH && NULL == solSigStren) ||
99 (handle !=RIL_UNSOL_SIGNAL_STRENGTH && NULL == slot_id))
100 {
101 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
102 return -1;
103 }
104 switch(handle)
105 {
106 case RIL_UNSOL_SIGNAL_STRENGTH: //1009
107 {
108 LYDBGLOG("get state update to signal info");
109 solSigStren->gw_sig_valid = s_network_urc_solSigStren.gw_sig_valid;
110 solSigStren->rssi = s_network_urc_solSigStren.rssi;
111 solSigStren->wcdma_signalstrength = s_network_urc_solSigStren.wcdma_signalstrength;
112 solSigStren->wcdma_sig_valid = s_network_urc_solSigStren.wcdma_sig_valid;
113 solSigStren->rscp = s_network_urc_solSigStren.rscp;
114 solSigStren->ecno = s_network_urc_solSigStren.ecno;
115 solSigStren->lte_signalstrength = s_network_urc_solSigStren.lte_signalstrength;
116 solSigStren->lte_sig_valid = s_network_urc_solSigStren.lte_sig_valid;
117 solSigStren->rsrp = s_network_urc_solSigStren.rsrp;
118 solSigStren->rsrq = s_network_urc_solSigStren.rsrq;
119 solSigStren->rssnr = s_network_urc_solSigStren.rssnr;
120 solSigStren->nr_sig_valid = s_network_urc_solSigStren.nr_sig_valid;
121 solSigStren->ssRsrp = s_network_urc_solSigStren.ssRsrp;
122 solSigStren->ssRsrq = s_network_urc_solSigStren.ssRsrq;
123 solSigStren->ssSinr = s_network_urc_solSigStren.ssSinr;
124 solSigStren->csiRsrp = s_network_urc_solSigStren.csiRsrp;
125 solSigStren->csiRsrq = s_network_urc_solSigStren.csiRsrq;
126 solSigStren->csiSinr = s_network_urc_solSigStren.csiSinr;
127 break;
128 }
129 default:
130 {
131 *slot_id = s_module_urc_slot_id;
132 LYINFLOG("slot_id = %d",s_module_urc_slot_id);
133 }
134 }
135 return 0;
136}
137
138
139void urc_msg_process_voice_reg()
140{
141 if(s_handlerPtr != NULL)
142 {
143 s_handlerPtr(g_nw_val,NW_IND_VOICE_REG_EVENT_IND_FLAG,NULL,0,s_contextPtr);
144 }
145}
146
147void urc_msg_process_data_reg()
148{
149 if(s_handlerPtr != NULL)
150 {
151 s_handlerPtr(g_nw_val,NW_IND_DATA_REG_EVENT_IND_FLAG,NULL,0,s_contextPtr);
152 }
153}
154
155void urc_msg_process_ims_reg()
156{
157 if(s_handlerPtr != NULL)
158 {
159 s_handlerPtr(g_nw_val,NW_IND_IMS_REG_EVENT_IND_FLAG,NULL,0,s_contextPtr);
160 }
161}
162
163void *new_network_thread_recv(void *context)
164{
165 int handle = -1;
166 uint32_t ind_flag = 0;
167
168 while (1)
169 {
170 lynq_wait_signalchanges(&handle);
171
172 switch(handle)
173 {
174 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
175 {
176 urc_msg_process_voice_reg();
177
178 break;
179 }
180 case 3015://RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
181 {
182 urc_msg_process_data_reg();
183 break;
184 }
185 case 1009://RIL_UNSOL_SIGNAL_STRENGTH:
186 {
187 urc_msg_process_signal_strength();
188 break;
189 }
190 case 1037://RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
191 {
192 urc_msg_process_ims_reg();
193 break;
194 }
195 }
196 }
197 return NULL;
198}
199
200void urc_msg_process_signal_strength()
201{
202 signalStrength_t signalstrength;
203 int slot_id;
204
205 int ret = lynq_get_urc_info(1009,&signalstrength,&slot_id);
206 if (ret == 0)
207 {
208 QSER_NW_SINGNAL_EVENT_IND_T msg_buf;
209 msg_buf.gsm_sig_info_valid = signalstrength.gw_sig_valid;
210 msg_buf.gsm_sig_info.rssi = signalstrength.rssi;
211 msg_buf.wcdma_sig_info_valid = signalstrength.wcdma_sig_valid;
212 msg_buf.wcdma_sig_info.rssi = signalstrength.rscp;
213 msg_buf.wcdma_sig_info.ecio = signalstrength.ecno;
214 msg_buf.tdscdma_sig_info_valid = 0;
215 msg_buf.lte_sig_info_valid = signalstrength.lte_sig_valid;
216 msg_buf.lte_sig_info.rssi = -125;
217 msg_buf.lte_sig_info.rsrp = signalstrength.rsrp;
218 msg_buf.lte_sig_info.rsrq = signalstrength.rsrq;
219 msg_buf.lte_sig_info.snr = signalstrength.rssnr;
220 msg_buf.cdma_sig_info_valid = 0;
221 msg_buf.hdr_sig_info_valid = 0;
222 msg_buf.nr_sig_info_valid = signalstrength.nr_sig_valid;
223 msg_buf.nr_sig_info.ssRsrp = signalstrength.ssRsrp;
224 msg_buf.nr_sig_info.ssRsrq = signalstrength.ssRsrq;
225 msg_buf.nr_sig_info.ssSinr = signalstrength.ssSinr;
226 msg_buf.nr_sig_info.csiRsrp = signalstrength.csiRsrp;
227 msg_buf.nr_sig_info.csiRsrq = signalstrength.csiRsrq;
228 msg_buf.nr_sig_info.csiSinr = signalstrength.csiSinr;
229 void *ind_msg_buf= &msg_buf;
230 if(s_handlerPtr!=NULL)
231 {
232 s_handlerPtr(g_nw_val,NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG,ind_msg_buf,sizeof (msg_buf) ,s_contextPtr);
233 }
234 }
235}
236
237#endif
238
239static int8_t rssi_convert_to_dBm(uint8 rssi)
240{
241 if(rssi <= 31)
242 {
243 return rssi * 2 - 113;
244 }
245 else
246 {
247 return -125;
248 }
249}
250
251static int16_t rsrp_convert_to_dBm(uint8 rsrp)
252{
253 if(rsrp <= 96)
254 {
255 return rsrp - 140;
256 }
257 else
258 {
259 return -44;
260 }
261}
262
263static int16_t rsrq_convert_to_dB(uint8 rsrq)
264{
265 if(rsrq >= 1 && rsrq <= 34)
266 {
267 return (rsrq + 1) / 2 - 20;
268 }
269 else
270 {
271 return -20;
272 }
273}
274
275static int16_t ecno_convert_to_dB(uint8 ecno)
276{
277 if(ecno >= 48)
278 {
279 return 0;
280 }
281 else if(ecno == 255)
282 {
283 return 255;
284 }
285 else
286 {
287 return 48 - ecno;
288 }
289}
290
291void qser_signal_state_change_cb(const void* data, int data_len)
292{
293 /*
294 data_signal[0] = signal.type;
295 data_signal[1] = signal.rssi;
296 data_signal[2] = signal.rxlev;
297 data_signal[3] = signal.ber;
298 data_signal[4] = signal.rscp;
299 data_signal[5] = signal.ecno;
300 data_signal[6] = signal.rsrq;
301 data_signal[7] = signal.rsrp;
302 */
303 if(data && data_len == 8)
304 {
305 uint8 *net_data = (uint8*)data;
306 mbtk_radio_technology_enum type = (mbtk_radio_technology_enum)net_data[0];
307
308 QSER_NW_SINGNAL_EVENT_IND_T signal_msg_buf;
309 memset(&signal_msg_buf, 0x0, sizeof(QSER_NW_SINGNAL_EVENT_IND_T));
310
311 signal_msg_buf.gsm_sig_info_valid = FALSE;
312 signal_msg_buf.lte_sig_info_valid = FALSE;
313 signal_msg_buf.wcdma_sig_info_valid = FALSE;
314 signal_msg_buf.tdscdma_sig_info_valid = FALSE;
315 signal_msg_buf.cdma_sig_info_valid = FALSE;
316 signal_msg_buf.hdr_sig_info_valid = FALSE;
317 signal_msg_buf.nr_sig_info_valid = FALSE;
318
319 if(type == MBTK_RADIO_TECH_GSM || type == MBTK_RADIO_TECH_GSM_COMPACT || \
320 type == MBTK_RADIO_TECH_GSM_EGPRS) //GSM
321 {
322 signal_msg_buf.gsm_sig_info_valid = TRUE;
323 signal_msg_buf.gsm_sig_info.rssi = rssi_convert_to_dBm(net_data[1]);
324 }
325 else if(type == MBTK_RADIO_TECH_E_UTRAN) //LTE
326 {
327 signal_msg_buf.lte_sig_info_valid = TRUE;
328 signal_msg_buf.lte_sig_info.rssi = rssi_convert_to_dBm(net_data[1]);
329 signal_msg_buf.lte_sig_info.rsrp = rsrp_convert_to_dBm(net_data[7]);
330 signal_msg_buf.lte_sig_info.rsrq = rsrq_convert_to_dB(net_data[6]);
331 signal_msg_buf.lte_sig_info.snr = 0x7FFF;//(当前mbtk没有该参数)
332 }
333 else if (type == MBTK_RADIO_TECH_UTRAN || type == MBTK_RADIO_TECH_UTRAN_HSDPA || \
334 type == MBTK_RADIO_TECH_UTRAN_HSUPA || type == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
335 type == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
336 {
337 signal_msg_buf.wcdma_sig_info_valid = TRUE;
338 signal_msg_buf.wcdma_sig_info.rssi = rssi_convert_to_dBm(net_data[1]);
339 signal_msg_buf.wcdma_sig_info.ecio = ecno_convert_to_dB(net_data[5]);
340 }
341
342 if(lynq_func_cb_handle.handlerPtr != NULL)
343 {
344 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG, (void *)&signal_msg_buf, sizeof(QSER_NW_SINGNAL_EVENT_IND_T), lynq_func_cb_handle.contextPtr);
345 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_VOICE_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
346 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
347 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_IMS_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
348 }
349 }
350 else
351 {
352 LOGD("qser_nw_state_change_cb : NULL");
353 }
354
355}
356
357static uint8 lynq_net_pre_change(bool mbtk_2_lynq,int net_mode)
358{
359 uint8 mbtk_net_pre = 0xFF;
360
361#if 0
362 此参数表在别处使用
363 E_QSER_NW_RADIO_TECH_TD_SCDMA = 1, Y3 1
364 E_QSER_NW_RADIO_TECH_GSM = 2, /**< GSM; only supports voice. */ YL2 0
365 E_QSER_NW_RADIO_TECH_HSPAP = 3, /**< HSPA+. */ 3 1
366 E_QSER_NW_RADIO_TECH_LTE = 4, /**< LTE. */ 4 5
367 E_QSER_NW_RADIO_TECH_EHRPD = 5, /**< EHRPD. */ 3 1
368 E_QSER_NW_RADIO_TECH_EVDO_B = 6, /**< EVDO B. */ D3 1
369 E_QSER_NW_RADIO_TECH_HSPA = 7, /**< HSPA. */ 3 1
370 E_QSER_NW_RADIO_TECH_HSUPA = 8, /**< HSUPA. */ 3.5 1
371 E_QSER_NW_RADIO_TECH_HSDPA = 9, /**< HSDPA. */ 3.5 1
372 E_QSER_NW_RADIO_TECH_EVDO_A = 10, /**< EVDO A. */ D3 1
373 E_QSER_NW_RADIO_TECH_EVDO_0 = 11, /**< EVDO 0. */ D3 1
374 E_QSER_NW_RADIO_TECH_1xRTT = 12, /**< 1xRTT. */ 2 0
375 E_QSER_NW_RADIO_TECH_IS95B = 13, /**< IS95B. */ 3 0
376 E_QSER_NW_RADIO_TECH_IS95A = 14, /**< IS95A. */ 3 0
377 E_QSER_NW_RADIO_TECH_UMTS = 15, /**< UMTS. */ L3 1
378 E_QSER_NW_RADIO_TECH_EDGE = 16, /**< EDGE. */ 2.75 0
379 E_QSER_NW_RADIO_TECH_GPRS = 17, /**< GPRS. */ 2.5 0
380 E_QSER_NW_RADIO_TECH_NONE = 18 /**< No technology selected. */
381#endif
382 /*
383 0 : GSM only
384 1 : UMTS only
385 2 : GSM/UMTS(auto)
386 3 : GSM/UMTS(GSM preferred)
387 4 : GSM/UMTS(UMTS preferred)
388 5 : LTE only
389 6 : GSM/LTE(auto)
390 7 : GSM/LTE(GSM preferred)
391 8 : GSM/LTE(LTE preferred)
392 9 : UMTS/LTE(auto)
393 10 : UMTS/LTE(UMTS preferred)
394 11 : UMTS/LTE(LTE preferred)
395 12 : GSM/UMTS/LTE(auto)
396 13 : GSM/UMTS/LTE(GSM preferred)
397 14 : GSM/UMTS/LTE(UMTS preferred)
398 15 : GSM/UMTS/LTE(LTE preferred)
399 */
400
401 if(mbtk_2_lynq)
402 {
403 switch(net_mode)
404 {
405 //使用之前set的tmp_mode的值来进行回显get
406 case QSER_NW_MODE_GSM:
407 mbtk_net_pre = QSER_NW_MODE_GSM;
408 break;
409 case QSER_NW_MODE_WCDMA:
410 mbtk_net_pre = QSER_NW_MODE_WCDMA;
411 break;
412 case QSER_NW_MODE_CDMA:
413 mbtk_net_pre = QSER_NW_MODE_CDMA;
414 break;
415 case QSER_NW_MODE_EVDO:
416 mbtk_net_pre = QSER_NW_MODE_EVDO;
417 break;
418 case QSER_NW_MODE_LTE:
419 mbtk_net_pre = QSER_NW_MODE_LTE;
420 break;
421 case QSER_NW_MODE_TDSCDMA:
422 mbtk_net_pre = QSER_NW_MODE_TDSCDMA;
423 break;
424 default:
425 mbtk_net_pre = 0xFF;
426 break;
427 }
428 }
429 else
430 {
431 if(QSER_NW_MODE_GSM == net_mode)
432 {
433 mbtk_net_pre = MBTK_NET_PREF_GSM_ONLY;
434 }
435 else if(QSER_NW_MODE_WCDMA == net_mode)
436 {
437 mbtk_net_pre = MBTK_NET_PREF_UMTS_ONLY;
438 }
439 else if(QSER_NW_MODE_LTE == net_mode)
440 {
441 mbtk_net_pre = MBTK_NET_PREF_LTE_ONLY;
442 }
443 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA) == net_mode)
444 {
445 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_UMTS_PREF;
446 }
447 else if((QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
448 {
449 mbtk_net_pre = MBTK_NET_PREF_UMTS_LTE_LTE_PREF;
450 }
451 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_LTE) == net_mode)
452 {
453 mbtk_net_pre = MBTK_NET_PREF_GSM_LTE_LTE_PREF;
454 }
455 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
456 {
457 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF;
458 }
459 else
460 {
461 mbtk_net_pre = 0xFF;
462 }
463 }
464 return mbtk_net_pre;
465}
466
467int qser_nw_client_init(nw_client_handle_type *ph_nw)
468{
469 //UNUSED(ph_nw);
470
471 if(lynq_nw_info_handle == NULL)
472 {
473 lynq_nw_info_handle = mbtk_info_handle_get();
474 if(lynq_nw_info_handle)
475 {
476 LOGI("creat lynq_nw_info_handle is success");
477 *ph_nw = lynq_nw_info_handle->client_fd;
478 g_nw_val = lynq_nw_info_handle->client_fd;
479 }
480 else
481 {
482 LOGE("creat lynq_nw_info_handle is fail");
483 return -1;
484 }
485 }
486
487 return 0;
488}
489
490int qser_nw_client_deinit(nw_client_handle_type h_nw)
491{
492 //UNUSED(h_nw);
493 if (h_nw != g_nw_val || g_nw_val == -1)
494 {
495 LOGE("handle NULL");
496 return -1;
497 }
498
499 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, NULL);
500
501 if(lynq_nw_info_handle)
502 {
503 mbtk_info_handle_free(&lynq_nw_info_handle);
504 }
505 else
506 {
507 LOGE("deinit lynq_nw_info_handle is fail");
508 return -1;
509 }
510
511 return 0;
512}
513
514int qser_nw_set_config(nw_client_handle_type h_nw,QSER_NW_CONFIG_INFO_T *pt_info)
515{
516 //UNUSED(h_nw);
517 //UNUSED(pt_info);
518 if (h_nw != g_nw_val || g_nw_val == -1)
519 {
520 LOGE("handle NULL");
521 return -1;
522 }
523
524 if(lynq_nw_info_handle == NULL)
525 {
526 LOGE("lynq_nw_info_handle == NULL.");
527 return -1;
528 }
529
530 if(pt_info == NULL)
531 {
532 LOGE("pt_info == NULL.");
533 return -1;
534 }
535
536 roaming_pref = pt_info->roaming_pref;
537
538 mbtk_band_info_t band;
539 memset(&band, 0, sizeof(mbtk_band_info_t));
540 tmp_mode = pt_info->preferred_nw_mode;//临时保存一下原本的mode
541
542 //printf("tmp_mode = [%llu]",tmp_mode);
543 band.net_pref = lynq_net_pre_change(FALSE, pt_info->preferred_nw_mode);
544 LOGI("band.net_pref = [%d] ",band.net_pref);
545
546 if(band.net_pref == 0xFF)
547 {
548 LOGE("lynq_net_pre_change() fail.");
549 return -1;
550 }
551
552 if(mbtk_current_band_set(lynq_nw_info_handle, &band))
553 {
554 return -1;
555 }
556
557 return 0;
558}
559
560int qser_nw_get_operator_name(nw_client_handle_type h_nw, QSER_NW_OPERATOR_NAME_INFO_T *pt_info)
561{
562 //UNUSED(h_nw);
563 //UNUSED(pt_info);
564 if (h_nw != g_nw_val || g_nw_val == -1)
565 {
566 LOGE("handle NULL");
567 return -1;
568 }
569
570 if(lynq_nw_info_handle == NULL)
571 {
572 LOGE("lynq_nw_info_handle == NULL.");
573 return -1;
574 }
575
576 if(pt_info == NULL)
577 {
578 LOGE("pt_info == NULL.");
579 return -1;
580 }
581
582 char OperatorFN[128];
583 char OperatorSH[128];
584 char MccMnc[128];
585 mbtk_net_info_t net;
586 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
587 {
588 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
589 int i = 0;
590 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
591 {
592 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
593 break;
594 i++;
595 }
596
597 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
598 {
599 strcpy(OperatorFN, "UNKNOWN");
600 strcpy(OperatorSH, "UNKNOWN");
601 sprintf(MccMnc, "%d", net.plmn);
602 }
603 else
604 {
605 strcpy(OperatorFN, (char*)lynq_operator_mcc_mnc[i].lynq_operator_l);
606 strcpy(OperatorSH, (char*)lynq_operator_mcc_mnc[i].lynq_operator_s);
607 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
608 }
609 memset(pt_info->long_eons,0,128);
610 memcpy(pt_info->long_eons,lynq_operator_mcc_mnc[i].lynq_operator_l,strlen((char*)lynq_operator_mcc_mnc[i].lynq_operator_l));
611 memset(pt_info->short_eons,0,128);
612 memcpy(pt_info->short_eons,lynq_operator_mcc_mnc[i].lynq_operator_s,strlen((char*)lynq_operator_mcc_mnc[i].lynq_operator_s));
613 memset(pt_info->mcc,0,4);
614 memset(pt_info->mnc,0,4);
615 sprintf(pt_info->mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
616 sprintf(pt_info->mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
617 //pt_info->act;
618 return 0;
619 }
620
621 return -1;
622}
623
624int qser_nw_get_reg_status(nw_client_handle_type h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info)
625{
626 //UNUSED(h_nw);
627 //UNUSED(pt_info);
628 if (h_nw != g_nw_val || g_nw_val == -1)
629 {
630 LOGE("handle NULL");
631 return -1;
632 }
633
634 if(lynq_nw_info_handle == NULL)
635 {
636 LOGE("lynq_nw_info_handle == NULL.");
637 return -1;
638 }
639
640 if(pt_info == NULL)
641 {
642 LOGE("pt_info == NULL.");
643 return -1;
644 }
645
646 /*VOICE/DATA/IMS*/
647 mbtk_net_reg_info_t reg;
648 int err = mbtk_net_reg_get(lynq_nw_info_handle, &reg);
649 if(err)
650 {
651 LOGE("mbtk_net_reg_get fail.");
652 return -1;
653 }
654 else
655 {
656 memset(pt_info, 0x0, sizeof(QSER_NW_REG_STATUS_INFO_T));
657
658
659 char OperatorFN[128];
660 char OperatorSH[128];
661 char MccMnc[128];
662 mbtk_net_info_t net;
663 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
664 {
665 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
666 int i = 0;
667 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
668 {
669 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
670 break;
671 i++;
672 }
673
674 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
675 {
676 strcpy(OperatorFN, "UNKNOWN");
677 strcpy(OperatorSH, "UNKNOWN");
678 sprintf(MccMnc, "%d", net.plmn);
679 }
680 else
681 {
682 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
683 }
684 sprintf(pt_info->data_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
685 sprintf(pt_info->data_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
686 sprintf(pt_info->voice_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
687 sprintf(pt_info->voice_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
688 //pt_info->act;
689 }
690
691 //暂时未知是否其他也被使用,现根据ql模块的传输情况,
692 //只配置3gpp,涉及call,data状态没有对应的匹配的就没有赋值
693
694 pt_info->voice_registration_valid = TRUE;
695 pt_info->voice_registration.deny_reason = 0;
696 pt_info->voice_registration.roaming = 0;
697 pt_info->voice_registration.tech_domain = 0;
698
699
700 pt_info->data_registration_valid = TRUE;
701 pt_info->data_registration.deny_reason = 0;
702 pt_info->data_registration.roaming = 0;
703 pt_info->data_registration.tech_domain = 0;
704
705 if (reg.call_state == 1 || reg.call_state == 5)
706 {
707 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_FULL;
708 }
709 else if (reg.call_state == 0 || reg.call_state == 2 || reg.call_state == 3 || reg.call_state == 4)
710 {
711 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
712 }
713
714 if (reg.data_state == 1 || reg.data_state == 5)
715 {
716 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_FULL;
717 }
718 else if (reg.data_state == 0 || reg.data_state == 2 || reg.data_state == 3 || reg.data_state == 4)
719 {
720 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
721 }
722
723
724 pt_info->voice_registration_details_3gpp_valid = TRUE;
725 pt_info->voice_registration_details_3gpp.lac = reg.lac;
726 pt_info->voice_registration_details_3gpp.cid = reg.ci;
727 //补位填0 or 1
728 pt_info->voice_registration_details_3gpp.tech_domain = 1;
729 pt_info->voice_registration_details_3gpp.roaming = 0;
730 pt_info->voice_registration_details_3gpp.forbidden = 0;
731 pt_info->voice_registration_details_3gpp.psc = 0;
732 pt_info->voice_registration_details_3gpp.tac = 0;
733
734 pt_info->data_registration_details_3gpp_valid = TRUE;
735 pt_info->data_registration_details_3gpp.lac = reg.lac;
736 pt_info->data_registration_details_3gpp.cid = reg.ci;
737 //补位填0 or 1
738 pt_info->data_registration_details_3gpp.tech_domain = 1;
739 pt_info->data_registration_details_3gpp.roaming = 0;
740 pt_info->data_registration_details_3gpp.forbidden = 0;
741 pt_info->data_registration_details_3gpp.psc = 0;
742 pt_info->data_registration_details_3gpp.tac = 0;
743
744
745 pt_info->voice_registration_details_3gpp2_valid = FALSE;
746 //pt_info->voice_registration_details_3gpp2
747
748 pt_info->data_registration_details_3gpp2_valid = FALSE;
749 //pt_info->data_registration_details_3gpp2
750
751
752 switch(reg.type)
753 {
754 case MBTK_RADIO_TECH_GSM:
755 case MBTK_RADIO_TECH_GSM_COMPACT:
756 case MBTK_RADIO_TECH_GSM_EGPRS:
757 case MBTK_RADIO_TECH_UTRAN_HSPA:
758 {
759 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
760 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
761 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
762 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
763 break;
764 }
765 case MBTK_RADIO_TECH_UTRAN:
766 case MBTK_RADIO_TECH_UTRAN_HSDPA:
767 case MBTK_RADIO_TECH_UTRAN_HSUPA:
768 case MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA:
769 {
770 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
771 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
772 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
773 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
774 break;
775 }
776 case MBTK_RADIO_TECH_E_UTRAN:
777 {
778 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
779 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
780 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
781 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
782 break;
783 }
784 default:
785 {
786 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
787 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
788 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
789 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
790 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
791 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
792 break;
793 }
794 }
795 }
796
797 return 0;
798}
799
800int qser_nw_get_signal_strength(nw_client_handle_type h_nw,QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info)
801{
802 //UNUSED(h_nw);
803 //UNUSED(pt_info);
804 if (h_nw != g_nw_val || g_nw_val == -1)
805 {
806 LOGE("handle NULL");
807 return -1;
808 }
809
810 if(lynq_nw_info_handle == NULL)
811 {
812 LOGE("lynq_nw_info_handle == NULL.");
813 return -1;
814 }
815
816 if(pt_info == NULL)
817 {
818 LOGE("pt_info == NULL.");
819 return -1;
820 }
821
822 int ret;
823 mbtk_signal_info_t signal;
824 ret = mbtk_net_signal_get(lynq_nw_info_handle, &signal);
825 if(ret != 0) {
826 LOGE("mbtk_net_signal_get fail.");
827 return -1;
828 }
829 else
830 {
831 memset(pt_info, 0x0, sizeof(QSER_NW_SIGNAL_STRENGTH_INFO_T));
832 if(signal.type == MBTK_RADIO_TECH_GSM || signal.type == MBTK_RADIO_TECH_GSM_COMPACT || \
833 signal.type == MBTK_RADIO_TECH_GSM_EGPRS) //GSM
834 {
835 pt_info->gsm_sig_info_valid = TRUE;
836 pt_info->gsm_sig_info.rssi = rssi_convert_to_dBm(signal.rssi);
837 }
838 else if(signal.type == MBTK_RADIO_TECH_E_UTRAN) //LTE
839 {
840 pt_info->lte_sig_info_valid = TRUE;
841 pt_info->lte_sig_info.rsrp = rsrp_convert_to_dBm(signal.rsrp);
842 pt_info->lte_sig_info.rsrq = rsrq_convert_to_dB(signal.rsrq);
843 pt_info->lte_sig_info.snr = 0x7FFF;//->MBTK接口无该参数(对应参数为rssnr,该值INT_MAX:0x7FFFFFFFF表示无效值),写死值为0x7FFFFFFFF
844 pt_info->lte_sig_info.rssi = rssi_convert_to_dBm(signal.rssi);
845 }
846 else if (signal.type == MBTK_RADIO_TECH_UTRAN || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA || \
847 signal.type == MBTK_RADIO_TECH_UTRAN_HSUPA || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
848 signal.type == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
849 {
850 pt_info->wcdma_sig_info_valid = TRUE;
851 pt_info->wcdma_sig_info.rssi = rssi_convert_to_dBm(signal.rssi);
852 pt_info->wcdma_sig_info.ecio = ecno_convert_to_dB(signal.ecno);
853 }
854 else
855 {
856 return -1;
857 }
858 /*
859 pt_info->gsm_sig_info_valid = 1//signal.gw_sig_valid;
860 pt_info->gsm_sig_info.rssi = signal.rssi;//signal.rssi-110;
861 pt_info->wcdma_sig_info_valid = 1//signal.wcdma_sig_valid;
862 pt_info->wcdma_sig_info.rssi = signal.rscp;//signal.wcdma_signalstrength-110;
863 pt_info->wcdma_sig_info.ecio = //signal.ecno/5;
864 pt_info->tdscdma_sig_info_valid = 0;
865 pt_info->lte_sig_info_valid = 1//signal.lte_sig_valid;
866 pt_info->lte_sig_info.rssi = -125;//signal.lte_signalstrength-110;
867 pt_info->lte_sig_info.rsrp = signal.rsrp;//signal.rsrp*(-1);
868 pt_info->lte_sig_info.rsrq = signal.rsrq;//signal.rsrq*(-1);
869 pt_info->lte_sig_info.snr = 0x7FFFFFFFF;//signal.rssnr;
870 pt_info->cdma_sig_info_valid = 0;
871 pt_info->hdr_sig_info_valid = 0;
872 //mbtk 无nr
873 pt_info->nr_sig_info_valid = 0//signal.nr_sig_valid;
874 pt_info->nr_sig_info.ssRsrp = 0//signal.ssRsrp;
875 pt_info->nr_sig_info.ssRsrq = 0//signal.ssRsrq;
876 pt_info->nr_sig_info.ssSinr = 0//signal.ssSinr;
877 pt_info->nr_sig_info.csiRsrp = 0//signal.csiRsrp;
878 pt_info->nr_sig_info.csiRsrq = 0//signal.csiRsrq;
879 pt_info->nr_sig_info.csiSinr = 0//signal.csiSinr;
880 */
881 }
882
883 return 0;
884}
885
886int qser_nw_add_rx_msg_handler (nw_client_handle_type h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr, void* contextPtr)
887{
888 //UNUSED(h_nw);
889 //UNUSED(handlerPtr);
890 //UNUSED(contextPtr);
891
892 if (h_nw != g_nw_val || g_nw_val == -1)
893 {
894 LOGE("handle NULL");
895 return -1;
896 }
897
898 if(lynq_nw_info_handle == NULL)
899 {
900 LOGE("lynq_nw_info_handle == NULL.");
901 return -1;
902 }
903
904 lynq_func_cb_handle.handlerPtr = handlerPtr;
905 lynq_func_cb_handle.contextPtr = contextPtr;
906
907 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, qser_signal_state_change_cb);
908
909 return 0;
910}
911
912int qser_nw_set_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
913{
914 //UNUSED(h_nw);
915 //UNUSED(pt_info);
916 if (h_nw != g_nw_val || g_nw_val == -1)
917 {
918 LOGE("handle NULL");
919 return -1;
920 }
921
922 if (pt_info == NULL)
923 {
924 LOGE("QSER_NW_OOS_CONFIG_INFO_T NULL");
925 return -1;
926 }
927
928 uint32 oosPhase_0, oosPhase_1, oosPhase_2;
929 char tmp_type;
930 mbtk_oos_info oos_info;
931
932 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
933
934
935 tmp_type = pt_info->type;
936
937 if (tmp_type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
938 {//如果没有配置对应的值,例如,10,20
939 //oosPhase_2这个位置没有配置,则使用默认值20,既不限制次数的5s进行一次扫描
940 //同理oosPhase_0,oosPhase_1这个位置没有配置,则使用默认值5,10,既限制次数5次的5s,10s进行一次扫描
941 //输入多少配置多少,可以缺省使用默认值
942 if (pt_info->u.full_band_scan_info.t_min < 0 || pt_info->u.full_band_scan_info.t_step < 0 || pt_info->u.full_band_scan_info.t_max < 0)
943 {
944 LOGE("qser_nw_set_oos_config set time < 0 ");
945 return -1;
946 }
947 else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && pt_info->u.full_band_scan_info.t_step == 0 && pt_info->u.full_band_scan_info.t_max == 0)
948 {
949 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
950 oos_info.mode = 1;
951 oos_info.oosPhase[0] = oosPhase_0;
952 }
953 else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && (pt_info->u.full_band_scan_info.t_step > 0 && pt_info->u.full_band_scan_info.t_step <= 255) && pt_info->u.full_band_scan_info.t_max == 0)
954 {
955 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
956 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
957 oos_info.mode = 1;
958 oos_info.oosPhase[0] = oosPhase_0;
959 oos_info.oosPhase[1] = oosPhase_1;
960 }
961 else if ((pt_info->u.full_band_scan_info.t_min > 0 && pt_info->u.full_band_scan_info.t_min <= 255) && (pt_info->u.full_band_scan_info.t_step > 0 && pt_info->u.full_band_scan_info.t_step <= 255) && (pt_info->u.full_band_scan_info.t_max > 0 && pt_info->u.full_band_scan_info.t_max <= 255))
962 {
963 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
964 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
965 oosPhase_2 = pt_info->u.full_band_scan_info.t_max;
966 oos_info.mode = 1;
967 oos_info.oosPhase[0] = oosPhase_0;
968 oos_info.oosPhase[1] = oosPhase_1;
969 oos_info.oosPhase[2] = oosPhase_2;
970 }
971 else if (pt_info->u.full_band_scan_info.t_min == 0 && pt_info->u.full_band_scan_info.t_step == 0 && pt_info->u.full_band_scan_info.t_max == 0)
972 {
973 oos_info.mode = 0;
974 }
975 else
976 {
977 LOGE("qser_nw_set_oos_config set Format err");
978 return -1;
979 }
980
981 int err = mbtk_oos_set(lynq_nw_info_handle, &oos_info);
982 if (err != 0)
983 {
984 LOGE("qser_nw_set_oos_config mbtk_oos_set err");
985 return -1;
986 }
987 }
988 else if (tmp_type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
989 {
990 LOGE("Not currently supported");
991 return -1;
992 }
993 else
994 {
995 LOGE("type is error");
996 return -1;
997 }
998
999 return 0;
1000}
1001
1002int qser_nw_get_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
1003{
1004 //UNUSED(h_nw);
1005 //UNUSED(pt_info);
1006 if (h_nw != g_nw_val || g_nw_val == -1)
1007 {
1008 LOGE("handle NULL");
1009 return -1;
1010 }
1011
1012 mbtk_oos_info oos_info;
1013// uint32 oosPhase_0, oosPhase_1, oosPhase_2;
1014// char cmd[100] = {0};
1015
1016 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
1017
1018 int err = mbtk_oos_get(lynq_nw_info_handle, &oos_info);
1019 if (err != 0)
1020 {
1021 LOGE("qser_nw_get_oos_config mbtk_oos_get err ");
1022 return -1;
1023 }
1024/*
1025 printf("oos_info.mode =[%d] \n",oos_info.mode);
1026 printf("oos_info.1 =[%d] \n",oos_info.oosPhase[0]);
1027 printf("oos_info.2 =[%d] \n",oos_info.oosPhase[1]);
1028 printf("oos_info.3 =[%d] \n",oos_info.oosPhase[2]);
1029*/
1030 if(oos_info.mode == 0)//关闭状态
1031 {
1032 pt_info->u.full_band_scan_info.t_min = 0;
1033 pt_info->u.full_band_scan_info.t_step = 0;
1034 pt_info->u.full_band_scan_info.t_max = 0;
1035 }
1036 else
1037 {
1038 pt_info->u.full_band_scan_info.t_min = (int)oos_info.oosPhase[0];
1039 pt_info->u.full_band_scan_info.t_step = (int)oos_info.oosPhase[1];
1040 pt_info->u.full_band_scan_info.t_max = (int)oos_info.oosPhase[2];
1041 }
1042 pt_info->type = QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN;
1043
1044
1045 if (pt_info == NULL)
1046 {
1047 LOGE("qser_nw_get_oos_config pt_info is null ");
1048 return -1;
1049 }
1050
1051 return 0;
1052}
1053
1054int qser_nw_set_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T rf_mode)
1055{
1056 //UNUSED(h_nw);
1057 //UNUSED(rf_mode);
1058 int ret;
1059 mbtk_modem_info_t info;
1060
1061 if (h_nw != g_nw_val || g_nw_val == -1)
1062 {
1063 LOGE("handle NULL");
1064 return -1;
1065 }
1066
1067 if(lynq_nw_info_handle == NULL)
1068 {
1069 LOGE("lynq_nw_info_handle == NULL.");
1070 return -1;
1071 }
1072
1073/*
1074 if (rf_mode == 4)
1075 {
1076 printf("Flight Mode no Support Now\n");
1077 return -1;
1078 }
1079*/
1080 if (rf_mode != 4 && rf_mode != 0 && rf_mode != 1)
1081 {
1082 LOGE("mode is error!");
1083 return -1;
1084 }
1085
1086 info.fun = rf_mode;
1087 info.rst = 0;
1088 ret = mbtk_set_modem_fun(lynq_nw_info_handle, &info);
1089
1090 //ret = mbtk_radio_state_set(lynq_nw_info_handle, rf_mode);
1091 if (ret != 0)
1092 {
1093 LOGE("mbtk_radio_state_set fail.");
1094 return -1;
1095 }
1096 else
1097 {
1098 LOGI("qser_nw_set_rf_mode is success\n");
1099 }
1100
1101 return 0;
1102}
1103
1104int qser_nw_get_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T *rf_mode)
1105{
1106 //UNUSED(h_nw);
1107 //UNUSED(rf_mode);
1108 int ret;
1109 int tmp_rf;
1110
1111 if (h_nw != g_nw_val || g_nw_val == -1)
1112 {
1113 LOGE("handle NULL");
1114 return -1;
1115 }
1116
1117 if(lynq_nw_info_handle == NULL)
1118 {
1119 LOGE("lynq_nw_info_handle == NULL.");
1120 return -1;
1121 }
1122
1123 ret = mbtk_get_modem_fun(lynq_nw_info_handle, &tmp_rf);
1124
1125 //ret = mbtk_radio_state_get(lynq_nw_info_handle, &tmp_rf);
1126 if (ret != 0)
1127 {
1128 LOGE("mbtk_radio_state_get fail.");
1129 return -1;
1130 }
1131 else
1132 {
1133 LOGI("qser_nw_get_rf_mode is success\n");
1134 *rf_mode = tmp_rf;
1135 }
1136
1137
1138 return 0;
1139}
1140
1141int qser_nw_set_ims_enable(nw_client_handle_type h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode)
1142{
1143 int ret = 0;
1144
1145 if (h_nw != g_nw_val || g_nw_val == -1)
1146 {
1147 LOGE("handle NULL");
1148 return -1;
1149 }
1150
1151 if(lynq_nw_info_handle == NULL)
1152 {
1153 LOGE("lynq_nw_info_handle == NULL.");
1154 return -1;
1155 }
1156
1157 ret = mbtk_net_ims_set(lynq_nw_info_handle, ims_mode);
1158 if (ret != 0)
1159 {
1160 LOGE("mbtk_net_ims_set fail.");
1161 return -1;
1162 }
1163
1164 return 0;
1165}
1166
1167int qser_nw_get_ims_reg_status(nw_client_handle_type h_nw, QSER_NW_IMS_REG_STATUS_INFO_T *pt_info)
1168{
1169 int ret = 0;
1170 int tmp_pt;
1171
1172 if (h_nw != g_nw_val || g_nw_val == -1)
1173 {
1174 LOGE("handle NULL");
1175 return -1;
1176 }
1177
1178 if(lynq_nw_info_handle == NULL)
1179 {
1180 LOGE("lynq_nw_info_handle == NULL.");
1181 return -1;
1182 }
1183
1184 ret = mbtk_net_ims_reg_state_get(lynq_nw_info_handle, &tmp_pt);
1185 if (ret != 0)
1186 {
1187 LOGE("mbtk_net_ims_get fail.");
1188 return -1;
1189 }
1190
1191 if (tmp_pt == 0)
1192 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_NONE;
1193 else if (tmp_pt == 1)
1194 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_REGISTERED;
1195 else
1196 {
1197 LOGE("mbtk_net_ims_get value error fail.");
1198 return -1;
1199 }
1200
1201 return 0;
1202}
1203
1204