blob: 1285873aca588f7d4311e27ab621c6746cee40fa [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);
rjwcdd83ae2022-01-22 14:10:42 +0800541 }else{
542 LYERRLOG("request error");
543 return ret;
rjw7e50cd32022-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 {
629 memcpy(OperatorFN,resp[0],strlen(resp[0]));
630 }
631 if(NULL != resp[1])
632 {
633 memcpy(OperatorSH,resp[1],strlen(resp[1]));
634 }
635 if(NULL != resp[2])
636 {
637 memcpy(MccMnc,resp[2],strlen(resp[2]));
638 }
639 if(NULL != resp[3])
640 {
641 memcpy(NetStatus,resp[2],strlen(resp[2]));
642 }
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};
rjwcdd83ae2022-01-22 14:10:42 +0800658 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-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 {
rjwcdd83ae2022-01-22 14:10:42 +0800724
rjw7e50cd32022-01-18 18:30:37 +0800725 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800726 resp[0] = lynqStrdupReadString(p);
727 memcpy(LAC,resp[0],strlen(resp[0]));
728 LYERRLOG("LAC: %s",LAC);
729
730 resp[1] = lynqStrdupReadString(p);
731 memcpy(CID,resp[1],strlen(resp[1]));
732 LYERRLOG("CID: %s",CID);
rjw7e50cd32022-01-18 18:30:37 +0800733 *netType = atoi(lynqStrdupReadString(p));
734 }
735
736 }else if(!strcmp(str,"IMS")){
737 p.readInt32(&num);
738 if(num == 2)
739 {
740 p.readInt32(imsRegState);
741 p.readInt32(radioTechFam);
742 }
743 }else{
744 LYERRLOG("request error");
745 return ret;
746 }
747 }
748 return response.error;
749}
750
751int lynq_query_prefferred_networktype(int *preNetType)
752{
753 int ret = -1;
754 int send_num = 0;
755 int recv_num = 0;
756 int num = 0;
757 char res_data[LYNQ_REC_BUF] = {0};
758 lynq_client_t client_t;
759 memset(&client_t,0,sizeof(client_t));
760 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
761 client_t.paramLen = 0;
762 client_t.uToken = Global_uToken;
763 memset(client_t.param,0,sizeof(client_t.param));
764
765 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
766 if(send_num<0)
767 {
768 LYERRLOG("sendto error:");
769 return ret;
770 }
771
772 //get data
773 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
774 if(recv_num == 0 ||recv_num <0)
775 {
776 LYERRLOG("recvfrom error");
777 return -1;
778 }
779 Parcel p;
780 p.setData((uint8_t *)res_data,sizeof(res_data));
781 p.setDataPosition(0);
782 if(p.dataAvail() > 0)
783 {
784 p.readInt32(&response.resp_type);
785 p.readInt32(&response.request);
786 p.readInt32(&response.slot_id);
787 p.readInt32(&response.error);
788 if(response.error != 0)
789 {
790 LYERRLOG("response return error");
791 return response.error;
792 }
793 p.readInt32(&num);
794 p.readInt32(preNetType);
795 }
796 return response.error;
797}
798
799int lynq_set_prefferred_networktype(const int preffertype)
800{
801 int ret = -1;
802 if(preffertype < 0||preffertype >33)
803 return ret;
804 int send_num = 0;
805 lynq_client_t client_t;
806 int recv_num = 0;
807 char res_data[LYNQ_REC_BUF] = {0};
808 memset(&client_t,0,sizeof(client_t));
809 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
810 client_t.paramLen = 1;
811 client_t.uToken = Global_uToken;
812 sprintf(client_t.param,"%d",preffertype);
813 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
814 if(send_num<0)
815 {
816 LYERRLOG("sendto error:");
817 return ret;
818 }
819
820 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
821 if(recv_num == 0 ||recv_num <0)
822 {
823 LYERRLOG("recvfrom error");
824 return -1;
825 }
826
827 Parcel p;
828 p.setData((uint8_t *)res_data,sizeof(res_data));
829 p.setDataPosition(0);
830 if(p.dataAvail() > 0)
831 {
832 p.readInt32(&response.resp_type);
833 p.readInt32(&response.request);
834 p.readInt32(&response.slot_id);
835 p.readInt32(&response.error);
836 }
837
838 return response.error;
839
840}
841
842int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
843{
844 int ret = -1;
845 if(NULL == realNum)
846 return ret;
847 int send_num = 0;
848 int recv_num = 0;
849 int num = 0;
850 char res_data[LYNQ_REC_BUF] = {0};
851 lynq_client_t client_t;
852 memset(&client_t,0,sizeof(client_t));
853 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
854 client_t.paramLen = 0;
855 client_t.uToken = Global_uToken;
856 memset(client_t.param,0,sizeof(client_t.param));
857 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
858 if(send_num<0)
859 {
860 LYERRLOG("sendto error:");
861 return ret;
862 }
863
864 //get data
865 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
866 if(recv_num == 0 ||recv_num <0)
867 {
868 LYERRLOG("recvfrom error");
869 return -1;
870 }
871 Parcel p;
872 p.setData((uint8_t *)res_data,sizeof(res_data));
873 p.setDataPosition(0);
874 if(p.dataAvail() > 0)
875 {
876 p.readInt32(&response.resp_type);
877 p.readInt32(&response.request);
878 p.readInt32(&response.slot_id);
879 p.readInt32(&response.error);
880 if(response.error != 0)
881 {
882 LYERRLOG("response return error");
883 return response.error;
884 }
885 p.readInt32(&num);
886 LYINFLOG("cell info num:%d",num);
887 *realNum = num;
888 for(int i = 0;i<num;i++)
889 {
890 copyCellInfoList(p,&cellinfo[i]);
891 }
892 }
893 return response.error;
894
895}
896
897int lynq_set_unsol_cell_info_listrate(const int rate)
898{
899 int ret = -1;
900 int send_num = 0;
901 int recv_num = 0;
902 char res_data[LYNQ_REC_BUF] = {0};
903 lynq_client_t client_t;
904 memset(&client_t,0,sizeof(client_t));
905 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
906 client_t.paramLen = 1;
907 client_t.uToken = Global_uToken;
908 sprintf(client_t.param,"%d",rate);
909
910 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
911 if(send_num<0)
912 {
913 LYERRLOG("sendto error:");
914 return ret;
915 }
916
917 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
918 if(recv_num == 0 ||recv_num <0)
919 {
920 LYERRLOG("recvfrom error");
921 return -1;
922 }
923
924 Parcel p;
925 p.setData((uint8_t *)res_data,sizeof(res_data));
926 p.setDataPosition(0);
927 if(p.dataAvail() > 0)
928 {
929 p.readInt32(&response.resp_type);
930 p.readInt32(&response.request);
931 p.readInt32(&response.slot_id);
932 p.readInt32(&response.error);
933 }
934
935 return response.error;
936}
937
938int lynq_set_band_mode(const int bandmode)
939{
940 int ret = -1;
941 int send_num = 0;
942 int recv_num = 0;
943 char res_data[LYNQ_REC_BUF] = {0};
944 lynq_client_t client_t;
945 memset(&client_t,0,sizeof(client_t));
946 client_t.request = RIL_REQUEST_SET_BAND_MODE;
947 client_t.paramLen = 1;
948 client_t.uToken = Global_uToken;
949 sprintf(client_t.param,"%d",bandmode);
950
951 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
952 if(send_num<0)
953 {
954 LYERRLOG("sendto error:");
955 return ret;
956 }
957
958 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
959 if(recv_num == 0 ||recv_num <0)
960 {
961 LYERRLOG("recvfrom error");
962 return -1;
963 }
964
965 Parcel p;
966 p.setData((uint8_t *)res_data,sizeof(res_data));
967 p.setDataPosition(0);
968 if(p.dataAvail() > 0)
969 {
970 p.readInt32(&response.resp_type);
971 p.readInt32(&response.request);
972 p.readInt32(&response.slot_id);
973 p.readInt32(&response.error);
974 }
975
976 return response.error;
977}
978
979int lynq_query_available_bandmode(int availBanMode[])
980{
981 int ret = -1;
982 if(NULL == availBanMode)
983 return ret;
984 int send_num = 0;
985 int recv_num = 0;
986 int num = 0;
987 int res = 0;
988 char res_data[LYNQ_REC_BUF] = {0};
989 lynq_client_t client_t;
990 memset(&client_t,0,sizeof(client_t));
991 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
992 client_t.paramLen = 0;
993 client_t.uToken = Global_uToken;
994 memset(client_t.param,0,sizeof(client_t.param));
995 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
996 if(send_num<0)
997 {
998 LYERRLOG("sendto error:");
999 return ret;
1000 }
1001
1002 //get data
1003 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1004 if(recv_num == 0 ||recv_num <0)
1005 {
1006 LYERRLOG("recvfrom error");
1007 return -1;
1008 }
1009 for(int i = 0;i<20;i++)
1010 {
1011 availBanMode[i]=0;
1012 }
1013 Parcel p;
1014 p.setData((uint8_t *)res_data,sizeof(res_data));
1015 p.setDataPosition(0);
1016
1017 if(p.dataAvail() > 0)
1018 {
1019 p.readInt32(&response.resp_type);
1020 p.readInt32(&response.request);
1021 p.readInt32(&response.slot_id);
1022 p.readInt32(&response.error);
1023 if(response.error != 0)
1024 {
1025 LYERRLOG("response return error");
1026 return response.error;
1027 }
1028 p.readInt32(&num);
1029 LYINFLOG("num = %d",num);
1030 availBanMode[0] = num;
1031 for(int i=1 ;i<=num;i++)
1032 {
1033 p.readInt32(&res);
1034 availBanMode[i]=res;
1035 }
1036 }
1037
1038 return response.error;
1039}
1040
1041int lynq_radio_on(const int data)
1042{
1043 int ret = -1;
1044 if(data < 0)
1045 return ret;
1046 int send_num = 0;
1047 char res_data[LYNQ_REC_BUF] = {0};
1048 int recv_num = 0;
1049 lynq_client_t client_t;
1050 memset(&client_t,0,sizeof(client_t));
1051 client_t.request = RIL_REQUEST_RADIO_POWER;
1052 client_t.paramLen = 1;
1053 client_t.uToken = Global_uToken;
1054 sprintf(client_t.param,"%d",data);
1055
1056 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1057 if(send_num<0)
1058 {
1059 LYERRLOG("sendto error:");
1060 return ret;
1061 }
1062
1063 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1064 if(recv_num == 0 ||recv_num <0)
1065 {
1066 LYERRLOG("recvfrom error");
1067 return -1;
1068 }
1069
1070 Parcel p;
1071 p.setData((uint8_t *)res_data,sizeof(res_data));
1072 p.setDataPosition(0);
1073 if(p.dataAvail() > 0)
1074 {
1075 p.readInt32(&response.resp_type);
1076 p.readInt32(&response.request);
1077 p.readInt32(&response.slot_id);
1078 p.readInt32(&response.error);
1079 }
1080
1081 return response.error;
1082}
1083
1084int lynq_query_radio_tech(int* radioTech)
1085{
1086 int ret = -1;
1087 if(NULL == radioTech)
1088 return ret;
1089 int send_num = 0;
1090 int recv_num = 0;
1091 int num = 0;
1092 char res_data[LYNQ_REC_BUF] = {0};
1093 lynq_client_t client_t;
1094 memset(&client_t,0,sizeof(client_t));
1095 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1096 client_t.paramLen = 0;
1097 client_t.uToken = Global_uToken;
1098 memset(client_t.param,0,sizeof(client_t.param));
1099
1100 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1101 if(send_num<0)
1102 {
1103 LYERRLOG("sendto error:");
1104 return ret;
1105 }
1106
1107 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1108 if(recv_num == 0 ||recv_num <0)
1109 {
1110 LYERRLOG("recvfrom error");
1111 return -1;
1112 }
1113 Parcel p;
1114 p.setData((uint8_t *)res_data,sizeof(res_data));
1115 p.setDataPosition(0);
1116
1117 if(p.dataAvail() > 0)
1118 {
1119 p.readInt32(&response.resp_type);
1120 p.readInt32(&response.request);
1121 p.readInt32(&response.slot_id);
1122 p.readInt32(&response.error);
1123 if(response.error != 0)
1124 {
1125 LYERRLOG("response return error");
1126 return response.error;
1127 }
1128 p.readInt32(&num);
1129 p.readInt32(radioTech);
1130 }
1131 return response.error;
1132}
1133
1134int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1135{
1136 int ret = -1;
1137 if(NULL == solSigStren)
1138 return ret;
1139 int send_num = 0;
1140 int recv_num = 0;
1141 int sum = 0;
1142 int LTE_signalstrength = 0;
1143 int WCDMA_signalstrength = 0;
1144 int none = 0;
1145
1146 char res_data[LYNQ_REC_BUF] = {0};
1147 lynq_client_t client_t;
1148 memset(&client_t,0,sizeof(client_t));
1149 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1150 client_t.paramLen = 0;
1151 client_t.uToken = Global_uToken;
1152 memset(client_t.param,0,sizeof(client_t.param));
1153
1154 send_num = sendto(sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&addr_serv,len_addr_serv);
1155 if(send_num<0)
1156 {
1157 LYERRLOG("sendto error:");
1158 return ret;
1159 }
1160
1161 //get data
1162 recv_num = recvfrom(sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&addr_serv,(socklen_t *)&len_addr_serv);
1163 if(recv_num == 0 ||recv_num <0)
1164 {
1165 LYERRLOG("recvfrom error");
1166 return -1;
1167 }
1168 Parcel p;
1169 p.setData((uint8_t *)res_data,sizeof(res_data));
1170 p.setDataPosition(0);
1171
1172 if(p.dataAvail() > 0)
1173 {
1174 p.readInt32(&response.resp_type);
1175 p.readInt32(&response.request);
1176 p.readInt32(&response.slot_id);
1177 p.readInt32(&response.error);
1178 if(response.error != 0)
1179 {
1180 LYERRLOG("response return error");
1181 return response.error;
1182 }
1183
1184 p.readInt32(&solSigStren->rssi);
1185 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1186 {
1187 solSigStren->gw_sig_valid = 1;
1188 }else{
1189 solSigStren->gw_sig_valid = 0;
1190 }
1191
1192 p.readInt32(&none);
1193 p.readInt32(&none);
1194 p.readInt32(&none);
1195 p.readInt32(&none);
1196 p.readInt32(&none);
1197 p.readInt32(&none);
1198 p.readInt32(&none);
1199 p.readInt32(&LTE_signalstrength);
1200 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1201 p.readInt32(&solSigStren->rsrp);
1202 p.readInt32(&solSigStren->rsrq);
1203 p.readInt32(&solSigStren->rssnr);
1204 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1205 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1206 {
1207 solSigStren->lte_sig_valid = 1;
1208 }else{
1209 solSigStren->lte_sig_valid = 0;
1210 }
1211
1212 p.readInt32(&none);
1213 p.readInt32(&none);
1214 p.readInt32(&none);
1215 p.readInt32(&none);
1216 p.readInt32(&none);
1217 p.readInt32(&WCDMA_signalstrength);
1218 p.readInt32(&none);
1219 p.readInt32(&solSigStren->rscp);
1220 p.readInt32(&solSigStren->ecno);
1221 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1222 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1223 {
rjwcdd83ae2022-01-22 14:10:42 +08001224 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001225 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001226 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001227 }
rjwcdd83ae2022-01-22 14:10:42 +08001228 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001229 p.readInt32(&solSigStren->ssRsrp);
1230 p.readInt32(&solSigStren->ssRsrq);
1231 p.readInt32(&solSigStren->ssSinr);
1232 p.readInt32(&solSigStren->csiRsrp);
1233 p.readInt32(&solSigStren->csiRsrq);
1234 p.readInt32(&solSigStren->csiSinr);
1235 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1236 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1237 if(sum != 0)
1238 {
1239 solSigStren->nr_sig_valid = 1;
1240 }else{
1241 LYERRLOG("None of NR signal info");
1242 }
1243 }
1244 return response.error;
1245}