blob: bbb78899c51e87c264b7fb26a52ae51743d74631 [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 }
126
127 urc_p->readInt32(&none);
128 urc_p->readInt32(&none);
129 urc_p->readInt32(&none);
130 urc_p->readInt32(&none);
131 urc_p->readInt32(&none);
132 urc_p->readInt32(&none);
133 urc_p->readInt32(&none);
134 urc_p->readInt32(&urc_LTE_signalstrength);
135 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
136 urc_p->readInt32(&urc_solSigStren.rsrp);
137 urc_p->readInt32(&urc_solSigStren.rsrq);
138 urc_p->readInt32(&urc_solSigStren.rssnr);
139 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
140 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
141 {
142 urc_solSigStren.lte_sig_valid = 1;
143 }else{
144 urc_solSigStren.lte_sig_valid = 0;
145 }
146
147 urc_p->readInt32(&none);
148 urc_p->readInt32(&none);
149 urc_p->readInt32(&none);
150 urc_p->readInt32(&none);
151 urc_p->readInt32(&none);
152 urc_p->readInt32(&urc_WCDMA_signalstrength);
153 urc_p->readInt32(&none);
154 urc_p->readInt32(&urc_solSigStren.rscp);
155 urc_p->readInt32(&urc_solSigStren.ecno);
156 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
157 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
158 {
159 urc_solSigStren.lte_sig_valid = 1;
160 }else{
161 urc_solSigStren.lte_sig_valid = 0;
162 }
163 urc_p->readInt32(&urc_solSigStren.ssRsrp);
164 urc_p->readInt32(&urc_solSigStren.ssRsrq);
165 urc_p->readInt32(&urc_solSigStren.ssSinr);
166 urc_p->readInt32(&urc_solSigStren.csiRsrp);
167 urc_p->readInt32(&urc_solSigStren.csiRsrq);
168 urc_p->readInt32(&urc_solSigStren.csiSinr);
169 NR_sum = (urc_solSigStren.ssRsrp) + (urc_solSigStren.ssRsrq) + (urc_solSigStren.ssSinr) + (urc_solSigStren.csiRsrp)+\
170 (urc_solSigStren.csiRsrq) + (urc_solSigStren.csiSinr);
171 if(NR_sum != 0)
172 {
173 urc_solSigStren.nr_sig_valid = 1;
174 }else{
175 LYERRLOG("None of NR signal info");
176 }
177 }
178 }
179 }
180 }
181}
182
183
184int lynq_server_socket_start()
185{
186 sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
187 if(-1 == sock_fd)
188 {
189 LYERRLOG("socket open error");
190 return -1;
191 }
192 LYINFLOG("sock_fd = %d",sock_fd);
193
194 memset(&addr_serv, 0, sizeof(addr_serv));
195 addr_serv.sin_family = AF_INET;
196 addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
197 addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
198 len_addr_serv = sizeof(addr_serv);
199 return 0;
200}
201
202int lynq_urc_socket_start()
203{
204 pthread_t tid;
205 pthread_attr_t attr;
206 int on = 1;
207 urc_sock_fd = -1;
208 int ret = 0;
209 len_urc_addr_serv = sizeof(sockaddr_in);
210 urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
211 if (urc_sock_fd <0){
212 LYERRLOG("urc socket error");
213 ret = -1;
214 }
215 urc_addr_serv.sin_family = AF_INET;
216 urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
217 urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
218 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
219 ret = setsockopt(urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
220 if(ret <0)
221 {
222 LYERRLOG("urc socket set error");
223 return -1;
224 }
225 ret = bind(urc_sock_fd ,(struct sockaddr*)&urc_addr_serv, sizeof(urc_addr_serv));
226 if(ret <0)
227 {
228 LYERRLOG("urc socket bind error");
229 return -1;
230 }
231 pthread_attr_init(&attr);
232 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
233 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)urc_sock_fd);
234 if(ret <0)
235 {
236 LYERRLOG("urc pthread create error");
237 return -1;
238 }
239 LYINFLOG("urc start success");
240 return 0;
241}
242
243int lynq_network_init(int utoken){
244 if(utoken <0){
245 LYERRLOG("init err");
246 return -1;
247 }
248 urc_status = 1;
249 Global_uToken = utoken;
250 LYLOGSET(LOG_INFO);
251 LYLOGEINIT(USER_LOG_TAG);
252 int ret = 0;
253
254 ret = lynq_server_socket_start();
255 if(ret !=0)
256 {
257 LYERRLOG("init socket client fail!!!");
258 return -1;
259 }
260 ret = lynq_urc_socket_start();
261 if(ret != 0)
262 {
263 LYERRLOG("init socket urc fail!!!");
264 return -1;
265 }
266 return 0;
267}
268
269int strUpper(char * str)
270{
271 int i=0;
272 while(1)
273 {
274 if(str[i]=='\0')
275 {
276 break;
277 }
278 if(str[i]>='a'&&str[i]<='z')
279 {
280 str[i]=str[i]-32;
281 }
282 i++;
283 }
284 return 0;
285}
286
287int copyCellInfoList(Parcel &p,int *cellinfo)
288{
289 int32_t v=0;
290 int64_t v6=0;
291 if(NULL == cellinfo)
292 {
293 LYERRLOG("*cellinfo error");
294 }
295
296 int nothing = 0;
297 p.readInt32(&v);
298 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
299 p.readInt32(&nothing);
300 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
301 // p.readInt32(&cellinfo->cellinfo.registered);
302 p.readInt32(&v);
303 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
304 p.readInt64(&v6);
305 // cellinfo->cellinfo.timeStamp = v6;
306 switch(cellinfoType) {
307 case RIL_CELL_INFO_TYPE_GSM: {
308 p.readInt32(&nothing);
309 p.readInt32(&nothing);
310 p.readInt32(&nothing);
311 p.readInt32(cellinfo);
312 p.readInt32(&nothing);
313 p.readInt32(&nothing);
314 p.readInt32(&nothing);
315 break;
316 }
317 case RIL_CELL_INFO_TYPE_WCDMA: {
318 p.readInt32(&nothing);
319 p.readInt32(&nothing);
320 p.readInt32(&nothing);
321 p.readInt32(cellinfo);
322 p.readInt32(&nothing);
323 p.readInt32(&nothing);
324 p.readInt32(&nothing);
325 break;
326 }
327 case RIL_CELL_INFO_TYPE_CDMA: {
328 p.readInt32(&nothing);
329 p.readInt32(&nothing);
330 p.readInt32(&nothing);
331 p.readInt32(&nothing);
332 p.readInt32(&nothing);
333 p.readInt32(&nothing);
334 p.readInt32(&nothing);
335 p.readInt32(&nothing);
336 p.readInt32(&nothing);
337 p.readInt32(&nothing);
338 cellinfo = 0;
339
340 break;
341 }
342 case RIL_CELL_INFO_TYPE_LTE: {
343 p.readInt32(&nothing);
344 p.readInt32(&nothing);
345 p.readInt32(cellinfo);
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 p.readInt32(&nothing);
354 break;
355 }
356 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
357 p.readInt32(&nothing);
358 p.readInt32(&nothing);
359 p.readInt32(&nothing);
360 p.readInt32(cellinfo);
361 p.readInt32(&nothing);
362 p.readInt32(&nothing);
363 break;
364 }
365 case RIL_CELL_INFO_TYPE_NR: {
366 p.readInt32(&nothing);
367 p.readInt32(&nothing);
368 p.readInt32(cellinfo);
369 p.readInt32(&nothing);
370 p.readInt32(&nothing);
371 p.readInt32(&nothing);
372 p.readInt32(&nothing);
373 p.readInt32(&nothing);
374 p.readInt32(&nothing);
375 p.readInt32(&nothing);
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 break;
379 }
380 }
381 LYINFLOG("CID in fUNC :%d",*cellinfo);
382 return 0;
383}
384
385int lynq_network_deinit(void){
386 close(sock_fd);
387 urc_status = 0;
388 return 0;
389}
390
391static char * lynqStrdupReadString(Parcel &p) {
392 size_t stringlen;
393 const char16_t *s16;
394
395 s16 = p.readString16Inplace(&stringlen);
396 return strndup16to8(s16, stringlen);
397}
398
399int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
400{
401 int ret = -1;
402 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
403 return ret;
404 int send_num = 0;
405 int recv_num = 0;
406 int num = 0;
407 lynq_client_t client_t;
408 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800409 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800410 memset(&client_t,0,sizeof(client_t));
411 client_t.request = RIL_REQUEST_OPERATOR;
412 client_t.paramLen = 0;
413 client_t.uToken = Global_uToken;
414 memset(client_t.param,0,sizeof(client_t.param));
415
416 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
417 if(send_num<0)
418 {
419 LYERRLOG("sendto error:");
420 return ret;
421 }
422
423 //get data
424 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
425 if(recv_num == 0 ||recv_num <0)
426 {
427 LYERRLOG("recvfrom error");
428 return -1;
429 }
430 Parcel p;
431 p.setData((uint8_t *)res_data,sizeof(res_data));
432 p.setDataPosition(0);
433 if(p.dataAvail() > 0)
434 {
435 p.readInt32(&response.resp_type);
436 p.readInt32(&response.request);
437 p.readInt32(&response.slot_id);
438 p.readInt32(&response.error);
439 if(response.error != 0)
440 {
441 LYERRLOG("response return error");
442 return response.error;
443 }
444 p.readInt32(&num);
445 if(num == 0)
446 {
447 LYERRLOG("no paramters");
448 }else{
449 for(int i = 0; i<num;i++)
450 {
451 resp[i] = lynqStrdupReadString(p);
452 }
453 if(NULL != resp[0])
454 {
rjwaae473f2022-01-25 14:57:53 +0800455 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800456 }
457 if(NULL != resp[1])
458 {
rjwaae473f2022-01-25 14:57:53 +0800459 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800460 }
461 if(NULL != resp[2])
462 {
rjwaae473f2022-01-25 14:57:53 +0800463 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800464 }
465 }
466 }
467 return response.error;
468}
469
470int lynq_query_network_selection_mode(int *netselMode)
471{
472 int ret = -1;
473 if(NULL == netselMode)
474 return ret;
475 int send_num = 0;
476 int recv_num = 0;
477 int readnum = 0;
478 lynq_client_t client_t;
479 char res_data[LYNQ_REC_BUF] = {0};
480 memset(&client_t,0,sizeof(client_t));
481 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
482 client_t.paramLen = 0;
483 client_t.uToken = Global_uToken;
484
485 memset(client_t.param,0,sizeof(client_t.param));
486 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
487 if(send_num<0)
488 {
489 LYERRLOG("sendto error:");
490 return -1;
491 }
492
493 //get data
494 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
495 if(recv_num == 0 ||recv_num <0)
496 {
497 LYERRLOG("recvfrom error");
498 return -1;
499 }
500 Parcel p;
501 p.setData((uint8_t *)res_data,sizeof(res_data));
502 p.setDataPosition(0);
503 if(p.dataAvail() > 0)
504 {
505 p.readInt32(&response.resp_type);
506 p.readInt32(&response.request);
507 p.readInt32(&response.slot_id);
508 p.readInt32(&response.error);
509 if(response.error != 0)
510 {
511 LYERRLOG("response return error");
512 return response.error;
513 }
514 p.readInt32(&readnum);
515 p.readInt32(netselMode);
516 }
517 return response.error;
518}
519
520int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
521{
522 int ret = -1;
523 if(NULL == mode ||NULL == mccmnc)
524 return ret;
525 int send_num = 0;
526 lynq_client_t client_t;
527 int recv_num = 0;
528 char res_data[LYNQ_REC_BUF] = {0};
529 memset(&client_t,0,sizeof(client_t));
530 if(!strcmp(mode,"Auto"))
531 {
532 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
533 client_t.paramLen = 0;
534 client_t.uToken = Global_uToken;
535 memset(client_t.param,0,sizeof(client_t.param));
536 }else if(!strcmp(mode,"Manual")){
537 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
538 client_t.paramLen = 1;
539 client_t.uToken = Global_uToken;
540 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800541 }else{
542 LYERRLOG("request error");
543 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800544 }
545
546
547 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
548 if(send_num<0)
549 {
550 LYERRLOG("sendto error:");
551 return ret;
552 }
553
554 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
555 if(recv_num == 0 ||recv_num <0)
556 {
557 LYERRLOG("recvfrom error");
558 return -1;
559 }
560
561 Parcel p;
562 p.setData((uint8_t *)res_data,sizeof(res_data));
563 p.setDataPosition(0);
564 if(p.dataAvail() > 0)
565 {
566 p.readInt32(&response.resp_type);
567 p.readInt32(&response.request);
568 p.readInt32(&response.slot_id);
569 p.readInt32(&response.error);
570 }
571 return response.error;
572}
573
574int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
575{
576 int ret = -1;
577 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
578 return ret;
579 int send_num = 0;
580 int recv_num = 0;
581 char res_data[LYNQ_REC_BUF] = {0};
582 char *resp[128];
583 lynq_client_t client_t;
584 memset(&client_t,0,sizeof(client_t));
585 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
586 client_t.paramLen = 0;
587 client_t.uToken = Global_uToken;
588 memset(client_t.param,0,sizeof(client_t.param));
589
590 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
591 if(send_num<0)
592 {
593 LYERRLOG("sendto error:");
594 return ret;
595 }
596
597 //get data
598 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
599 if(recv_num == 0 ||recv_num <0)
600 {
601 LYERRLOG("recvfrom error");
602 return -1;
603 }
604 Parcel p;
605 p.setData((uint8_t *)res_data,sizeof(res_data));
606 p.setDataPosition(0);
607 if(p.dataAvail() > 0)
608 {
609 p.readInt32(&response.resp_type);
610 p.readInt32(&response.request);
611 p.readInt32(&response.slot_id);
612 p.readInt32(&response.error);
613 if(response.error != 0)
614 {
615 LYERRLOG("response return error");
616 return response.error;
617 }
618 int num =p.readInt32();
619 if(num == 0)
620 {
621 LYERRLOG("no paramters");
622 }else{
623 for(int i = 0; i<num;i++)
624 {
625 resp[i] = lynqStrdupReadString(p);
626 }
627 if(NULL != resp[0])
628 {
rjwaae473f2022-01-25 14:57:53 +0800629 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800630 }
631 if(NULL != resp[1])
632 {
rjwaae473f2022-01-25 14:57:53 +0800633 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800634 }
635 if(NULL != resp[2])
636 {
rjwaae473f2022-01-25 14:57:53 +0800637 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800638 }
639 if(NULL != resp[3])
640 {
rjwaae473f2022-01-25 14:57:53 +0800641 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800642 }
643 }
644 }
645 return response.error;
646}
647
648int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
649{
650 int ret = -1;
651 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
652 return ret;
653 int send_num = 0;
654 int recv_num = 0;
655 int num = 0;
656 char str[LYNQ_TYPE_BUF];
657 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800658 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800659 lynq_client_t client_t;
660 memset(&client_t,0,sizeof(client_t));
661 if(strlen(type)>LYNQ_TYPE_BUF)
662 {
663 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
664 }
665 memcpy(str,type,strlen(type)+1);
666 strUpper(str);
667 if(!strcmp(str,"VOICE"))
668 {
669 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
670 }else if(!strcmp(str,"DATA")){
671 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
672 }else if(!strcmp(str,"IMS")){
673 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
674 }else{
675 LYERRLOG("request error");
676 return ret;
677 }
678 client_t.paramLen = 0;
679 client_t.uToken = Global_uToken;
680 memset(client_t.param,0,sizeof(client_t.param));
681
682 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
683 if(send_num<0)
684 {
685 LYERRLOG("sendto error:");
686 return ret;
687 }
688
689 //get data
690 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
691 if(recv_num == 0 ||recv_num <0)
692 {
693 LYERRLOG("recvfrom error");
694 return -1;
695 }
696 Parcel p;
697 p.setData((uint8_t *)res_data,sizeof(res_data));
698 p.setDataPosition(0);
699 if(p.dataAvail() > 0)
700 {
701 p.readInt32(&response.resp_type);
702 p.readInt32(&response.request);
703 p.readInt32(&response.slot_id);
704 p.readInt32(&response.error);
705 if(response.error != 0)
706 {
707 LYERRLOG("response return error");
708 return response.error;
709 }
710 if(!strcmp(str,"VOICE"))
711 {
712 p.readInt32(&num);
713 if(num == 15)
714 {
715 *regState = atoi(lynqStrdupReadString(p));
716 lynqStrdupReadString(p);
717 lynqStrdupReadString(p);
718 *netType = atoi(lynqStrdupReadString(p));
719 }
720 }else if(!strcmp(str,"DATA")){
721 p.readInt32(&num);
722 if(num == 11)
723 {
724 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800725 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800726 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800727
728 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800729 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800730 *netType = atoi(lynqStrdupReadString(p));
731 }
732
733 }else if(!strcmp(str,"IMS")){
734 p.readInt32(&num);
735 if(num == 2)
736 {
737 p.readInt32(imsRegState);
738 p.readInt32(radioTechFam);
739 }
740 }else{
741 LYERRLOG("request error");
742 return ret;
743 }
744 }
745 return response.error;
746}
747
748int lynq_query_prefferred_networktype(int *preNetType)
749{
750 int ret = -1;
751 int send_num = 0;
752 int recv_num = 0;
753 int num = 0;
754 char res_data[LYNQ_REC_BUF] = {0};
755 lynq_client_t client_t;
756 memset(&client_t,0,sizeof(client_t));
757 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
758 client_t.paramLen = 0;
759 client_t.uToken = Global_uToken;
760 memset(client_t.param,0,sizeof(client_t.param));
761
762 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
763 if(send_num<0)
764 {
765 LYERRLOG("sendto error:");
766 return ret;
767 }
768
769 //get data
770 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
771 if(recv_num == 0 ||recv_num <0)
772 {
773 LYERRLOG("recvfrom error");
774 return -1;
775 }
776 Parcel p;
777 p.setData((uint8_t *)res_data,sizeof(res_data));
778 p.setDataPosition(0);
779 if(p.dataAvail() > 0)
780 {
781 p.readInt32(&response.resp_type);
782 p.readInt32(&response.request);
783 p.readInt32(&response.slot_id);
784 p.readInt32(&response.error);
785 if(response.error != 0)
786 {
787 LYERRLOG("response return error");
788 return response.error;
789 }
790 p.readInt32(&num);
791 p.readInt32(preNetType);
792 }
793 return response.error;
794}
795
796int lynq_set_prefferred_networktype(const int preffertype)
797{
798 int ret = -1;
799 if(preffertype < 0||preffertype >33)
800 return ret;
801 int send_num = 0;
802 lynq_client_t client_t;
803 int recv_num = 0;
804 char res_data[LYNQ_REC_BUF] = {0};
805 memset(&client_t,0,sizeof(client_t));
806 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
807 client_t.paramLen = 1;
808 client_t.uToken = Global_uToken;
809 sprintf(client_t.param,"%d",preffertype);
810 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
811 if(send_num<0)
812 {
813 LYERRLOG("sendto error:");
814 return ret;
815 }
816
817 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
818 if(recv_num == 0 ||recv_num <0)
819 {
820 LYERRLOG("recvfrom error");
821 return -1;
822 }
823
824 Parcel p;
825 p.setData((uint8_t *)res_data,sizeof(res_data));
826 p.setDataPosition(0);
827 if(p.dataAvail() > 0)
828 {
829 p.readInt32(&response.resp_type);
830 p.readInt32(&response.request);
831 p.readInt32(&response.slot_id);
832 p.readInt32(&response.error);
833 }
834
835 return response.error;
836
837}
838
839int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
840{
841 int ret = -1;
842 if(NULL == realNum)
843 return ret;
844 int send_num = 0;
845 int recv_num = 0;
846 int num = 0;
847 char res_data[LYNQ_REC_BUF] = {0};
848 lynq_client_t client_t;
849 memset(&client_t,0,sizeof(client_t));
850 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
851 client_t.paramLen = 0;
852 client_t.uToken = Global_uToken;
853 memset(client_t.param,0,sizeof(client_t.param));
854 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
855 if(send_num<0)
856 {
857 LYERRLOG("sendto error:");
858 return ret;
859 }
860
861 //get data
862 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
863 if(recv_num == 0 ||recv_num <0)
864 {
865 LYERRLOG("recvfrom error");
866 return -1;
867 }
868 Parcel p;
869 p.setData((uint8_t *)res_data,sizeof(res_data));
870 p.setDataPosition(0);
871 if(p.dataAvail() > 0)
872 {
873 p.readInt32(&response.resp_type);
874 p.readInt32(&response.request);
875 p.readInt32(&response.slot_id);
876 p.readInt32(&response.error);
877 if(response.error != 0)
878 {
879 LYERRLOG("response return error");
880 return response.error;
881 }
882 p.readInt32(&num);
883 LYINFLOG("cell info num:%d",num);
884 *realNum = num;
885 for(int i = 0;i<num;i++)
886 {
887 copyCellInfoList(p,&cellinfo[i]);
888 }
889 }
890 return response.error;
891
892}
893
894int lynq_set_unsol_cell_info_listrate(const int rate)
895{
896 int ret = -1;
897 int send_num = 0;
898 int recv_num = 0;
899 char res_data[LYNQ_REC_BUF] = {0};
900 lynq_client_t client_t;
901 memset(&client_t,0,sizeof(client_t));
902 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
903 client_t.paramLen = 1;
904 client_t.uToken = Global_uToken;
905 sprintf(client_t.param,"%d",rate);
906
907 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
908 if(send_num<0)
909 {
910 LYERRLOG("sendto error:");
911 return ret;
912 }
913
914 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
915 if(recv_num == 0 ||recv_num <0)
916 {
917 LYERRLOG("recvfrom error");
918 return -1;
919 }
920
921 Parcel p;
922 p.setData((uint8_t *)res_data,sizeof(res_data));
923 p.setDataPosition(0);
924 if(p.dataAvail() > 0)
925 {
926 p.readInt32(&response.resp_type);
927 p.readInt32(&response.request);
928 p.readInt32(&response.slot_id);
929 p.readInt32(&response.error);
930 }
931
932 return response.error;
933}
934
935int lynq_set_band_mode(const int bandmode)
936{
937 int ret = -1;
938 int send_num = 0;
939 int recv_num = 0;
940 char res_data[LYNQ_REC_BUF] = {0};
941 lynq_client_t client_t;
942 memset(&client_t,0,sizeof(client_t));
943 client_t.request = RIL_REQUEST_SET_BAND_MODE;
944 client_t.paramLen = 1;
945 client_t.uToken = Global_uToken;
946 sprintf(client_t.param,"%d",bandmode);
947
948 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
949 if(send_num<0)
950 {
951 LYERRLOG("sendto error:");
952 return ret;
953 }
954
955 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
956 if(recv_num == 0 ||recv_num <0)
957 {
958 LYERRLOG("recvfrom error");
959 return -1;
960 }
961
962 Parcel p;
963 p.setData((uint8_t *)res_data,sizeof(res_data));
964 p.setDataPosition(0);
965 if(p.dataAvail() > 0)
966 {
967 p.readInt32(&response.resp_type);
968 p.readInt32(&response.request);
969 p.readInt32(&response.slot_id);
970 p.readInt32(&response.error);
971 }
972
973 return response.error;
974}
975
976int lynq_query_available_bandmode(int availBanMode[])
977{
978 int ret = -1;
979 if(NULL == availBanMode)
980 return ret;
981 int send_num = 0;
982 int recv_num = 0;
983 int num = 0;
984 int res = 0;
985 char res_data[LYNQ_REC_BUF] = {0};
986 lynq_client_t client_t;
987 memset(&client_t,0,sizeof(client_t));
988 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
989 client_t.paramLen = 0;
990 client_t.uToken = Global_uToken;
991 memset(client_t.param,0,sizeof(client_t.param));
992 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
993 if(send_num<0)
994 {
995 LYERRLOG("sendto error:");
996 return ret;
997 }
998
999 //get data
1000 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1001 if(recv_num == 0 ||recv_num <0)
1002 {
1003 LYERRLOG("recvfrom error");
1004 return -1;
1005 }
1006 for(int i = 0;i<20;i++)
1007 {
1008 availBanMode[i]=0;
1009 }
1010 Parcel p;
1011 p.setData((uint8_t *)res_data,sizeof(res_data));
1012 p.setDataPosition(0);
1013
1014 if(p.dataAvail() > 0)
1015 {
1016 p.readInt32(&response.resp_type);
1017 p.readInt32(&response.request);
1018 p.readInt32(&response.slot_id);
1019 p.readInt32(&response.error);
1020 if(response.error != 0)
1021 {
1022 LYERRLOG("response return error");
1023 return response.error;
1024 }
1025 p.readInt32(&num);
1026 LYINFLOG("num = %d",num);
1027 availBanMode[0] = num;
1028 for(int i=1 ;i<=num;i++)
1029 {
1030 p.readInt32(&res);
1031 availBanMode[i]=res;
1032 }
1033 }
1034
1035 return response.error;
1036}
1037
1038int lynq_radio_on(const int data)
1039{
1040 int ret = -1;
1041 if(data < 0)
1042 return ret;
1043 int send_num = 0;
1044 char res_data[LYNQ_REC_BUF] = {0};
1045 int recv_num = 0;
1046 lynq_client_t client_t;
1047 memset(&client_t,0,sizeof(client_t));
1048 client_t.request = RIL_REQUEST_RADIO_POWER;
1049 client_t.paramLen = 1;
1050 client_t.uToken = Global_uToken;
1051 sprintf(client_t.param,"%d",data);
1052
1053 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1054 if(send_num<0)
1055 {
1056 LYERRLOG("sendto error:");
1057 return ret;
1058 }
1059
1060 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1061 if(recv_num == 0 ||recv_num <0)
1062 {
1063 LYERRLOG("recvfrom error");
1064 return -1;
1065 }
1066
1067 Parcel p;
1068 p.setData((uint8_t *)res_data,sizeof(res_data));
1069 p.setDataPosition(0);
1070 if(p.dataAvail() > 0)
1071 {
1072 p.readInt32(&response.resp_type);
1073 p.readInt32(&response.request);
1074 p.readInt32(&response.slot_id);
1075 p.readInt32(&response.error);
1076 }
1077
1078 return response.error;
1079}
1080
1081int lynq_query_radio_tech(int* radioTech)
1082{
1083 int ret = -1;
1084 if(NULL == radioTech)
1085 return ret;
1086 int send_num = 0;
1087 int recv_num = 0;
1088 int num = 0;
1089 char res_data[LYNQ_REC_BUF] = {0};
1090 lynq_client_t client_t;
1091 memset(&client_t,0,sizeof(client_t));
1092 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1093 client_t.paramLen = 0;
1094 client_t.uToken = Global_uToken;
1095 memset(client_t.param,0,sizeof(client_t.param));
1096
1097 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1098 if(send_num<0)
1099 {
1100 LYERRLOG("sendto error:");
1101 return ret;
1102 }
1103
1104 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1105 if(recv_num == 0 ||recv_num <0)
1106 {
1107 LYERRLOG("recvfrom error");
1108 return -1;
1109 }
1110 Parcel p;
1111 p.setData((uint8_t *)res_data,sizeof(res_data));
1112 p.setDataPosition(0);
1113
1114 if(p.dataAvail() > 0)
1115 {
1116 p.readInt32(&response.resp_type);
1117 p.readInt32(&response.request);
1118 p.readInt32(&response.slot_id);
1119 p.readInt32(&response.error);
1120 if(response.error != 0)
1121 {
1122 LYERRLOG("response return error");
1123 return response.error;
1124 }
1125 p.readInt32(&num);
1126 p.readInt32(radioTech);
1127 }
1128 return response.error;
1129}
1130
1131int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1132{
1133 int ret = -1;
1134 if(NULL == solSigStren)
1135 return ret;
1136 int send_num = 0;
1137 int recv_num = 0;
1138 int sum = 0;
1139 int LTE_signalstrength = 0;
1140 int WCDMA_signalstrength = 0;
1141 int none = 0;
1142
1143 char res_data[LYNQ_REC_BUF] = {0};
1144 lynq_client_t client_t;
1145 memset(&client_t,0,sizeof(client_t));
1146 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1147 client_t.paramLen = 0;
1148 client_t.uToken = Global_uToken;
1149 memset(client_t.param,0,sizeof(client_t.param));
1150
1151 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1152 if(send_num<0)
1153 {
1154 LYERRLOG("sendto error:");
1155 return ret;
1156 }
1157
1158 //get data
1159 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1160 if(recv_num == 0 ||recv_num <0)
1161 {
1162 LYERRLOG("recvfrom error");
1163 return -1;
1164 }
1165 Parcel p;
1166 p.setData((uint8_t *)res_data,sizeof(res_data));
1167 p.setDataPosition(0);
1168
1169 if(p.dataAvail() > 0)
1170 {
1171 p.readInt32(&response.resp_type);
1172 p.readInt32(&response.request);
1173 p.readInt32(&response.slot_id);
1174 p.readInt32(&response.error);
1175 if(response.error != 0)
1176 {
1177 LYERRLOG("response return error");
1178 return response.error;
1179 }
1180
1181 p.readInt32(&solSigStren->rssi);
1182 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1183 {
1184 solSigStren->gw_sig_valid = 1;
1185 }else{
1186 solSigStren->gw_sig_valid = 0;
1187 }
1188
1189 p.readInt32(&none);
1190 p.readInt32(&none);
1191 p.readInt32(&none);
1192 p.readInt32(&none);
1193 p.readInt32(&none);
1194 p.readInt32(&none);
1195 p.readInt32(&none);
1196 p.readInt32(&LTE_signalstrength);
1197 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1198 p.readInt32(&solSigStren->rsrp);
1199 p.readInt32(&solSigStren->rsrq);
1200 p.readInt32(&solSigStren->rssnr);
1201 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1202 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1203 {
1204 solSigStren->lte_sig_valid = 1;
1205 }else{
1206 solSigStren->lte_sig_valid = 0;
1207 }
1208
1209 p.readInt32(&none);
1210 p.readInt32(&none);
1211 p.readInt32(&none);
1212 p.readInt32(&none);
1213 p.readInt32(&none);
1214 p.readInt32(&WCDMA_signalstrength);
1215 p.readInt32(&none);
1216 p.readInt32(&solSigStren->rscp);
1217 p.readInt32(&solSigStren->ecno);
1218 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1219 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1220 {
rjw479d38b2022-01-22 14:10:42 +08001221 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001222 }else{
rjw479d38b2022-01-22 14:10:42 +08001223 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001224 }
rjw479d38b2022-01-22 14:10:42 +08001225 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001226 p.readInt32(&solSigStren->ssRsrp);
1227 p.readInt32(&solSigStren->ssRsrq);
1228 p.readInt32(&solSigStren->ssSinr);
1229 p.readInt32(&solSigStren->csiRsrp);
1230 p.readInt32(&solSigStren->csiRsrq);
1231 p.readInt32(&solSigStren->csiSinr);
1232 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1233 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1234 if(sum != 0)
1235 {
1236 solSigStren->nr_sig_valid = 1;
1237 }else{
1238 LYERRLOG("None of NR signal info");
1239 }
1240 }
1241 return response.error;
1242}