blob: be3816e89d395f7a733784b13af5c265238e5f5c [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;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700299 msg_buf.gsm_sig_info.rssi = *(net_data + 1);
r.xiaofca7c472024-04-24 01:00:23 -0700300 }
301 else if(*net_data == MBTK_RADIO_TECH_E_UTRAN) //LTE
302 {
303 msg_buf.lte_sig_info_valid = TRUE;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700304 msg_buf.lte_sig_info.rssi = *(net_data + 1);
305 msg_buf.lte_sig_info.rsrp = *(net_data + 7);//signalstrength.rsrp;
306 msg_buf.lte_sig_info.rsrq = *(net_data + 6);//signalstrength.rsrq;
307 msg_buf.lte_sig_info.snr = 0x7FFFFFFFF; //signalstrength.rssnr;(当前mbtk没有该参数)
r.xiaofca7c472024-04-24 01:00:23 -0700308 }
309 else if (*net_data == MBTK_RADIO_TECH_UTRAN || *net_data == MBTK_RADIO_TECH_UTRAN_HSDPA || \
310 *net_data == MBTK_RADIO_TECH_UTRAN_HSUPA || *net_data == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
311 *net_data == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
312 {
313 msg_buf.wcdma_sig_info_valid = TRUE;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700314 msg_buf.wcdma_sig_info.rssi = *(net_data + 1);//signalstrength.rssi;
315 msg_buf.wcdma_sig_info.ecio = *(net_data + 5);//signalstrength.ecno;
r.xiaofca7c472024-04-24 01:00:23 -0700316 }
317
318 //msg_buf.gsm_sig_info_valid = TRUE;//signalstrength.gw_sig_valid;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700319 //msg_buf.gsm_sig_info.rssi = *(net_data + 1);//signalstrength.rssi;
liuyang37623a02024-06-20 15:21:39 +0800320 //printf("rssi = %d\n", *(net_data + 1));
r.xiaofca7c472024-04-24 01:00:23 -0700321 //msg_buf.wcdma_sig_info_valid = TRUE;//.wcdma_sig_valid;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700322 //msg_buf.wcdma_sig_info.rssi = *(net_data + 1);//signalstrength.rssi;
liuyang37623a02024-06-20 15:21:39 +0800323 //printf("rscp = %d\n", *(net_data + 4));
r.xiaofa7c1fc2024-07-03 23:22:33 -0700324 //msg_buf.wcdma_sig_info.ecio = *(net_data + 5);//signalstrength.ecno;
liuyang37623a02024-06-20 15:21:39 +0800325 //printf("ecno = %d\n", *(net_data + 5));
r.xiaofca7c472024-04-24 01:00:23 -0700326 //msg_buf.lte_sig_info_valid = TRUE;//signalstrength.lte_sig_valid;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700327 //msg_buf.lte_sig_info.rssi = *(net_data + 1);
328 //msg_buf.lte_sig_info.rsrp = *(net_data + 7);//signalstrength.rsrp;
liuyang37623a02024-06-20 15:21:39 +0800329 //printf("rsrp = %d\n", *(net_data + 7));
r.xiaofa7c1fc2024-07-03 23:22:33 -0700330 //msg_buf.lte_sig_info.rsrq = *(net_data + 6);//signalstrength.rsrq;
liuyang37623a02024-06-20 15:21:39 +0800331 //printf("rsrq = %d\n", *(net_data + 6));
r.xiaofa7c1fc2024-07-03 23:22:33 -0700332 //msg_buf.lte_sig_info.snr = 0x7FFFFFFFF; //signalstrength.rssnr;(当前mbtk没有该参数)
333 msg_buf.tdscdma_sig_info_valid = FALSE;
r.xiaofca7c472024-04-24 01:00:23 -0700334 msg_buf.cdma_sig_info_valid = FALSE;
335 msg_buf.hdr_sig_info_valid = FALSE;
336 msg_buf.nr_sig_info_valid = FALSE;//(当前mbtk没有该参数)
337 msg_buf.nr_sig_info.ssRsrp = 0;
338 msg_buf.nr_sig_info.ssRsrq = 0;
339 msg_buf.nr_sig_info.ssSinr = 0;
340 msg_buf.nr_sig_info.csiRsrp = 0;
341 msg_buf.nr_sig_info.csiRsrq = 0;
342 msg_buf.nr_sig_info.csiSinr = 0;
343
344 void *ind_msg_buf= &msg_buf;
345 if(lynq_func_cb_handle.handlerPtr != NULL)
346 {
347 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 +0800348 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_VOICE_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
349 lynq_func_cb_handle.handlerPtr(g_nw_val, NW_IND_DATA_REG_EVENT_IND_FLAG, NULL, 0, lynq_func_cb_handle.contextPtr);
350 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 -0700351 }
352 }
353 else
354 {
355 LOGE("lynq_nw_state_change_cb : NULL");
356 }
357
r.xiaoe73f8702024-01-06 01:40:03 -0800358}
359
360
361static uint8 lynq_net_pre_change(bool mbtk_2_lynq,int net_mode)
362{
363 uint8 mbtk_net_pre = 0xFF;
364
365#if 0
366 此参数表在别处使用
367 E_QSER_NW_RADIO_TECH_TD_SCDMA = 1, Y3 1
368 E_QSER_NW_RADIO_TECH_GSM = 2, /**< GSM; only supports voice. */ YL2 0
369 E_QSER_NW_RADIO_TECH_HSPAP = 3, /**< HSPA+. */ 3 1
370 E_QSER_NW_RADIO_TECH_LTE = 4, /**< LTE. */ 4 5
371 E_QSER_NW_RADIO_TECH_EHRPD = 5, /**< EHRPD. */ 3 1
372 E_QSER_NW_RADIO_TECH_EVDO_B = 6, /**< EVDO B. */ D3 1
373 E_QSER_NW_RADIO_TECH_HSPA = 7, /**< HSPA. */ 3 1
374 E_QSER_NW_RADIO_TECH_HSUPA = 8, /**< HSUPA. */ 3.5 1
375 E_QSER_NW_RADIO_TECH_HSDPA = 9, /**< HSDPA. */ 3.5 1
376 E_QSER_NW_RADIO_TECH_EVDO_A = 10, /**< EVDO A. */ D3 1
377 E_QSER_NW_RADIO_TECH_EVDO_0 = 11, /**< EVDO 0. */ D3 1
378 E_QSER_NW_RADIO_TECH_1xRTT = 12, /**< 1xRTT. */ 2 0
379 E_QSER_NW_RADIO_TECH_IS95B = 13, /**< IS95B. */ 3 0
380 E_QSER_NW_RADIO_TECH_IS95A = 14, /**< IS95A. */ 3 0
381 E_QSER_NW_RADIO_TECH_UMTS = 15, /**< UMTS. */ L3 1
382 E_QSER_NW_RADIO_TECH_EDGE = 16, /**< EDGE. */ 2.75 0
383 E_QSER_NW_RADIO_TECH_GPRS = 17, /**< GPRS. */ 2.5 0
384 E_QSER_NW_RADIO_TECH_NONE = 18 /**< No technology selected. */
385#endif
386 /*
387 0 : GSM only
388 1 : UMTS only
389 2 : GSM/UMTS(auto)
390 3 : GSM/UMTS(GSM preferred)
391 4 : GSM/UMTS(UMTS preferred)
392 5 : LTE only
393 6 : GSM/LTE(auto)
394 7 : GSM/LTE(GSM preferred)
395 8 : GSM/LTE(LTE preferred)
396 9 : UMTS/LTE(auto)
397 10 : UMTS/LTE(UMTS preferred)
398 11 : UMTS/LTE(LTE preferred)
399 12 : GSM/UMTS/LTE(auto)
400 13 : GSM/UMTS/LTE(GSM preferred)
401 14 : GSM/UMTS/LTE(UMTS preferred)
402 15 : GSM/UMTS/LTE(LTE preferred)
403 */
404
liuyang4ac8c632024-05-24 14:42:31 +0800405 if(mbtk_2_lynq)
406 {
r.xiaoe73f8702024-01-06 01:40:03 -0800407 switch(net_mode)
408 {
409 //使用之前set的tmp_mode的值来进行回显get
410 case QSER_NW_MODE_GSM:
411 mbtk_net_pre = QSER_NW_MODE_GSM;
412 break;
413 case QSER_NW_MODE_WCDMA:
414 mbtk_net_pre = QSER_NW_MODE_WCDMA;
415 break;
416 case QSER_NW_MODE_CDMA:
417 mbtk_net_pre = QSER_NW_MODE_CDMA;
418 break;
419 case QSER_NW_MODE_EVDO:
420 mbtk_net_pre = QSER_NW_MODE_EVDO;
421 break;
422 case QSER_NW_MODE_LTE:
423 mbtk_net_pre = QSER_NW_MODE_LTE;
424 break;
425 case QSER_NW_MODE_TDSCDMA:
426 mbtk_net_pre = QSER_NW_MODE_TDSCDMA;
427 break;
428 default:
429 mbtk_net_pre = 0xFF;
430 break;
431 }
liuyang4ac8c632024-05-24 14:42:31 +0800432 }
433 else
434 {
435 if(QSER_NW_MODE_GSM == net_mode)
r.xiaoe73f8702024-01-06 01:40:03 -0800436 {
liuyang4ac8c632024-05-24 14:42:31 +0800437 mbtk_net_pre = MBTK_NET_PREF_GSM_ONLY;
438 }
439 else if(QSER_NW_MODE_WCDMA == net_mode)
440 {
441 mbtk_net_pre = MBTK_NET_PREF_UMTS_ONLY;
442 }
443 else if(QSER_NW_MODE_LTE == net_mode)
444 {
445 mbtk_net_pre = MBTK_NET_PREF_LTE_ONLY;
446 }
447 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA) == net_mode)
448 {
449 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_UMTS_PREF;
450 }
451 else if((QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
452 {
453 mbtk_net_pre = MBTK_NET_PREF_UMTS_LTE_LTE_PREF;
454 }
455 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_LTE) == net_mode)
456 {
457 mbtk_net_pre = MBTK_NET_PREF_GSM_LTE_LTE_PREF;
458 }
459 else if((QSER_NW_MODE_GSM | QSER_NW_MODE_WCDMA | QSER_NW_MODE_LTE) == net_mode)
460 {
461 mbtk_net_pre = MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF;
462 }
463 else
464 {
465 mbtk_net_pre = 0xFF;
r.xiaoe73f8702024-01-06 01:40:03 -0800466 }
467 }
468 return mbtk_net_pre;
469}
b.liu5fa9e772023-11-23 18:00:55 +0800470
471int qser_nw_client_init(nw_client_handle_type *ph_nw)
472{
r.xiaoe73f8702024-01-06 01:40:03 -0800473 //UNUSED(ph_nw);
b.liu5fa9e772023-11-23 18:00:55 +0800474
r.xiaoe73f8702024-01-06 01:40:03 -0800475 if(lynq_nw_info_handle == NULL)
476 {
477 lynq_nw_info_handle = mbtk_info_handle_get();
478 if(lynq_nw_info_handle)
479 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800480 LOGI("creat lynq_nw_info_handle is success");
r.xiaoe73f8702024-01-06 01:40:03 -0800481 *ph_nw = lynq_nw_info_handle->client_fd;
482 g_nw_val = lynq_nw_info_handle->client_fd;
483 }
484 else
485 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800486 LOGE("creat lynq_nw_info_handle is fail");
r.xiaoe73f8702024-01-06 01:40:03 -0800487 return -1;
488 }
489 }
490
b.liu5fa9e772023-11-23 18:00:55 +0800491 return 0;
492}
493
494int qser_nw_client_deinit(nw_client_handle_type h_nw)
495{
r.xiaoe73f8702024-01-06 01:40:03 -0800496 //UNUSED(h_nw);
497 if (h_nw != g_nw_val || g_nw_val == -1)
498 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800499 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800500 return -1;
501 }
502
r.xiaofca7c472024-04-24 01:00:23 -0700503 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, NULL);
504
r.xiaoe73f8702024-01-06 01:40:03 -0800505 if(lynq_nw_info_handle)
506 {
507 mbtk_info_handle_free(&lynq_nw_info_handle);
508 }
509 else
510 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800511 LOGE("deinit lynq_nw_info_handle is fail");
r.xiaoe73f8702024-01-06 01:40:03 -0800512 return -1;
513 }
b.liu5fa9e772023-11-23 18:00:55 +0800514
515 return 0;
516}
517
518int qser_nw_set_config(nw_client_handle_type h_nw,QSER_NW_CONFIG_INFO_T *pt_info)
519{
r.xiaoe73f8702024-01-06 01:40:03 -0800520 //UNUSED(h_nw);
521 //UNUSED(pt_info);
522 if (h_nw != g_nw_val || g_nw_val == -1)
523 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800524 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800525 return -1;
526 }
527
528 if(lynq_nw_info_handle == NULL)
529 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800530 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800531 return -1;
532 }
533
534 if(pt_info == NULL)
535 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800536 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800537 return -1;
538 }
539
540 roaming_pref = pt_info->roaming_pref;
541
542 mbtk_band_info_t band;
543 memset(&band, 0, sizeof(mbtk_band_info_t));
544 tmp_mode = pt_info->preferred_nw_mode;//临时保存一下原本的mode
545
546 //printf("tmp_mode = [%llu]",tmp_mode);
547 band.net_pref = lynq_net_pre_change(FALSE, pt_info->preferred_nw_mode);
r.xiaod9dd06e2024-02-02 04:17:52 -0800548 LOGI("band.net_pref = [%d] ",band.net_pref);
r.xiaoe73f8702024-01-06 01:40:03 -0800549
550 if(band.net_pref == 0xFF)
551 {
552 LOGE("lynq_net_pre_change() fail.");
553 return -1;
554 }
555
556 if(mbtk_current_band_set(lynq_nw_info_handle, &band))
557 {
558 return -1;
559 }
b.liu5fa9e772023-11-23 18:00:55 +0800560
561 return 0;
562}
563
564int qser_nw_get_operator_name(nw_client_handle_type h_nw, QSER_NW_OPERATOR_NAME_INFO_T *pt_info)
565{
r.xiaoe73f8702024-01-06 01:40:03 -0800566 //UNUSED(h_nw);
567 //UNUSED(pt_info);
568 if (h_nw != g_nw_val || g_nw_val == -1)
569 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800570 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800571 return -1;
572 }
b.liu5fa9e772023-11-23 18:00:55 +0800573
r.xiaoe73f8702024-01-06 01:40:03 -0800574 if(lynq_nw_info_handle == NULL)
575 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800576 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800577 return -1;
578 }
579
580 if(pt_info == NULL)
581 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800582 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800583 return -1;
584 }
585
586 char OperatorFN[128];
587 char OperatorSH[128];
588 char MccMnc[128];
589 mbtk_net_info_t net;
590 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
591 {
592 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
593 int i = 0;
594 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
595 {
596 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
597 break;
598 i++;
599 }
600
601 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
602 {
603 strcpy(OperatorFN, "UNKNOWN");
604 strcpy(OperatorSH, "UNKNOWN");
605 sprintf(MccMnc, "%d", net.plmn);
606 }
607 else
608 {
609 strcpy(OperatorFN, lynq_operator_mcc_mnc[i].lynq_operator_l);
610 strcpy(OperatorSH, lynq_operator_mcc_mnc[i].lynq_operator_s);
611 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
612 }
613 memset(pt_info->long_eons,0,128);
614 memcpy(pt_info->long_eons,lynq_operator_mcc_mnc[i].lynq_operator_l,strlen(lynq_operator_mcc_mnc[i].lynq_operator_l));
615 memset(pt_info->short_eons,0,128);
616 memcpy(pt_info->short_eons,lynq_operator_mcc_mnc[i].lynq_operator_s,strlen(lynq_operator_mcc_mnc[i].lynq_operator_s));
617 memset(pt_info->mcc,0,4);
618 memset(pt_info->mnc,0,4);
619 sprintf(pt_info->mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
620 sprintf(pt_info->mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
621 //pt_info->act;
622 return 0;
623 }
624
625 return -1;
b.liu5fa9e772023-11-23 18:00:55 +0800626}
627
628int qser_nw_get_reg_status(nw_client_handle_type h_nw, QSER_NW_REG_STATUS_INFO_T *pt_info)
629{
r.xiaoe73f8702024-01-06 01:40:03 -0800630 //UNUSED(h_nw);
631 //UNUSED(pt_info);
632 if (h_nw != g_nw_val || g_nw_val == -1)
633 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800634 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800635 return -1;
636 }
637
638 if(lynq_nw_info_handle == NULL)
639 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800640 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800641 return -1;
642 }
643
644 if(pt_info == NULL)
645 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800646 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800647 return -1;
648 }
649
650 /*VOICE/DATA/IMS*/
651 mbtk_net_reg_info_t reg;
652 int err = mbtk_net_reg_get(lynq_nw_info_handle, &reg);
653 if(err)
654 {
655 LOGE("mbtk_net_reg_get fail.");
656 return -1;
657 }
658 else
659 {
660 memset(pt_info, 0x0, sizeof(QSER_NW_REG_STATUS_INFO_T));
661
662
663 char OperatorFN[128];
664 char OperatorSH[128];
665 char MccMnc[128];
666 mbtk_net_info_t net;
667 if(!mbtk_net_sel_mode_get(lynq_nw_info_handle, &net) && net.plmn > 0)
668 {
669 // printf("Net : %d, %d, %d\n", net.net_sel_mode, net.net_type, net.plmn);
670 int i = 0;
671 while(i < ARRAY_SIZE(lynq_operator_mcc_mnc))
672 {
673 if(lynq_operator_mcc_mnc[i].lynq_mcc_mnc == net.plmn)
674 break;
675 i++;
676 }
677
678 if(i == ARRAY_SIZE(lynq_operator_mcc_mnc)) // No found mcc&mnc
679 {
680 strcpy(OperatorFN, "UNKNOWN");
681 strcpy(OperatorSH, "UNKNOWN");
682 sprintf(MccMnc, "%d", net.plmn);
683 }
684 else
685 {
686 sprintf(MccMnc, "%d", lynq_operator_mcc_mnc[i].lynq_mcc_mnc);
687 }
688 sprintf(pt_info->data_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
689 sprintf(pt_info->data_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
690 sprintf(pt_info->voice_registration_details_3gpp.mcc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)/100);
691 sprintf(pt_info->voice_registration_details_3gpp.mnc, "%d", (lynq_operator_mcc_mnc[i].lynq_mcc_mnc)%100);
692 //pt_info->act;
693 }
694
695 //暂时未知是否其他也被使用,现根据ql模块的传输情况,
696 //只配置3gpp,涉及call,data状态没有对应的匹配的就没有赋值
697
r.xiaofca7c472024-04-24 01:00:23 -0700698 pt_info->voice_registration_valid = TRUE;
699 pt_info->voice_registration.deny_reason = 0;
700 pt_info->voice_registration.roaming = 0;
701 pt_info->voice_registration.tech_domain = 0;
r.xiaoe73f8702024-01-06 01:40:03 -0800702
r.xiaofca7c472024-04-24 01:00:23 -0700703
704 pt_info->data_registration_valid = TRUE;
705 pt_info->data_registration.deny_reason = 0;
706 pt_info->data_registration.roaming = 0;
707 pt_info->data_registration.tech_domain = 0;
708
709 if (reg.call_state == 1 || reg.call_state == 5)
710 {
711 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_FULL;
712 }
713 else if (reg.call_state == 0 || reg.call_state == 2 || reg.call_state == 3 || reg.call_state == 4)
714 {
715 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
716 }
717
718 if (reg.data_state == 1 || reg.data_state == 5)
719 {
720 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_FULL;
721 }
722 else if (reg.data_state == 0 || reg.data_state == 2 || reg.data_state == 3 || reg.data_state == 4)
723 {
724 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
725 }
726
r.xiaoe73f8702024-01-06 01:40:03 -0800727
728 pt_info->voice_registration_details_3gpp_valid = TRUE;
729 pt_info->voice_registration_details_3gpp.lac = reg.lac;
730 pt_info->voice_registration_details_3gpp.cid = reg.ci;
731 //补位填0 or 1
732 pt_info->voice_registration_details_3gpp.tech_domain = 1;
733 pt_info->voice_registration_details_3gpp.roaming = 0;
734 pt_info->voice_registration_details_3gpp.forbidden = 0;
735 pt_info->voice_registration_details_3gpp.psc = 0;
736 pt_info->voice_registration_details_3gpp.tac = 0;
737
738 pt_info->data_registration_details_3gpp_valid = TRUE;
739 pt_info->data_registration_details_3gpp.lac = reg.lac;
740 pt_info->data_registration_details_3gpp.cid = reg.ci;
741 //补位填0 or 1
742 pt_info->data_registration_details_3gpp.tech_domain = 1;
743 pt_info->data_registration_details_3gpp.roaming = 0;
744 pt_info->data_registration_details_3gpp.forbidden = 0;
745 pt_info->data_registration_details_3gpp.psc = 0;
746 pt_info->data_registration_details_3gpp.tac = 0;
747
748
749 pt_info->voice_registration_details_3gpp2_valid = FALSE;
750 //pt_info->voice_registration_details_3gpp2
751
752 pt_info->data_registration_details_3gpp2_valid = FALSE;
753 //pt_info->data_registration_details_3gpp2
754
755
756 switch(reg.type)
757 {
758 case MBTK_RADIO_TECH_GSM:
759 case MBTK_RADIO_TECH_GSM_COMPACT:
760 case MBTK_RADIO_TECH_GSM_EGPRS:
761 case MBTK_RADIO_TECH_UTRAN_HSPA:
762 {
763 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
764 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
r.xiaofca7c472024-04-24 01:00:23 -0700765 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_GPRS;
766 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_GSM;
r.xiaoe73f8702024-01-06 01:40:03 -0800767 break;
768 }
769 case MBTK_RADIO_TECH_UTRAN:
770 case MBTK_RADIO_TECH_UTRAN_HSDPA:
771 case MBTK_RADIO_TECH_UTRAN_HSUPA:
772 case MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA:
773 {
774 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
775 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
r.xiaofca7c472024-04-24 01:00:23 -0700776 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
777 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_UMTS;
r.xiaoe73f8702024-01-06 01:40:03 -0800778 break;
779 }
780 case MBTK_RADIO_TECH_E_UTRAN:
781 {
782 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
783 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
r.xiaofca7c472024-04-24 01:00:23 -0700784 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
785 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_LTE;
r.xiaoe73f8702024-01-06 01:40:03 -0800786 break;
787 }
788 default:
789 {
790 pt_info->data_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
791 pt_info->voice_registration_details_3gpp.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
r.xiaofca7c472024-04-24 01:00:23 -0700792 pt_info->data_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
793 pt_info->voice_registration.radio_tech = E_QSER_NW_RADIO_TECH_NONE;
794 pt_info->data_registration.registration_state = E_QSER_NW_SERVICE_NONE;
795 pt_info->voice_registration.registration_state = E_QSER_NW_SERVICE_NONE;
r.xiaoe73f8702024-01-06 01:40:03 -0800796 break;
797 }
798 }
799 }
b.liu5fa9e772023-11-23 18:00:55 +0800800
801 return 0;
802}
803
804int qser_nw_get_signal_strength(nw_client_handle_type h_nw,QSER_NW_SIGNAL_STRENGTH_INFO_T *pt_info)
805{
r.xiaoe73f8702024-01-06 01:40:03 -0800806 //UNUSED(h_nw);
807 //UNUSED(pt_info);
808 if (h_nw != g_nw_val || g_nw_val == -1)
809 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800810 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800811 return -1;
812 }
813
814 if(lynq_nw_info_handle == NULL)
815 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800816 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800817 return -1;
818 }
819
820 if(pt_info == NULL)
821 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800822 LOGE("pt_info == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800823 return -1;
824 }
825
826 int ret;
827 mbtk_signal_info_t signal;
828 ret = mbtk_net_signal_get(lynq_nw_info_handle, &signal);
829 if(ret != 0) {
830 LOGE("mbtk_net_signal_get fail.");
831 return -1;
832 }
833 else
834 {
835 memset(pt_info, 0x0, sizeof(QSER_NW_SIGNAL_STRENGTH_INFO_T));
r.xiaofca7c472024-04-24 01:00:23 -0700836
r.xiaoe73f8702024-01-06 01:40:03 -0800837 if(signal.type == MBTK_RADIO_TECH_GSM || signal.type == MBTK_RADIO_TECH_GSM_COMPACT || \
838 signal.type == MBTK_RADIO_TECH_GSM_EGPRS) //GSM
839 {
840 pt_info->gsm_sig_info_valid = TRUE;
841 pt_info->gsm_sig_info.rssi = signal.rssi;
842 }
843 else if(signal.type == MBTK_RADIO_TECH_E_UTRAN) //LTE
844 {
845 pt_info->lte_sig_info_valid = TRUE;
846 pt_info->lte_sig_info.rsrp = signal.rsrp;
847 pt_info->lte_sig_info.rsrq = signal.rsrq;
r.xiaofca7c472024-04-24 01:00:23 -0700848 pt_info->lte_sig_info.snr = 0x7FFFFFFFF; //->MBTK接口无该参数(对应参数为rssnr,该值INT_MAX:0x7FFFFFFFF表示无效值),写死值为0x7FFFFFFFF
r.xiaofa7c1fc2024-07-03 23:22:33 -0700849 pt_info->lte_sig_info.rssi = signal.rssi;
r.xiaoe73f8702024-01-06 01:40:03 -0800850 }
851 else if (signal.type == MBTK_RADIO_TECH_UTRAN || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA || \
852 signal.type == MBTK_RADIO_TECH_UTRAN_HSUPA || signal.type == MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA || \
853 signal.type == MBTK_RADIO_TECH_UTRAN_HSPA )//WCDMA
854 {
855 pt_info->wcdma_sig_info_valid = TRUE;
r.xiaofa7c1fc2024-07-03 23:22:33 -0700856 pt_info->wcdma_sig_info.rssi = signal.rssi;
r.xiaofca7c472024-04-24 01:00:23 -0700857 pt_info->wcdma_sig_info.ecio = signal.ecno;
r.xiaoe73f8702024-01-06 01:40:03 -0800858 }
859 else
860 {
861 return -1;
862 }
r.xiaofca7c472024-04-24 01:00:23 -0700863 /*
864 pt_info->gsm_sig_info_valid = 1//signal.gw_sig_valid;
865 pt_info->gsm_sig_info.rssi = signal.rssi;//signal.rssi-110;
866 pt_info->wcdma_sig_info_valid = 1//signal.wcdma_sig_valid;
867 pt_info->wcdma_sig_info.rssi = signal.rscp;//signal.wcdma_signalstrength-110;
868 pt_info->wcdma_sig_info.ecio = //signal.ecno/5;
869 pt_info->tdscdma_sig_info_valid = 0;
870 pt_info->lte_sig_info_valid = 1//signal.lte_sig_valid;
871 pt_info->lte_sig_info.rssi = -125;//signal.lte_signalstrength-110;
872 pt_info->lte_sig_info.rsrp = signal.rsrp;//signal.rsrp*(-1);
873 pt_info->lte_sig_info.rsrq = signal.rsrq;//signal.rsrq*(-1);
874 pt_info->lte_sig_info.snr = 0x7FFFFFFFF;//signal.rssnr;
875 pt_info->cdma_sig_info_valid = 0;
876 pt_info->hdr_sig_info_valid = 0;
877 //mbtk 无nr
878 pt_info->nr_sig_info_valid = 0//signal.nr_sig_valid;
879 pt_info->nr_sig_info.ssRsrp = 0//signal.ssRsrp;
880 pt_info->nr_sig_info.ssRsrq = 0//signal.ssRsrq;
881 pt_info->nr_sig_info.ssSinr = 0//signal.ssSinr;
882 pt_info->nr_sig_info.csiRsrp = 0//signal.csiRsrp;
883 pt_info->nr_sig_info.csiRsrq = 0//signal.csiRsrq;
884 pt_info->nr_sig_info.csiSinr = 0//signal.csiSinr;
885 */
r.xiaoe73f8702024-01-06 01:40:03 -0800886 }
b.liu5fa9e772023-11-23 18:00:55 +0800887
888 return 0;
889}
890
liuyang37623a02024-06-20 15:21:39 +0800891void net_state_change_cb(const void* data, int data_len)
892{
893 printf("Recv event indication : NET REG EVENT\n");
894 if(data && data_len > 0) {
895 const uint8 *ptr = (const uint8*)data;
896 if(*ptr == 0) { // CS
897 printf("CS:act=%d, mode=%d\n", *(ptr + 1), *(ptr + 2));
898 } else { // PS
899 printf("PS[%s]:act=%d, mode=%d\n", *(ptr + 3) == 0 ? "GSM/WCDMA" : "LTE", *(ptr + 1), *(ptr + 2));
900 }
901 } else
902 LOGD("ind is NULL");
903}
904
905
b.liu4e243dc2023-11-27 11:20:00 +0800906int 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 +0800907{
r.xiaoe73f8702024-01-06 01:40:03 -0800908 //UNUSED(h_nw);
909 //UNUSED(handlerPtr);
910 //UNUSED(contextPtr);
911
912 if (h_nw != g_nw_val || g_nw_val == -1)
913 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800914 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -0800915 return -1;
916 }
917
918 if(lynq_nw_info_handle == NULL)
919 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800920 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -0800921 return -1;
922 }
923
924 lynq_func_cb_handle.handlerPtr = handlerPtr;
925 lynq_func_cb_handle.contextPtr = contextPtr;
926
r.xiaofca7c472024-04-24 01:00:23 -0700927 mbtk_signal_state_change_cb_reg(lynq_nw_info_handle, lynq_signal_state_change_cb);
liuyang37623a02024-06-20 15:21:39 +0800928 mbtk_net_state_change_cb_reg(lynq_nw_info_handle, net_state_change_cb);
b.liu5fa9e772023-11-23 18:00:55 +0800929
930 return 0;
931}
932
933int qser_nw_set_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
934{
r.xiaocfd7c682024-01-22 03:59:46 -0800935 //UNUSED(h_nw);
936 //UNUSED(pt_info);
937 if (h_nw != g_nw_val || g_nw_val == -1)
938 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800939 LOGE("handle NULL");
r.xiaocfd7c682024-01-22 03:59:46 -0800940 return -1;
941 }
942
943 if (pt_info == NULL)
944 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800945 LOGE("QSER_NW_OOS_CONFIG_INFO_T NULL");
r.xiaocfd7c682024-01-22 03:59:46 -0800946 return -1;
947 }
948
949 uint32 oosPhase_0, oosPhase_1, oosPhase_2;
950 char tmp_type;
951 mbtk_oos_info oos_info;
952
953 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
954
955
956 tmp_type = pt_info->type;
957
958 if (tmp_type == QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN)
959 {//如果没有配置对应的值,例如,10,20
960 //oosPhase_2这个位置没有配置,则使用默认值20,既不限制次数的5s进行一次扫描
961 //同理oosPhase_0,oosPhase_1这个位置没有配置,则使用默认值5,10,既限制次数5次的5s,10s进行一次扫描
962 //输入多少配置多少,可以缺省使用默认值
963 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)
964 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800965 LOGE("qser_nw_set_oos_config set time < 0 ");
r.xiaocfd7c682024-01-22 03:59:46 -0800966 return -1;
967 }
968 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)
969 {
970 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
971 oos_info.mode = 1;
972 oos_info.oosPhase[0] = oosPhase_0;
973 }
974 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)
975 {
976 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
977 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
978 oos_info.mode = 1;
979 oos_info.oosPhase[0] = oosPhase_0;
980 oos_info.oosPhase[1] = oosPhase_1;
981 }
982 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))
983 {
984 oosPhase_0 = pt_info->u.full_band_scan_info.t_min;
985 oosPhase_1 = pt_info->u.full_band_scan_info.t_step;
986 oosPhase_2 = pt_info->u.full_band_scan_info.t_max;
987 oos_info.mode = 1;
988 oos_info.oosPhase[0] = oosPhase_0;
989 oos_info.oosPhase[1] = oosPhase_1;
990 oos_info.oosPhase[2] = oosPhase_2;
991 }
992 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)
993 {
994 oos_info.mode = 0;
995 }
996 else
997 {
r.xiaod9dd06e2024-02-02 04:17:52 -0800998 LOGE("qser_nw_set_oos_config set Format err");
r.xiaocfd7c682024-01-22 03:59:46 -0800999 return -1;
1000 }
1001
1002 int err = mbtk_oos_set(lynq_nw_info_handle, &oos_info);
1003 if (err != 0)
1004 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001005 LOGE("qser_nw_set_oos_config mbtk_oos_set err");
r.xiaocfd7c682024-01-22 03:59:46 -08001006 return -1;
1007 }
1008 }
1009 else if (tmp_type == QSER_NW_OOS_CFG_TYPE_FAST_SCAN)
1010 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001011 LOGE("Not currently supported");
r.xiaocfd7c682024-01-22 03:59:46 -08001012 return -1;
1013 }
1014 else
1015 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001016 LOGE("type is error");
r.xiaocfd7c682024-01-22 03:59:46 -08001017 return -1;
1018 }
b.liu5fa9e772023-11-23 18:00:55 +08001019
1020 return 0;
1021}
1022
1023int qser_nw_get_oos_config (nw_client_handle_type h_nw, QSER_NW_OOS_CONFIG_INFO_T *pt_info)
1024{
r.xiaocfd7c682024-01-22 03:59:46 -08001025 //UNUSED(h_nw);
1026 //UNUSED(pt_info);
1027 if (h_nw != g_nw_val || g_nw_val == -1)
1028 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001029 LOGE("handle NULL");
r.xiaocfd7c682024-01-22 03:59:46 -08001030 return -1;
1031 }
1032
1033 mbtk_oos_info oos_info;
1034 uint32 oosPhase_0, oosPhase_1, oosPhase_2;
1035 char cmd[100] = {0};
1036
1037 memset(&oos_info, 0x00, sizeof(mbtk_oos_info));
1038
1039 int err = mbtk_oos_get(lynq_nw_info_handle, &oos_info);
1040 if (err != 0)
1041 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001042 LOGE("qser_nw_get_oos_config mbtk_oos_get err ");
r.xiaocfd7c682024-01-22 03:59:46 -08001043 return -1;
1044 }
r.xiaoffbe6ce2024-01-22 19:01:01 -08001045/*
r.xiaocfd7c682024-01-22 03:59:46 -08001046 printf("oos_info.mode =[%d] \n",oos_info.mode);
1047 printf("oos_info.1 =[%d] \n",oos_info.oosPhase[0]);
1048 printf("oos_info.2 =[%d] \n",oos_info.oosPhase[1]);
1049 printf("oos_info.3 =[%d] \n",oos_info.oosPhase[2]);
r.xiaoffbe6ce2024-01-22 19:01:01 -08001050*/
r.xiaocfd7c682024-01-22 03:59:46 -08001051 if(oos_info.mode == 0)//关闭状态
1052 {
1053 pt_info->u.full_band_scan_info.t_min = 0;
1054 pt_info->u.full_band_scan_info.t_step = 0;
1055 pt_info->u.full_band_scan_info.t_max = 0;
1056 }
1057 else
1058 {
1059 pt_info->u.full_band_scan_info.t_min = (int)oos_info.oosPhase[0];
1060 pt_info->u.full_band_scan_info.t_step = (int)oos_info.oosPhase[1];
1061 pt_info->u.full_band_scan_info.t_max = (int)oos_info.oosPhase[2];
1062 }
1063 pt_info->type = QSER_NW_OOS_CFG_TYPE_FULL_BAND_SCAN;
1064
1065
1066 if (pt_info == NULL)
1067 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001068 LOGE("qser_nw_get_oos_config pt_info is null ");
r.xiaocfd7c682024-01-22 03:59:46 -08001069 return -1;
1070 }
b.liu5fa9e772023-11-23 18:00:55 +08001071
1072 return 0;
r.xiaoe73f8702024-01-06 01:40:03 -08001073}
1074
1075int qser_nw_set_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T rf_mode)
1076{
1077 //UNUSED(h_nw);
1078 //UNUSED(rf_mode);
1079 int ret;
r.xiaocfd7c682024-01-22 03:59:46 -08001080 mbtk_modem_info_t info;
r.xiaoe73f8702024-01-06 01:40:03 -08001081
1082 if (h_nw != g_nw_val || g_nw_val == -1)
1083 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001084 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -08001085 return -1;
1086 }
1087
1088 if(lynq_nw_info_handle == NULL)
1089 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001090 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -08001091 return -1;
1092 }
1093
r.xiaocfd7c682024-01-22 03:59:46 -08001094/*
r.xiaoe73f8702024-01-06 01:40:03 -08001095 if (rf_mode == 4)
1096 {
1097 printf("Flight Mode no Support Now\n");
1098 return -1;
1099 }
r.xiaocfd7c682024-01-22 03:59:46 -08001100*/
1101 if (rf_mode != 4 && rf_mode != 0 && rf_mode != 1)
1102 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001103 LOGE("mode is error!");
r.xiaocfd7c682024-01-22 03:59:46 -08001104 return -1;
1105 }
r.xiaoe73f8702024-01-06 01:40:03 -08001106
r.xiaocfd7c682024-01-22 03:59:46 -08001107 info.fun = rf_mode;
1108 info.rst = 0;
1109 ret = mbtk_set_modem_fun(lynq_nw_info_handle, &info);
1110
1111 //ret = mbtk_radio_state_set(lynq_nw_info_handle, rf_mode);
r.xiaoe73f8702024-01-06 01:40:03 -08001112 if (ret != 0)
1113 {
1114 LOGE("mbtk_radio_state_set fail.");
1115 return -1;
1116 }
1117 else
1118 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001119 LOGI("qser_nw_set_rf_mode is success\n");
r.xiaoe73f8702024-01-06 01:40:03 -08001120 }
1121
1122 return 0;
1123}
1124
1125int qser_nw_get_rf_mode (nw_client_handle_type h_nw, E_QSER_NW_RF_MODE_TYPE_T *rf_mode)
1126{
1127 //UNUSED(h_nw);
1128 //UNUSED(rf_mode);
1129 int ret;
1130 int tmp_rf;
1131
1132 if (h_nw != g_nw_val || g_nw_val == -1)
1133 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001134 LOGE("handle NULL");
r.xiaoe73f8702024-01-06 01:40:03 -08001135 return -1;
1136 }
1137
1138 if(lynq_nw_info_handle == NULL)
1139 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001140 LOGE("lynq_nw_info_handle == NULL.");
r.xiaoe73f8702024-01-06 01:40:03 -08001141 return -1;
1142 }
1143
r.xiaocfd7c682024-01-22 03:59:46 -08001144 ret = mbtk_get_modem_fun(lynq_nw_info_handle, &tmp_rf);
1145
1146 //ret = mbtk_radio_state_get(lynq_nw_info_handle, &tmp_rf);
r.xiaoe73f8702024-01-06 01:40:03 -08001147 if (ret != 0)
1148 {
1149 LOGE("mbtk_radio_state_get fail.");
1150 return -1;
1151 }
1152 else
1153 {
r.xiaod9dd06e2024-02-02 04:17:52 -08001154 LOGI("qser_nw_get_rf_mode is success\n");
r.xiaoe73f8702024-01-06 01:40:03 -08001155 *rf_mode = tmp_rf;
1156 }
1157
1158
1159 return 0;
1160}
1161
r.xiaoba8483c2024-04-14 18:53:10 -07001162int qser_nw_set_ims_enable(nw_client_handle_type h_nw, E_QSER_NW_IMS_MODE_TYPE_T ims_mode)
1163{
1164 int ret = 0;
1165
1166 if (h_nw != g_nw_val || g_nw_val == -1)
1167 {
1168 LOGE("handle NULL");
1169 return -1;
1170 }
1171
1172 if(lynq_nw_info_handle == NULL)
1173 {
1174 LOGE("lynq_nw_info_handle == NULL.");
1175 return -1;
1176 }
1177
1178 ret = mbtk_net_ims_set(lynq_nw_info_handle, ims_mode);
1179 if (ret != 0)
1180 {
1181 LOGE("mbtk_net_ims_set fail.");
1182 return -1;
1183 }
1184
1185 return 0;
1186}
1187
1188int qser_nw_get_ims_reg_status(nw_client_handle_type h_nw, QSER_NW_IMS_REG_STATUS_INFO_T *pt_info)
1189{
1190 int ret = 0;
1191 int tmp_pt;
1192
1193 if (h_nw != g_nw_val || g_nw_val == -1)
1194 {
1195 LOGE("handle NULL");
1196 return -1;
1197 }
1198
1199 if(lynq_nw_info_handle == NULL)
1200 {
1201 LOGE("lynq_nw_info_handle == NULL.");
1202 return -1;
1203 }
1204
b.liufdf03172024-06-07 15:01:29 +08001205 ret = mbtk_net_ims_reg_state_get(lynq_nw_info_handle, &tmp_pt);
r.xiaoba8483c2024-04-14 18:53:10 -07001206 if (ret != 0)
1207 {
1208 LOGE("mbtk_net_ims_get fail.");
1209 return -1;
1210 }
1211
1212 if (tmp_pt == 0)
1213 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_NONE;
1214 else if (tmp_pt == 1)
1215 pt_info->registration_state = E_QSER_NW_IMS_SERVICE_REGISTERED;
1216 else
1217 {
1218 LOGE("mbtk_net_ims_get value error fail.");
1219 return -1;
1220 }
1221
1222 return 0;
1223}
1224
r.xiaoe73f8702024-01-06 01:40:03 -08001225