blob: 3ed05129a7b714f18b7dd5ef04f597469ac539ad [file] [log] [blame]
rjw7e50cd32022-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};
409 char *resp[128];
410 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 {
455 memcpy(OperatorFN,resp[0],strlen(resp[0]));
456 }
457 if(NULL != resp[1])
458 {
459 memcpy(OperatorSH,resp[1],strlen(resp[1]));
460 }
461 if(NULL != resp[2])
462 {
463 memcpy(MccMnc,resp[2],strlen(resp[2]));
464 }
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);
541 }
542
543
544 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
545 if(send_num<0)
546 {
547 LYERRLOG("sendto error:");
548 return ret;
549 }
550
551 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
552 if(recv_num == 0 ||recv_num <0)
553 {
554 LYERRLOG("recvfrom error");
555 return -1;
556 }
557
558 Parcel p;
559 p.setData((uint8_t *)res_data,sizeof(res_data));
560 p.setDataPosition(0);
561 if(p.dataAvail() > 0)
562 {
563 p.readInt32(&response.resp_type);
564 p.readInt32(&response.request);
565 p.readInt32(&response.slot_id);
566 p.readInt32(&response.error);
567 }
568 return response.error;
569}
570
571int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
572{
573 int ret = -1;
574 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
575 return ret;
576 int send_num = 0;
577 int recv_num = 0;
578 char res_data[LYNQ_REC_BUF] = {0};
579 char *resp[128];
580 lynq_client_t client_t;
581 memset(&client_t,0,sizeof(client_t));
582 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
583 client_t.paramLen = 0;
584 client_t.uToken = Global_uToken;
585 memset(client_t.param,0,sizeof(client_t.param));
586
587 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
588 if(send_num<0)
589 {
590 LYERRLOG("sendto error:");
591 return ret;
592 }
593
594 //get data
595 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
596 if(recv_num == 0 ||recv_num <0)
597 {
598 LYERRLOG("recvfrom error");
599 return -1;
600 }
601 Parcel p;
602 p.setData((uint8_t *)res_data,sizeof(res_data));
603 p.setDataPosition(0);
604 if(p.dataAvail() > 0)
605 {
606 p.readInt32(&response.resp_type);
607 p.readInt32(&response.request);
608 p.readInt32(&response.slot_id);
609 p.readInt32(&response.error);
610 if(response.error != 0)
611 {
612 LYERRLOG("response return error");
613 return response.error;
614 }
615 int num =p.readInt32();
616 if(num == 0)
617 {
618 LYERRLOG("no paramters");
619 }else{
620 for(int i = 0; i<num;i++)
621 {
622 resp[i] = lynqStrdupReadString(p);
623 }
624 if(NULL != resp[0])
625 {
626 memcpy(OperatorFN,resp[0],strlen(resp[0]));
627 }
628 if(NULL != resp[1])
629 {
630 memcpy(OperatorSH,resp[1],strlen(resp[1]));
631 }
632 if(NULL != resp[2])
633 {
634 memcpy(MccMnc,resp[2],strlen(resp[2]));
635 }
636 if(NULL != resp[3])
637 {
638 memcpy(NetStatus,resp[2],strlen(resp[2]));
639 }
640 }
641 }
642 return response.error;
643}
644
645int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
646{
647 int ret = -1;
648 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
649 return ret;
650 int send_num = 0;
651 int recv_num = 0;
652 int num = 0;
653 char str[LYNQ_TYPE_BUF];
654 char res_data[LYNQ_REC_BUF] = {0};
655 lynq_client_t client_t;
656 memset(&client_t,0,sizeof(client_t));
657 if(strlen(type)>LYNQ_TYPE_BUF)
658 {
659 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
660 }
661 memcpy(str,type,strlen(type)+1);
662 strUpper(str);
663 if(!strcmp(str,"VOICE"))
664 {
665 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
666 }else if(!strcmp(str,"DATA")){
667 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
668 }else if(!strcmp(str,"IMS")){
669 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
670 }else{
671 LYERRLOG("request error");
672 return ret;
673 }
674 client_t.paramLen = 0;
675 client_t.uToken = Global_uToken;
676 memset(client_t.param,0,sizeof(client_t.param));
677
678 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
679 if(send_num<0)
680 {
681 LYERRLOG("sendto error:");
682 return ret;
683 }
684
685 //get data
686 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
687 if(recv_num == 0 ||recv_num <0)
688 {
689 LYERRLOG("recvfrom error");
690 return -1;
691 }
692 Parcel p;
693 p.setData((uint8_t *)res_data,sizeof(res_data));
694 p.setDataPosition(0);
695 if(p.dataAvail() > 0)
696 {
697 p.readInt32(&response.resp_type);
698 p.readInt32(&response.request);
699 p.readInt32(&response.slot_id);
700 p.readInt32(&response.error);
701 if(response.error != 0)
702 {
703 LYERRLOG("response return error");
704 return response.error;
705 }
706 if(!strcmp(str,"VOICE"))
707 {
708 p.readInt32(&num);
709 if(num == 15)
710 {
711 *regState = atoi(lynqStrdupReadString(p));
712 lynqStrdupReadString(p);
713 lynqStrdupReadString(p);
714 *netType = atoi(lynqStrdupReadString(p));
715 }
716 }else if(!strcmp(str,"DATA")){
717 p.readInt32(&num);
718 if(num == 11)
719 {
720 *regState = atoi(lynqStrdupReadString(p));
721 LAC = lynqStrdupReadString(p);
722 CID = lynqStrdupReadString(p);
723 *netType = atoi(lynqStrdupReadString(p));
724 }
725
726 }else if(!strcmp(str,"IMS")){
727 p.readInt32(&num);
728 if(num == 2)
729 {
730 p.readInt32(imsRegState);
731 p.readInt32(radioTechFam);
732 }
733 }else{
734 LYERRLOG("request error");
735 return ret;
736 }
737 }
738 return response.error;
739}
740
741int lynq_query_prefferred_networktype(int *preNetType)
742{
743 int ret = -1;
744 int send_num = 0;
745 int recv_num = 0;
746 int num = 0;
747 char res_data[LYNQ_REC_BUF] = {0};
748 lynq_client_t client_t;
749 memset(&client_t,0,sizeof(client_t));
750 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
751 client_t.paramLen = 0;
752 client_t.uToken = Global_uToken;
753 memset(client_t.param,0,sizeof(client_t.param));
754
755 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
756 if(send_num<0)
757 {
758 LYERRLOG("sendto error:");
759 return ret;
760 }
761
762 //get data
763 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
764 if(recv_num == 0 ||recv_num <0)
765 {
766 LYERRLOG("recvfrom error");
767 return -1;
768 }
769 Parcel p;
770 p.setData((uint8_t *)res_data,sizeof(res_data));
771 p.setDataPosition(0);
772 if(p.dataAvail() > 0)
773 {
774 p.readInt32(&response.resp_type);
775 p.readInt32(&response.request);
776 p.readInt32(&response.slot_id);
777 p.readInt32(&response.error);
778 if(response.error != 0)
779 {
780 LYERRLOG("response return error");
781 return response.error;
782 }
783 p.readInt32(&num);
784 p.readInt32(preNetType);
785 }
786 return response.error;
787}
788
789int lynq_set_prefferred_networktype(const int preffertype)
790{
791 int ret = -1;
792 if(preffertype < 0||preffertype >33)
793 return ret;
794 int send_num = 0;
795 lynq_client_t client_t;
796 int recv_num = 0;
797 char res_data[LYNQ_REC_BUF] = {0};
798 memset(&client_t,0,sizeof(client_t));
799 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
800 client_t.paramLen = 1;
801 client_t.uToken = Global_uToken;
802 sprintf(client_t.param,"%d",preffertype);
803 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
804 if(send_num<0)
805 {
806 LYERRLOG("sendto error:");
807 return ret;
808 }
809
810 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
811 if(recv_num == 0 ||recv_num <0)
812 {
813 LYERRLOG("recvfrom error");
814 return -1;
815 }
816
817 Parcel p;
818 p.setData((uint8_t *)res_data,sizeof(res_data));
819 p.setDataPosition(0);
820 if(p.dataAvail() > 0)
821 {
822 p.readInt32(&response.resp_type);
823 p.readInt32(&response.request);
824 p.readInt32(&response.slot_id);
825 p.readInt32(&response.error);
826 }
827
828 return response.error;
829
830}
831
832int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
833{
834 int ret = -1;
835 if(NULL == realNum)
836 return ret;
837 int send_num = 0;
838 int recv_num = 0;
839 int num = 0;
840 char res_data[LYNQ_REC_BUF] = {0};
841 lynq_client_t client_t;
842 memset(&client_t,0,sizeof(client_t));
843 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
844 client_t.paramLen = 0;
845 client_t.uToken = Global_uToken;
846 memset(client_t.param,0,sizeof(client_t.param));
847 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
848 if(send_num<0)
849 {
850 LYERRLOG("sendto error:");
851 return ret;
852 }
853
854 //get data
855 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
856 if(recv_num == 0 ||recv_num <0)
857 {
858 LYERRLOG("recvfrom error");
859 return -1;
860 }
861 Parcel p;
862 p.setData((uint8_t *)res_data,sizeof(res_data));
863 p.setDataPosition(0);
864 if(p.dataAvail() > 0)
865 {
866 p.readInt32(&response.resp_type);
867 p.readInt32(&response.request);
868 p.readInt32(&response.slot_id);
869 p.readInt32(&response.error);
870 if(response.error != 0)
871 {
872 LYERRLOG("response return error");
873 return response.error;
874 }
875 p.readInt32(&num);
876 LYINFLOG("cell info num:%d",num);
877 *realNum = num;
878 for(int i = 0;i<num;i++)
879 {
880 copyCellInfoList(p,&cellinfo[i]);
881 }
882 }
883 return response.error;
884
885}
886
887int lynq_set_unsol_cell_info_listrate(const int rate)
888{
889 int ret = -1;
890 int send_num = 0;
891 int recv_num = 0;
892 char res_data[LYNQ_REC_BUF] = {0};
893 lynq_client_t client_t;
894 memset(&client_t,0,sizeof(client_t));
895 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
896 client_t.paramLen = 1;
897 client_t.uToken = Global_uToken;
898 sprintf(client_t.param,"%d",rate);
899
900 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
901 if(send_num<0)
902 {
903 LYERRLOG("sendto error:");
904 return ret;
905 }
906
907 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
908 if(recv_num == 0 ||recv_num <0)
909 {
910 LYERRLOG("recvfrom error");
911 return -1;
912 }
913
914 Parcel p;
915 p.setData((uint8_t *)res_data,sizeof(res_data));
916 p.setDataPosition(0);
917 if(p.dataAvail() > 0)
918 {
919 p.readInt32(&response.resp_type);
920 p.readInt32(&response.request);
921 p.readInt32(&response.slot_id);
922 p.readInt32(&response.error);
923 }
924
925 return response.error;
926}
927
928int lynq_set_band_mode(const int bandmode)
929{
930 int ret = -1;
931 int send_num = 0;
932 int recv_num = 0;
933 char res_data[LYNQ_REC_BUF] = {0};
934 lynq_client_t client_t;
935 memset(&client_t,0,sizeof(client_t));
936 client_t.request = RIL_REQUEST_SET_BAND_MODE;
937 client_t.paramLen = 1;
938 client_t.uToken = Global_uToken;
939 sprintf(client_t.param,"%d",bandmode);
940
941 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
942 if(send_num<0)
943 {
944 LYERRLOG("sendto error:");
945 return ret;
946 }
947
948 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
949 if(recv_num == 0 ||recv_num <0)
950 {
951 LYERRLOG("recvfrom error");
952 return -1;
953 }
954
955 Parcel p;
956 p.setData((uint8_t *)res_data,sizeof(res_data));
957 p.setDataPosition(0);
958 if(p.dataAvail() > 0)
959 {
960 p.readInt32(&response.resp_type);
961 p.readInt32(&response.request);
962 p.readInt32(&response.slot_id);
963 p.readInt32(&response.error);
964 }
965
966 return response.error;
967}
968
969int lynq_query_available_bandmode(int availBanMode[])
970{
971 int ret = -1;
972 if(NULL == availBanMode)
973 return ret;
974 int send_num = 0;
975 int recv_num = 0;
976 int num = 0;
977 int res = 0;
978 char res_data[LYNQ_REC_BUF] = {0};
979 lynq_client_t client_t;
980 memset(&client_t,0,sizeof(client_t));
981 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
982 client_t.paramLen = 0;
983 client_t.uToken = Global_uToken;
984 memset(client_t.param,0,sizeof(client_t.param));
985 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
986 if(send_num<0)
987 {
988 LYERRLOG("sendto error:");
989 return ret;
990 }
991
992 //get data
993 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
994 if(recv_num == 0 ||recv_num <0)
995 {
996 LYERRLOG("recvfrom error");
997 return -1;
998 }
999 for(int i = 0;i<20;i++)
1000 {
1001 availBanMode[i]=0;
1002 }
1003 Parcel p;
1004 p.setData((uint8_t *)res_data,sizeof(res_data));
1005 p.setDataPosition(0);
1006
1007 if(p.dataAvail() > 0)
1008 {
1009 p.readInt32(&response.resp_type);
1010 p.readInt32(&response.request);
1011 p.readInt32(&response.slot_id);
1012 p.readInt32(&response.error);
1013 if(response.error != 0)
1014 {
1015 LYERRLOG("response return error");
1016 return response.error;
1017 }
1018 p.readInt32(&num);
1019 LYINFLOG("num = %d",num);
1020 availBanMode[0] = num;
1021 for(int i=1 ;i<=num;i++)
1022 {
1023 p.readInt32(&res);
1024 availBanMode[i]=res;
1025 }
1026 }
1027
1028 return response.error;
1029}
1030
1031int lynq_radio_on(const int data)
1032{
1033 int ret = -1;
1034 if(data < 0)
1035 return ret;
1036 int send_num = 0;
1037 char res_data[LYNQ_REC_BUF] = {0};
1038 int recv_num = 0;
1039 lynq_client_t client_t;
1040 memset(&client_t,0,sizeof(client_t));
1041 client_t.request = RIL_REQUEST_RADIO_POWER;
1042 client_t.paramLen = 1;
1043 client_t.uToken = Global_uToken;
1044 sprintf(client_t.param,"%d",data);
1045
1046 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1047 if(send_num<0)
1048 {
1049 LYERRLOG("sendto error:");
1050 return ret;
1051 }
1052
1053 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1054 if(recv_num == 0 ||recv_num <0)
1055 {
1056 LYERRLOG("recvfrom error");
1057 return -1;
1058 }
1059
1060 Parcel p;
1061 p.setData((uint8_t *)res_data,sizeof(res_data));
1062 p.setDataPosition(0);
1063 if(p.dataAvail() > 0)
1064 {
1065 p.readInt32(&response.resp_type);
1066 p.readInt32(&response.request);
1067 p.readInt32(&response.slot_id);
1068 p.readInt32(&response.error);
1069 }
1070
1071 return response.error;
1072}
1073
1074int lynq_query_radio_tech(int* radioTech)
1075{
1076 int ret = -1;
1077 if(NULL == radioTech)
1078 return ret;
1079 int send_num = 0;
1080 int recv_num = 0;
1081 int num = 0;
1082 char res_data[LYNQ_REC_BUF] = {0};
1083 lynq_client_t client_t;
1084 memset(&client_t,0,sizeof(client_t));
1085 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1086 client_t.paramLen = 0;
1087 client_t.uToken = Global_uToken;
1088 memset(client_t.param,0,sizeof(client_t.param));
1089
1090 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1091 if(send_num<0)
1092 {
1093 LYERRLOG("sendto error:");
1094 return ret;
1095 }
1096
1097 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1098 if(recv_num == 0 ||recv_num <0)
1099 {
1100 LYERRLOG("recvfrom error");
1101 return -1;
1102 }
1103 Parcel p;
1104 p.setData((uint8_t *)res_data,sizeof(res_data));
1105 p.setDataPosition(0);
1106
1107 if(p.dataAvail() > 0)
1108 {
1109 p.readInt32(&response.resp_type);
1110 p.readInt32(&response.request);
1111 p.readInt32(&response.slot_id);
1112 p.readInt32(&response.error);
1113 if(response.error != 0)
1114 {
1115 LYERRLOG("response return error");
1116 return response.error;
1117 }
1118 p.readInt32(&num);
1119 p.readInt32(radioTech);
1120 }
1121 return response.error;
1122}
1123
1124int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1125{
1126 int ret = -1;
1127 if(NULL == solSigStren)
1128 return ret;
1129 int send_num = 0;
1130 int recv_num = 0;
1131 int sum = 0;
1132 int LTE_signalstrength = 0;
1133 int WCDMA_signalstrength = 0;
1134 int none = 0;
1135
1136 char res_data[LYNQ_REC_BUF] = {0};
1137 lynq_client_t client_t;
1138 memset(&client_t,0,sizeof(client_t));
1139 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1140 client_t.paramLen = 0;
1141 client_t.uToken = Global_uToken;
1142 memset(client_t.param,0,sizeof(client_t.param));
1143
1144 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1145 if(send_num<0)
1146 {
1147 LYERRLOG("sendto error:");
1148 return ret;
1149 }
1150
1151 //get data
1152 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1153 if(recv_num == 0 ||recv_num <0)
1154 {
1155 LYERRLOG("recvfrom error");
1156 return -1;
1157 }
1158 Parcel p;
1159 p.setData((uint8_t *)res_data,sizeof(res_data));
1160 p.setDataPosition(0);
1161
1162 if(p.dataAvail() > 0)
1163 {
1164 p.readInt32(&response.resp_type);
1165 p.readInt32(&response.request);
1166 p.readInt32(&response.slot_id);
1167 p.readInt32(&response.error);
1168 if(response.error != 0)
1169 {
1170 LYERRLOG("response return error");
1171 return response.error;
1172 }
1173
1174 p.readInt32(&solSigStren->rssi);
1175 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1176 {
1177 solSigStren->gw_sig_valid = 1;
1178 }else{
1179 solSigStren->gw_sig_valid = 0;
1180 }
1181
1182 p.readInt32(&none);
1183 p.readInt32(&none);
1184 p.readInt32(&none);
1185 p.readInt32(&none);
1186 p.readInt32(&none);
1187 p.readInt32(&none);
1188 p.readInt32(&none);
1189 p.readInt32(&LTE_signalstrength);
1190 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1191 p.readInt32(&solSigStren->rsrp);
1192 p.readInt32(&solSigStren->rsrq);
1193 p.readInt32(&solSigStren->rssnr);
1194 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1195 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1196 {
1197 solSigStren->lte_sig_valid = 1;
1198 }else{
1199 solSigStren->lte_sig_valid = 0;
1200 }
1201
1202 p.readInt32(&none);
1203 p.readInt32(&none);
1204 p.readInt32(&none);
1205 p.readInt32(&none);
1206 p.readInt32(&none);
1207 p.readInt32(&WCDMA_signalstrength);
1208 p.readInt32(&none);
1209 p.readInt32(&solSigStren->rscp);
1210 p.readInt32(&solSigStren->ecno);
1211 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1212 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1213 {
1214 solSigStren->lte_sig_valid = 1;
1215 }else{
1216 solSigStren->lte_sig_valid = 0;
1217 }
1218 p.readInt32(&solSigStren->ssRsrp);
1219 p.readInt32(&solSigStren->ssRsrq);
1220 p.readInt32(&solSigStren->ssSinr);
1221 p.readInt32(&solSigStren->csiRsrp);
1222 p.readInt32(&solSigStren->csiRsrq);
1223 p.readInt32(&solSigStren->csiSinr);
1224 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1225 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1226 if(sum != 0)
1227 {
1228 solSigStren->nr_sig_valid = 1;
1229 }else{
1230 LYERRLOG("None of NR signal info");
1231 }
1232 }
1233 return response.error;
1234}