blob: 6b0bdbf5b954868a2ddea5032c42daf5df099514 [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"
q.huang47d4dfe2022-08-17 17:52:29 +080016#include "lynq_network_state_buffer.h"
rjw7e50cd32022-01-18 18:30:37 +080017#define LYNQ_SERVICE_PORT 8088
18#define LYNQ_URC_SERVICE_PORT 8086
19#define LYNQ_URC_ADDRESS "0.0.0.0"
20#define LYNQ_ADDRESS "127.0.0.1"
21#define LYNQ_REQUEST_PARAM_BUF 8192
22#define LYNQ_REC_BUF 8192
23#define LYNQ_RESP_BUF 128
24#define LYNQ_TYPE_BUF 10
25#define USER_LOG_TAG "LYNQ_NETWORK"
26
27
28using ::android::Parcel;
29
30
31typedef struct{
32 int uToken;
33 int request;
34 int paramLen;
35 char param[LYNQ_REQUEST_PARAM_BUF];
36}lynq_client_t;
37
38typedef struct{
39 int resp_type;
40 int request;
41 int slot_id;
42 int error;
43}lynq_resp_t;
44
45lynq_client_t client_t;
46lynq_resp_t response;
rjwbc8a05f2022-03-02 15:23:11 +080047
48int network_len_addr_serv;
49int network_len_urc_addr_serv;
50struct sockaddr_in network_addr_serv;
51struct sockaddr_in network_urc_addr_serv;
52static int network_sock_fd = 0;
53int network_urc_sock_fd = 0;
54int network_Global_uToken = 0;
55int network_slot_id = -1;
56int network_urc_slot_id = -1;
57int network_urc_status = 1;
58int network_wait_urc_id = 0;
59signalStrength_t network_urc_solSigStren;
rjw22947c22022-03-15 09:21:29 +080060/**g_lynq_network_init_flag
61* @brief mark network initialization state
62* 0:deinit status
63* 1:init state
64*/
65static int g_lynq_network_init_flag = 0;
rjw7e50cd32022-01-18 18:30:37 +080066
rjwbc8a05f2022-03-02 15:23:11 +080067static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
68static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw7e50cd32022-01-18 18:30:37 +080069
rjw9c301f82022-05-25 09:10:33 +080070/**g_lynq_network_sendto_mutex
71* @brief mark network send request mutex
72*/
73static pthread_mutex_t g_lynq_network_sendto_mutex;
74
75//static pthread_mutex_t g_lynq_network_recv_mutex;
76
rjw7e50cd32022-01-18 18:30:37 +080077typedef enum{
78 LYNQ_E_CARDSTATE_ERROR=8000,
79 /* The voice service state is out of service*/
80 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
81 /* The voice service state is EMERGENCY_ONLY*/
82 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
83 /* The radio power is power off*/
84 LYNQ_E_STATE_POWER_OFF=8003,
85 LYNQ_E_TIME_OUT=8004,
86 /*create or open sms DB fail */
87 LYNQ_E_SMS_DB_FAIL=8005,
88 /*Failed to execute sql statement*/
89 LYNQ_E_SMS_SQL_FAIL = 8006,
90 LYNQ_E_SMS_NOT_FIND = 8007,
91 /* The logic conflict*/
92 LYNQ_E_CONFLICT=9000,
93 /*Null anomaly*/
94 LYNQ_E_NULL_ANONALY=9001
95}LYNQ_E;
96
lh3a26dd52022-07-01 04:44:57 -070097
98/**@brief get response and write msg to parcel
99* @param p [IN] <p>: the parcel
100*
101* @param time_out [IN] <time_out>: timeout.
102* < 0:use defult timeout(5s)
103* >=0:use this timeout
104* @return
105* 0:success
106* other:failure
107*/
108int get_response(Parcel &p,int time_out)
109{
rjwa59bf312022-07-05 11:50:31 +0800110 int len = 0;
111 char recvline[LYNQ_REC_BUF];
lh3a26dd52022-07-01 04:44:57 -0700112 bzero(recvline,LYNQ_REC_BUF);
113 LYINFLOG("get response");
114 /* receive data from server */
115 struct timeval timeOut;
rjwa59bf312022-07-05 11:50:31 +0800116 timeOut.tv_sec = 30; //defualt 5s
lh3a26dd52022-07-01 04:44:57 -0700117 timeOut.tv_usec = 0;
118 if(time_out >= 0)
119 {
120 LYINFLOG("use time out %d",time_out);
121 timeOut.tv_sec = time_out; //just set second
122 }
123 if(setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
124 {
125 LYERRLOG("time out setting failed");
126 return -1;
127 }
128 len = recvfrom(network_sock_fd,recvline,sizeof(recvline),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
129 if(len == -1 && errno == EAGAIN)
130 {
131 LYERRLOG("read error,maybe timeout: %s",strerror(errno));
132 return LYNQ_E_TIME_OUT;
rjwa59bf312022-07-05 11:50:31 +0800133 }
lh3a26dd52022-07-01 04:44:57 -0700134 if (recvline != NULL)
135 {
rjwa59bf312022-07-05 11:50:31 +0800136 p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
137 p.setDataPosition(0);
138 }
139 return 0;
140}
141int JumpHeader(Parcel &p,int *resp_type,int *request,int *slot_id,int *error)
lh3a26dd52022-07-01 04:44:57 -0700142{
143 LYINFLOG("jump header");
rjwa59bf312022-07-05 11:50:31 +0800144 if(p.dataAvail() > 0)
145 {
146 p.readInt32(resp_type);
147 p.readInt32(request);
148 p.readInt32(slot_id);
149 p.readInt32(error);
150 return 0;
151 }
152 else
153 {
154 return -1;
155 }
lh3a26dd52022-07-01 04:44:57 -0700156}
157
rjwbc8a05f2022-03-02 15:23:11 +0800158int wait_signal_changes()
159{
160 int ret = 0;
161 pthread_mutex_lock(&signal_state_change_mutex);
162 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
163 pthread_mutex_unlock(&signal_state_change_mutex);
164 return 0;
165}
166
167void send_signal_changes()
168{
169 pthread_mutex_lock(&signal_state_change_mutex);
170 pthread_cond_signal(&signal_state_change_cond);
171 pthread_mutex_unlock(&signal_state_change_mutex);
172 return;
173}
174
rjw7e50cd32022-01-18 18:30:37 +0800175void *thread_urc_recv(void *p)
176{
177 Parcel *urc_p =NULL;
178 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800179 int resp_type = -1;
180 int urc_id = -1;
181 int res = 0;
182 int none = 0;
183 int NR_sum = 0;
rjw7e50cd32022-01-18 18:30:37 +0800184 int urc_LTE_signalstrength = 0;
185 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800186 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800187 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800188 {
189 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-03-02 15:23:11 +0800190 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 +0800191 if(res<=0)
192 {
193 LYERRLOG("thread_urc_recv step2 fail:");
194 break;
195 }
196 urc_p = new Parcel();
rjw7a8791e2022-09-06 09:07:39 +0800197 if(urc_p == NULL)
198 {
199 LYERRLOG("new parcel failure!!!");
200 break;
201 }
rjw7e50cd32022-01-18 18:30:37 +0800202 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
203 urc_p->setDataPosition(0);
204 if(urc_p->dataAvail()>0)
205 {
206 urc_p->readInt32(&resp_type);
207 urc_p->readInt32(&urc_id);
rjwbc8a05f2022-03-02 15:23:11 +0800208 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800209 switch(urc_id)
210 {
q.huang47d4dfe2022-08-17 17:52:29 +0800211 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
rjw7e50cd32022-01-18 18:30:37 +0800212 {
q.huangaf58bc82022-08-19 17:11:21 +0800213 set_register_voice_buffer_valid(false);
rjwbc8a05f2022-03-02 15:23:11 +0800214 network_wait_urc_id = urc_id;
215 LYINFLOG("slot_id = %d",network_urc_slot_id);
216 send_signal_changes();
rjw25d01752022-08-04 09:42:00 +0800217 break;
rjw7e50cd32022-01-18 18:30:37 +0800218 }
q.huang47d4dfe2022-08-17 17:52:29 +0800219 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
220 {
q.huangaf58bc82022-08-19 17:11:21 +0800221 set_register_data_buffer_valid(false);
q.huang47d4dfe2022-08-17 17:52:29 +0800222 network_wait_urc_id = urc_id;
223 LYINFLOG("slot_id = %d",network_urc_slot_id);
224 send_signal_changes();
225 break;
226 }
227 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
228 {
q.huangaf58bc82022-08-19 17:11:21 +0800229 set_register_ims_buffer_valid(false);
q.huang47d4dfe2022-08-17 17:52:29 +0800230 network_wait_urc_id = urc_id;
231 LYINFLOG("slot_id = %d",network_urc_slot_id);
232 send_signal_changes();
233 break;
234 }
235 case RIL_UNSOL_SIGNAL_STRENGTH:
rjw7e50cd32022-01-18 18:30:37 +0800236 {
rjwbc8a05f2022-03-02 15:23:11 +0800237 urc_p->readInt32(&network_urc_solSigStren.rssi);
238 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw7e50cd32022-01-18 18:30:37 +0800239 {
rjwbc8a05f2022-03-02 15:23:11 +0800240 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800241 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800242 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800243 }
rjwbc8a05f2022-03-02 15:23:11 +0800244 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800245 {
rjwbc8a05f2022-03-02 15:23:11 +0800246 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800247 }
rjw7e50cd32022-01-18 18:30:37 +0800248 urc_p->readInt32(&none);
249 urc_p->readInt32(&none);
250 urc_p->readInt32(&none);
251 urc_p->readInt32(&none);
252 urc_p->readInt32(&none);
253 urc_p->readInt32(&none);
254 urc_p->readInt32(&none);
255 urc_p->readInt32(&urc_LTE_signalstrength);
256 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjwbc8a05f2022-03-02 15:23:11 +0800257 urc_p->readInt32(&network_urc_solSigStren.rsrp);
258 urc_p->readInt32(&network_urc_solSigStren.rsrq);
259 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw7e50cd32022-01-18 18:30:37 +0800260 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
261 {
rjwbc8a05f2022-03-02 15:23:11 +0800262 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800263 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800264 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800265 }
rjwbc8a05f2022-03-02 15:23:11 +0800266 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800267 {
268 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
269 }
rjw7e50cd32022-01-18 18:30:37 +0800270 urc_p->readInt32(&none);
271 urc_p->readInt32(&none);
272 urc_p->readInt32(&none);
273 urc_p->readInt32(&none);
274 urc_p->readInt32(&none);
275 urc_p->readInt32(&urc_WCDMA_signalstrength);
276 urc_p->readInt32(&none);
rjwbc8a05f2022-03-02 15:23:11 +0800277 urc_p->readInt32(&network_urc_solSigStren.rscp);
278 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800279 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
280 {
rjwbc8a05f2022-03-02 15:23:11 +0800281 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800282 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800283 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800284 }
rjwbc8a05f2022-03-02 15:23:11 +0800285 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800286 {
287 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800288 }
rjwbc8a05f2022-03-02 15:23:11 +0800289 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
290 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
291 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
292 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
293 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
294 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
295 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
296 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800297 if(NR_sum != 0)
298 {
rjwbc8a05f2022-03-02 15:23:11 +0800299 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800300 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800301 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800302 }
rjwbc8a05f2022-03-02 15:23:11 +0800303 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800304 {
305 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 +0800306 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
307 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800308 }
rjwbc8a05f2022-03-02 15:23:11 +0800309 network_wait_urc_id = urc_id;
310 send_signal_changes();
rjw25d01752022-08-04 09:42:00 +0800311 break;
rjw7e50cd32022-01-18 18:30:37 +0800312 }
313 }
314 }
rjw7a8791e2022-09-06 09:07:39 +0800315 delete urc_p;
316 urc_p = NULL;
rjw7e50cd32022-01-18 18:30:37 +0800317 }
q.huang47d4dfe2022-08-17 17:52:29 +0800318 return NULL;
rjw7e50cd32022-01-18 18:30:37 +0800319}
320
321
322int lynq_server_socket_start()
323{
lh3a26dd52022-07-01 04:44:57 -0700324 struct timeval timeOut;
rjwbc8a05f2022-03-02 15:23:11 +0800325 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
326 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800327 {
328 LYERRLOG("socket open error");
329 return -1;
330 }
lh3a26dd52022-07-01 04:44:57 -0700331
332 timeOut.tv_sec = 5;
333 timeOut.tv_usec = 0;
334 if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
335 {
336 LYERRLOG("time out setting failed\n");
337 return -1;
338 }
rjwbc8a05f2022-03-02 15:23:11 +0800339 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800340
rjwbc8a05f2022-03-02 15:23:11 +0800341 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
342 network_addr_serv.sin_family = AF_INET;
343 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
344 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
345 network_len_addr_serv = sizeof(network_addr_serv);
lh3a26dd52022-07-01 04:44:57 -0700346
347
rjw7e50cd32022-01-18 18:30:37 +0800348 return 0;
349}
350
351int lynq_urc_socket_start()
352{
353 pthread_t tid;
354 pthread_attr_t attr;
355 int on = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800356 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800357 int ret = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800358 network_len_urc_addr_serv = sizeof(sockaddr_in);
359 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
360 if (network_urc_sock_fd <0){
rjw7e50cd32022-01-18 18:30:37 +0800361 LYERRLOG("urc socket error");
362 ret = -1;
363 }
rjwbc8a05f2022-03-02 15:23:11 +0800364 network_urc_addr_serv.sin_family = AF_INET;
365 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
366 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw7e50cd32022-01-18 18:30:37 +0800367 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800368 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800369 if(ret <0)
370 {
371 LYERRLOG("urc socket set error");
372 return -1;
373 }
rjwbc8a05f2022-03-02 15:23:11 +0800374 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-01-18 18:30:37 +0800375 if(ret <0)
376 {
377 LYERRLOG("urc socket bind error");
378 return -1;
379 }
380 pthread_attr_init(&attr);
381 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjwbc8a05f2022-03-02 15:23:11 +0800382 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800383 if(ret <0)
384 {
385 LYERRLOG("urc pthread create error");
386 return -1;
387 }
388 LYINFLOG("urc start success");
389 return 0;
390}
391
392int lynq_network_init(int utoken){
rjw22947c22022-03-15 09:21:29 +0800393 if(g_lynq_network_init_flag == 1)
394 {
395 LYERRLOG("init twice is not allowed");
396 return -1;
397 }
398 g_lynq_network_init_flag = 1;
rjw7e50cd32022-01-18 18:30:37 +0800399 if(utoken <0){
400 LYERRLOG("init err");
401 return -1;
402 }
rjwbc8a05f2022-03-02 15:23:11 +0800403 network_urc_status = 1;
404 network_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +0800405 LYLOGSET(LOG_INFO);
406 LYLOGEINIT(USER_LOG_TAG);
407 int ret = 0;
408
q.huang47d4dfe2022-08-17 17:52:29 +0800409 init_network_timer_all();
410
rjw7e50cd32022-01-18 18:30:37 +0800411 ret = lynq_server_socket_start();
412 if(ret !=0)
413 {
414 LYERRLOG("init socket client fail!!!");
415 return -1;
416 }
417 ret = lynq_urc_socket_start();
418 if(ret != 0)
419 {
420 LYERRLOG("init socket urc fail!!!");
421 return -1;
422 }
rjw9c301f82022-05-25 09:10:33 +0800423 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw7e50cd32022-01-18 18:30:37 +0800424 return 0;
425}
426
427int strUpper(char * str)
428{
429 int i=0;
430 while(1)
431 {
432 if(str[i]=='\0')
433 {
434 break;
435 }
436 if(str[i]>='a'&&str[i]<='z')
437 {
438 str[i]=str[i]-32;
439 }
440 i++;
441 }
442 return 0;
443}
444
rjw62a60152022-06-09 17:43:01 +0800445int copyCellInfoList(Parcel &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw7e50cd32022-01-18 18:30:37 +0800446{
447 int32_t v=0;
448 int64_t v6=0;
449 if(NULL == cellinfo)
450 {
451 LYERRLOG("*cellinfo error");
452 }
453
454 int nothing = 0;
rjw62a60152022-06-09 17:43:01 +0800455 int tmp_uint64 = 0;
rjw7e50cd32022-01-18 18:30:37 +0800456 p.readInt32(&v);
457 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
458 p.readInt32(&nothing);
459 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
460 // p.readInt32(&cellinfo->cellinfo.registered);
461 p.readInt32(&v);
462 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
463 p.readInt64(&v6);
464 // cellinfo->cellinfo.timeStamp = v6;
465 switch(cellinfoType) {
466 case RIL_CELL_INFO_TYPE_GSM: {
467 p.readInt32(&nothing);
468 p.readInt32(&nothing);
469 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800470 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800471 p.readInt32(&nothing);
472 p.readInt32(&nothing);
473 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800474 *cellinfo = (uint64_t)tmp_uint64;
rjw61974852022-05-17 16:30:32 +0800475 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800476 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800477 break;
478 }
479 case RIL_CELL_INFO_TYPE_WCDMA: {
480 p.readInt32(&nothing);
481 p.readInt32(&nothing);
482 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800483 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800484 p.readInt32(&nothing);
485 p.readInt32(&nothing);
486 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800487 *cellinfo = (uint64_t)tmp_uint64;
rjw4200a082022-05-17 17:58:35 +0800488 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800489 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800490 break;
491 }
492 case RIL_CELL_INFO_TYPE_CDMA: {
493 p.readInt32(&nothing);
494 p.readInt32(&nothing);
495 p.readInt32(&nothing);
496 p.readInt32(&nothing);
497 p.readInt32(&nothing);
498 p.readInt32(&nothing);
499 p.readInt32(&nothing);
500 p.readInt32(&nothing);
501 p.readInt32(&nothing);
502 p.readInt32(&nothing);
503 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800504 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800505 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800506 break;
507 }
508 case RIL_CELL_INFO_TYPE_LTE: {
509 p.readInt32(&nothing);
510 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800511 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800512 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800513 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800514 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800515 p.readInt32(&nothing);
516 p.readInt32(&nothing);
517 p.readInt32(&nothing);
518 p.readInt32(&nothing);
519 p.readInt32(&nothing);
520 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800521 *cellinfo = (uint64_t)tmp_uint64;
rjw7e50cd32022-01-18 18:30:37 +0800522 break;
523 }
524 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
525 p.readInt32(&nothing);
526 p.readInt32(&nothing);
527 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800528 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800529 p.readInt32(&nothing);
530 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800531 *cellinfo = (uint64_t)tmp_uint64;
rjwa8011682022-05-31 17:31:28 +0800532 tac = &nothing;
533 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800534 break;
535 }
536 case RIL_CELL_INFO_TYPE_NR: {
537 p.readInt32(&nothing);
538 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800539 p.readUint64(cellinfo);
rjw7e50cd32022-01-18 18:30:37 +0800540 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800541 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800542 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800543 p.readInt32(&nothing);
544 p.readInt32(&nothing);
545 p.readInt32(&nothing);
546 p.readInt32(&nothing);
547 p.readInt32(&nothing);
548 p.readInt32(&nothing);
549 break;
550 }
551 }
rjw62a60152022-06-09 17:43:01 +0800552 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjwa8011682022-05-31 17:31:28 +0800553 LYINFLOG("tac in fUNC :%d",*tac);
554 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800555 return 0;
556}
557
558int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800559 if (g_lynq_network_init_flag == 0)
560 {
561 LYERRLOG("deinit twice is not allowed");
562 return -1;
563 }
564 if (network_sock_fd > 0)
565 {
566 close(network_sock_fd);
567 }
568 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800569 network_urc_status = 0;
q.huang47d4dfe2022-08-17 17:52:29 +0800570
571 deinit_network_timer_all();
572
rjw7e50cd32022-01-18 18:30:37 +0800573 return 0;
574}
575
576static char * lynqStrdupReadString(Parcel &p) {
577 size_t stringlen;
578 const char16_t *s16;
579
580 s16 = p.readString16Inplace(&stringlen);
581 return strndup16to8(s16, stringlen);
582}
583
584int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
585{
586 int ret = -1;
587 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
588 return ret;
589 int send_num = 0;
590 int recv_num = 0;
591 int num = 0;
592 lynq_client_t client_t;
rjw02a50422022-01-25 14:57:53 +0800593 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800594 memset(&client_t,0,sizeof(client_t));
595 client_t.request = RIL_REQUEST_OPERATOR;
596 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800597 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800598 memset(client_t.param,0,sizeof(client_t.param));
599
rjw9c301f82022-05-25 09:10:33 +0800600 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800601 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 +0800602 if(send_num<0)
603 {
604 LYERRLOG("sendto error:");
605 return ret;
606 }
607
608 //get data
rjw7e50cd32022-01-18 18:30:37 +0800609 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800610 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800611 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
612 if (ret != 0)
613 {
614 return ret;
615 }
616
rjw7e50cd32022-01-18 18:30:37 +0800617 if(p.dataAvail() > 0)
618 {
619 p.readInt32(&response.resp_type);
620 p.readInt32(&response.request);
621 p.readInt32(&response.slot_id);
622 p.readInt32(&response.error);
623 if(response.error != 0)
624 {
625 LYERRLOG("response return error");
626 return response.error;
627 }
628 p.readInt32(&num);
629 if(num == 0)
630 {
631 LYERRLOG("no paramters");
632 }else{
633 for(int i = 0; i<num;i++)
634 {
635 resp[i] = lynqStrdupReadString(p);
636 }
637 if(NULL != resp[0])
638 {
rjw02a50422022-01-25 14:57:53 +0800639 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800640 }
641 if(NULL != resp[1])
642 {
rjw02a50422022-01-25 14:57:53 +0800643 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800644 }
645 if(NULL != resp[2])
646 {
rjw02a50422022-01-25 14:57:53 +0800647 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800648 }
649 }
650 }
651 return response.error;
652}
653
654int lynq_query_network_selection_mode(int *netselMode)
655{
656 int ret = -1;
657 if(NULL == netselMode)
658 return ret;
659 int send_num = 0;
660 int recv_num = 0;
661 int readnum = 0;
662 lynq_client_t client_t;
rjw7e50cd32022-01-18 18:30:37 +0800663 memset(&client_t,0,sizeof(client_t));
664 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
665 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800666 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800667
668 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800669 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800670 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 +0800671 if(send_num<0)
672 {
673 LYERRLOG("sendto error:");
674 return -1;
675 }
676
677 //get data
rjw7e50cd32022-01-18 18:30:37 +0800678 Parcel p;
rjwf00f5272022-07-12 16:42:02 +0800679 ret = get_response(p,600);
rjw46769c92022-07-04 21:17:25 +0800680 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
681 if (ret != 0)
682 {
683 return ret;
684 }
rjw7e50cd32022-01-18 18:30:37 +0800685 if(p.dataAvail() > 0)
686 {
687 p.readInt32(&response.resp_type);
688 p.readInt32(&response.request);
689 p.readInt32(&response.slot_id);
690 p.readInt32(&response.error);
691 if(response.error != 0)
692 {
693 LYERRLOG("response return error");
694 return response.error;
695 }
696 p.readInt32(&readnum);
697 p.readInt32(netselMode);
698 }
699 return response.error;
700}
701
702int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
703{
704 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800705 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800706 return ret;
rjw78d04502022-02-24 13:37:11 +0800707 if(strlen(mode) == 0)
708 {
709 return ret;
710 }
rjw7e50cd32022-01-18 18:30:37 +0800711 int send_num = 0;
712 lynq_client_t client_t;
713 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800714 memset(&client_t,0,sizeof(client_t));
715 if(!strcmp(mode,"Auto"))
716 {
717 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
718 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800719 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800720 memset(client_t.param,0,sizeof(client_t.param));
721 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800722 if(mccmnc == NULL)
723 {
724 LYERRLOG("mccmnc is NULL!!!");
725 return ret;
726 }
727 if(strlen(mccmnc) == 0)
728 {
729 LYERRLOG("mccmnc strlen is 0!!!");
730 return ret;
731 }
rjw7e50cd32022-01-18 18:30:37 +0800732 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
733 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800734 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800735 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800736 }else{
737 LYERRLOG("request error");
738 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800739 }
740
rjw9c301f82022-05-25 09:10:33 +0800741 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800742 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 +0800743 if(send_num<0)
744 {
745 LYERRLOG("sendto error:");
746 return ret;
747 }
748
rjw7e50cd32022-01-18 18:30:37 +0800749 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800750 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800751 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
752 if (ret != 0)
753 {
754 return ret;
755 }
rjw7e50cd32022-01-18 18:30:37 +0800756 if(p.dataAvail() > 0)
757 {
758 p.readInt32(&response.resp_type);
759 p.readInt32(&response.request);
760 p.readInt32(&response.slot_id);
761 p.readInt32(&response.error);
762 }
763 return response.error;
764}
765
766int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
767{
768 int ret = -1;
769 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
770 return ret;
771 int send_num = 0;
772 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800773 char *resp[128];
774 lynq_client_t client_t;
775 memset(&client_t,0,sizeof(client_t));
776 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
777 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800778 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800779 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800780 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800781 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 +0800782 if(send_num<0)
783 {
784 LYERRLOG("sendto error:");
785 return ret;
786 }
787
788 //get data
rjw7e50cd32022-01-18 18:30:37 +0800789 Parcel p;
rjw46769c92022-07-04 21:17:25 +0800790 ret = get_response(p,600);
791 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
792 if (ret != 0)
793 {
794 return ret;
795 }
rjw7e50cd32022-01-18 18:30:37 +0800796 if(p.dataAvail() > 0)
797 {
798 p.readInt32(&response.resp_type);
799 p.readInt32(&response.request);
800 p.readInt32(&response.slot_id);
801 p.readInt32(&response.error);
802 if(response.error != 0)
803 {
804 LYERRLOG("response return error");
805 return response.error;
806 }
807 int num =p.readInt32();
808 if(num == 0)
809 {
810 LYERRLOG("no paramters");
811 }else{
812 for(int i = 0; i<num;i++)
813 {
814 resp[i] = lynqStrdupReadString(p);
815 }
816 if(NULL != resp[0])
817 {
rjw02a50422022-01-25 14:57:53 +0800818 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800819 }
820 if(NULL != resp[1])
821 {
rjw02a50422022-01-25 14:57:53 +0800822 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800823 }
824 if(NULL != resp[2])
825 {
rjw02a50422022-01-25 14:57:53 +0800826 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800827 }
828 if(NULL != resp[3])
829 {
rjw02a50422022-01-25 14:57:53 +0800830 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800831 }
832 }
833 }
834 return response.error;
835}
836
rjw4544e132022-04-01 15:00:26 +0800837int 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 +0800838{
839 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800840 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800841 return ret;
842 int send_num = 0;
843 int recv_num = 0;
844 int num = 0;
845 char str[LYNQ_TYPE_BUF];
rjwcdd83ae2022-01-22 14:10:42 +0800846 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800847 lynq_client_t client_t;
848 memset(&client_t,0,sizeof(client_t));
849 if(strlen(type)>LYNQ_TYPE_BUF)
850 {
851 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
852 }
853 memcpy(str,type,strlen(type)+1);
854 strUpper(str);
855 if(!strcmp(str,"VOICE"))
856 {
q.huang47d4dfe2022-08-17 17:52:29 +0800857 if(lynq_get_registration_state_to_buf_voice(regState,netType,netRejected)==0)
858 {
859 return 0;
860 }
rjw7e50cd32022-01-18 18:30:37 +0800861 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
862 }else if(!strcmp(str,"DATA")){
q.huang47d4dfe2022-08-17 17:52:29 +0800863 if(lynq_get_registration_state_to_buf_data(regState,LAC,CID,netType)==0)
864 {
865 return 0;
866 }
rjw7e50cd32022-01-18 18:30:37 +0800867 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
868 }else if(!strcmp(str,"IMS")){
q.huang47d4dfe2022-08-17 17:52:29 +0800869 if(lynq_get_registration_state_to_buf_ims(imsRegState,radioTechFam)==0)
870 {
871 return 0;
872 }
rjw7e50cd32022-01-18 18:30:37 +0800873 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
874 }else{
875 LYERRLOG("request error");
876 return ret;
877 }
878 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800879 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800880 memset(client_t.param,0,sizeof(client_t.param));
881
rjw9c301f82022-05-25 09:10:33 +0800882 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800883 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 +0800884 if(send_num<0)
885 {
886 LYERRLOG("sendto error:");
887 return ret;
888 }
889
890 //get data
rjw7e50cd32022-01-18 18:30:37 +0800891 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800892 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800893 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
894 if (ret != 0)
895 {
896 return ret;
897 }
rjw7e50cd32022-01-18 18:30:37 +0800898 if(p.dataAvail() > 0)
899 {
900 p.readInt32(&response.resp_type);
901 p.readInt32(&response.request);
902 p.readInt32(&response.slot_id);
903 p.readInt32(&response.error);
904 if(response.error != 0)
905 {
906 LYERRLOG("response return error");
907 return response.error;
908 }
909 if(!strcmp(str,"VOICE"))
910 {
911 p.readInt32(&num);
912 if(num == 15)
913 {
914 *regState = atoi(lynqStrdupReadString(p));
915 lynqStrdupReadString(p);
916 lynqStrdupReadString(p);
917 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800918 lynqStrdupReadString(p);
919 lynqStrdupReadString(p);
920 lynqStrdupReadString(p);
921 lynqStrdupReadString(p);
922 lynqStrdupReadString(p);
923 lynqStrdupReadString(p);
924 lynqStrdupReadString(p);
925 lynqStrdupReadString(p);
926 lynqStrdupReadString(p);
927 lynqStrdupReadString(p);
q.huang47d4dfe2022-08-17 17:52:29 +0800928 *netRejected = atoi(lynqStrdupReadString(p));
929 lynq_set_registration_state_to_buf_voice(*regState,*netType,*netRejected);
rjw7e50cd32022-01-18 18:30:37 +0800930 }
931 }else if(!strcmp(str,"DATA")){
932 p.readInt32(&num);
933 if(num == 11)
934 {
935 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800936 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800937 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800938
939 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800940 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800941 *netType = atoi(lynqStrdupReadString(p));
q.huang47d4dfe2022-08-17 17:52:29 +0800942 lynq_set_registration_state_to_buf_data(*regState,LAC,CID,*netType);
rjw7e50cd32022-01-18 18:30:37 +0800943 }
944
945 }else if(!strcmp(str,"IMS")){
946 p.readInt32(&num);
947 if(num == 2)
948 {
949 p.readInt32(imsRegState);
950 p.readInt32(radioTechFam);
q.huang47d4dfe2022-08-17 17:52:29 +0800951 lynq_set_registration_state_to_buf_ims(*imsRegState,*radioTechFam);
rjw7e50cd32022-01-18 18:30:37 +0800952 }
953 }else{
954 LYERRLOG("request error");
955 return ret;
956 }
957 }
958 return response.error;
959}
960
961int lynq_query_prefferred_networktype(int *preNetType)
962{
963 int ret = -1;
964 int send_num = 0;
965 int recv_num = 0;
966 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800967 lynq_client_t client_t;
968 memset(&client_t,0,sizeof(client_t));
969 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
970 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800971 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800972 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800973 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800974 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 +0800975 if(send_num<0)
976 {
977 LYERRLOG("sendto error:");
978 return ret;
979 }
980
981 //get data
rjw7e50cd32022-01-18 18:30:37 +0800982 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800983 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800984 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
985 if (ret != 0)
986 {
987 return ret;
988 }
rjw7e50cd32022-01-18 18:30:37 +0800989 if(p.dataAvail() > 0)
990 {
991 p.readInt32(&response.resp_type);
992 p.readInt32(&response.request);
993 p.readInt32(&response.slot_id);
994 p.readInt32(&response.error);
995 if(response.error != 0)
996 {
997 LYERRLOG("response return error");
998 return response.error;
999 }
1000 p.readInt32(&num);
1001 p.readInt32(preNetType);
1002 }
1003 return response.error;
1004}
1005
1006int lynq_set_prefferred_networktype(const int preffertype)
1007{
1008 int ret = -1;
1009 if(preffertype < 0||preffertype >33)
1010 return ret;
1011 int send_num = 0;
1012 lynq_client_t client_t;
1013 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001014 memset(&client_t,0,sizeof(client_t));
1015 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
1016 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001017 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001018 sprintf(client_t.param,"%d",preffertype);
rjw9c301f82022-05-25 09:10:33 +08001019 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001020 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001021 if(send_num<0)
1022 {
1023 LYERRLOG("sendto error:");
1024 return ret;
1025 }
1026
rjw46769c92022-07-04 21:17:25 +08001027 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001028 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001029 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001030 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001031 {
rjw46769c92022-07-04 21:17:25 +08001032 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001033 }
1034
rjw7e50cd32022-01-18 18:30:37 +08001035 if(p.dataAvail() > 0)
1036 {
1037 p.readInt32(&response.resp_type);
1038 p.readInt32(&response.request);
1039 p.readInt32(&response.slot_id);
1040 p.readInt32(&response.error);
rjw7a8791e2022-09-06 09:07:39 +08001041 if(response.error != 0)
1042 {
1043 LYERRLOG("response return error");
1044 return response.error;
1045 }
rjw7e50cd32022-01-18 18:30:37 +08001046 }
1047
1048 return response.error;
1049
1050}
1051
rjw62a60152022-06-09 17:43:01 +08001052int 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 +08001053{
1054 int ret = -1;
1055 if(NULL == realNum)
1056 return ret;
1057 int send_num = 0;
1058 int recv_num = 0;
1059 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001060 lynq_client_t client_t;
1061 memset(&client_t,0,sizeof(client_t));
1062 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
1063 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001064 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001065 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001066 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001067 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 +08001068 if(send_num<0)
1069 {
1070 LYERRLOG("sendto error:");
1071 return ret;
1072 }
1073
1074 //get data
rjw7e50cd32022-01-18 18:30:37 +08001075 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001076 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001077 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1078 if (ret != 0)
1079 {
1080 return ret;
1081 }
rjw7e50cd32022-01-18 18:30:37 +08001082 if(p.dataAvail() > 0)
1083 {
1084 p.readInt32(&response.resp_type);
1085 p.readInt32(&response.request);
1086 p.readInt32(&response.slot_id);
1087 p.readInt32(&response.error);
1088 if(response.error != 0)
1089 {
1090 LYERRLOG("response return error");
1091 return response.error;
1092 }
1093 p.readInt32(&num);
1094 LYINFLOG("cell info num:%d",num);
1095 *realNum = num;
1096 for(int i = 0;i<num;i++)
1097 {
rjwa8011682022-05-31 17:31:28 +08001098 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw7e50cd32022-01-18 18:30:37 +08001099 }
1100 }
1101 return response.error;
1102
1103}
1104
1105int lynq_set_unsol_cell_info_listrate(const int rate)
1106{
1107 int ret = -1;
1108 int send_num = 0;
1109 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001110 lynq_client_t client_t;
1111 memset(&client_t,0,sizeof(client_t));
1112 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1113 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001114 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001115 sprintf(client_t.param,"%d",rate);
rjw9c301f82022-05-25 09:10:33 +08001116 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001117 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 +08001118 if(send_num<0)
1119 {
1120 LYERRLOG("sendto error:");
1121 return ret;
1122 }
1123
rjw9c301f82022-05-25 09:10:33 +08001124
rjw46769c92022-07-04 21:17:25 +08001125 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001126 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001127 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001128 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001129 {
rjw46769c92022-07-04 21:17:25 +08001130 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001131 }
1132
rjw7e50cd32022-01-18 18:30:37 +08001133 if(p.dataAvail() > 0)
1134 {
1135 p.readInt32(&response.resp_type);
1136 p.readInt32(&response.request);
1137 p.readInt32(&response.slot_id);
1138 p.readInt32(&response.error);
rjw7a8791e2022-09-06 09:07:39 +08001139 if(response.error != 0)
1140 {
1141 LYERRLOG("response return error");
1142 return response.error;
1143 }
rjw7e50cd32022-01-18 18:30:37 +08001144 }
1145
1146 return response.error;
1147}
1148
1149int lynq_set_band_mode(const int bandmode)
1150{
1151 int ret = -1;
1152 int send_num = 0;
1153 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001154 lynq_client_t client_t;
1155 memset(&client_t,0,sizeof(client_t));
1156 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1157 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001158 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001159 sprintf(client_t.param,"%d",bandmode);
rjw9c301f82022-05-25 09:10:33 +08001160 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001161 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 +08001162 if(send_num<0)
1163 {
1164 LYERRLOG("sendto error:");
1165 return ret;
1166 }
1167
rjw46769c92022-07-04 21:17:25 +08001168 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001169 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001170 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001171 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001172 {
rjw46769c92022-07-04 21:17:25 +08001173 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001174 }
1175
rjw7e50cd32022-01-18 18:30:37 +08001176 if(p.dataAvail() > 0)
1177 {
1178 p.readInt32(&response.resp_type);
1179 p.readInt32(&response.request);
1180 p.readInt32(&response.slot_id);
1181 p.readInt32(&response.error);
rjw7a8791e2022-09-06 09:07:39 +08001182 if(response.error != 0)
1183 {
1184 LYERRLOG("response return error");
1185 return response.error;
1186 }
rjw7e50cd32022-01-18 18:30:37 +08001187 }
1188
1189 return response.error;
1190}
1191
1192int lynq_query_available_bandmode(int availBanMode[])
1193{
1194 int ret = -1;
1195 if(NULL == availBanMode)
1196 return ret;
1197 int send_num = 0;
1198 int recv_num = 0;
1199 int num = 0;
1200 int res = 0;
rjw7e50cd32022-01-18 18:30:37 +08001201 lynq_client_t client_t;
1202 memset(&client_t,0,sizeof(client_t));
1203 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
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
1215 //get data
rjw46769c92022-07-04 21:17:25 +08001216 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001217 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001218 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001219 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001220 {
rjw46769c92022-07-04 21:17:25 +08001221 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001222 }
rjw78d04502022-02-24 13:37:11 +08001223 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001224 {
1225 availBanMode[i]=0;
1226 }
rjw7e50cd32022-01-18 18:30:37 +08001227 if(p.dataAvail() > 0)
1228 {
1229 p.readInt32(&response.resp_type);
1230 p.readInt32(&response.request);
1231 p.readInt32(&response.slot_id);
1232 p.readInt32(&response.error);
1233 if(response.error != 0)
1234 {
1235 LYERRLOG("response return error");
1236 return response.error;
1237 }
1238 p.readInt32(&num);
1239 LYINFLOG("num = %d",num);
1240 availBanMode[0] = num;
1241 for(int i=1 ;i<=num;i++)
1242 {
1243 p.readInt32(&res);
1244 availBanMode[i]=res;
1245 }
1246 }
1247
1248 return response.error;
1249}
1250
1251int lynq_radio_on(const int data)
1252{
1253 int ret = -1;
1254 if(data < 0)
1255 return ret;
1256 int send_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001257 int recv_num = 0;
1258 lynq_client_t client_t;
1259 memset(&client_t,0,sizeof(client_t));
1260 client_t.request = RIL_REQUEST_RADIO_POWER;
1261 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001262 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001263 sprintf(client_t.param,"%d",data);
rjw9c301f82022-05-25 09:10:33 +08001264 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001265 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 +08001266 if(send_num<0)
1267 {
1268 LYERRLOG("sendto error:");
1269 return ret;
1270 }
1271
rjw7e50cd32022-01-18 18:30:37 +08001272 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001273 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001274 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1275 if (ret != 0)
1276 {
1277 return ret;
1278 }
rjw7e50cd32022-01-18 18:30:37 +08001279 if(p.dataAvail() > 0)
1280 {
1281 p.readInt32(&response.resp_type);
1282 p.readInt32(&response.request);
1283 p.readInt32(&response.slot_id);
1284 p.readInt32(&response.error);
rjw7a8791e2022-09-06 09:07:39 +08001285 if(response.error != 0)
1286 {
1287 LYERRLOG("response return error");
1288 return response.error;
1289 }
rjw7e50cd32022-01-18 18:30:37 +08001290 }
1291
1292 return response.error;
1293}
1294
1295int lynq_query_radio_tech(int* radioTech)
1296{
1297 int ret = -1;
1298 if(NULL == radioTech)
1299 return ret;
1300 int send_num = 0;
1301 int recv_num = 0;
1302 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001303 lynq_client_t client_t;
1304 memset(&client_t,0,sizeof(client_t));
1305 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1306 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001307 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001308 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001309 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001310 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 +08001311 if(send_num<0)
1312 {
1313 LYERRLOG("sendto error:");
1314 return ret;
1315 }
1316
rjw7e50cd32022-01-18 18:30:37 +08001317 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001318 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001319 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1320 if (ret != 0)
1321 {
1322 return ret;
1323 }
rjw7e50cd32022-01-18 18:30:37 +08001324 if(p.dataAvail() > 0)
1325 {
1326 p.readInt32(&response.resp_type);
1327 p.readInt32(&response.request);
1328 p.readInt32(&response.slot_id);
1329 p.readInt32(&response.error);
1330 if(response.error != 0)
1331 {
1332 LYERRLOG("response return error");
1333 return response.error;
1334 }
1335 p.readInt32(&num);
1336 p.readInt32(radioTech);
1337 }
1338 return response.error;
1339}
1340
1341int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1342{
1343 int ret = -1;
1344 if(NULL == solSigStren)
1345 return ret;
1346 int send_num = 0;
1347 int recv_num = 0;
1348 int sum = 0;
1349 int LTE_signalstrength = 0;
1350 int WCDMA_signalstrength = 0;
1351 int none = 0;
rjw7e50cd32022-01-18 18:30:37 +08001352 lynq_client_t client_t;
1353 memset(&client_t,0,sizeof(client_t));
1354 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1355 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001356 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001357 memset(client_t.param,0,sizeof(client_t.param));
1358
rjw9c301f82022-05-25 09:10:33 +08001359 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001360 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 +08001361 if(send_num<0)
1362 {
1363 LYERRLOG("sendto error:");
1364 return ret;
1365 }
1366
1367 //get data
rjw7e50cd32022-01-18 18:30:37 +08001368 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001369 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001370 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1371 if (ret != 0)
1372 {
1373 return ret;
1374 }
rjw7e50cd32022-01-18 18:30:37 +08001375 if(p.dataAvail() > 0)
1376 {
1377 p.readInt32(&response.resp_type);
1378 p.readInt32(&response.request);
1379 p.readInt32(&response.slot_id);
1380 p.readInt32(&response.error);
1381 if(response.error != 0)
1382 {
1383 LYERRLOG("response return error");
1384 return response.error;
1385 }
1386
1387 p.readInt32(&solSigStren->rssi);
1388 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1389 {
1390 solSigStren->gw_sig_valid = 1;
1391 }else{
1392 solSigStren->gw_sig_valid = 0;
1393 }
1394
1395 p.readInt32(&none);
1396 p.readInt32(&none);
1397 p.readInt32(&none);
1398 p.readInt32(&none);
1399 p.readInt32(&none);
1400 p.readInt32(&none);
1401 p.readInt32(&none);
1402 p.readInt32(&LTE_signalstrength);
1403 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1404 p.readInt32(&solSigStren->rsrp);
1405 p.readInt32(&solSigStren->rsrq);
1406 p.readInt32(&solSigStren->rssnr);
1407 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1408 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1409 {
1410 solSigStren->lte_sig_valid = 1;
1411 }else{
1412 solSigStren->lte_sig_valid = 0;
1413 }
1414
1415 p.readInt32(&none);
1416 p.readInt32(&none);
1417 p.readInt32(&none);
1418 p.readInt32(&none);
1419 p.readInt32(&none);
1420 p.readInt32(&WCDMA_signalstrength);
1421 p.readInt32(&none);
1422 p.readInt32(&solSigStren->rscp);
1423 p.readInt32(&solSigStren->ecno);
1424 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1425 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1426 {
rjwcdd83ae2022-01-22 14:10:42 +08001427 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001428 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001429 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001430 }
rjwcdd83ae2022-01-22 14:10:42 +08001431 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001432 p.readInt32(&solSigStren->ssRsrp);
1433 p.readInt32(&solSigStren->ssRsrq);
1434 p.readInt32(&solSigStren->ssSinr);
1435 p.readInt32(&solSigStren->csiRsrp);
1436 p.readInt32(&solSigStren->csiRsrq);
1437 p.readInt32(&solSigStren->csiSinr);
1438 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1439 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1440 if(sum != 0)
1441 {
1442 solSigStren->nr_sig_valid = 1;
1443 }else{
1444 LYERRLOG("None of NR signal info");
1445 }
1446 }
1447 return response.error;
1448}
rjwbc8a05f2022-03-02 15:23:11 +08001449
rjw4a5a78d2022-03-10 11:04:24 +08001450int lynq_set_ims(const int ims_mode)
1451{
1452 int ret = -1;
1453 if (ims_mode < 0 || ims_mode > 1)
1454 {
1455 LYERRLOG("incoming ims_mode error");
1456 return ret;
1457 }
1458 int send_num = 0;
rjw4a5a78d2022-03-10 11:04:24 +08001459 int recv_num = 0;
1460 lynq_client_t client_t;
1461
1462 memset(&client_t,0,sizeof(client_t));
1463 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1464 client_t.paramLen = 1;
1465 client_t.uToken = network_Global_uToken;
1466 sprintf(client_t.param,"%d",ims_mode);
rjw9c301f82022-05-25 09:10:33 +08001467 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001468 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1469 if (send_num<0)
1470 {
1471 LYERRLOG("sendto error:");
1472 return ret;
1473 }
1474
rjw4a5a78d2022-03-10 11:04:24 +08001475 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001476 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001477 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1478 if (ret != 0)
1479 {
1480 return ret;
1481 }
rjw4a5a78d2022-03-10 11:04:24 +08001482 if (p.dataAvail() > 0)
1483 {
1484 p.readInt32(&response.resp_type);
1485 p.readInt32(&response.request);
1486 p.readInt32(&response.slot_id);
1487 p.readInt32(&response.error);
rjw7a8791e2022-09-06 09:07:39 +08001488 if(response.error != 0)
1489 {
1490 LYERRLOG("response return error");
1491 return response.error;
1492 }
rjw4a5a78d2022-03-10 11:04:24 +08001493 }
1494
1495 return response.error;
1496}
1497
1498
rjwbc8a05f2022-03-02 15:23:11 +08001499/*Used to wait for an update signal*/
1500int lynq_wait_signalchanges(int *handle)
1501{
1502 LYDBGLOG("start wait signalchanges info");
1503 if(NULL == handle)
1504 {
1505 LYERRLOG("illegal input");
1506 return -1;
1507 }
1508 wait_signal_changes();
1509 LYDBGLOG("get signalchanges");
1510 *handle = network_wait_urc_id;
1511 return 0;
1512}
1513/*Used to get urc info*/
1514int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1515{
1516 LYDBGLOG("start get urc info");
1517 if(handle != 1002&&handle != 1009)
1518 {
1519 LYINFLOG("invalid handle!!!");
1520 return -1;
1521 }
1522 if(NULL == solSigStren && NULL == slot_id)
1523 {
1524 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1525 return -1;
1526 }
1527 switch(handle)
1528 {
1529 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1530 {
1531 LYDBGLOG("get state update to VOICE");
1532 *slot_id = network_urc_slot_id;
1533 LYINFLOG("slot_id = %d",network_urc_slot_id);
rjw25d01752022-08-04 09:42:00 +08001534 break;
rjwbc8a05f2022-03-02 15:23:11 +08001535 }
1536 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1537 {
1538 LYDBGLOG("get state update to signal info");
1539 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1540 solSigStren->rssi = network_urc_solSigStren.rssi;
1541 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1542 solSigStren->rscp = network_urc_solSigStren.rscp;
1543 solSigStren->ecno = network_urc_solSigStren.ecno;
1544 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1545 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1546 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1547 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1548 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1549 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1550 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1551 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1552 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1553 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1554 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
rjw25d01752022-08-04 09:42:00 +08001555 break;
rjwbc8a05f2022-03-02 15:23:11 +08001556 }
1557 }
1558 return 0;
rjw4200a082022-05-17 17:58:35 +08001559}
lh3a26dd52022-07-01 04:44:57 -07001560
1561/**@brief parse at response,return error code,and the response
1562* @param response [IN] <response>:original at response,This parameter must be a character array.
1563
1564* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1565* field:
1566* eg:
1567* "+cnum: 123456\n+cnum: 456"
1568* value:12345;456;
1569* @param value_len [IN] <value_len>: The value length.
1570
1571* @return:AT error code
1572*/
1573static int parse_at_result(char response[],char value[],int value_len)
1574{
1575 if(response == NULL || value == NULL)
1576 {
1577 LYERRLOG("parameter invalid");
1578 return -1;
1579 }
1580 if(strstr(response,"ERROR"))
1581 {
1582 int i;
1583 for(i = 0;i < strlen(response);i++)
1584 {
1585 if(response[i]==':')
1586 {
1587 break;
1588 }
1589 }
1590 if(i < strlen(response))
1591 {
1592 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1593 return atoi(response+i+1);
1594 }
1595 else
1596 {
1597 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1598 return 100; //unknown
1599 }
1600 }
1601 else if(strstr(response,"OK"))
1602 {
1603 /** parse the at response value
1604 * eg:
1605 * --> at+cnum
1606 * <-- +CNUM:"1243452"
1607 * need parse the "1243452" to <value>
1608 *@ To-Do
1609 */
1610 int count;
1611 int resp_addr[32] = {0};
1612 char temp_buf[1024] = {0};
1613 char *dest;
1614 dest = NULL;
1615 count = 0;
1616 int res_len = strlen(response);
1617 LYINFLOG("res_len:%d",res_len);
1618 for(int i = 0; i < res_len; i++)
1619 {
1620 if(response[i]==':')
1621 {
1622 resp_addr[count] = i;
1623 count++;
1624 }
1625 if(response[i] == '\n')
1626 {
1627 response[i] = '\0';
1628 }
1629 }
1630 LYINFLOG("count:%d",count);
1631 if(count > 0)
1632 {
1633 for(int i = 0; i < count; i++)
1634 {
1635 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1636 {
1637 LYINFLOG("2 will be out of range\n");
1638 break;
1639 }
1640 if(strlen(temp_buf) >= 1023)
1641 {
1642 LYINFLOG("1 will be out of range\n");
1643 break;
1644 }
1645 strcat(temp_buf,response+resp_addr[i]+2);
1646
1647 if(strlen(temp_buf) >= 1023)
1648 {
1649 LYINFLOG("1 will be out of range\n");
1650 break;
1651 }
1652 strcat(temp_buf,";");
1653 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1654 }
1655 LYINFLOG("parse_result:%s\n",temp_buf);
1656 if(strlen(temp_buf) > value_len)
1657 {
1658 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1659 memcpy(value,temp_buf,value_len);
1660 }
1661 else
1662 {
1663 memcpy(value,temp_buf,strlen(temp_buf));
1664 }
1665 }
1666 return 0;
1667 }
1668 else
1669 {
1670 LYINFLOG("%s this response invalid\n",response);
1671 return -1;
1672 }
1673}
1674#ifdef MODEM_GEN97
1675
1676int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1677{
1678 int ret;
1679 int send_num;
1680 int recv_len;
1681 Parcel p;
1682 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1683 lynq_client_t client_t;
1684 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1685
1686 ret = -1;
1687 send_num = -1;
1688 recv_len = -1;
1689
1690 LYINFLOG("lynq_oos_recover_timer_interval start");
1691 if((mode < 0) || (mode >1) || (NULL == interval) || (NULL == result))
1692 {
1693 LYERRLOG("lynq_oos_recover_timer_interval paramter fail!!!");
1694 return ret;
1695 }
1696
1697 memset(&client_t,0,sizeof(client_t));
1698 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL
1699 client_t.paramLen = 1;
1700 client_t.uToken = network_Global_uToken;
1701 if(mode == 0)
1702 {
1703 sprintf(client_t.param,"AT+ERSCFG=%s",interval);
1704 }
1705 else
1706 {
1707 sprintf(client_t.param,"AT+ERSCFG?",interval);
1708 }
1709 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1710 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1711 if(send_num < 0)
1712 {
1713 LYERRLOG("sendto error:%s",strerror(errno));
1714 return ret;
1715 }
1716 ret = get_response(p,-1); //use defualt time (5s)
1717 if(ret != 0)
1718 {
1719 return ret;
1720 }
1721 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1722 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1723 if(0 == response.error)
1724 {
1725 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1726 LYINFLOG("get recover timer interval");
1727 p.readInt32(&recv_len);
1728 if(recv_len == -1)
1729 {
1730 LYINFLOG("no responset");
1731 return -1;
1732 }
1733 else
1734 {
1735 LYINFLOG("recv_len:%d",recv_len);
1736 p.read(response_interval,recv_len);
1737 }
1738 LYINFLOG("response_interval:%s",response_interval);
1739 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1740 if(mode == 1)
1741 {
1742 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1743 {
1744 memcpy(result,res_data,strlen(res_data));
1745 }
1746 }
1747 LYINFLOG("ret:%d",ret);
1748 return ret;
1749 }
1750 else
1751 {
1752 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1753 return response.error;
1754 }
1755}
1756
1757int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1758{
1759 int ret;
1760 int send_num;
1761 int recv_len;
1762 Parcel p;
1763 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1764 lynq_client_t client_t;
1765 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1766
1767 ret = -1;
1768 send_num = -1;
1769 recv_len = -1;
1770
1771 LYINFLOG("lynq_oos_deep_sleep_recover_timer_interval start");
1772 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
1773 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1774 {
1775 LYERRLOG("lynq_oos_deep_sleep_recover_timer_interval paramter fail!!!");
1776 return ret;
1777 }
1778
1779 memset(&client_t,0,sizeof(client_t));
1780 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL
1781 client_t.paramLen = 1;
1782 client_t.uToken = network_Global_uToken;
1783 sprintf(client_t.param,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
1784 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1785 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1786 if(send_num<0)
1787 {
1788 LYERRLOG("sendto error:%s",strerror(errno));
1789 return ret;
1790 }
1791 ret = get_response(p,-1); //use defualt time (5s)
1792 if(ret != 0)
1793 {
1794 return ret;
1795 }
1796 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1797 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1798 if(0 == response.error)
1799 {
1800 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1801 LYINFLOG("set deep sleep recover timer interval response");
1802 p.readInt32(&recv_len);
1803 if(recv_len == -1)
1804 {
1805 LYINFLOG("no responset");
1806 return -1;
1807 }
1808 else
1809 {
1810 LYINFLOG("recv_len:%d",recv_len);
1811 p.read(response_interval,recv_len);
1812 }
1813 LYINFLOG("response_interval:%s",response_interval);
1814 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1815 return ret;
1816 }
1817 else
1818 {
1819 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1820 return response.error;
1821 }
1822}
1823#endif
1824