blob: 3b092e8cd35a3ffdab93e07cd36ac9387316a2c1 [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
lh3a26dd52022-07-01 04:44:57 -070096
97/**@brief get response and write msg to parcel
98* @param p [IN] <p>: the parcel
99*
100* @param time_out [IN] <time_out>: timeout.
101* < 0:use defult timeout(5s)
102* >=0:use this timeout
103* @return
104* 0:success
105* other:failure
106*/
107int get_response(Parcel &p,int time_out)
108{
109 int len = 0;
110 char recvline[LYNQ_REC_BUF];
111 bzero(recvline,LYNQ_REC_BUF);
112 LYINFLOG("get response");
113 /* receive data from server */
114 struct timeval timeOut;
115 timeOut.tv_sec = 5; //defualt 5s
116 timeOut.tv_usec = 0;
117 if(time_out >= 0)
118 {
119 LYINFLOG("use time out %d",time_out);
120 timeOut.tv_sec = time_out; //just set second
121 }
122 if(setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
123 {
124 LYERRLOG("time out setting failed");
125 return -1;
126 }
127 len = recvfrom(network_sock_fd,recvline,sizeof(recvline),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
128 if(len == -1 && errno == EAGAIN)
129 {
130 LYERRLOG("read error,maybe timeout: %s",strerror(errno));
131 return LYNQ_E_TIME_OUT;
132 }
133 if (recvline != NULL)
134 {
135 p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
136 p.setDataPosition(0);
137 }
138 return 0;
139}
140int JumpHeader(Parcel &p,int *resp_type,int *request,int *slot_id,int *error)
141{
142 LYINFLOG("jump header");
143 if(p.dataAvail() > 0)
144 {
145 p.readInt32(resp_type);
146 p.readInt32(request);
147 p.readInt32(slot_id);
148 p.readInt32(error);
149 return 0;
150 }
151 else
152 {
153 return -1;
154 }
155}
156
rjwbc8a05f2022-03-02 15:23:11 +0800157int wait_signal_changes()
158{
159 int ret = 0;
160 pthread_mutex_lock(&signal_state_change_mutex);
161 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
162 pthread_mutex_unlock(&signal_state_change_mutex);
163 return 0;
164}
165
166void send_signal_changes()
167{
168 pthread_mutex_lock(&signal_state_change_mutex);
169 pthread_cond_signal(&signal_state_change_cond);
170 pthread_mutex_unlock(&signal_state_change_mutex);
171 return;
172}
173
rjw7e50cd32022-01-18 18:30:37 +0800174void *thread_urc_recv(void *p)
175{
176 Parcel *urc_p =NULL;
177 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800178 int resp_type = -1;
179 int urc_id = -1;
180 int res = 0;
181 int none = 0;
182 int NR_sum = 0;
rjw7e50cd32022-01-18 18:30:37 +0800183 int urc_LTE_signalstrength = 0;
184 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800185 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800186 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800187 {
188 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-03-02 15:23:11 +0800189 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 +0800190 if(res<=0)
191 {
192 LYERRLOG("thread_urc_recv step2 fail:");
193 break;
194 }
195 urc_p = new Parcel();
196 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
197 urc_p->setDataPosition(0);
198 if(urc_p->dataAvail()>0)
199 {
200 urc_p->readInt32(&resp_type);
201 urc_p->readInt32(&urc_id);
rjwbc8a05f2022-03-02 15:23:11 +0800202 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800203 switch(urc_id)
204 {
205 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
206 {
rjwbc8a05f2022-03-02 15:23:11 +0800207 network_wait_urc_id = urc_id;
208 LYINFLOG("slot_id = %d",network_urc_slot_id);
209 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800210 }
211 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
212 {
rjwbc8a05f2022-03-02 15:23:11 +0800213 urc_p->readInt32(&network_urc_solSigStren.rssi);
214 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw7e50cd32022-01-18 18:30:37 +0800215 {
rjwbc8a05f2022-03-02 15:23:11 +0800216 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800217 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800218 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800219 }
rjwbc8a05f2022-03-02 15:23:11 +0800220 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800221 {
rjwbc8a05f2022-03-02 15:23:11 +0800222 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800223 }
rjw7e50cd32022-01-18 18:30:37 +0800224 urc_p->readInt32(&none);
225 urc_p->readInt32(&none);
226 urc_p->readInt32(&none);
227 urc_p->readInt32(&none);
228 urc_p->readInt32(&none);
229 urc_p->readInt32(&none);
230 urc_p->readInt32(&none);
231 urc_p->readInt32(&urc_LTE_signalstrength);
232 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjwbc8a05f2022-03-02 15:23:11 +0800233 urc_p->readInt32(&network_urc_solSigStren.rsrp);
234 urc_p->readInt32(&network_urc_solSigStren.rsrq);
235 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw7e50cd32022-01-18 18:30:37 +0800236 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
237 {
rjwbc8a05f2022-03-02 15:23:11 +0800238 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800239 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800240 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800241 }
rjwbc8a05f2022-03-02 15:23:11 +0800242 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800243 {
244 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
245 }
rjw7e50cd32022-01-18 18:30:37 +0800246 urc_p->readInt32(&none);
247 urc_p->readInt32(&none);
248 urc_p->readInt32(&none);
249 urc_p->readInt32(&none);
250 urc_p->readInt32(&none);
251 urc_p->readInt32(&urc_WCDMA_signalstrength);
252 urc_p->readInt32(&none);
rjwbc8a05f2022-03-02 15:23:11 +0800253 urc_p->readInt32(&network_urc_solSigStren.rscp);
254 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800255 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
256 {
rjwbc8a05f2022-03-02 15:23:11 +0800257 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800258 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800259 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800260 }
rjwbc8a05f2022-03-02 15:23:11 +0800261 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800262 {
263 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800264 }
rjwbc8a05f2022-03-02 15:23:11 +0800265 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
266 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
267 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
268 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
269 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
270 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
271 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
272 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800273 if(NR_sum != 0)
274 {
rjwbc8a05f2022-03-02 15:23:11 +0800275 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800276 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800277 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800278 }
rjwbc8a05f2022-03-02 15:23:11 +0800279 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800280 {
281 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 +0800282 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
283 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800284 }
rjwbc8a05f2022-03-02 15:23:11 +0800285 network_wait_urc_id = urc_id;
286 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800287 }
288 }
289 }
290 }
291}
292
293
294int lynq_server_socket_start()
295{
lh3a26dd52022-07-01 04:44:57 -0700296 struct timeval timeOut;
rjwbc8a05f2022-03-02 15:23:11 +0800297 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
298 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800299 {
300 LYERRLOG("socket open error");
301 return -1;
302 }
lh3a26dd52022-07-01 04:44:57 -0700303
304 timeOut.tv_sec = 5;
305 timeOut.tv_usec = 0;
306 if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
307 {
308 LYERRLOG("time out setting failed\n");
309 return -1;
310 }
rjwbc8a05f2022-03-02 15:23:11 +0800311 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800312
rjwbc8a05f2022-03-02 15:23:11 +0800313 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
314 network_addr_serv.sin_family = AF_INET;
315 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
316 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
317 network_len_addr_serv = sizeof(network_addr_serv);
lh3a26dd52022-07-01 04:44:57 -0700318
319
rjw7e50cd32022-01-18 18:30:37 +0800320 return 0;
321}
322
323int lynq_urc_socket_start()
324{
325 pthread_t tid;
326 pthread_attr_t attr;
327 int on = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800328 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800329 int ret = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800330 network_len_urc_addr_serv = sizeof(sockaddr_in);
331 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
332 if (network_urc_sock_fd <0){
rjw7e50cd32022-01-18 18:30:37 +0800333 LYERRLOG("urc socket error");
334 ret = -1;
335 }
rjwbc8a05f2022-03-02 15:23:11 +0800336 network_urc_addr_serv.sin_family = AF_INET;
337 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
338 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw7e50cd32022-01-18 18:30:37 +0800339 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800340 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800341 if(ret <0)
342 {
343 LYERRLOG("urc socket set error");
344 return -1;
345 }
rjwbc8a05f2022-03-02 15:23:11 +0800346 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-01-18 18:30:37 +0800347 if(ret <0)
348 {
349 LYERRLOG("urc socket bind error");
350 return -1;
351 }
352 pthread_attr_init(&attr);
353 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjwbc8a05f2022-03-02 15:23:11 +0800354 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800355 if(ret <0)
356 {
357 LYERRLOG("urc pthread create error");
358 return -1;
359 }
360 LYINFLOG("urc start success");
361 return 0;
362}
363
364int lynq_network_init(int utoken){
rjw22947c22022-03-15 09:21:29 +0800365 if(g_lynq_network_init_flag == 1)
366 {
367 LYERRLOG("init twice is not allowed");
368 return -1;
369 }
370 g_lynq_network_init_flag = 1;
rjw7e50cd32022-01-18 18:30:37 +0800371 if(utoken <0){
372 LYERRLOG("init err");
373 return -1;
374 }
rjwbc8a05f2022-03-02 15:23:11 +0800375 network_urc_status = 1;
376 network_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +0800377 LYLOGSET(LOG_INFO);
378 LYLOGEINIT(USER_LOG_TAG);
379 int ret = 0;
380
381 ret = lynq_server_socket_start();
382 if(ret !=0)
383 {
384 LYERRLOG("init socket client fail!!!");
385 return -1;
386 }
387 ret = lynq_urc_socket_start();
388 if(ret != 0)
389 {
390 LYERRLOG("init socket urc fail!!!");
391 return -1;
392 }
rjw9c301f82022-05-25 09:10:33 +0800393 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw7e50cd32022-01-18 18:30:37 +0800394 return 0;
395}
396
397int strUpper(char * str)
398{
399 int i=0;
400 while(1)
401 {
402 if(str[i]=='\0')
403 {
404 break;
405 }
406 if(str[i]>='a'&&str[i]<='z')
407 {
408 str[i]=str[i]-32;
409 }
410 i++;
411 }
412 return 0;
413}
414
rjw62a60152022-06-09 17:43:01 +0800415int copyCellInfoList(Parcel &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw7e50cd32022-01-18 18:30:37 +0800416{
417 int32_t v=0;
418 int64_t v6=0;
419 if(NULL == cellinfo)
420 {
421 LYERRLOG("*cellinfo error");
422 }
423
424 int nothing = 0;
rjw62a60152022-06-09 17:43:01 +0800425 int tmp_uint64 = 0;
rjw7e50cd32022-01-18 18:30:37 +0800426 p.readInt32(&v);
427 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
428 p.readInt32(&nothing);
429 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
430 // p.readInt32(&cellinfo->cellinfo.registered);
431 p.readInt32(&v);
432 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
433 p.readInt64(&v6);
434 // cellinfo->cellinfo.timeStamp = v6;
435 switch(cellinfoType) {
436 case RIL_CELL_INFO_TYPE_GSM: {
437 p.readInt32(&nothing);
438 p.readInt32(&nothing);
439 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800440 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800441 p.readInt32(&nothing);
442 p.readInt32(&nothing);
443 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800444 *cellinfo = (uint64_t)tmp_uint64;
rjw61974852022-05-17 16:30:32 +0800445 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800446 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800447 break;
448 }
449 case RIL_CELL_INFO_TYPE_WCDMA: {
450 p.readInt32(&nothing);
451 p.readInt32(&nothing);
452 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800453 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800454 p.readInt32(&nothing);
455 p.readInt32(&nothing);
456 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800457 *cellinfo = (uint64_t)tmp_uint64;
rjw4200a082022-05-17 17:58:35 +0800458 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800459 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800460 break;
461 }
462 case RIL_CELL_INFO_TYPE_CDMA: {
463 p.readInt32(&nothing);
464 p.readInt32(&nothing);
465 p.readInt32(&nothing);
466 p.readInt32(&nothing);
467 p.readInt32(&nothing);
468 p.readInt32(&nothing);
469 p.readInt32(&nothing);
470 p.readInt32(&nothing);
471 p.readInt32(&nothing);
472 p.readInt32(&nothing);
473 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800474 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800475 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800476 break;
477 }
478 case RIL_CELL_INFO_TYPE_LTE: {
479 p.readInt32(&nothing);
480 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800481 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800482 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800483 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800484 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800485 p.readInt32(&nothing);
486 p.readInt32(&nothing);
487 p.readInt32(&nothing);
488 p.readInt32(&nothing);
489 p.readInt32(&nothing);
490 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800491 *cellinfo = (uint64_t)tmp_uint64;
rjw7e50cd32022-01-18 18:30:37 +0800492 break;
493 }
494 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
495 p.readInt32(&nothing);
496 p.readInt32(&nothing);
497 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800498 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800499 p.readInt32(&nothing);
500 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800501 *cellinfo = (uint64_t)tmp_uint64;
rjwa8011682022-05-31 17:31:28 +0800502 tac = &nothing;
503 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800504 break;
505 }
506 case RIL_CELL_INFO_TYPE_NR: {
507 p.readInt32(&nothing);
508 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800509 p.readUint64(cellinfo);
rjw7e50cd32022-01-18 18:30:37 +0800510 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800511 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800512 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800513 p.readInt32(&nothing);
514 p.readInt32(&nothing);
515 p.readInt32(&nothing);
516 p.readInt32(&nothing);
517 p.readInt32(&nothing);
518 p.readInt32(&nothing);
519 break;
520 }
521 }
rjw62a60152022-06-09 17:43:01 +0800522 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjwa8011682022-05-31 17:31:28 +0800523 LYINFLOG("tac in fUNC :%d",*tac);
524 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800525 return 0;
526}
527
528int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800529 if (g_lynq_network_init_flag == 0)
530 {
531 LYERRLOG("deinit twice is not allowed");
532 return -1;
533 }
534 if (network_sock_fd > 0)
535 {
536 close(network_sock_fd);
537 }
538 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800539 network_urc_status = 0;
rjw7e50cd32022-01-18 18:30:37 +0800540 return 0;
541}
542
543static char * lynqStrdupReadString(Parcel &p) {
544 size_t stringlen;
545 const char16_t *s16;
546
547 s16 = p.readString16Inplace(&stringlen);
548 return strndup16to8(s16, stringlen);
549}
550
551int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
552{
553 int ret = -1;
554 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
555 return ret;
556 int send_num = 0;
557 int recv_num = 0;
558 int num = 0;
559 lynq_client_t client_t;
560 char res_data[LYNQ_REQUEST_PARAM_BUF] = {0};
rjw02a50422022-01-25 14:57:53 +0800561 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800562 memset(&client_t,0,sizeof(client_t));
563 client_t.request = RIL_REQUEST_OPERATOR;
564 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800565 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800566 memset(client_t.param,0,sizeof(client_t.param));
567
rjw9c301f82022-05-25 09:10:33 +0800568 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800569 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 +0800570 if(send_num<0)
571 {
572 LYERRLOG("sendto error:");
573 return ret;
574 }
575
576 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800577 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 +0800578 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800579 if(recv_num == 0 ||recv_num <0)
580 {
581 LYERRLOG("recvfrom error");
582 return -1;
583 }
584 Parcel p;
585 p.setData((uint8_t *)res_data,sizeof(res_data));
586 p.setDataPosition(0);
587 if(p.dataAvail() > 0)
588 {
589 p.readInt32(&response.resp_type);
590 p.readInt32(&response.request);
591 p.readInt32(&response.slot_id);
592 p.readInt32(&response.error);
593 if(response.error != 0)
594 {
595 LYERRLOG("response return error");
596 return response.error;
597 }
598 p.readInt32(&num);
599 if(num == 0)
600 {
601 LYERRLOG("no paramters");
602 }else{
603 for(int i = 0; i<num;i++)
604 {
605 resp[i] = lynqStrdupReadString(p);
606 }
607 if(NULL != resp[0])
608 {
rjw02a50422022-01-25 14:57:53 +0800609 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800610 }
611 if(NULL != resp[1])
612 {
rjw02a50422022-01-25 14:57:53 +0800613 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800614 }
615 if(NULL != resp[2])
616 {
rjw02a50422022-01-25 14:57:53 +0800617 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800618 }
619 }
620 }
621 return response.error;
622}
623
624int lynq_query_network_selection_mode(int *netselMode)
625{
626 int ret = -1;
627 if(NULL == netselMode)
628 return ret;
629 int send_num = 0;
630 int recv_num = 0;
631 int readnum = 0;
632 lynq_client_t client_t;
633 char res_data[LYNQ_REC_BUF] = {0};
634 memset(&client_t,0,sizeof(client_t));
635 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
636 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800637 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800638
639 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800640 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800641 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800642 if(send_num<0)
643 {
644 LYERRLOG("sendto error:");
645 return -1;
646 }
647
648 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800649 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +0800650 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800651 if(recv_num == 0 ||recv_num <0)
652 {
653 LYERRLOG("recvfrom error");
654 return -1;
655 }
656 Parcel p;
657 p.setData((uint8_t *)res_data,sizeof(res_data));
658 p.setDataPosition(0);
659 if(p.dataAvail() > 0)
660 {
661 p.readInt32(&response.resp_type);
662 p.readInt32(&response.request);
663 p.readInt32(&response.slot_id);
664 p.readInt32(&response.error);
665 if(response.error != 0)
666 {
667 LYERRLOG("response return error");
668 return response.error;
669 }
670 p.readInt32(&readnum);
671 p.readInt32(netselMode);
672 }
673 return response.error;
674}
675
676int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
677{
678 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800679 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800680 return ret;
rjw78d04502022-02-24 13:37:11 +0800681 if(strlen(mode) == 0)
682 {
683 return ret;
684 }
rjw7e50cd32022-01-18 18:30:37 +0800685 int send_num = 0;
686 lynq_client_t client_t;
687 int recv_num = 0;
688 char res_data[LYNQ_REC_BUF] = {0};
689 memset(&client_t,0,sizeof(client_t));
690 if(!strcmp(mode,"Auto"))
691 {
692 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
693 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800694 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800695 memset(client_t.param,0,sizeof(client_t.param));
696 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800697 if(mccmnc == NULL)
698 {
699 LYERRLOG("mccmnc is NULL!!!");
700 return ret;
701 }
702 if(strlen(mccmnc) == 0)
703 {
704 LYERRLOG("mccmnc strlen is 0!!!");
705 return ret;
706 }
rjw7e50cd32022-01-18 18:30:37 +0800707 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
708 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800709 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800710 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800711 }else{
712 LYERRLOG("request error");
713 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800714 }
715
rjw9c301f82022-05-25 09:10:33 +0800716 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800717 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 +0800718 if(send_num<0)
719 {
720 LYERRLOG("sendto error:");
721 return ret;
722 }
723
rjwbc8a05f2022-03-02 15:23:11 +0800724 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 +0800725 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800726 if(recv_num == 0 ||recv_num <0)
727 {
728 LYERRLOG("recvfrom error");
729 return -1;
730 }
731
732 Parcel p;
733 p.setData((uint8_t *)res_data,sizeof(res_data));
734 p.setDataPosition(0);
735 if(p.dataAvail() > 0)
736 {
737 p.readInt32(&response.resp_type);
738 p.readInt32(&response.request);
739 p.readInt32(&response.slot_id);
740 p.readInt32(&response.error);
741 }
742 return response.error;
743}
744
745int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
746{
747 int ret = -1;
748 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
749 return ret;
750 int send_num = 0;
751 int recv_num = 0;
752 char res_data[LYNQ_REC_BUF] = {0};
753 char *resp[128];
754 lynq_client_t client_t;
755 memset(&client_t,0,sizeof(client_t));
756 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
757 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800758 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800759 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800760 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800761 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 +0800762 if(send_num<0)
763 {
764 LYERRLOG("sendto error:");
765 return ret;
766 }
767
768 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800769 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 +0800770 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800771 if(recv_num == 0 ||recv_num <0)
772 {
773 LYERRLOG("recvfrom error");
774 return -1;
775 }
776 Parcel p;
777 p.setData((uint8_t *)res_data,sizeof(res_data));
778 p.setDataPosition(0);
779 if(p.dataAvail() > 0)
780 {
781 p.readInt32(&response.resp_type);
782 p.readInt32(&response.request);
783 p.readInt32(&response.slot_id);
784 p.readInt32(&response.error);
785 if(response.error != 0)
786 {
787 LYERRLOG("response return error");
788 return response.error;
789 }
790 int num =p.readInt32();
791 if(num == 0)
792 {
793 LYERRLOG("no paramters");
794 }else{
795 for(int i = 0; i<num;i++)
796 {
797 resp[i] = lynqStrdupReadString(p);
798 }
799 if(NULL != resp[0])
800 {
rjw02a50422022-01-25 14:57:53 +0800801 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800802 }
803 if(NULL != resp[1])
804 {
rjw02a50422022-01-25 14:57:53 +0800805 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800806 }
807 if(NULL != resp[2])
808 {
rjw02a50422022-01-25 14:57:53 +0800809 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800810 }
811 if(NULL != resp[3])
812 {
rjw02a50422022-01-25 14:57:53 +0800813 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800814 }
815 }
816 }
817 return response.error;
818}
819
rjw4544e132022-04-01 15:00:26 +0800820int 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 +0800821{
822 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800823 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800824 return ret;
825 int send_num = 0;
826 int recv_num = 0;
827 int num = 0;
828 char str[LYNQ_TYPE_BUF];
829 char res_data[LYNQ_REC_BUF] = {0};
rjwcdd83ae2022-01-22 14:10:42 +0800830 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800831 lynq_client_t client_t;
832 memset(&client_t,0,sizeof(client_t));
833 if(strlen(type)>LYNQ_TYPE_BUF)
834 {
835 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
836 }
837 memcpy(str,type,strlen(type)+1);
838 strUpper(str);
839 if(!strcmp(str,"VOICE"))
840 {
841 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
842 }else if(!strcmp(str,"DATA")){
843 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
844 }else if(!strcmp(str,"IMS")){
845 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
846 }else{
847 LYERRLOG("request error");
848 return ret;
849 }
850 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800851 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800852 memset(client_t.param,0,sizeof(client_t.param));
853
rjw9c301f82022-05-25 09:10:33 +0800854 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800855 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 +0800856 if(send_num<0)
857 {
858 LYERRLOG("sendto error:");
859 return ret;
860 }
861
862 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800863 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 +0800864 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800865 if(recv_num == 0 ||recv_num <0)
866 {
867 LYERRLOG("recvfrom error");
868 return -1;
869 }
870 Parcel p;
871 p.setData((uint8_t *)res_data,sizeof(res_data));
872 p.setDataPosition(0);
873 if(p.dataAvail() > 0)
874 {
875 p.readInt32(&response.resp_type);
876 p.readInt32(&response.request);
877 p.readInt32(&response.slot_id);
878 p.readInt32(&response.error);
879 if(response.error != 0)
880 {
881 LYERRLOG("response return error");
882 return response.error;
883 }
884 if(!strcmp(str,"VOICE"))
885 {
886 p.readInt32(&num);
887 if(num == 15)
888 {
889 *regState = atoi(lynqStrdupReadString(p));
890 lynqStrdupReadString(p);
891 lynqStrdupReadString(p);
892 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800893 lynqStrdupReadString(p);
894 lynqStrdupReadString(p);
895 lynqStrdupReadString(p);
896 lynqStrdupReadString(p);
897 lynqStrdupReadString(p);
898 lynqStrdupReadString(p);
899 lynqStrdupReadString(p);
900 lynqStrdupReadString(p);
901 lynqStrdupReadString(p);
902 lynqStrdupReadString(p);
903 *netRejected = atoi(lynqStrdupReadString(p));
rjw7e50cd32022-01-18 18:30:37 +0800904 }
905 }else if(!strcmp(str,"DATA")){
906 p.readInt32(&num);
907 if(num == 11)
908 {
909 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800910 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800911 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800912
913 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800914 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800915 *netType = atoi(lynqStrdupReadString(p));
916 }
917
918 }else if(!strcmp(str,"IMS")){
919 p.readInt32(&num);
920 if(num == 2)
921 {
922 p.readInt32(imsRegState);
923 p.readInt32(radioTechFam);
924 }
925 }else{
926 LYERRLOG("request error");
927 return ret;
928 }
929 }
930 return response.error;
931}
932
933int lynq_query_prefferred_networktype(int *preNetType)
934{
935 int ret = -1;
936 int send_num = 0;
937 int recv_num = 0;
938 int num = 0;
939 char res_data[LYNQ_REC_BUF] = {0};
940 lynq_client_t client_t;
941 memset(&client_t,0,sizeof(client_t));
942 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
943 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800944 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800945 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800946 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800947 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 +0800948 if(send_num<0)
949 {
950 LYERRLOG("sendto error:");
951 return ret;
952 }
953
954 //get data
rjwbc8a05f2022-03-02 15:23:11 +0800955 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 +0800956 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +0800957 if(recv_num == 0 ||recv_num <0)
958 {
959 LYERRLOG("recvfrom error");
960 return -1;
961 }
962 Parcel p;
963 p.setData((uint8_t *)res_data,sizeof(res_data));
964 p.setDataPosition(0);
965 if(p.dataAvail() > 0)
966 {
967 p.readInt32(&response.resp_type);
968 p.readInt32(&response.request);
969 p.readInt32(&response.slot_id);
970 p.readInt32(&response.error);
971 if(response.error != 0)
972 {
973 LYERRLOG("response return error");
974 return response.error;
975 }
976 p.readInt32(&num);
977 p.readInt32(preNetType);
978 }
979 return response.error;
980}
981
982int lynq_set_prefferred_networktype(const int preffertype)
983{
984 int ret = -1;
985 if(preffertype < 0||preffertype >33)
986 return ret;
987 int send_num = 0;
988 lynq_client_t client_t;
989 int recv_num = 0;
990 char res_data[LYNQ_REC_BUF] = {0};
991 memset(&client_t,0,sizeof(client_t));
992 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
993 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800994 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800995 sprintf(client_t.param,"%d",preffertype);
rjw9c301f82022-05-25 09:10:33 +0800996 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800997 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 +0800998 if(send_num<0)
999 {
1000 LYERRLOG("sendto error:");
1001 return ret;
1002 }
1003
rjwbc8a05f2022-03-02 15:23:11 +08001004 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 +08001005 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001006 if(recv_num == 0 ||recv_num <0)
1007 {
1008 LYERRLOG("recvfrom error");
1009 return -1;
1010 }
1011
1012 Parcel p;
1013 p.setData((uint8_t *)res_data,sizeof(res_data));
1014 p.setDataPosition(0);
1015 if(p.dataAvail() > 0)
1016 {
1017 p.readInt32(&response.resp_type);
1018 p.readInt32(&response.request);
1019 p.readInt32(&response.slot_id);
1020 p.readInt32(&response.error);
1021 }
1022
1023 return response.error;
1024
1025}
1026
rjw62a60152022-06-09 17:43:01 +08001027int lynq_query_cell_info(uint64_t cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int earfcn[CELLINFO_MAX_NUM],int * realNum)
rjw7e50cd32022-01-18 18:30:37 +08001028{
1029 int ret = -1;
1030 if(NULL == realNum)
1031 return ret;
1032 int send_num = 0;
1033 int recv_num = 0;
1034 int num = 0;
1035 char res_data[LYNQ_REC_BUF] = {0};
1036 lynq_client_t client_t;
1037 memset(&client_t,0,sizeof(client_t));
1038 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
1039 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001040 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001041 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001042 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001043 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001044 if(send_num<0)
1045 {
1046 LYERRLOG("sendto error:");
1047 return ret;
1048 }
1049
1050 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001051 recv_num = recvfrom(network_sock_fd,res_data,sizeof(res_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
rjw9c301f82022-05-25 09:10:33 +08001052 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001053 if(recv_num == 0 ||recv_num <0)
1054 {
1055 LYERRLOG("recvfrom error");
1056 return -1;
1057 }
1058 Parcel p;
1059 p.setData((uint8_t *)res_data,sizeof(res_data));
1060 p.setDataPosition(0);
1061 if(p.dataAvail() > 0)
1062 {
1063 p.readInt32(&response.resp_type);
1064 p.readInt32(&response.request);
1065 p.readInt32(&response.slot_id);
1066 p.readInt32(&response.error);
1067 if(response.error != 0)
1068 {
1069 LYERRLOG("response return error");
1070 return response.error;
1071 }
1072 p.readInt32(&num);
1073 LYINFLOG("cell info num:%d",num);
1074 *realNum = num;
1075 for(int i = 0;i<num;i++)
1076 {
rjwa8011682022-05-31 17:31:28 +08001077 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw7e50cd32022-01-18 18:30:37 +08001078 }
1079 }
1080 return response.error;
1081
1082}
1083
1084int lynq_set_unsol_cell_info_listrate(const int rate)
1085{
1086 int ret = -1;
1087 int send_num = 0;
1088 int recv_num = 0;
1089 char res_data[LYNQ_REC_BUF] = {0};
1090 lynq_client_t client_t;
1091 memset(&client_t,0,sizeof(client_t));
1092 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1093 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001094 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001095 sprintf(client_t.param,"%d",rate);
rjw9c301f82022-05-25 09:10:33 +08001096 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001097 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 +08001098 if(send_num<0)
1099 {
1100 LYERRLOG("sendto error:");
1101 return ret;
1102 }
1103
rjw9c301f82022-05-25 09:10:33 +08001104
rjwbc8a05f2022-03-02 15:23:11 +08001105 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 +08001106 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001107 if(recv_num == 0 ||recv_num <0)
1108 {
1109 LYERRLOG("recvfrom error");
1110 return -1;
1111 }
1112
1113 Parcel p;
1114 p.setData((uint8_t *)res_data,sizeof(res_data));
1115 p.setDataPosition(0);
1116 if(p.dataAvail() > 0)
1117 {
1118 p.readInt32(&response.resp_type);
1119 p.readInt32(&response.request);
1120 p.readInt32(&response.slot_id);
1121 p.readInt32(&response.error);
1122 }
1123
1124 return response.error;
1125}
1126
1127int lynq_set_band_mode(const int bandmode)
1128{
1129 int ret = -1;
1130 int send_num = 0;
1131 int recv_num = 0;
1132 char res_data[LYNQ_REC_BUF] = {0};
1133 lynq_client_t client_t;
1134 memset(&client_t,0,sizeof(client_t));
1135 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1136 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001137 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001138 sprintf(client_t.param,"%d",bandmode);
rjw9c301f82022-05-25 09:10:33 +08001139 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001140 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 +08001141 if(send_num<0)
1142 {
1143 LYERRLOG("sendto error:");
1144 return ret;
1145 }
1146
rjwbc8a05f2022-03-02 15:23:11 +08001147 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 +08001148 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001149 if(recv_num == 0 ||recv_num <0)
1150 {
1151 LYERRLOG("recvfrom error");
1152 return -1;
1153 }
1154
1155 Parcel p;
1156 p.setData((uint8_t *)res_data,sizeof(res_data));
1157 p.setDataPosition(0);
1158 if(p.dataAvail() > 0)
1159 {
1160 p.readInt32(&response.resp_type);
1161 p.readInt32(&response.request);
1162 p.readInt32(&response.slot_id);
1163 p.readInt32(&response.error);
1164 }
1165
1166 return response.error;
1167}
1168
1169int lynq_query_available_bandmode(int availBanMode[])
1170{
1171 int ret = -1;
1172 if(NULL == availBanMode)
1173 return ret;
1174 int send_num = 0;
1175 int recv_num = 0;
1176 int num = 0;
1177 int res = 0;
1178 char res_data[LYNQ_REC_BUF] = {0};
1179 lynq_client_t client_t;
1180 memset(&client_t,0,sizeof(client_t));
1181 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1182 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001183 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001184 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001185 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001186 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 +08001187 if(send_num<0)
1188 {
1189 LYERRLOG("sendto error:");
1190 return ret;
1191 }
1192
1193 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001194 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 +08001195 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001196 if(recv_num == 0 ||recv_num <0)
1197 {
1198 LYERRLOG("recvfrom error");
1199 return -1;
1200 }
rjw78d04502022-02-24 13:37:11 +08001201 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001202 {
1203 availBanMode[i]=0;
1204 }
1205 Parcel p;
1206 p.setData((uint8_t *)res_data,sizeof(res_data));
1207 p.setDataPosition(0);
1208
1209 if(p.dataAvail() > 0)
1210 {
1211 p.readInt32(&response.resp_type);
1212 p.readInt32(&response.request);
1213 p.readInt32(&response.slot_id);
1214 p.readInt32(&response.error);
1215 if(response.error != 0)
1216 {
1217 LYERRLOG("response return error");
1218 return response.error;
1219 }
1220 p.readInt32(&num);
1221 LYINFLOG("num = %d",num);
1222 availBanMode[0] = num;
1223 for(int i=1 ;i<=num;i++)
1224 {
1225 p.readInt32(&res);
1226 availBanMode[i]=res;
1227 }
1228 }
1229
1230 return response.error;
1231}
1232
1233int lynq_radio_on(const int data)
1234{
1235 int ret = -1;
1236 if(data < 0)
1237 return ret;
1238 int send_num = 0;
1239 char res_data[LYNQ_REC_BUF] = {0};
1240 int recv_num = 0;
1241 lynq_client_t client_t;
1242 memset(&client_t,0,sizeof(client_t));
1243 client_t.request = RIL_REQUEST_RADIO_POWER;
1244 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001245 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001246 sprintf(client_t.param,"%d",data);
rjw9c301f82022-05-25 09:10:33 +08001247 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001248 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 +08001249 if(send_num<0)
1250 {
1251 LYERRLOG("sendto error:");
1252 return ret;
1253 }
1254
rjwbc8a05f2022-03-02 15:23:11 +08001255 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 +08001256 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001257 if(recv_num == 0 ||recv_num <0)
1258 {
1259 LYERRLOG("recvfrom error");
1260 return -1;
1261 }
1262
1263 Parcel p;
1264 p.setData((uint8_t *)res_data,sizeof(res_data));
1265 p.setDataPosition(0);
1266 if(p.dataAvail() > 0)
1267 {
1268 p.readInt32(&response.resp_type);
1269 p.readInt32(&response.request);
1270 p.readInt32(&response.slot_id);
1271 p.readInt32(&response.error);
1272 }
1273
1274 return response.error;
1275}
1276
1277int lynq_query_radio_tech(int* radioTech)
1278{
1279 int ret = -1;
1280 if(NULL == radioTech)
1281 return ret;
1282 int send_num = 0;
1283 int recv_num = 0;
1284 int num = 0;
1285 char res_data[LYNQ_REC_BUF] = {0};
1286 lynq_client_t client_t;
1287 memset(&client_t,0,sizeof(client_t));
1288 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1289 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001290 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001291 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001292 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001293 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 +08001294 if(send_num<0)
1295 {
1296 LYERRLOG("sendto error:");
1297 return ret;
1298 }
1299
rjwbc8a05f2022-03-02 15:23:11 +08001300 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 +08001301 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001302 if(recv_num == 0 ||recv_num <0)
1303 {
1304 LYERRLOG("recvfrom error");
1305 return -1;
1306 }
1307 Parcel p;
1308 p.setData((uint8_t *)res_data,sizeof(res_data));
1309 p.setDataPosition(0);
1310
1311 if(p.dataAvail() > 0)
1312 {
1313 p.readInt32(&response.resp_type);
1314 p.readInt32(&response.request);
1315 p.readInt32(&response.slot_id);
1316 p.readInt32(&response.error);
1317 if(response.error != 0)
1318 {
1319 LYERRLOG("response return error");
1320 return response.error;
1321 }
1322 p.readInt32(&num);
1323 p.readInt32(radioTech);
1324 }
1325 return response.error;
1326}
1327
1328int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1329{
1330 int ret = -1;
1331 if(NULL == solSigStren)
1332 return ret;
1333 int send_num = 0;
1334 int recv_num = 0;
1335 int sum = 0;
1336 int LTE_signalstrength = 0;
1337 int WCDMA_signalstrength = 0;
1338 int none = 0;
1339
1340 char res_data[LYNQ_REC_BUF] = {0};
1341 lynq_client_t client_t;
1342 memset(&client_t,0,sizeof(client_t));
1343 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1344 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001345 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001346 memset(client_t.param,0,sizeof(client_t.param));
1347
rjw9c301f82022-05-25 09:10:33 +08001348 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001349 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 +08001350 if(send_num<0)
1351 {
1352 LYERRLOG("sendto error:");
1353 return ret;
1354 }
1355
1356 //get data
rjwbc8a05f2022-03-02 15:23:11 +08001357 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 +08001358 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw7e50cd32022-01-18 18:30:37 +08001359 if(recv_num == 0 ||recv_num <0)
1360 {
1361 LYERRLOG("recvfrom error");
1362 return -1;
1363 }
1364 Parcel p;
1365 p.setData((uint8_t *)res_data,sizeof(res_data));
1366 p.setDataPosition(0);
1367
1368 if(p.dataAvail() > 0)
1369 {
1370 p.readInt32(&response.resp_type);
1371 p.readInt32(&response.request);
1372 p.readInt32(&response.slot_id);
1373 p.readInt32(&response.error);
1374 if(response.error != 0)
1375 {
1376 LYERRLOG("response return error");
1377 return response.error;
1378 }
1379
1380 p.readInt32(&solSigStren->rssi);
1381 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1382 {
1383 solSigStren->gw_sig_valid = 1;
1384 }else{
1385 solSigStren->gw_sig_valid = 0;
1386 }
1387
1388 p.readInt32(&none);
1389 p.readInt32(&none);
1390 p.readInt32(&none);
1391 p.readInt32(&none);
1392 p.readInt32(&none);
1393 p.readInt32(&none);
1394 p.readInt32(&none);
1395 p.readInt32(&LTE_signalstrength);
1396 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1397 p.readInt32(&solSigStren->rsrp);
1398 p.readInt32(&solSigStren->rsrq);
1399 p.readInt32(&solSigStren->rssnr);
1400 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1401 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1402 {
1403 solSigStren->lte_sig_valid = 1;
1404 }else{
1405 solSigStren->lte_sig_valid = 0;
1406 }
1407
1408 p.readInt32(&none);
1409 p.readInt32(&none);
1410 p.readInt32(&none);
1411 p.readInt32(&none);
1412 p.readInt32(&none);
1413 p.readInt32(&WCDMA_signalstrength);
1414 p.readInt32(&none);
1415 p.readInt32(&solSigStren->rscp);
1416 p.readInt32(&solSigStren->ecno);
1417 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1418 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1419 {
rjwcdd83ae2022-01-22 14:10:42 +08001420 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001421 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001422 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001423 }
rjwcdd83ae2022-01-22 14:10:42 +08001424 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001425 p.readInt32(&solSigStren->ssRsrp);
1426 p.readInt32(&solSigStren->ssRsrq);
1427 p.readInt32(&solSigStren->ssSinr);
1428 p.readInt32(&solSigStren->csiRsrp);
1429 p.readInt32(&solSigStren->csiRsrq);
1430 p.readInt32(&solSigStren->csiSinr);
1431 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1432 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1433 if(sum != 0)
1434 {
1435 solSigStren->nr_sig_valid = 1;
1436 }else{
1437 LYERRLOG("None of NR signal info");
1438 }
1439 }
1440 return response.error;
1441}
rjwbc8a05f2022-03-02 15:23:11 +08001442
rjw4a5a78d2022-03-10 11:04:24 +08001443int lynq_set_ims(const int ims_mode)
1444{
1445 int ret = -1;
1446 if (ims_mode < 0 || ims_mode > 1)
1447 {
1448 LYERRLOG("incoming ims_mode error");
1449 return ret;
1450 }
1451 int send_num = 0;
1452 char res_data[LYNQ_REC_BUF] = {0};
1453 int recv_num = 0;
1454 lynq_client_t client_t;
1455
1456 memset(&client_t,0,sizeof(client_t));
1457 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1458 client_t.paramLen = 1;
1459 client_t.uToken = network_Global_uToken;
1460 sprintf(client_t.param,"%d",ims_mode);
rjw9c301f82022-05-25 09:10:33 +08001461 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001462 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1463 if (send_num<0)
1464 {
1465 LYERRLOG("sendto error:");
1466 return ret;
1467 }
1468
1469 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 +08001470 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001471 if (recv_num == 0 || recv_num < 0)
1472 {
1473 LYERRLOG("recvfrom error");
1474 return -1;
1475 }
1476
1477 Parcel p;
1478 p.setData((uint8_t *)res_data,sizeof(res_data));
1479 p.setDataPosition(0);
1480 if (p.dataAvail() > 0)
1481 {
1482 p.readInt32(&response.resp_type);
1483 p.readInt32(&response.request);
1484 p.readInt32(&response.slot_id);
1485 p.readInt32(&response.error);
1486 }
1487
1488 return response.error;
1489}
1490
1491
rjwbc8a05f2022-03-02 15:23:11 +08001492/*Used to wait for an update signal*/
1493int lynq_wait_signalchanges(int *handle)
1494{
1495 LYDBGLOG("start wait signalchanges info");
1496 if(NULL == handle)
1497 {
1498 LYERRLOG("illegal input");
1499 return -1;
1500 }
1501 wait_signal_changes();
1502 LYDBGLOG("get signalchanges");
1503 *handle = network_wait_urc_id;
1504 return 0;
1505}
1506/*Used to get urc info*/
1507int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1508{
1509 LYDBGLOG("start get urc info");
1510 if(handle != 1002&&handle != 1009)
1511 {
1512 LYINFLOG("invalid handle!!!");
1513 return -1;
1514 }
1515 if(NULL == solSigStren && NULL == slot_id)
1516 {
1517 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1518 return -1;
1519 }
1520 switch(handle)
1521 {
1522 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1523 {
1524 LYDBGLOG("get state update to VOICE");
1525 *slot_id = network_urc_slot_id;
1526 LYINFLOG("slot_id = %d",network_urc_slot_id);
1527 }
1528 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1529 {
1530 LYDBGLOG("get state update to signal info");
1531 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1532 solSigStren->rssi = network_urc_solSigStren.rssi;
1533 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1534 solSigStren->rscp = network_urc_solSigStren.rscp;
1535 solSigStren->ecno = network_urc_solSigStren.ecno;
1536 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1537 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1538 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1539 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1540 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1541 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1542 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1543 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1544 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1545 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1546 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1547 }
1548 }
1549 return 0;
rjw4200a082022-05-17 17:58:35 +08001550}
lh3a26dd52022-07-01 04:44:57 -07001551
1552/**@brief parse at response,return error code,and the response
1553* @param response [IN] <response>:original at response,This parameter must be a character array.
1554
1555* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1556* field:
1557* eg:
1558* "+cnum: 123456\n+cnum: 456"
1559* value:12345;456;
1560* @param value_len [IN] <value_len>: The value length.
1561
1562* @return:AT error code
1563*/
1564static int parse_at_result(char response[],char value[],int value_len)
1565{
1566 if(response == NULL || value == NULL)
1567 {
1568 LYERRLOG("parameter invalid");
1569 return -1;
1570 }
1571 if(strstr(response,"ERROR"))
1572 {
1573 int i;
1574 for(i = 0;i < strlen(response);i++)
1575 {
1576 if(response[i]==':')
1577 {
1578 break;
1579 }
1580 }
1581 if(i < strlen(response))
1582 {
1583 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1584 return atoi(response+i+1);
1585 }
1586 else
1587 {
1588 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1589 return 100; //unknown
1590 }
1591 }
1592 else if(strstr(response,"OK"))
1593 {
1594 /** parse the at response value
1595 * eg:
1596 * --> at+cnum
1597 * <-- +CNUM:"1243452"
1598 * need parse the "1243452" to <value>
1599 *@ To-Do
1600 */
1601 int count;
1602 int resp_addr[32] = {0};
1603 char temp_buf[1024] = {0};
1604 char *dest;
1605 dest = NULL;
1606 count = 0;
1607 int res_len = strlen(response);
1608 LYINFLOG("res_len:%d",res_len);
1609 for(int i = 0; i < res_len; i++)
1610 {
1611 if(response[i]==':')
1612 {
1613 resp_addr[count] = i;
1614 count++;
1615 }
1616 if(response[i] == '\n')
1617 {
1618 response[i] = '\0';
1619 }
1620 }
1621 LYINFLOG("count:%d",count);
1622 if(count > 0)
1623 {
1624 for(int i = 0; i < count; i++)
1625 {
1626 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1627 {
1628 LYINFLOG("2 will be out of range\n");
1629 break;
1630 }
1631 if(strlen(temp_buf) >= 1023)
1632 {
1633 LYINFLOG("1 will be out of range\n");
1634 break;
1635 }
1636 strcat(temp_buf,response+resp_addr[i]+2);
1637
1638 if(strlen(temp_buf) >= 1023)
1639 {
1640 LYINFLOG("1 will be out of range\n");
1641 break;
1642 }
1643 strcat(temp_buf,";");
1644 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1645 }
1646 LYINFLOG("parse_result:%s\n",temp_buf);
1647 if(strlen(temp_buf) > value_len)
1648 {
1649 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1650 memcpy(value,temp_buf,value_len);
1651 }
1652 else
1653 {
1654 memcpy(value,temp_buf,strlen(temp_buf));
1655 }
1656 }
1657 return 0;
1658 }
1659 else
1660 {
1661 LYINFLOG("%s this response invalid\n",response);
1662 return -1;
1663 }
1664}
1665#ifdef MODEM_GEN97
1666
1667int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1668{
1669 int ret;
1670 int send_num;
1671 int recv_len;
1672 Parcel p;
1673 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1674 lynq_client_t client_t;
1675 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1676
1677 ret = -1;
1678 send_num = -1;
1679 recv_len = -1;
1680
1681 LYINFLOG("lynq_oos_recover_timer_interval start");
1682 if((mode < 0) || (mode >1) || (NULL == interval) || (NULL == result))
1683 {
1684 LYERRLOG("lynq_oos_recover_timer_interval paramter fail!!!");
1685 return ret;
1686 }
1687
1688 memset(&client_t,0,sizeof(client_t));
1689 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL
1690 client_t.paramLen = 1;
1691 client_t.uToken = network_Global_uToken;
1692 if(mode == 0)
1693 {
1694 sprintf(client_t.param,"AT+ERSCFG=%s",interval);
1695 }
1696 else
1697 {
1698 sprintf(client_t.param,"AT+ERSCFG?",interval);
1699 }
1700 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1701 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1702 if(send_num < 0)
1703 {
1704 LYERRLOG("sendto error:%s",strerror(errno));
1705 return ret;
1706 }
1707 ret = get_response(p,-1); //use defualt time (5s)
1708 if(ret != 0)
1709 {
1710 return ret;
1711 }
1712 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1713 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1714 if(0 == response.error)
1715 {
1716 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1717 LYINFLOG("get recover timer interval");
1718 p.readInt32(&recv_len);
1719 if(recv_len == -1)
1720 {
1721 LYINFLOG("no responset");
1722 return -1;
1723 }
1724 else
1725 {
1726 LYINFLOG("recv_len:%d",recv_len);
1727 p.read(response_interval,recv_len);
1728 }
1729 LYINFLOG("response_interval:%s",response_interval);
1730 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1731 if(mode == 1)
1732 {
1733 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1734 {
1735 memcpy(result,res_data,strlen(res_data));
1736 }
1737 }
1738 LYINFLOG("ret:%d",ret);
1739 return ret;
1740 }
1741 else
1742 {
1743 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1744 return response.error;
1745 }
1746}
1747
1748int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1749{
1750 int ret;
1751 int send_num;
1752 int recv_len;
1753 Parcel p;
1754 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1755 lynq_client_t client_t;
1756 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1757
1758 ret = -1;
1759 send_num = -1;
1760 recv_len = -1;
1761
1762 LYINFLOG("lynq_oos_deep_sleep_recover_timer_interval start");
1763 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
1764 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1765 {
1766 LYERRLOG("lynq_oos_deep_sleep_recover_timer_interval paramter fail!!!");
1767 return ret;
1768 }
1769
1770 memset(&client_t,0,sizeof(client_t));
1771 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL
1772 client_t.paramLen = 1;
1773 client_t.uToken = network_Global_uToken;
1774 sprintf(client_t.param,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
1775 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1776 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1777 if(send_num<0)
1778 {
1779 LYERRLOG("sendto error:%s",strerror(errno));
1780 return ret;
1781 }
1782 ret = get_response(p,-1); //use defualt time (5s)
1783 if(ret != 0)
1784 {
1785 return ret;
1786 }
1787 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1788 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1789 if(0 == response.error)
1790 {
1791 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1792 LYINFLOG("set deep sleep recover timer interval response");
1793 p.readInt32(&recv_len);
1794 if(recv_len == -1)
1795 {
1796 LYINFLOG("no responset");
1797 return -1;
1798 }
1799 else
1800 {
1801 LYINFLOG("recv_len:%d",recv_len);
1802 p.read(response_interval,recv_len);
1803 }
1804 LYINFLOG("response_interval:%s",response_interval);
1805 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1806 return ret;
1807 }
1808 else
1809 {
1810 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1811 return response.error;
1812 }
1813}
1814#endif
1815