blob: ff297f61685634a0deb16c6d7f347d70c5560504 [file] [log] [blame]
rjw7e50cd32022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjw4a5a78d2022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw7e50cd32022-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;
rjwbc8a05f2022-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;
rjw22947c22022-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;
rjw7e50cd32022-01-18 18:30:37 +080065
rjwbc8a05f2022-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;
rjw7e50cd32022-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
rjwbc8a05f2022-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
rjw7e50cd32022-01-18 18:30:37 +0800106void *thread_urc_recv(void *p)
107{
108 Parcel *urc_p =NULL;
109 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-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;
rjw7e50cd32022-01-18 18:30:37 +0800115 int urc_LTE_signalstrength = 0;
116 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800117 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800118 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800119 {
120 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-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);
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800134 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800135 switch(urc_id)
136 {
137 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
138 {
rjwbc8a05f2022-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();
rjw7e50cd32022-01-18 18:30:37 +0800142 }
143 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
144 {
rjwbc8a05f2022-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))
rjw7e50cd32022-01-18 18:30:37 +0800147 {
rjwbc8a05f2022-03-02 15:23:11 +0800148 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800149 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800150 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800151 }
rjwbc8a05f2022-03-02 15:23:11 +0800152 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800153 {
rjwbc8a05f2022-03-02 15:23:11 +0800154 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800155 }
rjw7e50cd32022-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);
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800168 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
169 {
rjwbc8a05f2022-03-02 15:23:11 +0800170 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800171 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800172 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800173 }
rjwbc8a05f2022-03-02 15:23:11 +0800174 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800175 {
176 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
177 }
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800185 urc_p->readInt32(&network_urc_solSigStren.rscp);
186 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800187 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
188 {
rjwbc8a05f2022-03-02 15:23:11 +0800189 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800190 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800191 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800192 }
rjwbc8a05f2022-03-02 15:23:11 +0800193 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800194 {
195 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800196 }
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800205 if(NR_sum != 0)
206 {
rjwbc8a05f2022-03-02 15:23:11 +0800207 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800208 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800209 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800210 }
rjwbc8a05f2022-03-02 15:23:11 +0800211 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-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",\
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800216 }
rjwbc8a05f2022-03-02 15:23:11 +0800217 network_wait_urc_id = urc_id;
218 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800219 }
220 }
221 }
222 }
223}
224
225
226int lynq_server_socket_start()
227{
rjwbc8a05f2022-03-02 15:23:11 +0800228 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
229 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800230 {
231 LYERRLOG("socket open error");
232 return -1;
233 }
rjwbc8a05f2022-03-02 15:23:11 +0800234 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800235
rjwbc8a05f2022-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);
rjw7e50cd32022-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;
rjwbc8a05f2022-03-02 15:23:11 +0800249 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800250 int ret = 0;
rjwbc8a05f2022-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){
rjw7e50cd32022-01-18 18:30:37 +0800254 LYERRLOG("urc socket error");
255 ret = -1;
256 }
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800260 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800261 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800262 if(ret <0)
263 {
264 LYERRLOG("urc socket set error");
265 return -1;
266 }
rjwbc8a05f2022-03-02 15:23:11 +0800267 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800275 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-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){
rjw22947c22022-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;
rjw7e50cd32022-01-18 18:30:37 +0800292 if(utoken <0){
293 LYERRLOG("init err");
294 return -1;
295 }
rjwbc8a05f2022-03-02 15:23:11 +0800296 network_urc_status = 1;
297 network_Global_uToken = utoken;
rjw7e50cd32022-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
rjw61974852022-05-17 16:30:32 +0800335int copyCellInfoList(Parcel &p,int *cellinfo,int *tac)
rjw7e50cd32022-01-18 18:30:37 +0800336{
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);
rjw61974852022-05-17 16:30:32 +0800363 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800364 break;
365 }
366 case RIL_CELL_INFO_TYPE_WCDMA: {
367 p.readInt32(&nothing);
368 p.readInt32(&nothing);
369 p.readInt32(&nothing);
370 p.readInt32(cellinfo);
371 p.readInt32(&nothing);
372 p.readInt32(&nothing);
373 p.readInt32(&nothing);
rjw4200a082022-05-17 17:58:35 +0800374 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800375 break;
376 }
377 case RIL_CELL_INFO_TYPE_CDMA: {
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 p.readInt32(&nothing);
387 p.readInt32(&nothing);
388 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800389 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800390 break;
391 }
392 case RIL_CELL_INFO_TYPE_LTE: {
393 p.readInt32(&nothing);
394 p.readInt32(&nothing);
395 p.readInt32(cellinfo);
396 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800397 p.readInt32(tac);
rjw7e50cd32022-01-18 18:30:37 +0800398 p.readInt32(&nothing);
399 p.readInt32(&nothing);
400 p.readInt32(&nothing);
401 p.readInt32(&nothing);
402 p.readInt32(&nothing);
403 p.readInt32(&nothing);
404 break;
405 }
406 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
407 p.readInt32(&nothing);
408 p.readInt32(&nothing);
409 p.readInt32(&nothing);
410 p.readInt32(cellinfo);
411 p.readInt32(&nothing);
412 p.readInt32(&nothing);
413 break;
414 }
415 case RIL_CELL_INFO_TYPE_NR: {
416 p.readInt32(&nothing);
417 p.readInt32(&nothing);
418 p.readInt32(cellinfo);
419 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800420 p.readInt32(tac);
rjw7e50cd32022-01-18 18:30:37 +0800421 p.readInt32(&nothing);
422 p.readInt32(&nothing);
423 p.readInt32(&nothing);
424 p.readInt32(&nothing);
425 p.readInt32(&nothing);
426 p.readInt32(&nothing);
427 p.readInt32(&nothing);
428 break;
429 }
430 }
431 LYINFLOG("CID in fUNC :%d",*cellinfo);
432 return 0;
433}
434
435int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800436 if (g_lynq_network_init_flag == 0)
437 {
438 LYERRLOG("deinit twice is not allowed");
439 return -1;
440 }
441 if (network_sock_fd > 0)
442 {
443 close(network_sock_fd);
444 }
445 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800446 network_urc_status = 0;
rjw7e50cd32022-01-18 18:30:37 +0800447 return 0;
448}
449
450static char * lynqStrdupReadString(Parcel &p) {
451 size_t stringlen;
452 const char16_t *s16;
453
454 s16 = p.readString16Inplace(&stringlen);
455 return strndup16to8(s16, stringlen);
456}
457
458int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
459{
460 int ret = -1;
461 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
462 return ret;
463 int send_num = 0;
464 int recv_num = 0;
465 int num = 0;
466 lynq_client_t client_t;
467 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjw02a50422022-01-25 14:57:53 +0800468 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800469 memset(&client_t,0,sizeof(client_t));
470 client_t.request = RIL_REQUEST_OPERATOR;
471 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800472 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800473 memset(client_t.param,0,sizeof(client_t.param));
474
rjwbc8a05f2022-03-02 15:23:11 +0800475 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800476 if(send_num<0)
477 {
478 LYERRLOG("sendto error:");
479 return ret;
480 }
481
482 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800483 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800484 if(recv_num == 0 ||recv_num <0)
485 {
486 LYERRLOG("recvfrom error");
487 return -1;
488 }
489 Parcel p;
490 p.setData((uint8_t *)res_data,sizeof(res_data));
491 p.setDataPosition(0);
492 if(p.dataAvail() > 0)
493 {
494 p.readInt32(&response.resp_type);
495 p.readInt32(&response.request);
496 p.readInt32(&response.slot_id);
497 p.readInt32(&response.error);
498 if(response.error != 0)
499 {
500 LYERRLOG("response return error");
501 return response.error;
502 }
503 p.readInt32(&num);
504 if(num == 0)
505 {
506 LYERRLOG("no paramters");
507 }else{
508 for(int i = 0; i<num;i++)
509 {
510 resp[i] = lynqStrdupReadString(p);
511 }
512 if(NULL != resp[0])
513 {
rjw02a50422022-01-25 14:57:53 +0800514 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800515 }
516 if(NULL != resp[1])
517 {
rjw02a50422022-01-25 14:57:53 +0800518 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800519 }
520 if(NULL != resp[2])
521 {
rjw02a50422022-01-25 14:57:53 +0800522 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800523 }
524 }
525 }
526 return response.error;
527}
528
529int lynq_query_network_selection_mode(int *netselMode)
530{
531 int ret = -1;
532 if(NULL == netselMode)
533 return ret;
534 int send_num = 0;
535 int recv_num = 0;
536 int readnum = 0;
537 lynq_client_t client_t;
538 char res_data[LYNQ_REC_BUF] = {0};
539 memset(&client_t,0,sizeof(client_t));
540 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
541 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800542 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800543
544 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +0800545 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800546 if(send_num<0)
547 {
548 LYERRLOG("sendto error:");
549 return -1;
550 }
551
552 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800553 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800554 if(recv_num == 0 ||recv_num <0)
555 {
556 LYERRLOG("recvfrom error");
557 return -1;
558 }
559 Parcel p;
560 p.setData((uint8_t *)res_data,sizeof(res_data));
561 p.setDataPosition(0);
562 if(p.dataAvail() > 0)
563 {
564 p.readInt32(&response.resp_type);
565 p.readInt32(&response.request);
566 p.readInt32(&response.slot_id);
567 p.readInt32(&response.error);
568 if(response.error != 0)
569 {
570 LYERRLOG("response return error");
571 return response.error;
572 }
573 p.readInt32(&readnum);
574 p.readInt32(netselMode);
575 }
576 return response.error;
577}
578
579int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
580{
581 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800582 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800583 return ret;
rjw78d04502022-02-24 13:37:11 +0800584 if(strlen(mode) == 0)
585 {
586 return ret;
587 }
rjw7e50cd32022-01-18 18:30:37 +0800588 int send_num = 0;
589 lynq_client_t client_t;
590 int recv_num = 0;
591 char res_data[LYNQ_REC_BUF] = {0};
592 memset(&client_t,0,sizeof(client_t));
593 if(!strcmp(mode,"Auto"))
594 {
595 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
596 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800597 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800598 memset(client_t.param,0,sizeof(client_t.param));
599 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800600 if(mccmnc == NULL)
601 {
602 LYERRLOG("mccmnc is NULL!!!");
603 return ret;
604 }
605 if(strlen(mccmnc) == 0)
606 {
607 LYERRLOG("mccmnc strlen is 0!!!");
608 return ret;
609 }
rjw7e50cd32022-01-18 18:30:37 +0800610 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
611 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800612 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800613 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800614 }else{
615 LYERRLOG("request error");
616 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800617 }
618
619
rjwbc8a05f2022-03-02 15:23:11 +0800620 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800621 if(send_num<0)
622 {
623 LYERRLOG("sendto error:");
624 return ret;
625 }
626
rjwbc8a05f2022-03-02 15:23:11 +0800627 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800628 if(recv_num == 0 ||recv_num <0)
629 {
630 LYERRLOG("recvfrom error");
631 return -1;
632 }
633
634 Parcel p;
635 p.setData((uint8_t *)res_data,sizeof(res_data));
636 p.setDataPosition(0);
637 if(p.dataAvail() > 0)
638 {
639 p.readInt32(&response.resp_type);
640 p.readInt32(&response.request);
641 p.readInt32(&response.slot_id);
642 p.readInt32(&response.error);
643 }
644 return response.error;
645}
646
647int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
648{
649 int ret = -1;
650 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
651 return ret;
652 int send_num = 0;
653 int recv_num = 0;
654 char res_data[LYNQ_REC_BUF] = {0};
655 char *resp[128];
656 lynq_client_t client_t;
657 memset(&client_t,0,sizeof(client_t));
658 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
659 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800660 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800661 memset(client_t.param,0,sizeof(client_t.param));
662
rjwbc8a05f2022-03-02 15:23:11 +0800663 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800664 if(send_num<0)
665 {
666 LYERRLOG("sendto error:");
667 return ret;
668 }
669
670 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800671 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800672 if(recv_num == 0 ||recv_num <0)
673 {
674 LYERRLOG("recvfrom error");
675 return -1;
676 }
677 Parcel p;
678 p.setData((uint8_t *)res_data,sizeof(res_data));
679 p.setDataPosition(0);
680 if(p.dataAvail() > 0)
681 {
682 p.readInt32(&response.resp_type);
683 p.readInt32(&response.request);
684 p.readInt32(&response.slot_id);
685 p.readInt32(&response.error);
686 if(response.error != 0)
687 {
688 LYERRLOG("response return error");
689 return response.error;
690 }
691 int num =p.readInt32();
692 if(num == 0)
693 {
694 LYERRLOG("no paramters");
695 }else{
696 for(int i = 0; i<num;i++)
697 {
698 resp[i] = lynqStrdupReadString(p);
699 }
700 if(NULL != resp[0])
701 {
rjw02a50422022-01-25 14:57:53 +0800702 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800703 }
704 if(NULL != resp[1])
705 {
rjw02a50422022-01-25 14:57:53 +0800706 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800707 }
708 if(NULL != resp[2])
709 {
rjw02a50422022-01-25 14:57:53 +0800710 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800711 }
712 if(NULL != resp[3])
713 {
rjw02a50422022-01-25 14:57:53 +0800714 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800715 }
716 }
717 }
718 return response.error;
719}
720
rjw4544e132022-04-01 15:00:26 +0800721int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800722{
723 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800724 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800725 return ret;
726 int send_num = 0;
727 int recv_num = 0;
728 int num = 0;
729 char str[LYNQ_TYPE_BUF];
730 char res_data[LYNQ_REC_BUF] = {0};
rjwcdd83ae2022-01-22 14:10:42 +0800731 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800732 lynq_client_t client_t;
733 memset(&client_t,0,sizeof(client_t));
734 if(strlen(type)>LYNQ_TYPE_BUF)
735 {
736 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
737 }
738 memcpy(str,type,strlen(type)+1);
739 strUpper(str);
740 if(!strcmp(str,"VOICE"))
741 {
742 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
743 }else if(!strcmp(str,"DATA")){
744 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
745 }else if(!strcmp(str,"IMS")){
746 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
747 }else{
748 LYERRLOG("request error");
749 return ret;
750 }
751 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800752 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800753 memset(client_t.param,0,sizeof(client_t.param));
754
rjwbc8a05f2022-03-02 15:23:11 +0800755 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800756 if(send_num<0)
757 {
758 LYERRLOG("sendto error:");
759 return ret;
760 }
761
762 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800763 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800764 if(recv_num == 0 ||recv_num <0)
765 {
766 LYERRLOG("recvfrom error");
767 return -1;
768 }
769 Parcel p;
770 p.setData((uint8_t *)res_data,sizeof(res_data));
771 p.setDataPosition(0);
772 if(p.dataAvail() > 0)
773 {
774 p.readInt32(&response.resp_type);
775 p.readInt32(&response.request);
776 p.readInt32(&response.slot_id);
777 p.readInt32(&response.error);
778 if(response.error != 0)
779 {
780 LYERRLOG("response return error");
781 return response.error;
782 }
783 if(!strcmp(str,"VOICE"))
784 {
785 p.readInt32(&num);
786 if(num == 15)
787 {
788 *regState = atoi(lynqStrdupReadString(p));
789 lynqStrdupReadString(p);
790 lynqStrdupReadString(p);
791 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800792 lynqStrdupReadString(p);
793 lynqStrdupReadString(p);
794 lynqStrdupReadString(p);
795 lynqStrdupReadString(p);
796 lynqStrdupReadString(p);
797 lynqStrdupReadString(p);
798 lynqStrdupReadString(p);
799 lynqStrdupReadString(p);
800 lynqStrdupReadString(p);
801 lynqStrdupReadString(p);
802 *netRejected = atoi(lynqStrdupReadString(p));
rjw7e50cd32022-01-18 18:30:37 +0800803 }
804 }else if(!strcmp(str,"DATA")){
805 p.readInt32(&num);
806 if(num == 11)
807 {
808 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800809 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800810 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800811
812 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800813 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800814 *netType = atoi(lynqStrdupReadString(p));
815 }
816
817 }else if(!strcmp(str,"IMS")){
818 p.readInt32(&num);
819 if(num == 2)
820 {
821 p.readInt32(imsRegState);
822 p.readInt32(radioTechFam);
823 }
824 }else{
825 LYERRLOG("request error");
826 return ret;
827 }
828 }
829 return response.error;
830}
831
832int lynq_query_prefferred_networktype(int *preNetType)
833{
834 int ret = -1;
835 int send_num = 0;
836 int recv_num = 0;
837 int num = 0;
838 char res_data[LYNQ_REC_BUF] = {0};
839 lynq_client_t client_t;
840 memset(&client_t,0,sizeof(client_t));
841 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
842 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800843 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800844 memset(client_t.param,0,sizeof(client_t.param));
845
rjwbc8a05f2022-03-02 15:23:11 +0800846 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800847 if(send_num<0)
848 {
849 LYERRLOG("sendto error:");
850 return ret;
851 }
852
853 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800854 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800855 if(recv_num == 0 ||recv_num <0)
856 {
857 LYERRLOG("recvfrom error");
858 return -1;
859 }
860 Parcel p;
861 p.setData((uint8_t *)res_data,sizeof(res_data));
862 p.setDataPosition(0);
863 if(p.dataAvail() > 0)
864 {
865 p.readInt32(&response.resp_type);
866 p.readInt32(&response.request);
867 p.readInt32(&response.slot_id);
868 p.readInt32(&response.error);
869 if(response.error != 0)
870 {
871 LYERRLOG("response return error");
872 return response.error;
873 }
874 p.readInt32(&num);
875 p.readInt32(preNetType);
876 }
877 return response.error;
878}
879
880int lynq_set_prefferred_networktype(const int preffertype)
881{
882 int ret = -1;
883 if(preffertype < 0||preffertype >33)
884 return ret;
885 int send_num = 0;
886 lynq_client_t client_t;
887 int recv_num = 0;
888 char res_data[LYNQ_REC_BUF] = {0};
889 memset(&client_t,0,sizeof(client_t));
890 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
891 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800892 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800893 sprintf(client_t.param,"%d",preffertype);
rjwbc8a05f2022-03-02 15:23:11 +0800894 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800895 if(send_num<0)
896 {
897 LYERRLOG("sendto error:");
898 return ret;
899 }
900
rjwbc8a05f2022-03-02 15:23:11 +0800901 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800902 if(recv_num == 0 ||recv_num <0)
903 {
904 LYERRLOG("recvfrom error");
905 return -1;
906 }
907
908 Parcel p;
909 p.setData((uint8_t *)res_data,sizeof(res_data));
910 p.setDataPosition(0);
911 if(p.dataAvail() > 0)
912 {
913 p.readInt32(&response.resp_type);
914 p.readInt32(&response.request);
915 p.readInt32(&response.slot_id);
916 p.readInt32(&response.error);
917 }
918
919 return response.error;
920
921}
922
rjw61974852022-05-17 16:30:32 +0800923int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int * realNum)
rjw7e50cd32022-01-18 18:30:37 +0800924{
925 int ret = -1;
926 if(NULL == realNum)
927 return ret;
928 int send_num = 0;
929 int recv_num = 0;
930 int num = 0;
931 char res_data[LYNQ_REC_BUF] = {0};
932 lynq_client_t client_t;
933 memset(&client_t,0,sizeof(client_t));
934 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
935 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800936 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800937 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +0800938 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800939 if(send_num<0)
940 {
941 LYERRLOG("sendto error:");
942 return ret;
943 }
944
945 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800946 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800947 if(recv_num == 0 ||recv_num <0)
948 {
949 LYERRLOG("recvfrom error");
950 return -1;
951 }
952 Parcel p;
953 p.setData((uint8_t *)res_data,sizeof(res_data));
954 p.setDataPosition(0);
955 if(p.dataAvail() > 0)
956 {
957 p.readInt32(&response.resp_type);
958 p.readInt32(&response.request);
959 p.readInt32(&response.slot_id);
960 p.readInt32(&response.error);
961 if(response.error != 0)
962 {
963 LYERRLOG("response return error");
964 return response.error;
965 }
966 p.readInt32(&num);
967 LYINFLOG("cell info num:%d",num);
968 *realNum = num;
969 for(int i = 0;i<num;i++)
970 {
rjw61974852022-05-17 16:30:32 +0800971 copyCellInfoList(p,&cellinfo[i],&tac[i]);
rjw7e50cd32022-01-18 18:30:37 +0800972 }
973 }
974 return response.error;
975
976}
977
978int lynq_set_unsol_cell_info_listrate(const int rate)
979{
980 int ret = -1;
981 int send_num = 0;
982 int recv_num = 0;
983 char res_data[LYNQ_REC_BUF] = {0};
984 lynq_client_t client_t;
985 memset(&client_t,0,sizeof(client_t));
986 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
987 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800988 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800989 sprintf(client_t.param,"%d",rate);
990
rjwbc8a05f2022-03-02 15:23:11 +0800991 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800992 if(send_num<0)
993 {
994 LYERRLOG("sendto error:");
995 return ret;
996 }
997
rjwbc8a05f2022-03-02 15:23:11 +0800998 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800999 if(recv_num == 0 ||recv_num <0)
1000 {
1001 LYERRLOG("recvfrom error");
1002 return -1;
1003 }
1004
1005 Parcel p;
1006 p.setData((uint8_t *)res_data,sizeof(res_data));
1007 p.setDataPosition(0);
1008 if(p.dataAvail() > 0)
1009 {
1010 p.readInt32(&response.resp_type);
1011 p.readInt32(&response.request);
1012 p.readInt32(&response.slot_id);
1013 p.readInt32(&response.error);
1014 }
1015
1016 return response.error;
1017}
1018
1019int lynq_set_band_mode(const int bandmode)
1020{
1021 int ret = -1;
1022 int send_num = 0;
1023 int recv_num = 0;
1024 char res_data[LYNQ_REC_BUF] = {0};
1025 lynq_client_t client_t;
1026 memset(&client_t,0,sizeof(client_t));
1027 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1028 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001029 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001030 sprintf(client_t.param,"%d",bandmode);
1031
rjwbc8a05f2022-03-02 15:23:11 +08001032 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001033 if(send_num<0)
1034 {
1035 LYERRLOG("sendto error:");
1036 return ret;
1037 }
1038
rjwbc8a05f2022-03-02 15:23:11 +08001039 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001040 if(recv_num == 0 ||recv_num <0)
1041 {
1042 LYERRLOG("recvfrom error");
1043 return -1;
1044 }
1045
1046 Parcel p;
1047 p.setData((uint8_t *)res_data,sizeof(res_data));
1048 p.setDataPosition(0);
1049 if(p.dataAvail() > 0)
1050 {
1051 p.readInt32(&response.resp_type);
1052 p.readInt32(&response.request);
1053 p.readInt32(&response.slot_id);
1054 p.readInt32(&response.error);
1055 }
1056
1057 return response.error;
1058}
1059
1060int lynq_query_available_bandmode(int availBanMode[])
1061{
1062 int ret = -1;
1063 if(NULL == availBanMode)
1064 return ret;
1065 int send_num = 0;
1066 int recv_num = 0;
1067 int num = 0;
1068 int res = 0;
1069 char res_data[LYNQ_REC_BUF] = {0};
1070 lynq_client_t client_t;
1071 memset(&client_t,0,sizeof(client_t));
1072 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1073 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001074 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001075 memset(client_t.param,0,sizeof(client_t.param));
rjwbc8a05f2022-03-02 15:23:11 +08001076 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001077 if(send_num<0)
1078 {
1079 LYERRLOG("sendto error:");
1080 return ret;
1081 }
1082
1083 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001084 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001085 if(recv_num == 0 ||recv_num <0)
1086 {
1087 LYERRLOG("recvfrom error");
1088 return -1;
1089 }
rjw78d04502022-02-24 13:37:11 +08001090 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001091 {
1092 availBanMode[i]=0;
1093 }
1094 Parcel p;
1095 p.setData((uint8_t *)res_data,sizeof(res_data));
1096 p.setDataPosition(0);
1097
1098 if(p.dataAvail() > 0)
1099 {
1100 p.readInt32(&response.resp_type);
1101 p.readInt32(&response.request);
1102 p.readInt32(&response.slot_id);
1103 p.readInt32(&response.error);
1104 if(response.error != 0)
1105 {
1106 LYERRLOG("response return error");
1107 return response.error;
1108 }
1109 p.readInt32(&num);
1110 LYINFLOG("num = %d",num);
1111 availBanMode[0] = num;
1112 for(int i=1 ;i<=num;i++)
1113 {
1114 p.readInt32(&res);
1115 availBanMode[i]=res;
1116 }
1117 }
1118
1119 return response.error;
1120}
1121
1122int lynq_radio_on(const int data)
1123{
1124 int ret = -1;
1125 if(data < 0)
1126 return ret;
1127 int send_num = 0;
1128 char res_data[LYNQ_REC_BUF] = {0};
1129 int recv_num = 0;
1130 lynq_client_t client_t;
1131 memset(&client_t,0,sizeof(client_t));
1132 client_t.request = RIL_REQUEST_RADIO_POWER;
1133 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001134 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001135 sprintf(client_t.param,"%d",data);
1136
rjwbc8a05f2022-03-02 15:23:11 +08001137 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001138 if(send_num<0)
1139 {
1140 LYERRLOG("sendto error:");
1141 return ret;
1142 }
1143
rjwbc8a05f2022-03-02 15:23:11 +08001144 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001145 if(recv_num == 0 ||recv_num <0)
1146 {
1147 LYERRLOG("recvfrom error");
1148 return -1;
1149 }
1150
1151 Parcel p;
1152 p.setData((uint8_t *)res_data,sizeof(res_data));
1153 p.setDataPosition(0);
1154 if(p.dataAvail() > 0)
1155 {
1156 p.readInt32(&response.resp_type);
1157 p.readInt32(&response.request);
1158 p.readInt32(&response.slot_id);
1159 p.readInt32(&response.error);
1160 }
1161
1162 return response.error;
1163}
1164
1165int lynq_query_radio_tech(int* radioTech)
1166{
1167 int ret = -1;
1168 if(NULL == radioTech)
1169 return ret;
1170 int send_num = 0;
1171 int recv_num = 0;
1172 int num = 0;
1173 char res_data[LYNQ_REC_BUF] = {0};
1174 lynq_client_t client_t;
1175 memset(&client_t,0,sizeof(client_t));
1176 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1177 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001178 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001179 memset(client_t.param,0,sizeof(client_t.param));
1180
rjwbc8a05f2022-03-02 15:23:11 +08001181 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001182 if(send_num<0)
1183 {
1184 LYERRLOG("sendto error:");
1185 return ret;
1186 }
1187
rjwbc8a05f2022-03-02 15:23:11 +08001188 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001189 if(recv_num == 0 ||recv_num <0)
1190 {
1191 LYERRLOG("recvfrom error");
1192 return -1;
1193 }
1194 Parcel p;
1195 p.setData((uint8_t *)res_data,sizeof(res_data));
1196 p.setDataPosition(0);
1197
1198 if(p.dataAvail() > 0)
1199 {
1200 p.readInt32(&response.resp_type);
1201 p.readInt32(&response.request);
1202 p.readInt32(&response.slot_id);
1203 p.readInt32(&response.error);
1204 if(response.error != 0)
1205 {
1206 LYERRLOG("response return error");
1207 return response.error;
1208 }
1209 p.readInt32(&num);
1210 p.readInt32(radioTech);
1211 }
1212 return response.error;
1213}
1214
1215int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1216{
1217 int ret = -1;
1218 if(NULL == solSigStren)
1219 return ret;
1220 int send_num = 0;
1221 int recv_num = 0;
1222 int sum = 0;
1223 int LTE_signalstrength = 0;
1224 int WCDMA_signalstrength = 0;
1225 int none = 0;
1226
1227 char res_data[LYNQ_REC_BUF] = {0};
1228 lynq_client_t client_t;
1229 memset(&client_t,0,sizeof(client_t));
1230 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1231 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001232 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001233 memset(client_t.param,0,sizeof(client_t.param));
1234
rjwbc8a05f2022-03-02 15:23:11 +08001235 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001236 if(send_num<0)
1237 {
1238 LYERRLOG("sendto error:");
1239 return ret;
1240 }
1241
1242 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001243 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001244 if(recv_num == 0 ||recv_num <0)
1245 {
1246 LYERRLOG("recvfrom error");
1247 return -1;
1248 }
1249 Parcel p;
1250 p.setData((uint8_t *)res_data,sizeof(res_data));
1251 p.setDataPosition(0);
1252
1253 if(p.dataAvail() > 0)
1254 {
1255 p.readInt32(&response.resp_type);
1256 p.readInt32(&response.request);
1257 p.readInt32(&response.slot_id);
1258 p.readInt32(&response.error);
1259 if(response.error != 0)
1260 {
1261 LYERRLOG("response return error");
1262 return response.error;
1263 }
1264
1265 p.readInt32(&solSigStren->rssi);
1266 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1267 {
1268 solSigStren->gw_sig_valid = 1;
1269 }else{
1270 solSigStren->gw_sig_valid = 0;
1271 }
1272
1273 p.readInt32(&none);
1274 p.readInt32(&none);
1275 p.readInt32(&none);
1276 p.readInt32(&none);
1277 p.readInt32(&none);
1278 p.readInt32(&none);
1279 p.readInt32(&none);
1280 p.readInt32(&LTE_signalstrength);
1281 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1282 p.readInt32(&solSigStren->rsrp);
1283 p.readInt32(&solSigStren->rsrq);
1284 p.readInt32(&solSigStren->rssnr);
1285 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1286 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1287 {
1288 solSigStren->lte_sig_valid = 1;
1289 }else{
1290 solSigStren->lte_sig_valid = 0;
1291 }
1292
1293 p.readInt32(&none);
1294 p.readInt32(&none);
1295 p.readInt32(&none);
1296 p.readInt32(&none);
1297 p.readInt32(&none);
1298 p.readInt32(&WCDMA_signalstrength);
1299 p.readInt32(&none);
1300 p.readInt32(&solSigStren->rscp);
1301 p.readInt32(&solSigStren->ecno);
1302 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1303 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1304 {
rjwcdd83ae2022-01-22 14:10:42 +08001305 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001306 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001307 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001308 }
rjwcdd83ae2022-01-22 14:10:42 +08001309 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001310 p.readInt32(&solSigStren->ssRsrp);
1311 p.readInt32(&solSigStren->ssRsrq);
1312 p.readInt32(&solSigStren->ssSinr);
1313 p.readInt32(&solSigStren->csiRsrp);
1314 p.readInt32(&solSigStren->csiRsrq);
1315 p.readInt32(&solSigStren->csiSinr);
1316 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1317 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1318 if(sum != 0)
1319 {
1320 solSigStren->nr_sig_valid = 1;
1321 }else{
1322 LYERRLOG("None of NR signal info");
1323 }
1324 }
1325 return response.error;
1326}
rjwbc8a05f2022-03-02 15:23:11 +08001327
rjw4a5a78d2022-03-10 11:04:24 +08001328int lynq_set_ims(const int ims_mode)
1329{
1330 int ret = -1;
1331 if (ims_mode < 0 || ims_mode > 1)
1332 {
1333 LYERRLOG("incoming ims_mode error");
1334 return ret;
1335 }
1336 int send_num = 0;
1337 char res_data[LYNQ_REC_BUF] = {0};
1338 int recv_num = 0;
1339 lynq_client_t client_t;
1340
1341 memset(&client_t,0,sizeof(client_t));
1342 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1343 client_t.paramLen = 1;
1344 client_t.uToken = network_Global_uToken;
1345 sprintf(client_t.param,"%d",ims_mode);
1346
1347 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1348 if (send_num<0)
1349 {
1350 LYERRLOG("sendto error:");
1351 return ret;
1352 }
1353
1354 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
1355 if (recv_num == 0 || recv_num < 0)
1356 {
1357 LYERRLOG("recvfrom error");
1358 return -1;
1359 }
1360
1361 Parcel p;
1362 p.setData((uint8_t *)res_data,sizeof(res_data));
1363 p.setDataPosition(0);
1364 if (p.dataAvail() > 0)
1365 {
1366 p.readInt32(&response.resp_type);
1367 p.readInt32(&response.request);
1368 p.readInt32(&response.slot_id);
1369 p.readInt32(&response.error);
1370 }
1371
1372 return response.error;
1373}
1374
1375
rjwbc8a05f2022-03-02 15:23:11 +08001376/*Used to wait for an update signal*/
1377int lynq_wait_signalchanges(int *handle)
1378{
1379 LYDBGLOG("start wait signalchanges info");
1380 if(NULL == handle)
1381 {
1382 LYERRLOG("illegal input");
1383 return -1;
1384 }
1385 wait_signal_changes();
1386 LYDBGLOG("get signalchanges");
1387 *handle = network_wait_urc_id;
1388 return 0;
1389}
1390/*Used to get urc info*/
1391int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1392{
1393 LYDBGLOG("start get urc info");
1394 if(handle != 1002&&handle != 1009)
1395 {
1396 LYINFLOG("invalid handle!!!");
1397 return -1;
1398 }
1399 if(NULL == solSigStren && NULL == slot_id)
1400 {
1401 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1402 return -1;
1403 }
1404 switch(handle)
1405 {
1406 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1407 {
1408 LYDBGLOG("get state update to VOICE");
1409 *slot_id = network_urc_slot_id;
1410 LYINFLOG("slot_id = %d",network_urc_slot_id);
1411 }
1412 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1413 {
1414 LYDBGLOG("get state update to signal info");
1415 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1416 solSigStren->rssi = network_urc_solSigStren.rssi;
1417 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1418 solSigStren->rscp = network_urc_solSigStren.rscp;
1419 solSigStren->ecno = network_urc_solSigStren.ecno;
1420 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1421 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1422 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1423 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1424 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1425 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1426 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1427 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1428 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1429 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1430 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1431 }
1432 }
1433 return 0;
rjw4200a082022-05-17 17:58:35 +08001434}