blob: 3f5dbe6c04e12f9fb40d4b6400e68c5c967f2dee [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
rjw32f04c22022-05-25 09:10:33 +080069/**g_lynq_network_sendto_mutex
70* @brief mark network send request mutex
71*/
72static pthread_mutex_t g_lynq_network_sendto_mutex;
73
74//static pthread_mutex_t g_lynq_network_recv_mutex;
75
rjw2183a5f2022-01-18 18:30:37 +080076typedef enum{
77 LYNQ_E_CARDSTATE_ERROR=8000,
78 /* The voice service state is out of service*/
79 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
80 /* The voice service state is EMERGENCY_ONLY*/
81 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
82 /* The radio power is power off*/
83 LYNQ_E_STATE_POWER_OFF=8003,
84 LYNQ_E_TIME_OUT=8004,
85 /*create or open sms DB fail */
86 LYNQ_E_SMS_DB_FAIL=8005,
87 /*Failed to execute sql statement*/
88 LYNQ_E_SMS_SQL_FAIL = 8006,
89 LYNQ_E_SMS_NOT_FIND = 8007,
90 /* The logic conflict*/
91 LYNQ_E_CONFLICT=9000,
92 /*Null anomaly*/
93 LYNQ_E_NULL_ANONALY=9001
94}LYNQ_E;
95
rjw415439a2022-03-02 15:23:11 +080096int wait_signal_changes()
97{
98 int ret = 0;
99 pthread_mutex_lock(&signal_state_change_mutex);
100 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
101 pthread_mutex_unlock(&signal_state_change_mutex);
102 return 0;
103}
104
105void send_signal_changes()
106{
107 pthread_mutex_lock(&signal_state_change_mutex);
108 pthread_cond_signal(&signal_state_change_cond);
109 pthread_mutex_unlock(&signal_state_change_mutex);
110 return;
111}
112
rjw2183a5f2022-01-18 18:30:37 +0800113void *thread_urc_recv(void *p)
114{
115 Parcel *urc_p =NULL;
116 char urc_data[LYNQ_REC_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800117 int resp_type = -1;
118 int urc_id = -1;
119 int res = 0;
120 int none = 0;
121 int NR_sum = 0;
rjw2183a5f2022-01-18 18:30:37 +0800122 int urc_LTE_signalstrength = 0;
123 int urc_WCDMA_signalstrength = 0;
rjw2183a5f2022-01-18 18:30:37 +0800124 LYINFLOG("urc thread is running");
rjw415439a2022-03-02 15:23:11 +0800125 while(network_urc_status)
rjw2183a5f2022-01-18 18:30:37 +0800126 {
127 bzero(urc_data,LYNQ_REC_BUF);
rjw415439a2022-03-02 15:23:11 +0800128 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 +0800129 if(res<=0)
130 {
131 LYERRLOG("thread_urc_recv step2 fail:");
132 break;
133 }
134 urc_p = new Parcel();
135 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
136 urc_p->setDataPosition(0);
137 if(urc_p->dataAvail()>0)
138 {
139 urc_p->readInt32(&resp_type);
140 urc_p->readInt32(&urc_id);
rjw415439a2022-03-02 15:23:11 +0800141 urc_p->readInt32(&network_urc_slot_id);
rjw2183a5f2022-01-18 18:30:37 +0800142 switch(urc_id)
143 {
144 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
145 {
rjw415439a2022-03-02 15:23:11 +0800146 network_wait_urc_id = urc_id;
147 LYINFLOG("slot_id = %d",network_urc_slot_id);
148 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800149 }
150 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
151 {
rjw415439a2022-03-02 15:23:11 +0800152 urc_p->readInt32(&network_urc_solSigStren.rssi);
153 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw2183a5f2022-01-18 18:30:37 +0800154 {
rjw415439a2022-03-02 15:23:11 +0800155 network_urc_solSigStren.gw_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800156 }else{
rjw415439a2022-03-02 15:23:11 +0800157 network_urc_solSigStren.gw_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800158 }
rjw415439a2022-03-02 15:23:11 +0800159 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800160 {
rjw415439a2022-03-02 15:23:11 +0800161 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw7610e272022-02-24 13:37:11 +0800162 }
rjw2183a5f2022-01-18 18:30:37 +0800163 urc_p->readInt32(&none);
164 urc_p->readInt32(&none);
165 urc_p->readInt32(&none);
166 urc_p->readInt32(&none);
167 urc_p->readInt32(&none);
168 urc_p->readInt32(&none);
169 urc_p->readInt32(&none);
170 urc_p->readInt32(&urc_LTE_signalstrength);
171 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjw415439a2022-03-02 15:23:11 +0800172 urc_p->readInt32(&network_urc_solSigStren.rsrp);
173 urc_p->readInt32(&network_urc_solSigStren.rsrq);
174 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800175 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
176 {
rjw415439a2022-03-02 15:23:11 +0800177 network_urc_solSigStren.lte_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800178 }else{
rjw415439a2022-03-02 15:23:11 +0800179 network_urc_solSigStren.lte_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800180 }
rjw415439a2022-03-02 15:23:11 +0800181 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800182 {
183 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
184 }
rjw2183a5f2022-01-18 18:30:37 +0800185 urc_p->readInt32(&none);
186 urc_p->readInt32(&none);
187 urc_p->readInt32(&none);
188 urc_p->readInt32(&none);
189 urc_p->readInt32(&none);
190 urc_p->readInt32(&urc_WCDMA_signalstrength);
191 urc_p->readInt32(&none);
rjw415439a2022-03-02 15:23:11 +0800192 urc_p->readInt32(&network_urc_solSigStren.rscp);
193 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800194 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
195 {
rjw415439a2022-03-02 15:23:11 +0800196 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800197 }else{
rjw415439a2022-03-02 15:23:11 +0800198 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800199 }
rjw415439a2022-03-02 15:23:11 +0800200 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800201 {
202 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800203 }
rjw415439a2022-03-02 15:23:11 +0800204 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
205 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
206 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
207 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
208 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
209 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
210 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
211 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800212 if(NR_sum != 0)
213 {
rjw415439a2022-03-02 15:23:11 +0800214 network_urc_solSigStren.nr_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800215 }else{
rjw415439a2022-03-02 15:23:11 +0800216 network_urc_solSigStren.nr_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800217 }
rjw415439a2022-03-02 15:23:11 +0800218 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800219 {
220 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 +0800221 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
222 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800223 }
rjw415439a2022-03-02 15:23:11 +0800224 network_wait_urc_id = urc_id;
225 send_signal_changes();
rjw2183a5f2022-01-18 18:30:37 +0800226 }
227 }
228 }
229 }
230}
231
232
233int lynq_server_socket_start()
234{
rjw415439a2022-03-02 15:23:11 +0800235 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
236 if(-1 == network_sock_fd)
rjw2183a5f2022-01-18 18:30:37 +0800237 {
238 LYERRLOG("socket open error");
239 return -1;
240 }
rjw415439a2022-03-02 15:23:11 +0800241 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800242
rjw415439a2022-03-02 15:23:11 +0800243 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
244 network_addr_serv.sin_family = AF_INET;
245 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
246 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
247 network_len_addr_serv = sizeof(network_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800248 return 0;
249}
250
251int lynq_urc_socket_start()
252{
253 pthread_t tid;
254 pthread_attr_t attr;
255 int on = 1;
rjw415439a2022-03-02 15:23:11 +0800256 network_urc_sock_fd = -1;
rjw2183a5f2022-01-18 18:30:37 +0800257 int ret = 0;
rjw415439a2022-03-02 15:23:11 +0800258 network_len_urc_addr_serv = sizeof(sockaddr_in);
259 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
260 if (network_urc_sock_fd <0){
rjw2183a5f2022-01-18 18:30:37 +0800261 LYERRLOG("urc socket error");
262 ret = -1;
263 }
rjw415439a2022-03-02 15:23:11 +0800264 network_urc_addr_serv.sin_family = AF_INET;
265 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
266 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw2183a5f2022-01-18 18:30:37 +0800267 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjw415439a2022-03-02 15:23:11 +0800268 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw2183a5f2022-01-18 18:30:37 +0800269 if(ret <0)
270 {
271 LYERRLOG("urc socket set error");
272 return -1;
273 }
rjw415439a2022-03-02 15:23:11 +0800274 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw2183a5f2022-01-18 18:30:37 +0800275 if(ret <0)
276 {
277 LYERRLOG("urc socket bind error");
278 return -1;
279 }
280 pthread_attr_init(&attr);
281 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjw415439a2022-03-02 15:23:11 +0800282 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800283 if(ret <0)
284 {
285 LYERRLOG("urc pthread create error");
286 return -1;
287 }
288 LYINFLOG("urc start success");
289 return 0;
290}
291
292int lynq_network_init(int utoken){
rjw267d8ee2022-03-15 09:21:29 +0800293 if(g_lynq_network_init_flag == 1)
294 {
295 LYERRLOG("init twice is not allowed");
296 return -1;
297 }
298 g_lynq_network_init_flag = 1;
rjw2183a5f2022-01-18 18:30:37 +0800299 if(utoken <0){
300 LYERRLOG("init err");
301 return -1;
302 }
rjw415439a2022-03-02 15:23:11 +0800303 network_urc_status = 1;
304 network_Global_uToken = utoken;
rjw2183a5f2022-01-18 18:30:37 +0800305 LYLOGSET(LOG_INFO);
306 LYLOGEINIT(USER_LOG_TAG);
307 int ret = 0;
308
309 ret = lynq_server_socket_start();
310 if(ret !=0)
311 {
312 LYERRLOG("init socket client fail!!!");
313 return -1;
314 }
315 ret = lynq_urc_socket_start();
316 if(ret != 0)
317 {
318 LYERRLOG("init socket urc fail!!!");
319 return -1;
320 }
rjw32f04c22022-05-25 09:10:33 +0800321 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw2183a5f2022-01-18 18:30:37 +0800322 return 0;
323}
324
325int strUpper(char * str)
326{
327 int i=0;
328 while(1)
329 {
330 if(str[i]=='\0')
331 {
332 break;
333 }
334 if(str[i]>='a'&&str[i]<='z')
335 {
336 str[i]=str[i]-32;
337 }
338 i++;
339 }
340 return 0;
341}
342
rjw9ffd2c42022-05-31 17:31:28 +0800343int copyCellInfoList(Parcel &p,int *cellinfo,int *tac,int *earfcn)
rjw2183a5f2022-01-18 18:30:37 +0800344{
345 int32_t v=0;
346 int64_t v6=0;
347 if(NULL == cellinfo)
348 {
349 LYERRLOG("*cellinfo error");
350 }
351
352 int nothing = 0;
353 p.readInt32(&v);
354 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
355 p.readInt32(&nothing);
356 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
357 // p.readInt32(&cellinfo->cellinfo.registered);
358 p.readInt32(&v);
359 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
360 p.readInt64(&v6);
361 // cellinfo->cellinfo.timeStamp = v6;
362 switch(cellinfoType) {
363 case RIL_CELL_INFO_TYPE_GSM: {
364 p.readInt32(&nothing);
365 p.readInt32(&nothing);
366 p.readInt32(&nothing);
367 p.readInt32(cellinfo);
368 p.readInt32(&nothing);
369 p.readInt32(&nothing);
370 p.readInt32(&nothing);
rjw337d0472022-05-17 16:30:32 +0800371 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800372 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800373 break;
374 }
375 case RIL_CELL_INFO_TYPE_WCDMA: {
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 p.readInt32(&nothing);
379 p.readInt32(cellinfo);
380 p.readInt32(&nothing);
381 p.readInt32(&nothing);
382 p.readInt32(&nothing);
rjw079dac12022-05-17 17:58:35 +0800383 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800384 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800385 break;
386 }
387 case RIL_CELL_INFO_TYPE_CDMA: {
388 p.readInt32(&nothing);
389 p.readInt32(&nothing);
390 p.readInt32(&nothing);
391 p.readInt32(&nothing);
392 p.readInt32(&nothing);
393 p.readInt32(&nothing);
394 p.readInt32(&nothing);
395 p.readInt32(&nothing);
396 p.readInt32(&nothing);
397 p.readInt32(&nothing);
398 cellinfo = 0;
rjw337d0472022-05-17 16:30:32 +0800399 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800400 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800401 break;
402 }
403 case RIL_CELL_INFO_TYPE_LTE: {
404 p.readInt32(&nothing);
405 p.readInt32(&nothing);
406 p.readInt32(cellinfo);
407 p.readInt32(&nothing);
rjw337d0472022-05-17 16:30:32 +0800408 p.readInt32(tac);
rjw9ffd2c42022-05-31 17:31:28 +0800409 p.readInt32(earfcn);
rjw2183a5f2022-01-18 18:30:37 +0800410 p.readInt32(&nothing);
411 p.readInt32(&nothing);
412 p.readInt32(&nothing);
413 p.readInt32(&nothing);
414 p.readInt32(&nothing);
415 p.readInt32(&nothing);
416 break;
417 }
418 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
419 p.readInt32(&nothing);
420 p.readInt32(&nothing);
421 p.readInt32(&nothing);
422 p.readInt32(cellinfo);
423 p.readInt32(&nothing);
424 p.readInt32(&nothing);
rjw9ffd2c42022-05-31 17:31:28 +0800425 tac = &nothing;
426 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800427 break;
428 }
429 case RIL_CELL_INFO_TYPE_NR: {
430 p.readInt32(&nothing);
431 p.readInt32(&nothing);
432 p.readInt32(cellinfo);
433 p.readInt32(&nothing);
rjw337d0472022-05-17 16:30:32 +0800434 p.readInt32(tac);
rjw9ffd2c42022-05-31 17:31:28 +0800435 p.readInt32(earfcn);
rjw2183a5f2022-01-18 18:30:37 +0800436 p.readInt32(&nothing);
437 p.readInt32(&nothing);
438 p.readInt32(&nothing);
439 p.readInt32(&nothing);
440 p.readInt32(&nothing);
441 p.readInt32(&nothing);
442 break;
443 }
444 }
445 LYINFLOG("CID in fUNC :%d",*cellinfo);
rjw9ffd2c42022-05-31 17:31:28 +0800446 LYINFLOG("tac in fUNC :%d",*tac);
447 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw2183a5f2022-01-18 18:30:37 +0800448 return 0;
449}
450
451int lynq_network_deinit(void){
rjw267d8ee2022-03-15 09:21:29 +0800452 if (g_lynq_network_init_flag == 0)
453 {
454 LYERRLOG("deinit twice is not allowed");
455 return -1;
456 }
457 if (network_sock_fd > 0)
458 {
459 close(network_sock_fd);
460 }
461 g_lynq_network_init_flag = 0;
rjw415439a2022-03-02 15:23:11 +0800462 network_urc_status = 0;
rjw2183a5f2022-01-18 18:30:37 +0800463 return 0;
464}
465
466static char * lynqStrdupReadString(Parcel &p) {
467 size_t stringlen;
468 const char16_t *s16;
469
470 s16 = p.readString16Inplace(&stringlen);
471 return strndup16to8(s16, stringlen);
472}
473
474int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
475{
476 int ret = -1;
477 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
478 return ret;
479 int send_num = 0;
480 int recv_num = 0;
481 int num = 0;
482 lynq_client_t client_t;
483 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjwaae473f2022-01-25 14:57:53 +0800484 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800485 memset(&client_t,0,sizeof(client_t));
486 client_t.request = RIL_REQUEST_OPERATOR;
487 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800488 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800489 memset(client_t.param,0,sizeof(client_t.param));
490
rjw32f04c22022-05-25 09:10:33 +0800491 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800492 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 +0800493 if(send_num<0)
494 {
495 LYERRLOG("sendto error:");
496 return ret;
497 }
498
499 //get data
rjw415439a2022-03-02 15:23:11 +0800500 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800501 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800502 if(recv_num == 0 ||recv_num <0)
503 {
504 LYERRLOG("recvfrom error");
505 return -1;
506 }
507 Parcel p;
508 p.setData((uint8_t *)res_data,sizeof(res_data));
509 p.setDataPosition(0);
510 if(p.dataAvail() > 0)
511 {
512 p.readInt32(&response.resp_type);
513 p.readInt32(&response.request);
514 p.readInt32(&response.slot_id);
515 p.readInt32(&response.error);
516 if(response.error != 0)
517 {
518 LYERRLOG("response return error");
519 return response.error;
520 }
521 p.readInt32(&num);
522 if(num == 0)
523 {
524 LYERRLOG("no paramters");
525 }else{
526 for(int i = 0; i<num;i++)
527 {
528 resp[i] = lynqStrdupReadString(p);
529 }
530 if(NULL != resp[0])
531 {
rjwaae473f2022-01-25 14:57:53 +0800532 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800533 }
534 if(NULL != resp[1])
535 {
rjwaae473f2022-01-25 14:57:53 +0800536 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800537 }
538 if(NULL != resp[2])
539 {
rjwaae473f2022-01-25 14:57:53 +0800540 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800541 }
542 }
543 }
544 return response.error;
545}
546
547int lynq_query_network_selection_mode(int *netselMode)
548{
549 int ret = -1;
550 if(NULL == netselMode)
551 return ret;
552 int send_num = 0;
553 int recv_num = 0;
554 int readnum = 0;
555 lynq_client_t client_t;
556 char res_data[LYNQ_REC_BUF] = {0};
557 memset(&client_t,0,sizeof(client_t));
558 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
559 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800560 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800561
562 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800563 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800564 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 +0800565 if(send_num<0)
566 {
567 LYERRLOG("sendto error:");
568 return -1;
569 }
570
571 //get data
rjw415439a2022-03-02 15:23:11 +0800572 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800573 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800574 if(recv_num == 0 ||recv_num <0)
575 {
576 LYERRLOG("recvfrom error");
577 return -1;
578 }
579 Parcel p;
580 p.setData((uint8_t *)res_data,sizeof(res_data));
581 p.setDataPosition(0);
582 if(p.dataAvail() > 0)
583 {
584 p.readInt32(&response.resp_type);
585 p.readInt32(&response.request);
586 p.readInt32(&response.slot_id);
587 p.readInt32(&response.error);
588 if(response.error != 0)
589 {
590 LYERRLOG("response return error");
591 return response.error;
592 }
593 p.readInt32(&readnum);
594 p.readInt32(netselMode);
595 }
596 return response.error;
597}
598
599int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
600{
601 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800602 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800603 return ret;
rjw7610e272022-02-24 13:37:11 +0800604 if(strlen(mode) == 0)
605 {
606 return ret;
607 }
rjw2183a5f2022-01-18 18:30:37 +0800608 int send_num = 0;
609 lynq_client_t client_t;
610 int recv_num = 0;
611 char res_data[LYNQ_REC_BUF] = {0};
612 memset(&client_t,0,sizeof(client_t));
613 if(!strcmp(mode,"Auto"))
614 {
615 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
616 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800617 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800618 memset(client_t.param,0,sizeof(client_t.param));
619 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800620 if(mccmnc == NULL)
621 {
622 LYERRLOG("mccmnc is NULL!!!");
623 return ret;
624 }
625 if(strlen(mccmnc) == 0)
626 {
627 LYERRLOG("mccmnc strlen is 0!!!");
628 return ret;
629 }
rjw2183a5f2022-01-18 18:30:37 +0800630 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
631 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800632 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800633 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800634 }else{
635 LYERRLOG("request error");
636 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800637 }
638
rjw32f04c22022-05-25 09:10:33 +0800639 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800640 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800641 if(send_num<0)
642 {
643 LYERRLOG("sendto error:");
644 return ret;
645 }
646
rjw415439a2022-03-02 15:23:11 +0800647 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800648 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800649 if(recv_num == 0 ||recv_num <0)
650 {
651 LYERRLOG("recvfrom error");
652 return -1;
653 }
654
655 Parcel p;
656 p.setData((uint8_t *)res_data,sizeof(res_data));
657 p.setDataPosition(0);
658 if(p.dataAvail() > 0)
659 {
660 p.readInt32(&response.resp_type);
661 p.readInt32(&response.request);
662 p.readInt32(&response.slot_id);
663 p.readInt32(&response.error);
664 }
665 return response.error;
666}
667
668int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
669{
670 int ret = -1;
671 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
672 return ret;
673 int send_num = 0;
674 int recv_num = 0;
675 char res_data[LYNQ_REC_BUF] = {0};
676 char *resp[128];
677 lynq_client_t client_t;
678 memset(&client_t,0,sizeof(client_t));
679 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
680 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800681 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800682 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800683 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800684 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 +0800685 if(send_num<0)
686 {
687 LYERRLOG("sendto error:");
688 return ret;
689 }
690
691 //get data
rjw415439a2022-03-02 15:23:11 +0800692 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800693 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800694 if(recv_num == 0 ||recv_num <0)
695 {
696 LYERRLOG("recvfrom error");
697 return -1;
698 }
699 Parcel p;
700 p.setData((uint8_t *)res_data,sizeof(res_data));
701 p.setDataPosition(0);
702 if(p.dataAvail() > 0)
703 {
704 p.readInt32(&response.resp_type);
705 p.readInt32(&response.request);
706 p.readInt32(&response.slot_id);
707 p.readInt32(&response.error);
708 if(response.error != 0)
709 {
710 LYERRLOG("response return error");
711 return response.error;
712 }
713 int num =p.readInt32();
714 if(num == 0)
715 {
716 LYERRLOG("no paramters");
717 }else{
718 for(int i = 0; i<num;i++)
719 {
720 resp[i] = lynqStrdupReadString(p);
721 }
722 if(NULL != resp[0])
723 {
rjwaae473f2022-01-25 14:57:53 +0800724 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800725 }
726 if(NULL != resp[1])
727 {
rjwaae473f2022-01-25 14:57:53 +0800728 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800729 }
730 if(NULL != resp[2])
731 {
rjwaae473f2022-01-25 14:57:53 +0800732 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800733 }
734 if(NULL != resp[3])
735 {
rjwaae473f2022-01-25 14:57:53 +0800736 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800737 }
738 }
739 }
740 return response.error;
741}
742
rjwb83f56b2022-04-01 15:00:26 +0800743int 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 +0800744{
745 int ret = -1;
rjw464875c2022-04-09 13:50:58 +0800746 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw2183a5f2022-01-18 18:30:37 +0800747 return ret;
748 int send_num = 0;
749 int recv_num = 0;
750 int num = 0;
751 char str[LYNQ_TYPE_BUF];
752 char res_data[LYNQ_REC_BUF] = {0};
rjw479d38b2022-01-22 14:10:42 +0800753 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800754 lynq_client_t client_t;
755 memset(&client_t,0,sizeof(client_t));
756 if(strlen(type)>LYNQ_TYPE_BUF)
757 {
758 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
759 }
760 memcpy(str,type,strlen(type)+1);
761 strUpper(str);
762 if(!strcmp(str,"VOICE"))
763 {
764 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
765 }else if(!strcmp(str,"DATA")){
766 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
767 }else if(!strcmp(str,"IMS")){
768 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
769 }else{
770 LYERRLOG("request error");
771 return ret;
772 }
773 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800774 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800775 memset(client_t.param,0,sizeof(client_t.param));
776
rjw32f04c22022-05-25 09:10:33 +0800777 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800778 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 +0800779 if(send_num<0)
780 {
781 LYERRLOG("sendto error:");
782 return ret;
783 }
784
785 //get data
rjw415439a2022-03-02 15:23:11 +0800786 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800787 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800788 if(recv_num == 0 ||recv_num <0)
789 {
790 LYERRLOG("recvfrom error");
791 return -1;
792 }
793 Parcel p;
794 p.setData((uint8_t *)res_data,sizeof(res_data));
795 p.setDataPosition(0);
796 if(p.dataAvail() > 0)
797 {
798 p.readInt32(&response.resp_type);
799 p.readInt32(&response.request);
800 p.readInt32(&response.slot_id);
801 p.readInt32(&response.error);
802 if(response.error != 0)
803 {
804 LYERRLOG("response return error");
805 return response.error;
806 }
807 if(!strcmp(str,"VOICE"))
808 {
809 p.readInt32(&num);
810 if(num == 15)
811 {
812 *regState = atoi(lynqStrdupReadString(p));
813 lynqStrdupReadString(p);
814 lynqStrdupReadString(p);
815 *netType = atoi(lynqStrdupReadString(p));
rjwb83f56b2022-04-01 15:00:26 +0800816 lynqStrdupReadString(p);
817 lynqStrdupReadString(p);
818 lynqStrdupReadString(p);
819 lynqStrdupReadString(p);
820 lynqStrdupReadString(p);
821 lynqStrdupReadString(p);
822 lynqStrdupReadString(p);
823 lynqStrdupReadString(p);
824 lynqStrdupReadString(p);
825 lynqStrdupReadString(p);
826 *netRejected = atoi(lynqStrdupReadString(p));
rjw2183a5f2022-01-18 18:30:37 +0800827 }
828 }else if(!strcmp(str,"DATA")){
829 p.readInt32(&num);
830 if(num == 11)
831 {
832 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800833 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800834 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800835
836 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800837 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800838 *netType = atoi(lynqStrdupReadString(p));
839 }
840
841 }else if(!strcmp(str,"IMS")){
842 p.readInt32(&num);
843 if(num == 2)
844 {
845 p.readInt32(imsRegState);
846 p.readInt32(radioTechFam);
847 }
848 }else{
849 LYERRLOG("request error");
850 return ret;
851 }
852 }
853 return response.error;
854}
855
856int lynq_query_prefferred_networktype(int *preNetType)
857{
858 int ret = -1;
859 int send_num = 0;
860 int recv_num = 0;
861 int num = 0;
862 char res_data[LYNQ_REC_BUF] = {0};
863 lynq_client_t client_t;
864 memset(&client_t,0,sizeof(client_t));
865 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
866 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800867 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800868 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800869 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800870 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 +0800871 if(send_num<0)
872 {
873 LYERRLOG("sendto error:");
874 return ret;
875 }
876
877 //get data
rjw415439a2022-03-02 15:23:11 +0800878 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800879 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800880 if(recv_num == 0 ||recv_num <0)
881 {
882 LYERRLOG("recvfrom error");
883 return -1;
884 }
885 Parcel p;
886 p.setData((uint8_t *)res_data,sizeof(res_data));
887 p.setDataPosition(0);
888 if(p.dataAvail() > 0)
889 {
890 p.readInt32(&response.resp_type);
891 p.readInt32(&response.request);
892 p.readInt32(&response.slot_id);
893 p.readInt32(&response.error);
894 if(response.error != 0)
895 {
896 LYERRLOG("response return error");
897 return response.error;
898 }
899 p.readInt32(&num);
900 p.readInt32(preNetType);
901 }
902 return response.error;
903}
904
905int lynq_set_prefferred_networktype(const int preffertype)
906{
907 int ret = -1;
908 if(preffertype < 0||preffertype >33)
909 return ret;
910 int send_num = 0;
911 lynq_client_t client_t;
912 int recv_num = 0;
913 char res_data[LYNQ_REC_BUF] = {0};
914 memset(&client_t,0,sizeof(client_t));
915 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
916 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800917 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800918 sprintf(client_t.param,"%d",preffertype);
rjw32f04c22022-05-25 09:10:33 +0800919 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800920 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 +0800921 if(send_num<0)
922 {
923 LYERRLOG("sendto error:");
924 return ret;
925 }
926
rjw415439a2022-03-02 15:23:11 +0800927 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800928 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800929 if(recv_num == 0 ||recv_num <0)
930 {
931 LYERRLOG("recvfrom error");
932 return -1;
933 }
934
935 Parcel p;
936 p.setData((uint8_t *)res_data,sizeof(res_data));
937 p.setDataPosition(0);
938 if(p.dataAvail() > 0)
939 {
940 p.readInt32(&response.resp_type);
941 p.readInt32(&response.request);
942 p.readInt32(&response.slot_id);
943 p.readInt32(&response.error);
944 }
945
946 return response.error;
947
948}
949
rjw9ffd2c42022-05-31 17:31:28 +0800950int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int earfcn[CELLINFO_MAX_NUM],int * realNum)
rjw2183a5f2022-01-18 18:30:37 +0800951{
952 int ret = -1;
953 if(NULL == realNum)
954 return ret;
955 int send_num = 0;
956 int recv_num = 0;
957 int num = 0;
958 char res_data[LYNQ_REC_BUF] = {0};
959 lynq_client_t client_t;
960 memset(&client_t,0,sizeof(client_t));
961 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
962 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800963 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800964 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800965 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800966 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 +0800967 if(send_num<0)
968 {
969 LYERRLOG("sendto error:");
970 return ret;
971 }
972
973 //get data
rjw415439a2022-03-02 15:23:11 +0800974 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +0800975 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +0800976 if(recv_num == 0 ||recv_num <0)
977 {
978 LYERRLOG("recvfrom error");
979 return -1;
980 }
981 Parcel p;
982 p.setData((uint8_t *)res_data,sizeof(res_data));
983 p.setDataPosition(0);
984 if(p.dataAvail() > 0)
985 {
986 p.readInt32(&response.resp_type);
987 p.readInt32(&response.request);
988 p.readInt32(&response.slot_id);
989 p.readInt32(&response.error);
990 if(response.error != 0)
991 {
992 LYERRLOG("response return error");
993 return response.error;
994 }
995 p.readInt32(&num);
996 LYINFLOG("cell info num:%d",num);
997 *realNum = num;
998 for(int i = 0;i<num;i++)
999 {
rjw9ffd2c42022-05-31 17:31:28 +08001000 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw2183a5f2022-01-18 18:30:37 +08001001 }
1002 }
1003 return response.error;
1004
1005}
1006
1007int lynq_set_unsol_cell_info_listrate(const int rate)
1008{
1009 int ret = -1;
1010 int send_num = 0;
1011 int recv_num = 0;
1012 char res_data[LYNQ_REC_BUF] = {0};
1013 lynq_client_t client_t;
1014 memset(&client_t,0,sizeof(client_t));
1015 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1016 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001017 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001018 sprintf(client_t.param,"%d",rate);
rjw32f04c22022-05-25 09:10:33 +08001019 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001020 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 +08001021 if(send_num<0)
1022 {
1023 LYERRLOG("sendto error:");
1024 return ret;
1025 }
1026
rjw32f04c22022-05-25 09:10:33 +08001027
rjw415439a2022-03-02 15:23:11 +08001028 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001029 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001030 if(recv_num == 0 ||recv_num <0)
1031 {
1032 LYERRLOG("recvfrom error");
1033 return -1;
1034 }
1035
1036 Parcel p;
1037 p.setData((uint8_t *)res_data,sizeof(res_data));
1038 p.setDataPosition(0);
1039 if(p.dataAvail() > 0)
1040 {
1041 p.readInt32(&response.resp_type);
1042 p.readInt32(&response.request);
1043 p.readInt32(&response.slot_id);
1044 p.readInt32(&response.error);
1045 }
1046
1047 return response.error;
1048}
1049
1050int lynq_set_band_mode(const int bandmode)
1051{
1052 int ret = -1;
1053 int send_num = 0;
1054 int recv_num = 0;
1055 char res_data[LYNQ_REC_BUF] = {0};
1056 lynq_client_t client_t;
1057 memset(&client_t,0,sizeof(client_t));
1058 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1059 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001060 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001061 sprintf(client_t.param,"%d",bandmode);
rjw32f04c22022-05-25 09:10:33 +08001062 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001063 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 +08001064 if(send_num<0)
1065 {
1066 LYERRLOG("sendto error:");
1067 return ret;
1068 }
1069
rjw415439a2022-03-02 15:23:11 +08001070 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001071 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001072 if(recv_num == 0 ||recv_num <0)
1073 {
1074 LYERRLOG("recvfrom error");
1075 return -1;
1076 }
1077
1078 Parcel p;
1079 p.setData((uint8_t *)res_data,sizeof(res_data));
1080 p.setDataPosition(0);
1081 if(p.dataAvail() > 0)
1082 {
1083 p.readInt32(&response.resp_type);
1084 p.readInt32(&response.request);
1085 p.readInt32(&response.slot_id);
1086 p.readInt32(&response.error);
1087 }
1088
1089 return response.error;
1090}
1091
1092int lynq_query_available_bandmode(int availBanMode[])
1093{
1094 int ret = -1;
1095 if(NULL == availBanMode)
1096 return ret;
1097 int send_num = 0;
1098 int recv_num = 0;
1099 int num = 0;
1100 int res = 0;
1101 char res_data[LYNQ_REC_BUF] = {0};
1102 lynq_client_t client_t;
1103 memset(&client_t,0,sizeof(client_t));
1104 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1105 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001106 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001107 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +08001108 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001109 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 +08001110 if(send_num<0)
1111 {
1112 LYERRLOG("sendto error:");
1113 return ret;
1114 }
1115
1116 //get data
rjw415439a2022-03-02 15:23:11 +08001117 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001118 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001119 if(recv_num == 0 ||recv_num <0)
1120 {
1121 LYERRLOG("recvfrom error");
1122 return -1;
1123 }
rjw7610e272022-02-24 13:37:11 +08001124 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001125 {
1126 availBanMode[i]=0;
1127 }
1128 Parcel p;
1129 p.setData((uint8_t *)res_data,sizeof(res_data));
1130 p.setDataPosition(0);
1131
1132 if(p.dataAvail() > 0)
1133 {
1134 p.readInt32(&response.resp_type);
1135 p.readInt32(&response.request);
1136 p.readInt32(&response.slot_id);
1137 p.readInt32(&response.error);
1138 if(response.error != 0)
1139 {
1140 LYERRLOG("response return error");
1141 return response.error;
1142 }
1143 p.readInt32(&num);
1144 LYINFLOG("num = %d",num);
1145 availBanMode[0] = num;
1146 for(int i=1 ;i<=num;i++)
1147 {
1148 p.readInt32(&res);
1149 availBanMode[i]=res;
1150 }
1151 }
1152
1153 return response.error;
1154}
1155
1156int lynq_radio_on(const int data)
1157{
1158 int ret = -1;
1159 if(data < 0)
1160 return ret;
1161 int send_num = 0;
1162 char res_data[LYNQ_REC_BUF] = {0};
1163 int recv_num = 0;
1164 lynq_client_t client_t;
1165 memset(&client_t,0,sizeof(client_t));
1166 client_t.request = RIL_REQUEST_RADIO_POWER;
1167 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001168 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001169 sprintf(client_t.param,"%d",data);
rjw32f04c22022-05-25 09:10:33 +08001170 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001171 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 +08001172 if(send_num<0)
1173 {
1174 LYERRLOG("sendto error:");
1175 return ret;
1176 }
1177
rjw415439a2022-03-02 15:23:11 +08001178 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001179 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001180 if(recv_num == 0 ||recv_num <0)
1181 {
1182 LYERRLOG("recvfrom error");
1183 return -1;
1184 }
1185
1186 Parcel p;
1187 p.setData((uint8_t *)res_data,sizeof(res_data));
1188 p.setDataPosition(0);
1189 if(p.dataAvail() > 0)
1190 {
1191 p.readInt32(&response.resp_type);
1192 p.readInt32(&response.request);
1193 p.readInt32(&response.slot_id);
1194 p.readInt32(&response.error);
1195 }
1196
1197 return response.error;
1198}
1199
1200int lynq_query_radio_tech(int* radioTech)
1201{
1202 int ret = -1;
1203 if(NULL == radioTech)
1204 return ret;
1205 int send_num = 0;
1206 int recv_num = 0;
1207 int num = 0;
1208 char res_data[LYNQ_REC_BUF] = {0};
1209 lynq_client_t client_t;
1210 memset(&client_t,0,sizeof(client_t));
1211 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1212 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001213 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001214 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +08001215 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001216 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 +08001217 if(send_num<0)
1218 {
1219 LYERRLOG("sendto error:");
1220 return ret;
1221 }
1222
rjw415439a2022-03-02 15:23:11 +08001223 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001224 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001225 if(recv_num == 0 ||recv_num <0)
1226 {
1227 LYERRLOG("recvfrom error");
1228 return -1;
1229 }
1230 Parcel p;
1231 p.setData((uint8_t *)res_data,sizeof(res_data));
1232 p.setDataPosition(0);
1233
1234 if(p.dataAvail() > 0)
1235 {
1236 p.readInt32(&response.resp_type);
1237 p.readInt32(&response.request);
1238 p.readInt32(&response.slot_id);
1239 p.readInt32(&response.error);
1240 if(response.error != 0)
1241 {
1242 LYERRLOG("response return error");
1243 return response.error;
1244 }
1245 p.readInt32(&num);
1246 p.readInt32(radioTech);
1247 }
1248 return response.error;
1249}
1250
1251int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1252{
1253 int ret = -1;
1254 if(NULL == solSigStren)
1255 return ret;
1256 int send_num = 0;
1257 int recv_num = 0;
1258 int sum = 0;
1259 int LTE_signalstrength = 0;
1260 int WCDMA_signalstrength = 0;
1261 int none = 0;
1262
1263 char res_data[LYNQ_REC_BUF] = {0};
1264 lynq_client_t client_t;
1265 memset(&client_t,0,sizeof(client_t));
1266 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1267 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001268 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001269 memset(client_t.param,0,sizeof(client_t.param));
1270
rjw32f04c22022-05-25 09:10:33 +08001271 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001272 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 +08001273 if(send_num<0)
1274 {
1275 LYERRLOG("sendto error:");
1276 return ret;
1277 }
1278
1279 //get data
rjw415439a2022-03-02 15:23:11 +08001280 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001281 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw2183a5f2022-01-18 18:30:37 +08001282 if(recv_num == 0 ||recv_num <0)
1283 {
1284 LYERRLOG("recvfrom error");
1285 return -1;
1286 }
1287 Parcel p;
1288 p.setData((uint8_t *)res_data,sizeof(res_data));
1289 p.setDataPosition(0);
1290
1291 if(p.dataAvail() > 0)
1292 {
1293 p.readInt32(&response.resp_type);
1294 p.readInt32(&response.request);
1295 p.readInt32(&response.slot_id);
1296 p.readInt32(&response.error);
1297 if(response.error != 0)
1298 {
1299 LYERRLOG("response return error");
1300 return response.error;
1301 }
1302
1303 p.readInt32(&solSigStren->rssi);
1304 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1305 {
1306 solSigStren->gw_sig_valid = 1;
1307 }else{
1308 solSigStren->gw_sig_valid = 0;
1309 }
1310
1311 p.readInt32(&none);
1312 p.readInt32(&none);
1313 p.readInt32(&none);
1314 p.readInt32(&none);
1315 p.readInt32(&none);
1316 p.readInt32(&none);
1317 p.readInt32(&none);
1318 p.readInt32(&LTE_signalstrength);
1319 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1320 p.readInt32(&solSigStren->rsrp);
1321 p.readInt32(&solSigStren->rsrq);
1322 p.readInt32(&solSigStren->rssnr);
1323 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1324 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1325 {
1326 solSigStren->lte_sig_valid = 1;
1327 }else{
1328 solSigStren->lte_sig_valid = 0;
1329 }
1330
1331 p.readInt32(&none);
1332 p.readInt32(&none);
1333 p.readInt32(&none);
1334 p.readInt32(&none);
1335 p.readInt32(&none);
1336 p.readInt32(&WCDMA_signalstrength);
1337 p.readInt32(&none);
1338 p.readInt32(&solSigStren->rscp);
1339 p.readInt32(&solSigStren->ecno);
1340 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1341 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1342 {
rjw479d38b2022-01-22 14:10:42 +08001343 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001344 }else{
rjw479d38b2022-01-22 14:10:42 +08001345 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001346 }
rjw479d38b2022-01-22 14:10:42 +08001347 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001348 p.readInt32(&solSigStren->ssRsrp);
1349 p.readInt32(&solSigStren->ssRsrq);
1350 p.readInt32(&solSigStren->ssSinr);
1351 p.readInt32(&solSigStren->csiRsrp);
1352 p.readInt32(&solSigStren->csiRsrq);
1353 p.readInt32(&solSigStren->csiSinr);
1354 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1355 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1356 if(sum != 0)
1357 {
1358 solSigStren->nr_sig_valid = 1;
1359 }else{
1360 LYERRLOG("None of NR signal info");
1361 }
1362 }
1363 return response.error;
1364}
rjw415439a2022-03-02 15:23:11 +08001365
rjwc3e81b82022-03-10 11:04:24 +08001366int lynq_set_ims(const int ims_mode)
1367{
1368 int ret = -1;
1369 if (ims_mode < 0 || ims_mode > 1)
1370 {
1371 LYERRLOG("incoming ims_mode error");
1372 return ret;
1373 }
1374 int send_num = 0;
1375 char res_data[LYNQ_REC_BUF] = {0};
1376 int recv_num = 0;
1377 lynq_client_t client_t;
1378
1379 memset(&client_t,0,sizeof(client_t));
1380 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1381 client_t.paramLen = 1;
1382 client_t.uToken = network_Global_uToken;
1383 sprintf(client_t.param,"%d",ims_mode);
rjw32f04c22022-05-25 09:10:33 +08001384 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwc3e81b82022-03-10 11:04:24 +08001385 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1386 if (send_num<0)
1387 {
1388 LYERRLOG("sendto error:");
1389 return ret;
1390 }
1391
1392 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw32f04c22022-05-25 09:10:33 +08001393 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjwc3e81b82022-03-10 11:04:24 +08001394 if (recv_num == 0 || recv_num < 0)
1395 {
1396 LYERRLOG("recvfrom error");
1397 return -1;
1398 }
1399
1400 Parcel p;
1401 p.setData((uint8_t *)res_data,sizeof(res_data));
1402 p.setDataPosition(0);
1403 if (p.dataAvail() > 0)
1404 {
1405 p.readInt32(&response.resp_type);
1406 p.readInt32(&response.request);
1407 p.readInt32(&response.slot_id);
1408 p.readInt32(&response.error);
1409 }
1410
1411 return response.error;
1412}
1413
1414
rjw415439a2022-03-02 15:23:11 +08001415/*Used to wait for an update signal*/
1416int lynq_wait_signalchanges(int *handle)
1417{
1418 LYDBGLOG("start wait signalchanges info");
1419 if(NULL == handle)
1420 {
1421 LYERRLOG("illegal input");
1422 return -1;
1423 }
1424 wait_signal_changes();
1425 LYDBGLOG("get signalchanges");
1426 *handle = network_wait_urc_id;
1427 return 0;
1428}
1429/*Used to get urc info*/
1430int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1431{
1432 LYDBGLOG("start get urc info");
1433 if(handle != 1002&&handle != 1009)
1434 {
1435 LYINFLOG("invalid handle!!!");
1436 return -1;
1437 }
1438 if(NULL == solSigStren && NULL == slot_id)
1439 {
1440 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1441 return -1;
1442 }
1443 switch(handle)
1444 {
1445 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1446 {
1447 LYDBGLOG("get state update to VOICE");
1448 *slot_id = network_urc_slot_id;
1449 LYINFLOG("slot_id = %d",network_urc_slot_id);
1450 }
1451 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1452 {
1453 LYDBGLOG("get state update to signal info");
1454 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1455 solSigStren->rssi = network_urc_solSigStren.rssi;
1456 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1457 solSigStren->rscp = network_urc_solSigStren.rscp;
1458 solSigStren->ecno = network_urc_solSigStren.ecno;
1459 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1460 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1461 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1462 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1463 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1464 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1465 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1466 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1467 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1468 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1469 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1470 }
1471 }
1472 return 0;
rjw079dac12022-05-17 17:58:35 +08001473}