blob: a67b4dd3fd0110ed9aa40bc1bd4479f6d79d86a4 [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
rjw9c301f82022-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
rjw7e50cd32022-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
rjwbc8a05f2022-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
rjw7e50cd32022-01-18 18:30:37 +0800113void *thread_urc_recv(void *p)
114{
115 Parcel *urc_p =NULL;
116 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-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;
rjw7e50cd32022-01-18 18:30:37 +0800122 int urc_LTE_signalstrength = 0;
123 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800124 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800125 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800126 {
127 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-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);
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800141 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800142 switch(urc_id)
143 {
144 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
145 {
rjwbc8a05f2022-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();
rjw7e50cd32022-01-18 18:30:37 +0800149 }
150 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
151 {
rjwbc8a05f2022-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))
rjw7e50cd32022-01-18 18:30:37 +0800154 {
rjwbc8a05f2022-03-02 15:23:11 +0800155 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800156 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800157 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800158 }
rjwbc8a05f2022-03-02 15:23:11 +0800159 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800160 {
rjwbc8a05f2022-03-02 15:23:11 +0800161 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800162 }
rjw7e50cd32022-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);
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800175 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
176 {
rjwbc8a05f2022-03-02 15:23:11 +0800177 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800178 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800179 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800180 }
rjwbc8a05f2022-03-02 15:23:11 +0800181 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800182 {
183 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
184 }
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800192 urc_p->readInt32(&network_urc_solSigStren.rscp);
193 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800194 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
195 {
rjwbc8a05f2022-03-02 15:23:11 +0800196 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800197 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800198 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800199 }
rjwbc8a05f2022-03-02 15:23:11 +0800200 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800201 {
202 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800203 }
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800212 if(NR_sum != 0)
213 {
rjwbc8a05f2022-03-02 15:23:11 +0800214 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800215 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800216 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800217 }
rjwbc8a05f2022-03-02 15:23:11 +0800218 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-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",\
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800223 }
rjwbc8a05f2022-03-02 15:23:11 +0800224 network_wait_urc_id = urc_id;
225 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800226 }
227 }
228 }
229 }
230}
231
232
233int lynq_server_socket_start()
234{
rjwbc8a05f2022-03-02 15:23:11 +0800235 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
236 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800237 {
238 LYERRLOG("socket open error");
239 return -1;
240 }
rjwbc8a05f2022-03-02 15:23:11 +0800241 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800242
rjwbc8a05f2022-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);
rjw7e50cd32022-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;
rjwbc8a05f2022-03-02 15:23:11 +0800256 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800257 int ret = 0;
rjwbc8a05f2022-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){
rjw7e50cd32022-01-18 18:30:37 +0800261 LYERRLOG("urc socket error");
262 ret = -1;
263 }
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +0800267 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800268 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800269 if(ret <0)
270 {
271 LYERRLOG("urc socket set error");
272 return -1;
273 }
rjwbc8a05f2022-03-02 15:23:11 +0800274 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-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);
rjwbc8a05f2022-03-02 15:23:11 +0800282 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-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){
rjw22947c22022-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;
rjw7e50cd32022-01-18 18:30:37 +0800299 if(utoken <0){
300 LYERRLOG("init err");
301 return -1;
302 }
rjwbc8a05f2022-03-02 15:23:11 +0800303 network_urc_status = 1;
304 network_Global_uToken = utoken;
rjw7e50cd32022-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 }
rjw9c301f82022-05-25 09:10:33 +0800321 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw7e50cd32022-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
rjw61974852022-05-17 16:30:32 +0800343int copyCellInfoList(Parcel &p,int *cellinfo,int *tac)
rjw7e50cd32022-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);
rjw61974852022-05-17 16:30:32 +0800371 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800372 break;
373 }
374 case RIL_CELL_INFO_TYPE_WCDMA: {
375 p.readInt32(&nothing);
376 p.readInt32(&nothing);
377 p.readInt32(&nothing);
378 p.readInt32(cellinfo);
379 p.readInt32(&nothing);
380 p.readInt32(&nothing);
381 p.readInt32(&nothing);
rjw4200a082022-05-17 17:58:35 +0800382 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800383 break;
384 }
385 case RIL_CELL_INFO_TYPE_CDMA: {
386 p.readInt32(&nothing);
387 p.readInt32(&nothing);
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 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800397 tac = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800398 break;
399 }
400 case RIL_CELL_INFO_TYPE_LTE: {
401 p.readInt32(&nothing);
402 p.readInt32(&nothing);
403 p.readInt32(cellinfo);
404 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800405 p.readInt32(tac);
rjw7e50cd32022-01-18 18:30:37 +0800406 p.readInt32(&nothing);
407 p.readInt32(&nothing);
408 p.readInt32(&nothing);
409 p.readInt32(&nothing);
410 p.readInt32(&nothing);
411 p.readInt32(&nothing);
412 break;
413 }
414 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
415 p.readInt32(&nothing);
416 p.readInt32(&nothing);
417 p.readInt32(&nothing);
418 p.readInt32(cellinfo);
419 p.readInt32(&nothing);
420 p.readInt32(&nothing);
421 break;
422 }
423 case RIL_CELL_INFO_TYPE_NR: {
424 p.readInt32(&nothing);
425 p.readInt32(&nothing);
426 p.readInt32(cellinfo);
427 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800428 p.readInt32(tac);
rjw7e50cd32022-01-18 18:30:37 +0800429 p.readInt32(&nothing);
430 p.readInt32(&nothing);
431 p.readInt32(&nothing);
432 p.readInt32(&nothing);
433 p.readInt32(&nothing);
434 p.readInt32(&nothing);
435 p.readInt32(&nothing);
436 break;
437 }
438 }
439 LYINFLOG("CID in fUNC :%d",*cellinfo);
440 return 0;
441}
442
443int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800444 if (g_lynq_network_init_flag == 0)
445 {
446 LYERRLOG("deinit twice is not allowed");
447 return -1;
448 }
449 if (network_sock_fd > 0)
450 {
451 close(network_sock_fd);
452 }
453 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800454 network_urc_status = 0;
rjw7e50cd32022-01-18 18:30:37 +0800455 return 0;
456}
457
458static char * lynqStrdupReadString(Parcel &p) {
459 size_t stringlen;
460 const char16_t *s16;
461
462 s16 = p.readString16Inplace(&stringlen);
463 return strndup16to8(s16, stringlen);
464}
465
466int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
467{
468 int ret = -1;
469 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
470 return ret;
471 int send_num = 0;
472 int recv_num = 0;
473 int num = 0;
474 lynq_client_t client_t;
475 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjw02a50422022-01-25 14:57:53 +0800476 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800477 memset(&client_t,0,sizeof(client_t));
478 client_t.request = RIL_REQUEST_OPERATOR;
479 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800480 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800481 memset(client_t.param,0,sizeof(client_t.param));
482
rjw9c301f82022-05-25 09:10:33 +0800483 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800484 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 +0800485 if(send_num<0)
486 {
487 LYERRLOG("sendto error:");
488 return ret;
489 }
490
491 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800492 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800493 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800494 if(recv_num == 0 ||recv_num <0)
495 {
496 LYERRLOG("recvfrom error");
497 return -1;
498 }
499 Parcel p;
500 p.setData((uint8_t *)res_data,sizeof(res_data));
501 p.setDataPosition(0);
502 if(p.dataAvail() > 0)
503 {
504 p.readInt32(&response.resp_type);
505 p.readInt32(&response.request);
506 p.readInt32(&response.slot_id);
507 p.readInt32(&response.error);
508 if(response.error != 0)
509 {
510 LYERRLOG("response return error");
511 return response.error;
512 }
513 p.readInt32(&num);
514 if(num == 0)
515 {
516 LYERRLOG("no paramters");
517 }else{
518 for(int i = 0; i<num;i++)
519 {
520 resp[i] = lynqStrdupReadString(p);
521 }
522 if(NULL != resp[0])
523 {
rjw02a50422022-01-25 14:57:53 +0800524 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800525 }
526 if(NULL != resp[1])
527 {
rjw02a50422022-01-25 14:57:53 +0800528 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800529 }
530 if(NULL != resp[2])
531 {
rjw02a50422022-01-25 14:57:53 +0800532 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800533 }
534 }
535 }
536 return response.error;
537}
538
539int lynq_query_network_selection_mode(int *netselMode)
540{
541 int ret = -1;
542 if(NULL == netselMode)
543 return ret;
544 int send_num = 0;
545 int recv_num = 0;
546 int readnum = 0;
547 lynq_client_t client_t;
548 char res_data[LYNQ_REC_BUF] = {0};
549 memset(&client_t,0,sizeof(client_t));
550 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
551 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800552 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800553
554 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800555 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800556 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 +0800557 if(send_num<0)
558 {
559 LYERRLOG("sendto error:");
560 return -1;
561 }
562
563 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800564 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800565 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800566 if(recv_num == 0 ||recv_num <0)
567 {
568 LYERRLOG("recvfrom error");
569 return -1;
570 }
571 Parcel p;
572 p.setData((uint8_t *)res_data,sizeof(res_data));
573 p.setDataPosition(0);
574 if(p.dataAvail() > 0)
575 {
576 p.readInt32(&response.resp_type);
577 p.readInt32(&response.request);
578 p.readInt32(&response.slot_id);
579 p.readInt32(&response.error);
580 if(response.error != 0)
581 {
582 LYERRLOG("response return error");
583 return response.error;
584 }
585 p.readInt32(&readnum);
586 p.readInt32(netselMode);
587 }
588 return response.error;
589}
590
591int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
592{
593 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800594 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800595 return ret;
rjw78d04502022-02-24 13:37:11 +0800596 if(strlen(mode) == 0)
597 {
598 return ret;
599 }
rjw7e50cd32022-01-18 18:30:37 +0800600 int send_num = 0;
601 lynq_client_t client_t;
602 int recv_num = 0;
603 char res_data[LYNQ_REC_BUF] = {0};
604 memset(&client_t,0,sizeof(client_t));
605 if(!strcmp(mode,"Auto"))
606 {
607 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
608 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800609 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800610 memset(client_t.param,0,sizeof(client_t.param));
611 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800612 if(mccmnc == NULL)
613 {
614 LYERRLOG("mccmnc is NULL!!!");
615 return ret;
616 }
617 if(strlen(mccmnc) == 0)
618 {
619 LYERRLOG("mccmnc strlen is 0!!!");
620 return ret;
621 }
rjw7e50cd32022-01-18 18:30:37 +0800622 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
623 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800624 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800625 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800626 }else{
627 LYERRLOG("request error");
628 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800629 }
630
rjw9c301f82022-05-25 09:10:33 +0800631 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800632 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 +0800633 if(send_num<0)
634 {
635 LYERRLOG("sendto error:");
636 return ret;
637 }
638
rjwbc8a05f2022-03-02 15:23:11 +0800639 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800640 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800641 if(recv_num == 0 ||recv_num <0)
642 {
643 LYERRLOG("recvfrom error");
644 return -1;
645 }
646
647 Parcel p;
648 p.setData((uint8_t *)res_data,sizeof(res_data));
649 p.setDataPosition(0);
650 if(p.dataAvail() > 0)
651 {
652 p.readInt32(&response.resp_type);
653 p.readInt32(&response.request);
654 p.readInt32(&response.slot_id);
655 p.readInt32(&response.error);
656 }
657 return response.error;
658}
659
660int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
661{
662 int ret = -1;
663 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
664 return ret;
665 int send_num = 0;
666 int recv_num = 0;
667 char res_data[LYNQ_REC_BUF] = {0};
668 char *resp[128];
669 lynq_client_t client_t;
670 memset(&client_t,0,sizeof(client_t));
671 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
672 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800673 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800674 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800675 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800676 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 +0800677 if(send_num<0)
678 {
679 LYERRLOG("sendto error:");
680 return ret;
681 }
682
683 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800684 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800685 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800686 if(recv_num == 0 ||recv_num <0)
687 {
688 LYERRLOG("recvfrom error");
689 return -1;
690 }
691 Parcel p;
692 p.setData((uint8_t *)res_data,sizeof(res_data));
693 p.setDataPosition(0);
694 if(p.dataAvail() > 0)
695 {
696 p.readInt32(&response.resp_type);
697 p.readInt32(&response.request);
698 p.readInt32(&response.slot_id);
699 p.readInt32(&response.error);
700 if(response.error != 0)
701 {
702 LYERRLOG("response return error");
703 return response.error;
704 }
705 int num =p.readInt32();
706 if(num == 0)
707 {
708 LYERRLOG("no paramters");
709 }else{
710 for(int i = 0; i<num;i++)
711 {
712 resp[i] = lynqStrdupReadString(p);
713 }
714 if(NULL != resp[0])
715 {
rjw02a50422022-01-25 14:57:53 +0800716 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800717 }
718 if(NULL != resp[1])
719 {
rjw02a50422022-01-25 14:57:53 +0800720 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800721 }
722 if(NULL != resp[2])
723 {
rjw02a50422022-01-25 14:57:53 +0800724 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800725 }
726 if(NULL != resp[3])
727 {
rjw02a50422022-01-25 14:57:53 +0800728 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800729 }
730 }
731 }
732 return response.error;
733}
734
rjw4544e132022-04-01 15:00:26 +0800735int 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 +0800736{
737 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800738 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800739 return ret;
740 int send_num = 0;
741 int recv_num = 0;
742 int num = 0;
743 char str[LYNQ_TYPE_BUF];
744 char res_data[LYNQ_REC_BUF] = {0};
rjwcdd83ae2022-01-22 14:10:42 +0800745 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800746 lynq_client_t client_t;
747 memset(&client_t,0,sizeof(client_t));
748 if(strlen(type)>LYNQ_TYPE_BUF)
749 {
750 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
751 }
752 memcpy(str,type,strlen(type)+1);
753 strUpper(str);
754 if(!strcmp(str,"VOICE"))
755 {
756 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
757 }else if(!strcmp(str,"DATA")){
758 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
759 }else if(!strcmp(str,"IMS")){
760 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
761 }else{
762 LYERRLOG("request error");
763 return ret;
764 }
765 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800766 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800767 memset(client_t.param,0,sizeof(client_t.param));
768
rjw9c301f82022-05-25 09:10:33 +0800769 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800770 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 +0800771 if(send_num<0)
772 {
773 LYERRLOG("sendto error:");
774 return ret;
775 }
776
777 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800778 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800779 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800780 if(recv_num == 0 ||recv_num <0)
781 {
782 LYERRLOG("recvfrom error");
783 return -1;
784 }
785 Parcel p;
786 p.setData((uint8_t *)res_data,sizeof(res_data));
787 p.setDataPosition(0);
788 if(p.dataAvail() > 0)
789 {
790 p.readInt32(&response.resp_type);
791 p.readInt32(&response.request);
792 p.readInt32(&response.slot_id);
793 p.readInt32(&response.error);
794 if(response.error != 0)
795 {
796 LYERRLOG("response return error");
797 return response.error;
798 }
799 if(!strcmp(str,"VOICE"))
800 {
801 p.readInt32(&num);
802 if(num == 15)
803 {
804 *regState = atoi(lynqStrdupReadString(p));
805 lynqStrdupReadString(p);
806 lynqStrdupReadString(p);
807 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800808 lynqStrdupReadString(p);
809 lynqStrdupReadString(p);
810 lynqStrdupReadString(p);
811 lynqStrdupReadString(p);
812 lynqStrdupReadString(p);
813 lynqStrdupReadString(p);
814 lynqStrdupReadString(p);
815 lynqStrdupReadString(p);
816 lynqStrdupReadString(p);
817 lynqStrdupReadString(p);
818 *netRejected = atoi(lynqStrdupReadString(p));
rjw7e50cd32022-01-18 18:30:37 +0800819 }
820 }else if(!strcmp(str,"DATA")){
821 p.readInt32(&num);
822 if(num == 11)
823 {
824 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800825 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800826 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800827
828 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800829 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800830 *netType = atoi(lynqStrdupReadString(p));
831 }
832
833 }else if(!strcmp(str,"IMS")){
834 p.readInt32(&num);
835 if(num == 2)
836 {
837 p.readInt32(imsRegState);
838 p.readInt32(radioTechFam);
839 }
840 }else{
841 LYERRLOG("request error");
842 return ret;
843 }
844 }
845 return response.error;
846}
847
848int lynq_query_prefferred_networktype(int *preNetType)
849{
850 int ret = -1;
851 int send_num = 0;
852 int recv_num = 0;
853 int num = 0;
854 char res_data[LYNQ_REC_BUF] = {0};
855 lynq_client_t client_t;
856 memset(&client_t,0,sizeof(client_t));
857 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
858 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800859 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800860 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800861 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800862 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 +0800863 if(send_num<0)
864 {
865 LYERRLOG("sendto error:");
866 return ret;
867 }
868
869 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800870 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800871 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800872 if(recv_num == 0 ||recv_num <0)
873 {
874 LYERRLOG("recvfrom error");
875 return -1;
876 }
877 Parcel p;
878 p.setData((uint8_t *)res_data,sizeof(res_data));
879 p.setDataPosition(0);
880 if(p.dataAvail() > 0)
881 {
882 p.readInt32(&response.resp_type);
883 p.readInt32(&response.request);
884 p.readInt32(&response.slot_id);
885 p.readInt32(&response.error);
886 if(response.error != 0)
887 {
888 LYERRLOG("response return error");
889 return response.error;
890 }
891 p.readInt32(&num);
892 p.readInt32(preNetType);
893 }
894 return response.error;
895}
896
897int lynq_set_prefferred_networktype(const int preffertype)
898{
899 int ret = -1;
900 if(preffertype < 0||preffertype >33)
901 return ret;
902 int send_num = 0;
903 lynq_client_t client_t;
904 int recv_num = 0;
905 char res_data[LYNQ_REC_BUF] = {0};
906 memset(&client_t,0,sizeof(client_t));
907 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
908 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800909 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800910 sprintf(client_t.param,"%d",preffertype);
rjw9c301f82022-05-25 09:10:33 +0800911 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800912 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 +0800913 if(send_num<0)
914 {
915 LYERRLOG("sendto error:");
916 return ret;
917 }
918
rjwbc8a05f2022-03-02 15:23:11 +0800919 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800920 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800921 if(recv_num == 0 ||recv_num <0)
922 {
923 LYERRLOG("recvfrom error");
924 return -1;
925 }
926
927 Parcel p;
928 p.setData((uint8_t *)res_data,sizeof(res_data));
929 p.setDataPosition(0);
930 if(p.dataAvail() > 0)
931 {
932 p.readInt32(&response.resp_type);
933 p.readInt32(&response.request);
934 p.readInt32(&response.slot_id);
935 p.readInt32(&response.error);
936 }
937
938 return response.error;
939
940}
941
rjw61974852022-05-17 16:30:32 +0800942int lynq_query_cell_info(int cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int * realNum)
rjw7e50cd32022-01-18 18:30:37 +0800943{
944 int ret = -1;
945 if(NULL == realNum)
946 return ret;
947 int send_num = 0;
948 int recv_num = 0;
949 int num = 0;
950 char res_data[LYNQ_REC_BUF] = {0};
951 lynq_client_t client_t;
952 memset(&client_t,0,sizeof(client_t));
953 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
954 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800955 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800956 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800957 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800958 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800959 if(send_num<0)
960 {
961 LYERRLOG("sendto error:");
962 return ret;
963 }
964
965 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800966 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800967 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800968 if(recv_num == 0 ||recv_num <0)
969 {
970 LYERRLOG("recvfrom error");
971 return -1;
972 }
973 Parcel p;
974 p.setData((uint8_t *)res_data,sizeof(res_data));
975 p.setDataPosition(0);
976 if(p.dataAvail() > 0)
977 {
978 p.readInt32(&response.resp_type);
979 p.readInt32(&response.request);
980 p.readInt32(&response.slot_id);
981 p.readInt32(&response.error);
982 if(response.error != 0)
983 {
984 LYERRLOG("response return error");
985 return response.error;
986 }
987 p.readInt32(&num);
988 LYINFLOG("cell info num:%d",num);
989 *realNum = num;
990 for(int i = 0;i<num;i++)
991 {
rjw61974852022-05-17 16:30:32 +0800992 copyCellInfoList(p,&cellinfo[i],&tac[i]);
rjw7e50cd32022-01-18 18:30:37 +0800993 }
994 }
995 return response.error;
996
997}
998
999int lynq_set_unsol_cell_info_listrate(const int rate)
1000{
1001 int ret = -1;
1002 int send_num = 0;
1003 int recv_num = 0;
1004 char res_data[LYNQ_REC_BUF] = {0};
1005 lynq_client_t client_t;
1006 memset(&client_t,0,sizeof(client_t));
1007 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1008 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001009 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001010 sprintf(client_t.param,"%d",rate);
rjw9c301f82022-05-25 09:10:33 +08001011 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001012 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 +08001013 if(send_num<0)
1014 {
1015 LYERRLOG("sendto error:");
1016 return ret;
1017 }
1018
rjw9c301f82022-05-25 09:10:33 +08001019
rjwbc8a05f2022-03-02 15:23:11 +08001020 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001021 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001022 if(recv_num == 0 ||recv_num <0)
1023 {
1024 LYERRLOG("recvfrom error");
1025 return -1;
1026 }
1027
1028 Parcel p;
1029 p.setData((uint8_t *)res_data,sizeof(res_data));
1030 p.setDataPosition(0);
1031 if(p.dataAvail() > 0)
1032 {
1033 p.readInt32(&response.resp_type);
1034 p.readInt32(&response.request);
1035 p.readInt32(&response.slot_id);
1036 p.readInt32(&response.error);
1037 }
1038
1039 return response.error;
1040}
1041
1042int lynq_set_band_mode(const int bandmode)
1043{
1044 int ret = -1;
1045 int send_num = 0;
1046 int recv_num = 0;
1047 char res_data[LYNQ_REC_BUF] = {0};
1048 lynq_client_t client_t;
1049 memset(&client_t,0,sizeof(client_t));
1050 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1051 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001052 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001053 sprintf(client_t.param,"%d",bandmode);
rjw9c301f82022-05-25 09:10:33 +08001054 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001055 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 +08001056 if(send_num<0)
1057 {
1058 LYERRLOG("sendto error:");
1059 return ret;
1060 }
1061
rjwbc8a05f2022-03-02 15:23:11 +08001062 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001063 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001064 if(recv_num == 0 ||recv_num <0)
1065 {
1066 LYERRLOG("recvfrom error");
1067 return -1;
1068 }
1069
1070 Parcel p;
1071 p.setData((uint8_t *)res_data,sizeof(res_data));
1072 p.setDataPosition(0);
1073 if(p.dataAvail() > 0)
1074 {
1075 p.readInt32(&response.resp_type);
1076 p.readInt32(&response.request);
1077 p.readInt32(&response.slot_id);
1078 p.readInt32(&response.error);
1079 }
1080
1081 return response.error;
1082}
1083
1084int lynq_query_available_bandmode(int availBanMode[])
1085{
1086 int ret = -1;
1087 if(NULL == availBanMode)
1088 return ret;
1089 int send_num = 0;
1090 int recv_num = 0;
1091 int num = 0;
1092 int res = 0;
1093 char res_data[LYNQ_REC_BUF] = {0};
1094 lynq_client_t client_t;
1095 memset(&client_t,0,sizeof(client_t));
1096 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1097 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001098 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001099 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001100 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001101 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 +08001102 if(send_num<0)
1103 {
1104 LYERRLOG("sendto error:");
1105 return ret;
1106 }
1107
1108 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001109 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001110 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001111 if(recv_num == 0 ||recv_num <0)
1112 {
1113 LYERRLOG("recvfrom error");
1114 return -1;
1115 }
rjw78d04502022-02-24 13:37:11 +08001116 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001117 {
1118 availBanMode[i]=0;
1119 }
1120 Parcel p;
1121 p.setData((uint8_t *)res_data,sizeof(res_data));
1122 p.setDataPosition(0);
1123
1124 if(p.dataAvail() > 0)
1125 {
1126 p.readInt32(&response.resp_type);
1127 p.readInt32(&response.request);
1128 p.readInt32(&response.slot_id);
1129 p.readInt32(&response.error);
1130 if(response.error != 0)
1131 {
1132 LYERRLOG("response return error");
1133 return response.error;
1134 }
1135 p.readInt32(&num);
1136 LYINFLOG("num = %d",num);
1137 availBanMode[0] = num;
1138 for(int i=1 ;i<=num;i++)
1139 {
1140 p.readInt32(&res);
1141 availBanMode[i]=res;
1142 }
1143 }
1144
1145 return response.error;
1146}
1147
1148int lynq_radio_on(const int data)
1149{
1150 int ret = -1;
1151 if(data < 0)
1152 return ret;
1153 int send_num = 0;
1154 char res_data[LYNQ_REC_BUF] = {0};
1155 int recv_num = 0;
1156 lynq_client_t client_t;
1157 memset(&client_t,0,sizeof(client_t));
1158 client_t.request = RIL_REQUEST_RADIO_POWER;
1159 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001160 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001161 sprintf(client_t.param,"%d",data);
rjw9c301f82022-05-25 09:10:33 +08001162 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001163 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 +08001164 if(send_num<0)
1165 {
1166 LYERRLOG("sendto error:");
1167 return ret;
1168 }
1169
rjwbc8a05f2022-03-02 15:23:11 +08001170 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001171 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001172 if(recv_num == 0 ||recv_num <0)
1173 {
1174 LYERRLOG("recvfrom error");
1175 return -1;
1176 }
1177
1178 Parcel p;
1179 p.setData((uint8_t *)res_data,sizeof(res_data));
1180 p.setDataPosition(0);
1181 if(p.dataAvail() > 0)
1182 {
1183 p.readInt32(&response.resp_type);
1184 p.readInt32(&response.request);
1185 p.readInt32(&response.slot_id);
1186 p.readInt32(&response.error);
1187 }
1188
1189 return response.error;
1190}
1191
1192int lynq_query_radio_tech(int* radioTech)
1193{
1194 int ret = -1;
1195 if(NULL == radioTech)
1196 return ret;
1197 int send_num = 0;
1198 int recv_num = 0;
1199 int num = 0;
1200 char res_data[LYNQ_REC_BUF] = {0};
1201 lynq_client_t client_t;
1202 memset(&client_t,0,sizeof(client_t));
1203 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1204 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001205 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001206 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001207 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001208 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 +08001209 if(send_num<0)
1210 {
1211 LYERRLOG("sendto error:");
1212 return ret;
1213 }
1214
rjwbc8a05f2022-03-02 15:23:11 +08001215 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001216 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001217 if(recv_num == 0 ||recv_num <0)
1218 {
1219 LYERRLOG("recvfrom error");
1220 return -1;
1221 }
1222 Parcel p;
1223 p.setData((uint8_t *)res_data,sizeof(res_data));
1224 p.setDataPosition(0);
1225
1226 if(p.dataAvail() > 0)
1227 {
1228 p.readInt32(&response.resp_type);
1229 p.readInt32(&response.request);
1230 p.readInt32(&response.slot_id);
1231 p.readInt32(&response.error);
1232 if(response.error != 0)
1233 {
1234 LYERRLOG("response return error");
1235 return response.error;
1236 }
1237 p.readInt32(&num);
1238 p.readInt32(radioTech);
1239 }
1240 return response.error;
1241}
1242
1243int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1244{
1245 int ret = -1;
1246 if(NULL == solSigStren)
1247 return ret;
1248 int send_num = 0;
1249 int recv_num = 0;
1250 int sum = 0;
1251 int LTE_signalstrength = 0;
1252 int WCDMA_signalstrength = 0;
1253 int none = 0;
1254
1255 char res_data[LYNQ_REC_BUF] = {0};
1256 lynq_client_t client_t;
1257 memset(&client_t,0,sizeof(client_t));
1258 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1259 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001260 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001261 memset(client_t.param,0,sizeof(client_t.param));
1262
rjw9c301f82022-05-25 09:10:33 +08001263 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001264 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 +08001265 if(send_num<0)
1266 {
1267 LYERRLOG("sendto error:");
1268 return ret;
1269 }
1270
1271 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001272 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001273 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001274 if(recv_num == 0 ||recv_num <0)
1275 {
1276 LYERRLOG("recvfrom error");
1277 return -1;
1278 }
1279 Parcel p;
1280 p.setData((uint8_t *)res_data,sizeof(res_data));
1281 p.setDataPosition(0);
1282
1283 if(p.dataAvail() > 0)
1284 {
1285 p.readInt32(&response.resp_type);
1286 p.readInt32(&response.request);
1287 p.readInt32(&response.slot_id);
1288 p.readInt32(&response.error);
1289 if(response.error != 0)
1290 {
1291 LYERRLOG("response return error");
1292 return response.error;
1293 }
1294
1295 p.readInt32(&solSigStren->rssi);
1296 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1297 {
1298 solSigStren->gw_sig_valid = 1;
1299 }else{
1300 solSigStren->gw_sig_valid = 0;
1301 }
1302
1303 p.readInt32(&none);
1304 p.readInt32(&none);
1305 p.readInt32(&none);
1306 p.readInt32(&none);
1307 p.readInt32(&none);
1308 p.readInt32(&none);
1309 p.readInt32(&none);
1310 p.readInt32(&LTE_signalstrength);
1311 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1312 p.readInt32(&solSigStren->rsrp);
1313 p.readInt32(&solSigStren->rsrq);
1314 p.readInt32(&solSigStren->rssnr);
1315 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1316 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1317 {
1318 solSigStren->lte_sig_valid = 1;
1319 }else{
1320 solSigStren->lte_sig_valid = 0;
1321 }
1322
1323 p.readInt32(&none);
1324 p.readInt32(&none);
1325 p.readInt32(&none);
1326 p.readInt32(&none);
1327 p.readInt32(&none);
1328 p.readInt32(&WCDMA_signalstrength);
1329 p.readInt32(&none);
1330 p.readInt32(&solSigStren->rscp);
1331 p.readInt32(&solSigStren->ecno);
1332 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1333 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1334 {
rjwcdd83ae2022-01-22 14:10:42 +08001335 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001336 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001337 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001338 }
rjwcdd83ae2022-01-22 14:10:42 +08001339 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001340 p.readInt32(&solSigStren->ssRsrp);
1341 p.readInt32(&solSigStren->ssRsrq);
1342 p.readInt32(&solSigStren->ssSinr);
1343 p.readInt32(&solSigStren->csiRsrp);
1344 p.readInt32(&solSigStren->csiRsrq);
1345 p.readInt32(&solSigStren->csiSinr);
1346 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1347 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1348 if(sum != 0)
1349 {
1350 solSigStren->nr_sig_valid = 1;
1351 }else{
1352 LYERRLOG("None of NR signal info");
1353 }
1354 }
1355 return response.error;
1356}
rjwbc8a05f2022-03-02 15:23:11 +08001357
rjw4a5a78d2022-03-10 11:04:24 +08001358int lynq_set_ims(const int ims_mode)
1359{
1360 int ret = -1;
1361 if (ims_mode < 0 || ims_mode > 1)
1362 {
1363 LYERRLOG("incoming ims_mode error");
1364 return ret;
1365 }
1366 int send_num = 0;
1367 char res_data[LYNQ_REC_BUF] = {0};
1368 int recv_num = 0;
1369 lynq_client_t client_t;
1370
1371 memset(&client_t,0,sizeof(client_t));
1372 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1373 client_t.paramLen = 1;
1374 client_t.uToken = network_Global_uToken;
1375 sprintf(client_t.param,"%d",ims_mode);
rjw9c301f82022-05-25 09:10:33 +08001376 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001377 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1378 if (send_num<0)
1379 {
1380 LYERRLOG("sendto error:");
1381 return ret;
1382 }
1383
1384 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001385 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001386 if (recv_num == 0 || recv_num < 0)
1387 {
1388 LYERRLOG("recvfrom error");
1389 return -1;
1390 }
1391
1392 Parcel p;
1393 p.setData((uint8_t *)res_data,sizeof(res_data));
1394 p.setDataPosition(0);
1395 if (p.dataAvail() > 0)
1396 {
1397 p.readInt32(&response.resp_type);
1398 p.readInt32(&response.request);
1399 p.readInt32(&response.slot_id);
1400 p.readInt32(&response.error);
1401 }
1402
1403 return response.error;
1404}
1405
1406
rjwbc8a05f2022-03-02 15:23:11 +08001407/*Used to wait for an update signal*/
1408int lynq_wait_signalchanges(int *handle)
1409{
1410 LYDBGLOG("start wait signalchanges info");
1411 if(NULL == handle)
1412 {
1413 LYERRLOG("illegal input");
1414 return -1;
1415 }
1416 wait_signal_changes();
1417 LYDBGLOG("get signalchanges");
1418 *handle = network_wait_urc_id;
1419 return 0;
1420}
1421/*Used to get urc info*/
1422int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1423{
1424 LYDBGLOG("start get urc info");
1425 if(handle != 1002&&handle != 1009)
1426 {
1427 LYINFLOG("invalid handle!!!");
1428 return -1;
1429 }
1430 if(NULL == solSigStren && NULL == slot_id)
1431 {
1432 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1433 return -1;
1434 }
1435 switch(handle)
1436 {
1437 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1438 {
1439 LYDBGLOG("get state update to VOICE");
1440 *slot_id = network_urc_slot_id;
1441 LYINFLOG("slot_id = %d",network_urc_slot_id);
1442 }
1443 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1444 {
1445 LYDBGLOG("get state update to signal info");
1446 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1447 solSigStren->rssi = network_urc_solSigStren.rssi;
1448 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1449 solSigStren->rscp = network_urc_solSigStren.rscp;
1450 solSigStren->ecno = network_urc_solSigStren.ecno;
1451 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1452 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1453 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1454 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1455 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1456 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1457 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1458 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1459 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1460 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1461 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1462 }
1463 }
1464 return 0;
rjw4200a082022-05-17 17:58:35 +08001465}