blob: e78facebf64a618737a3887748697c762c091d18 [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;
rjw267d8ee2022-03-15 09:21:29 +080059/**g_lynq_network_init_flag
60* @brief mark network initialization state
61* 0:deinit status
62* 1:init state
63*/
64static int g_lynq_network_init_flag = 0;
rjw2183a5f2022-01-18 18:30:37 +080065
rjw415439a2022-03-02 15:23:11 +080066static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
67static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw2183a5f2022-01-18 18:30:37 +080068
69typedef enum{
70 LYNQ_E_CARDSTATE_ERROR=8000,
71 /* The voice service state is out of service*/
72 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
73 /* The voice service state is EMERGENCY_ONLY*/
74 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
75 /* The radio power is power off*/
76 LYNQ_E_STATE_POWER_OFF=8003,
77 LYNQ_E_TIME_OUT=8004,
78 /*create or open sms DB fail */
79 LYNQ_E_SMS_DB_FAIL=8005,
80 /*Failed to execute sql statement*/
81 LYNQ_E_SMS_SQL_FAIL = 8006,
82 LYNQ_E_SMS_NOT_FIND = 8007,
83 /* The logic conflict*/
84 LYNQ_E_CONFLICT=9000,
85 /*Null anomaly*/
86 LYNQ_E_NULL_ANONALY=9001
87}LYNQ_E;
88
rjw415439a2022-03-02 15:23:11 +080089int wait_signal_changes()
90{
91 int ret = 0;
92 pthread_mutex_lock(&signal_state_change_mutex);
93 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
94 pthread_mutex_unlock(&signal_state_change_mutex);
95 return 0;
96}
97
98void send_signal_changes()
99{
100 pthread_mutex_lock(&signal_state_change_mutex);
101 pthread_cond_signal(&signal_state_change_cond);
102 pthread_mutex_unlock(&signal_state_change_mutex);
103 return;
104}
105
rjw2183a5f2022-01-18 18:30:37 +0800106void *thread_urc_recv(void *p)
107{
108 Parcel *urc_p =NULL;
109 char urc_data[LYNQ_REC_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800110 int resp_type = -1;
111 int urc_id = -1;
112 int res = 0;
113 int none = 0;
114 int NR_sum = 0;
rjw2183a5f2022-01-18 18:30:37 +0800115 int urc_LTE_signalstrength = 0;
116 int urc_WCDMA_signalstrength = 0;
rjw2183a5f2022-01-18 18:30:37 +0800117 LYINFLOG("urc thread is running");
rjw415439a2022-03-02 15:23:11 +0800118 while(network_urc_status)
rjw2183a5f2022-01-18 18:30:37 +0800119 {
120 bzero(urc_data,LYNQ_REC_BUF);
rjw415439a2022-03-02 15:23:11 +0800121 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 +0800122 if(res<=0)
123 {
124 LYERRLOG("thread_urc_recv step2 fail:");
125 break;
126 }
127 urc_p = new Parcel();
128 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
129 urc_p->setDataPosition(0);
130 if(urc_p->dataAvail()>0)
131 {
132 urc_p->readInt32(&resp_type);
133 urc_p->readInt32(&urc_id);
rjw415439a2022-03-02 15:23:11 +0800134 urc_p->readInt32(&network_urc_slot_id);
rjw2183a5f2022-01-18 18:30:37 +0800135 switch(urc_id)
136 {
137 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
138 {
rjw415439a2022-03-02 15:23:11 +0800139 network_wait_urc_id = urc_id;
140 LYINFLOG("slot_id = %d",network_urc_slot_id);
141 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800142 }
143 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
144 {
rjw415439a2022-03-02 15:23:11 +0800145 urc_p->readInt32(&network_urc_solSigStren.rssi);
146 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw2183a5f2022-01-18 18:30:37 +0800147 {
rjw415439a2022-03-02 15:23:11 +0800148 network_urc_solSigStren.gw_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800149 }else{
rjw415439a2022-03-02 15:23:11 +0800150 network_urc_solSigStren.gw_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800151 }
rjw415439a2022-03-02 15:23:11 +0800152 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800153 {
rjw415439a2022-03-02 15:23:11 +0800154 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw7610e272022-02-24 13:37:11 +0800155 }
rjw2183a5f2022-01-18 18:30:37 +0800156 urc_p->readInt32(&none);
157 urc_p->readInt32(&none);
158 urc_p->readInt32(&none);
159 urc_p->readInt32(&none);
160 urc_p->readInt32(&none);
161 urc_p->readInt32(&none);
162 urc_p->readInt32(&none);
163 urc_p->readInt32(&urc_LTE_signalstrength);
164 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjw415439a2022-03-02 15:23:11 +0800165 urc_p->readInt32(&network_urc_solSigStren.rsrp);
166 urc_p->readInt32(&network_urc_solSigStren.rsrq);
167 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800168 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
169 {
rjw415439a2022-03-02 15:23:11 +0800170 network_urc_solSigStren.lte_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800171 }else{
rjw415439a2022-03-02 15:23:11 +0800172 network_urc_solSigStren.lte_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800173 }
rjw415439a2022-03-02 15:23:11 +0800174 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800175 {
176 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
177 }
rjw2183a5f2022-01-18 18:30:37 +0800178 urc_p->readInt32(&none);
179 urc_p->readInt32(&none);
180 urc_p->readInt32(&none);
181 urc_p->readInt32(&none);
182 urc_p->readInt32(&none);
183 urc_p->readInt32(&urc_WCDMA_signalstrength);
184 urc_p->readInt32(&none);
rjw415439a2022-03-02 15:23:11 +0800185 urc_p->readInt32(&network_urc_solSigStren.rscp);
186 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800187 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
188 {
rjw415439a2022-03-02 15:23:11 +0800189 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800190 }else{
rjw415439a2022-03-02 15:23:11 +0800191 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800192 }
rjw415439a2022-03-02 15:23:11 +0800193 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800194 {
195 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800196 }
rjw415439a2022-03-02 15:23:11 +0800197 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
198 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
199 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
200 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
201 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
202 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
203 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
204 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800205 if(NR_sum != 0)
206 {
rjw415439a2022-03-02 15:23:11 +0800207 network_urc_solSigStren.nr_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800208 }else{
rjw415439a2022-03-02 15:23:11 +0800209 network_urc_solSigStren.nr_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800210 }
rjw415439a2022-03-02 15:23:11 +0800211 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800212 {
213 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 +0800214 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
215 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800216 }
rjw415439a2022-03-02 15:23:11 +0800217 network_wait_urc_id = urc_id;
218 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800219 }
220 }
221 }
222 }
223}
224
225
226int lynq_server_socket_start()
227{
rjw415439a2022-03-02 15:23:11 +0800228 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
229 if(-1 == network_sock_fd)
rjw2183a5f2022-01-18 18:30:37 +0800230 {
231 LYERRLOG("socket open error");
232 return -1;
233 }
rjw415439a2022-03-02 15:23:11 +0800234 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800235
rjw415439a2022-03-02 15:23:11 +0800236 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
237 network_addr_serv.sin_family = AF_INET;
238 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
239 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
240 network_len_addr_serv = sizeof(network_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800241 return 0;
242}
243
244int lynq_urc_socket_start()
245{
246 pthread_t tid;
247 pthread_attr_t attr;
248 int on = 1;
rjw415439a2022-03-02 15:23:11 +0800249 network_urc_sock_fd = -1;
rjw2183a5f2022-01-18 18:30:37 +0800250 int ret = 0;
rjw415439a2022-03-02 15:23:11 +0800251 network_len_urc_addr_serv = sizeof(sockaddr_in);
252 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
253 if (network_urc_sock_fd <0){
rjw2183a5f2022-01-18 18:30:37 +0800254 LYERRLOG("urc socket error");
255 ret = -1;
256 }
rjw415439a2022-03-02 15:23:11 +0800257 network_urc_addr_serv.sin_family = AF_INET;
258 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
259 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw2183a5f2022-01-18 18:30:37 +0800260 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjw415439a2022-03-02 15:23:11 +0800261 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw2183a5f2022-01-18 18:30:37 +0800262 if(ret <0)
263 {
264 LYERRLOG("urc socket set error");
265 return -1;
266 }
rjw415439a2022-03-02 15:23:11 +0800267 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw2183a5f2022-01-18 18:30:37 +0800268 if(ret <0)
269 {
270 LYERRLOG("urc socket bind error");
271 return -1;
272 }
273 pthread_attr_init(&attr);
274 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjw415439a2022-03-02 15:23:11 +0800275 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800276 if(ret <0)
277 {
278 LYERRLOG("urc pthread create error");
279 return -1;
280 }
281 LYINFLOG("urc start success");
282 return 0;
283}
284
285int lynq_network_init(int utoken){
rjw267d8ee2022-03-15 09:21:29 +0800286 if(g_lynq_network_init_flag == 1)
287 {
288 LYERRLOG("init twice is not allowed");
289 return -1;
290 }
291 g_lynq_network_init_flag = 1;
rjw2183a5f2022-01-18 18:30:37 +0800292 if(utoken <0){
293 LYERRLOG("init err");
294 return -1;
295 }
rjw415439a2022-03-02 15:23:11 +0800296 network_urc_status = 1;
297 network_Global_uToken = utoken;
rjw2183a5f2022-01-18 18:30:37 +0800298 LYLOGSET(LOG_INFO);
299 LYLOGEINIT(USER_LOG_TAG);
300 int ret = 0;
301
302 ret = lynq_server_socket_start();
303 if(ret !=0)
304 {
305 LYERRLOG("init socket client fail!!!");
306 return -1;
307 }
308 ret = lynq_urc_socket_start();
309 if(ret != 0)
310 {
311 LYERRLOG("init socket urc fail!!!");
312 return -1;
313 }
314 return 0;
315}
316
317int strUpper(char * str)
318{
319 int i=0;
320 while(1)
321 {
322 if(str[i]=='\0')
323 {
324 break;
325 }
326 if(str[i]>='a'&&str[i]<='z')
327 {
328 str[i]=str[i]-32;
329 }
330 i++;
331 }
332 return 0;
333}
334
335int copyCellInfoList(Parcel &p,int *cellinfo)
336{
337 int32_t v=0;
338 int64_t v6=0;
339 if(NULL == cellinfo)
340 {
341 LYERRLOG("*cellinfo error");
342 }
343
344 int nothing = 0;
345 p.readInt32(&v);
346 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
347 p.readInt32(&nothing);
348 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
349 // p.readInt32(&cellinfo->cellinfo.registered);
350 p.readInt32(&v);
351 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
352 p.readInt64(&v6);
353 // cellinfo->cellinfo.timeStamp = v6;
354 switch(cellinfoType) {
355 case RIL_CELL_INFO_TYPE_GSM: {
356 p.readInt32(&nothing);
357 p.readInt32(&nothing);
358 p.readInt32(&nothing);
359 p.readInt32(cellinfo);
360 p.readInt32(&nothing);
361 p.readInt32(&nothing);
362 p.readInt32(&nothing);
363 break;
364 }
365 case RIL_CELL_INFO_TYPE_WCDMA: {
366 p.readInt32(&nothing);
367 p.readInt32(&nothing);
368 p.readInt32(&nothing);
369 p.readInt32(cellinfo);
370 p.readInt32(&nothing);
371 p.readInt32(&nothing);
372 p.readInt32(&nothing);
373 break;
374 }
375 case RIL_CELL_INFO_TYPE_CDMA: {
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 p.readInt32(&nothing);
379 p.readInt32(&nothing);
380 p.readInt32(&nothing);
381 p.readInt32(&nothing);
382 p.readInt32(&nothing);
383 p.readInt32(&nothing);
384 p.readInt32(&nothing);
385 p.readInt32(&nothing);
386 cellinfo = 0;
387
388 break;
389 }
390 case RIL_CELL_INFO_TYPE_LTE: {
391 p.readInt32(&nothing);
392 p.readInt32(&nothing);
393 p.readInt32(cellinfo);
394 p.readInt32(&nothing);
395 p.readInt32(&nothing);
396 p.readInt32(&nothing);
397 p.readInt32(&nothing);
398 p.readInt32(&nothing);
399 p.readInt32(&nothing);
400 p.readInt32(&nothing);
401 p.readInt32(&nothing);
402 break;
403 }
404 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
405 p.readInt32(&nothing);
406 p.readInt32(&nothing);
407 p.readInt32(&nothing);
408 p.readInt32(cellinfo);
409 p.readInt32(&nothing);
410 p.readInt32(&nothing);
411 break;
412 }
413 case RIL_CELL_INFO_TYPE_NR: {
414 p.readInt32(&nothing);
415 p.readInt32(&nothing);
416 p.readInt32(cellinfo);
417 p.readInt32(&nothing);
418 p.readInt32(&nothing);
419 p.readInt32(&nothing);
420 p.readInt32(&nothing);
421 p.readInt32(&nothing);
422 p.readInt32(&nothing);
423 p.readInt32(&nothing);
424 p.readInt32(&nothing);
425 p.readInt32(&nothing);
426 break;
427 }
428 }
429 LYINFLOG("CID in fUNC :%d",*cellinfo);
430 return 0;
431}
432
433int lynq_network_deinit(void){
rjw267d8ee2022-03-15 09:21:29 +0800434 if (g_lynq_network_init_flag == 0)
435 {
436 LYERRLOG("deinit twice is not allowed");
437 return -1;
438 }
439 if (network_sock_fd > 0)
440 {
441 close(network_sock_fd);
442 }
443 g_lynq_network_init_flag = 0;
rjw415439a2022-03-02 15:23:11 +0800444 network_urc_status = 0;
rjw2183a5f2022-01-18 18:30:37 +0800445 return 0;
446}
447
448static char * lynqStrdupReadString(Parcel &p) {
449 size_t stringlen;
450 const char16_t *s16;
451
452 s16 = p.readString16Inplace(&stringlen);
453 return strndup16to8(s16, stringlen);
454}
455
456int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
457{
458 int ret = -1;
459 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
460 return ret;
461 int send_num = 0;
462 int recv_num = 0;
463 int num = 0;
464 lynq_client_t client_t;
465 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800466 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800467 memset(&client_t,0,sizeof(client_t));
468 client_t.request = RIL_REQUEST_OPERATOR;
469 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800470 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800471 memset(client_t.param,0,sizeof(client_t.param));
472
rjw415439a2022-03-02 15:23:11 +0800473 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 +0800474 if(send_num<0)
475 {
476 LYERRLOG("sendto error:");
477 return ret;
478 }
479
480 //get data
rjw415439a2022-03-02 15:23:11 +0800481 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 +0800482 if(recv_num == 0 ||recv_num <0)
483 {
484 LYERRLOG("recvfrom error");
485 return -1;
486 }
487 Parcel p;
488 p.setData((uint8_t *)res_data,sizeof(res_data));
489 p.setDataPosition(0);
490 if(p.dataAvail() > 0)
491 {
492 p.readInt32(&response.resp_type);
493 p.readInt32(&response.request);
494 p.readInt32(&response.slot_id);
495 p.readInt32(&response.error);
496 if(response.error != 0)
497 {
498 LYERRLOG("response return error");
499 return response.error;
500 }
501 p.readInt32(&num);
502 if(num == 0)
503 {
504 LYERRLOG("no paramters");
505 }else{
506 for(int i = 0; i<num;i++)
507 {
508 resp[i] = lynqStrdupReadString(p);
509 }
510 if(NULL != resp[0])
511 {
rjwaae473f2022-01-25 14:57:53 +0800512 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800513 }
514 if(NULL != resp[1])
515 {
rjwaae473f2022-01-25 14:57:53 +0800516 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800517 }
518 if(NULL != resp[2])
519 {
rjwaae473f2022-01-25 14:57:53 +0800520 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800521 }
522 }
523 }
524 return response.error;
525}
526
527int lynq_query_network_selection_mode(int *netselMode)
528{
529 int ret = -1;
530 if(NULL == netselMode)
531 return ret;
532 int send_num = 0;
533 int recv_num = 0;
534 int readnum = 0;
535 lynq_client_t client_t;
536 char res_data[LYNQ_REC_BUF] = {0};
537 memset(&client_t,0,sizeof(client_t));
538 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
539 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800540 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800541
542 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800543 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 +0800544 if(send_num<0)
545 {
546 LYERRLOG("sendto error:");
547 return -1;
548 }
549
550 //get data
rjw415439a2022-03-02 15:23:11 +0800551 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 +0800552 if(recv_num == 0 ||recv_num <0)
553 {
554 LYERRLOG("recvfrom error");
555 return -1;
556 }
557 Parcel p;
558 p.setData((uint8_t *)res_data,sizeof(res_data));
559 p.setDataPosition(0);
560 if(p.dataAvail() > 0)
561 {
562 p.readInt32(&response.resp_type);
563 p.readInt32(&response.request);
564 p.readInt32(&response.slot_id);
565 p.readInt32(&response.error);
566 if(response.error != 0)
567 {
568 LYERRLOG("response return error");
569 return response.error;
570 }
571 p.readInt32(&readnum);
572 p.readInt32(netselMode);
573 }
574 return response.error;
575}
576
577int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
578{
579 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800580 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800581 return ret;
rjw7610e272022-02-24 13:37:11 +0800582 if(strlen(mode) == 0)
583 {
584 return ret;
585 }
rjw2183a5f2022-01-18 18:30:37 +0800586 int send_num = 0;
587 lynq_client_t client_t;
588 int recv_num = 0;
589 char res_data[LYNQ_REC_BUF] = {0};
590 memset(&client_t,0,sizeof(client_t));
591 if(!strcmp(mode,"Auto"))
592 {
593 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
594 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800595 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800596 memset(client_t.param,0,sizeof(client_t.param));
597 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800598 if(mccmnc == NULL)
599 {
600 LYERRLOG("mccmnc is NULL!!!");
601 return ret;
602 }
603 if(strlen(mccmnc) == 0)
604 {
605 LYERRLOG("mccmnc strlen is 0!!!");
606 return ret;
607 }
rjw2183a5f2022-01-18 18:30:37 +0800608 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
609 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800610 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800611 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800612 }else{
613 LYERRLOG("request error");
614 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800615 }
616
617
rjw415439a2022-03-02 15:23:11 +0800618 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 +0800619 if(send_num<0)
620 {
621 LYERRLOG("sendto error:");
622 return ret;
623 }
624
rjw415439a2022-03-02 15:23:11 +0800625 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 +0800626 if(recv_num == 0 ||recv_num <0)
627 {
628 LYERRLOG("recvfrom error");
629 return -1;
630 }
631
632 Parcel p;
633 p.setData((uint8_t *)res_data,sizeof(res_data));
634 p.setDataPosition(0);
635 if(p.dataAvail() > 0)
636 {
637 p.readInt32(&response.resp_type);
638 p.readInt32(&response.request);
639 p.readInt32(&response.slot_id);
640 p.readInt32(&response.error);
641 }
642 return response.error;
643}
644
645int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
646{
647 int ret = -1;
648 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
649 return ret;
650 int send_num = 0;
651 int recv_num = 0;
652 char res_data[LYNQ_REC_BUF] = {0};
653 char *resp[128];
654 lynq_client_t client_t;
655 memset(&client_t,0,sizeof(client_t));
656 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
657 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800658 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800659 memset(client_t.param,0,sizeof(client_t.param));
660
rjw415439a2022-03-02 15:23:11 +0800661 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 +0800662 if(send_num<0)
663 {
664 LYERRLOG("sendto error:");
665 return ret;
666 }
667
668 //get data
rjw415439a2022-03-02 15:23:11 +0800669 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 +0800670 if(recv_num == 0 ||recv_num <0)
671 {
672 LYERRLOG("recvfrom error");
673 return -1;
674 }
675 Parcel p;
676 p.setData((uint8_t *)res_data,sizeof(res_data));
677 p.setDataPosition(0);
678 if(p.dataAvail() > 0)
679 {
680 p.readInt32(&response.resp_type);
681 p.readInt32(&response.request);
682 p.readInt32(&response.slot_id);
683 p.readInt32(&response.error);
684 if(response.error != 0)
685 {
686 LYERRLOG("response return error");
687 return response.error;
688 }
689 int num =p.readInt32();
690 if(num == 0)
691 {
692 LYERRLOG("no paramters");
693 }else{
694 for(int i = 0; i<num;i++)
695 {
696 resp[i] = lynqStrdupReadString(p);
697 }
698 if(NULL != resp[0])
699 {
rjwaae473f2022-01-25 14:57:53 +0800700 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800701 }
702 if(NULL != resp[1])
703 {
rjwaae473f2022-01-25 14:57:53 +0800704 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800705 }
706 if(NULL != resp[2])
707 {
rjwaae473f2022-01-25 14:57:53 +0800708 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800709 }
710 if(NULL != resp[3])
711 {
rjwaae473f2022-01-25 14:57:53 +0800712 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800713 }
714 }
715 }
716 return response.error;
717}
718
rjwb83f56b2022-04-01 15:00:26 +0800719int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)
rjw2183a5f2022-01-18 18:30:37 +0800720{
721 int ret = -1;
722 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam)
723 return ret;
724 int send_num = 0;
725 int recv_num = 0;
726 int num = 0;
727 char str[LYNQ_TYPE_BUF];
728 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800729 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800730 lynq_client_t client_t;
731 memset(&client_t,0,sizeof(client_t));
732 if(strlen(type)>LYNQ_TYPE_BUF)
733 {
734 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
735 }
736 memcpy(str,type,strlen(type)+1);
737 strUpper(str);
738 if(!strcmp(str,"VOICE"))
739 {
740 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
741 }else if(!strcmp(str,"DATA")){
742 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
743 }else if(!strcmp(str,"IMS")){
744 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
745 }else{
746 LYERRLOG("request error");
747 return ret;
748 }
749 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800750 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800751 memset(client_t.param,0,sizeof(client_t.param));
752
rjw415439a2022-03-02 15:23:11 +0800753 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 +0800754 if(send_num<0)
755 {
756 LYERRLOG("sendto error:");
757 return ret;
758 }
759
760 //get data
rjw415439a2022-03-02 15:23:11 +0800761 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 +0800762 if(recv_num == 0 ||recv_num <0)
763 {
764 LYERRLOG("recvfrom error");
765 return -1;
766 }
767 Parcel p;
768 p.setData((uint8_t *)res_data,sizeof(res_data));
769 p.setDataPosition(0);
770 if(p.dataAvail() > 0)
771 {
772 p.readInt32(&response.resp_type);
773 p.readInt32(&response.request);
774 p.readInt32(&response.slot_id);
775 p.readInt32(&response.error);
776 if(response.error != 0)
777 {
778 LYERRLOG("response return error");
779 return response.error;
780 }
781 if(!strcmp(str,"VOICE"))
782 {
783 p.readInt32(&num);
784 if(num == 15)
785 {
786 *regState = atoi(lynqStrdupReadString(p));
787 lynqStrdupReadString(p);
788 lynqStrdupReadString(p);
789 *netType = atoi(lynqStrdupReadString(p));
rjwb83f56b2022-04-01 15:00:26 +0800790 lynqStrdupReadString(p);
791 lynqStrdupReadString(p);
792 lynqStrdupReadString(p);
793 lynqStrdupReadString(p);
794 lynqStrdupReadString(p);
795 lynqStrdupReadString(p);
796 lynqStrdupReadString(p);
797 lynqStrdupReadString(p);
798 lynqStrdupReadString(p);
799 lynqStrdupReadString(p);
800 *netRejected = atoi(lynqStrdupReadString(p));
rjw2183a5f2022-01-18 18:30:37 +0800801 }
802 }else if(!strcmp(str,"DATA")){
803 p.readInt32(&num);
804 if(num == 11)
805 {
806 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800807 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800808 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800809
810 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800811 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800812 *netType = atoi(lynqStrdupReadString(p));
813 }
814
815 }else if(!strcmp(str,"IMS")){
816 p.readInt32(&num);
817 if(num == 2)
818 {
819 p.readInt32(imsRegState);
820 p.readInt32(radioTechFam);
821 }
822 }else{
823 LYERRLOG("request error");
824 return ret;
825 }
826 }
827 return response.error;
828}
829
830int lynq_query_prefferred_networktype(int *preNetType)
831{
832 int ret = -1;
833 int send_num = 0;
834 int recv_num = 0;
835 int num = 0;
836 char res_data[LYNQ_REC_BUF] = {0};
837 lynq_client_t client_t;
838 memset(&client_t,0,sizeof(client_t));
839 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
840 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800841 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800842 memset(client_t.param,0,sizeof(client_t.param));
843
rjw415439a2022-03-02 15:23:11 +0800844 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 +0800845 if(send_num<0)
846 {
847 LYERRLOG("sendto error:");
848 return ret;
849 }
850
851 //get data
rjw415439a2022-03-02 15:23:11 +0800852 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 +0800853 if(recv_num == 0 ||recv_num <0)
854 {
855 LYERRLOG("recvfrom error");
856 return -1;
857 }
858 Parcel p;
859 p.setData((uint8_t *)res_data,sizeof(res_data));
860 p.setDataPosition(0);
861 if(p.dataAvail() > 0)
862 {
863 p.readInt32(&response.resp_type);
864 p.readInt32(&response.request);
865 p.readInt32(&response.slot_id);
866 p.readInt32(&response.error);
867 if(response.error != 0)
868 {
869 LYERRLOG("response return error");
870 return response.error;
871 }
872 p.readInt32(&num);
873 p.readInt32(preNetType);
874 }
875 return response.error;
876}
877
878int lynq_set_prefferred_networktype(const int preffertype)
879{
880 int ret = -1;
881 if(preffertype < 0||preffertype >33)
882 return ret;
883 int send_num = 0;
884 lynq_client_t client_t;
885 int recv_num = 0;
886 char res_data[LYNQ_REC_BUF] = {0};
887 memset(&client_t,0,sizeof(client_t));
888 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
889 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800890 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800891 sprintf(client_t.param,"%d",preffertype);
rjw415439a2022-03-02 15:23:11 +0800892 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 +0800893 if(send_num<0)
894 {
895 LYERRLOG("sendto error:");
896 return ret;
897 }
898
rjw415439a2022-03-02 15:23:11 +0800899 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 +0800900 if(recv_num == 0 ||recv_num <0)
901 {
902 LYERRLOG("recvfrom error");
903 return -1;
904 }
905
906 Parcel p;
907 p.setData((uint8_t *)res_data,sizeof(res_data));
908 p.setDataPosition(0);
909 if(p.dataAvail() > 0)
910 {
911 p.readInt32(&response.resp_type);
912 p.readInt32(&response.request);
913 p.readInt32(&response.slot_id);
914 p.readInt32(&response.error);
915 }
916
917 return response.error;
918
919}
920
921int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int * realNum)
922{
923 int ret = -1;
924 if(NULL == realNum)
925 return ret;
926 int send_num = 0;
927 int recv_num = 0;
928 int num = 0;
929 char res_data[LYNQ_REC_BUF] = {0};
930 lynq_client_t client_t;
931 memset(&client_t,0,sizeof(client_t));
932 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
933 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800934 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800935 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +0800936 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 +0800937 if(send_num<0)
938 {
939 LYERRLOG("sendto error:");
940 return ret;
941 }
942
943 //get data
rjw415439a2022-03-02 15:23:11 +0800944 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 +0800945 if(recv_num == 0 ||recv_num <0)
946 {
947 LYERRLOG("recvfrom error");
948 return -1;
949 }
950 Parcel p;
951 p.setData((uint8_t *)res_data,sizeof(res_data));
952 p.setDataPosition(0);
953 if(p.dataAvail() > 0)
954 {
955 p.readInt32(&response.resp_type);
956 p.readInt32(&response.request);
957 p.readInt32(&response.slot_id);
958 p.readInt32(&response.error);
959 if(response.error != 0)
960 {
961 LYERRLOG("response return error");
962 return response.error;
963 }
964 p.readInt32(&num);
965 LYINFLOG("cell info num:%d",num);
966 *realNum = num;
967 for(int i = 0;i<num;i++)
968 {
969 copyCellInfoList(p,&cellinfo[i]);
970 }
971 }
972 return response.error;
973
974}
975
976int lynq_set_unsol_cell_info_listrate(const int rate)
977{
978 int ret = -1;
979 int send_num = 0;
980 int recv_num = 0;
981 char res_data[LYNQ_REC_BUF] = {0};
982 lynq_client_t client_t;
983 memset(&client_t,0,sizeof(client_t));
984 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
985 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800986 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800987 sprintf(client_t.param,"%d",rate);
988
rjw415439a2022-03-02 15:23:11 +0800989 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 +0800990 if(send_num<0)
991 {
992 LYERRLOG("sendto error:");
993 return ret;
994 }
995
rjw415439a2022-03-02 15:23:11 +0800996 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 +0800997 if(recv_num == 0 ||recv_num <0)
998 {
999 LYERRLOG("recvfrom error");
1000 return -1;
1001 }
1002
1003 Parcel p;
1004 p.setData((uint8_t *)res_data,sizeof(res_data));
1005 p.setDataPosition(0);
1006 if(p.dataAvail() > 0)
1007 {
1008 p.readInt32(&response.resp_type);
1009 p.readInt32(&response.request);
1010 p.readInt32(&response.slot_id);
1011 p.readInt32(&response.error);
1012 }
1013
1014 return response.error;
1015}
1016
1017int lynq_set_band_mode(const int bandmode)
1018{
1019 int ret = -1;
1020 int send_num = 0;
1021 int recv_num = 0;
1022 char res_data[LYNQ_REC_BUF] = {0};
1023 lynq_client_t client_t;
1024 memset(&client_t,0,sizeof(client_t));
1025 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1026 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001027 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001028 sprintf(client_t.param,"%d",bandmode);
1029
rjw415439a2022-03-02 15:23:11 +08001030 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 +08001031 if(send_num<0)
1032 {
1033 LYERRLOG("sendto error:");
1034 return ret;
1035 }
1036
rjw415439a2022-03-02 15:23:11 +08001037 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 +08001038 if(recv_num == 0 ||recv_num <0)
1039 {
1040 LYERRLOG("recvfrom error");
1041 return -1;
1042 }
1043
1044 Parcel p;
1045 p.setData((uint8_t *)res_data,sizeof(res_data));
1046 p.setDataPosition(0);
1047 if(p.dataAvail() > 0)
1048 {
1049 p.readInt32(&response.resp_type);
1050 p.readInt32(&response.request);
1051 p.readInt32(&response.slot_id);
1052 p.readInt32(&response.error);
1053 }
1054
1055 return response.error;
1056}
1057
1058int lynq_query_available_bandmode(int availBanMode[])
1059{
1060 int ret = -1;
1061 if(NULL == availBanMode)
1062 return ret;
1063 int send_num = 0;
1064 int recv_num = 0;
1065 int num = 0;
1066 int res = 0;
1067 char res_data[LYNQ_REC_BUF] = {0};
1068 lynq_client_t client_t;
1069 memset(&client_t,0,sizeof(client_t));
1070 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1071 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001072 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001073 memset(client_t.param,0,sizeof(client_t.param));
rjw415439a2022-03-02 15:23:11 +08001074 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 +08001075 if(send_num<0)
1076 {
1077 LYERRLOG("sendto error:");
1078 return ret;
1079 }
1080
1081 //get data
rjw415439a2022-03-02 15:23:11 +08001082 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 +08001083 if(recv_num == 0 ||recv_num <0)
1084 {
1085 LYERRLOG("recvfrom error");
1086 return -1;
1087 }
rjw7610e272022-02-24 13:37:11 +08001088 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001089 {
1090 availBanMode[i]=0;
1091 }
1092 Parcel p;
1093 p.setData((uint8_t *)res_data,sizeof(res_data));
1094 p.setDataPosition(0);
1095
1096 if(p.dataAvail() > 0)
1097 {
1098 p.readInt32(&response.resp_type);
1099 p.readInt32(&response.request);
1100 p.readInt32(&response.slot_id);
1101 p.readInt32(&response.error);
1102 if(response.error != 0)
1103 {
1104 LYERRLOG("response return error");
1105 return response.error;
1106 }
1107 p.readInt32(&num);
1108 LYINFLOG("num = %d",num);
1109 availBanMode[0] = num;
1110 for(int i=1 ;i<=num;i++)
1111 {
1112 p.readInt32(&res);
1113 availBanMode[i]=res;
1114 }
1115 }
1116
1117 return response.error;
1118}
1119
1120int lynq_radio_on(const int data)
1121{
1122 int ret = -1;
1123 if(data < 0)
1124 return ret;
1125 int send_num = 0;
1126 char res_data[LYNQ_REC_BUF] = {0};
1127 int recv_num = 0;
1128 lynq_client_t client_t;
1129 memset(&client_t,0,sizeof(client_t));
1130 client_t.request = RIL_REQUEST_RADIO_POWER;
1131 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001132 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001133 sprintf(client_t.param,"%d",data);
1134
rjw415439a2022-03-02 15:23:11 +08001135 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 +08001136 if(send_num<0)
1137 {
1138 LYERRLOG("sendto error:");
1139 return ret;
1140 }
1141
rjw415439a2022-03-02 15:23:11 +08001142 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 +08001143 if(recv_num == 0 ||recv_num <0)
1144 {
1145 LYERRLOG("recvfrom error");
1146 return -1;
1147 }
1148
1149 Parcel p;
1150 p.setData((uint8_t *)res_data,sizeof(res_data));
1151 p.setDataPosition(0);
1152 if(p.dataAvail() > 0)
1153 {
1154 p.readInt32(&response.resp_type);
1155 p.readInt32(&response.request);
1156 p.readInt32(&response.slot_id);
1157 p.readInt32(&response.error);
1158 }
1159
1160 return response.error;
1161}
1162
1163int lynq_query_radio_tech(int* radioTech)
1164{
1165 int ret = -1;
1166 if(NULL == radioTech)
1167 return ret;
1168 int send_num = 0;
1169 int recv_num = 0;
1170 int num = 0;
1171 char res_data[LYNQ_REC_BUF] = {0};
1172 lynq_client_t client_t;
1173 memset(&client_t,0,sizeof(client_t));
1174 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1175 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001176 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001177 memset(client_t.param,0,sizeof(client_t.param));
1178
rjw415439a2022-03-02 15:23:11 +08001179 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 +08001180 if(send_num<0)
1181 {
1182 LYERRLOG("sendto error:");
1183 return ret;
1184 }
1185
rjw415439a2022-03-02 15:23:11 +08001186 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 +08001187 if(recv_num == 0 ||recv_num <0)
1188 {
1189 LYERRLOG("recvfrom error");
1190 return -1;
1191 }
1192 Parcel p;
1193 p.setData((uint8_t *)res_data,sizeof(res_data));
1194 p.setDataPosition(0);
1195
1196 if(p.dataAvail() > 0)
1197 {
1198 p.readInt32(&response.resp_type);
1199 p.readInt32(&response.request);
1200 p.readInt32(&response.slot_id);
1201 p.readInt32(&response.error);
1202 if(response.error != 0)
1203 {
1204 LYERRLOG("response return error");
1205 return response.error;
1206 }
1207 p.readInt32(&num);
1208 p.readInt32(radioTech);
1209 }
1210 return response.error;
1211}
1212
1213int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1214{
1215 int ret = -1;
1216 if(NULL == solSigStren)
1217 return ret;
1218 int send_num = 0;
1219 int recv_num = 0;
1220 int sum = 0;
1221 int LTE_signalstrength = 0;
1222 int WCDMA_signalstrength = 0;
1223 int none = 0;
1224
1225 char res_data[LYNQ_REC_BUF] = {0};
1226 lynq_client_t client_t;
1227 memset(&client_t,0,sizeof(client_t));
1228 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1229 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001230 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001231 memset(client_t.param,0,sizeof(client_t.param));
1232
rjw415439a2022-03-02 15:23:11 +08001233 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 +08001234 if(send_num<0)
1235 {
1236 LYERRLOG("sendto error:");
1237 return ret;
1238 }
1239
1240 //get data
rjw415439a2022-03-02 15:23:11 +08001241 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 +08001242 if(recv_num == 0 ||recv_num <0)
1243 {
1244 LYERRLOG("recvfrom error");
1245 return -1;
1246 }
1247 Parcel p;
1248 p.setData((uint8_t *)res_data,sizeof(res_data));
1249 p.setDataPosition(0);
1250
1251 if(p.dataAvail() > 0)
1252 {
1253 p.readInt32(&response.resp_type);
1254 p.readInt32(&response.request);
1255 p.readInt32(&response.slot_id);
1256 p.readInt32(&response.error);
1257 if(response.error != 0)
1258 {
1259 LYERRLOG("response return error");
1260 return response.error;
1261 }
1262
1263 p.readInt32(&solSigStren->rssi);
1264 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1265 {
1266 solSigStren->gw_sig_valid = 1;
1267 }else{
1268 solSigStren->gw_sig_valid = 0;
1269 }
1270
1271 p.readInt32(&none);
1272 p.readInt32(&none);
1273 p.readInt32(&none);
1274 p.readInt32(&none);
1275 p.readInt32(&none);
1276 p.readInt32(&none);
1277 p.readInt32(&none);
1278 p.readInt32(&LTE_signalstrength);
1279 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1280 p.readInt32(&solSigStren->rsrp);
1281 p.readInt32(&solSigStren->rsrq);
1282 p.readInt32(&solSigStren->rssnr);
1283 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1284 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1285 {
1286 solSigStren->lte_sig_valid = 1;
1287 }else{
1288 solSigStren->lte_sig_valid = 0;
1289 }
1290
1291 p.readInt32(&none);
1292 p.readInt32(&none);
1293 p.readInt32(&none);
1294 p.readInt32(&none);
1295 p.readInt32(&none);
1296 p.readInt32(&WCDMA_signalstrength);
1297 p.readInt32(&none);
1298 p.readInt32(&solSigStren->rscp);
1299 p.readInt32(&solSigStren->ecno);
1300 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1301 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1302 {
rjw479d38b2022-01-22 14:10:42 +08001303 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001304 }else{
rjw479d38b2022-01-22 14:10:42 +08001305 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001306 }
rjw479d38b2022-01-22 14:10:42 +08001307 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001308 p.readInt32(&solSigStren->ssRsrp);
1309 p.readInt32(&solSigStren->ssRsrq);
1310 p.readInt32(&solSigStren->ssSinr);
1311 p.readInt32(&solSigStren->csiRsrp);
1312 p.readInt32(&solSigStren->csiRsrq);
1313 p.readInt32(&solSigStren->csiSinr);
1314 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1315 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1316 if(sum != 0)
1317 {
1318 solSigStren->nr_sig_valid = 1;
1319 }else{
1320 LYERRLOG("None of NR signal info");
1321 }
1322 }
1323 return response.error;
1324}
rjw415439a2022-03-02 15:23:11 +08001325
rjwc3e81b82022-03-10 11:04:24 +08001326int lynq_set_ims(const int ims_mode)
1327{
1328 int ret = -1;
1329 if (ims_mode < 0 || ims_mode > 1)
1330 {
1331 LYERRLOG("incoming ims_mode error");
1332 return ret;
1333 }
1334 int send_num = 0;
1335 char res_data[LYNQ_REC_BUF] = {0};
1336 int recv_num = 0;
1337 lynq_client_t client_t;
1338
1339 memset(&client_t,0,sizeof(client_t));
1340 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1341 client_t.paramLen = 1;
1342 client_t.uToken = network_Global_uToken;
1343 sprintf(client_t.param,"%d",ims_mode);
1344
1345 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1346 if (send_num<0)
1347 {
1348 LYERRLOG("sendto error:");
1349 return ret;
1350 }
1351
1352 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
1353 if (recv_num == 0 || recv_num < 0)
1354 {
1355 LYERRLOG("recvfrom error");
1356 return -1;
1357 }
1358
1359 Parcel p;
1360 p.setData((uint8_t *)res_data,sizeof(res_data));
1361 p.setDataPosition(0);
1362 if (p.dataAvail() > 0)
1363 {
1364 p.readInt32(&response.resp_type);
1365 p.readInt32(&response.request);
1366 p.readInt32(&response.slot_id);
1367 p.readInt32(&response.error);
1368 }
1369
1370 return response.error;
1371}
1372
1373
rjw415439a2022-03-02 15:23:11 +08001374/*Used to wait for an update signal*/
1375int lynq_wait_signalchanges(int *handle)
1376{
1377 LYDBGLOG("start wait signalchanges info");
1378 if(NULL == handle)
1379 {
1380 LYERRLOG("illegal input");
1381 return -1;
1382 }
1383 wait_signal_changes();
1384 LYDBGLOG("get signalchanges");
1385 *handle = network_wait_urc_id;
1386 return 0;
1387}
1388/*Used to get urc info*/
1389int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1390{
1391 LYDBGLOG("start get urc info");
1392 if(handle != 1002&&handle != 1009)
1393 {
1394 LYINFLOG("invalid handle!!!");
1395 return -1;
1396 }
1397 if(NULL == solSigStren && NULL == slot_id)
1398 {
1399 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1400 return -1;
1401 }
1402 switch(handle)
1403 {
1404 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1405 {
1406 LYDBGLOG("get state update to VOICE");
1407 *slot_id = network_urc_slot_id;
1408 LYINFLOG("slot_id = %d",network_urc_slot_id);
1409 }
1410 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1411 {
1412 LYDBGLOG("get state update to signal info");
1413 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1414 solSigStren->rssi = network_urc_solSigStren.rssi;
1415 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1416 solSigStren->rscp = network_urc_solSigStren.rscp;
1417 solSigStren->ecno = network_urc_solSigStren.ecno;
1418 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1419 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1420 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1421 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1422 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1423 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1424 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1425 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1426 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1427 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1428 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1429 }
1430 }
1431 return 0;
1432}