blob: 3752455f945b30767b041c5cdbfe22df57cf32fa [file] [log] [blame]
rjw2183a5f2022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjwc3e81b82022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw2183a5f2022-01-18 18:30:37 +080013
14#include "lynq_network.h"
15#include "liblog/lynq_deflog.h"
16#define LYNQ_SERVICE_PORT 8088
17#define LYNQ_URC_SERVICE_PORT 8086
18#define LYNQ_URC_ADDRESS "0.0.0.0"
19#define LYNQ_ADDRESS "127.0.0.1"
20#define LYNQ_REQUEST_PARAM_BUF 8192
21#define LYNQ_REC_BUF 8192
22#define LYNQ_RESP_BUF 128
23#define LYNQ_TYPE_BUF 10
24#define USER_LOG_TAG "LYNQ_NETWORK"
25
26
27using ::android::Parcel;
28
29
30typedef struct{
31 int uToken;
32 int request;
33 int paramLen;
34 char param[LYNQ_REQUEST_PARAM_BUF];
35}lynq_client_t;
36
37typedef struct{
38 int resp_type;
39 int request;
40 int slot_id;
41 int error;
42}lynq_resp_t;
43
44lynq_client_t client_t;
45lynq_resp_t response;
rjw415439a2022-03-02 15:23:11 +080046
47int network_len_addr_serv;
48int network_len_urc_addr_serv;
49struct sockaddr_in network_addr_serv;
50struct sockaddr_in network_urc_addr_serv;
51static int network_sock_fd = 0;
52int network_urc_sock_fd = 0;
53int network_Global_uToken = 0;
54int network_slot_id = -1;
55int network_urc_slot_id = -1;
56int network_urc_status = 1;
57int network_wait_urc_id = 0;
58signalStrength_t network_urc_solSigStren;
rjw267d8ee2022-03-15 09:21:29 +080059/**g_lynq_network_init_flag
60* @brief mark network initialization state
61* 0:deinit status
62* 1:init state
63*/
64static int g_lynq_network_init_flag = 0;
rjw2183a5f2022-01-18 18:30:37 +080065
rjw415439a2022-03-02 15:23:11 +080066static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
67static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw2183a5f2022-01-18 18:30:37 +080068
rjw32f04c22022-05-25 09:10:33 +080069/**g_lynq_network_sendto_mutex
70* @brief mark network send request mutex
71*/
72static pthread_mutex_t g_lynq_network_sendto_mutex;
73
74//static pthread_mutex_t g_lynq_network_recv_mutex;
75
rjw2183a5f2022-01-18 18:30:37 +080076typedef enum{
77 LYNQ_E_CARDSTATE_ERROR=8000,
78 /* The voice service state is out of service*/
79 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
80 /* The voice service state is EMERGENCY_ONLY*/
81 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
82 /* The radio power is power off*/
83 LYNQ_E_STATE_POWER_OFF=8003,
84 LYNQ_E_TIME_OUT=8004,
85 /*create or open sms DB fail */
86 LYNQ_E_SMS_DB_FAIL=8005,
87 /*Failed to execute sql statement*/
88 LYNQ_E_SMS_SQL_FAIL = 8006,
89 LYNQ_E_SMS_NOT_FIND = 8007,
90 /* The logic conflict*/
91 LYNQ_E_CONFLICT=9000,
92 /*Null anomaly*/
93 LYNQ_E_NULL_ANONALY=9001
94}LYNQ_E;
95
lh0d4c5102022-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{
rjw95793c72022-07-05 11:50:31 +0800109 int len = 0;
110 char recvline[LYNQ_REC_BUF];
lh0d4c5102022-07-01 04:44:57 -0700111 bzero(recvline,LYNQ_REC_BUF);
112 LYINFLOG("get response");
113 /* receive data from server */
114 struct timeval timeOut;
rjw95793c72022-07-05 11:50:31 +0800115 timeOut.tv_sec = 30; //defualt 5s
lh0d4c5102022-07-01 04:44:57 -0700116 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;
rjw95793c72022-07-05 11:50:31 +0800132 }
lh0d4c5102022-07-01 04:44:57 -0700133 if (recvline != NULL)
134 {
rjw95793c72022-07-05 11:50:31 +0800135 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)
lh0d4c5102022-07-01 04:44:57 -0700141{
142 LYINFLOG("jump header");
rjw95793c72022-07-05 11:50:31 +0800143 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 }
lh0d4c5102022-07-01 04:44:57 -0700155}
156
rjw415439a2022-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
rjw2183a5f2022-01-18 18:30:37 +0800174void *thread_urc_recv(void *p)
175{
176 Parcel *urc_p =NULL;
177 char urc_data[LYNQ_REC_BUF];
rjw2183a5f2022-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;
rjw2183a5f2022-01-18 18:30:37 +0800183 int urc_LTE_signalstrength = 0;
184 int urc_WCDMA_signalstrength = 0;
rjw2183a5f2022-01-18 18:30:37 +0800185 LYINFLOG("urc thread is running");
rjw415439a2022-03-02 15:23:11 +0800186 while(network_urc_status)
rjw2183a5f2022-01-18 18:30:37 +0800187 {
188 bzero(urc_data,LYNQ_REC_BUF);
rjw415439a2022-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);
rjw2183a5f2022-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);
rjw415439a2022-03-02 15:23:11 +0800202 urc_p->readInt32(&network_urc_slot_id);
rjw2183a5f2022-01-18 18:30:37 +0800203 switch(urc_id)
204 {
205 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
206 {
rjw415439a2022-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();
rjwa9e75192022-08-04 09:42:00 +0800210 break;
rjw2183a5f2022-01-18 18:30:37 +0800211 }
212 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
213 {
rjw415439a2022-03-02 15:23:11 +0800214 urc_p->readInt32(&network_urc_solSigStren.rssi);
215 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw2183a5f2022-01-18 18:30:37 +0800216 {
rjw415439a2022-03-02 15:23:11 +0800217 network_urc_solSigStren.gw_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800218 }else{
rjw415439a2022-03-02 15:23:11 +0800219 network_urc_solSigStren.gw_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800220 }
rjw415439a2022-03-02 15:23:11 +0800221 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800222 {
rjw415439a2022-03-02 15:23:11 +0800223 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw7610e272022-02-24 13:37:11 +0800224 }
rjw2183a5f2022-01-18 18:30:37 +0800225 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(&none);
232 urc_p->readInt32(&urc_LTE_signalstrength);
233 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjw415439a2022-03-02 15:23:11 +0800234 urc_p->readInt32(&network_urc_solSigStren.rsrp);
235 urc_p->readInt32(&network_urc_solSigStren.rsrq);
236 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw2183a5f2022-01-18 18:30:37 +0800237 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
238 {
rjw415439a2022-03-02 15:23:11 +0800239 network_urc_solSigStren.lte_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800240 }else{
rjw415439a2022-03-02 15:23:11 +0800241 network_urc_solSigStren.lte_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +0800242 }
rjw415439a2022-03-02 15:23:11 +0800243 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800244 {
245 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
246 }
rjw2183a5f2022-01-18 18:30:37 +0800247 urc_p->readInt32(&none);
248 urc_p->readInt32(&none);
249 urc_p->readInt32(&none);
250 urc_p->readInt32(&none);
251 urc_p->readInt32(&none);
252 urc_p->readInt32(&urc_WCDMA_signalstrength);
253 urc_p->readInt32(&none);
rjw415439a2022-03-02 15:23:11 +0800254 urc_p->readInt32(&network_urc_solSigStren.rscp);
255 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw2183a5f2022-01-18 18:30:37 +0800256 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
257 {
rjw415439a2022-03-02 15:23:11 +0800258 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800259 }else{
rjw415439a2022-03-02 15:23:11 +0800260 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800261 }
rjw415439a2022-03-02 15:23:11 +0800262 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800263 {
264 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw2183a5f2022-01-18 18:30:37 +0800265 }
rjw415439a2022-03-02 15:23:11 +0800266 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
267 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
268 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
269 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
270 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
271 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
272 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
273 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800274 if(NR_sum != 0)
275 {
rjw415439a2022-03-02 15:23:11 +0800276 network_urc_solSigStren.nr_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +0800277 }else{
rjw415439a2022-03-02 15:23:11 +0800278 network_urc_solSigStren.nr_sig_valid = 0;
rjw7610e272022-02-24 13:37:11 +0800279 }
rjw415439a2022-03-02 15:23:11 +0800280 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw7610e272022-02-24 13:37:11 +0800281 {
282 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
rjw415439a2022-03-02 15:23:11 +0800283 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
284 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw2183a5f2022-01-18 18:30:37 +0800285 }
rjw415439a2022-03-02 15:23:11 +0800286 network_wait_urc_id = urc_id;
287 send_signal_changes();
rjwa9e75192022-08-04 09:42:00 +0800288 break;
rjw2183a5f2022-01-18 18:30:37 +0800289 }
290 }
291 }
292 }
293}
294
295
296int lynq_server_socket_start()
297{
lh0d4c5102022-07-01 04:44:57 -0700298 struct timeval timeOut;
rjw415439a2022-03-02 15:23:11 +0800299 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
300 if(-1 == network_sock_fd)
rjw2183a5f2022-01-18 18:30:37 +0800301 {
302 LYERRLOG("socket open error");
303 return -1;
304 }
lh0d4c5102022-07-01 04:44:57 -0700305
306 timeOut.tv_sec = 5;
307 timeOut.tv_usec = 0;
308 if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
309 {
310 LYERRLOG("time out setting failed\n");
311 return -1;
312 }
rjw415439a2022-03-02 15:23:11 +0800313 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800314
rjw415439a2022-03-02 15:23:11 +0800315 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
316 network_addr_serv.sin_family = AF_INET;
317 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
318 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
319 network_len_addr_serv = sizeof(network_addr_serv);
lh0d4c5102022-07-01 04:44:57 -0700320
321
rjw2183a5f2022-01-18 18:30:37 +0800322 return 0;
323}
324
325int lynq_urc_socket_start()
326{
327 pthread_t tid;
328 pthread_attr_t attr;
329 int on = 1;
rjw415439a2022-03-02 15:23:11 +0800330 network_urc_sock_fd = -1;
rjw2183a5f2022-01-18 18:30:37 +0800331 int ret = 0;
rjw415439a2022-03-02 15:23:11 +0800332 network_len_urc_addr_serv = sizeof(sockaddr_in);
333 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
334 if (network_urc_sock_fd <0){
rjw2183a5f2022-01-18 18:30:37 +0800335 LYERRLOG("urc socket error");
336 ret = -1;
337 }
rjw415439a2022-03-02 15:23:11 +0800338 network_urc_addr_serv.sin_family = AF_INET;
339 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
340 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw2183a5f2022-01-18 18:30:37 +0800341 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjw415439a2022-03-02 15:23:11 +0800342 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw2183a5f2022-01-18 18:30:37 +0800343 if(ret <0)
344 {
345 LYERRLOG("urc socket set error");
346 return -1;
347 }
rjw415439a2022-03-02 15:23:11 +0800348 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw2183a5f2022-01-18 18:30:37 +0800349 if(ret <0)
350 {
351 LYERRLOG("urc socket bind error");
352 return -1;
353 }
354 pthread_attr_init(&attr);
355 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjw415439a2022-03-02 15:23:11 +0800356 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw2183a5f2022-01-18 18:30:37 +0800357 if(ret <0)
358 {
359 LYERRLOG("urc pthread create error");
360 return -1;
361 }
362 LYINFLOG("urc start success");
363 return 0;
364}
365
366int lynq_network_init(int utoken){
rjw267d8ee2022-03-15 09:21:29 +0800367 if(g_lynq_network_init_flag == 1)
368 {
369 LYERRLOG("init twice is not allowed");
370 return -1;
371 }
372 g_lynq_network_init_flag = 1;
rjw2183a5f2022-01-18 18:30:37 +0800373 if(utoken <0){
374 LYERRLOG("init err");
375 return -1;
376 }
rjw415439a2022-03-02 15:23:11 +0800377 network_urc_status = 1;
378 network_Global_uToken = utoken;
rjw2183a5f2022-01-18 18:30:37 +0800379 LYLOGSET(LOG_INFO);
380 LYLOGEINIT(USER_LOG_TAG);
381 int ret = 0;
382
383 ret = lynq_server_socket_start();
384 if(ret !=0)
385 {
386 LYERRLOG("init socket client fail!!!");
387 return -1;
388 }
389 ret = lynq_urc_socket_start();
390 if(ret != 0)
391 {
392 LYERRLOG("init socket urc fail!!!");
393 return -1;
394 }
rjw32f04c22022-05-25 09:10:33 +0800395 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw2183a5f2022-01-18 18:30:37 +0800396 return 0;
397}
398
399int strUpper(char * str)
400{
401 int i=0;
402 while(1)
403 {
404 if(str[i]=='\0')
405 {
406 break;
407 }
408 if(str[i]>='a'&&str[i]<='z')
409 {
410 str[i]=str[i]-32;
411 }
412 i++;
413 }
414 return 0;
415}
416
rjw83d48cb2022-06-09 17:43:01 +0800417int copyCellInfoList(Parcel &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw2183a5f2022-01-18 18:30:37 +0800418{
419 int32_t v=0;
420 int64_t v6=0;
421 if(NULL == cellinfo)
422 {
423 LYERRLOG("*cellinfo error");
424 }
425
426 int nothing = 0;
rjw83d48cb2022-06-09 17:43:01 +0800427 int tmp_uint64 = 0;
rjw2183a5f2022-01-18 18:30:37 +0800428 p.readInt32(&v);
429 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
430 p.readInt32(&nothing);
431 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
432 // p.readInt32(&cellinfo->cellinfo.registered);
433 p.readInt32(&v);
434 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
435 p.readInt64(&v6);
436 // cellinfo->cellinfo.timeStamp = v6;
437 switch(cellinfoType) {
438 case RIL_CELL_INFO_TYPE_GSM: {
439 p.readInt32(&nothing);
440 p.readInt32(&nothing);
441 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800442 p.readInt32(&tmp_uint64);
rjw2183a5f2022-01-18 18:30:37 +0800443 p.readInt32(&nothing);
444 p.readInt32(&nothing);
445 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800446 *cellinfo = (uint64_t)tmp_uint64;
rjw337d0472022-05-17 16:30:32 +0800447 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800448 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800449 break;
450 }
451 case RIL_CELL_INFO_TYPE_WCDMA: {
452 p.readInt32(&nothing);
453 p.readInt32(&nothing);
454 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800455 p.readInt32(&tmp_uint64);
rjw2183a5f2022-01-18 18:30:37 +0800456 p.readInt32(&nothing);
457 p.readInt32(&nothing);
458 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800459 *cellinfo = (uint64_t)tmp_uint64;
rjw079dac12022-05-17 17:58:35 +0800460 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800461 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800462 break;
463 }
464 case RIL_CELL_INFO_TYPE_CDMA: {
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 p.readInt32(&nothing);
474 p.readInt32(&nothing);
475 cellinfo = 0;
rjw337d0472022-05-17 16:30:32 +0800476 tac = &nothing;
rjw9ffd2c42022-05-31 17:31:28 +0800477 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800478 break;
479 }
480 case RIL_CELL_INFO_TYPE_LTE: {
481 p.readInt32(&nothing);
482 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800483 p.readInt32(&tmp_uint64);
rjw2183a5f2022-01-18 18:30:37 +0800484 p.readInt32(&nothing);
rjw337d0472022-05-17 16:30:32 +0800485 p.readInt32(tac);
rjw9ffd2c42022-05-31 17:31:28 +0800486 p.readInt32(earfcn);
rjw2183a5f2022-01-18 18:30:37 +0800487 p.readInt32(&nothing);
488 p.readInt32(&nothing);
489 p.readInt32(&nothing);
490 p.readInt32(&nothing);
491 p.readInt32(&nothing);
492 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800493 *cellinfo = (uint64_t)tmp_uint64;
rjw2183a5f2022-01-18 18:30:37 +0800494 break;
495 }
496 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
497 p.readInt32(&nothing);
498 p.readInt32(&nothing);
499 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800500 p.readInt32(&tmp_uint64);
rjw2183a5f2022-01-18 18:30:37 +0800501 p.readInt32(&nothing);
502 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800503 *cellinfo = (uint64_t)tmp_uint64;
rjw9ffd2c42022-05-31 17:31:28 +0800504 tac = &nothing;
505 earfcn = &nothing;
rjw2183a5f2022-01-18 18:30:37 +0800506 break;
507 }
508 case RIL_CELL_INFO_TYPE_NR: {
509 p.readInt32(&nothing);
510 p.readInt32(&nothing);
rjw83d48cb2022-06-09 17:43:01 +0800511 p.readUint64(cellinfo);
rjw2183a5f2022-01-18 18:30:37 +0800512 p.readInt32(&nothing);
rjw337d0472022-05-17 16:30:32 +0800513 p.readInt32(tac);
rjw9ffd2c42022-05-31 17:31:28 +0800514 p.readInt32(earfcn);
rjw2183a5f2022-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);
521 break;
522 }
523 }
rjw83d48cb2022-06-09 17:43:01 +0800524 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjw9ffd2c42022-05-31 17:31:28 +0800525 LYINFLOG("tac in fUNC :%d",*tac);
526 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw2183a5f2022-01-18 18:30:37 +0800527 return 0;
528}
529
530int lynq_network_deinit(void){
rjw267d8ee2022-03-15 09:21:29 +0800531 if (g_lynq_network_init_flag == 0)
532 {
533 LYERRLOG("deinit twice is not allowed");
534 return -1;
535 }
536 if (network_sock_fd > 0)
537 {
538 close(network_sock_fd);
539 }
540 g_lynq_network_init_flag = 0;
rjw415439a2022-03-02 15:23:11 +0800541 network_urc_status = 0;
rjw2183a5f2022-01-18 18:30:37 +0800542 return 0;
543}
544
545static char * lynqStrdupReadString(Parcel &p) {
546 size_t stringlen;
547 const char16_t *s16;
548
549 s16 = p.readString16Inplace(&stringlen);
550 return strndup16to8(s16, stringlen);
551}
552
553int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
554{
555 int ret = -1;
556 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
557 return ret;
558 int send_num = 0;
559 int recv_num = 0;
560 int num = 0;
561 lynq_client_t client_t;
rjwaae473f2022-01-25 14:57:53 +0800562 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800563 memset(&client_t,0,sizeof(client_t));
564 client_t.request = RIL_REQUEST_OPERATOR;
565 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800566 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800567 memset(client_t.param,0,sizeof(client_t.param));
568
rjw32f04c22022-05-25 09:10:33 +0800569 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800570 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800571 if(send_num<0)
572 {
573 LYERRLOG("sendto error:");
574 return ret;
575 }
576
577 //get data
rjw2183a5f2022-01-18 18:30:37 +0800578 Parcel p;
rjw95793c72022-07-05 11:50:31 +0800579 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +0800580 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
581 if (ret != 0)
582 {
583 return ret;
584 }
585
rjw2183a5f2022-01-18 18:30:37 +0800586 if(p.dataAvail() > 0)
587 {
588 p.readInt32(&response.resp_type);
589 p.readInt32(&response.request);
590 p.readInt32(&response.slot_id);
591 p.readInt32(&response.error);
592 if(response.error != 0)
593 {
594 LYERRLOG("response return error");
595 return response.error;
596 }
597 p.readInt32(&num);
598 if(num == 0)
599 {
600 LYERRLOG("no paramters");
601 }else{
602 for(int i = 0; i<num;i++)
603 {
604 resp[i] = lynqStrdupReadString(p);
605 }
606 if(NULL != resp[0])
607 {
rjwaae473f2022-01-25 14:57:53 +0800608 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800609 }
610 if(NULL != resp[1])
611 {
rjwaae473f2022-01-25 14:57:53 +0800612 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800613 }
614 if(NULL != resp[2])
615 {
rjwaae473f2022-01-25 14:57:53 +0800616 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800617 }
618 }
619 }
620 return response.error;
621}
622
623int lynq_query_network_selection_mode(int *netselMode)
624{
625 int ret = -1;
626 if(NULL == netselMode)
627 return ret;
628 int send_num = 0;
629 int recv_num = 0;
630 int readnum = 0;
631 lynq_client_t client_t;
rjw2183a5f2022-01-18 18:30:37 +0800632 memset(&client_t,0,sizeof(client_t));
633 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
634 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800635 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800636
637 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800638 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800639 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800640 if(send_num<0)
641 {
642 LYERRLOG("sendto error:");
643 return -1;
644 }
645
646 //get data
rjw2183a5f2022-01-18 18:30:37 +0800647 Parcel p;
rjw97252352022-07-12 16:42:02 +0800648 ret = get_response(p,600);
rjwdf725f42022-07-04 21:17:25 +0800649 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
650 if (ret != 0)
651 {
652 return ret;
653 }
rjw2183a5f2022-01-18 18:30:37 +0800654 if(p.dataAvail() > 0)
655 {
656 p.readInt32(&response.resp_type);
657 p.readInt32(&response.request);
658 p.readInt32(&response.slot_id);
659 p.readInt32(&response.error);
660 if(response.error != 0)
661 {
662 LYERRLOG("response return error");
663 return response.error;
664 }
665 p.readInt32(&readnum);
666 p.readInt32(netselMode);
667 }
668 return response.error;
669}
670
671int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
672{
673 int ret = -1;
rjw7610e272022-02-24 13:37:11 +0800674 if(NULL == mode)
rjw2183a5f2022-01-18 18:30:37 +0800675 return ret;
rjw7610e272022-02-24 13:37:11 +0800676 if(strlen(mode) == 0)
677 {
678 return ret;
679 }
rjw2183a5f2022-01-18 18:30:37 +0800680 int send_num = 0;
681 lynq_client_t client_t;
682 int recv_num = 0;
rjw2183a5f2022-01-18 18:30:37 +0800683 memset(&client_t,0,sizeof(client_t));
684 if(!strcmp(mode,"Auto"))
685 {
686 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
687 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800688 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800689 memset(client_t.param,0,sizeof(client_t.param));
690 }else if(!strcmp(mode,"Manual")){
rjw7610e272022-02-24 13:37:11 +0800691 if(mccmnc == NULL)
692 {
693 LYERRLOG("mccmnc is NULL!!!");
694 return ret;
695 }
696 if(strlen(mccmnc) == 0)
697 {
698 LYERRLOG("mccmnc strlen is 0!!!");
699 return ret;
700 }
rjw2183a5f2022-01-18 18:30:37 +0800701 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
702 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800703 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800704 sprintf(client_t.param,"%s",mccmnc);
rjw479d38b2022-01-22 14:10:42 +0800705 }else{
706 LYERRLOG("request error");
707 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800708 }
709
rjw32f04c22022-05-25 09:10:33 +0800710 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800711 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800712 if(send_num<0)
713 {
714 LYERRLOG("sendto error:");
715 return ret;
716 }
717
rjw2183a5f2022-01-18 18:30:37 +0800718 Parcel p;
rjw95793c72022-07-05 11:50:31 +0800719 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +0800720 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
721 if (ret != 0)
722 {
723 return ret;
724 }
rjw2183a5f2022-01-18 18:30:37 +0800725 if(p.dataAvail() > 0)
726 {
727 p.readInt32(&response.resp_type);
728 p.readInt32(&response.request);
729 p.readInt32(&response.slot_id);
730 p.readInt32(&response.error);
731 }
732 return response.error;
733}
734
735int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
736{
737 int ret = -1;
738 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
739 return ret;
740 int send_num = 0;
741 int recv_num = 0;
rjw2183a5f2022-01-18 18:30:37 +0800742 char *resp[128];
743 lynq_client_t client_t;
744 memset(&client_t,0,sizeof(client_t));
745 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
746 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800747 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800748 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800749 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800750 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800751 if(send_num<0)
752 {
753 LYERRLOG("sendto error:");
754 return ret;
755 }
756
757 //get data
rjw2183a5f2022-01-18 18:30:37 +0800758 Parcel p;
rjwdf725f42022-07-04 21:17:25 +0800759 ret = get_response(p,600);
760 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
761 if (ret != 0)
762 {
763 return ret;
764 }
rjw2183a5f2022-01-18 18:30:37 +0800765 if(p.dataAvail() > 0)
766 {
767 p.readInt32(&response.resp_type);
768 p.readInt32(&response.request);
769 p.readInt32(&response.slot_id);
770 p.readInt32(&response.error);
771 if(response.error != 0)
772 {
773 LYERRLOG("response return error");
774 return response.error;
775 }
776 int num =p.readInt32();
777 if(num == 0)
778 {
779 LYERRLOG("no paramters");
780 }else{
781 for(int i = 0; i<num;i++)
782 {
783 resp[i] = lynqStrdupReadString(p);
784 }
785 if(NULL != resp[0])
786 {
rjwaae473f2022-01-25 14:57:53 +0800787 strcpy(OperatorFN,resp[0]);
rjw2183a5f2022-01-18 18:30:37 +0800788 }
789 if(NULL != resp[1])
790 {
rjwaae473f2022-01-25 14:57:53 +0800791 strcpy(OperatorSH,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800792 }
793 if(NULL != resp[2])
794 {
rjwaae473f2022-01-25 14:57:53 +0800795 strcpy(MccMnc,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800796 }
797 if(NULL != resp[3])
798 {
rjwaae473f2022-01-25 14:57:53 +0800799 strcpy(NetStatus,resp[2]);
rjw2183a5f2022-01-18 18:30:37 +0800800 }
801 }
802 }
803 return response.error;
804}
805
rjwb83f56b2022-04-01 15:00:26 +0800806int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)
rjw2183a5f2022-01-18 18:30:37 +0800807{
808 int ret = -1;
rjw464875c2022-04-09 13:50:58 +0800809 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw2183a5f2022-01-18 18:30:37 +0800810 return ret;
811 int send_num = 0;
812 int recv_num = 0;
813 int num = 0;
814 char str[LYNQ_TYPE_BUF];
rjw479d38b2022-01-22 14:10:42 +0800815 char *resp[LYNQ_RESP_BUF];
rjw2183a5f2022-01-18 18:30:37 +0800816 lynq_client_t client_t;
817 memset(&client_t,0,sizeof(client_t));
818 if(strlen(type)>LYNQ_TYPE_BUF)
819 {
820 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
821 }
822 memcpy(str,type,strlen(type)+1);
823 strUpper(str);
824 if(!strcmp(str,"VOICE"))
825 {
826 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
827 }else if(!strcmp(str,"DATA")){
828 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
829 }else if(!strcmp(str,"IMS")){
830 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
831 }else{
832 LYERRLOG("request error");
833 return ret;
834 }
835 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800836 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800837 memset(client_t.param,0,sizeof(client_t.param));
838
rjw32f04c22022-05-25 09:10:33 +0800839 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800840 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800841 if(send_num<0)
842 {
843 LYERRLOG("sendto error:");
844 return ret;
845 }
846
847 //get data
rjw2183a5f2022-01-18 18:30:37 +0800848 Parcel p;
rjw95793c72022-07-05 11:50:31 +0800849 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +0800850 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
851 if (ret != 0)
852 {
853 return ret;
854 }
rjw2183a5f2022-01-18 18:30:37 +0800855 if(p.dataAvail() > 0)
856 {
857 p.readInt32(&response.resp_type);
858 p.readInt32(&response.request);
859 p.readInt32(&response.slot_id);
860 p.readInt32(&response.error);
861 if(response.error != 0)
862 {
863 LYERRLOG("response return error");
864 return response.error;
865 }
866 if(!strcmp(str,"VOICE"))
867 {
868 p.readInt32(&num);
869 if(num == 15)
870 {
871 *regState = atoi(lynqStrdupReadString(p));
872 lynqStrdupReadString(p);
873 lynqStrdupReadString(p);
874 *netType = atoi(lynqStrdupReadString(p));
rjwb83f56b2022-04-01 15:00:26 +0800875 lynqStrdupReadString(p);
876 lynqStrdupReadString(p);
877 lynqStrdupReadString(p);
878 lynqStrdupReadString(p);
879 lynqStrdupReadString(p);
880 lynqStrdupReadString(p);
881 lynqStrdupReadString(p);
882 lynqStrdupReadString(p);
883 lynqStrdupReadString(p);
884 lynqStrdupReadString(p);
885 *netRejected = atoi(lynqStrdupReadString(p));
rjw2183a5f2022-01-18 18:30:37 +0800886 }
887 }else if(!strcmp(str,"DATA")){
888 p.readInt32(&num);
889 if(num == 11)
890 {
891 *regState = atoi(lynqStrdupReadString(p));
rjw479d38b2022-01-22 14:10:42 +0800892 resp[0] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800893 strcpy(LAC,resp[0]);
rjw479d38b2022-01-22 14:10:42 +0800894
895 resp[1] = lynqStrdupReadString(p);
rjwaae473f2022-01-25 14:57:53 +0800896 strcpy(CID,resp[1]);
rjw2183a5f2022-01-18 18:30:37 +0800897 *netType = atoi(lynqStrdupReadString(p));
898 }
899
900 }else if(!strcmp(str,"IMS")){
901 p.readInt32(&num);
902 if(num == 2)
903 {
904 p.readInt32(imsRegState);
905 p.readInt32(radioTechFam);
906 }
907 }else{
908 LYERRLOG("request error");
909 return ret;
910 }
911 }
912 return response.error;
913}
914
915int lynq_query_prefferred_networktype(int *preNetType)
916{
917 int ret = -1;
918 int send_num = 0;
919 int recv_num = 0;
920 int num = 0;
rjw2183a5f2022-01-18 18:30:37 +0800921 lynq_client_t client_t;
922 memset(&client_t,0,sizeof(client_t));
923 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
924 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +0800925 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800926 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +0800927 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +0800928 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +0800929 if(send_num<0)
930 {
931 LYERRLOG("sendto error:");
932 return ret;
933 }
934
935 //get data
rjw2183a5f2022-01-18 18:30:37 +0800936 Parcel p;
rjw95793c72022-07-05 11:50:31 +0800937 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +0800938 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
939 if (ret != 0)
940 {
941 return ret;
942 }
rjw2183a5f2022-01-18 18:30:37 +0800943 if(p.dataAvail() > 0)
944 {
945 p.readInt32(&response.resp_type);
946 p.readInt32(&response.request);
947 p.readInt32(&response.slot_id);
948 p.readInt32(&response.error);
949 if(response.error != 0)
950 {
951 LYERRLOG("response return error");
952 return response.error;
953 }
954 p.readInt32(&num);
955 p.readInt32(preNetType);
956 }
957 return response.error;
958}
959
960int lynq_set_prefferred_networktype(const int preffertype)
961{
962 int ret = -1;
963 if(preffertype < 0||preffertype >33)
964 return ret;
965 int send_num = 0;
966 lynq_client_t client_t;
967 int recv_num = 0;
rjw2183a5f2022-01-18 18:30:37 +0800968 memset(&client_t,0,sizeof(client_t));
969 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
970 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +0800971 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +0800972 sprintf(client_t.param,"%d",preffertype);
rjw32f04c22022-05-25 09:10:33 +0800973 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-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);
rjw2183a5f2022-01-18 18:30:37 +0800975 if(send_num<0)
976 {
977 LYERRLOG("sendto error:");
978 return ret;
979 }
980
rjwdf725f42022-07-04 21:17:25 +0800981 Parcel p;
rjw95793c72022-07-05 11:50:31 +0800982 ret = get_response(p,30);
rjw32f04c22022-05-25 09:10:33 +0800983 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjwdf725f42022-07-04 21:17:25 +0800984 if (ret != 0)
rjw2183a5f2022-01-18 18:30:37 +0800985 {
rjwdf725f42022-07-04 21:17:25 +0800986 return ret;
rjw2183a5f2022-01-18 18:30:37 +0800987 }
988
rjw2183a5f2022-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 }
996
997 return response.error;
998
999}
1000
rjw83d48cb2022-06-09 17:43:01 +08001001int lynq_query_cell_info(uint64_t cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int earfcn[CELLINFO_MAX_NUM],int * realNum)
rjw2183a5f2022-01-18 18:30:37 +08001002{
1003 int ret = -1;
1004 if(NULL == realNum)
1005 return ret;
1006 int send_num = 0;
1007 int recv_num = 0;
1008 int num = 0;
rjw2183a5f2022-01-18 18:30:37 +08001009 lynq_client_t client_t;
1010 memset(&client_t,0,sizeof(client_t));
1011 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
1012 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001013 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001014 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +08001015 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001016 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001017 if(send_num<0)
1018 {
1019 LYERRLOG("sendto error:");
1020 return ret;
1021 }
1022
1023 //get data
rjw2183a5f2022-01-18 18:30:37 +08001024 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001025 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +08001026 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1027 if (ret != 0)
1028 {
1029 return ret;
1030 }
rjw2183a5f2022-01-18 18:30:37 +08001031 if(p.dataAvail() > 0)
1032 {
1033 p.readInt32(&response.resp_type);
1034 p.readInt32(&response.request);
1035 p.readInt32(&response.slot_id);
1036 p.readInt32(&response.error);
1037 if(response.error != 0)
1038 {
1039 LYERRLOG("response return error");
1040 return response.error;
1041 }
1042 p.readInt32(&num);
1043 LYINFLOG("cell info num:%d",num);
1044 *realNum = num;
1045 for(int i = 0;i<num;i++)
1046 {
rjw9ffd2c42022-05-31 17:31:28 +08001047 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw2183a5f2022-01-18 18:30:37 +08001048 }
1049 }
1050 return response.error;
1051
1052}
1053
1054int lynq_set_unsol_cell_info_listrate(const int rate)
1055{
1056 int ret = -1;
1057 int send_num = 0;
1058 int recv_num = 0;
rjw2183a5f2022-01-18 18:30:37 +08001059 lynq_client_t client_t;
1060 memset(&client_t,0,sizeof(client_t));
1061 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1062 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001063 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001064 sprintf(client_t.param,"%d",rate);
rjw32f04c22022-05-25 09:10:33 +08001065 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001066 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001067 if(send_num<0)
1068 {
1069 LYERRLOG("sendto error:");
1070 return ret;
1071 }
1072
rjw32f04c22022-05-25 09:10:33 +08001073
rjwdf725f42022-07-04 21:17:25 +08001074 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001075 ret = get_response(p,30);
rjw32f04c22022-05-25 09:10:33 +08001076 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjwdf725f42022-07-04 21:17:25 +08001077 if (ret != 0)
rjw2183a5f2022-01-18 18:30:37 +08001078 {
rjwdf725f42022-07-04 21:17:25 +08001079 return ret;
rjw2183a5f2022-01-18 18:30:37 +08001080 }
1081
rjw2183a5f2022-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 }
1089
1090 return response.error;
1091}
1092
1093int lynq_set_band_mode(const int bandmode)
1094{
1095 int ret = -1;
1096 int send_num = 0;
1097 int recv_num = 0;
rjw2183a5f2022-01-18 18:30:37 +08001098 lynq_client_t client_t;
1099 memset(&client_t,0,sizeof(client_t));
1100 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1101 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001102 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001103 sprintf(client_t.param,"%d",bandmode);
rjw32f04c22022-05-25 09:10:33 +08001104 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001105 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001106 if(send_num<0)
1107 {
1108 LYERRLOG("sendto error:");
1109 return ret;
1110 }
1111
rjwdf725f42022-07-04 21:17:25 +08001112 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001113 ret = get_response(p,30);
rjw32f04c22022-05-25 09:10:33 +08001114 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjwdf725f42022-07-04 21:17:25 +08001115 if (ret != 0)
rjw2183a5f2022-01-18 18:30:37 +08001116 {
rjwdf725f42022-07-04 21:17:25 +08001117 return ret;
rjw2183a5f2022-01-18 18:30:37 +08001118 }
1119
rjw2183a5f2022-01-18 18:30:37 +08001120 if(p.dataAvail() > 0)
1121 {
1122 p.readInt32(&response.resp_type);
1123 p.readInt32(&response.request);
1124 p.readInt32(&response.slot_id);
1125 p.readInt32(&response.error);
1126 }
1127
1128 return response.error;
1129}
1130
1131int lynq_query_available_bandmode(int availBanMode[])
1132{
1133 int ret = -1;
1134 if(NULL == availBanMode)
1135 return ret;
1136 int send_num = 0;
1137 int recv_num = 0;
1138 int num = 0;
1139 int res = 0;
rjw2183a5f2022-01-18 18:30:37 +08001140 lynq_client_t client_t;
1141 memset(&client_t,0,sizeof(client_t));
1142 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1143 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001144 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001145 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +08001146 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001147 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001148 if(send_num<0)
1149 {
1150 LYERRLOG("sendto error:");
1151 return ret;
1152 }
1153
1154 //get data
rjwdf725f42022-07-04 21:17:25 +08001155 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001156 ret = get_response(p,30);
rjw32f04c22022-05-25 09:10:33 +08001157 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjwdf725f42022-07-04 21:17:25 +08001158 if (ret != 0)
rjw2183a5f2022-01-18 18:30:37 +08001159 {
rjwdf725f42022-07-04 21:17:25 +08001160 return ret;
rjw2183a5f2022-01-18 18:30:37 +08001161 }
rjw7610e272022-02-24 13:37:11 +08001162 for(int i = 0;i<10;i++)
rjw2183a5f2022-01-18 18:30:37 +08001163 {
1164 availBanMode[i]=0;
1165 }
rjw2183a5f2022-01-18 18:30:37 +08001166 if(p.dataAvail() > 0)
1167 {
1168 p.readInt32(&response.resp_type);
1169 p.readInt32(&response.request);
1170 p.readInt32(&response.slot_id);
1171 p.readInt32(&response.error);
1172 if(response.error != 0)
1173 {
1174 LYERRLOG("response return error");
1175 return response.error;
1176 }
1177 p.readInt32(&num);
1178 LYINFLOG("num = %d",num);
1179 availBanMode[0] = num;
1180 for(int i=1 ;i<=num;i++)
1181 {
1182 p.readInt32(&res);
1183 availBanMode[i]=res;
1184 }
1185 }
1186
1187 return response.error;
1188}
1189
1190int lynq_radio_on(const int data)
1191{
1192 int ret = -1;
1193 if(data < 0)
1194 return ret;
1195 int send_num = 0;
rjw2183a5f2022-01-18 18:30:37 +08001196 int recv_num = 0;
1197 lynq_client_t client_t;
1198 memset(&client_t,0,sizeof(client_t));
1199 client_t.request = RIL_REQUEST_RADIO_POWER;
1200 client_t.paramLen = 1;
rjw415439a2022-03-02 15:23:11 +08001201 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001202 sprintf(client_t.param,"%d",data);
rjw32f04c22022-05-25 09:10:33 +08001203 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001204 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001205 if(send_num<0)
1206 {
1207 LYERRLOG("sendto error:");
1208 return ret;
1209 }
1210
rjw2183a5f2022-01-18 18:30:37 +08001211 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001212 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +08001213 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1214 if (ret != 0)
1215 {
1216 return ret;
1217 }
rjw2183a5f2022-01-18 18:30:37 +08001218 if(p.dataAvail() > 0)
1219 {
1220 p.readInt32(&response.resp_type);
1221 p.readInt32(&response.request);
1222 p.readInt32(&response.slot_id);
1223 p.readInt32(&response.error);
1224 }
1225
1226 return response.error;
1227}
1228
1229int lynq_query_radio_tech(int* radioTech)
1230{
1231 int ret = -1;
1232 if(NULL == radioTech)
1233 return ret;
1234 int send_num = 0;
1235 int recv_num = 0;
1236 int num = 0;
rjw2183a5f2022-01-18 18:30:37 +08001237 lynq_client_t client_t;
1238 memset(&client_t,0,sizeof(client_t));
1239 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1240 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001241 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001242 memset(client_t.param,0,sizeof(client_t.param));
rjw32f04c22022-05-25 09:10:33 +08001243 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001244 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001245 if(send_num<0)
1246 {
1247 LYERRLOG("sendto error:");
1248 return ret;
1249 }
1250
rjw2183a5f2022-01-18 18:30:37 +08001251 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001252 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +08001253 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1254 if (ret != 0)
1255 {
1256 return ret;
1257 }
rjw2183a5f2022-01-18 18:30:37 +08001258 if(p.dataAvail() > 0)
1259 {
1260 p.readInt32(&response.resp_type);
1261 p.readInt32(&response.request);
1262 p.readInt32(&response.slot_id);
1263 p.readInt32(&response.error);
1264 if(response.error != 0)
1265 {
1266 LYERRLOG("response return error");
1267 return response.error;
1268 }
1269 p.readInt32(&num);
1270 p.readInt32(radioTech);
1271 }
1272 return response.error;
1273}
1274
1275int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1276{
1277 int ret = -1;
1278 if(NULL == solSigStren)
1279 return ret;
1280 int send_num = 0;
1281 int recv_num = 0;
1282 int sum = 0;
1283 int LTE_signalstrength = 0;
1284 int WCDMA_signalstrength = 0;
1285 int none = 0;
rjw2183a5f2022-01-18 18:30:37 +08001286 lynq_client_t client_t;
1287 memset(&client_t,0,sizeof(client_t));
1288 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1289 client_t.paramLen = 0;
rjw415439a2022-03-02 15:23:11 +08001290 client_t.uToken = network_Global_uToken;
rjw2183a5f2022-01-18 18:30:37 +08001291 memset(client_t.param,0,sizeof(client_t.param));
1292
rjw32f04c22022-05-25 09:10:33 +08001293 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw415439a2022-03-02 15:23:11 +08001294 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw2183a5f2022-01-18 18:30:37 +08001295 if(send_num<0)
1296 {
1297 LYERRLOG("sendto error:");
1298 return ret;
1299 }
1300
1301 //get data
rjw2183a5f2022-01-18 18:30:37 +08001302 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001303 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +08001304 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1305 if (ret != 0)
1306 {
1307 return ret;
1308 }
rjw2183a5f2022-01-18 18:30:37 +08001309 if(p.dataAvail() > 0)
1310 {
1311 p.readInt32(&response.resp_type);
1312 p.readInt32(&response.request);
1313 p.readInt32(&response.slot_id);
1314 p.readInt32(&response.error);
1315 if(response.error != 0)
1316 {
1317 LYERRLOG("response return error");
1318 return response.error;
1319 }
1320
1321 p.readInt32(&solSigStren->rssi);
1322 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1323 {
1324 solSigStren->gw_sig_valid = 1;
1325 }else{
1326 solSigStren->gw_sig_valid = 0;
1327 }
1328
1329 p.readInt32(&none);
1330 p.readInt32(&none);
1331 p.readInt32(&none);
1332 p.readInt32(&none);
1333 p.readInt32(&none);
1334 p.readInt32(&none);
1335 p.readInt32(&none);
1336 p.readInt32(&LTE_signalstrength);
1337 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1338 p.readInt32(&solSigStren->rsrp);
1339 p.readInt32(&solSigStren->rsrq);
1340 p.readInt32(&solSigStren->rssnr);
1341 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1342 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1343 {
1344 solSigStren->lte_sig_valid = 1;
1345 }else{
1346 solSigStren->lte_sig_valid = 0;
1347 }
1348
1349 p.readInt32(&none);
1350 p.readInt32(&none);
1351 p.readInt32(&none);
1352 p.readInt32(&none);
1353 p.readInt32(&none);
1354 p.readInt32(&WCDMA_signalstrength);
1355 p.readInt32(&none);
1356 p.readInt32(&solSigStren->rscp);
1357 p.readInt32(&solSigStren->ecno);
1358 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1359 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1360 {
rjw479d38b2022-01-22 14:10:42 +08001361 solSigStren->wcdma_sig_valid = 1;
rjw2183a5f2022-01-18 18:30:37 +08001362 }else{
rjw479d38b2022-01-22 14:10:42 +08001363 solSigStren->wcdma_sig_valid = 0;
rjw2183a5f2022-01-18 18:30:37 +08001364 }
rjw479d38b2022-01-22 14:10:42 +08001365 /*bug fix*/
rjw2183a5f2022-01-18 18:30:37 +08001366 p.readInt32(&solSigStren->ssRsrp);
1367 p.readInt32(&solSigStren->ssRsrq);
1368 p.readInt32(&solSigStren->ssSinr);
1369 p.readInt32(&solSigStren->csiRsrp);
1370 p.readInt32(&solSigStren->csiRsrq);
1371 p.readInt32(&solSigStren->csiSinr);
1372 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1373 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1374 if(sum != 0)
1375 {
1376 solSigStren->nr_sig_valid = 1;
1377 }else{
1378 LYERRLOG("None of NR signal info");
1379 }
1380 }
1381 return response.error;
1382}
rjw415439a2022-03-02 15:23:11 +08001383
rjwc3e81b82022-03-10 11:04:24 +08001384int lynq_set_ims(const int ims_mode)
1385{
1386 int ret = -1;
1387 if (ims_mode < 0 || ims_mode > 1)
1388 {
1389 LYERRLOG("incoming ims_mode error");
1390 return ret;
1391 }
1392 int send_num = 0;
rjwc3e81b82022-03-10 11:04:24 +08001393 int recv_num = 0;
1394 lynq_client_t client_t;
1395
1396 memset(&client_t,0,sizeof(client_t));
1397 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1398 client_t.paramLen = 1;
1399 client_t.uToken = network_Global_uToken;
1400 sprintf(client_t.param,"%d",ims_mode);
rjw32f04c22022-05-25 09:10:33 +08001401 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwc3e81b82022-03-10 11:04:24 +08001402 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1403 if (send_num<0)
1404 {
1405 LYERRLOG("sendto error:");
1406 return ret;
1407 }
1408
rjwc3e81b82022-03-10 11:04:24 +08001409 Parcel p;
rjw95793c72022-07-05 11:50:31 +08001410 ret = get_response(p,30);
rjwdf725f42022-07-04 21:17:25 +08001411 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1412 if (ret != 0)
1413 {
1414 return ret;
1415 }
rjwc3e81b82022-03-10 11:04:24 +08001416 if (p.dataAvail() > 0)
1417 {
1418 p.readInt32(&response.resp_type);
1419 p.readInt32(&response.request);
1420 p.readInt32(&response.slot_id);
1421 p.readInt32(&response.error);
1422 }
1423
1424 return response.error;
1425}
1426
1427
rjw415439a2022-03-02 15:23:11 +08001428/*Used to wait for an update signal*/
1429int lynq_wait_signalchanges(int *handle)
1430{
1431 LYDBGLOG("start wait signalchanges info");
1432 if(NULL == handle)
1433 {
1434 LYERRLOG("illegal input");
1435 return -1;
1436 }
1437 wait_signal_changes();
1438 LYDBGLOG("get signalchanges");
1439 *handle = network_wait_urc_id;
1440 return 0;
1441}
1442/*Used to get urc info*/
1443int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1444{
1445 LYDBGLOG("start get urc info");
1446 if(handle != 1002&&handle != 1009)
1447 {
1448 LYINFLOG("invalid handle!!!");
1449 return -1;
1450 }
1451 if(NULL == solSigStren && NULL == slot_id)
1452 {
1453 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1454 return -1;
1455 }
1456 switch(handle)
1457 {
1458 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1459 {
1460 LYDBGLOG("get state update to VOICE");
1461 *slot_id = network_urc_slot_id;
1462 LYINFLOG("slot_id = %d",network_urc_slot_id);
rjwa9e75192022-08-04 09:42:00 +08001463 break;
rjw415439a2022-03-02 15:23:11 +08001464 }
1465 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1466 {
1467 LYDBGLOG("get state update to signal info");
1468 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1469 solSigStren->rssi = network_urc_solSigStren.rssi;
1470 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1471 solSigStren->rscp = network_urc_solSigStren.rscp;
1472 solSigStren->ecno = network_urc_solSigStren.ecno;
1473 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1474 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1475 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1476 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1477 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1478 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1479 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1480 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1481 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1482 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1483 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
rjwa9e75192022-08-04 09:42:00 +08001484 break;
rjw415439a2022-03-02 15:23:11 +08001485 }
1486 }
1487 return 0;
rjw079dac12022-05-17 17:58:35 +08001488}
lh0d4c5102022-07-01 04:44:57 -07001489
1490/**@brief parse at response,return error code,and the response
1491* @param response [IN] <response>:original at response,This parameter must be a character array.
1492
1493* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1494* field:
1495* eg:
1496* "+cnum: 123456\n+cnum: 456"
1497* value:12345;456;
1498* @param value_len [IN] <value_len>: The value length.
1499
1500* @return:AT error code
1501*/
1502static int parse_at_result(char response[],char value[],int value_len)
1503{
1504 if(response == NULL || value == NULL)
1505 {
1506 LYERRLOG("parameter invalid");
1507 return -1;
1508 }
1509 if(strstr(response,"ERROR"))
1510 {
1511 int i;
1512 for(i = 0;i < strlen(response);i++)
1513 {
1514 if(response[i]==':')
1515 {
1516 break;
1517 }
1518 }
1519 if(i < strlen(response))
1520 {
1521 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1522 return atoi(response+i+1);
1523 }
1524 else
1525 {
1526 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1527 return 100; //unknown
1528 }
1529 }
1530 else if(strstr(response,"OK"))
1531 {
1532 /** parse the at response value
1533 * eg:
1534 * --> at+cnum
1535 * <-- +CNUM:"1243452"
1536 * need parse the "1243452" to <value>
1537 *@ To-Do
1538 */
1539 int count;
1540 int resp_addr[32] = {0};
1541 char temp_buf[1024] = {0};
1542 char *dest;
1543 dest = NULL;
1544 count = 0;
1545 int res_len = strlen(response);
1546 LYINFLOG("res_len:%d",res_len);
1547 for(int i = 0; i < res_len; i++)
1548 {
1549 if(response[i]==':')
1550 {
1551 resp_addr[count] = i;
1552 count++;
1553 }
1554 if(response[i] == '\n')
1555 {
1556 response[i] = '\0';
1557 }
1558 }
1559 LYINFLOG("count:%d",count);
1560 if(count > 0)
1561 {
1562 for(int i = 0; i < count; i++)
1563 {
1564 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1565 {
1566 LYINFLOG("2 will be out of range\n");
1567 break;
1568 }
1569 if(strlen(temp_buf) >= 1023)
1570 {
1571 LYINFLOG("1 will be out of range\n");
1572 break;
1573 }
1574 strcat(temp_buf,response+resp_addr[i]+2);
1575
1576 if(strlen(temp_buf) >= 1023)
1577 {
1578 LYINFLOG("1 will be out of range\n");
1579 break;
1580 }
1581 strcat(temp_buf,";");
1582 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1583 }
1584 LYINFLOG("parse_result:%s\n",temp_buf);
1585 if(strlen(temp_buf) > value_len)
1586 {
1587 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1588 memcpy(value,temp_buf,value_len);
1589 }
1590 else
1591 {
1592 memcpy(value,temp_buf,strlen(temp_buf));
1593 }
1594 }
1595 return 0;
1596 }
1597 else
1598 {
1599 LYINFLOG("%s this response invalid\n",response);
1600 return -1;
1601 }
1602}
1603#ifdef MODEM_GEN97
1604
1605int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1606{
1607 int ret;
1608 int send_num;
1609 int recv_len;
1610 Parcel p;
1611 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1612 lynq_client_t client_t;
1613 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1614
1615 ret = -1;
1616 send_num = -1;
1617 recv_len = -1;
1618
1619 LYINFLOG("lynq_oos_recover_timer_interval start");
1620 if((mode < 0) || (mode >1) || (NULL == interval) || (NULL == result))
1621 {
1622 LYERRLOG("lynq_oos_recover_timer_interval paramter fail!!!");
1623 return ret;
1624 }
1625
1626 memset(&client_t,0,sizeof(client_t));
1627 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL
1628 client_t.paramLen = 1;
1629 client_t.uToken = network_Global_uToken;
1630 if(mode == 0)
1631 {
1632 sprintf(client_t.param,"AT+ERSCFG=%s",interval);
1633 }
1634 else
1635 {
1636 sprintf(client_t.param,"AT+ERSCFG?",interval);
1637 }
1638 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1639 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1640 if(send_num < 0)
1641 {
1642 LYERRLOG("sendto error:%s",strerror(errno));
1643 return ret;
1644 }
1645 ret = get_response(p,-1); //use defualt time (5s)
1646 if(ret != 0)
1647 {
1648 return ret;
1649 }
1650 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1651 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1652 if(0 == response.error)
1653 {
1654 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1655 LYINFLOG("get recover timer interval");
1656 p.readInt32(&recv_len);
1657 if(recv_len == -1)
1658 {
1659 LYINFLOG("no responset");
1660 return -1;
1661 }
1662 else
1663 {
1664 LYINFLOG("recv_len:%d",recv_len);
1665 p.read(response_interval,recv_len);
1666 }
1667 LYINFLOG("response_interval:%s",response_interval);
1668 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1669 if(mode == 1)
1670 {
1671 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1672 {
1673 memcpy(result,res_data,strlen(res_data));
1674 }
1675 }
1676 LYINFLOG("ret:%d",ret);
1677 return ret;
1678 }
1679 else
1680 {
1681 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1682 return response.error;
1683 }
1684}
1685
1686int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1687{
1688 int ret;
1689 int send_num;
1690 int recv_len;
1691 Parcel p;
1692 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1693 lynq_client_t client_t;
1694 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1695
1696 ret = -1;
1697 send_num = -1;
1698 recv_len = -1;
1699
1700 LYINFLOG("lynq_oos_deep_sleep_recover_timer_interval start");
1701 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
1702 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1703 {
1704 LYERRLOG("lynq_oos_deep_sleep_recover_timer_interval paramter fail!!!");
1705 return ret;
1706 }
1707
1708 memset(&client_t,0,sizeof(client_t));
1709 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL
1710 client_t.paramLen = 1;
1711 client_t.uToken = network_Global_uToken;
1712 sprintf(client_t.param,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
1713 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1714 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1715 if(send_num<0)
1716 {
1717 LYERRLOG("sendto error:%s",strerror(errno));
1718 return ret;
1719 }
1720 ret = get_response(p,-1); //use defualt time (5s)
1721 if(ret != 0)
1722 {
1723 return ret;
1724 }
1725 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1726 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1727 if(0 == response.error)
1728 {
1729 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1730 LYINFLOG("set deep sleep recover timer interval response");
1731 p.readInt32(&recv_len);
1732 if(recv_len == -1)
1733 {
1734 LYINFLOG("no responset");
1735 return -1;
1736 }
1737 else
1738 {
1739 LYINFLOG("recv_len:%d",recv_len);
1740 p.read(response_interval,recv_len);
1741 }
1742 LYINFLOG("response_interval:%s",response_interval);
1743 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1744 return ret;
1745 }
1746 else
1747 {
1748 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1749 return response.error;
1750 }
1751}
1752#endif
1753