blob: f5471d1e707e3f34fdec2332ac36d86f3315b24d [file] [log] [blame]
rjw7e50cd32022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjw4a5a78d2022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw7e50cd32022-01-18 18:30:37 +080013
14#include "lynq_network.h"
15#include "liblog/lynq_deflog.h"
16#define LYNQ_SERVICE_PORT 8088
17#define LYNQ_URC_SERVICE_PORT 8086
18#define LYNQ_URC_ADDRESS "0.0.0.0"
19#define LYNQ_ADDRESS "127.0.0.1"
20#define LYNQ_REQUEST_PARAM_BUF 8192
21#define LYNQ_REC_BUF 8192
22#define LYNQ_RESP_BUF 128
23#define LYNQ_TYPE_BUF 10
24#define USER_LOG_TAG "LYNQ_NETWORK"
25
26
27using ::android::Parcel;
28
29
30typedef struct{
31 int uToken;
32 int request;
33 int paramLen;
34 char param[LYNQ_REQUEST_PARAM_BUF];
35}lynq_client_t;
36
37typedef struct{
38 int resp_type;
39 int request;
40 int slot_id;
41 int error;
42}lynq_resp_t;
43
44lynq_client_t client_t;
45lynq_resp_t response;
rjwbc8a05f2022-03-02 15:23:11 +080046
47int network_len_addr_serv;
48int network_len_urc_addr_serv;
49struct sockaddr_in network_addr_serv;
50struct sockaddr_in network_urc_addr_serv;
51static int network_sock_fd = 0;
52int network_urc_sock_fd = 0;
53int network_Global_uToken = 0;
54int network_slot_id = -1;
55int network_urc_slot_id = -1;
56int network_urc_status = 1;
57int network_wait_urc_id = 0;
58signalStrength_t network_urc_solSigStren;
rjw22947c22022-03-15 09:21:29 +080059/**g_lynq_network_init_flag
60* @brief mark network initialization state
61* 0:deinit status
62* 1:init state
63*/
64static int g_lynq_network_init_flag = 0;
rjw7e50cd32022-01-18 18:30:37 +080065
rjwbc8a05f2022-03-02 15:23:11 +080066static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
67static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw7e50cd32022-01-18 18:30:37 +080068
rjw9c301f82022-05-25 09:10:33 +080069/**g_lynq_network_sendto_mutex
70* @brief mark network send request mutex
71*/
72static pthread_mutex_t g_lynq_network_sendto_mutex;
73
74//static pthread_mutex_t g_lynq_network_recv_mutex;
75
rjw7e50cd32022-01-18 18:30:37 +080076typedef enum{
77 LYNQ_E_CARDSTATE_ERROR=8000,
78 /* The voice service state is out of service*/
79 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
80 /* The voice service state is EMERGENCY_ONLY*/
81 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
82 /* The radio power is power off*/
83 LYNQ_E_STATE_POWER_OFF=8003,
84 LYNQ_E_TIME_OUT=8004,
85 /*create or open sms DB fail */
86 LYNQ_E_SMS_DB_FAIL=8005,
87 /*Failed to execute sql statement*/
88 LYNQ_E_SMS_SQL_FAIL = 8006,
89 LYNQ_E_SMS_NOT_FIND = 8007,
90 /* The logic conflict*/
91 LYNQ_E_CONFLICT=9000,
92 /*Null anomaly*/
93 LYNQ_E_NULL_ANONALY=9001
94}LYNQ_E;
95
lh3a26dd52022-07-01 04:44:57 -070096
97/**@brief get response and write msg to parcel
98* @param p [IN] <p>: the parcel
99*
100* @param time_out [IN] <time_out>: timeout.
101* < 0:use defult timeout(5s)
102* >=0:use this timeout
103* @return
104* 0:success
105* other:failure
106*/
107int get_response(Parcel &p,int time_out)
108{
rjwa59bf312022-07-05 11:50:31 +0800109 int len = 0;
110 char recvline[LYNQ_REC_BUF];
lh3a26dd52022-07-01 04:44:57 -0700111 bzero(recvline,LYNQ_REC_BUF);
112 LYINFLOG("get response");
113 /* receive data from server */
114 struct timeval timeOut;
rjwa59bf312022-07-05 11:50:31 +0800115 timeOut.tv_sec = 30; //defualt 5s
lh3a26dd52022-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;
rjwa59bf312022-07-05 11:50:31 +0800132 }
lh3a26dd52022-07-01 04:44:57 -0700133 if (recvline != NULL)
134 {
rjwa59bf312022-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)
lh3a26dd52022-07-01 04:44:57 -0700141{
142 LYINFLOG("jump header");
rjwa59bf312022-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 }
lh3a26dd52022-07-01 04:44:57 -0700155}
156
rjwbc8a05f2022-03-02 15:23:11 +0800157int wait_signal_changes()
158{
159 int ret = 0;
160 pthread_mutex_lock(&signal_state_change_mutex);
161 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
162 pthread_mutex_unlock(&signal_state_change_mutex);
163 return 0;
164}
165
166void send_signal_changes()
167{
168 pthread_mutex_lock(&signal_state_change_mutex);
169 pthread_cond_signal(&signal_state_change_cond);
170 pthread_mutex_unlock(&signal_state_change_mutex);
171 return;
172}
173
rjw7e50cd32022-01-18 18:30:37 +0800174void *thread_urc_recv(void *p)
175{
176 Parcel *urc_p =NULL;
177 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800178 int resp_type = -1;
179 int urc_id = -1;
180 int res = 0;
181 int none = 0;
182 int NR_sum = 0;
rjw7e50cd32022-01-18 18:30:37 +0800183 int urc_LTE_signalstrength = 0;
184 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800185 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800186 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800187 {
188 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-03-02 15:23:11 +0800189 res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800190 if(res<=0)
191 {
192 LYERRLOG("thread_urc_recv step2 fail:");
193 break;
194 }
195 urc_p = new Parcel();
196 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
197 urc_p->setDataPosition(0);
198 if(urc_p->dataAvail()>0)
199 {
200 urc_p->readInt32(&resp_type);
201 urc_p->readInt32(&urc_id);
rjwbc8a05f2022-03-02 15:23:11 +0800202 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800203 switch(urc_id)
204 {
205 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
206 {
rjwbc8a05f2022-03-02 15:23:11 +0800207 network_wait_urc_id = urc_id;
208 LYINFLOG("slot_id = %d",network_urc_slot_id);
209 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800210 }
211 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
212 {
rjwbc8a05f2022-03-02 15:23:11 +0800213 urc_p->readInt32(&network_urc_solSigStren.rssi);
214 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw7e50cd32022-01-18 18:30:37 +0800215 {
rjwbc8a05f2022-03-02 15:23:11 +0800216 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800217 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800218 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800219 }
rjwbc8a05f2022-03-02 15:23:11 +0800220 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800221 {
rjwbc8a05f2022-03-02 15:23:11 +0800222 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800223 }
rjw7e50cd32022-01-18 18:30:37 +0800224 urc_p->readInt32(&none);
225 urc_p->readInt32(&none);
226 urc_p->readInt32(&none);
227 urc_p->readInt32(&none);
228 urc_p->readInt32(&none);
229 urc_p->readInt32(&none);
230 urc_p->readInt32(&none);
231 urc_p->readInt32(&urc_LTE_signalstrength);
232 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjwbc8a05f2022-03-02 15:23:11 +0800233 urc_p->readInt32(&network_urc_solSigStren.rsrp);
234 urc_p->readInt32(&network_urc_solSigStren.rsrq);
235 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw7e50cd32022-01-18 18:30:37 +0800236 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
237 {
rjwbc8a05f2022-03-02 15:23:11 +0800238 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800239 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800240 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800241 }
rjwbc8a05f2022-03-02 15:23:11 +0800242 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800243 {
244 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
245 }
rjw7e50cd32022-01-18 18:30:37 +0800246 urc_p->readInt32(&none);
247 urc_p->readInt32(&none);
248 urc_p->readInt32(&none);
249 urc_p->readInt32(&none);
250 urc_p->readInt32(&none);
251 urc_p->readInt32(&urc_WCDMA_signalstrength);
252 urc_p->readInt32(&none);
rjwbc8a05f2022-03-02 15:23:11 +0800253 urc_p->readInt32(&network_urc_solSigStren.rscp);
254 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800255 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
256 {
rjwbc8a05f2022-03-02 15:23:11 +0800257 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800258 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800259 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800260 }
rjwbc8a05f2022-03-02 15:23:11 +0800261 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800262 {
263 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800264 }
rjwbc8a05f2022-03-02 15:23:11 +0800265 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
266 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
267 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
268 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
269 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
270 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
271 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
272 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800273 if(NR_sum != 0)
274 {
rjwbc8a05f2022-03-02 15:23:11 +0800275 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800276 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800277 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800278 }
rjwbc8a05f2022-03-02 15:23:11 +0800279 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800280 {
281 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
rjwbc8a05f2022-03-02 15:23:11 +0800282 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
283 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800284 }
rjwbc8a05f2022-03-02 15:23:11 +0800285 network_wait_urc_id = urc_id;
286 send_signal_changes();
rjw7e50cd32022-01-18 18:30:37 +0800287 }
288 }
289 }
290 }
291}
292
293
294int lynq_server_socket_start()
295{
lh3a26dd52022-07-01 04:44:57 -0700296 struct timeval timeOut;
rjwbc8a05f2022-03-02 15:23:11 +0800297 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
298 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800299 {
300 LYERRLOG("socket open error");
301 return -1;
302 }
lh3a26dd52022-07-01 04:44:57 -0700303
304 timeOut.tv_sec = 5;
305 timeOut.tv_usec = 0;
306 if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
307 {
308 LYERRLOG("time out setting failed\n");
309 return -1;
310 }
rjwbc8a05f2022-03-02 15:23:11 +0800311 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800312
rjwbc8a05f2022-03-02 15:23:11 +0800313 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
314 network_addr_serv.sin_family = AF_INET;
315 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
316 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
317 network_len_addr_serv = sizeof(network_addr_serv);
lh3a26dd52022-07-01 04:44:57 -0700318
319
rjw7e50cd32022-01-18 18:30:37 +0800320 return 0;
321}
322
323int lynq_urc_socket_start()
324{
325 pthread_t tid;
326 pthread_attr_t attr;
327 int on = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800328 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800329 int ret = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800330 network_len_urc_addr_serv = sizeof(sockaddr_in);
331 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
332 if (network_urc_sock_fd <0){
rjw7e50cd32022-01-18 18:30:37 +0800333 LYERRLOG("urc socket error");
334 ret = -1;
335 }
rjwbc8a05f2022-03-02 15:23:11 +0800336 network_urc_addr_serv.sin_family = AF_INET;
337 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
338 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw7e50cd32022-01-18 18:30:37 +0800339 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800340 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800341 if(ret <0)
342 {
343 LYERRLOG("urc socket set error");
344 return -1;
345 }
rjwbc8a05f2022-03-02 15:23:11 +0800346 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-01-18 18:30:37 +0800347 if(ret <0)
348 {
349 LYERRLOG("urc socket bind error");
350 return -1;
351 }
352 pthread_attr_init(&attr);
353 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjwbc8a05f2022-03-02 15:23:11 +0800354 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800355 if(ret <0)
356 {
357 LYERRLOG("urc pthread create error");
358 return -1;
359 }
360 LYINFLOG("urc start success");
361 return 0;
362}
363
364int lynq_network_init(int utoken){
rjw22947c22022-03-15 09:21:29 +0800365 if(g_lynq_network_init_flag == 1)
366 {
367 LYERRLOG("init twice is not allowed");
368 return -1;
369 }
370 g_lynq_network_init_flag = 1;
rjw7e50cd32022-01-18 18:30:37 +0800371 if(utoken <0){
372 LYERRLOG("init err");
373 return -1;
374 }
rjwbc8a05f2022-03-02 15:23:11 +0800375 network_urc_status = 1;
376 network_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +0800377 LYLOGSET(LOG_INFO);
378 LYLOGEINIT(USER_LOG_TAG);
379 int ret = 0;
380
381 ret = lynq_server_socket_start();
382 if(ret !=0)
383 {
384 LYERRLOG("init socket client fail!!!");
385 return -1;
386 }
387 ret = lynq_urc_socket_start();
388 if(ret != 0)
389 {
390 LYERRLOG("init socket urc fail!!!");
391 return -1;
392 }
rjw9c301f82022-05-25 09:10:33 +0800393 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw7e50cd32022-01-18 18:30:37 +0800394 return 0;
395}
396
397int strUpper(char * str)
398{
399 int i=0;
400 while(1)
401 {
402 if(str[i]=='\0')
403 {
404 break;
405 }
406 if(str[i]>='a'&&str[i]<='z')
407 {
408 str[i]=str[i]-32;
409 }
410 i++;
411 }
412 return 0;
413}
414
rjw62a60152022-06-09 17:43:01 +0800415int copyCellInfoList(Parcel &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw7e50cd32022-01-18 18:30:37 +0800416{
417 int32_t v=0;
418 int64_t v6=0;
419 if(NULL == cellinfo)
420 {
421 LYERRLOG("*cellinfo error");
422 }
423
424 int nothing = 0;
rjw62a60152022-06-09 17:43:01 +0800425 int tmp_uint64 = 0;
rjw7e50cd32022-01-18 18:30:37 +0800426 p.readInt32(&v);
427 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
428 p.readInt32(&nothing);
429 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
430 // p.readInt32(&cellinfo->cellinfo.registered);
431 p.readInt32(&v);
432 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
433 p.readInt64(&v6);
434 // cellinfo->cellinfo.timeStamp = v6;
435 switch(cellinfoType) {
436 case RIL_CELL_INFO_TYPE_GSM: {
437 p.readInt32(&nothing);
438 p.readInt32(&nothing);
439 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800440 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800441 p.readInt32(&nothing);
442 p.readInt32(&nothing);
443 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800444 *cellinfo = (uint64_t)tmp_uint64;
rjw61974852022-05-17 16:30:32 +0800445 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800446 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800447 break;
448 }
449 case RIL_CELL_INFO_TYPE_WCDMA: {
450 p.readInt32(&nothing);
451 p.readInt32(&nothing);
452 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800453 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800454 p.readInt32(&nothing);
455 p.readInt32(&nothing);
456 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800457 *cellinfo = (uint64_t)tmp_uint64;
rjw4200a082022-05-17 17:58:35 +0800458 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800459 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800460 break;
461 }
462 case RIL_CELL_INFO_TYPE_CDMA: {
463 p.readInt32(&nothing);
464 p.readInt32(&nothing);
465 p.readInt32(&nothing);
466 p.readInt32(&nothing);
467 p.readInt32(&nothing);
468 p.readInt32(&nothing);
469 p.readInt32(&nothing);
470 p.readInt32(&nothing);
471 p.readInt32(&nothing);
472 p.readInt32(&nothing);
473 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800474 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800475 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800476 break;
477 }
478 case RIL_CELL_INFO_TYPE_LTE: {
479 p.readInt32(&nothing);
480 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800481 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800482 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800483 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800484 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800485 p.readInt32(&nothing);
486 p.readInt32(&nothing);
487 p.readInt32(&nothing);
488 p.readInt32(&nothing);
489 p.readInt32(&nothing);
490 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800491 *cellinfo = (uint64_t)tmp_uint64;
rjw7e50cd32022-01-18 18:30:37 +0800492 break;
493 }
494 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
495 p.readInt32(&nothing);
496 p.readInt32(&nothing);
497 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800498 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800499 p.readInt32(&nothing);
500 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800501 *cellinfo = (uint64_t)tmp_uint64;
rjwa8011682022-05-31 17:31:28 +0800502 tac = &nothing;
503 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800504 break;
505 }
506 case RIL_CELL_INFO_TYPE_NR: {
507 p.readInt32(&nothing);
508 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800509 p.readUint64(cellinfo);
rjw7e50cd32022-01-18 18:30:37 +0800510 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800511 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800512 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800513 p.readInt32(&nothing);
514 p.readInt32(&nothing);
515 p.readInt32(&nothing);
516 p.readInt32(&nothing);
517 p.readInt32(&nothing);
518 p.readInt32(&nothing);
519 break;
520 }
521 }
rjw62a60152022-06-09 17:43:01 +0800522 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjwa8011682022-05-31 17:31:28 +0800523 LYINFLOG("tac in fUNC :%d",*tac);
524 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800525 return 0;
526}
527
528int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800529 if (g_lynq_network_init_flag == 0)
530 {
531 LYERRLOG("deinit twice is not allowed");
532 return -1;
533 }
534 if (network_sock_fd > 0)
535 {
536 close(network_sock_fd);
537 }
538 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800539 network_urc_status = 0;
rjw7e50cd32022-01-18 18:30:37 +0800540 return 0;
541}
542
543static char * lynqStrdupReadString(Parcel &p) {
544 size_t stringlen;
545 const char16_t *s16;
546
547 s16 = p.readString16Inplace(&stringlen);
548 return strndup16to8(s16, stringlen);
549}
550
551int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
552{
553 int ret = -1;
554 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
555 return ret;
556 int send_num = 0;
557 int recv_num = 0;
558 int num = 0;
559 lynq_client_t client_t;
rjw02a50422022-01-25 14:57:53 +0800560 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800561 memset(&client_t,0,sizeof(client_t));
562 client_t.request = RIL_REQUEST_OPERATOR;
563 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800564 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800565 memset(client_t.param,0,sizeof(client_t.param));
566
rjw9c301f82022-05-25 09:10:33 +0800567 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800568 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 +0800569 if(send_num<0)
570 {
571 LYERRLOG("sendto error:");
572 return ret;
573 }
574
575 //get data
rjw7e50cd32022-01-18 18:30:37 +0800576 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800577 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800578 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
579 if (ret != 0)
580 {
581 return ret;
582 }
583
rjw7e50cd32022-01-18 18:30:37 +0800584 if(p.dataAvail() > 0)
585 {
586 p.readInt32(&response.resp_type);
587 p.readInt32(&response.request);
588 p.readInt32(&response.slot_id);
589 p.readInt32(&response.error);
590 if(response.error != 0)
591 {
592 LYERRLOG("response return error");
593 return response.error;
594 }
595 p.readInt32(&num);
596 if(num == 0)
597 {
598 LYERRLOG("no paramters");
599 }else{
600 for(int i = 0; i<num;i++)
601 {
602 resp[i] = lynqStrdupReadString(p);
603 }
604 if(NULL != resp[0])
605 {
rjw02a50422022-01-25 14:57:53 +0800606 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800607 }
608 if(NULL != resp[1])
609 {
rjw02a50422022-01-25 14:57:53 +0800610 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800611 }
612 if(NULL != resp[2])
613 {
rjw02a50422022-01-25 14:57:53 +0800614 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800615 }
616 }
617 }
618 return response.error;
619}
620
621int lynq_query_network_selection_mode(int *netselMode)
622{
623 int ret = -1;
624 if(NULL == netselMode)
625 return ret;
626 int send_num = 0;
627 int recv_num = 0;
628 int readnum = 0;
629 lynq_client_t client_t;
rjw7e50cd32022-01-18 18:30:37 +0800630 memset(&client_t,0,sizeof(client_t));
631 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
632 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800633 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800634
635 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800636 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800637 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 +0800638 if(send_num<0)
639 {
640 LYERRLOG("sendto error:");
641 return -1;
642 }
643
644 //get data
rjw7e50cd32022-01-18 18:30:37 +0800645 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800646 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800647 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
648 if (ret != 0)
649 {
650 return ret;
651 }
rjw7e50cd32022-01-18 18:30:37 +0800652 if(p.dataAvail() > 0)
653 {
654 p.readInt32(&response.resp_type);
655 p.readInt32(&response.request);
656 p.readInt32(&response.slot_id);
657 p.readInt32(&response.error);
658 if(response.error != 0)
659 {
660 LYERRLOG("response return error");
661 return response.error;
662 }
663 p.readInt32(&readnum);
664 p.readInt32(netselMode);
665 }
666 return response.error;
667}
668
669int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
670{
671 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800672 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800673 return ret;
rjw78d04502022-02-24 13:37:11 +0800674 if(strlen(mode) == 0)
675 {
676 return ret;
677 }
rjw7e50cd32022-01-18 18:30:37 +0800678 int send_num = 0;
679 lynq_client_t client_t;
680 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800681 memset(&client_t,0,sizeof(client_t));
682 if(!strcmp(mode,"Auto"))
683 {
684 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
685 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800686 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800687 memset(client_t.param,0,sizeof(client_t.param));
688 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800689 if(mccmnc == NULL)
690 {
691 LYERRLOG("mccmnc is NULL!!!");
692 return ret;
693 }
694 if(strlen(mccmnc) == 0)
695 {
696 LYERRLOG("mccmnc strlen is 0!!!");
697 return ret;
698 }
rjw7e50cd32022-01-18 18:30:37 +0800699 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
700 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800701 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800702 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800703 }else{
704 LYERRLOG("request error");
705 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800706 }
707
rjw9c301f82022-05-25 09:10:33 +0800708 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800709 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 +0800710 if(send_num<0)
711 {
712 LYERRLOG("sendto error:");
713 return ret;
714 }
715
rjw7e50cd32022-01-18 18:30:37 +0800716 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800717 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800718 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
719 if (ret != 0)
720 {
721 return ret;
722 }
rjw7e50cd32022-01-18 18:30:37 +0800723 if(p.dataAvail() > 0)
724 {
725 p.readInt32(&response.resp_type);
726 p.readInt32(&response.request);
727 p.readInt32(&response.slot_id);
728 p.readInt32(&response.error);
729 }
730 return response.error;
731}
732
733int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
734{
735 int ret = -1;
736 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
737 return ret;
738 int send_num = 0;
739 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800740 char *resp[128];
741 lynq_client_t client_t;
742 memset(&client_t,0,sizeof(client_t));
743 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
744 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800745 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800746 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800747 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800748 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 +0800749 if(send_num<0)
750 {
751 LYERRLOG("sendto error:");
752 return ret;
753 }
754
755 //get data
rjw7e50cd32022-01-18 18:30:37 +0800756 Parcel p;
rjw46769c92022-07-04 21:17:25 +0800757 ret = get_response(p,600);
758 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
759 if (ret != 0)
760 {
761 return ret;
762 }
rjw7e50cd32022-01-18 18:30:37 +0800763 if(p.dataAvail() > 0)
764 {
765 p.readInt32(&response.resp_type);
766 p.readInt32(&response.request);
767 p.readInt32(&response.slot_id);
768 p.readInt32(&response.error);
769 if(response.error != 0)
770 {
771 LYERRLOG("response return error");
772 return response.error;
773 }
774 int num =p.readInt32();
775 if(num == 0)
776 {
777 LYERRLOG("no paramters");
778 }else{
779 for(int i = 0; i<num;i++)
780 {
781 resp[i] = lynqStrdupReadString(p);
782 }
783 if(NULL != resp[0])
784 {
rjw02a50422022-01-25 14:57:53 +0800785 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800786 }
787 if(NULL != resp[1])
788 {
rjw02a50422022-01-25 14:57:53 +0800789 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800790 }
791 if(NULL != resp[2])
792 {
rjw02a50422022-01-25 14:57:53 +0800793 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800794 }
795 if(NULL != resp[3])
796 {
rjw02a50422022-01-25 14:57:53 +0800797 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800798 }
799 }
800 }
801 return response.error;
802}
803
rjw4544e132022-04-01 15:00:26 +0800804int 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 +0800805{
806 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800807 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800808 return ret;
809 int send_num = 0;
810 int recv_num = 0;
811 int num = 0;
812 char str[LYNQ_TYPE_BUF];
rjwcdd83ae2022-01-22 14:10:42 +0800813 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800814 lynq_client_t client_t;
815 memset(&client_t,0,sizeof(client_t));
816 if(strlen(type)>LYNQ_TYPE_BUF)
817 {
818 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
819 }
820 memcpy(str,type,strlen(type)+1);
821 strUpper(str);
822 if(!strcmp(str,"VOICE"))
823 {
824 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
825 }else if(!strcmp(str,"DATA")){
826 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
827 }else if(!strcmp(str,"IMS")){
828 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
829 }else{
830 LYERRLOG("request error");
831 return ret;
832 }
833 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800834 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800835 memset(client_t.param,0,sizeof(client_t.param));
836
rjw9c301f82022-05-25 09:10:33 +0800837 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800838 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 +0800839 if(send_num<0)
840 {
841 LYERRLOG("sendto error:");
842 return ret;
843 }
844
845 //get data
rjw7e50cd32022-01-18 18:30:37 +0800846 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800847 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800848 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
849 if (ret != 0)
850 {
851 return ret;
852 }
rjw7e50cd32022-01-18 18:30:37 +0800853 if(p.dataAvail() > 0)
854 {
855 p.readInt32(&response.resp_type);
856 p.readInt32(&response.request);
857 p.readInt32(&response.slot_id);
858 p.readInt32(&response.error);
859 if(response.error != 0)
860 {
861 LYERRLOG("response return error");
862 return response.error;
863 }
864 if(!strcmp(str,"VOICE"))
865 {
866 p.readInt32(&num);
867 if(num == 15)
868 {
869 *regState = atoi(lynqStrdupReadString(p));
870 lynqStrdupReadString(p);
871 lynqStrdupReadString(p);
872 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800873 lynqStrdupReadString(p);
874 lynqStrdupReadString(p);
875 lynqStrdupReadString(p);
876 lynqStrdupReadString(p);
877 lynqStrdupReadString(p);
878 lynqStrdupReadString(p);
879 lynqStrdupReadString(p);
880 lynqStrdupReadString(p);
881 lynqStrdupReadString(p);
882 lynqStrdupReadString(p);
883 *netRejected = atoi(lynqStrdupReadString(p));
rjw7e50cd32022-01-18 18:30:37 +0800884 }
885 }else if(!strcmp(str,"DATA")){
886 p.readInt32(&num);
887 if(num == 11)
888 {
889 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800890 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800891 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800892
893 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800894 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800895 *netType = atoi(lynqStrdupReadString(p));
896 }
897
898 }else if(!strcmp(str,"IMS")){
899 p.readInt32(&num);
900 if(num == 2)
901 {
902 p.readInt32(imsRegState);
903 p.readInt32(radioTechFam);
904 }
905 }else{
906 LYERRLOG("request error");
907 return ret;
908 }
909 }
910 return response.error;
911}
912
913int lynq_query_prefferred_networktype(int *preNetType)
914{
915 int ret = -1;
916 int send_num = 0;
917 int recv_num = 0;
918 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800919 lynq_client_t client_t;
920 memset(&client_t,0,sizeof(client_t));
921 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
922 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800923 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800924 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800925 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800926 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 +0800927 if(send_num<0)
928 {
929 LYERRLOG("sendto error:");
930 return ret;
931 }
932
933 //get data
rjw7e50cd32022-01-18 18:30:37 +0800934 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800935 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800936 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
937 if (ret != 0)
938 {
939 return ret;
940 }
rjw7e50cd32022-01-18 18:30:37 +0800941 if(p.dataAvail() > 0)
942 {
943 p.readInt32(&response.resp_type);
944 p.readInt32(&response.request);
945 p.readInt32(&response.slot_id);
946 p.readInt32(&response.error);
947 if(response.error != 0)
948 {
949 LYERRLOG("response return error");
950 return response.error;
951 }
952 p.readInt32(&num);
953 p.readInt32(preNetType);
954 }
955 return response.error;
956}
957
958int lynq_set_prefferred_networktype(const int preffertype)
959{
960 int ret = -1;
961 if(preffertype < 0||preffertype >33)
962 return ret;
963 int send_num = 0;
964 lynq_client_t client_t;
965 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800966 memset(&client_t,0,sizeof(client_t));
967 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
968 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800969 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800970 sprintf(client_t.param,"%d",preffertype);
rjw9c301f82022-05-25 09:10:33 +0800971 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800972 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 +0800973 if(send_num<0)
974 {
975 LYERRLOG("sendto error:");
976 return ret;
977 }
978
rjw46769c92022-07-04 21:17:25 +0800979 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800980 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +0800981 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +0800982 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +0800983 {
rjw46769c92022-07-04 21:17:25 +0800984 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800985 }
986
rjw7e50cd32022-01-18 18:30:37 +0800987 if(p.dataAvail() > 0)
988 {
989 p.readInt32(&response.resp_type);
990 p.readInt32(&response.request);
991 p.readInt32(&response.slot_id);
992 p.readInt32(&response.error);
993 }
994
995 return response.error;
996
997}
998
rjw62a60152022-06-09 17:43:01 +0800999int 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 +08001000{
1001 int ret = -1;
1002 if(NULL == realNum)
1003 return ret;
1004 int send_num = 0;
1005 int recv_num = 0;
1006 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001007 lynq_client_t client_t;
1008 memset(&client_t,0,sizeof(client_t));
1009 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
1010 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001011 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001012 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001013 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001014 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 +08001015 if(send_num<0)
1016 {
1017 LYERRLOG("sendto error:");
1018 return ret;
1019 }
1020
1021 //get data
rjw7e50cd32022-01-18 18:30:37 +08001022 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001023 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001024 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1025 if (ret != 0)
1026 {
1027 return ret;
1028 }
rjw7e50cd32022-01-18 18:30:37 +08001029 if(p.dataAvail() > 0)
1030 {
1031 p.readInt32(&response.resp_type);
1032 p.readInt32(&response.request);
1033 p.readInt32(&response.slot_id);
1034 p.readInt32(&response.error);
1035 if(response.error != 0)
1036 {
1037 LYERRLOG("response return error");
1038 return response.error;
1039 }
1040 p.readInt32(&num);
1041 LYINFLOG("cell info num:%d",num);
1042 *realNum = num;
1043 for(int i = 0;i<num;i++)
1044 {
rjwa8011682022-05-31 17:31:28 +08001045 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw7e50cd32022-01-18 18:30:37 +08001046 }
1047 }
1048 return response.error;
1049
1050}
1051
1052int lynq_set_unsol_cell_info_listrate(const int rate)
1053{
1054 int ret = -1;
1055 int send_num = 0;
1056 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001057 lynq_client_t client_t;
1058 memset(&client_t,0,sizeof(client_t));
1059 client_t.request = RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE;
1060 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001061 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001062 sprintf(client_t.param,"%d",rate);
rjw9c301f82022-05-25 09:10:33 +08001063 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001064 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 +08001065 if(send_num<0)
1066 {
1067 LYERRLOG("sendto error:");
1068 return ret;
1069 }
1070
rjw9c301f82022-05-25 09:10:33 +08001071
rjw46769c92022-07-04 21:17:25 +08001072 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001073 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001074 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001075 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001076 {
rjw46769c92022-07-04 21:17:25 +08001077 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001078 }
1079
rjw7e50cd32022-01-18 18:30:37 +08001080 if(p.dataAvail() > 0)
1081 {
1082 p.readInt32(&response.resp_type);
1083 p.readInt32(&response.request);
1084 p.readInt32(&response.slot_id);
1085 p.readInt32(&response.error);
1086 }
1087
1088 return response.error;
1089}
1090
1091int lynq_set_band_mode(const int bandmode)
1092{
1093 int ret = -1;
1094 int send_num = 0;
1095 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001096 lynq_client_t client_t;
1097 memset(&client_t,0,sizeof(client_t));
1098 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1099 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001100 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001101 sprintf(client_t.param,"%d",bandmode);
rjw9c301f82022-05-25 09:10:33 +08001102 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001103 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 +08001104 if(send_num<0)
1105 {
1106 LYERRLOG("sendto error:");
1107 return ret;
1108 }
1109
rjw46769c92022-07-04 21:17:25 +08001110 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001111 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001112 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001113 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001114 {
rjw46769c92022-07-04 21:17:25 +08001115 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001116 }
1117
rjw7e50cd32022-01-18 18:30:37 +08001118 if(p.dataAvail() > 0)
1119 {
1120 p.readInt32(&response.resp_type);
1121 p.readInt32(&response.request);
1122 p.readInt32(&response.slot_id);
1123 p.readInt32(&response.error);
1124 }
1125
1126 return response.error;
1127}
1128
1129int lynq_query_available_bandmode(int availBanMode[])
1130{
1131 int ret = -1;
1132 if(NULL == availBanMode)
1133 return ret;
1134 int send_num = 0;
1135 int recv_num = 0;
1136 int num = 0;
1137 int res = 0;
rjw7e50cd32022-01-18 18:30:37 +08001138 lynq_client_t client_t;
1139 memset(&client_t,0,sizeof(client_t));
1140 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1141 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001142 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001143 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001144 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001145 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 +08001146 if(send_num<0)
1147 {
1148 LYERRLOG("sendto error:");
1149 return ret;
1150 }
1151
1152 //get data
rjw46769c92022-07-04 21:17:25 +08001153 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001154 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001155 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001156 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001157 {
rjw46769c92022-07-04 21:17:25 +08001158 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001159 }
rjw78d04502022-02-24 13:37:11 +08001160 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001161 {
1162 availBanMode[i]=0;
1163 }
rjw7e50cd32022-01-18 18:30:37 +08001164 if(p.dataAvail() > 0)
1165 {
1166 p.readInt32(&response.resp_type);
1167 p.readInt32(&response.request);
1168 p.readInt32(&response.slot_id);
1169 p.readInt32(&response.error);
1170 if(response.error != 0)
1171 {
1172 LYERRLOG("response return error");
1173 return response.error;
1174 }
1175 p.readInt32(&num);
1176 LYINFLOG("num = %d",num);
1177 availBanMode[0] = num;
1178 for(int i=1 ;i<=num;i++)
1179 {
1180 p.readInt32(&res);
1181 availBanMode[i]=res;
1182 }
1183 }
1184
1185 return response.error;
1186}
1187
1188int lynq_radio_on(const int data)
1189{
1190 int ret = -1;
1191 if(data < 0)
1192 return ret;
1193 int send_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001194 int recv_num = 0;
1195 lynq_client_t client_t;
1196 memset(&client_t,0,sizeof(client_t));
1197 client_t.request = RIL_REQUEST_RADIO_POWER;
1198 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001199 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001200 sprintf(client_t.param,"%d",data);
rjw9c301f82022-05-25 09:10:33 +08001201 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001202 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 +08001203 if(send_num<0)
1204 {
1205 LYERRLOG("sendto error:");
1206 return ret;
1207 }
1208
rjw7e50cd32022-01-18 18:30:37 +08001209 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001210 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001211 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1212 if (ret != 0)
1213 {
1214 return ret;
1215 }
rjw7e50cd32022-01-18 18:30:37 +08001216 if(p.dataAvail() > 0)
1217 {
1218 p.readInt32(&response.resp_type);
1219 p.readInt32(&response.request);
1220 p.readInt32(&response.slot_id);
1221 p.readInt32(&response.error);
1222 }
1223
1224 return response.error;
1225}
1226
1227int lynq_query_radio_tech(int* radioTech)
1228{
1229 int ret = -1;
1230 if(NULL == radioTech)
1231 return ret;
1232 int send_num = 0;
1233 int recv_num = 0;
1234 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001235 lynq_client_t client_t;
1236 memset(&client_t,0,sizeof(client_t));
1237 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1238 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001239 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001240 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001241 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001242 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 +08001243 if(send_num<0)
1244 {
1245 LYERRLOG("sendto error:");
1246 return ret;
1247 }
1248
rjw7e50cd32022-01-18 18:30:37 +08001249 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001250 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001251 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1252 if (ret != 0)
1253 {
1254 return ret;
1255 }
rjw7e50cd32022-01-18 18:30:37 +08001256 if(p.dataAvail() > 0)
1257 {
1258 p.readInt32(&response.resp_type);
1259 p.readInt32(&response.request);
1260 p.readInt32(&response.slot_id);
1261 p.readInt32(&response.error);
1262 if(response.error != 0)
1263 {
1264 LYERRLOG("response return error");
1265 return response.error;
1266 }
1267 p.readInt32(&num);
1268 p.readInt32(radioTech);
1269 }
1270 return response.error;
1271}
1272
1273int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1274{
1275 int ret = -1;
1276 if(NULL == solSigStren)
1277 return ret;
1278 int send_num = 0;
1279 int recv_num = 0;
1280 int sum = 0;
1281 int LTE_signalstrength = 0;
1282 int WCDMA_signalstrength = 0;
1283 int none = 0;
rjw7e50cd32022-01-18 18:30:37 +08001284 lynq_client_t client_t;
1285 memset(&client_t,0,sizeof(client_t));
1286 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1287 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001288 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001289 memset(client_t.param,0,sizeof(client_t.param));
1290
rjw9c301f82022-05-25 09:10:33 +08001291 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001292 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 +08001293 if(send_num<0)
1294 {
1295 LYERRLOG("sendto error:");
1296 return ret;
1297 }
1298
1299 //get data
rjw7e50cd32022-01-18 18:30:37 +08001300 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001301 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001302 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1303 if (ret != 0)
1304 {
1305 return ret;
1306 }
rjw7e50cd32022-01-18 18:30:37 +08001307 if(p.dataAvail() > 0)
1308 {
1309 p.readInt32(&response.resp_type);
1310 p.readInt32(&response.request);
1311 p.readInt32(&response.slot_id);
1312 p.readInt32(&response.error);
1313 if(response.error != 0)
1314 {
1315 LYERRLOG("response return error");
1316 return response.error;
1317 }
1318
1319 p.readInt32(&solSigStren->rssi);
1320 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1321 {
1322 solSigStren->gw_sig_valid = 1;
1323 }else{
1324 solSigStren->gw_sig_valid = 0;
1325 }
1326
1327 p.readInt32(&none);
1328 p.readInt32(&none);
1329 p.readInt32(&none);
1330 p.readInt32(&none);
1331 p.readInt32(&none);
1332 p.readInt32(&none);
1333 p.readInt32(&none);
1334 p.readInt32(&LTE_signalstrength);
1335 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1336 p.readInt32(&solSigStren->rsrp);
1337 p.readInt32(&solSigStren->rsrq);
1338 p.readInt32(&solSigStren->rssnr);
1339 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1340 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1341 {
1342 solSigStren->lte_sig_valid = 1;
1343 }else{
1344 solSigStren->lte_sig_valid = 0;
1345 }
1346
1347 p.readInt32(&none);
1348 p.readInt32(&none);
1349 p.readInt32(&none);
1350 p.readInt32(&none);
1351 p.readInt32(&none);
1352 p.readInt32(&WCDMA_signalstrength);
1353 p.readInt32(&none);
1354 p.readInt32(&solSigStren->rscp);
1355 p.readInt32(&solSigStren->ecno);
1356 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1357 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1358 {
rjwcdd83ae2022-01-22 14:10:42 +08001359 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001360 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001361 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001362 }
rjwcdd83ae2022-01-22 14:10:42 +08001363 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001364 p.readInt32(&solSigStren->ssRsrp);
1365 p.readInt32(&solSigStren->ssRsrq);
1366 p.readInt32(&solSigStren->ssSinr);
1367 p.readInt32(&solSigStren->csiRsrp);
1368 p.readInt32(&solSigStren->csiRsrq);
1369 p.readInt32(&solSigStren->csiSinr);
1370 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1371 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1372 if(sum != 0)
1373 {
1374 solSigStren->nr_sig_valid = 1;
1375 }else{
1376 LYERRLOG("None of NR signal info");
1377 }
1378 }
1379 return response.error;
1380}
rjwbc8a05f2022-03-02 15:23:11 +08001381
rjw4a5a78d2022-03-10 11:04:24 +08001382int lynq_set_ims(const int ims_mode)
1383{
1384 int ret = -1;
1385 if (ims_mode < 0 || ims_mode > 1)
1386 {
1387 LYERRLOG("incoming ims_mode error");
1388 return ret;
1389 }
1390 int send_num = 0;
rjw4a5a78d2022-03-10 11:04:24 +08001391 int recv_num = 0;
1392 lynq_client_t client_t;
1393
1394 memset(&client_t,0,sizeof(client_t));
1395 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1396 client_t.paramLen = 1;
1397 client_t.uToken = network_Global_uToken;
1398 sprintf(client_t.param,"%d",ims_mode);
rjw9c301f82022-05-25 09:10:33 +08001399 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001400 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1401 if (send_num<0)
1402 {
1403 LYERRLOG("sendto error:");
1404 return ret;
1405 }
1406
rjw4a5a78d2022-03-10 11:04:24 +08001407 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001408 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001409 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1410 if (ret != 0)
1411 {
1412 return ret;
1413 }
rjw4a5a78d2022-03-10 11:04:24 +08001414 if (p.dataAvail() > 0)
1415 {
1416 p.readInt32(&response.resp_type);
1417 p.readInt32(&response.request);
1418 p.readInt32(&response.slot_id);
1419 p.readInt32(&response.error);
1420 }
1421
1422 return response.error;
1423}
1424
1425
rjwbc8a05f2022-03-02 15:23:11 +08001426/*Used to wait for an update signal*/
1427int lynq_wait_signalchanges(int *handle)
1428{
1429 LYDBGLOG("start wait signalchanges info");
1430 if(NULL == handle)
1431 {
1432 LYERRLOG("illegal input");
1433 return -1;
1434 }
1435 wait_signal_changes();
1436 LYDBGLOG("get signalchanges");
1437 *handle = network_wait_urc_id;
1438 return 0;
1439}
1440/*Used to get urc info*/
1441int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1442{
1443 LYDBGLOG("start get urc info");
1444 if(handle != 1002&&handle != 1009)
1445 {
1446 LYINFLOG("invalid handle!!!");
1447 return -1;
1448 }
1449 if(NULL == solSigStren && NULL == slot_id)
1450 {
1451 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1452 return -1;
1453 }
1454 switch(handle)
1455 {
1456 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1457 {
1458 LYDBGLOG("get state update to VOICE");
1459 *slot_id = network_urc_slot_id;
1460 LYINFLOG("slot_id = %d",network_urc_slot_id);
1461 }
1462 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1463 {
1464 LYDBGLOG("get state update to signal info");
1465 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1466 solSigStren->rssi = network_urc_solSigStren.rssi;
1467 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1468 solSigStren->rscp = network_urc_solSigStren.rscp;
1469 solSigStren->ecno = network_urc_solSigStren.ecno;
1470 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1471 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1472 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1473 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1474 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1475 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1476 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1477 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1478 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1479 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1480 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
1481 }
1482 }
1483 return 0;
rjw4200a082022-05-17 17:58:35 +08001484}
lh3a26dd52022-07-01 04:44:57 -07001485
1486/**@brief parse at response,return error code,and the response
1487* @param response [IN] <response>:original at response,This parameter must be a character array.
1488
1489* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1490* field:
1491* eg:
1492* "+cnum: 123456\n+cnum: 456"
1493* value:12345;456;
1494* @param value_len [IN] <value_len>: The value length.
1495
1496* @return:AT error code
1497*/
1498static int parse_at_result(char response[],char value[],int value_len)
1499{
1500 if(response == NULL || value == NULL)
1501 {
1502 LYERRLOG("parameter invalid");
1503 return -1;
1504 }
1505 if(strstr(response,"ERROR"))
1506 {
1507 int i;
1508 for(i = 0;i < strlen(response);i++)
1509 {
1510 if(response[i]==':')
1511 {
1512 break;
1513 }
1514 }
1515 if(i < strlen(response))
1516 {
1517 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1518 return atoi(response+i+1);
1519 }
1520 else
1521 {
1522 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1523 return 100; //unknown
1524 }
1525 }
1526 else if(strstr(response,"OK"))
1527 {
1528 /** parse the at response value
1529 * eg:
1530 * --> at+cnum
1531 * <-- +CNUM:"1243452"
1532 * need parse the "1243452" to <value>
1533 *@ To-Do
1534 */
1535 int count;
1536 int resp_addr[32] = {0};
1537 char temp_buf[1024] = {0};
1538 char *dest;
1539 dest = NULL;
1540 count = 0;
1541 int res_len = strlen(response);
1542 LYINFLOG("res_len:%d",res_len);
1543 for(int i = 0; i < res_len; i++)
1544 {
1545 if(response[i]==':')
1546 {
1547 resp_addr[count] = i;
1548 count++;
1549 }
1550 if(response[i] == '\n')
1551 {
1552 response[i] = '\0';
1553 }
1554 }
1555 LYINFLOG("count:%d",count);
1556 if(count > 0)
1557 {
1558 for(int i = 0; i < count; i++)
1559 {
1560 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1561 {
1562 LYINFLOG("2 will be out of range\n");
1563 break;
1564 }
1565 if(strlen(temp_buf) >= 1023)
1566 {
1567 LYINFLOG("1 will be out of range\n");
1568 break;
1569 }
1570 strcat(temp_buf,response+resp_addr[i]+2);
1571
1572 if(strlen(temp_buf) >= 1023)
1573 {
1574 LYINFLOG("1 will be out of range\n");
1575 break;
1576 }
1577 strcat(temp_buf,";");
1578 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1579 }
1580 LYINFLOG("parse_result:%s\n",temp_buf);
1581 if(strlen(temp_buf) > value_len)
1582 {
1583 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1584 memcpy(value,temp_buf,value_len);
1585 }
1586 else
1587 {
1588 memcpy(value,temp_buf,strlen(temp_buf));
1589 }
1590 }
1591 return 0;
1592 }
1593 else
1594 {
1595 LYINFLOG("%s this response invalid\n",response);
1596 return -1;
1597 }
1598}
1599#ifdef MODEM_GEN97
1600
1601int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1602{
1603 int ret;
1604 int send_num;
1605 int recv_len;
1606 Parcel p;
1607 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1608 lynq_client_t client_t;
1609 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1610
1611 ret = -1;
1612 send_num = -1;
1613 recv_len = -1;
1614
1615 LYINFLOG("lynq_oos_recover_timer_interval start");
1616 if((mode < 0) || (mode >1) || (NULL == interval) || (NULL == result))
1617 {
1618 LYERRLOG("lynq_oos_recover_timer_interval paramter fail!!!");
1619 return ret;
1620 }
1621
1622 memset(&client_t,0,sizeof(client_t));
1623 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL
1624 client_t.paramLen = 1;
1625 client_t.uToken = network_Global_uToken;
1626 if(mode == 0)
1627 {
1628 sprintf(client_t.param,"AT+ERSCFG=%s",interval);
1629 }
1630 else
1631 {
1632 sprintf(client_t.param,"AT+ERSCFG?",interval);
1633 }
1634 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1635 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1636 if(send_num < 0)
1637 {
1638 LYERRLOG("sendto error:%s",strerror(errno));
1639 return ret;
1640 }
1641 ret = get_response(p,-1); //use defualt time (5s)
1642 if(ret != 0)
1643 {
1644 return ret;
1645 }
1646 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1647 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1648 if(0 == response.error)
1649 {
1650 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1651 LYINFLOG("get recover timer interval");
1652 p.readInt32(&recv_len);
1653 if(recv_len == -1)
1654 {
1655 LYINFLOG("no responset");
1656 return -1;
1657 }
1658 else
1659 {
1660 LYINFLOG("recv_len:%d",recv_len);
1661 p.read(response_interval,recv_len);
1662 }
1663 LYINFLOG("response_interval:%s",response_interval);
1664 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1665 if(mode == 1)
1666 {
1667 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1668 {
1669 memcpy(result,res_data,strlen(res_data));
1670 }
1671 }
1672 LYINFLOG("ret:%d",ret);
1673 return ret;
1674 }
1675 else
1676 {
1677 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1678 return response.error;
1679 }
1680}
1681
1682int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1683{
1684 int ret;
1685 int send_num;
1686 int recv_len;
1687 Parcel p;
1688 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1689 lynq_client_t client_t;
1690 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1691
1692 ret = -1;
1693 send_num = -1;
1694 recv_len = -1;
1695
1696 LYINFLOG("lynq_oos_deep_sleep_recover_timer_interval start");
1697 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
1698 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1699 {
1700 LYERRLOG("lynq_oos_deep_sleep_recover_timer_interval paramter fail!!!");
1701 return ret;
1702 }
1703
1704 memset(&client_t,0,sizeof(client_t));
1705 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL
1706 client_t.paramLen = 1;
1707 client_t.uToken = network_Global_uToken;
1708 sprintf(client_t.param,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
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("set deep sleep recover timer interval response");
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 return ret;
1741 }
1742 else
1743 {
1744 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1745 return response.error;
1746 }
1747}
1748#endif
1749