blob: a3e82aa9074ec041b18c2a9c51d89867353a783a [file] [log] [blame]
rjw2183a5f2022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjwc3e81b82022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw2183a5f2022-01-18 18:30:37 +080013
14#include "lynq_network.h"
15#include "liblog/lynq_deflog.h"
16#define LYNQ_SERVICE_PORT 8088
17#define LYNQ_URC_SERVICE_PORT 8086
18#define LYNQ_URC_ADDRESS "0.0.0.0"
19#define LYNQ_ADDRESS "127.0.0.1"
20#define LYNQ_REQUEST_PARAM_BUF 8192
21#define LYNQ_REC_BUF 8192
22#define LYNQ_RESP_BUF 128
23#define LYNQ_TYPE_BUF 10
24#define USER_LOG_TAG "LYNQ_NETWORK"
25
26
27using ::android::Parcel;
28
29
30typedef struct{
31 int uToken;
32 int request;
33 int paramLen;
34 char param[LYNQ_REQUEST_PARAM_BUF];
35}lynq_client_t;
36
37typedef struct{
38 int resp_type;
39 int request;
40 int slot_id;
41 int error;
42}lynq_resp_t;
43
44lynq_client_t client_t;
45lynq_resp_t response;
rjw415439a2022-03-02 15:23:11 +080046
47int network_len_addr_serv;
48int network_len_urc_addr_serv;
49struct sockaddr_in network_addr_serv;
50struct sockaddr_in network_urc_addr_serv;
51static int network_sock_fd = 0;
52int network_urc_sock_fd = 0;
53int network_Global_uToken = 0;
54int network_slot_id = -1;
55int network_urc_slot_id = -1;
56int network_urc_status = 1;
57int network_wait_urc_id = 0;
58signalStrength_t network_urc_solSigStren;
rjw2183a5f2022-01-18 18:30:37 +080059
60
rjw415439a2022-03-02 15:23:11 +080061static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
62static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw2183a5f2022-01-18 18:30:37 +080063
64typedef enum{
65 LYNQ_E_CARDSTATE_ERROR=8000,
66 /* The voice service state is out of service*/
67 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
68 /* The voice service state is EMERGENCY_ONLY*/
69 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
70 /* The radio power is power off*/
71 LYNQ_E_STATE_POWER_OFF=8003,
72 LYNQ_E_TIME_OUT=8004,
73 /*create or open sms DB fail */
74 LYNQ_E_SMS_DB_FAIL=8005,
75 /*Failed to execute sql statement*/
76 LYNQ_E_SMS_SQL_FAIL = 8006,
77 LYNQ_E_SMS_NOT_FIND = 8007,
78 /* The logic conflict*/
79 LYNQ_E_CONFLICT=9000,
80 /*Null anomaly*/
81 LYNQ_E_NULL_ANONALY=9001
82}LYNQ_E;
83
rjw415439a2022-03-02 15:23:11 +080084int wait_signal_changes()
85{
86 int ret = 0;
87 pthread_mutex_lock(&signal_state_change_mutex);
88 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
89 pthread_mutex_unlock(&signal_state_change_mutex);
90 return 0;
91}
92
93void send_signal_changes()
94{
95 pthread_mutex_lock(&signal_state_change_mutex);
96 pthread_cond_signal(&signal_state_change_cond);
97 pthread_mutex_unlock(&signal_state_change_mutex);
98 return;
99}
100
rjw2183a5f2022-01-18 18:30:37 +0800101void *thread_urc_recv(void *p)
102{
103 Parcel *urc_p =NULL;
104 char urc_data[LYNQ_REC_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800105 int resp_type = -1;
106 int urc_id = -1;
107 int res = 0;
108 int none = 0;
109 int NR_sum = 0;
rjw2183a5f2022-01-18 18:30:37 +0800110 int urc_LTE_signalstrength = 0;
111 int urc_WCDMA_signalstrength = 0;
rjw2183a5f2022-01-18 18:30:37 +0800112 LYINFLOG("urc thread is running");
rjw415439a2022-03-02 15:23:11 +0800113 while(network_urc_status)
rjw2183a5f2022-01-18 18:30:37 +0800114 {
115 bzero(urc_data,LYNQ_REC_BUF);
rjw415439a2022-03-02 15:23:11 +0800116 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);
rjw2183a5f2022-01-18 18:30:37 +0800117 if(res<=0)
118 {
119 LYERRLOG("thread_urc_recv step2 fail:");
120 break;
121 }
122 urc_p = new Parcel();
123 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
124 urc_p->setDataPosition(0);
125 if(urc_p->dataAvail()>0)
126 {
127 urc_p->readInt32(&resp_type);
128 urc_p->readInt32(&urc_id);
rjw415439a2022-03-02 15:23:11 +0800129 urc_p->readInt32(&network_urc_slot_id);
rjw2183a5f2022-01-18 18:30:37 +0800130 switch(urc_id)
131 {
132 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
133 {
rjw415439a2022-03-02 15:23:11 +0800134 network_wait_urc_id = urc_id;
135 LYINFLOG("slot_id = %d",network_urc_slot_id);
136 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800137 }
138 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
139 {
rjw415439a2022-03-02 15:23:11 +0800140 urc_p->readInt32(&network_urc_solSigStren.rssi);
141 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw2183a5f2022-01-18 18:30:37 +0800142 {
rjw415439a2022-03-02 15:23:11 +0800143 network_urc_solSigStren.gw_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800144 }else{
rjw415439a2022-03-02 15:23:11 +0800145 network_urc_solSigStren.gw_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800146 }
rjw415439a2022-03-02 15:23:11 +0800147 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800148 {
rjw415439a2022-03-02 15:23:11 +0800149 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw7610e272022-02-24 13:37:11 +0800150 }
rjw2183a5f2022-01-18 18:30:37 +0800151 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(&none);
158 urc_p->readInt32(&urc_LTE_signalstrength);
159 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjw415439a2022-03-02 15:23:11 +0800160 urc_p->readInt32(&network_urc_solSigStren.rsrp);
161 urc_p->readInt32(&network_urc_solSigStren.rsrq);
162 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800163 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
164 {
rjw415439a2022-03-02 15:23:11 +0800165 network_urc_solSigStren.lte_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800166 }else{
rjw415439a2022-03-02 15:23:11 +0800167 network_urc_solSigStren.lte_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800168 }
rjw415439a2022-03-02 15:23:11 +0800169 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800170 {
171 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
172 }
rjw2183a5f2022-01-18 18:30:37 +0800173 urc_p->readInt32(&none);
174 urc_p->readInt32(&none);
175 urc_p->readInt32(&none);
176 urc_p->readInt32(&none);
177 urc_p->readInt32(&none);
178 urc_p->readInt32(&urc_WCDMA_signalstrength);
179 urc_p->readInt32(&none);
rjw415439a2022-03-02 15:23:11 +0800180 urc_p->readInt32(&network_urc_solSigStren.rscp);
181 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800182 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
183 {
rjw415439a2022-03-02 15:23:11 +0800184 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800185 }else{
rjw415439a2022-03-02 15:23:11 +0800186 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800187 }
rjw415439a2022-03-02 15:23:11 +0800188 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800189 {
190 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800191 }
rjw415439a2022-03-02 15:23:11 +0800192 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
193 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
194 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
195 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
196 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
197 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
198 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
199 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800200 if(NR_sum != 0)
201 {
rjw415439a2022-03-02 15:23:11 +0800202 network_urc_solSigStren.nr_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800203 }else{
rjw415439a2022-03-02 15:23:11 +0800204 network_urc_solSigStren.nr_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800205 }
rjw415439a2022-03-02 15:23:11 +0800206 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800207 {
208 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
rjw415439a2022-03-02 15:23:11 +0800209 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
210 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800211 }
rjw415439a2022-03-02 15:23:11 +0800212 network_wait_urc_id = urc_id;
213 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800214 }
215 }
216 }
217 }
218}
219
220
221int lynq_server_socket_start()
222{
rjw415439a2022-03-02 15:23:11 +0800223 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
224 if(-1 == network_sock_fd)
rjw2183a5f2022-01-18 18:30:37 +0800225 {
226 LYERRLOG("socket open error");
227 return -1;
228 }
rjw415439a2022-03-02 15:23:11 +0800229 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800230
rjw415439a2022-03-02 15:23:11 +0800231 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
232 network_addr_serv.sin_family = AF_INET;
233 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
234 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
235 network_len_addr_serv = sizeof(network_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800236 return 0;
237}
238
239int lynq_urc_socket_start()
240{
241 pthread_t tid;
242 pthread_attr_t attr;
243 int on = 1;
rjw415439a2022-03-02 15:23:11 +0800244 network_urc_sock_fd = -1;
rjw2183a5f2022-01-18 18:30:37 +0800245 int ret = 0;
rjw415439a2022-03-02 15:23:11 +0800246 network_len_urc_addr_serv = sizeof(sockaddr_in);
247 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
248 if (network_urc_sock_fd <0){
rjw2183a5f2022-01-18 18:30:37 +0800249 LYERRLOG("urc socket error");
250 ret = -1;
251 }
rjw415439a2022-03-02 15:23:11 +0800252 network_urc_addr_serv.sin_family = AF_INET;
253 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
254 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw2183a5f2022-01-18 18:30:37 +0800255 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjw415439a2022-03-02 15:23:11 +0800256 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw2183a5f2022-01-18 18:30:37 +0800257 if(ret <0)
258 {
259 LYERRLOG("urc socket set error");
260 return -1;
261 }
rjw415439a2022-03-02 15:23:11 +0800262 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw2183a5f2022-01-18 18:30:37 +0800263 if(ret <0)
264 {
265 LYERRLOG("urc socket bind error");
266 return -1;
267 }
268 pthread_attr_init(&attr);
269 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjw415439a2022-03-02 15:23:11 +0800270 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800271 if(ret <0)
272 {
273 LYERRLOG("urc pthread create error");
274 return -1;
275 }
276 LYINFLOG("urc start success");
277 return 0;
278}
279
280int lynq_network_init(int utoken){
281 if(utoken <0){
282 LYERRLOG("init err");
283 return -1;
284 }
rjw415439a2022-03-02 15:23:11 +0800285 network_urc_status = 1;
286 network_Global_uToken = utoken;
rjw2183a5f2022-01-18 18:30:37 +0800287 LYLOGSET(LOG_INFO);
288 LYLOGEINIT(USER_LOG_TAG);
289 int ret = 0;
290
291 ret = lynq_server_socket_start();
292 if(ret !=0)
293 {
294 LYERRLOG("init socket client fail!!!");
295 return -1;
296 }
297 ret = lynq_urc_socket_start();
298 if(ret != 0)
299 {
300 LYERRLOG("init socket urc fail!!!");
301 return -1;
302 }
303 return 0;
304}
305
306int strUpper(char * str)
307{
308 int i=0;
309 while(1)
310 {
311 if(str[i]=='\0')
312 {
313 break;
314 }
315 if(str[i]>='a'&&str[i]<='z')
316 {
317 str[i]=str[i]-32;
318 }
319 i++;
320 }
321 return 0;
322}
323
324int copyCellInfoList(Parcel &p,int *cellinfo)
325{
326 int32_t v=0;
327 int64_t v6=0;
328 if(NULL == cellinfo)
329 {
330 LYERRLOG("*cellinfo error");
331 }
332
333 int nothing = 0;
334 p.readInt32(&v);
335 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
336 p.readInt32(&nothing);
337 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
338 // p.readInt32(&cellinfo->cellinfo.registered);
339 p.readInt32(&v);
340 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
341 p.readInt64(&v6);
342 // cellinfo->cellinfo.timeStamp = v6;
343 switch(cellinfoType) {
344 case RIL_CELL_INFO_TYPE_GSM: {
345 p.readInt32(&nothing);
346 p.readInt32(&nothing);
347 p.readInt32(&nothing);
348 p.readInt32(cellinfo);
349 p.readInt32(&nothing);
350 p.readInt32(&nothing);
351 p.readInt32(&nothing);
352 break;
353 }
354 case RIL_CELL_INFO_TYPE_WCDMA: {
355 p.readInt32(&nothing);
356 p.readInt32(&nothing);
357 p.readInt32(&nothing);
358 p.readInt32(cellinfo);
359 p.readInt32(&nothing);
360 p.readInt32(&nothing);
361 p.readInt32(&nothing);
362 break;
363 }
364 case RIL_CELL_INFO_TYPE_CDMA: {
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 p.readInt32(&nothing);
375 cellinfo = 0;
376
377 break;
378 }
379 case RIL_CELL_INFO_TYPE_LTE: {
380 p.readInt32(&nothing);
381 p.readInt32(&nothing);
382 p.readInt32(cellinfo);
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 p.readInt32(&nothing);
391 break;
392 }
393 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
394 p.readInt32(&nothing);
395 p.readInt32(&nothing);
396 p.readInt32(&nothing);
397 p.readInt32(cellinfo);
398 p.readInt32(&nothing);
399 p.readInt32(&nothing);
400 break;
401 }
402 case RIL_CELL_INFO_TYPE_NR: {
403 p.readInt32(&nothing);
404 p.readInt32(&nothing);
405 p.readInt32(cellinfo);
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 p.readInt32(&nothing);
415 break;
416 }
417 }
418 LYINFLOG("CID in fUNC :%d",*cellinfo);
419 return 0;
420}
421
422int lynq_network_deinit(void){
rjw415439a2022-03-02 15:23:11 +0800423 close(network_sock_fd);
424 network_urc_status = 0;
rjw2183a5f2022-01-18 18:30:37 +0800425 return 0;
426}
427
428static char * lynqStrdupReadString(Parcel &p) {
429 size_t stringlen;
430 const char16_t *s16;
431
432 s16 = p.readString16Inplace(&stringlen);
433 return strndup16to8(s16, stringlen);
434}
435
436int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
437{
438 int ret = -1;
439 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
440 return ret;
441 int send_num = 0;
442 int recv_num = 0;
443 int num = 0;
444 lynq_client_t client_t;
445 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800446 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800447 memset(&client_t,0,sizeof(client_t));
448 client_t.request = RIL_REQUEST_OPERATOR;
449 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800450 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800451 memset(client_t.param,0,sizeof(client_t.param));
452
rjw415439a2022-03-02 15:23:11 +0800453 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800454 if(send_num<0)
455 {
456 LYERRLOG("sendto error:");
457 return ret;
458 }
459
460 //get data
rjw415439a2022-03-02 15:23:11 +0800461 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800462 if(recv_num == 0 ||recv_num <0)
463 {
464 LYERRLOG("recvfrom error");
465 return -1;
466 }
467 Parcel p;
468 p.setData((uint8_t *)res_data,sizeof(res_data));
469 p.setDataPosition(0);
470 if(p.dataAvail() > 0)
471 {
472 p.readInt32(&response.resp_type);
473 p.readInt32(&response.request);
474 p.readInt32(&response.slot_id);
475 p.readInt32(&response.error);
476 if(response.error != 0)
477 {
478 LYERRLOG("response return error");
479 return response.error;
480 }
481 p.readInt32(&num);
482 if(num == 0)
483 {
484 LYERRLOG("no paramters");
485 }else{
486 for(int i = 0; i<num;i++)
487 {
488 resp[i] = lynqStrdupReadString(p);
489 }
490 if(NULL != resp[0])
491 {
rjwaae473f2022-01-25 14:57:53 +0800492 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800493 }
494 if(NULL != resp[1])
495 {
rjwaae473f2022-01-25 14:57:53 +0800496 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800497 }
498 if(NULL != resp[2])
499 {
rjwaae473f2022-01-25 14:57:53 +0800500 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800501 }
502 }
503 }
504 return response.error;
505}
506
507int lynq_query_network_selection_mode(int *netselMode)
508{
509 int ret = -1;
510 if(NULL == netselMode)
511 return ret;
512 int send_num = 0;
513 int recv_num = 0;
514 int readnum = 0;
515 lynq_client_t client_t;
516 char res_data[LYNQ_REC_BUF] = {0};
517 memset(&client_t,0,sizeof(client_t));
518 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
519 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800520 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800521
522 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800523 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800524 if(send_num<0)
525 {
526 LYERRLOG("sendto error:");
527 return -1;
528 }
529
530 //get data
rjw415439a2022-03-02 15:23:11 +0800531 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800532 if(recv_num == 0 ||recv_num <0)
533 {
534 LYERRLOG("recvfrom error");
535 return -1;
536 }
537 Parcel p;
538 p.setData((uint8_t *)res_data,sizeof(res_data));
539 p.setDataPosition(0);
540 if(p.dataAvail() > 0)
541 {
542 p.readInt32(&response.resp_type);
543 p.readInt32(&response.request);
544 p.readInt32(&response.slot_id);
545 p.readInt32(&response.error);
546 if(response.error != 0)
547 {
548 LYERRLOG("response return error");
549 return response.error;
550 }
551 p.readInt32(&readnum);
552 p.readInt32(netselMode);
553 }
554 return response.error;
555}
556
557int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
558{
559 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800560 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800561 return ret;
rjw7610e272022-02-24 13:37:11 +0800562 if(strlen(mode) == 0)
563 {
564 return ret;
565 }
rjw2183a5f2022-01-18 18:30:37 +0800566 int send_num = 0;
567 lynq_client_t client_t;
568 int recv_num = 0;
569 char res_data[LYNQ_REC_BUF] = {0};
570 memset(&client_t,0,sizeof(client_t));
571 if(!strcmp(mode,"Auto"))
572 {
573 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
574 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800575 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800576 memset(client_t.param,0,sizeof(client_t.param));
577 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800578 if(mccmnc == NULL)
579 {
580 LYERRLOG("mccmnc is NULL!!!");
581 return ret;
582 }
583 if(strlen(mccmnc) == 0)
584 {
585 LYERRLOG("mccmnc strlen is 0!!!");
586 return ret;
587 }
rjw2183a5f2022-01-18 18:30:37 +0800588 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
589 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800590 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800591 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800592 }else{
593 LYERRLOG("request error");
594 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800595 }
596
597
rjw415439a2022-03-02 15:23:11 +0800598 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800599 if(send_num<0)
600 {
601 LYERRLOG("sendto error:");
602 return ret;
603 }
604
rjw415439a2022-03-02 15:23:11 +0800605 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800606 if(recv_num == 0 ||recv_num <0)
607 {
608 LYERRLOG("recvfrom error");
609 return -1;
610 }
611
612 Parcel p;
613 p.setData((uint8_t *)res_data,sizeof(res_data));
614 p.setDataPosition(0);
615 if(p.dataAvail() > 0)
616 {
617 p.readInt32(&response.resp_type);
618 p.readInt32(&response.request);
619 p.readInt32(&response.slot_id);
620 p.readInt32(&response.error);
621 }
622 return response.error;
623}
624
625int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
626{
627 int ret = -1;
628 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
629 return ret;
630 int send_num = 0;
631 int recv_num = 0;
632 char res_data[LYNQ_REC_BUF] = {0};
633 char *resp[128];
634 lynq_client_t client_t;
635 memset(&client_t,0,sizeof(client_t));
636 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
637 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800638 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800639 memset(client_t.param,0,sizeof(client_t.param));
640
rjw415439a2022-03-02 15:23:11 +0800641 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800642 if(send_num<0)
643 {
644 LYERRLOG("sendto error:");
645 return ret;
646 }
647
648 //get data
rjw415439a2022-03-02 15:23:11 +0800649 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800650 if(recv_num == 0 ||recv_num <0)
651 {
652 LYERRLOG("recvfrom error");
653 return -1;
654 }
655 Parcel p;
656 p.setData((uint8_t *)res_data,sizeof(res_data));
657 p.setDataPosition(0);
658 if(p.dataAvail() > 0)
659 {
660 p.readInt32(&response.resp_type);
661 p.readInt32(&response.request);
662 p.readInt32(&response.slot_id);
663 p.readInt32(&response.error);
664 if(response.error != 0)
665 {
666 LYERRLOG("response return error");
667 return response.error;
668 }
669 int num =p.readInt32();
670 if(num == 0)
671 {
672 LYERRLOG("no paramters");
673 }else{
674 for(int i = 0; i<num;i++)
675 {
676 resp[i] = lynqStrdupReadString(p);
677 }
678 if(NULL != resp[0])
679 {
rjwaae473f2022-01-25 14:57:53 +0800680 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800681 }
682 if(NULL != resp[1])
683 {
rjwaae473f2022-01-25 14:57:53 +0800684 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800685 }
686 if(NULL != resp[2])
687 {
rjwaae473f2022-01-25 14:57:53 +0800688 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800689 }
690 if(NULL != resp[3])
691 {
rjwaae473f2022-01-25 14:57:53 +0800692 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800693 }
694 }
695 }
696 return response.error;
697}
698
699int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam)
700{
701 int ret = -1;
702 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
703 return ret;
704 int send_num = 0;
705 int recv_num = 0;
706 int num = 0;
707 char str[LYNQ_TYPE_BUF];
708 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800709 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800710 lynq_client_t client_t;
711 memset(&client_t,0,sizeof(client_t));
712 if(strlen(type)>LYNQ_TYPE_BUF)
713 {
714 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
715 }
716 memcpy(str,type,strlen(type)+1);
717 strUpper(str);
718 if(!strcmp(str,"VOICE"))
719 {
720 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
721 }else if(!strcmp(str,"DATA")){
722 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
723 }else if(!strcmp(str,"IMS")){
724 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
725 }else{
726 LYERRLOG("request error");
727 return ret;
728 }
729 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800730 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800731 memset(client_t.param,0,sizeof(client_t.param));
732
rjw415439a2022-03-02 15:23:11 +0800733 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800734 if(send_num<0)
735 {
736 LYERRLOG("sendto error:");
737 return ret;
738 }
739
740 //get data
rjw415439a2022-03-02 15:23:11 +0800741 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800742 if(recv_num == 0 ||recv_num <0)
743 {
744 LYERRLOG("recvfrom error");
745 return -1;
746 }
747 Parcel p;
748 p.setData((uint8_t *)res_data,sizeof(res_data));
749 p.setDataPosition(0);
750 if(p.dataAvail() > 0)
751 {
752 p.readInt32(&response.resp_type);
753 p.readInt32(&response.request);
754 p.readInt32(&response.slot_id);
755 p.readInt32(&response.error);
756 if(response.error != 0)
757 {
758 LYERRLOG("response return error");
759 return response.error;
760 }
761 if(!strcmp(str,"VOICE"))
762 {
763 p.readInt32(&num);
764 if(num == 15)
765 {
766 *regState = atoi(lynqStrdupReadString(p));
767 lynqStrdupReadString(p);
768 lynqStrdupReadString(p);
769 *netType = atoi(lynqStrdupReadString(p));
770 }
771 }else if(!strcmp(str,"DATA")){
772 p.readInt32(&num);
773 if(num == 11)
774 {
775 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800776 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800777 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800778
779 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800780 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800781 *netType = atoi(lynqStrdupReadString(p));
782 }
783
784 }else if(!strcmp(str,"IMS")){
785 p.readInt32(&num);
786 if(num == 2)
787 {
788 p.readInt32(imsRegState);
789 p.readInt32(radioTechFam);
790 }
791 }else{
792 LYERRLOG("request error");
793 return ret;
794 }
795 }
796 return response.error;
797}
798
799int lynq_query_prefferred_networktype(int *preNetType)
800{
801 int ret = -1;
802 int send_num = 0;
803 int recv_num = 0;
804 int num = 0;
805 char res_data[LYNQ_REC_BUF] = {0};
806 lynq_client_t client_t;
807 memset(&client_t,0,sizeof(client_t));
808 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
809 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800810 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800811 memset(client_t.param,0,sizeof(client_t.param));
812
rjw415439a2022-03-02 15:23:11 +0800813 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800814 if(send_num<0)
815 {
816 LYERRLOG("sendto error:");
817 return ret;
818 }
819
820 //get data
rjw415439a2022-03-02 15:23:11 +0800821 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800822 if(recv_num == 0 ||recv_num <0)
823 {
824 LYERRLOG("recvfrom error");
825 return -1;
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 if(response.error != 0)
837 {
838 LYERRLOG("response return error");
839 return response.error;
840 }
841 p.readInt32(&num);
842 p.readInt32(preNetType);
843 }
844 return response.error;
845}
846
847int lynq_set_prefferred_networktype(const int preffertype)
848{
849 int ret = -1;
850 if(preffertype < 0||preffertype >33)
851 return ret;
852 int send_num = 0;
853 lynq_client_t client_t;
854 int recv_num = 0;
855 char res_data[LYNQ_REC_BUF] = {0};
856 memset(&client_t,0,sizeof(client_t));
857 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
858 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800859 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800860 sprintf(client_t.param,"%d",preffertype);
rjw415439a2022-03-02 15:23:11 +0800861 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800862 if(send_num<0)
863 {
864 LYERRLOG("sendto error:");
865 return ret;
866 }
867
rjw415439a2022-03-02 15:23:11 +0800868 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800869 if(recv_num == 0 ||recv_num <0)
870 {
871 LYERRLOG("recvfrom error");
872 return -1;
873 }
874
875 Parcel p;
876 p.setData((uint8_t *)res_data,sizeof(res_data));
877 p.setDataPosition(0);
878 if(p.dataAvail() > 0)
879 {
880 p.readInt32(&response.resp_type);
881 p.readInt32(&response.request);
882 p.readInt32(&response.slot_id);
883 p.readInt32(&response.error);
884 }
885
886 return response.error;
887
888}
889
890int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
891{
892 int ret = -1;
893 if(NULL == realNum)
894 return ret;
895 int send_num = 0;
896 int recv_num = 0;
897 int num = 0;
898 char res_data[LYNQ_REC_BUF] = {0};
899 lynq_client_t client_t;
900 memset(&client_t,0,sizeof(client_t));
901 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
902 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800903 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800904 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800905 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800906 if(send_num<0)
907 {
908 LYERRLOG("sendto error:");
909 return ret;
910 }
911
912 //get data
rjw415439a2022-03-02 15:23:11 +0800913 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800914 if(recv_num == 0 ||recv_num <0)
915 {
916 LYERRLOG("recvfrom error");
917 return -1;
918 }
919 Parcel p;
920 p.setData((uint8_t *)res_data,sizeof(res_data));
921 p.setDataPosition(0);
922 if(p.dataAvail() > 0)
923 {
924 p.readInt32(&response.resp_type);
925 p.readInt32(&response.request);
926 p.readInt32(&response.slot_id);
927 p.readInt32(&response.error);
928 if(response.error != 0)
929 {
930 LYERRLOG("response return error");
931 return response.error;
932 }
933 p.readInt32(&num);
934 LYINFLOG("cell info num:%d",num);
935 *realNum = num;
936 for(int i = 0;i<num;i++)
937 {
938 copyCellInfoList(p,&cellinfo[i]);
939 }
940 }
941 return response.error;
942
943}
944
945int lynq_set_unsol_cell_info_listrate(const int rate)
946{
947 int ret = -1;
948 int send_num = 0;
949 int recv_num = 0;
950 char res_data[LYNQ_REC_BUF] = {0};
951 lynq_client_t client_t;
952 memset(&client_t,0,sizeof(client_t));
953 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
954 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800955 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800956 sprintf(client_t.param,"%d",rate);
957
rjw415439a2022-03-02 15:23:11 +0800958 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800959 if(send_num<0)
960 {
961 LYERRLOG("sendto error:");
962 return ret;
963 }
964
rjw415439a2022-03-02 15:23:11 +0800965 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800966 if(recv_num == 0 ||recv_num <0)
967 {
968 LYERRLOG("recvfrom error");
969 return -1;
970 }
971
972 Parcel p;
973 p.setData((uint8_t *)res_data,sizeof(res_data));
974 p.setDataPosition(0);
975 if(p.dataAvail() > 0)
976 {
977 p.readInt32(&response.resp_type);
978 p.readInt32(&response.request);
979 p.readInt32(&response.slot_id);
980 p.readInt32(&response.error);
981 }
982
983 return response.error;
984}
985
986int lynq_set_band_mode(const int bandmode)
987{
988 int ret = -1;
989 int send_num = 0;
990 int recv_num = 0;
991 char res_data[LYNQ_REC_BUF] = {0};
992 lynq_client_t client_t;
993 memset(&client_t,0,sizeof(client_t));
994 client_t.request = RIL_REQUEST_SET_BAND_MODE;
995 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800996 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800997 sprintf(client_t.param,"%d",bandmode);
998
rjw415439a2022-03-02 15:23:11 +0800999 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001000 if(send_num<0)
1001 {
1002 LYERRLOG("sendto error:");
1003 return ret;
1004 }
1005
rjw415439a2022-03-02 15:23:11 +08001006 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001007 if(recv_num == 0 ||recv_num <0)
1008 {
1009 LYERRLOG("recvfrom error");
1010 return -1;
1011 }
1012
1013 Parcel p;
1014 p.setData((uint8_t *)res_data,sizeof(res_data));
1015 p.setDataPosition(0);
1016 if(p.dataAvail() > 0)
1017 {
1018 p.readInt32(&response.resp_type);
1019 p.readInt32(&response.request);
1020 p.readInt32(&response.slot_id);
1021 p.readInt32(&response.error);
1022 }
1023
1024 return response.error;
1025}
1026
1027int lynq_query_available_bandmode(int availBanMode[])
1028{
1029 int ret = -1;
1030 if(NULL == availBanMode)
1031 return ret;
1032 int send_num = 0;
1033 int recv_num = 0;
1034 int num = 0;
1035 int res = 0;
1036 char res_data[LYNQ_REC_BUF] = {0};
1037 lynq_client_t client_t;
1038 memset(&client_t,0,sizeof(client_t));
1039 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1040 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001041 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001042 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +08001043 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001044 if(send_num<0)
1045 {
1046 LYERRLOG("sendto error:");
1047 return ret;
1048 }
1049
1050 //get data
rjw415439a2022-03-02 15:23:11 +08001051 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001052 if(recv_num == 0 ||recv_num <0)
1053 {
1054 LYERRLOG("recvfrom error");
1055 return -1;
1056 }
rjw7610e272022-02-24 13:37:11 +08001057 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001058 {
1059 availBanMode[i]=0;
1060 }
1061 Parcel p;
1062 p.setData((uint8_t *)res_data,sizeof(res_data));
1063 p.setDataPosition(0);
1064
1065 if(p.dataAvail() > 0)
1066 {
1067 p.readInt32(&response.resp_type);
1068 p.readInt32(&response.request);
1069 p.readInt32(&response.slot_id);
1070 p.readInt32(&response.error);
1071 if(response.error != 0)
1072 {
1073 LYERRLOG("response return error");
1074 return response.error;
1075 }
1076 p.readInt32(&num);
1077 LYINFLOG("num = %d",num);
1078 availBanMode[0] = num;
1079 for(int i=1 ;i<=num;i++)
1080 {
1081 p.readInt32(&res);
1082 availBanMode[i]=res;
1083 }
1084 }
1085
1086 return response.error;
1087}
1088
1089int lynq_radio_on(const int data)
1090{
1091 int ret = -1;
1092 if(data < 0)
1093 return ret;
1094 int send_num = 0;
1095 char res_data[LYNQ_REC_BUF] = {0};
1096 int recv_num = 0;
1097 lynq_client_t client_t;
1098 memset(&client_t,0,sizeof(client_t));
1099 client_t.request = RIL_REQUEST_RADIO_POWER;
1100 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001101 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001102 sprintf(client_t.param,"%d",data);
1103
rjw415439a2022-03-02 15:23:11 +08001104 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001105 if(send_num<0)
1106 {
1107 LYERRLOG("sendto error:");
1108 return ret;
1109 }
1110
rjw415439a2022-03-02 15:23:11 +08001111 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001112 if(recv_num == 0 ||recv_num <0)
1113 {
1114 LYERRLOG("recvfrom error");
1115 return -1;
1116 }
1117
1118 Parcel p;
1119 p.setData((uint8_t *)res_data,sizeof(res_data));
1120 p.setDataPosition(0);
1121 if(p.dataAvail() > 0)
1122 {
1123 p.readInt32(&response.resp_type);
1124 p.readInt32(&response.request);
1125 p.readInt32(&response.slot_id);
1126 p.readInt32(&response.error);
1127 }
1128
1129 return response.error;
1130}
1131
1132int lynq_query_radio_tech(int* radioTech)
1133{
1134 int ret = -1;
1135 if(NULL == radioTech)
1136 return ret;
1137 int send_num = 0;
1138 int recv_num = 0;
1139 int num = 0;
1140 char res_data[LYNQ_REC_BUF] = {0};
1141 lynq_client_t client_t;
1142 memset(&client_t,0,sizeof(client_t));
1143 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1144 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001145 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001146 memset(client_t.param,0,sizeof(client_t.param));
1147
rjw415439a2022-03-02 15:23:11 +08001148 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001149 if(send_num<0)
1150 {
1151 LYERRLOG("sendto error:");
1152 return ret;
1153 }
1154
rjw415439a2022-03-02 15:23:11 +08001155 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001156 if(recv_num == 0 ||recv_num <0)
1157 {
1158 LYERRLOG("recvfrom error");
1159 return -1;
1160 }
1161 Parcel p;
1162 p.setData((uint8_t *)res_data,sizeof(res_data));
1163 p.setDataPosition(0);
1164
1165 if(p.dataAvail() > 0)
1166 {
1167 p.readInt32(&response.resp_type);
1168 p.readInt32(&response.request);
1169 p.readInt32(&response.slot_id);
1170 p.readInt32(&response.error);
1171 if(response.error != 0)
1172 {
1173 LYERRLOG("response return error");
1174 return response.error;
1175 }
1176 p.readInt32(&num);
1177 p.readInt32(radioTech);
1178 }
1179 return response.error;
1180}
1181
1182int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1183{
1184 int ret = -1;
1185 if(NULL == solSigStren)
1186 return ret;
1187 int send_num = 0;
1188 int recv_num = 0;
1189 int sum = 0;
1190 int LTE_signalstrength = 0;
1191 int WCDMA_signalstrength = 0;
1192 int none = 0;
1193
1194 char res_data[LYNQ_REC_BUF] = {0};
1195 lynq_client_t client_t;
1196 memset(&client_t,0,sizeof(client_t));
1197 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1198 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001199 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001200 memset(client_t.param,0,sizeof(client_t.param));
1201
rjw415439a2022-03-02 15:23:11 +08001202 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001203 if(send_num<0)
1204 {
1205 LYERRLOG("sendto error:");
1206 return ret;
1207 }
1208
1209 //get data
rjw415439a2022-03-02 15:23:11 +08001210 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001211 if(recv_num == 0 ||recv_num <0)
1212 {
1213 LYERRLOG("recvfrom error");
1214 return -1;
1215 }
1216 Parcel p;
1217 p.setData((uint8_t *)res_data,sizeof(res_data));
1218 p.setDataPosition(0);
1219
1220 if(p.dataAvail() > 0)
1221 {
1222 p.readInt32(&response.resp_type);
1223 p.readInt32(&response.request);
1224 p.readInt32(&response.slot_id);
1225 p.readInt32(&response.error);
1226 if(response.error != 0)
1227 {
1228 LYERRLOG("response return error");
1229 return response.error;
1230 }
1231
1232 p.readInt32(&solSigStren->rssi);
1233 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1234 {
1235 solSigStren->gw_sig_valid = 1;
1236 }else{
1237 solSigStren->gw_sig_valid = 0;
1238 }
1239
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(&none);
1247 p.readInt32(&LTE_signalstrength);
1248 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1249 p.readInt32(&solSigStren->rsrp);
1250 p.readInt32(&solSigStren->rsrq);
1251 p.readInt32(&solSigStren->rssnr);
1252 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1253 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1254 {
1255 solSigStren->lte_sig_valid = 1;
1256 }else{
1257 solSigStren->lte_sig_valid = 0;
1258 }
1259
1260 p.readInt32(&none);
1261 p.readInt32(&none);
1262 p.readInt32(&none);
1263 p.readInt32(&none);
1264 p.readInt32(&none);
1265 p.readInt32(&WCDMA_signalstrength);
1266 p.readInt32(&none);
1267 p.readInt32(&solSigStren->rscp);
1268 p.readInt32(&solSigStren->ecno);
1269 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1270 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1271 {
rjw479d38b2022-01-22 14:10:42 +08001272 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001273 }else{
rjw479d38b2022-01-22 14:10:42 +08001274 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001275 }
rjw479d38b2022-01-22 14:10:42 +08001276 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001277 p.readInt32(&solSigStren->ssRsrp);
1278 p.readInt32(&solSigStren->ssRsrq);
1279 p.readInt32(&solSigStren->ssSinr);
1280 p.readInt32(&solSigStren->csiRsrp);
1281 p.readInt32(&solSigStren->csiRsrq);
1282 p.readInt32(&solSigStren->csiSinr);
1283 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1284 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1285 if(sum != 0)
1286 {
1287 solSigStren->nr_sig_valid = 1;
1288 }else{
1289 LYERRLOG("None of NR signal info");
1290 }
1291 }
1292 return response.error;
1293}
rjw415439a2022-03-02 15:23:11 +08001294
rjwc3e81b82022-03-10 11:04:24 +08001295int lynq_set_ims(const int ims_mode)
1296{
1297 int ret = -1;
1298 if (ims_mode < 0 || ims_mode > 1)
1299 {
1300 LYERRLOG("incoming ims_mode error");
1301 return ret;
1302 }
1303 int send_num = 0;
1304 char res_data[LYNQ_REC_BUF] = {0};
1305 int recv_num = 0;
1306 lynq_client_t client_t;
1307
1308 memset(&client_t,0,sizeof(client_t));
1309 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1310 client_t.paramLen = 1;
1311 client_t.uToken = network_Global_uToken;
1312 sprintf(client_t.param,"%d",ims_mode);
1313
1314 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1315 if (send_num<0)
1316 {
1317 LYERRLOG("sendto error:");
1318 return ret;
1319 }
1320
1321 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
1322 if (recv_num == 0 || recv_num < 0)
1323 {
1324 LYERRLOG("recvfrom error");
1325 return -1;
1326 }
1327
1328 Parcel p;
1329 p.setData((uint8_t *)res_data,sizeof(res_data));
1330 p.setDataPosition(0);
1331 if (p.dataAvail() > 0)
1332 {
1333 p.readInt32(&response.resp_type);
1334 p.readInt32(&response.request);
1335 p.readInt32(&response.slot_id);
1336 p.readInt32(&response.error);
1337 }
1338
1339 return response.error;
1340}
1341
1342
rjw415439a2022-03-02 15:23:11 +08001343/*Used to wait for an update signal*/
1344int lynq_wait_signalchanges(int *handle)
1345{
1346 LYDBGLOG("start wait signalchanges info");
1347 if(NULL == handle)
1348 {
1349 LYERRLOG("illegal input");
1350 return -1;
1351 }
1352 wait_signal_changes();
1353 LYDBGLOG("get signalchanges");
1354 *handle = network_wait_urc_id;
1355 return 0;
1356}
1357/*Used to get urc info*/
1358int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1359{
1360 LYDBGLOG("start get urc info");
1361 if(handle != 1002&&handle != 1009)
1362 {
1363 LYINFLOG("invalid handle!!!");
1364 return -1;
1365 }
1366 if(NULL == solSigStren && NULL == slot_id)
1367 {
1368 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1369 return -1;
1370 }
1371 switch(handle)
1372 {
1373 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1374 {
1375 LYDBGLOG("get state update to VOICE");
1376 *slot_id = network_urc_slot_id;
1377 LYINFLOG("slot_id = %d",network_urc_slot_id);
1378 }
1379 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1380 {
1381 LYDBGLOG("get state update to signal info");
1382 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1383 solSigStren->rssi = network_urc_solSigStren.rssi;
1384 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1385 solSigStren->rscp = network_urc_solSigStren.rscp;
1386 solSigStren->ecno = network_urc_solSigStren.ecno;
1387 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1388 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1389 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1390 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1391 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1392 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1393 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1394 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1395 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1396 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1397 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1398 }
1399 }
1400 return 0;
1401}