blob: b6c58a971bc4cb2e7667cd6763e68a9056f21bba [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;
rjwbc8a05f2022-03-02 15:23:11 +080045
46int network_len_addr_serv;
47int network_len_urc_addr_serv;
48struct sockaddr_in network_addr_serv;
49struct sockaddr_in network_urc_addr_serv;
50static int network_sock_fd = 0;
51int network_urc_sock_fd = 0;
52int network_Global_uToken = 0;
53int network_slot_id = -1;
54int network_urc_slot_id = -1;
55int network_urc_status = 1;
56int network_wait_urc_id = 0;
57signalStrength_t network_urc_solSigStren;
rjw7e50cd32022-01-18 18:30:37 +080058
59
rjwbc8a05f2022-03-02 15:23:11 +080060static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
61static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw7e50cd32022-01-18 18:30:37 +080062
63typedef enum{
64 LYNQ_E_CARDSTATE_ERROR=8000,
65 /* The voice service state is out of service*/
66 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
67 /* The voice service state is EMERGENCY_ONLY*/
68 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
69 /* The radio power is power off*/
70 LYNQ_E_STATE_POWER_OFF=8003,
71 LYNQ_E_TIME_OUT=8004,
72 /*create or open sms DB fail */
73 LYNQ_E_SMS_DB_FAIL=8005,
74 /*Failed to execute sql statement*/
75 LYNQ_E_SMS_SQL_FAIL = 8006,
76 LYNQ_E_SMS_NOT_FIND = 8007,
77 /* The logic conflict*/
78 LYNQ_E_CONFLICT=9000,
79 /*Null anomaly*/
80 LYNQ_E_NULL_ANONALY=9001
81}LYNQ_E;
82
rjwbc8a05f2022-03-02 15:23:11 +080083int wait_signal_changes()
84{
85 int ret = 0;
86 pthread_mutex_lock(&signal_state_change_mutex);
87 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
88 pthread_mutex_unlock(&signal_state_change_mutex);
89 return 0;
90}
91
92void send_signal_changes()
93{
94 pthread_mutex_lock(&signal_state_change_mutex);
95 pthread_cond_signal(&signal_state_change_cond);
96 pthread_mutex_unlock(&signal_state_change_mutex);
97 return;
98}
99
rjw7e50cd32022-01-18 18:30:37 +0800100void *thread_urc_recv(void *p)
101{
102 Parcel *urc_p =NULL;
103 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800104 int resp_type = -1;
105 int urc_id = -1;
106 int res = 0;
107 int none = 0;
108 int NR_sum = 0;
rjw7e50cd32022-01-18 18:30:37 +0800109 int urc_LTE_signalstrength = 0;
110 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800111 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800112 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800113 {
114 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-03-02 15:23:11 +0800115 res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800116 if(res<=0)
117 {
118 LYERRLOG("thread_urc_recv step2 fail:");
119 break;
120 }
121 urc_p = new Parcel();
122 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
123 urc_p->setDataPosition(0);
124 if(urc_p->dataAvail()>0)
125 {
126 urc_p->readInt32(&resp_type);
127 urc_p->readInt32(&urc_id);
rjwbc8a05f2022-03-02 15:23:11 +0800128 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800129 switch(urc_id)
130 {
131 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
132 {
rjwbc8a05f2022-03-02 15:23:11 +0800133 network_wait_urc_id = urc_id;
134 LYINFLOG("slot_id = %d",network_urc_slot_id);
135 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800136 }
137 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
138 {
rjwbc8a05f2022-03-02 15:23:11 +0800139 urc_p->readInt32(&network_urc_solSigStren.rssi);
140 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw7e50cd32022-01-18 18:30:37 +0800141 {
rjwbc8a05f2022-03-02 15:23:11 +0800142 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800143 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800144 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800145 }
rjwbc8a05f2022-03-02 15:23:11 +0800146 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800147 {
rjwbc8a05f2022-03-02 15:23:11 +0800148 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800149 }
rjw7e50cd32022-01-18 18:30:37 +0800150 urc_p->readInt32(&none);
151 urc_p->readInt32(&none);
152 urc_p->readInt32(&none);
153 urc_p->readInt32(&none);
154 urc_p->readInt32(&none);
155 urc_p->readInt32(&none);
156 urc_p->readInt32(&none);
157 urc_p->readInt32(&urc_LTE_signalstrength);
158 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjwbc8a05f2022-03-02 15:23:11 +0800159 urc_p->readInt32(&network_urc_solSigStren.rsrp);
160 urc_p->readInt32(&network_urc_solSigStren.rsrq);
161 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw7e50cd32022-01-18 18:30:37 +0800162 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
163 {
rjwbc8a05f2022-03-02 15:23:11 +0800164 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800165 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800166 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800167 }
rjwbc8a05f2022-03-02 15:23:11 +0800168 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800169 {
170 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
171 }
rjw7e50cd32022-01-18 18:30:37 +0800172 urc_p->readInt32(&none);
173 urc_p->readInt32(&none);
174 urc_p->readInt32(&none);
175 urc_p->readInt32(&none);
176 urc_p->readInt32(&none);
177 urc_p->readInt32(&urc_WCDMA_signalstrength);
178 urc_p->readInt32(&none);
rjwbc8a05f2022-03-02 15:23:11 +0800179 urc_p->readInt32(&network_urc_solSigStren.rscp);
180 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800181 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
182 {
rjwbc8a05f2022-03-02 15:23:11 +0800183 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800184 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800185 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800186 }
rjwbc8a05f2022-03-02 15:23:11 +0800187 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800188 {
189 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800190 }
rjwbc8a05f2022-03-02 15:23:11 +0800191 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
192 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
193 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
194 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
195 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
196 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
197 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
198 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800199 if(NR_sum != 0)
200 {
rjwbc8a05f2022-03-02 15:23:11 +0800201 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800202 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800203 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800204 }
rjwbc8a05f2022-03-02 15:23:11 +0800205 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800206 {
207 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
rjwbc8a05f2022-03-02 15:23:11 +0800208 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
209 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800210 }
rjwbc8a05f2022-03-02 15:23:11 +0800211 network_wait_urc_id = urc_id;
212 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800213 }
214 }
215 }
216 }
217}
218
219
220int lynq_server_socket_start()
221{
rjwbc8a05f2022-03-02 15:23:11 +0800222 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
223 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800224 {
225 LYERRLOG("socket open error");
226 return -1;
227 }
rjwbc8a05f2022-03-02 15:23:11 +0800228 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800229
rjwbc8a05f2022-03-02 15:23:11 +0800230 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
231 network_addr_serv.sin_family = AF_INET;
232 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
233 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
234 network_len_addr_serv = sizeof(network_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800235 return 0;
236}
237
238int lynq_urc_socket_start()
239{
240 pthread_t tid;
241 pthread_attr_t attr;
242 int on = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800243 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800244 int ret = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800245 network_len_urc_addr_serv = sizeof(sockaddr_in);
246 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
247 if (network_urc_sock_fd <0){
rjw7e50cd32022-01-18 18:30:37 +0800248 LYERRLOG("urc socket error");
249 ret = -1;
250 }
rjwbc8a05f2022-03-02 15:23:11 +0800251 network_urc_addr_serv.sin_family = AF_INET;
252 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
253 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw7e50cd32022-01-18 18:30:37 +0800254 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800255 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800256 if(ret <0)
257 {
258 LYERRLOG("urc socket set error");
259 return -1;
260 }
rjwbc8a05f2022-03-02 15:23:11 +0800261 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-01-18 18:30:37 +0800262 if(ret <0)
263 {
264 LYERRLOG("urc socket bind error");
265 return -1;
266 }
267 pthread_attr_init(&attr);
268 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjwbc8a05f2022-03-02 15:23:11 +0800269 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800270 if(ret <0)
271 {
272 LYERRLOG("urc pthread create error");
273 return -1;
274 }
275 LYINFLOG("urc start success");
276 return 0;
277}
278
279int lynq_network_init(int utoken){
280 if(utoken <0){
281 LYERRLOG("init err");
282 return -1;
283 }
rjwbc8a05f2022-03-02 15:23:11 +0800284 network_urc_status = 1;
285 network_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +0800286 LYLOGSET(LOG_INFO);
287 LYLOGEINIT(USER_LOG_TAG);
288 int ret = 0;
289
290 ret = lynq_server_socket_start();
291 if(ret !=0)
292 {
293 LYERRLOG("init socket client fail!!!");
294 return -1;
295 }
296 ret = lynq_urc_socket_start();
297 if(ret != 0)
298 {
299 LYERRLOG("init socket urc fail!!!");
300 return -1;
301 }
302 return 0;
303}
304
305int strUpper(char * str)
306{
307 int i=0;
308 while(1)
309 {
310 if(str[i]=='\0')
311 {
312 break;
313 }
314 if(str[i]>='a'&&str[i]<='z')
315 {
316 str[i]=str[i]-32;
317 }
318 i++;
319 }
320 return 0;
321}
322
323int copyCellInfoList(Parcel &p,int *cellinfo)
324{
325 int32_t v=0;
326 int64_t v6=0;
327 if(NULL == cellinfo)
328 {
329 LYERRLOG("*cellinfo error");
330 }
331
332 int nothing = 0;
333 p.readInt32(&v);
334 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
335 p.readInt32(&nothing);
336 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
337 // p.readInt32(&cellinfo->cellinfo.registered);
338 p.readInt32(&v);
339 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
340 p.readInt64(&v6);
341 // cellinfo->cellinfo.timeStamp = v6;
342 switch(cellinfoType) {
343 case RIL_CELL_INFO_TYPE_GSM: {
344 p.readInt32(&nothing);
345 p.readInt32(&nothing);
346 p.readInt32(&nothing);
347 p.readInt32(cellinfo);
348 p.readInt32(&nothing);
349 p.readInt32(&nothing);
350 p.readInt32(&nothing);
351 break;
352 }
353 case RIL_CELL_INFO_TYPE_WCDMA: {
354 p.readInt32(&nothing);
355 p.readInt32(&nothing);
356 p.readInt32(&nothing);
357 p.readInt32(cellinfo);
358 p.readInt32(&nothing);
359 p.readInt32(&nothing);
360 p.readInt32(&nothing);
361 break;
362 }
363 case RIL_CELL_INFO_TYPE_CDMA: {
364 p.readInt32(&nothing);
365 p.readInt32(&nothing);
366 p.readInt32(&nothing);
367 p.readInt32(&nothing);
368 p.readInt32(&nothing);
369 p.readInt32(&nothing);
370 p.readInt32(&nothing);
371 p.readInt32(&nothing);
372 p.readInt32(&nothing);
373 p.readInt32(&nothing);
374 cellinfo = 0;
375
376 break;
377 }
378 case RIL_CELL_INFO_TYPE_LTE: {
379 p.readInt32(&nothing);
380 p.readInt32(&nothing);
381 p.readInt32(cellinfo);
382 p.readInt32(&nothing);
383 p.readInt32(&nothing);
384 p.readInt32(&nothing);
385 p.readInt32(&nothing);
386 p.readInt32(&nothing);
387 p.readInt32(&nothing);
388 p.readInt32(&nothing);
389 p.readInt32(&nothing);
390 break;
391 }
392 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
393 p.readInt32(&nothing);
394 p.readInt32(&nothing);
395 p.readInt32(&nothing);
396 p.readInt32(cellinfo);
397 p.readInt32(&nothing);
398 p.readInt32(&nothing);
399 break;
400 }
401 case RIL_CELL_INFO_TYPE_NR: {
402 p.readInt32(&nothing);
403 p.readInt32(&nothing);
404 p.readInt32(cellinfo);
405 p.readInt32(&nothing);
406 p.readInt32(&nothing);
407 p.readInt32(&nothing);
408 p.readInt32(&nothing);
409 p.readInt32(&nothing);
410 p.readInt32(&nothing);
411 p.readInt32(&nothing);
412 p.readInt32(&nothing);
413 p.readInt32(&nothing);
414 break;
415 }
416 }
417 LYINFLOG("CID in fUNC :%d",*cellinfo);
418 return 0;
419}
420
421int lynq_network_deinit(void){
rjwbc8a05f2022-03-02 15:23:11 +0800422 close(network_sock_fd);
423 network_urc_status = 0;
rjw7e50cd32022-01-18 18:30:37 +0800424 return 0;
425}
426
427static char * lynqStrdupReadString(Parcel &p) {
428 size_t stringlen;
429 const char16_t *s16;
430
431 s16 = p.readString16Inplace(&stringlen);
432 return strndup16to8(s16, stringlen);
433}
434
435int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
436{
437 int ret = -1;
438 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
439 return ret;
440 int send_num = 0;
441 int recv_num = 0;
442 int num = 0;
443 lynq_client_t client_t;
444 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjw02a50422022-01-25 14:57:53 +0800445 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800446 memset(&client_t,0,sizeof(client_t));
447 client_t.request = RIL_REQUEST_OPERATOR;
448 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800449 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800450 memset(client_t.param,0,sizeof(client_t.param));
451
rjwbc8a05f2022-03-02 15:23:11 +0800452 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800453 if(send_num<0)
454 {
455 LYERRLOG("sendto error:");
456 return ret;
457 }
458
459 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800460 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800461 if(recv_num == 0 ||recv_num <0)
462 {
463 LYERRLOG("recvfrom error");
464 return -1;
465 }
466 Parcel p;
467 p.setData((uint8_t *)res_data,sizeof(res_data));
468 p.setDataPosition(0);
469 if(p.dataAvail() > 0)
470 {
471 p.readInt32(&response.resp_type);
472 p.readInt32(&response.request);
473 p.readInt32(&response.slot_id);
474 p.readInt32(&response.error);
475 if(response.error != 0)
476 {
477 LYERRLOG("response return error");
478 return response.error;
479 }
480 p.readInt32(&num);
481 if(num == 0)
482 {
483 LYERRLOG("no paramters");
484 }else{
485 for(int i = 0; i<num;i++)
486 {
487 resp[i] = lynqStrdupReadString(p);
488 }
489 if(NULL != resp[0])
490 {
rjw02a50422022-01-25 14:57:53 +0800491 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800492 }
493 if(NULL != resp[1])
494 {
rjw02a50422022-01-25 14:57:53 +0800495 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800496 }
497 if(NULL != resp[2])
498 {
rjw02a50422022-01-25 14:57:53 +0800499 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800500 }
501 }
502 }
503 return response.error;
504}
505
506int lynq_query_network_selection_mode(int *netselMode)
507{
508 int ret = -1;
509 if(NULL == netselMode)
510 return ret;
511 int send_num = 0;
512 int recv_num = 0;
513 int readnum = 0;
514 lynq_client_t client_t;
515 char res_data[LYNQ_REC_BUF] = {0};
516 memset(&client_t,0,sizeof(client_t));
517 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
518 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800519 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800520
521 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +0800522 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800523 if(send_num<0)
524 {
525 LYERRLOG("sendto error:");
526 return -1;
527 }
528
529 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800530 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800531 if(recv_num == 0 ||recv_num <0)
532 {
533 LYERRLOG("recvfrom error");
534 return -1;
535 }
536 Parcel p;
537 p.setData((uint8_t *)res_data,sizeof(res_data));
538 p.setDataPosition(0);
539 if(p.dataAvail() > 0)
540 {
541 p.readInt32(&response.resp_type);
542 p.readInt32(&response.request);
543 p.readInt32(&response.slot_id);
544 p.readInt32(&response.error);
545 if(response.error != 0)
546 {
547 LYERRLOG("response return error");
548 return response.error;
549 }
550 p.readInt32(&readnum);
551 p.readInt32(netselMode);
552 }
553 return response.error;
554}
555
556int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
557{
558 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800559 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800560 return ret;
rjw78d04502022-02-24 13:37:11 +0800561 if(strlen(mode) == 0)
562 {
563 return ret;
564 }
rjw7e50cd32022-01-18 18:30:37 +0800565 int send_num = 0;
566 lynq_client_t client_t;
567 int recv_num = 0;
568 char res_data[LYNQ_REC_BUF] = {0};
569 memset(&client_t,0,sizeof(client_t));
570 if(!strcmp(mode,"Auto"))
571 {
572 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
573 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800574 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800575 memset(client_t.param,0,sizeof(client_t.param));
576 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800577 if(mccmnc == NULL)
578 {
579 LYERRLOG("mccmnc is NULL!!!");
580 return ret;
581 }
582 if(strlen(mccmnc) == 0)
583 {
584 LYERRLOG("mccmnc strlen is 0!!!");
585 return ret;
586 }
rjw7e50cd32022-01-18 18:30:37 +0800587 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
588 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800589 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800590 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800591 }else{
592 LYERRLOG("request error");
593 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800594 }
595
596
rjwbc8a05f2022-03-02 15:23:11 +0800597 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800598 if(send_num<0)
599 {
600 LYERRLOG("sendto error:");
601 return ret;
602 }
603
rjwbc8a05f2022-03-02 15:23:11 +0800604 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800605 if(recv_num == 0 ||recv_num <0)
606 {
607 LYERRLOG("recvfrom error");
608 return -1;
609 }
610
611 Parcel p;
612 p.setData((uint8_t *)res_data,sizeof(res_data));
613 p.setDataPosition(0);
614 if(p.dataAvail() > 0)
615 {
616 p.readInt32(&response.resp_type);
617 p.readInt32(&response.request);
618 p.readInt32(&response.slot_id);
619 p.readInt32(&response.error);
620 }
621 return response.error;
622}
623
624int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
625{
626 int ret = -1;
627 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
628 return ret;
629 int send_num = 0;
630 int recv_num = 0;
631 char res_data[LYNQ_REC_BUF] = {0};
632 char *resp[128];
633 lynq_client_t client_t;
634 memset(&client_t,0,sizeof(client_t));
635 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
636 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800637 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800638 memset(client_t.param,0,sizeof(client_t.param));
639
rjwbc8a05f2022-03-02 15:23:11 +0800640 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800641 if(send_num<0)
642 {
643 LYERRLOG("sendto error:");
644 return ret;
645 }
646
647 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800648 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800649 if(recv_num == 0 ||recv_num <0)
650 {
651 LYERRLOG("recvfrom error");
652 return -1;
653 }
654 Parcel p;
655 p.setData((uint8_t *)res_data,sizeof(res_data));
656 p.setDataPosition(0);
657 if(p.dataAvail() > 0)
658 {
659 p.readInt32(&response.resp_type);
660 p.readInt32(&response.request);
661 p.readInt32(&response.slot_id);
662 p.readInt32(&response.error);
663 if(response.error != 0)
664 {
665 LYERRLOG("response return error");
666 return response.error;
667 }
668 int num =p.readInt32();
669 if(num == 0)
670 {
671 LYERRLOG("no paramters");
672 }else{
673 for(int i = 0; i<num;i++)
674 {
675 resp[i] = lynqStrdupReadString(p);
676 }
677 if(NULL != resp[0])
678 {
rjw02a50422022-01-25 14:57:53 +0800679 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800680 }
681 if(NULL != resp[1])
682 {
rjw02a50422022-01-25 14:57:53 +0800683 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800684 }
685 if(NULL != resp[2])
686 {
rjw02a50422022-01-25 14:57:53 +0800687 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800688 }
689 if(NULL != resp[3])
690 {
rjw02a50422022-01-25 14:57:53 +0800691 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800692 }
693 }
694 }
695 return response.error;
696}
697
698int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
699{
700 int ret = -1;
701 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
702 return ret;
703 int send_num = 0;
704 int recv_num = 0;
705 int num = 0;
706 char str[LYNQ_TYPE_BUF];
707 char res_data[LYNQ_REC_BUF] = {0};
rjwcdd83ae2022-01-22 14:10:42 +0800708 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800709 lynq_client_t client_t;
710 memset(&client_t,0,sizeof(client_t));
711 if(strlen(type)>LYNQ_TYPE_BUF)
712 {
713 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
714 }
715 memcpy(str,type,strlen(type)+1);
716 strUpper(str);
717 if(!strcmp(str,"VOICE"))
718 {
719 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
720 }else if(!strcmp(str,"DATA")){
721 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
722 }else if(!strcmp(str,"IMS")){
723 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
724 }else{
725 LYERRLOG("request error");
726 return ret;
727 }
728 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800729 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800730 memset(client_t.param,0,sizeof(client_t.param));
731
rjwbc8a05f2022-03-02 15:23:11 +0800732 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800733 if(send_num<0)
734 {
735 LYERRLOG("sendto error:");
736 return ret;
737 }
738
739 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800740 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800741 if(recv_num == 0 ||recv_num <0)
742 {
743 LYERRLOG("recvfrom error");
744 return -1;
745 }
746 Parcel p;
747 p.setData((uint8_t *)res_data,sizeof(res_data));
748 p.setDataPosition(0);
749 if(p.dataAvail() > 0)
750 {
751 p.readInt32(&response.resp_type);
752 p.readInt32(&response.request);
753 p.readInt32(&response.slot_id);
754 p.readInt32(&response.error);
755 if(response.error != 0)
756 {
757 LYERRLOG("response return error");
758 return response.error;
759 }
760 if(!strcmp(str,"VOICE"))
761 {
762 p.readInt32(&num);
763 if(num == 15)
764 {
765 *regState = atoi(lynqStrdupReadString(p));
766 lynqStrdupReadString(p);
767 lynqStrdupReadString(p);
768 *netType = atoi(lynqStrdupReadString(p));
769 }
770 }else if(!strcmp(str,"DATA")){
771 p.readInt32(&num);
772 if(num == 11)
773 {
774 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800775 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800776 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800777
778 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800779 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800780 *netType = atoi(lynqStrdupReadString(p));
781 }
782
783 }else if(!strcmp(str,"IMS")){
784 p.readInt32(&num);
785 if(num == 2)
786 {
787 p.readInt32(imsRegState);
788 p.readInt32(radioTechFam);
789 }
790 }else{
791 LYERRLOG("request error");
792 return ret;
793 }
794 }
795 return response.error;
796}
797
798int lynq_query_prefferred_networktype(int *preNetType)
799{
800 int ret = -1;
801 int send_num = 0;
802 int recv_num = 0;
803 int num = 0;
804 char res_data[LYNQ_REC_BUF] = {0};
805 lynq_client_t client_t;
806 memset(&client_t,0,sizeof(client_t));
807 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
808 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800809 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800810 memset(client_t.param,0,sizeof(client_t.param));
811
rjwbc8a05f2022-03-02 15:23:11 +0800812 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800813 if(send_num<0)
814 {
815 LYERRLOG("sendto error:");
816 return ret;
817 }
818
819 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800820 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800821 if(recv_num == 0 ||recv_num <0)
822 {
823 LYERRLOG("recvfrom error");
824 return -1;
825 }
826 Parcel p;
827 p.setData((uint8_t *)res_data,sizeof(res_data));
828 p.setDataPosition(0);
829 if(p.dataAvail() > 0)
830 {
831 p.readInt32(&response.resp_type);
832 p.readInt32(&response.request);
833 p.readInt32(&response.slot_id);
834 p.readInt32(&response.error);
835 if(response.error != 0)
836 {
837 LYERRLOG("response return error");
838 return response.error;
839 }
840 p.readInt32(&num);
841 p.readInt32(preNetType);
842 }
843 return response.error;
844}
845
846int lynq_set_prefferred_networktype(const int preffertype)
847{
848 int ret = -1;
849 if(preffertype < 0||preffertype >33)
850 return ret;
851 int send_num = 0;
852 lynq_client_t client_t;
853 int recv_num = 0;
854 char res_data[LYNQ_REC_BUF] = {0};
855 memset(&client_t,0,sizeof(client_t));
856 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
857 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800858 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800859 sprintf(client_t.param,"%d",preffertype);
rjwbc8a05f2022-03-02 15:23:11 +0800860 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800861 if(send_num<0)
862 {
863 LYERRLOG("sendto error:");
864 return ret;
865 }
866
rjwbc8a05f2022-03-02 15:23:11 +0800867 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800868 if(recv_num == 0 ||recv_num <0)
869 {
870 LYERRLOG("recvfrom error");
871 return -1;
872 }
873
874 Parcel p;
875 p.setData((uint8_t *)res_data,sizeof(res_data));
876 p.setDataPosition(0);
877 if(p.dataAvail() > 0)
878 {
879 p.readInt32(&response.resp_type);
880 p.readInt32(&response.request);
881 p.readInt32(&response.slot_id);
882 p.readInt32(&response.error);
883 }
884
885 return response.error;
886
887}
888
889int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
890{
891 int ret = -1;
892 if(NULL == realNum)
893 return ret;
894 int send_num = 0;
895 int recv_num = 0;
896 int num = 0;
897 char res_data[LYNQ_REC_BUF] = {0};
898 lynq_client_t client_t;
899 memset(&client_t,0,sizeof(client_t));
900 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
901 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800902 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800903 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +0800904 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800905 if(send_num<0)
906 {
907 LYERRLOG("sendto error:");
908 return ret;
909 }
910
911 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800912 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800913 if(recv_num == 0 ||recv_num <0)
914 {
915 LYERRLOG("recvfrom error");
916 return -1;
917 }
918 Parcel p;
919 p.setData((uint8_t *)res_data,sizeof(res_data));
920 p.setDataPosition(0);
921 if(p.dataAvail() > 0)
922 {
923 p.readInt32(&response.resp_type);
924 p.readInt32(&response.request);
925 p.readInt32(&response.slot_id);
926 p.readInt32(&response.error);
927 if(response.error != 0)
928 {
929 LYERRLOG("response return error");
930 return response.error;
931 }
932 p.readInt32(&num);
933 LYINFLOG("cell info num:%d",num);
934 *realNum = num;
935 for(int i = 0;i<num;i++)
936 {
937 copyCellInfoList(p,&cellinfo[i]);
938 }
939 }
940 return response.error;
941
942}
943
944int lynq_set_unsol_cell_info_listrate(const int rate)
945{
946 int ret = -1;
947 int send_num = 0;
948 int recv_num = 0;
949 char res_data[LYNQ_REC_BUF] = {0};
950 lynq_client_t client_t;
951 memset(&client_t,0,sizeof(client_t));
952 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
953 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800954 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800955 sprintf(client_t.param,"%d",rate);
956
rjwbc8a05f2022-03-02 15:23:11 +0800957 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800958 if(send_num<0)
959 {
960 LYERRLOG("sendto error:");
961 return ret;
962 }
963
rjwbc8a05f2022-03-02 15:23:11 +0800964 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800965 if(recv_num == 0 ||recv_num <0)
966 {
967 LYERRLOG("recvfrom error");
968 return -1;
969 }
970
971 Parcel p;
972 p.setData((uint8_t *)res_data,sizeof(res_data));
973 p.setDataPosition(0);
974 if(p.dataAvail() > 0)
975 {
976 p.readInt32(&response.resp_type);
977 p.readInt32(&response.request);
978 p.readInt32(&response.slot_id);
979 p.readInt32(&response.error);
980 }
981
982 return response.error;
983}
984
985int lynq_set_band_mode(const int bandmode)
986{
987 int ret = -1;
988 int send_num = 0;
989 int recv_num = 0;
990 char res_data[LYNQ_REC_BUF] = {0};
991 lynq_client_t client_t;
992 memset(&client_t,0,sizeof(client_t));
993 client_t.request = RIL_REQUEST_SET_BAND_MODE;
994 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800995 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800996 sprintf(client_t.param,"%d",bandmode);
997
rjwbc8a05f2022-03-02 15:23:11 +0800998 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800999 if(send_num<0)
1000 {
1001 LYERRLOG("sendto error:");
1002 return ret;
1003 }
1004
rjwbc8a05f2022-03-02 15:23:11 +08001005 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001006 if(recv_num == 0 ||recv_num <0)
1007 {
1008 LYERRLOG("recvfrom error");
1009 return -1;
1010 }
1011
1012 Parcel p;
1013 p.setData((uint8_t *)res_data,sizeof(res_data));
1014 p.setDataPosition(0);
1015 if(p.dataAvail() > 0)
1016 {
1017 p.readInt32(&response.resp_type);
1018 p.readInt32(&response.request);
1019 p.readInt32(&response.slot_id);
1020 p.readInt32(&response.error);
1021 }
1022
1023 return response.error;
1024}
1025
1026int lynq_query_available_bandmode(int availBanMode[])
1027{
1028 int ret = -1;
1029 if(NULL == availBanMode)
1030 return ret;
1031 int send_num = 0;
1032 int recv_num = 0;
1033 int num = 0;
1034 int res = 0;
1035 char res_data[LYNQ_REC_BUF] = {0};
1036 lynq_client_t client_t;
1037 memset(&client_t,0,sizeof(client_t));
1038 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1039 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001040 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001041 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +08001042 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001043 if(send_num<0)
1044 {
1045 LYERRLOG("sendto error:");
1046 return ret;
1047 }
1048
1049 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001050 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001051 if(recv_num == 0 ||recv_num <0)
1052 {
1053 LYERRLOG("recvfrom error");
1054 return -1;
1055 }
rjw78d04502022-02-24 13:37:11 +08001056 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001057 {
1058 availBanMode[i]=0;
1059 }
1060 Parcel p;
1061 p.setData((uint8_t *)res_data,sizeof(res_data));
1062 p.setDataPosition(0);
1063
1064 if(p.dataAvail() > 0)
1065 {
1066 p.readInt32(&response.resp_type);
1067 p.readInt32(&response.request);
1068 p.readInt32(&response.slot_id);
1069 p.readInt32(&response.error);
1070 if(response.error != 0)
1071 {
1072 LYERRLOG("response return error");
1073 return response.error;
1074 }
1075 p.readInt32(&num);
1076 LYINFLOG("num = %d",num);
1077 availBanMode[0] = num;
1078 for(int i=1 ;i<=num;i++)
1079 {
1080 p.readInt32(&res);
1081 availBanMode[i]=res;
1082 }
1083 }
1084
1085 return response.error;
1086}
1087
1088int lynq_radio_on(const int data)
1089{
1090 int ret = -1;
1091 if(data < 0)
1092 return ret;
1093 int send_num = 0;
1094 char res_data[LYNQ_REC_BUF] = {0};
1095 int recv_num = 0;
1096 lynq_client_t client_t;
1097 memset(&client_t,0,sizeof(client_t));
1098 client_t.request = RIL_REQUEST_RADIO_POWER;
1099 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001100 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001101 sprintf(client_t.param,"%d",data);
1102
rjwbc8a05f2022-03-02 15:23:11 +08001103 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001104 if(send_num<0)
1105 {
1106 LYERRLOG("sendto error:");
1107 return ret;
1108 }
1109
rjwbc8a05f2022-03-02 15:23:11 +08001110 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001111 if(recv_num == 0 ||recv_num <0)
1112 {
1113 LYERRLOG("recvfrom error");
1114 return -1;
1115 }
1116
1117 Parcel p;
1118 p.setData((uint8_t *)res_data,sizeof(res_data));
1119 p.setDataPosition(0);
1120 if(p.dataAvail() > 0)
1121 {
1122 p.readInt32(&response.resp_type);
1123 p.readInt32(&response.request);
1124 p.readInt32(&response.slot_id);
1125 p.readInt32(&response.error);
1126 }
1127
1128 return response.error;
1129}
1130
1131int lynq_query_radio_tech(int* radioTech)
1132{
1133 int ret = -1;
1134 if(NULL == radioTech)
1135 return ret;
1136 int send_num = 0;
1137 int recv_num = 0;
1138 int num = 0;
1139 char res_data[LYNQ_REC_BUF] = {0};
1140 lynq_client_t client_t;
1141 memset(&client_t,0,sizeof(client_t));
1142 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1143 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001144 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001145 memset(client_t.param,0,sizeof(client_t.param));
1146
rjwbc8a05f2022-03-02 15:23:11 +08001147 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001148 if(send_num<0)
1149 {
1150 LYERRLOG("sendto error:");
1151 return ret;
1152 }
1153
rjwbc8a05f2022-03-02 15:23:11 +08001154 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001155 if(recv_num == 0 ||recv_num <0)
1156 {
1157 LYERRLOG("recvfrom error");
1158 return -1;
1159 }
1160 Parcel p;
1161 p.setData((uint8_t *)res_data,sizeof(res_data));
1162 p.setDataPosition(0);
1163
1164 if(p.dataAvail() > 0)
1165 {
1166 p.readInt32(&response.resp_type);
1167 p.readInt32(&response.request);
1168 p.readInt32(&response.slot_id);
1169 p.readInt32(&response.error);
1170 if(response.error != 0)
1171 {
1172 LYERRLOG("response return error");
1173 return response.error;
1174 }
1175 p.readInt32(&num);
1176 p.readInt32(radioTech);
1177 }
1178 return response.error;
1179}
1180
1181int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1182{
1183 int ret = -1;
1184 if(NULL == solSigStren)
1185 return ret;
1186 int send_num = 0;
1187 int recv_num = 0;
1188 int sum = 0;
1189 int LTE_signalstrength = 0;
1190 int WCDMA_signalstrength = 0;
1191 int none = 0;
1192
1193 char res_data[LYNQ_REC_BUF] = {0};
1194 lynq_client_t client_t;
1195 memset(&client_t,0,sizeof(client_t));
1196 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1197 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001198 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001199 memset(client_t.param,0,sizeof(client_t.param));
1200
rjwbc8a05f2022-03-02 15:23:11 +08001201 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001202 if(send_num<0)
1203 {
1204 LYERRLOG("sendto error:");
1205 return ret;
1206 }
1207
1208 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001209 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001210 if(recv_num == 0 ||recv_num <0)
1211 {
1212 LYERRLOG("recvfrom error");
1213 return -1;
1214 }
1215 Parcel p;
1216 p.setData((uint8_t *)res_data,sizeof(res_data));
1217 p.setDataPosition(0);
1218
1219 if(p.dataAvail() > 0)
1220 {
1221 p.readInt32(&response.resp_type);
1222 p.readInt32(&response.request);
1223 p.readInt32(&response.slot_id);
1224 p.readInt32(&response.error);
1225 if(response.error != 0)
1226 {
1227 LYERRLOG("response return error");
1228 return response.error;
1229 }
1230
1231 p.readInt32(&solSigStren->rssi);
1232 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1233 {
1234 solSigStren->gw_sig_valid = 1;
1235 }else{
1236 solSigStren->gw_sig_valid = 0;
1237 }
1238
1239 p.readInt32(&none);
1240 p.readInt32(&none);
1241 p.readInt32(&none);
1242 p.readInt32(&none);
1243 p.readInt32(&none);
1244 p.readInt32(&none);
1245 p.readInt32(&none);
1246 p.readInt32(&LTE_signalstrength);
1247 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1248 p.readInt32(&solSigStren->rsrp);
1249 p.readInt32(&solSigStren->rsrq);
1250 p.readInt32(&solSigStren->rssnr);
1251 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1252 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1253 {
1254 solSigStren->lte_sig_valid = 1;
1255 }else{
1256 solSigStren->lte_sig_valid = 0;
1257 }
1258
1259 p.readInt32(&none);
1260 p.readInt32(&none);
1261 p.readInt32(&none);
1262 p.readInt32(&none);
1263 p.readInt32(&none);
1264 p.readInt32(&WCDMA_signalstrength);
1265 p.readInt32(&none);
1266 p.readInt32(&solSigStren->rscp);
1267 p.readInt32(&solSigStren->ecno);
1268 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1269 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1270 {
rjwcdd83ae2022-01-22 14:10:42 +08001271 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001272 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001273 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001274 }
rjwcdd83ae2022-01-22 14:10:42 +08001275 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001276 p.readInt32(&solSigStren->ssRsrp);
1277 p.readInt32(&solSigStren->ssRsrq);
1278 p.readInt32(&solSigStren->ssSinr);
1279 p.readInt32(&solSigStren->csiRsrp);
1280 p.readInt32(&solSigStren->csiRsrq);
1281 p.readInt32(&solSigStren->csiSinr);
1282 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1283 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1284 if(sum != 0)
1285 {
1286 solSigStren->nr_sig_valid = 1;
1287 }else{
1288 LYERRLOG("None of NR signal info");
1289 }
1290 }
1291 return response.error;
1292}
rjwbc8a05f2022-03-02 15:23:11 +08001293
1294/*Used to wait for an update signal*/
1295int lynq_wait_signalchanges(int *handle)
1296{
1297 LYDBGLOG("start wait signalchanges info");
1298 if(NULL == handle)
1299 {
1300 LYERRLOG("illegal input");
1301 return -1;
1302 }
1303 wait_signal_changes();
1304 LYDBGLOG("get signalchanges");
1305 *handle = network_wait_urc_id;
1306 return 0;
1307}
1308/*Used to get urc info*/
1309int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1310{
1311 LYDBGLOG("start get urc info");
1312 if(handle != 1002&&handle != 1009)
1313 {
1314 LYINFLOG("invalid handle!!!");
1315 return -1;
1316 }
1317 if(NULL == solSigStren && NULL == slot_id)
1318 {
1319 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1320 return -1;
1321 }
1322 switch(handle)
1323 {
1324 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1325 {
1326 LYDBGLOG("get state update to VOICE");
1327 *slot_id = network_urc_slot_id;
1328 LYINFLOG("slot_id = %d",network_urc_slot_id);
1329 }
1330 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1331 {
1332 LYDBGLOG("get state update to signal info");
1333 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1334 solSigStren->rssi = network_urc_solSigStren.rssi;
1335 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1336 solSigStren->rscp = network_urc_solSigStren.rscp;
1337 solSigStren->ecno = network_urc_solSigStren.ecno;
1338 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1339 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1340 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1341 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1342 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1343 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1344 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1345 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1346 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1347 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1348 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1349 }
1350 }
1351 return 0;
1352}