blob: 3ef9d70855ab3faad100abb4791f62056707fb12 [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>
12
13#include "lynq_network.h"
14#include "liblog/lynq_deflog.h"
15#define LYNQ_SERVICE_PORT 8088
16#define LYNQ_URC_SERVICE_PORT 8086
17#define LYNQ_URC_ADDRESS "0.0.0.0"
18#define LYNQ_ADDRESS "127.0.0.1"
19#define LYNQ_REQUEST_PARAM_BUF 8192
20#define LYNQ_REC_BUF 8192
21#define LYNQ_RESP_BUF 128
22#define LYNQ_TYPE_BUF 10
23#define USER_LOG_TAG "LYNQ_NETWORK"
24
25
26using ::android::Parcel;
27
28
29typedef struct{
30 int uToken;
31 int request;
32 int paramLen;
33 char param[LYNQ_REQUEST_PARAM_BUF];
34}lynq_client_t;
35
36typedef struct{
37 int resp_type;
38 int request;
39 int slot_id;
40 int error;
41}lynq_resp_t;
42
43lynq_client_t client_t;
44lynq_resp_t response;
45/*socket*/
46
47
48int len_addr_serv;
49int len_urc_addr_serv;
50struct sockaddr_in addr_serv;
51struct sockaddr_in urc_addr_serv;
52static int sock_fd = 0;
53int lynq_client_sockfd;
54int urc_sock_fd = 0;
55int Global_uToken = 0;
56int slot_id = -1;
57int urc_status = 1;
58
59typedef enum{
60 LYNQ_E_CARDSTATE_ERROR=8000,
61 /* The voice service state is out of service*/
62 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
63 /* The voice service state is EMERGENCY_ONLY*/
64 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
65 /* The radio power is power off*/
66 LYNQ_E_STATE_POWER_OFF=8003,
67 LYNQ_E_TIME_OUT=8004,
68 /*create or open sms DB fail */
69 LYNQ_E_SMS_DB_FAIL=8005,
70 /*Failed to execute sql statement*/
71 LYNQ_E_SMS_SQL_FAIL = 8006,
72 LYNQ_E_SMS_NOT_FIND = 8007,
73 /* The logic conflict*/
74 LYNQ_E_CONFLICT=9000,
75 /*Null anomaly*/
76 LYNQ_E_NULL_ANONALY=9001
77}LYNQ_E;
78
79void *thread_urc_recv(void *p)
80{
81 Parcel *urc_p =NULL;
82 char urc_data[LYNQ_REC_BUF];
83 int slot_id = -1;
84 int resp_type = -1;
85 int urc_id = -1;
86 int res = 0;
87 int none = 0;
88 int NR_sum = 0;
89 signalStrength_t urc_solSigStren;
90 int urc_LTE_signalstrength = 0;
91 int urc_WCDMA_signalstrength = 0;
92
93 LYINFLOG("urc thread is running");
94 while(urc_status)
95 {
96 bzero(urc_data,LYNQ_REC_BUF);
97 res = recvfrom(urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&urc_addr_serv,(socklen_t*)&len_urc_addr_serv);
98 if(res<=0)
99 {
100 LYERRLOG("thread_urc_recv step2 fail:");
101 break;
102 }
103 urc_p = new Parcel();
104 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
105 urc_p->setDataPosition(0);
106 if(urc_p->dataAvail()>0)
107 {
108 urc_p->readInt32(&resp_type);
109 urc_p->readInt32(&urc_id);
110 urc_p->readInt32(&slot_id);
111 switch(urc_id)
112 {
113 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
114 {
115 LYINFLOG("slot_id = %d",slot_id);
116 }
117 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
118 {
119 urc_p->readInt32(&urc_solSigStren.rssi);
120 if((urc_solSigStren.rssi!=99)&&(urc_solSigStren.rssi!=0))
121 {
122 urc_solSigStren.gw_sig_valid = 1;
123 }else{
124 urc_solSigStren.gw_sig_valid = 0;
125 }
rjw7610e272022-02-24 13:37:11 +0800126 if(urc_solSigStren.gw_sig_valid == 1)
127 {
128 LYINFLOG("urc_GSM_signalstrength:%d",urc_solSigStren.rssi);
129 }
rjw2183a5f2022-01-18 18:30:37 +0800130 urc_p->readInt32(&none);
131 urc_p->readInt32(&none);
132 urc_p->readInt32(&none);
133 urc_p->readInt32(&none);
134 urc_p->readInt32(&none);
135 urc_p->readInt32(&none);
136 urc_p->readInt32(&none);
137 urc_p->readInt32(&urc_LTE_signalstrength);
138 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
139 urc_p->readInt32(&urc_solSigStren.rsrp);
140 urc_p->readInt32(&urc_solSigStren.rsrq);
141 urc_p->readInt32(&urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800142 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
143 {
144 urc_solSigStren.lte_sig_valid = 1;
145 }else{
146 urc_solSigStren.lte_sig_valid = 0;
147 }
rjw7610e272022-02-24 13:37:11 +0800148 if(urc_solSigStren.lte_sig_valid == 1)
149 {
150 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
151 }
rjw2183a5f2022-01-18 18:30:37 +0800152
153 urc_p->readInt32(&none);
154 urc_p->readInt32(&none);
155 urc_p->readInt32(&none);
156 urc_p->readInt32(&none);
157 urc_p->readInt32(&none);
158 urc_p->readInt32(&urc_WCDMA_signalstrength);
159 urc_p->readInt32(&none);
160 urc_p->readInt32(&urc_solSigStren.rscp);
161 urc_p->readInt32(&urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800162 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
163 {
rjw7610e272022-02-24 13:37:11 +0800164 urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800165 }else{
rjw7610e272022-02-24 13:37:11 +0800166 urc_solSigStren.wcdma_sig_valid = 0;
167 }
168 if(urc_solSigStren.wcdma_sig_valid == 1)
169 {
170 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800171 }
172 urc_p->readInt32(&urc_solSigStren.ssRsrp);
173 urc_p->readInt32(&urc_solSigStren.ssRsrq);
174 urc_p->readInt32(&urc_solSigStren.ssSinr);
175 urc_p->readInt32(&urc_solSigStren.csiRsrp);
176 urc_p->readInt32(&urc_solSigStren.csiRsrq);
177 urc_p->readInt32(&urc_solSigStren.csiSinr);
178 NR_sum = (urc_solSigStren.ssRsrp) + (urc_solSigStren.ssRsrq) + (urc_solSigStren.ssSinr) + (urc_solSigStren.csiRsrp)+\
179 (urc_solSigStren.csiRsrq) + (urc_solSigStren.csiSinr);
180 if(NR_sum != 0)
181 {
182 urc_solSigStren.nr_sig_valid = 1;
183 }else{
rjw7610e272022-02-24 13:37:11 +0800184 urc_solSigStren.nr_sig_valid = 0;
185 }
186 if(urc_solSigStren.nr_sig_valid == 1)
187 {
188 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
189 urc_solSigStren.ssRsrp,urc_solSigStren.ssRsrq,urc_solSigStren.ssSinr, \
190 urc_solSigStren.csiRsrp,urc_solSigStren.csiRsrq,urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800191 }
192 }
193 }
194 }
195 }
196}
197
198
199int lynq_server_socket_start()
200{
201 sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
202 if(-1 == sock_fd)
203 {
204 LYERRLOG("socket open error");
205 return -1;
206 }
207 LYINFLOG("sock_fd = %d",sock_fd);
208
209 memset(&addr_serv, 0, sizeof(addr_serv));
210 addr_serv.sin_family = AF_INET;
211 addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
212 addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
213 len_addr_serv = sizeof(addr_serv);
214 return 0;
215}
216
217int lynq_urc_socket_start()
218{
219 pthread_t tid;
220 pthread_attr_t attr;
221 int on = 1;
222 urc_sock_fd = -1;
223 int ret = 0;
224 len_urc_addr_serv = sizeof(sockaddr_in);
225 urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
226 if (urc_sock_fd <0){
227 LYERRLOG("urc socket error");
228 ret = -1;
229 }
230 urc_addr_serv.sin_family = AF_INET;
231 urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
232 urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
233 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
234 ret = setsockopt(urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
235 if(ret <0)
236 {
237 LYERRLOG("urc socket set error");
238 return -1;
239 }
240 ret = bind(urc_sock_fd ,(struct sockaddr*)&urc_addr_serv, sizeof(urc_addr_serv));
241 if(ret <0)
242 {
243 LYERRLOG("urc socket bind error");
244 return -1;
245 }
246 pthread_attr_init(&attr);
247 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
248 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)urc_sock_fd);
249 if(ret <0)
250 {
251 LYERRLOG("urc pthread create error");
252 return -1;
253 }
254 LYINFLOG("urc start success");
255 return 0;
256}
257
258int lynq_network_init(int utoken){
259 if(utoken <0){
260 LYERRLOG("init err");
261 return -1;
262 }
263 urc_status = 1;
264 Global_uToken = utoken;
265 LYLOGSET(LOG_INFO);
266 LYLOGEINIT(USER_LOG_TAG);
267 int ret = 0;
268
269 ret = lynq_server_socket_start();
270 if(ret !=0)
271 {
272 LYERRLOG("init socket client fail!!!");
273 return -1;
274 }
275 ret = lynq_urc_socket_start();
276 if(ret != 0)
277 {
278 LYERRLOG("init socket urc fail!!!");
279 return -1;
280 }
281 return 0;
282}
283
284int strUpper(char * str)
285{
286 int i=0;
287 while(1)
288 {
289 if(str[i]=='\0')
290 {
291 break;
292 }
293 if(str[i]>='a'&&str[i]<='z')
294 {
295 str[i]=str[i]-32;
296 }
297 i++;
298 }
299 return 0;
300}
301
302int copyCellInfoList(Parcel &p,int *cellinfo)
303{
304 int32_t v=0;
305 int64_t v6=0;
306 if(NULL == cellinfo)
307 {
308 LYERRLOG("*cellinfo error");
309 }
310
311 int nothing = 0;
312 p.readInt32(&v);
313 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
314 p.readInt32(&nothing);
315 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
316 // p.readInt32(&cellinfo->cellinfo.registered);
317 p.readInt32(&v);
318 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
319 p.readInt64(&v6);
320 // cellinfo->cellinfo.timeStamp = v6;
321 switch(cellinfoType) {
322 case RIL_CELL_INFO_TYPE_GSM: {
323 p.readInt32(&nothing);
324 p.readInt32(&nothing);
325 p.readInt32(&nothing);
326 p.readInt32(cellinfo);
327 p.readInt32(&nothing);
328 p.readInt32(&nothing);
329 p.readInt32(&nothing);
330 break;
331 }
332 case RIL_CELL_INFO_TYPE_WCDMA: {
333 p.readInt32(&nothing);
334 p.readInt32(&nothing);
335 p.readInt32(&nothing);
336 p.readInt32(cellinfo);
337 p.readInt32(&nothing);
338 p.readInt32(&nothing);
339 p.readInt32(&nothing);
340 break;
341 }
342 case RIL_CELL_INFO_TYPE_CDMA: {
343 p.readInt32(&nothing);
344 p.readInt32(&nothing);
345 p.readInt32(&nothing);
346 p.readInt32(&nothing);
347 p.readInt32(&nothing);
348 p.readInt32(&nothing);
349 p.readInt32(&nothing);
350 p.readInt32(&nothing);
351 p.readInt32(&nothing);
352 p.readInt32(&nothing);
353 cellinfo = 0;
354
355 break;
356 }
357 case RIL_CELL_INFO_TYPE_LTE: {
358 p.readInt32(&nothing);
359 p.readInt32(&nothing);
360 p.readInt32(cellinfo);
361 p.readInt32(&nothing);
362 p.readInt32(&nothing);
363 p.readInt32(&nothing);
364 p.readInt32(&nothing);
365 p.readInt32(&nothing);
366 p.readInt32(&nothing);
367 p.readInt32(&nothing);
368 p.readInt32(&nothing);
369 break;
370 }
371 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
372 p.readInt32(&nothing);
373 p.readInt32(&nothing);
374 p.readInt32(&nothing);
375 p.readInt32(cellinfo);
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 break;
379 }
380 case RIL_CELL_INFO_TYPE_NR: {
381 p.readInt32(&nothing);
382 p.readInt32(&nothing);
383 p.readInt32(cellinfo);
384 p.readInt32(&nothing);
385 p.readInt32(&nothing);
386 p.readInt32(&nothing);
387 p.readInt32(&nothing);
388 p.readInt32(&nothing);
389 p.readInt32(&nothing);
390 p.readInt32(&nothing);
391 p.readInt32(&nothing);
392 p.readInt32(&nothing);
393 break;
394 }
395 }
396 LYINFLOG("CID in fUNC :%d",*cellinfo);
397 return 0;
398}
399
400int lynq_network_deinit(void){
401 close(sock_fd);
402 urc_status = 0;
403 return 0;
404}
405
406static char * lynqStrdupReadString(Parcel &p) {
407 size_t stringlen;
408 const char16_t *s16;
409
410 s16 = p.readString16Inplace(&stringlen);
411 return strndup16to8(s16, stringlen);
412}
413
414int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
415{
416 int ret = -1;
417 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
418 return ret;
419 int send_num = 0;
420 int recv_num = 0;
421 int num = 0;
422 lynq_client_t client_t;
423 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800424 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800425 memset(&client_t,0,sizeof(client_t));
426 client_t.request = RIL_REQUEST_OPERATOR;
427 client_t.paramLen = 0;
428 client_t.uToken = Global_uToken;
429 memset(client_t.param,0,sizeof(client_t.param));
430
431 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
432 if(send_num<0)
433 {
434 LYERRLOG("sendto error:");
435 return ret;
436 }
437
438 //get data
439 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
440 if(recv_num == 0 ||recv_num <0)
441 {
442 LYERRLOG("recvfrom error");
443 return -1;
444 }
445 Parcel p;
446 p.setData((uint8_t *)res_data,sizeof(res_data));
447 p.setDataPosition(0);
448 if(p.dataAvail() > 0)
449 {
450 p.readInt32(&response.resp_type);
451 p.readInt32(&response.request);
452 p.readInt32(&response.slot_id);
453 p.readInt32(&response.error);
454 if(response.error != 0)
455 {
456 LYERRLOG("response return error");
457 return response.error;
458 }
459 p.readInt32(&num);
460 if(num == 0)
461 {
462 LYERRLOG("no paramters");
463 }else{
464 for(int i = 0; i<num;i++)
465 {
466 resp[i] = lynqStrdupReadString(p);
467 }
468 if(NULL != resp[0])
469 {
rjwaae473f2022-01-25 14:57:53 +0800470 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800471 }
472 if(NULL != resp[1])
473 {
rjwaae473f2022-01-25 14:57:53 +0800474 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800475 }
476 if(NULL != resp[2])
477 {
rjwaae473f2022-01-25 14:57:53 +0800478 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800479 }
480 }
481 }
482 return response.error;
483}
484
485int lynq_query_network_selection_mode(int *netselMode)
486{
487 int ret = -1;
488 if(NULL == netselMode)
489 return ret;
490 int send_num = 0;
491 int recv_num = 0;
492 int readnum = 0;
493 lynq_client_t client_t;
494 char res_data[LYNQ_REC_BUF] = {0};
495 memset(&client_t,0,sizeof(client_t));
496 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
497 client_t.paramLen = 0;
498 client_t.uToken = Global_uToken;
499
500 memset(client_t.param,0,sizeof(client_t.param));
501 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
502 if(send_num<0)
503 {
504 LYERRLOG("sendto error:");
505 return -1;
506 }
507
508 //get data
509 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
510 if(recv_num == 0 ||recv_num <0)
511 {
512 LYERRLOG("recvfrom error");
513 return -1;
514 }
515 Parcel p;
516 p.setData((uint8_t *)res_data,sizeof(res_data));
517 p.setDataPosition(0);
518 if(p.dataAvail() > 0)
519 {
520 p.readInt32(&response.resp_type);
521 p.readInt32(&response.request);
522 p.readInt32(&response.slot_id);
523 p.readInt32(&response.error);
524 if(response.error != 0)
525 {
526 LYERRLOG("response return error");
527 return response.error;
528 }
529 p.readInt32(&readnum);
530 p.readInt32(netselMode);
531 }
532 return response.error;
533}
534
535int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
536{
537 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800538 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800539 return ret;
rjw7610e272022-02-24 13:37:11 +0800540 if(strlen(mode) == 0)
541 {
542 return ret;
543 }
rjw2183a5f2022-01-18 18:30:37 +0800544 int send_num = 0;
545 lynq_client_t client_t;
546 int recv_num = 0;
547 char res_data[LYNQ_REC_BUF] = {0};
548 memset(&client_t,0,sizeof(client_t));
549 if(!strcmp(mode,"Auto"))
550 {
551 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
552 client_t.paramLen = 0;
553 client_t.uToken = Global_uToken;
554 memset(client_t.param,0,sizeof(client_t.param));
555 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800556 if(mccmnc == NULL)
557 {
558 LYERRLOG("mccmnc is NULL!!!");
559 return ret;
560 }
561 if(strlen(mccmnc) == 0)
562 {
563 LYERRLOG("mccmnc strlen is 0!!!");
564 return ret;
565 }
rjw2183a5f2022-01-18 18:30:37 +0800566 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
567 client_t.paramLen = 1;
568 client_t.uToken = Global_uToken;
569 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800570 }else{
571 LYERRLOG("request error");
572 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800573 }
574
575
576 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
577 if(send_num<0)
578 {
579 LYERRLOG("sendto error:");
580 return ret;
581 }
582
583 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
584 if(recv_num == 0 ||recv_num <0)
585 {
586 LYERRLOG("recvfrom error");
587 return -1;
588 }
589
590 Parcel p;
591 p.setData((uint8_t *)res_data,sizeof(res_data));
592 p.setDataPosition(0);
593 if(p.dataAvail() > 0)
594 {
595 p.readInt32(&response.resp_type);
596 p.readInt32(&response.request);
597 p.readInt32(&response.slot_id);
598 p.readInt32(&response.error);
599 }
600 return response.error;
601}
602
603int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
604{
605 int ret = -1;
606 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
607 return ret;
608 int send_num = 0;
609 int recv_num = 0;
610 char res_data[LYNQ_REC_BUF] = {0};
611 char *resp[128];
612 lynq_client_t client_t;
613 memset(&client_t,0,sizeof(client_t));
614 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
615 client_t.paramLen = 0;
616 client_t.uToken = Global_uToken;
617 memset(client_t.param,0,sizeof(client_t.param));
618
619 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
620 if(send_num<0)
621 {
622 LYERRLOG("sendto error:");
623 return ret;
624 }
625
626 //get data
627 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
628 if(recv_num == 0 ||recv_num <0)
629 {
630 LYERRLOG("recvfrom error");
631 return -1;
632 }
633 Parcel p;
634 p.setData((uint8_t *)res_data,sizeof(res_data));
635 p.setDataPosition(0);
636 if(p.dataAvail() > 0)
637 {
638 p.readInt32(&response.resp_type);
639 p.readInt32(&response.request);
640 p.readInt32(&response.slot_id);
641 p.readInt32(&response.error);
642 if(response.error != 0)
643 {
644 LYERRLOG("response return error");
645 return response.error;
646 }
647 int num =p.readInt32();
648 if(num == 0)
649 {
650 LYERRLOG("no paramters");
651 }else{
652 for(int i = 0; i<num;i++)
653 {
654 resp[i] = lynqStrdupReadString(p);
655 }
656 if(NULL != resp[0])
657 {
rjwaae473f2022-01-25 14:57:53 +0800658 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800659 }
660 if(NULL != resp[1])
661 {
rjwaae473f2022-01-25 14:57:53 +0800662 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800663 }
664 if(NULL != resp[2])
665 {
rjwaae473f2022-01-25 14:57:53 +0800666 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800667 }
668 if(NULL != resp[3])
669 {
rjwaae473f2022-01-25 14:57:53 +0800670 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800671 }
672 }
673 }
674 return response.error;
675}
676
677int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
678{
679 int ret = -1;
680 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
681 return ret;
682 int send_num = 0;
683 int recv_num = 0;
684 int num = 0;
685 char str[LYNQ_TYPE_BUF];
686 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800687 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800688 lynq_client_t client_t;
689 memset(&client_t,0,sizeof(client_t));
690 if(strlen(type)>LYNQ_TYPE_BUF)
691 {
692 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
693 }
694 memcpy(str,type,strlen(type)+1);
695 strUpper(str);
696 if(!strcmp(str,"VOICE"))
697 {
698 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
699 }else if(!strcmp(str,"DATA")){
700 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
701 }else if(!strcmp(str,"IMS")){
702 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
703 }else{
704 LYERRLOG("request error");
705 return ret;
706 }
707 client_t.paramLen = 0;
708 client_t.uToken = Global_uToken;
709 memset(client_t.param,0,sizeof(client_t.param));
710
711 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
712 if(send_num<0)
713 {
714 LYERRLOG("sendto error:");
715 return ret;
716 }
717
718 //get data
719 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
720 if(recv_num == 0 ||recv_num <0)
721 {
722 LYERRLOG("recvfrom error");
723 return -1;
724 }
725 Parcel p;
726 p.setData((uint8_t *)res_data,sizeof(res_data));
727 p.setDataPosition(0);
728 if(p.dataAvail() > 0)
729 {
730 p.readInt32(&response.resp_type);
731 p.readInt32(&response.request);
732 p.readInt32(&response.slot_id);
733 p.readInt32(&response.error);
734 if(response.error != 0)
735 {
736 LYERRLOG("response return error");
737 return response.error;
738 }
739 if(!strcmp(str,"VOICE"))
740 {
741 p.readInt32(&num);
742 if(num == 15)
743 {
744 *regState = atoi(lynqStrdupReadString(p));
745 lynqStrdupReadString(p);
746 lynqStrdupReadString(p);
747 *netType = atoi(lynqStrdupReadString(p));
748 }
749 }else if(!strcmp(str,"DATA")){
750 p.readInt32(&num);
751 if(num == 11)
752 {
753 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800754 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800755 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800756
757 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800758 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800759 *netType = atoi(lynqStrdupReadString(p));
760 }
761
762 }else if(!strcmp(str,"IMS")){
763 p.readInt32(&num);
764 if(num == 2)
765 {
766 p.readInt32(imsRegState);
767 p.readInt32(radioTechFam);
768 }
769 }else{
770 LYERRLOG("request error");
771 return ret;
772 }
773 }
774 return response.error;
775}
776
777int lynq_query_prefferred_networktype(int *preNetType)
778{
779 int ret = -1;
780 int send_num = 0;
781 int recv_num = 0;
782 int num = 0;
783 char res_data[LYNQ_REC_BUF] = {0};
784 lynq_client_t client_t;
785 memset(&client_t,0,sizeof(client_t));
786 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
787 client_t.paramLen = 0;
788 client_t.uToken = Global_uToken;
789 memset(client_t.param,0,sizeof(client_t.param));
790
791 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
792 if(send_num<0)
793 {
794 LYERRLOG("sendto error:");
795 return ret;
796 }
797
798 //get data
799 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
800 if(recv_num == 0 ||recv_num <0)
801 {
802 LYERRLOG("recvfrom error");
803 return -1;
804 }
805 Parcel p;
806 p.setData((uint8_t *)res_data,sizeof(res_data));
807 p.setDataPosition(0);
808 if(p.dataAvail() > 0)
809 {
810 p.readInt32(&response.resp_type);
811 p.readInt32(&response.request);
812 p.readInt32(&response.slot_id);
813 p.readInt32(&response.error);
814 if(response.error != 0)
815 {
816 LYERRLOG("response return error");
817 return response.error;
818 }
819 p.readInt32(&num);
820 p.readInt32(preNetType);
821 }
822 return response.error;
823}
824
825int lynq_set_prefferred_networktype(const int preffertype)
826{
827 int ret = -1;
828 if(preffertype < 0||preffertype >33)
829 return ret;
830 int send_num = 0;
831 lynq_client_t client_t;
832 int recv_num = 0;
833 char res_data[LYNQ_REC_BUF] = {0};
834 memset(&client_t,0,sizeof(client_t));
835 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
836 client_t.paramLen = 1;
837 client_t.uToken = Global_uToken;
838 sprintf(client_t.param,"%d",preffertype);
839 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
840 if(send_num<0)
841 {
842 LYERRLOG("sendto error:");
843 return ret;
844 }
845
846 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
847 if(recv_num == 0 ||recv_num <0)
848 {
849 LYERRLOG("recvfrom error");
850 return -1;
851 }
852
853 Parcel p;
854 p.setData((uint8_t *)res_data,sizeof(res_data));
855 p.setDataPosition(0);
856 if(p.dataAvail() > 0)
857 {
858 p.readInt32(&response.resp_type);
859 p.readInt32(&response.request);
860 p.readInt32(&response.slot_id);
861 p.readInt32(&response.error);
862 }
863
864 return response.error;
865
866}
867
868int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
869{
870 int ret = -1;
871 if(NULL == realNum)
872 return ret;
873 int send_num = 0;
874 int recv_num = 0;
875 int num = 0;
876 char res_data[LYNQ_REC_BUF] = {0};
877 lynq_client_t client_t;
878 memset(&client_t,0,sizeof(client_t));
879 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
880 client_t.paramLen = 0;
881 client_t.uToken = Global_uToken;
882 memset(client_t.param,0,sizeof(client_t.param));
883 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
884 if(send_num<0)
885 {
886 LYERRLOG("sendto error:");
887 return ret;
888 }
889
890 //get data
891 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
892 if(recv_num == 0 ||recv_num <0)
893 {
894 LYERRLOG("recvfrom error");
895 return -1;
896 }
897 Parcel p;
898 p.setData((uint8_t *)res_data,sizeof(res_data));
899 p.setDataPosition(0);
900 if(p.dataAvail() > 0)
901 {
902 p.readInt32(&response.resp_type);
903 p.readInt32(&response.request);
904 p.readInt32(&response.slot_id);
905 p.readInt32(&response.error);
906 if(response.error != 0)
907 {
908 LYERRLOG("response return error");
909 return response.error;
910 }
911 p.readInt32(&num);
912 LYINFLOG("cell info num:%d",num);
913 *realNum = num;
914 for(int i = 0;i<num;i++)
915 {
916 copyCellInfoList(p,&cellinfo[i]);
917 }
918 }
919 return response.error;
920
921}
922
923int lynq_set_unsol_cell_info_listrate(const int rate)
924{
925 int ret = -1;
926 int send_num = 0;
927 int recv_num = 0;
928 char res_data[LYNQ_REC_BUF] = {0};
929 lynq_client_t client_t;
930 memset(&client_t,0,sizeof(client_t));
931 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
932 client_t.paramLen = 1;
933 client_t.uToken = Global_uToken;
934 sprintf(client_t.param,"%d",rate);
935
936 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
937 if(send_num<0)
938 {
939 LYERRLOG("sendto error:");
940 return ret;
941 }
942
943 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
944 if(recv_num == 0 ||recv_num <0)
945 {
946 LYERRLOG("recvfrom error");
947 return -1;
948 }
949
950 Parcel p;
951 p.setData((uint8_t *)res_data,sizeof(res_data));
952 p.setDataPosition(0);
953 if(p.dataAvail() > 0)
954 {
955 p.readInt32(&response.resp_type);
956 p.readInt32(&response.request);
957 p.readInt32(&response.slot_id);
958 p.readInt32(&response.error);
959 }
960
961 return response.error;
962}
963
964int lynq_set_band_mode(const int bandmode)
965{
966 int ret = -1;
967 int send_num = 0;
968 int recv_num = 0;
969 char res_data[LYNQ_REC_BUF] = {0};
970 lynq_client_t client_t;
971 memset(&client_t,0,sizeof(client_t));
972 client_t.request = RIL_REQUEST_SET_BAND_MODE;
973 client_t.paramLen = 1;
974 client_t.uToken = Global_uToken;
975 sprintf(client_t.param,"%d",bandmode);
976
977 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
978 if(send_num<0)
979 {
980 LYERRLOG("sendto error:");
981 return ret;
982 }
983
984 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
985 if(recv_num == 0 ||recv_num <0)
986 {
987 LYERRLOG("recvfrom error");
988 return -1;
989 }
990
991 Parcel p;
992 p.setData((uint8_t *)res_data,sizeof(res_data));
993 p.setDataPosition(0);
994 if(p.dataAvail() > 0)
995 {
996 p.readInt32(&response.resp_type);
997 p.readInt32(&response.request);
998 p.readInt32(&response.slot_id);
999 p.readInt32(&response.error);
1000 }
1001
1002 return response.error;
1003}
1004
1005int lynq_query_available_bandmode(int availBanMode[])
1006{
1007 int ret = -1;
1008 if(NULL == availBanMode)
1009 return ret;
1010 int send_num = 0;
1011 int recv_num = 0;
1012 int num = 0;
1013 int res = 0;
1014 char res_data[LYNQ_REC_BUF] = {0};
1015 lynq_client_t client_t;
1016 memset(&client_t,0,sizeof(client_t));
1017 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1018 client_t.paramLen = 0;
1019 client_t.uToken = Global_uToken;
1020 memset(client_t.param,0,sizeof(client_t.param));
1021 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1022 if(send_num<0)
1023 {
1024 LYERRLOG("sendto error:");
1025 return ret;
1026 }
1027
1028 //get data
1029 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1030 if(recv_num == 0 ||recv_num <0)
1031 {
1032 LYERRLOG("recvfrom error");
1033 return -1;
1034 }
rjw7610e272022-02-24 13:37:11 +08001035 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001036 {
1037 availBanMode[i]=0;
1038 }
1039 Parcel p;
1040 p.setData((uint8_t *)res_data,sizeof(res_data));
1041 p.setDataPosition(0);
1042
1043 if(p.dataAvail() > 0)
1044 {
1045 p.readInt32(&response.resp_type);
1046 p.readInt32(&response.request);
1047 p.readInt32(&response.slot_id);
1048 p.readInt32(&response.error);
1049 if(response.error != 0)
1050 {
1051 LYERRLOG("response return error");
1052 return response.error;
1053 }
1054 p.readInt32(&num);
1055 LYINFLOG("num = %d",num);
1056 availBanMode[0] = num;
1057 for(int i=1 ;i<=num;i++)
1058 {
1059 p.readInt32(&res);
1060 availBanMode[i]=res;
1061 }
1062 }
1063
1064 return response.error;
1065}
1066
1067int lynq_radio_on(const int data)
1068{
1069 int ret = -1;
1070 if(data < 0)
1071 return ret;
1072 int send_num = 0;
1073 char res_data[LYNQ_REC_BUF] = {0};
1074 int recv_num = 0;
1075 lynq_client_t client_t;
1076 memset(&client_t,0,sizeof(client_t));
1077 client_t.request = RIL_REQUEST_RADIO_POWER;
1078 client_t.paramLen = 1;
1079 client_t.uToken = Global_uToken;
1080 sprintf(client_t.param,"%d",data);
1081
1082 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1083 if(send_num<0)
1084 {
1085 LYERRLOG("sendto error:");
1086 return ret;
1087 }
1088
1089 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1090 if(recv_num == 0 ||recv_num <0)
1091 {
1092 LYERRLOG("recvfrom error");
1093 return -1;
1094 }
1095
1096 Parcel p;
1097 p.setData((uint8_t *)res_data,sizeof(res_data));
1098 p.setDataPosition(0);
1099 if(p.dataAvail() > 0)
1100 {
1101 p.readInt32(&response.resp_type);
1102 p.readInt32(&response.request);
1103 p.readInt32(&response.slot_id);
1104 p.readInt32(&response.error);
1105 }
1106
1107 return response.error;
1108}
1109
1110int lynq_query_radio_tech(int* radioTech)
1111{
1112 int ret = -1;
1113 if(NULL == radioTech)
1114 return ret;
1115 int send_num = 0;
1116 int recv_num = 0;
1117 int num = 0;
1118 char res_data[LYNQ_REC_BUF] = {0};
1119 lynq_client_t client_t;
1120 memset(&client_t,0,sizeof(client_t));
1121 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1122 client_t.paramLen = 0;
1123 client_t.uToken = Global_uToken;
1124 memset(client_t.param,0,sizeof(client_t.param));
1125
1126 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1127 if(send_num<0)
1128 {
1129 LYERRLOG("sendto error:");
1130 return ret;
1131 }
1132
1133 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1134 if(recv_num == 0 ||recv_num <0)
1135 {
1136 LYERRLOG("recvfrom error");
1137 return -1;
1138 }
1139 Parcel p;
1140 p.setData((uint8_t *)res_data,sizeof(res_data));
1141 p.setDataPosition(0);
1142
1143 if(p.dataAvail() > 0)
1144 {
1145 p.readInt32(&response.resp_type);
1146 p.readInt32(&response.request);
1147 p.readInt32(&response.slot_id);
1148 p.readInt32(&response.error);
1149 if(response.error != 0)
1150 {
1151 LYERRLOG("response return error");
1152 return response.error;
1153 }
1154 p.readInt32(&num);
1155 p.readInt32(radioTech);
1156 }
1157 return response.error;
1158}
1159
1160int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1161{
1162 int ret = -1;
1163 if(NULL == solSigStren)
1164 return ret;
1165 int send_num = 0;
1166 int recv_num = 0;
1167 int sum = 0;
1168 int LTE_signalstrength = 0;
1169 int WCDMA_signalstrength = 0;
1170 int none = 0;
1171
1172 char res_data[LYNQ_REC_BUF] = {0};
1173 lynq_client_t client_t;
1174 memset(&client_t,0,sizeof(client_t));
1175 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1176 client_t.paramLen = 0;
1177 client_t.uToken = Global_uToken;
1178 memset(client_t.param,0,sizeof(client_t.param));
1179
1180 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1181 if(send_num<0)
1182 {
1183 LYERRLOG("sendto error:");
1184 return ret;
1185 }
1186
1187 //get data
1188 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1189 if(recv_num == 0 ||recv_num <0)
1190 {
1191 LYERRLOG("recvfrom error");
1192 return -1;
1193 }
1194 Parcel p;
1195 p.setData((uint8_t *)res_data,sizeof(res_data));
1196 p.setDataPosition(0);
1197
1198 if(p.dataAvail() > 0)
1199 {
1200 p.readInt32(&response.resp_type);
1201 p.readInt32(&response.request);
1202 p.readInt32(&response.slot_id);
1203 p.readInt32(&response.error);
1204 if(response.error != 0)
1205 {
1206 LYERRLOG("response return error");
1207 return response.error;
1208 }
1209
1210 p.readInt32(&solSigStren->rssi);
1211 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1212 {
1213 solSigStren->gw_sig_valid = 1;
1214 }else{
1215 solSigStren->gw_sig_valid = 0;
1216 }
1217
1218 p.readInt32(&none);
1219 p.readInt32(&none);
1220 p.readInt32(&none);
1221 p.readInt32(&none);
1222 p.readInt32(&none);
1223 p.readInt32(&none);
1224 p.readInt32(&none);
1225 p.readInt32(&LTE_signalstrength);
1226 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1227 p.readInt32(&solSigStren->rsrp);
1228 p.readInt32(&solSigStren->rsrq);
1229 p.readInt32(&solSigStren->rssnr);
1230 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1231 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1232 {
1233 solSigStren->lte_sig_valid = 1;
1234 }else{
1235 solSigStren->lte_sig_valid = 0;
1236 }
1237
1238 p.readInt32(&none);
1239 p.readInt32(&none);
1240 p.readInt32(&none);
1241 p.readInt32(&none);
1242 p.readInt32(&none);
1243 p.readInt32(&WCDMA_signalstrength);
1244 p.readInt32(&none);
1245 p.readInt32(&solSigStren->rscp);
1246 p.readInt32(&solSigStren->ecno);
1247 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1248 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1249 {
rjw479d38b2022-01-22 14:10:42 +08001250 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001251 }else{
rjw479d38b2022-01-22 14:10:42 +08001252 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001253 }
rjw479d38b2022-01-22 14:10:42 +08001254 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001255 p.readInt32(&solSigStren->ssRsrp);
1256 p.readInt32(&solSigStren->ssRsrq);
1257 p.readInt32(&solSigStren->ssSinr);
1258 p.readInt32(&solSigStren->csiRsrp);
1259 p.readInt32(&solSigStren->csiRsrq);
1260 p.readInt32(&solSigStren->csiSinr);
1261 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1262 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1263 if(sum != 0)
1264 {
1265 solSigStren->nr_sig_valid = 1;
1266 }else{
1267 LYERRLOG("None of NR signal info");
1268 }
1269 }
1270 return response.error;
1271}