blob: e6aaba830922fdd4a109c0fe26ef30b2c11cbc53 [file] [log] [blame]
rjw2183a5f2022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjwc3e81b82022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw2183a5f2022-01-18 18:30:37 +080013
14#include "lynq_network.h"
15#include "liblog/lynq_deflog.h"
16#define LYNQ_SERVICE_PORT 8088
17#define LYNQ_URC_SERVICE_PORT 8086
18#define LYNQ_URC_ADDRESS "0.0.0.0"
19#define LYNQ_ADDRESS "127.0.0.1"
20#define LYNQ_REQUEST_PARAM_BUF 8192
21#define LYNQ_REC_BUF 8192
22#define LYNQ_RESP_BUF 128
23#define LYNQ_TYPE_BUF 10
24#define USER_LOG_TAG "LYNQ_NETWORK"
25
26
27using ::android::Parcel;
28
29
30typedef struct{
31 int uToken;
32 int request;
33 int paramLen;
34 char param[LYNQ_REQUEST_PARAM_BUF];
35}lynq_client_t;
36
37typedef struct{
38 int resp_type;
39 int request;
40 int slot_id;
41 int error;
42}lynq_resp_t;
43
44lynq_client_t client_t;
45lynq_resp_t response;
rjw415439a2022-03-02 15:23:11 +080046
47int network_len_addr_serv;
48int network_len_urc_addr_serv;
49struct sockaddr_in network_addr_serv;
50struct sockaddr_in network_urc_addr_serv;
51static int network_sock_fd = 0;
52int network_urc_sock_fd = 0;
53int network_Global_uToken = 0;
54int network_slot_id = -1;
55int network_urc_slot_id = -1;
56int network_urc_status = 1;
57int network_wait_urc_id = 0;
58signalStrength_t network_urc_solSigStren;
rjw267d8ee2022-03-15 09:21:29 +080059/**g_lynq_network_init_flag
60* @brief mark network initialization state
61* 0:deinit status
62* 1:init state
63*/
64static int g_lynq_network_init_flag = 0;
rjw2183a5f2022-01-18 18:30:37 +080065
rjw415439a2022-03-02 15:23:11 +080066static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
67static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw2183a5f2022-01-18 18:30:37 +080068
69typedef enum{
70 LYNQ_E_CARDSTATE_ERROR=8000,
71 /* The voice service state is out of service*/
72 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
73 /* The voice service state is EMERGENCY_ONLY*/
74 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
75 /* The radio power is power off*/
76 LYNQ_E_STATE_POWER_OFF=8003,
77 LYNQ_E_TIME_OUT=8004,
78 /*create or open sms DB fail */
79 LYNQ_E_SMS_DB_FAIL=8005,
80 /*Failed to execute sql statement*/
81 LYNQ_E_SMS_SQL_FAIL = 8006,
82 LYNQ_E_SMS_NOT_FIND = 8007,
83 /* The logic conflict*/
84 LYNQ_E_CONFLICT=9000,
85 /*Null anomaly*/
86 LYNQ_E_NULL_ANONALY=9001
87}LYNQ_E;
88
rjw415439a2022-03-02 15:23:11 +080089int wait_signal_changes()
90{
91 int ret = 0;
92 pthread_mutex_lock(&signal_state_change_mutex);
93 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
94 pthread_mutex_unlock(&signal_state_change_mutex);
95 return 0;
96}
97
98void send_signal_changes()
99{
100 pthread_mutex_lock(&signal_state_change_mutex);
101 pthread_cond_signal(&signal_state_change_cond);
102 pthread_mutex_unlock(&signal_state_change_mutex);
103 return;
104}
105
rjw2183a5f2022-01-18 18:30:37 +0800106void *thread_urc_recv(void *p)
107{
108 Parcel *urc_p =NULL;
109 char urc_data[LYNQ_REC_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800110 int resp_type = -1;
111 int urc_id = -1;
112 int res = 0;
113 int none = 0;
114 int NR_sum = 0;
rjw2183a5f2022-01-18 18:30:37 +0800115 int urc_LTE_signalstrength = 0;
116 int urc_WCDMA_signalstrength = 0;
rjw2183a5f2022-01-18 18:30:37 +0800117 LYINFLOG("urc thread is running");
rjw415439a2022-03-02 15:23:11 +0800118 while(network_urc_status)
rjw2183a5f2022-01-18 18:30:37 +0800119 {
120 bzero(urc_data,LYNQ_REC_BUF);
rjw415439a2022-03-02 15:23:11 +0800121 res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800122 if(res<=0)
123 {
124 LYERRLOG("thread_urc_recv step2 fail:");
125 break;
126 }
127 urc_p = new Parcel();
128 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
129 urc_p->setDataPosition(0);
130 if(urc_p->dataAvail()>0)
131 {
132 urc_p->readInt32(&resp_type);
133 urc_p->readInt32(&urc_id);
rjw415439a2022-03-02 15:23:11 +0800134 urc_p->readInt32(&network_urc_slot_id);
rjw2183a5f2022-01-18 18:30:37 +0800135 switch(urc_id)
136 {
137 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
138 {
rjw415439a2022-03-02 15:23:11 +0800139 network_wait_urc_id = urc_id;
140 LYINFLOG("slot_id = %d",network_urc_slot_id);
141 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800142 }
143 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
144 {
rjw415439a2022-03-02 15:23:11 +0800145 urc_p->readInt32(&network_urc_solSigStren.rssi);
146 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw2183a5f2022-01-18 18:30:37 +0800147 {
rjw415439a2022-03-02 15:23:11 +0800148 network_urc_solSigStren.gw_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800149 }else{
rjw415439a2022-03-02 15:23:11 +0800150 network_urc_solSigStren.gw_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800151 }
rjw415439a2022-03-02 15:23:11 +0800152 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800153 {
rjw415439a2022-03-02 15:23:11 +0800154 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw7610e272022-02-24 13:37:11 +0800155 }
rjw2183a5f2022-01-18 18:30:37 +0800156 urc_p->readInt32(&none);
157 urc_p->readInt32(&none);
158 urc_p->readInt32(&none);
159 urc_p->readInt32(&none);
160 urc_p->readInt32(&none);
161 urc_p->readInt32(&none);
162 urc_p->readInt32(&none);
163 urc_p->readInt32(&urc_LTE_signalstrength);
164 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjw415439a2022-03-02 15:23:11 +0800165 urc_p->readInt32(&network_urc_solSigStren.rsrp);
166 urc_p->readInt32(&network_urc_solSigStren.rsrq);
167 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800168 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
169 {
rjw415439a2022-03-02 15:23:11 +0800170 network_urc_solSigStren.lte_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800171 }else{
rjw415439a2022-03-02 15:23:11 +0800172 network_urc_solSigStren.lte_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800173 }
rjw415439a2022-03-02 15:23:11 +0800174 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800175 {
176 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
177 }
rjw2183a5f2022-01-18 18:30:37 +0800178 urc_p->readInt32(&none);
179 urc_p->readInt32(&none);
180 urc_p->readInt32(&none);
181 urc_p->readInt32(&none);
182 urc_p->readInt32(&none);
183 urc_p->readInt32(&urc_WCDMA_signalstrength);
184 urc_p->readInt32(&none);
rjw415439a2022-03-02 15:23:11 +0800185 urc_p->readInt32(&network_urc_solSigStren.rscp);
186 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800187 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
188 {
rjw415439a2022-03-02 15:23:11 +0800189 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800190 }else{
rjw415439a2022-03-02 15:23:11 +0800191 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800192 }
rjw415439a2022-03-02 15:23:11 +0800193 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800194 {
195 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800196 }
rjw415439a2022-03-02 15:23:11 +0800197 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
198 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
199 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
200 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
201 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
202 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
203 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
204 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800205 if(NR_sum != 0)
206 {
rjw415439a2022-03-02 15:23:11 +0800207 network_urc_solSigStren.nr_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800208 }else{
rjw415439a2022-03-02 15:23:11 +0800209 network_urc_solSigStren.nr_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800210 }
rjw415439a2022-03-02 15:23:11 +0800211 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800212 {
213 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
rjw415439a2022-03-02 15:23:11 +0800214 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
215 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800216 }
rjw415439a2022-03-02 15:23:11 +0800217 network_wait_urc_id = urc_id;
218 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800219 }
220 }
221 }
222 }
223}
224
225
226int lynq_server_socket_start()
227{
rjw415439a2022-03-02 15:23:11 +0800228 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
229 if(-1 == network_sock_fd)
rjw2183a5f2022-01-18 18:30:37 +0800230 {
231 LYERRLOG("socket open error");
232 return -1;
233 }
rjw415439a2022-03-02 15:23:11 +0800234 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800235
rjw415439a2022-03-02 15:23:11 +0800236 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
237 network_addr_serv.sin_family = AF_INET;
238 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
239 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
240 network_len_addr_serv = sizeof(network_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800241 return 0;
242}
243
244int lynq_urc_socket_start()
245{
246 pthread_t tid;
247 pthread_attr_t attr;
248 int on = 1;
rjw415439a2022-03-02 15:23:11 +0800249 network_urc_sock_fd = -1;
rjw2183a5f2022-01-18 18:30:37 +0800250 int ret = 0;
rjw415439a2022-03-02 15:23:11 +0800251 network_len_urc_addr_serv = sizeof(sockaddr_in);
252 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
253 if (network_urc_sock_fd <0){
rjw2183a5f2022-01-18 18:30:37 +0800254 LYERRLOG("urc socket error");
255 ret = -1;
256 }
rjw415439a2022-03-02 15:23:11 +0800257 network_urc_addr_serv.sin_family = AF_INET;
258 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
259 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw2183a5f2022-01-18 18:30:37 +0800260 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjw415439a2022-03-02 15:23:11 +0800261 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw2183a5f2022-01-18 18:30:37 +0800262 if(ret <0)
263 {
264 LYERRLOG("urc socket set error");
265 return -1;
266 }
rjw415439a2022-03-02 15:23:11 +0800267 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw2183a5f2022-01-18 18:30:37 +0800268 if(ret <0)
269 {
270 LYERRLOG("urc socket bind error");
271 return -1;
272 }
273 pthread_attr_init(&attr);
274 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjw415439a2022-03-02 15:23:11 +0800275 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800276 if(ret <0)
277 {
278 LYERRLOG("urc pthread create error");
279 return -1;
280 }
281 LYINFLOG("urc start success");
282 return 0;
283}
284
285int lynq_network_init(int utoken){
rjw267d8ee2022-03-15 09:21:29 +0800286 if(g_lynq_network_init_flag == 1)
287 {
288 LYERRLOG("init twice is not allowed");
289 return -1;
290 }
291 g_lynq_network_init_flag = 1;
rjw2183a5f2022-01-18 18:30:37 +0800292 if(utoken <0){
293 LYERRLOG("init err");
294 return -1;
295 }
rjw415439a2022-03-02 15:23:11 +0800296 network_urc_status = 1;
297 network_Global_uToken = utoken;
rjw2183a5f2022-01-18 18:30:37 +0800298 LYLOGSET(LOG_INFO);
299 LYLOGEINIT(USER_LOG_TAG);
300 int ret = 0;
301
302 ret = lynq_server_socket_start();
303 if(ret !=0)
304 {
305 LYERRLOG("init socket client fail!!!");
306 return -1;
307 }
308 ret = lynq_urc_socket_start();
309 if(ret != 0)
310 {
311 LYERRLOG("init socket urc fail!!!");
312 return -1;
313 }
314 return 0;
315}
316
317int strUpper(char * str)
318{
319 int i=0;
320 while(1)
321 {
322 if(str[i]=='\0')
323 {
324 break;
325 }
326 if(str[i]>='a'&&str[i]<='z')
327 {
328 str[i]=str[i]-32;
329 }
330 i++;
331 }
332 return 0;
333}
334
335int copyCellInfoList(Parcel &p,int *cellinfo)
336{
337 int32_t v=0;
338 int64_t v6=0;
339 if(NULL == cellinfo)
340 {
341 LYERRLOG("*cellinfo error");
342 }
343
344 int nothing = 0;
345 p.readInt32(&v);
346 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
347 p.readInt32(&nothing);
348 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
349 // p.readInt32(&cellinfo->cellinfo.registered);
350 p.readInt32(&v);
351 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
352 p.readInt64(&v6);
353 // cellinfo->cellinfo.timeStamp = v6;
354 switch(cellinfoType) {
355 case RIL_CELL_INFO_TYPE_GSM: {
356 p.readInt32(&nothing);
357 p.readInt32(&nothing);
358 p.readInt32(&nothing);
359 p.readInt32(cellinfo);
360 p.readInt32(&nothing);
361 p.readInt32(&nothing);
362 p.readInt32(&nothing);
363 break;
364 }
365 case RIL_CELL_INFO_TYPE_WCDMA: {
366 p.readInt32(&nothing);
367 p.readInt32(&nothing);
368 p.readInt32(&nothing);
369 p.readInt32(cellinfo);
370 p.readInt32(&nothing);
371 p.readInt32(&nothing);
372 p.readInt32(&nothing);
373 break;
374 }
375 case RIL_CELL_INFO_TYPE_CDMA: {
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 p.readInt32(&nothing);
379 p.readInt32(&nothing);
380 p.readInt32(&nothing);
381 p.readInt32(&nothing);
382 p.readInt32(&nothing);
383 p.readInt32(&nothing);
384 p.readInt32(&nothing);
385 p.readInt32(&nothing);
386 cellinfo = 0;
387
388 break;
389 }
390 case RIL_CELL_INFO_TYPE_LTE: {
391 p.readInt32(&nothing);
392 p.readInt32(&nothing);
393 p.readInt32(cellinfo);
394 p.readInt32(&nothing);
395 p.readInt32(&nothing);
396 p.readInt32(&nothing);
397 p.readInt32(&nothing);
398 p.readInt32(&nothing);
399 p.readInt32(&nothing);
400 p.readInt32(&nothing);
401 p.readInt32(&nothing);
402 break;
403 }
404 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
405 p.readInt32(&nothing);
406 p.readInt32(&nothing);
407 p.readInt32(&nothing);
408 p.readInt32(cellinfo);
409 p.readInt32(&nothing);
410 p.readInt32(&nothing);
411 break;
412 }
413 case RIL_CELL_INFO_TYPE_NR: {
414 p.readInt32(&nothing);
415 p.readInt32(&nothing);
416 p.readInt32(cellinfo);
417 p.readInt32(&nothing);
418 p.readInt32(&nothing);
419 p.readInt32(&nothing);
420 p.readInt32(&nothing);
421 p.readInt32(&nothing);
422 p.readInt32(&nothing);
423 p.readInt32(&nothing);
424 p.readInt32(&nothing);
425 p.readInt32(&nothing);
426 break;
427 }
428 }
429 LYINFLOG("CID in fUNC :%d",*cellinfo);
430 return 0;
431}
432
433int lynq_network_deinit(void){
rjw267d8ee2022-03-15 09:21:29 +0800434 if (g_lynq_network_init_flag == 0)
435 {
436 LYERRLOG("deinit twice is not allowed");
437 return -1;
438 }
439 if (network_sock_fd > 0)
440 {
441 close(network_sock_fd);
442 }
443 g_lynq_network_init_flag = 0;
rjw415439a2022-03-02 15:23:11 +0800444 network_urc_status = 0;
rjw2183a5f2022-01-18 18:30:37 +0800445 return 0;
446}
447
448static char * lynqStrdupReadString(Parcel &p) {
449 size_t stringlen;
450 const char16_t *s16;
451
452 s16 = p.readString16Inplace(&stringlen);
453 return strndup16to8(s16, stringlen);
454}
455
456int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
457{
458 int ret = -1;
459 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
460 return ret;
461 int send_num = 0;
462 int recv_num = 0;
463 int num = 0;
464 lynq_client_t client_t;
465 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800466 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800467 memset(&client_t,0,sizeof(client_t));
468 client_t.request = RIL_REQUEST_OPERATOR;
469 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800470 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800471 memset(client_t.param,0,sizeof(client_t.param));
472
rjw415439a2022-03-02 15:23:11 +0800473 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800474 if(send_num<0)
475 {
476 LYERRLOG("sendto error:");
477 return ret;
478 }
479
480 //get data
rjw415439a2022-03-02 15:23:11 +0800481 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800482 if(recv_num == 0 ||recv_num <0)
483 {
484 LYERRLOG("recvfrom error");
485 return -1;
486 }
487 Parcel p;
488 p.setData((uint8_t *)res_data,sizeof(res_data));
489 p.setDataPosition(0);
490 if(p.dataAvail() > 0)
491 {
492 p.readInt32(&response.resp_type);
493 p.readInt32(&response.request);
494 p.readInt32(&response.slot_id);
495 p.readInt32(&response.error);
496 if(response.error != 0)
497 {
498 LYERRLOG("response return error");
499 return response.error;
500 }
501 p.readInt32(&num);
502 if(num == 0)
503 {
504 LYERRLOG("no paramters");
505 }else{
506 for(int i = 0; i<num;i++)
507 {
508 resp[i] = lynqStrdupReadString(p);
509 }
510 if(NULL != resp[0])
511 {
rjwaae473f2022-01-25 14:57:53 +0800512 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800513 }
514 if(NULL != resp[1])
515 {
rjwaae473f2022-01-25 14:57:53 +0800516 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800517 }
518 if(NULL != resp[2])
519 {
rjwaae473f2022-01-25 14:57:53 +0800520 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800521 }
522 }
523 }
524 return response.error;
525}
526
527int lynq_query_network_selection_mode(int *netselMode)
528{
529 int ret = -1;
530 if(NULL == netselMode)
531 return ret;
532 int send_num = 0;
533 int recv_num = 0;
534 int readnum = 0;
535 lynq_client_t client_t;
536 char res_data[LYNQ_REC_BUF] = {0};
537 memset(&client_t,0,sizeof(client_t));
538 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
539 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800540 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800541
542 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800543 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800544 if(send_num<0)
545 {
546 LYERRLOG("sendto error:");
547 return -1;
548 }
549
550 //get data
rjw415439a2022-03-02 15:23:11 +0800551 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800552 if(recv_num == 0 ||recv_num <0)
553 {
554 LYERRLOG("recvfrom error");
555 return -1;
556 }
557 Parcel p;
558 p.setData((uint8_t *)res_data,sizeof(res_data));
559 p.setDataPosition(0);
560 if(p.dataAvail() > 0)
561 {
562 p.readInt32(&response.resp_type);
563 p.readInt32(&response.request);
564 p.readInt32(&response.slot_id);
565 p.readInt32(&response.error);
566 if(response.error != 0)
567 {
568 LYERRLOG("response return error");
569 return response.error;
570 }
571 p.readInt32(&readnum);
572 p.readInt32(netselMode);
573 }
574 return response.error;
575}
576
577int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
578{
579 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800580 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800581 return ret;
rjw7610e272022-02-24 13:37:11 +0800582 if(strlen(mode) == 0)
583 {
584 return ret;
585 }
rjw2183a5f2022-01-18 18:30:37 +0800586 int send_num = 0;
587 lynq_client_t client_t;
588 int recv_num = 0;
589 char res_data[LYNQ_REC_BUF] = {0};
590 memset(&client_t,0,sizeof(client_t));
591 if(!strcmp(mode,"Auto"))
592 {
593 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
594 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800595 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800596 memset(client_t.param,0,sizeof(client_t.param));
597 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800598 if(mccmnc == NULL)
599 {
600 LYERRLOG("mccmnc is NULL!!!");
601 return ret;
602 }
603 if(strlen(mccmnc) == 0)
604 {
605 LYERRLOG("mccmnc strlen is 0!!!");
606 return ret;
607 }
rjw2183a5f2022-01-18 18:30:37 +0800608 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
609 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800610 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800611 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800612 }else{
613 LYERRLOG("request error");
614 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800615 }
616
617
rjw415439a2022-03-02 15:23:11 +0800618 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800619 if(send_num<0)
620 {
621 LYERRLOG("sendto error:");
622 return ret;
623 }
624
rjw415439a2022-03-02 15:23:11 +0800625 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800626 if(recv_num == 0 ||recv_num <0)
627 {
628 LYERRLOG("recvfrom error");
629 return -1;
630 }
631
632 Parcel p;
633 p.setData((uint8_t *)res_data,sizeof(res_data));
634 p.setDataPosition(0);
635 if(p.dataAvail() > 0)
636 {
637 p.readInt32(&response.resp_type);
638 p.readInt32(&response.request);
639 p.readInt32(&response.slot_id);
640 p.readInt32(&response.error);
641 }
642 return response.error;
643}
644
645int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
646{
647 int ret = -1;
648 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
649 return ret;
650 int send_num = 0;
651 int recv_num = 0;
652 char res_data[LYNQ_REC_BUF] = {0};
653 char *resp[128];
654 lynq_client_t client_t;
655 memset(&client_t,0,sizeof(client_t));
656 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
657 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800658 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800659 memset(client_t.param,0,sizeof(client_t.param));
660
rjw415439a2022-03-02 15:23:11 +0800661 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800662 if(send_num<0)
663 {
664 LYERRLOG("sendto error:");
665 return ret;
666 }
667
668 //get data
rjw415439a2022-03-02 15:23:11 +0800669 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800670 if(recv_num == 0 ||recv_num <0)
671 {
672 LYERRLOG("recvfrom error");
673 return -1;
674 }
675 Parcel p;
676 p.setData((uint8_t *)res_data,sizeof(res_data));
677 p.setDataPosition(0);
678 if(p.dataAvail() > 0)
679 {
680 p.readInt32(&response.resp_type);
681 p.readInt32(&response.request);
682 p.readInt32(&response.slot_id);
683 p.readInt32(&response.error);
684 if(response.error != 0)
685 {
686 LYERRLOG("response return error");
687 return response.error;
688 }
689 int num =p.readInt32();
690 if(num == 0)
691 {
692 LYERRLOG("no paramters");
693 }else{
694 for(int i = 0; i<num;i++)
695 {
696 resp[i] = lynqStrdupReadString(p);
697 }
698 if(NULL != resp[0])
699 {
rjwaae473f2022-01-25 14:57:53 +0800700 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800701 }
702 if(NULL != resp[1])
703 {
rjwaae473f2022-01-25 14:57:53 +0800704 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800705 }
706 if(NULL != resp[2])
707 {
rjwaae473f2022-01-25 14:57:53 +0800708 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800709 }
710 if(NULL != resp[3])
711 {
rjwaae473f2022-01-25 14:57:53 +0800712 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800713 }
714 }
715 }
716 return response.error;
717}
718
719int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
720{
721 int ret = -1;
722 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
723 return ret;
724 int send_num = 0;
725 int recv_num = 0;
726 int num = 0;
727 char str[LYNQ_TYPE_BUF];
728 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800729 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800730 lynq_client_t client_t;
731 memset(&client_t,0,sizeof(client_t));
732 if(strlen(type)>LYNQ_TYPE_BUF)
733 {
734 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
735 }
736 memcpy(str,type,strlen(type)+1);
737 strUpper(str);
738 if(!strcmp(str,"VOICE"))
739 {
740 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
741 }else if(!strcmp(str,"DATA")){
742 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
743 }else if(!strcmp(str,"IMS")){
744 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
745 }else{
746 LYERRLOG("request error");
747 return ret;
748 }
749 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800750 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800751 memset(client_t.param,0,sizeof(client_t.param));
752
rjw415439a2022-03-02 15:23:11 +0800753 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800754 if(send_num<0)
755 {
756 LYERRLOG("sendto error:");
757 return ret;
758 }
759
760 //get data
rjw415439a2022-03-02 15:23:11 +0800761 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800762 if(recv_num == 0 ||recv_num <0)
763 {
764 LYERRLOG("recvfrom error");
765 return -1;
766 }
767 Parcel p;
768 p.setData((uint8_t *)res_data,sizeof(res_data));
769 p.setDataPosition(0);
770 if(p.dataAvail() > 0)
771 {
772 p.readInt32(&response.resp_type);
773 p.readInt32(&response.request);
774 p.readInt32(&response.slot_id);
775 p.readInt32(&response.error);
776 if(response.error != 0)
777 {
778 LYERRLOG("response return error");
779 return response.error;
780 }
781 if(!strcmp(str,"VOICE"))
782 {
783 p.readInt32(&num);
784 if(num == 15)
785 {
786 *regState = atoi(lynqStrdupReadString(p));
787 lynqStrdupReadString(p);
788 lynqStrdupReadString(p);
789 *netType = atoi(lynqStrdupReadString(p));
790 }
791 }else if(!strcmp(str,"DATA")){
792 p.readInt32(&num);
793 if(num == 11)
794 {
795 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800796 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800797 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800798
799 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800800 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800801 *netType = atoi(lynqStrdupReadString(p));
802 }
803
804 }else if(!strcmp(str,"IMS")){
805 p.readInt32(&num);
806 if(num == 2)
807 {
808 p.readInt32(imsRegState);
809 p.readInt32(radioTechFam);
810 }
811 }else{
812 LYERRLOG("request error");
813 return ret;
814 }
815 }
816 return response.error;
817}
818
819int lynq_query_prefferred_networktype(int *preNetType)
820{
821 int ret = -1;
822 int send_num = 0;
823 int recv_num = 0;
824 int num = 0;
825 char res_data[LYNQ_REC_BUF] = {0};
826 lynq_client_t client_t;
827 memset(&client_t,0,sizeof(client_t));
828 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
829 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800830 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800831 memset(client_t.param,0,sizeof(client_t.param));
832
rjw415439a2022-03-02 15:23:11 +0800833 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800834 if(send_num<0)
835 {
836 LYERRLOG("sendto error:");
837 return ret;
838 }
839
840 //get data
rjw415439a2022-03-02 15:23:11 +0800841 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800842 if(recv_num == 0 ||recv_num <0)
843 {
844 LYERRLOG("recvfrom error");
845 return -1;
846 }
847 Parcel p;
848 p.setData((uint8_t *)res_data,sizeof(res_data));
849 p.setDataPosition(0);
850 if(p.dataAvail() > 0)
851 {
852 p.readInt32(&response.resp_type);
853 p.readInt32(&response.request);
854 p.readInt32(&response.slot_id);
855 p.readInt32(&response.error);
856 if(response.error != 0)
857 {
858 LYERRLOG("response return error");
859 return response.error;
860 }
861 p.readInt32(&num);
862 p.readInt32(preNetType);
863 }
864 return response.error;
865}
866
867int lynq_set_prefferred_networktype(const int preffertype)
868{
869 int ret = -1;
870 if(preffertype < 0||preffertype >33)
871 return ret;
872 int send_num = 0;
873 lynq_client_t client_t;
874 int recv_num = 0;
875 char res_data[LYNQ_REC_BUF] = {0};
876 memset(&client_t,0,sizeof(client_t));
877 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
878 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800879 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800880 sprintf(client_t.param,"%d",preffertype);
rjw415439a2022-03-02 15:23:11 +0800881 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800882 if(send_num<0)
883 {
884 LYERRLOG("sendto error:");
885 return ret;
886 }
887
rjw415439a2022-03-02 15:23:11 +0800888 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800889 if(recv_num == 0 ||recv_num <0)
890 {
891 LYERRLOG("recvfrom error");
892 return -1;
893 }
894
895 Parcel p;
896 p.setData((uint8_t *)res_data,sizeof(res_data));
897 p.setDataPosition(0);
898 if(p.dataAvail() > 0)
899 {
900 p.readInt32(&response.resp_type);
901 p.readInt32(&response.request);
902 p.readInt32(&response.slot_id);
903 p.readInt32(&response.error);
904 }
905
906 return response.error;
907
908}
909
910int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
911{
912 int ret = -1;
913 if(NULL == realNum)
914 return ret;
915 int send_num = 0;
916 int recv_num = 0;
917 int num = 0;
918 char res_data[LYNQ_REC_BUF] = {0};
919 lynq_client_t client_t;
920 memset(&client_t,0,sizeof(client_t));
921 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
922 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800923 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800924 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800925 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800926 if(send_num<0)
927 {
928 LYERRLOG("sendto error:");
929 return ret;
930 }
931
932 //get data
rjw415439a2022-03-02 15:23:11 +0800933 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800934 if(recv_num == 0 ||recv_num <0)
935 {
936 LYERRLOG("recvfrom error");
937 return -1;
938 }
939 Parcel p;
940 p.setData((uint8_t *)res_data,sizeof(res_data));
941 p.setDataPosition(0);
942 if(p.dataAvail() > 0)
943 {
944 p.readInt32(&response.resp_type);
945 p.readInt32(&response.request);
946 p.readInt32(&response.slot_id);
947 p.readInt32(&response.error);
948 if(response.error != 0)
949 {
950 LYERRLOG("response return error");
951 return response.error;
952 }
953 p.readInt32(&num);
954 LYINFLOG("cell info num:%d",num);
955 *realNum = num;
956 for(int i = 0;i<num;i++)
957 {
958 copyCellInfoList(p,&cellinfo[i]);
959 }
960 }
961 return response.error;
962
963}
964
965int lynq_set_unsol_cell_info_listrate(const int rate)
966{
967 int ret = -1;
968 int send_num = 0;
969 int recv_num = 0;
970 char res_data[LYNQ_REC_BUF] = {0};
971 lynq_client_t client_t;
972 memset(&client_t,0,sizeof(client_t));
973 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
974 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800975 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800976 sprintf(client_t.param,"%d",rate);
977
rjw415439a2022-03-02 15:23:11 +0800978 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800979 if(send_num<0)
980 {
981 LYERRLOG("sendto error:");
982 return ret;
983 }
984
rjw415439a2022-03-02 15:23:11 +0800985 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800986 if(recv_num == 0 ||recv_num <0)
987 {
988 LYERRLOG("recvfrom error");
989 return -1;
990 }
991
992 Parcel p;
993 p.setData((uint8_t *)res_data,sizeof(res_data));
994 p.setDataPosition(0);
995 if(p.dataAvail() > 0)
996 {
997 p.readInt32(&response.resp_type);
998 p.readInt32(&response.request);
999 p.readInt32(&response.slot_id);
1000 p.readInt32(&response.error);
1001 }
1002
1003 return response.error;
1004}
1005
1006int lynq_set_band_mode(const int bandmode)
1007{
1008 int ret = -1;
1009 int send_num = 0;
1010 int recv_num = 0;
1011 char res_data[LYNQ_REC_BUF] = {0};
1012 lynq_client_t client_t;
1013 memset(&client_t,0,sizeof(client_t));
1014 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1015 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001016 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001017 sprintf(client_t.param,"%d",bandmode);
1018
rjw415439a2022-03-02 15:23:11 +08001019 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001020 if(send_num<0)
1021 {
1022 LYERRLOG("sendto error:");
1023 return ret;
1024 }
1025
rjw415439a2022-03-02 15:23:11 +08001026 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001027 if(recv_num == 0 ||recv_num <0)
1028 {
1029 LYERRLOG("recvfrom error");
1030 return -1;
1031 }
1032
1033 Parcel p;
1034 p.setData((uint8_t *)res_data,sizeof(res_data));
1035 p.setDataPosition(0);
1036 if(p.dataAvail() > 0)
1037 {
1038 p.readInt32(&response.resp_type);
1039 p.readInt32(&response.request);
1040 p.readInt32(&response.slot_id);
1041 p.readInt32(&response.error);
1042 }
1043
1044 return response.error;
1045}
1046
1047int lynq_query_available_bandmode(int availBanMode[])
1048{
1049 int ret = -1;
1050 if(NULL == availBanMode)
1051 return ret;
1052 int send_num = 0;
1053 int recv_num = 0;
1054 int num = 0;
1055 int res = 0;
1056 char res_data[LYNQ_REC_BUF] = {0};
1057 lynq_client_t client_t;
1058 memset(&client_t,0,sizeof(client_t));
1059 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1060 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001061 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001062 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +08001063 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001064 if(send_num<0)
1065 {
1066 LYERRLOG("sendto error:");
1067 return ret;
1068 }
1069
1070 //get data
rjw415439a2022-03-02 15:23:11 +08001071 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001072 if(recv_num == 0 ||recv_num <0)
1073 {
1074 LYERRLOG("recvfrom error");
1075 return -1;
1076 }
rjw7610e272022-02-24 13:37:11 +08001077 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001078 {
1079 availBanMode[i]=0;
1080 }
1081 Parcel p;
1082 p.setData((uint8_t *)res_data,sizeof(res_data));
1083 p.setDataPosition(0);
1084
1085 if(p.dataAvail() > 0)
1086 {
1087 p.readInt32(&response.resp_type);
1088 p.readInt32(&response.request);
1089 p.readInt32(&response.slot_id);
1090 p.readInt32(&response.error);
1091 if(response.error != 0)
1092 {
1093 LYERRLOG("response return error");
1094 return response.error;
1095 }
1096 p.readInt32(&num);
1097 LYINFLOG("num = %d",num);
1098 availBanMode[0] = num;
1099 for(int i=1 ;i<=num;i++)
1100 {
1101 p.readInt32(&res);
1102 availBanMode[i]=res;
1103 }
1104 }
1105
1106 return response.error;
1107}
1108
1109int lynq_radio_on(const int data)
1110{
1111 int ret = -1;
1112 if(data < 0)
1113 return ret;
1114 int send_num = 0;
1115 char res_data[LYNQ_REC_BUF] = {0};
1116 int recv_num = 0;
1117 lynq_client_t client_t;
1118 memset(&client_t,0,sizeof(client_t));
1119 client_t.request = RIL_REQUEST_RADIO_POWER;
1120 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001121 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001122 sprintf(client_t.param,"%d",data);
1123
rjw415439a2022-03-02 15:23:11 +08001124 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001125 if(send_num<0)
1126 {
1127 LYERRLOG("sendto error:");
1128 return ret;
1129 }
1130
rjw415439a2022-03-02 15:23:11 +08001131 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001132 if(recv_num == 0 ||recv_num <0)
1133 {
1134 LYERRLOG("recvfrom error");
1135 return -1;
1136 }
1137
1138 Parcel p;
1139 p.setData((uint8_t *)res_data,sizeof(res_data));
1140 p.setDataPosition(0);
1141 if(p.dataAvail() > 0)
1142 {
1143 p.readInt32(&response.resp_type);
1144 p.readInt32(&response.request);
1145 p.readInt32(&response.slot_id);
1146 p.readInt32(&response.error);
1147 }
1148
1149 return response.error;
1150}
1151
1152int lynq_query_radio_tech(int* radioTech)
1153{
1154 int ret = -1;
1155 if(NULL == radioTech)
1156 return ret;
1157 int send_num = 0;
1158 int recv_num = 0;
1159 int num = 0;
1160 char res_data[LYNQ_REC_BUF] = {0};
1161 lynq_client_t client_t;
1162 memset(&client_t,0,sizeof(client_t));
1163 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1164 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001165 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001166 memset(client_t.param,0,sizeof(client_t.param));
1167
rjw415439a2022-03-02 15:23:11 +08001168 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001169 if(send_num<0)
1170 {
1171 LYERRLOG("sendto error:");
1172 return ret;
1173 }
1174
rjw415439a2022-03-02 15:23:11 +08001175 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001176 if(recv_num == 0 ||recv_num <0)
1177 {
1178 LYERRLOG("recvfrom error");
1179 return -1;
1180 }
1181 Parcel p;
1182 p.setData((uint8_t *)res_data,sizeof(res_data));
1183 p.setDataPosition(0);
1184
1185 if(p.dataAvail() > 0)
1186 {
1187 p.readInt32(&response.resp_type);
1188 p.readInt32(&response.request);
1189 p.readInt32(&response.slot_id);
1190 p.readInt32(&response.error);
1191 if(response.error != 0)
1192 {
1193 LYERRLOG("response return error");
1194 return response.error;
1195 }
1196 p.readInt32(&num);
1197 p.readInt32(radioTech);
1198 }
1199 return response.error;
1200}
1201
1202int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1203{
1204 int ret = -1;
1205 if(NULL == solSigStren)
1206 return ret;
1207 int send_num = 0;
1208 int recv_num = 0;
1209 int sum = 0;
1210 int LTE_signalstrength = 0;
1211 int WCDMA_signalstrength = 0;
1212 int none = 0;
1213
1214 char res_data[LYNQ_REC_BUF] = {0};
1215 lynq_client_t client_t;
1216 memset(&client_t,0,sizeof(client_t));
1217 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1218 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001219 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001220 memset(client_t.param,0,sizeof(client_t.param));
1221
rjw415439a2022-03-02 15:23:11 +08001222 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001223 if(send_num<0)
1224 {
1225 LYERRLOG("sendto error:");
1226 return ret;
1227 }
1228
1229 //get data
rjw415439a2022-03-02 15:23:11 +08001230 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001231 if(recv_num == 0 ||recv_num <0)
1232 {
1233 LYERRLOG("recvfrom error");
1234 return -1;
1235 }
1236 Parcel p;
1237 p.setData((uint8_t *)res_data,sizeof(res_data));
1238 p.setDataPosition(0);
1239
1240 if(p.dataAvail() > 0)
1241 {
1242 p.readInt32(&response.resp_type);
1243 p.readInt32(&response.request);
1244 p.readInt32(&response.slot_id);
1245 p.readInt32(&response.error);
1246 if(response.error != 0)
1247 {
1248 LYERRLOG("response return error");
1249 return response.error;
1250 }
1251
1252 p.readInt32(&solSigStren->rssi);
1253 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1254 {
1255 solSigStren->gw_sig_valid = 1;
1256 }else{
1257 solSigStren->gw_sig_valid = 0;
1258 }
1259
1260 p.readInt32(&none);
1261 p.readInt32(&none);
1262 p.readInt32(&none);
1263 p.readInt32(&none);
1264 p.readInt32(&none);
1265 p.readInt32(&none);
1266 p.readInt32(&none);
1267 p.readInt32(&LTE_signalstrength);
1268 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1269 p.readInt32(&solSigStren->rsrp);
1270 p.readInt32(&solSigStren->rsrq);
1271 p.readInt32(&solSigStren->rssnr);
1272 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1273 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1274 {
1275 solSigStren->lte_sig_valid = 1;
1276 }else{
1277 solSigStren->lte_sig_valid = 0;
1278 }
1279
1280 p.readInt32(&none);
1281 p.readInt32(&none);
1282 p.readInt32(&none);
1283 p.readInt32(&none);
1284 p.readInt32(&none);
1285 p.readInt32(&WCDMA_signalstrength);
1286 p.readInt32(&none);
1287 p.readInt32(&solSigStren->rscp);
1288 p.readInt32(&solSigStren->ecno);
1289 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1290 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1291 {
rjw479d38b2022-01-22 14:10:42 +08001292 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001293 }else{
rjw479d38b2022-01-22 14:10:42 +08001294 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001295 }
rjw479d38b2022-01-22 14:10:42 +08001296 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001297 p.readInt32(&solSigStren->ssRsrp);
1298 p.readInt32(&solSigStren->ssRsrq);
1299 p.readInt32(&solSigStren->ssSinr);
1300 p.readInt32(&solSigStren->csiRsrp);
1301 p.readInt32(&solSigStren->csiRsrq);
1302 p.readInt32(&solSigStren->csiSinr);
1303 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1304 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1305 if(sum != 0)
1306 {
1307 solSigStren->nr_sig_valid = 1;
1308 }else{
1309 LYERRLOG("None of NR signal info");
1310 }
1311 }
1312 return response.error;
1313}
rjw415439a2022-03-02 15:23:11 +08001314
rjwc3e81b82022-03-10 11:04:24 +08001315int lynq_set_ims(const int ims_mode)
1316{
1317 int ret = -1;
1318 if (ims_mode < 0 || ims_mode > 1)
1319 {
1320 LYERRLOG("incoming ims_mode error");
1321 return ret;
1322 }
1323 int send_num = 0;
1324 char res_data[LYNQ_REC_BUF] = {0};
1325 int recv_num = 0;
1326 lynq_client_t client_t;
1327
1328 memset(&client_t,0,sizeof(client_t));
1329 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1330 client_t.paramLen = 1;
1331 client_t.uToken = network_Global_uToken;
1332 sprintf(client_t.param,"%d",ims_mode);
1333
1334 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1335 if (send_num<0)
1336 {
1337 LYERRLOG("sendto error:");
1338 return ret;
1339 }
1340
1341 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
1342 if (recv_num == 0 || recv_num < 0)
1343 {
1344 LYERRLOG("recvfrom error");
1345 return -1;
1346 }
1347
1348 Parcel p;
1349 p.setData((uint8_t *)res_data,sizeof(res_data));
1350 p.setDataPosition(0);
1351 if (p.dataAvail() > 0)
1352 {
1353 p.readInt32(&response.resp_type);
1354 p.readInt32(&response.request);
1355 p.readInt32(&response.slot_id);
1356 p.readInt32(&response.error);
1357 }
1358
1359 return response.error;
1360}
1361
1362
rjw415439a2022-03-02 15:23:11 +08001363/*Used to wait for an update signal*/
1364int lynq_wait_signalchanges(int *handle)
1365{
1366 LYDBGLOG("start wait signalchanges info");
1367 if(NULL == handle)
1368 {
1369 LYERRLOG("illegal input");
1370 return -1;
1371 }
1372 wait_signal_changes();
1373 LYDBGLOG("get signalchanges");
1374 *handle = network_wait_urc_id;
1375 return 0;
1376}
1377/*Used to get urc info*/
1378int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1379{
1380 LYDBGLOG("start get urc info");
1381 if(handle != 1002&&handle != 1009)
1382 {
1383 LYINFLOG("invalid handle!!!");
1384 return -1;
1385 }
1386 if(NULL == solSigStren && NULL == slot_id)
1387 {
1388 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1389 return -1;
1390 }
1391 switch(handle)
1392 {
1393 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1394 {
1395 LYDBGLOG("get state update to VOICE");
1396 *slot_id = network_urc_slot_id;
1397 LYINFLOG("slot_id = %d",network_urc_slot_id);
1398 }
1399 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1400 {
1401 LYDBGLOG("get state update to signal info");
1402 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1403 solSigStren->rssi = network_urc_solSigStren.rssi;
1404 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1405 solSigStren->rscp = network_urc_solSigStren.rscp;
1406 solSigStren->ecno = network_urc_solSigStren.ecno;
1407 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1408 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1409 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1410 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1411 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1412 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1413 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1414 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1415 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1416 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1417 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1418 }
1419 }
1420 return 0;
1421}