blob: f53c8dcb8c91767b1913bb996d82b8154e4aa1e7 [file] [log] [blame]
b.liu4e243dc2023-11-27 11:20:00 +08001#include "lynq_qser_network.h"
r.xiaoe73f8702024-01-06 01:40:03 -08002#include "mbtk_type.h"
3#include "mbtk_info_api.h"
r.xiaoba8483c2024-04-14 18:53:10 -07004#include "mbtk_log.h"
r.xiaoe73f8702024-01-06 01:40:03 -08005
6#include <stdio.h>
7#include <stdlib.h>
8
r.xiaofca7c472024-04-24 01:00:23 -07009
r.xiaoe73f8702024-01-06 01:40:03 -080010mbtk_info_handle_t* lynq_nw_info_handle = NULL;
11uint64_t tmp_mode = 0xFF;
12
13nw_client_handle_type g_nw_val = -1;
14
r.xiaoe73f8702024-01-06 01:40:03 -080015typedef 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 {"China Mobile","CMCC",46000},
41 {"China Unicom","CU",46001},
42 {"China Mobile","CMCC",46002},
43 {"China Telecom","CT",46003},
44 {"China Mobile","CMCC",46004},
45 {"China Telecom","CT",46005},
46 {"China Unicom","CU",46006},
47 {"China Mobile","CMCC",46007},
48 {"China Mobile","CMCC",46008},
49 {"China Unicom","CU",46009},
50 {"China Telecom","CT",46011}
51};
52
r.xiaofca7c472024-04-24 01:00:23 -070053#if 0
54//T106的实现
55/*Used to wait for an update signal*/
56int lynq_wait_signalchanges(int *handle)
r.xiaoe73f8702024-01-06 01:40:03 -080057{
r.xiaofca7c472024-04-24 01:00:23 -070058 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
239
240
241void lynq_signal_state_change_cb(const void* data, int data_len)
242{
243#if 0
r.xiaocfd7c682024-01-22 03:59:46 -0800244
245/*
r.xiaoe73f8702024-01-06 01:40:03 -0800246 uint8 *net_data = NULL;
247
248 net_data = (uint8*)data;
r.xiaoe73f8702024-01-06 01:40:03 -0800249
r.xiaocfd7c682024-01-22 03:59:46 -0800250 if(data && data_len > 0)
r.xiaoe73f8702024-01-06 01:40:03 -0800251 {
r.xiaocfd7c682024-01-22 03:59:46 -0800252 if(*net_data == 0)
253 { // CS
254 printf("CS:act=%d, mode=%d\n", *(net_data + 1), *(net_data + 2));
255 }
256 else
257 { // PS
258 printf("PS[%s]:act=%d, mode=%d\n", *(net_data + 3) == 0 ? "GSM/WCDMA" : "LTE", *(net_data + 1), *(net_data + 2));
259 }
r.xiaoe73f8702024-01-06 01:40:03 -0800260 }
261 else
262 {
r.xiaocfd7c682024-01-22 03:59:46 -0800263 printf("NET_CB : NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800264 }
r.xiaoe73f8702024-01-06 01:40:03 -0800265*/
266
r.xiaofca7c472024-04-24 01:00:23 -0700267 if(s_handlerPtr != NULL)//数据原样输出
r.xiaoe73f8702024-01-06 01:40:03 -0800268 {
r.xiaofca7c472024-04-24 01:00:23 -0700269 s_handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG, data, data_len, NULL);
r.xiaoe73f8702024-01-06 01:40:03 -0800270 }
r.xiaofca7c472024-04-24 01:00:23 -0700271#endif
272
273 /*
274 data_signal[0] = signal.type;
275 data_signal[1] = signal.rssi;
276 data_signal[2] = signal.rxlev;
277 data_signal[3] = signal.ber;
278 data_signal[4] = signal.rscp;
279 data_signal[5] = signal.ecno;
280 data_signal[6] = signal.rsrq;
281 data_signal[7] = signal.rsrp;
282 */
283
284 uint8 *net_data = NULL;
285 QSER_NW_SINGNAL_EVENT_IND_T msg_buf;
286
287 if(data && data_len > 0)
288 {
289 net_data = (uint8*)data;
290 //printf("net_data[0] => *net_data =%d\n",*net_data);
291 msg_buf.gsm_sig_info_valid = FALSE;
292 msg_buf.lte_sig_info_valid = FALSE;
293 msg_buf.wcdma_sig_info_valid = FALSE;
294
295 if(*net_data == MBTK_RADIO_TECH_GSM || *net_data == MBTK_RADIO_TECH_GSM_COMPACT || \
296 *net_data == MBTK_RADIO_TECH_GSM_EGPRS) //GSM
297 {
298 msg_buf.gsm_sig_info_valid = TRUE;
299 }
300 else if(*net_data == MBTK_RADIO_TECH_E_UTRAN) //LTE
301 {
302 msg_buf.lte_sig_info_valid = TRUE;
303 }
304 else if (*net_data == MBTK_RADIO_TECH_UTRAN || *net_data == MBTK_RADIO_TECH_UTRAN_HSDPA || \
305 *net_data == MBTK_RADIO_TECH_UTRAN_HSUPA || *net_data == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
306 *net_data == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
307 {
308 msg_buf.wcdma_sig_info_valid = TRUE;
309 }
310
311 //msg_buf.gsm_sig_info_valid = TRUE;//signalstrength.gw_sig_valid;
312 msg_buf.gsm_sig_info.rssi = *(net_data + 1);//signalstrength.rssi;
liuyang37623a02024-06-20 15:21:39 +0800313 //printf("rssi = %d\n", *(net_data + 1));
r.xiaofca7c472024-04-24 01:00:23 -0700314 //msg_buf.wcdma_sig_info_valid = TRUE;//.wcdma_sig_valid;
315 msg_buf.wcdma_sig_info.rssi = *(net_data + 4);//signalstrength.rscp;
liuyang37623a02024-06-20 15:21:39 +0800316 //printf("rscp = %d\n", *(net_data + 4));
r.xiaofca7c472024-04-24 01:00:23 -0700317 msg_buf.wcdma_sig_info.ecio = *(net_data + 5);//signalstrength.ecno;
liuyang37623a02024-06-20 15:21:39 +0800318 //printf("ecno = %d\n", *(net_data + 5));
r.xiaofca7c472024-04-24 01:00:23 -0700319 msg_buf.tdscdma_sig_info_valid = FALSE;
320 //msg_buf.lte_sig_info_valid = TRUE;//signalstrength.lte_sig_valid;
321 msg_buf.lte_sig_info.rssi = -125;
322 msg_buf.lte_sig_info.rsrp = *(net_data + 7);//signalstrength.rsrp;
liuyang37623a02024-06-20 15:21:39 +0800323 //printf("rsrp = %d\n", *(net_data + 7));
r.xiaofca7c472024-04-24 01:00:23 -0700324 msg_buf.lte_sig_info.rsrq = *(net_data + 6);//signalstrength.rsrq;
liuyang37623a02024-06-20 15:21:39 +0800325 //printf("rsrq = %d\n", *(net_data + 6));
r.xiaofca7c472024-04-24 01:00:23 -0700326 msg_buf.lte_sig_info.snr = 0x7FFFFFFFF; //signalstrength.rssnr;(当前mbtk没有该参数)
327 msg_buf.cdma_sig_info_valid = FALSE;
328 msg_buf.hdr_sig_info_valid = FALSE;
329 msg_buf.nr_sig_info_valid = FALSE;//(当前mbtk没有该参数)
330 msg_buf.nr_sig_info.ssRsrp = 0;
331 msg_buf.nr_sig_info.ssRsrq = 0;
332 msg_buf.nr_sig_info.ssSinr = 0;
333 msg_buf.nr_sig_info.csiRsrp = 0;
334 msg_buf.nr_sig_info.csiRsrq = 0;
335 msg_buf.nr_sig_info.csiSinr = 0;
336
337 void *ind_msg_buf= &msg_buf;
338 if(lynq_func_cb_handle.handlerPtr != NULL)
339 {
340 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_SIGNAL_STRENGTH_EVENT_IND_FLAG, ind_msg_buf, sizeof (msg_buf), lynq_func_cb_handle.contextPtr);
liuyang37623a02024-06-20 15:21:39 +0800341 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_VOICE_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
342 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
343 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_IMS_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
r.xiaofca7c472024-04-24 01:00:23 -0700344 }
345 }
346 else
347 {
348 LOGE("lynq_nw_state_change_cb : NULL");
349 }
350
r.xiaoe73f8702024-01-06 01:40:03 -0800351}
352
353
354static uint8 lynq_net_pre_change(bool mbtk_2_lynq,int net_mode)
355{
356 uint8 mbtk_net_pre = 0xFF;
357
358#if 0
359 此参数表在别处使用
360 E_QSER_NW_RADIO_TECH_TD_SCDMA = 1, Y3 1
361 E_QSER_NW_RADIO_TECH_GSM = 2, /**< GSM; only supports voice. */ YL2 0
362 E_QSER_NW_RADIO_TECH_HSPAP = 3, /**< HSPA+. */ 3 1
363 E_QSER_NW_RADIO_TECH_LTE = 4, /**< LTE. */ 4 5
364 E_QSER_NW_RADIO_TECH_EHRPD = 5, /**< EHRPD. */ 3 1
365 E_QSER_NW_RADIO_TECH_EVDO_B = 6, /**< EVDO B. */ D3 1
366 E_QSER_NW_RADIO_TECH_HSPA = 7, /**< HSPA. */ 3 1
367 E_QSER_NW_RADIO_TECH_HSUPA = 8, /**< HSUPA. */ 3.5 1
368 E_QSER_NW_RADIO_TECH_HSDPA = 9, /**< HSDPA. */ 3.5 1
369 E_QSER_NW_RADIO_TECH_EVDO_A = 10, /**< EVDO A. */ D3 1
370 E_QSER_NW_RADIO_TECH_EVDO_0 = 11, /**< EVDO 0. */ D3 1
371 E_QSER_NW_RADIO_TECH_1xRTT = 12, /**< 1xRTT. */ 2 0
372 E_QSER_NW_RADIO_TECH_IS95B = 13, /**< IS95B. */ 3 0
373 E_QSER_NW_RADIO_TECH_IS95A = 14, /**< IS95A. */ 3 0
374 E_QSER_NW_RADIO_TECH_UMTS = 15, /**< UMTS. */ L3 1
375 E_QSER_NW_RADIO_TECH_EDGE = 16, /**< EDGE. */ 2.75 0
376 E_QSER_NW_RADIO_TECH_GPRS = 17, /**< GPRS. */ 2.5 0
377 E_QSER_NW_RADIO_TECH_NONE = 18 /**< No technology selected. */
378#endif
379 /*
380 0 : GSM only
381 1 : UMTS only
382 2 : GSM/UMTS(auto)
383 3 : GSM/UMTS(GSM preferred)
384 4 : GSM/UMTS(UMTS preferred)
385 5 : LTE only
386 6 : GSM/LTE(auto)
387 7 : GSM/LTE(GSM preferred)
388 8 : GSM/LTE(LTE preferred)
389 9 : UMTS/LTE(auto)
390 10 : UMTS/LTE(UMTS preferred)
391 11 : UMTS/LTE(LTE preferred)
392 12 : GSM/UMTS/LTE(auto)
393 13 : GSM/UMTS/LTE(GSM preferred)
394 14 : GSM/UMTS/LTE(UMTS preferred)
395 15 : GSM/UMTS/LTE(LTE preferred)
396 */
397
liuyang4ac8c632024-05-24 14:42:31 +0800398 if(mbtk_2_lynq)
399 {
r.xiaoe73f8702024-01-06 01:40:03 -0800400 switch(net_mode)
401 {
402 //使用之前set的tmp_mode的值来进行回显get
403 case QSER_NW_MODE_GSM:
404 mbtk_net_pre = QSER_NW_MODE_GSM;
405 break;
406 case QSER_NW_MODE_WCDMA:
407 mbtk_net_pre = QSER_NW_MODE_WCDMA;
408 break;
409 case QSER_NW_MODE_CDMA:
410 mbtk_net_pre = QSER_NW_MODE_CDMA;
411 break;
412 case QSER_NW_MODE_EVDO:
413 mbtk_net_pre = QSER_NW_MODE_EVDO;
414 break;
415 case QSER_NW_MODE_LTE:
416 mbtk_net_pre = QSER_NW_MODE_LTE;
417 break;
418 case QSER_NW_MODE_TDSCDMA:
419 mbtk_net_pre = QSER_NW_MODE_TDSCDMA;
420 break;
421 default:
422 mbtk_net_pre = 0xFF;
423 break;
424 }
liuyang4ac8c632024-05-24 14:42:31 +0800425 }
426 else
427 {
428 if(QSER_NW_MODE_GSM == net_mode)
r.xiaoe73f8702024-01-06 01:40:03 -0800429 {
liuyang4ac8c632024-05-24 14:42:31 +0800430 mbtk_net_pre = MBTK_NET_PREF_GSM_ONLY;
431 }
432 else if(QSER_NW_MODE_WCDMA == net_mode)
433 {
434 mbtk_net_pre = MBTK_NET_PREF_UMTS_ONLY;
435 }
436 else if(QSER_NW_MODE_LTE == net_mode)
437 {
438 mbtk_net_pre = MBTK_NET_PREF_LTE_ONLY;
439 }
440 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA) == net_mode)
441 {
442 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_UMTS_PREF;
443 }
444 else if((QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
445 {
446 mbtk_net_pre = MBTK_NET_PREF_UMTS_LTE_LTE_PREF;
447 }
448 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_LTE) == net_mode)
449 {
450 mbtk_net_pre = MBTK_NET_PREF_GSM_LTE_LTE_PREF;
451 }
452 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
453 {
454 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF;
455 }
456 else
457 {
458 mbtk_net_pre = 0xFF;
r.xiaoe73f8702024-01-06 01:40:03 -0800459 }
460 }
461 return mbtk_net_pre;
462}
b.liu5fa9e772023-11-23 18:00:55 +0800463
464int qser_nw_client_init(nw_client_handle_type *ph_nw)
465{
r.xiaoe73f8702024-01-06 01:40:03 -0800466 //UNUSED(ph_nw);
b.liu5fa9e772023-11-23 18:00:55 +0800467
r.xiaoe73f8702024-01-06 01:40:03 -0800468 if(lynq_nw_info_handle == NULL)
469 {
470 lynq_nw_info_handle = mbtk_info_handle_get();
471 if(lynq_nw_info_handle)
472 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800473 LOGI("creat lynq_nw_info_handle is success");
r.xiaoe73f8702024-01-06 01:40:03 -0800474 *ph_nw = lynq_nw_info_handle->client_fd;
475 g_nw_val = lynq_nw_info_handle->client_fd;
476 }
477 else
478 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800479 LOGE("creat lynq_nw_info_handle is fail");
r.xiaoe73f8702024-01-06 01:40:03 -0800480 return -1;
481 }
482 }
483
b.liu5fa9e772023-11-23 18:00:55 +0800484 return 0;
485}
486
487int qser_nw_client_deinit(nw_client_handle_type h_nw)
488{
r.xiaoe73f8702024-01-06 01:40:03 -0800489 //UNUSED(h_nw);
490 if (h_nw != g_nw_val || g_nw_val == -1)
491 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800492 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800493 return -1;
494 }
495
r.xiaofca7c472024-04-24 01:00:23 -0700496 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, NULL);
497
r.xiaoe73f8702024-01-06 01:40:03 -0800498 if(lynq_nw_info_handle)
499 {
500 mbtk_info_handle_free(&lynq_nw_info_handle);
501 }
502 else
503 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800504 LOGE("deinit lynq_nw_info_handle is fail");
r.xiaoe73f8702024-01-06 01:40:03 -0800505 return -1;
506 }
b.liu5fa9e772023-11-23 18:00:55 +0800507
508 return 0;
509}
510
511int qser_nw_set_config(nw_client_handle_type h_nw,QSER_NW_CONFIG_INFO_T *pt_info)
512{
r.xiaoe73f8702024-01-06 01:40:03 -0800513 //UNUSED(h_nw);
514 //UNUSED(pt_info);
515 if (h_nw != g_nw_val || g_nw_val == -1)
516 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800517 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800518 return -1;
519 }
520
521 if(lynq_nw_info_handle == NULL)
522 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800523 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800524 return -1;
525 }
526
527 if(pt_info == NULL)
528 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800529 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800530 return -1;
531 }
532
533 roaming_pref = pt_info->roaming_pref;
534
535 mbtk_band_info_t band;
536 memset(&band, 0, sizeof(mbtk_band_info_t));
537 tmp_mode = pt_info->preferred_nw_mode;//临时保存一下原本的mode
538
539 //printf("tmp_mode = [%llu]",tmp_mode);
540 band.net_pref = lynq_net_pre_change(FALSE, pt_info->preferred_nw_mode);
r.xiaod9dd06e2024-02-02 04:17:52 -0800541 LOGI("band.net_pref = [%d] ",band.net_pref);
r.xiaoe73f8702024-01-06 01:40:03 -0800542
543 if(band.net_pref == 0xFF)
544 {
545 LOGE("lynq_net_pre_change() fail.");
546 return -1;
547 }
548
549 if(mbtk_current_band_set(lynq_nw_info_handle, &band))
550 {
551 return -1;
552 }
b.liu5fa9e772023-11-23 18:00:55 +0800553
554 return 0;
555}
556
557int qser_nw_get_operator_name(nw_client_handle_type h_nw, QSER_NW_OPERATOR_NAME_INFO_T *pt_info)
558{
r.xiaoe73f8702024-01-06 01:40:03 -0800559 //UNUSED(h_nw);
560 //UNUSED(pt_info);
561 if (h_nw != g_nw_val || g_nw_val == -1)
562 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800563 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800564 return -1;
565 }
b.liu5fa9e772023-11-23 18:00:55 +0800566
r.xiaoe73f8702024-01-06 01:40:03 -0800567 if(lynq_nw_info_handle == NULL)
568 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800569 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800570 return -1;
571 }
572
573 if(pt_info == NULL)
574 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800575 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800576 return -1;
577 }
578
579 char OperatorFN[128];
580 char OperatorSH[128];
581 char MccMnc[128];
582 mbtk_net_info_t net;
583 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
584 {
585 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
586 int i = 0;
587 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
588 {
589 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
590 break;
591 i++;
592 }
593
594 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
595 {
596 strcpy(OperatorFN, "UNKNOWN");
597 strcpy(OperatorSH, "UNKNOWN");
598 sprintf(MccMnc, "%d", net.plmn);
599 }
600 else
601 {
602 strcpy(OperatorFN, lynq_operator_mcc_mnc[i].lynq_operator_l);
603 strcpy(OperatorSH, lynq_operator_mcc_mnc[i].lynq_operator_s);
604 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
605 }
606 memset(pt_info->long_eons,0,128);
607 memcpy(pt_info->long_eons,lynq_operator_mcc_mnc[i].lynq_operator_l,strlen(lynq_operator_mcc_mnc[i].lynq_operator_l));
608 memset(pt_info->short_eons,0,128);
609 memcpy(pt_info->short_eons,lynq_operator_mcc_mnc[i].lynq_operator_s,strlen(lynq_operator_mcc_mnc[i].lynq_operator_s));
610 memset(pt_info->mcc,0,4);
611 memset(pt_info->mnc,0,4);
612 sprintf(pt_info->mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
613 sprintf(pt_info->mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
614 //pt_info->act;
615 return 0;
616 }
617
618 return -1;
b.liu5fa9e772023-11-23 18:00:55 +0800619}
620
621int qser_nw_get_reg_status(nw_client_handle_type h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info)
622{
r.xiaoe73f8702024-01-06 01:40:03 -0800623 //UNUSED(h_nw);
624 //UNUSED(pt_info);
625 if (h_nw != g_nw_val || g_nw_val == -1)
626 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800627 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800628 return -1;
629 }
630
631 if(lynq_nw_info_handle == NULL)
632 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800633 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800634 return -1;
635 }
636
637 if(pt_info == NULL)
638 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800639 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800640 return -1;
641 }
642
643 /*VOICE/DATA/IMS*/
644 mbtk_net_reg_info_t reg;
645 int err = mbtk_net_reg_get(lynq_nw_info_handle, &reg);
646 if(err)
647 {
648 LOGE("mbtk_net_reg_get fail.");
649 return -1;
650 }
651 else
652 {
653 memset(pt_info, 0x0, sizeof(QSER_NW_REG_STATUS_INFO_T));
654
655
656 char OperatorFN[128];
657 char OperatorSH[128];
658 char MccMnc[128];
659 mbtk_net_info_t net;
660 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
661 {
662 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
663 int i = 0;
664 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
665 {
666 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
667 break;
668 i++;
669 }
670
671 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
672 {
673 strcpy(OperatorFN, "UNKNOWN");
674 strcpy(OperatorSH, "UNKNOWN");
675 sprintf(MccMnc, "%d", net.plmn);
676 }
677 else
678 {
679 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
680 }
681 sprintf(pt_info->data_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
682 sprintf(pt_info->data_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
683 sprintf(pt_info->voice_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
684 sprintf(pt_info->voice_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
685 //pt_info->act;
686 }
687
688 //暂时未知是否其他也被使用,现根据ql模块的传输情况,
689 //只配置3gpp,涉及call,data状态没有对应的匹配的就没有赋值
690
r.xiaofca7c472024-04-24 01:00:23 -0700691 pt_info->voice_registration_valid = TRUE;
692 pt_info->voice_registration.deny_reason = 0;
693 pt_info->voice_registration.roaming = 0;
694 pt_info->voice_registration.tech_domain = 0;
r.xiaoe73f8702024-01-06 01:40:03 -0800695
r.xiaofca7c472024-04-24 01:00:23 -0700696
697 pt_info->data_registration_valid = TRUE;
698 pt_info->data_registration.deny_reason = 0;
699 pt_info->data_registration.roaming = 0;
700 pt_info->data_registration.tech_domain = 0;
701
702 if (reg.call_state == 1 || reg.call_state == 5)
703 {
704 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_FULL;
705 }
706 else if (reg.call_state == 0 || reg.call_state == 2 || reg.call_state == 3 || reg.call_state == 4)
707 {
708 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
709 }
710
711 if (reg.data_state == 1 || reg.data_state == 5)
712 {
713 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_FULL;
714 }
715 else if (reg.data_state == 0 || reg.data_state == 2 || reg.data_state == 3 || reg.data_state == 4)
716 {
717 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
718 }
719
r.xiaoe73f8702024-01-06 01:40:03 -0800720
721 pt_info->voice_registration_details_3gpp_valid = TRUE;
722 pt_info->voice_registration_details_3gpp.lac = reg.lac;
723 pt_info->voice_registration_details_3gpp.cid = reg.ci;
724 //补位填0 or 1
725 pt_info->voice_registration_details_3gpp.tech_domain = 1;
726 pt_info->voice_registration_details_3gpp.roaming = 0;
727 pt_info->voice_registration_details_3gpp.forbidden = 0;
728 pt_info->voice_registration_details_3gpp.psc = 0;
729 pt_info->voice_registration_details_3gpp.tac = 0;
730
731 pt_info->data_registration_details_3gpp_valid = TRUE;
732 pt_info->data_registration_details_3gpp.lac = reg.lac;
733 pt_info->data_registration_details_3gpp.cid = reg.ci;
734 //补位填0 or 1
735 pt_info->data_registration_details_3gpp.tech_domain = 1;
736 pt_info->data_registration_details_3gpp.roaming = 0;
737 pt_info->data_registration_details_3gpp.forbidden = 0;
738 pt_info->data_registration_details_3gpp.psc = 0;
739 pt_info->data_registration_details_3gpp.tac = 0;
740
741
742 pt_info->voice_registration_details_3gpp2_valid = FALSE;
743 //pt_info->voice_registration_details_3gpp2
744
745 pt_info->data_registration_details_3gpp2_valid = FALSE;
746 //pt_info->data_registration_details_3gpp2
747
748
749 switch(reg.type)
750 {
751 case MBTK_RADIO_TECH_GSM:
752 case MBTK_RADIO_TECH_GSM_COMPACT:
753 case MBTK_RADIO_TECH_GSM_EGPRS:
754 case MBTK_RADIO_TECH_UTRAN_HSPA:
755 {
756 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
757 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
r.xiaofca7c472024-04-24 01:00:23 -0700758 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
759 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
r.xiaoe73f8702024-01-06 01:40:03 -0800760 break;
761 }
762 case MBTK_RADIO_TECH_UTRAN:
763 case MBTK_RADIO_TECH_UTRAN_HSDPA:
764 case MBTK_RADIO_TECH_UTRAN_HSUPA:
765 case MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA:
766 {
767 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
768 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
r.xiaofca7c472024-04-24 01:00:23 -0700769 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
770 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
r.xiaoe73f8702024-01-06 01:40:03 -0800771 break;
772 }
773 case MBTK_RADIO_TECH_E_UTRAN:
774 {
775 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
776 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
r.xiaofca7c472024-04-24 01:00:23 -0700777 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
778 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
r.xiaoe73f8702024-01-06 01:40:03 -0800779 break;
780 }
781 default:
782 {
783 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
784 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
r.xiaofca7c472024-04-24 01:00:23 -0700785 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
786 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
787 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
788 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
r.xiaoe73f8702024-01-06 01:40:03 -0800789 break;
790 }
791 }
792 }
b.liu5fa9e772023-11-23 18:00:55 +0800793
794 return 0;
795}
796
797int qser_nw_get_signal_strength(nw_client_handle_type h_nw,QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info)
798{
r.xiaoe73f8702024-01-06 01:40:03 -0800799 //UNUSED(h_nw);
800 //UNUSED(pt_info);
801 if (h_nw != g_nw_val || g_nw_val == -1)
802 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800803 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800804 return -1;
805 }
806
807 if(lynq_nw_info_handle == NULL)
808 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800809 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800810 return -1;
811 }
812
813 if(pt_info == NULL)
814 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800815 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800816 return -1;
817 }
818
819 int ret;
820 mbtk_signal_info_t signal;
821 ret = mbtk_net_signal_get(lynq_nw_info_handle, &signal);
822 if(ret != 0) {
823 LOGE("mbtk_net_signal_get fail.");
824 return -1;
825 }
826 else
827 {
828 memset(pt_info, 0x0, sizeof(QSER_NW_SIGNAL_STRENGTH_INFO_T));
r.xiaofca7c472024-04-24 01:00:23 -0700829
r.xiaoe73f8702024-01-06 01:40:03 -0800830 if(signal.type == MBTK_RADIO_TECH_GSM || signal.type == MBTK_RADIO_TECH_GSM_COMPACT || \
831 signal.type == MBTK_RADIO_TECH_GSM_EGPRS) //GSM
832 {
833 pt_info->gsm_sig_info_valid = TRUE;
834 pt_info->gsm_sig_info.rssi = signal.rssi;
835 }
836 else if(signal.type == MBTK_RADIO_TECH_E_UTRAN) //LTE
837 {
838 pt_info->lte_sig_info_valid = TRUE;
839 pt_info->lte_sig_info.rsrp = signal.rsrp;
840 pt_info->lte_sig_info.rsrq = signal.rsrq;
r.xiaofca7c472024-04-24 01:00:23 -0700841 pt_info->lte_sig_info.snr = 0x7FFFFFFFF; //->MBTK接口无该参数(对应参数为rssnr,该值INT_MAX:0x7FFFFFFFF表示无效值),写死值为0x7FFFFFFFF
842 pt_info->lte_sig_info.rssi = -125;
r.xiaoe73f8702024-01-06 01:40:03 -0800843 }
844 else if (signal.type == MBTK_RADIO_TECH_UTRAN || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA || \
845 signal.type == MBTK_RADIO_TECH_UTRAN_HSUPA || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
846 signal.type == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
847 {
848 pt_info->wcdma_sig_info_valid = TRUE;
r.xiaofca7c472024-04-24 01:00:23 -0700849 pt_info->wcdma_sig_info.rssi = signal.rscp;
850 pt_info->wcdma_sig_info.ecio = signal.ecno;
r.xiaoe73f8702024-01-06 01:40:03 -0800851 }
852 else
853 {
854 return -1;
855 }
r.xiaofca7c472024-04-24 01:00:23 -0700856 /*
857 pt_info->gsm_sig_info_valid = 1//signal.gw_sig_valid;
858 pt_info->gsm_sig_info.rssi = signal.rssi;//signal.rssi-110;
859 pt_info->wcdma_sig_info_valid = 1//signal.wcdma_sig_valid;
860 pt_info->wcdma_sig_info.rssi = signal.rscp;//signal.wcdma_signalstrength-110;
861 pt_info->wcdma_sig_info.ecio = //signal.ecno/5;
862 pt_info->tdscdma_sig_info_valid = 0;
863 pt_info->lte_sig_info_valid = 1//signal.lte_sig_valid;
864 pt_info->lte_sig_info.rssi = -125;//signal.lte_signalstrength-110;
865 pt_info->lte_sig_info.rsrp = signal.rsrp;//signal.rsrp*(-1);
866 pt_info->lte_sig_info.rsrq = signal.rsrq;//signal.rsrq*(-1);
867 pt_info->lte_sig_info.snr = 0x7FFFFFFFF;//signal.rssnr;
868 pt_info->cdma_sig_info_valid = 0;
869 pt_info->hdr_sig_info_valid = 0;
870 //mbtk 无nr
871 pt_info->nr_sig_info_valid = 0//signal.nr_sig_valid;
872 pt_info->nr_sig_info.ssRsrp = 0//signal.ssRsrp;
873 pt_info->nr_sig_info.ssRsrq = 0//signal.ssRsrq;
874 pt_info->nr_sig_info.ssSinr = 0//signal.ssSinr;
875 pt_info->nr_sig_info.csiRsrp = 0//signal.csiRsrp;
876 pt_info->nr_sig_info.csiRsrq = 0//signal.csiRsrq;
877 pt_info->nr_sig_info.csiSinr = 0//signal.csiSinr;
878 */
r.xiaoe73f8702024-01-06 01:40:03 -0800879 }
b.liu5fa9e772023-11-23 18:00:55 +0800880
881 return 0;
882}
883
liuyang37623a02024-06-20 15:21:39 +0800884void net_state_change_cb(const void* data, int data_len)
885{
886 printf("Recv event indication : NET REG EVENT\n");
887 if(data && data_len > 0) {
888 const uint8 *ptr = (const uint8*)data;
889 if(*ptr == 0) { // CS
890 printf("CS:act=%d, mode=%d\n", *(ptr + 1), *(ptr + 2));
891 } else { // PS
892 printf("PS[%s]:act=%d, mode=%d\n", *(ptr + 3) == 0 ? "GSM/WCDMA" : "LTE", *(ptr + 1), *(ptr + 2));
893 }
894 } else
895 LOGD("ind is NULL");
896}
897
898
b.liu4e243dc2023-11-27 11:20:00 +0800899int qser_nw_add_rx_msg_handler (nw_client_handle_type h_nw, QSER_NW_RxMsgHandlerFunc_t handlerPtr, void* contextPtr)
b.liu5fa9e772023-11-23 18:00:55 +0800900{
r.xiaoe73f8702024-01-06 01:40:03 -0800901 //UNUSED(h_nw);
902 //UNUSED(handlerPtr);
903 //UNUSED(contextPtr);
904
905 if (h_nw != g_nw_val || g_nw_val == -1)
906 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800907 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800908 return -1;
909 }
910
911 if(lynq_nw_info_handle == NULL)
912 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800913 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800914 return -1;
915 }
916
917 lynq_func_cb_handle.handlerPtr = handlerPtr;
918 lynq_func_cb_handle.contextPtr = contextPtr;
919
r.xiaofca7c472024-04-24 01:00:23 -0700920 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, lynq_signal_state_change_cb);
liuyang37623a02024-06-20 15:21:39 +0800921 mbtk_net_state_change_cb_reg(lynq_nw_info_handle, net_state_change_cb);
b.liu5fa9e772023-11-23 18:00:55 +0800922
923 return 0;
924}
925
926int qser_nw_set_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
927{
r.xiaocfd7c682024-01-22 03:59:46 -0800928 //UNUSED(h_nw);
929 //UNUSED(pt_info);
930 if (h_nw != g_nw_val || g_nw_val == -1)
931 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800932 LOGE("handle NULL");
r.xiaocfd7c682024-01-22 03:59:46 -0800933 return -1;
934 }
935
936 if (pt_info == NULL)
937 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800938 LOGE("QSER_NW_OOS_CONFIG_INFO_T NULL");
r.xiaocfd7c682024-01-22 03:59:46 -0800939 return -1;
940 }
941
942 uint32 oosPhase_0, oosPhase_1, oosPhase_2;
943 char tmp_type;
944 mbtk_oos_info oos_info;
945
946 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
947
948
949 tmp_type = pt_info->type;
950
951 if (tmp_type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
952 {//如果没有配置对应的值,例如,10,20
953 //oosPhase_2这个位置没有配置,则使用默认值20,既不限制次数的5s进行一次扫描
954 //同理oosPhase_0,oosPhase_1这个位置没有配置,则使用默认值5,10,既限制次数5次的5s,10s进行一次扫描
955 //输入多少配置多少,可以缺省使用默认值
956 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)
957 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800958 LOGE("qser_nw_set_oos_config set time < 0 ");
r.xiaocfd7c682024-01-22 03:59:46 -0800959 return -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_max == 0)
962 {
963 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
964 oos_info.mode = 1;
965 oos_info.oosPhase[0] = oosPhase_0;
966 }
967 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)
968 {
969 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
970 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
971 oos_info.mode = 1;
972 oos_info.oosPhase[0] = oosPhase_0;
973 oos_info.oosPhase[1] = oosPhase_1;
974 }
975 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))
976 {
977 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
978 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
979 oosPhase_2 = pt_info->u.full_band_scan_info.t_max;
980 oos_info.mode = 1;
981 oos_info.oosPhase[0] = oosPhase_0;
982 oos_info.oosPhase[1] = oosPhase_1;
983 oos_info.oosPhase[2] = oosPhase_2;
984 }
985 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)
986 {
987 oos_info.mode = 0;
988 }
989 else
990 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800991 LOGE("qser_nw_set_oos_config set Format err");
r.xiaocfd7c682024-01-22 03:59:46 -0800992 return -1;
993 }
994
995 int err = mbtk_oos_set(lynq_nw_info_handle, &oos_info);
996 if (err != 0)
997 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800998 LOGE("qser_nw_set_oos_config mbtk_oos_set err");
r.xiaocfd7c682024-01-22 03:59:46 -0800999 return -1;
1000 }
1001 }
1002 else if (tmp_type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
1003 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001004 LOGE("Not currently supported");
r.xiaocfd7c682024-01-22 03:59:46 -08001005 return -1;
1006 }
1007 else
1008 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001009 LOGE("type is error");
r.xiaocfd7c682024-01-22 03:59:46 -08001010 return -1;
1011 }
b.liu5fa9e772023-11-23 18:00:55 +08001012
1013 return 0;
1014}
1015
1016int qser_nw_get_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
1017{
r.xiaocfd7c682024-01-22 03:59:46 -08001018 //UNUSED(h_nw);
1019 //UNUSED(pt_info);
1020 if (h_nw != g_nw_val || g_nw_val == -1)
1021 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001022 LOGE("handle NULL");
r.xiaocfd7c682024-01-22 03:59:46 -08001023 return -1;
1024 }
1025
1026 mbtk_oos_info oos_info;
1027 uint32 oosPhase_0, oosPhase_1, oosPhase_2;
1028 char cmd[100] = {0};
1029
1030 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
1031
1032 int err = mbtk_oos_get(lynq_nw_info_handle, &oos_info);
1033 if (err != 0)
1034 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001035 LOGE("qser_nw_get_oos_config mbtk_oos_get err ");
r.xiaocfd7c682024-01-22 03:59:46 -08001036 return -1;
1037 }
r.xiaoffbe6ce2024-01-22 19:01:01 -08001038/*
r.xiaocfd7c682024-01-22 03:59:46 -08001039 printf("oos_info.mode =[%d] \n",oos_info.mode);
1040 printf("oos_info.1 =[%d] \n",oos_info.oosPhase[0]);
1041 printf("oos_info.2 =[%d] \n",oos_info.oosPhase[1]);
1042 printf("oos_info.3 =[%d] \n",oos_info.oosPhase[2]);
r.xiaoffbe6ce2024-01-22 19:01:01 -08001043*/
r.xiaocfd7c682024-01-22 03:59:46 -08001044 if(oos_info.mode == 0)//关闭状态
1045 {
1046 pt_info->u.full_band_scan_info.t_min = 0;
1047 pt_info->u.full_band_scan_info.t_step = 0;
1048 pt_info->u.full_band_scan_info.t_max = 0;
1049 }
1050 else
1051 {
1052 pt_info->u.full_band_scan_info.t_min = (int)oos_info.oosPhase[0];
1053 pt_info->u.full_band_scan_info.t_step = (int)oos_info.oosPhase[1];
1054 pt_info->u.full_band_scan_info.t_max = (int)oos_info.oosPhase[2];
1055 }
1056 pt_info->type = QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN;
1057
1058
1059 if (pt_info == NULL)
1060 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001061 LOGE("qser_nw_get_oos_config pt_info is null ");
r.xiaocfd7c682024-01-22 03:59:46 -08001062 return -1;
1063 }
b.liu5fa9e772023-11-23 18:00:55 +08001064
1065 return 0;
r.xiaoe73f8702024-01-06 01:40:03 -08001066}
1067
1068int qser_nw_set_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T rf_mode)
1069{
1070 //UNUSED(h_nw);
1071 //UNUSED(rf_mode);
1072 int ret;
r.xiaocfd7c682024-01-22 03:59:46 -08001073 mbtk_modem_info_t info;
r.xiaoe73f8702024-01-06 01:40:03 -08001074
1075 if (h_nw != g_nw_val || g_nw_val == -1)
1076 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001077 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -08001078 return -1;
1079 }
1080
1081 if(lynq_nw_info_handle == NULL)
1082 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001083 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -08001084 return -1;
1085 }
1086
r.xiaocfd7c682024-01-22 03:59:46 -08001087/*
r.xiaoe73f8702024-01-06 01:40:03 -08001088 if (rf_mode == 4)
1089 {
1090 printf("Flight Mode no Support Now\n");
1091 return -1;
1092 }
r.xiaocfd7c682024-01-22 03:59:46 -08001093*/
1094 if (rf_mode != 4 && rf_mode != 0 && rf_mode != 1)
1095 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001096 LOGE("mode is error!");
r.xiaocfd7c682024-01-22 03:59:46 -08001097 return -1;
1098 }
r.xiaoe73f8702024-01-06 01:40:03 -08001099
r.xiaocfd7c682024-01-22 03:59:46 -08001100 info.fun = rf_mode;
1101 info.rst = 0;
1102 ret = mbtk_set_modem_fun(lynq_nw_info_handle, &info);
1103
1104 //ret = mbtk_radio_state_set(lynq_nw_info_handle, rf_mode);
r.xiaoe73f8702024-01-06 01:40:03 -08001105 if (ret != 0)
1106 {
1107 LOGE("mbtk_radio_state_set fail.");
1108 return -1;
1109 }
1110 else
1111 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001112 LOGI("qser_nw_set_rf_mode is success\n");
r.xiaoe73f8702024-01-06 01:40:03 -08001113 }
1114
1115 return 0;
1116}
1117
1118int qser_nw_get_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T *rf_mode)
1119{
1120 //UNUSED(h_nw);
1121 //UNUSED(rf_mode);
1122 int ret;
1123 int tmp_rf;
1124
1125 if (h_nw != g_nw_val || g_nw_val == -1)
1126 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001127 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -08001128 return -1;
1129 }
1130
1131 if(lynq_nw_info_handle == NULL)
1132 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001133 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -08001134 return -1;
1135 }
1136
r.xiaocfd7c682024-01-22 03:59:46 -08001137 ret = mbtk_get_modem_fun(lynq_nw_info_handle, &tmp_rf);
1138
1139 //ret = mbtk_radio_state_get(lynq_nw_info_handle, &tmp_rf);
r.xiaoe73f8702024-01-06 01:40:03 -08001140 if (ret != 0)
1141 {
1142 LOGE("mbtk_radio_state_get fail.");
1143 return -1;
1144 }
1145 else
1146 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001147 LOGI("qser_nw_get_rf_mode is success\n");
r.xiaoe73f8702024-01-06 01:40:03 -08001148 *rf_mode = tmp_rf;
1149 }
1150
1151
1152 return 0;
1153}
1154
r.xiaoba8483c2024-04-14 18:53:10 -07001155int qser_nw_set_ims_enable(nw_client_handle_type h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode)
1156{
1157 int ret = 0;
1158
1159 if (h_nw != g_nw_val || g_nw_val == -1)
1160 {
1161 LOGE("handle NULL");
1162 return -1;
1163 }
1164
1165 if(lynq_nw_info_handle == NULL)
1166 {
1167 LOGE("lynq_nw_info_handle == NULL.");
1168 return -1;
1169 }
1170
1171 ret = mbtk_net_ims_set(lynq_nw_info_handle, ims_mode);
1172 if (ret != 0)
1173 {
1174 LOGE("mbtk_net_ims_set fail.");
1175 return -1;
1176 }
1177
1178 return 0;
1179}
1180
1181int qser_nw_get_ims_reg_status(nw_client_handle_type h_nw, QSER_NW_IMS_REG_STATUS_INFO_T *pt_info)
1182{
1183 int ret = 0;
1184 int tmp_pt;
1185
1186 if (h_nw != g_nw_val || g_nw_val == -1)
1187 {
1188 LOGE("handle NULL");
1189 return -1;
1190 }
1191
1192 if(lynq_nw_info_handle == NULL)
1193 {
1194 LOGE("lynq_nw_info_handle == NULL.");
1195 return -1;
1196 }
1197
b.liufdf03172024-06-07 15:01:29 +08001198 ret = mbtk_net_ims_reg_state_get(lynq_nw_info_handle, &tmp_pt);
r.xiaoba8483c2024-04-14 18:53:10 -07001199 if (ret != 0)
1200 {
1201 LOGE("mbtk_net_ims_get fail.");
1202 return -1;
1203 }
1204
1205 if (tmp_pt == 0)
1206 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_NONE;
1207 else if (tmp_pt == 1)
1208 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_REGISTERED;
1209 else
1210 {
1211 LOGE("mbtk_net_ims_get value error fail.");
1212 return -1;
1213 }
1214
1215 return 0;
1216}
1217
r.xiaoe73f8702024-01-06 01:40:03 -08001218