blob: 70914aef6cbc8e969ea02b5e8f014a3761e34e46 [file] [log] [blame]
rjw7e50cd32022-01-18 18:30:37 +08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <vendor-ril/telephony/ril.h>
rjw4a5a78d2022-03-10 11:04:24 +080012#include <vendor-ril/telephony/mtk_ril_sp.h>
rjw7e50cd32022-01-18 18:30:37 +080013
14#include "lynq_network.h"
15#include "liblog/lynq_deflog.h"
q.huang47d4dfe2022-08-17 17:52:29 +080016#include "lynq_network_state_buffer.h"
rjw7e50cd32022-01-18 18:30:37 +080017#define LYNQ_SERVICE_PORT 8088
18#define LYNQ_URC_SERVICE_PORT 8086
19#define LYNQ_URC_ADDRESS "0.0.0.0"
20#define LYNQ_ADDRESS "127.0.0.1"
21#define LYNQ_REQUEST_PARAM_BUF 8192
22#define LYNQ_REC_BUF 8192
23#define LYNQ_RESP_BUF 128
24#define LYNQ_TYPE_BUF 10
25#define USER_LOG_TAG "LYNQ_NETWORK"
26
27
28using ::android::Parcel;
29
30
31typedef struct{
32 int uToken;
33 int request;
34 int paramLen;
35 char param[LYNQ_REQUEST_PARAM_BUF];
36}lynq_client_t;
37
38typedef struct{
39 int resp_type;
40 int request;
41 int slot_id;
42 int error;
43}lynq_resp_t;
44
45lynq_client_t client_t;
46lynq_resp_t response;
rjwbc8a05f2022-03-02 15:23:11 +080047
48int network_len_addr_serv;
49int network_len_urc_addr_serv;
50struct sockaddr_in network_addr_serv;
51struct sockaddr_in network_urc_addr_serv;
52static int network_sock_fd = 0;
53int network_urc_sock_fd = 0;
54int network_Global_uToken = 0;
55int network_slot_id = -1;
56int network_urc_slot_id = -1;
57int network_urc_status = 1;
58int network_wait_urc_id = 0;
59signalStrength_t network_urc_solSigStren;
rjw22947c22022-03-15 09:21:29 +080060/**g_lynq_network_init_flag
61* @brief mark network initialization state
62* 0:deinit status
63* 1:init state
64*/
65static int g_lynq_network_init_flag = 0;
rjw7e50cd32022-01-18 18:30:37 +080066
rjwbc8a05f2022-03-02 15:23:11 +080067static pthread_mutex_t signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
68static pthread_cond_t signal_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw7e50cd32022-01-18 18:30:37 +080069
rjw9c301f82022-05-25 09:10:33 +080070/**g_lynq_network_sendto_mutex
71* @brief mark network send request mutex
72*/
73static pthread_mutex_t g_lynq_network_sendto_mutex;
74
75//static pthread_mutex_t g_lynq_network_recv_mutex;
76
rjw7e50cd32022-01-18 18:30:37 +080077typedef enum{
78 LYNQ_E_CARDSTATE_ERROR=8000,
79 /* The voice service state is out of service*/
80 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
81 /* The voice service state is EMERGENCY_ONLY*/
82 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
83 /* The radio power is power off*/
84 LYNQ_E_STATE_POWER_OFF=8003,
85 LYNQ_E_TIME_OUT=8004,
86 /*create or open sms DB fail */
87 LYNQ_E_SMS_DB_FAIL=8005,
88 /*Failed to execute sql statement*/
89 LYNQ_E_SMS_SQL_FAIL = 8006,
90 LYNQ_E_SMS_NOT_FIND = 8007,
91 /* The logic conflict*/
92 LYNQ_E_CONFLICT=9000,
93 /*Null anomaly*/
94 LYNQ_E_NULL_ANONALY=9001
95}LYNQ_E;
96
lh3a26dd52022-07-01 04:44:57 -070097
98/**@brief get response and write msg to parcel
99* @param p [IN] <p>: the parcel
100*
101* @param time_out [IN] <time_out>: timeout.
102* < 0:use defult timeout(5s)
103* >=0:use this timeout
104* @return
105* 0:success
106* other:failure
107*/
108int get_response(Parcel &p,int time_out)
109{
rjwa59bf312022-07-05 11:50:31 +0800110 int len = 0;
111 char recvline[LYNQ_REC_BUF];
lh3a26dd52022-07-01 04:44:57 -0700112 bzero(recvline,LYNQ_REC_BUF);
113 LYINFLOG("get response");
114 /* receive data from server */
115 struct timeval timeOut;
rjwa59bf312022-07-05 11:50:31 +0800116 timeOut.tv_sec = 30; //defualt 5s
lh3a26dd52022-07-01 04:44:57 -0700117 timeOut.tv_usec = 0;
118 if(time_out >= 0)
119 {
120 LYINFLOG("use time out %d",time_out);
121 timeOut.tv_sec = time_out; //just set second
122 }
123 if(setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
124 {
125 LYERRLOG("time out setting failed");
126 return -1;
127 }
128 len = recvfrom(network_sock_fd,recvline,sizeof(recvline),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);
129 if(len == -1 && errno == EAGAIN)
130 {
131 LYERRLOG("read error,maybe timeout: %s",strerror(errno));
132 return LYNQ_E_TIME_OUT;
rjwa59bf312022-07-05 11:50:31 +0800133 }
lh3a26dd52022-07-01 04:44:57 -0700134 if (recvline != NULL)
135 {
rjwa59bf312022-07-05 11:50:31 +0800136 p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
137 p.setDataPosition(0);
138 }
139 return 0;
140}
141int JumpHeader(Parcel &p,int *resp_type,int *request,int *slot_id,int *error)
lh3a26dd52022-07-01 04:44:57 -0700142{
143 LYINFLOG("jump header");
rjwa59bf312022-07-05 11:50:31 +0800144 if(p.dataAvail() > 0)
145 {
146 p.readInt32(resp_type);
147 p.readInt32(request);
148 p.readInt32(slot_id);
149 p.readInt32(error);
150 return 0;
151 }
152 else
153 {
154 return -1;
155 }
lh3a26dd52022-07-01 04:44:57 -0700156}
157
rjwbc8a05f2022-03-02 15:23:11 +0800158int wait_signal_changes()
159{
160 int ret = 0;
161 pthread_mutex_lock(&signal_state_change_mutex);
162 ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);
163 pthread_mutex_unlock(&signal_state_change_mutex);
164 return 0;
165}
166
167void send_signal_changes()
168{
169 pthread_mutex_lock(&signal_state_change_mutex);
170 pthread_cond_signal(&signal_state_change_cond);
171 pthread_mutex_unlock(&signal_state_change_mutex);
172 return;
173}
174
rjw7e50cd32022-01-18 18:30:37 +0800175void *thread_urc_recv(void *p)
176{
177 Parcel *urc_p =NULL;
178 char urc_data[LYNQ_REC_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800179 int resp_type = -1;
180 int urc_id = -1;
181 int res = 0;
182 int none = 0;
183 int NR_sum = 0;
rjw7e50cd32022-01-18 18:30:37 +0800184 int urc_LTE_signalstrength = 0;
185 int urc_WCDMA_signalstrength = 0;
rjw7e50cd32022-01-18 18:30:37 +0800186 LYINFLOG("urc thread is running");
rjwbc8a05f2022-03-02 15:23:11 +0800187 while(network_urc_status)
rjw7e50cd32022-01-18 18:30:37 +0800188 {
189 bzero(urc_data,LYNQ_REC_BUF);
rjwbc8a05f2022-03-02 15:23:11 +0800190 res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +0800191 if(res<=0)
192 {
193 LYERRLOG("thread_urc_recv step2 fail:");
194 break;
195 }
196 urc_p = new Parcel();
197 urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
198 urc_p->setDataPosition(0);
199 if(urc_p->dataAvail()>0)
200 {
201 urc_p->readInt32(&resp_type);
202 urc_p->readInt32(&urc_id);
rjwbc8a05f2022-03-02 15:23:11 +0800203 urc_p->readInt32(&network_urc_slot_id);
rjw7e50cd32022-01-18 18:30:37 +0800204 switch(urc_id)
205 {
q.huang47d4dfe2022-08-17 17:52:29 +0800206 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
rjw7e50cd32022-01-18 18:30:37 +0800207 {
q.huangaf58bc82022-08-19 17:11:21 +0800208 set_register_voice_buffer_valid(false);
rjwbc8a05f2022-03-02 15:23:11 +0800209 network_wait_urc_id = urc_id;
210 LYINFLOG("slot_id = %d",network_urc_slot_id);
211 send_signal_changes();
rjw25d01752022-08-04 09:42:00 +0800212 break;
rjw7e50cd32022-01-18 18:30:37 +0800213 }
q.huang47d4dfe2022-08-17 17:52:29 +0800214 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
215 {
q.huangaf58bc82022-08-19 17:11:21 +0800216 set_register_data_buffer_valid(false);
q.huang47d4dfe2022-08-17 17:52:29 +0800217 network_wait_urc_id = urc_id;
218 LYINFLOG("slot_id = %d",network_urc_slot_id);
219 send_signal_changes();
220 break;
221 }
222 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
223 {
q.huangaf58bc82022-08-19 17:11:21 +0800224 set_register_ims_buffer_valid(false);
q.huang47d4dfe2022-08-17 17:52:29 +0800225 network_wait_urc_id = urc_id;
226 LYINFLOG("slot_id = %d",network_urc_slot_id);
227 send_signal_changes();
228 break;
229 }
230 case RIL_UNSOL_SIGNAL_STRENGTH:
rjw7e50cd32022-01-18 18:30:37 +0800231 {
rjwbc8a05f2022-03-02 15:23:11 +0800232 urc_p->readInt32(&network_urc_solSigStren.rssi);
233 if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))
rjw7e50cd32022-01-18 18:30:37 +0800234 {
rjwbc8a05f2022-03-02 15:23:11 +0800235 network_urc_solSigStren.gw_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800236 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800237 network_urc_solSigStren.gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800238 }
rjwbc8a05f2022-03-02 15:23:11 +0800239 if(network_urc_solSigStren.gw_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800240 {
rjwbc8a05f2022-03-02 15:23:11 +0800241 LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);
rjw78d04502022-02-24 13:37:11 +0800242 }
rjw7e50cd32022-01-18 18:30:37 +0800243 urc_p->readInt32(&none);
244 urc_p->readInt32(&none);
245 urc_p->readInt32(&none);
246 urc_p->readInt32(&none);
247 urc_p->readInt32(&none);
248 urc_p->readInt32(&none);
249 urc_p->readInt32(&none);
250 urc_p->readInt32(&urc_LTE_signalstrength);
251 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
rjwbc8a05f2022-03-02 15:23:11 +0800252 urc_p->readInt32(&network_urc_solSigStren.rsrp);
253 urc_p->readInt32(&network_urc_solSigStren.rsrq);
254 urc_p->readInt32(&network_urc_solSigStren.rssnr);
rjw7e50cd32022-01-18 18:30:37 +0800255 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
256 {
rjwbc8a05f2022-03-02 15:23:11 +0800257 network_urc_solSigStren.lte_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800258 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800259 network_urc_solSigStren.lte_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800260 }
rjwbc8a05f2022-03-02 15:23:11 +0800261 if(network_urc_solSigStren.lte_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800262 {
263 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
264 }
rjw7e50cd32022-01-18 18:30:37 +0800265 urc_p->readInt32(&none);
266 urc_p->readInt32(&none);
267 urc_p->readInt32(&none);
268 urc_p->readInt32(&none);
269 urc_p->readInt32(&none);
270 urc_p->readInt32(&urc_WCDMA_signalstrength);
271 urc_p->readInt32(&none);
rjwbc8a05f2022-03-02 15:23:11 +0800272 urc_p->readInt32(&network_urc_solSigStren.rscp);
273 urc_p->readInt32(&network_urc_solSigStren.ecno);
rjw7e50cd32022-01-18 18:30:37 +0800274 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
275 {
rjwbc8a05f2022-03-02 15:23:11 +0800276 network_urc_solSigStren.wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800277 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800278 network_urc_solSigStren.wcdma_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800279 }
rjwbc8a05f2022-03-02 15:23:11 +0800280 if(network_urc_solSigStren.wcdma_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800281 {
282 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
rjw7e50cd32022-01-18 18:30:37 +0800283 }
rjwbc8a05f2022-03-02 15:23:11 +0800284 urc_p->readInt32(&network_urc_solSigStren.ssRsrp);
285 urc_p->readInt32(&network_urc_solSigStren.ssRsrq);
286 urc_p->readInt32(&network_urc_solSigStren.ssSinr);
287 urc_p->readInt32(&network_urc_solSigStren.csiRsrp);
288 urc_p->readInt32(&network_urc_solSigStren.csiRsrq);
289 urc_p->readInt32(&network_urc_solSigStren.csiSinr);
290 NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\
291 (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800292 if(NR_sum != 0)
293 {
rjwbc8a05f2022-03-02 15:23:11 +0800294 network_urc_solSigStren.nr_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +0800295 }else{
rjwbc8a05f2022-03-02 15:23:11 +0800296 network_urc_solSigStren.nr_sig_valid = 0;
rjw78d04502022-02-24 13:37:11 +0800297 }
rjwbc8a05f2022-03-02 15:23:11 +0800298 if(network_urc_solSigStren.nr_sig_valid == 1)
rjw78d04502022-02-24 13:37:11 +0800299 {
300 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 +0800301 network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \
302 network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);
rjw7e50cd32022-01-18 18:30:37 +0800303 }
rjwbc8a05f2022-03-02 15:23:11 +0800304 network_wait_urc_id = urc_id;
305 send_signal_changes();
rjw25d01752022-08-04 09:42:00 +0800306 break;
rjw7e50cd32022-01-18 18:30:37 +0800307 }
308 }
309 }
310 }
q.huang47d4dfe2022-08-17 17:52:29 +0800311 return NULL;
rjw7e50cd32022-01-18 18:30:37 +0800312}
313
314
315int lynq_server_socket_start()
316{
lh3a26dd52022-07-01 04:44:57 -0700317 struct timeval timeOut;
rjwbc8a05f2022-03-02 15:23:11 +0800318 network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
319 if(-1 == network_sock_fd)
rjw7e50cd32022-01-18 18:30:37 +0800320 {
321 LYERRLOG("socket open error");
322 return -1;
323 }
lh3a26dd52022-07-01 04:44:57 -0700324
325 timeOut.tv_sec = 5;
326 timeOut.tv_usec = 0;
327 if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
328 {
329 LYERRLOG("time out setting failed\n");
330 return -1;
331 }
rjwbc8a05f2022-03-02 15:23:11 +0800332 LYINFLOG("network_sock_fd = %d",network_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800333
rjwbc8a05f2022-03-02 15:23:11 +0800334 memset(&network_addr_serv, 0, sizeof(network_addr_serv));
335 network_addr_serv.sin_family = AF_INET;
336 network_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
337 network_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
338 network_len_addr_serv = sizeof(network_addr_serv);
lh3a26dd52022-07-01 04:44:57 -0700339
340
rjw7e50cd32022-01-18 18:30:37 +0800341 return 0;
342}
343
344int lynq_urc_socket_start()
345{
346 pthread_t tid;
347 pthread_attr_t attr;
348 int on = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800349 network_urc_sock_fd = -1;
rjw7e50cd32022-01-18 18:30:37 +0800350 int ret = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800351 network_len_urc_addr_serv = sizeof(sockaddr_in);
352 network_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
353 if (network_urc_sock_fd <0){
rjw7e50cd32022-01-18 18:30:37 +0800354 LYERRLOG("urc socket error");
355 ret = -1;
356 }
rjwbc8a05f2022-03-02 15:23:11 +0800357 network_urc_addr_serv.sin_family = AF_INET;
358 network_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
359 network_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
rjw7e50cd32022-01-18 18:30:37 +0800360 /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
rjwbc8a05f2022-03-02 15:23:11 +0800361 ret = setsockopt(network_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
rjw7e50cd32022-01-18 18:30:37 +0800362 if(ret <0)
363 {
364 LYERRLOG("urc socket set error");
365 return -1;
366 }
rjwbc8a05f2022-03-02 15:23:11 +0800367 ret = bind(network_urc_sock_fd ,(struct sockaddr*)&network_urc_addr_serv, sizeof(network_urc_addr_serv));
rjw7e50cd32022-01-18 18:30:37 +0800368 if(ret <0)
369 {
370 LYERRLOG("urc socket bind error");
371 return -1;
372 }
373 pthread_attr_init(&attr);
374 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
rjwbc8a05f2022-03-02 15:23:11 +0800375 ret = pthread_create(&tid,&attr,thread_urc_recv,(void *)network_urc_sock_fd);
rjw7e50cd32022-01-18 18:30:37 +0800376 if(ret <0)
377 {
378 LYERRLOG("urc pthread create error");
379 return -1;
380 }
381 LYINFLOG("urc start success");
382 return 0;
383}
384
385int lynq_network_init(int utoken){
rjw22947c22022-03-15 09:21:29 +0800386 if(g_lynq_network_init_flag == 1)
387 {
388 LYERRLOG("init twice is not allowed");
389 return -1;
390 }
391 g_lynq_network_init_flag = 1;
rjw7e50cd32022-01-18 18:30:37 +0800392 if(utoken <0){
393 LYERRLOG("init err");
394 return -1;
395 }
rjwbc8a05f2022-03-02 15:23:11 +0800396 network_urc_status = 1;
397 network_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +0800398 LYLOGSET(LOG_INFO);
399 LYLOGEINIT(USER_LOG_TAG);
400 int ret = 0;
401
q.huang47d4dfe2022-08-17 17:52:29 +0800402 init_network_timer_all();
403
rjw7e50cd32022-01-18 18:30:37 +0800404 ret = lynq_server_socket_start();
405 if(ret !=0)
406 {
407 LYERRLOG("init socket client fail!!!");
408 return -1;
409 }
410 ret = lynq_urc_socket_start();
411 if(ret != 0)
412 {
413 LYERRLOG("init socket urc fail!!!");
414 return -1;
415 }
rjw9c301f82022-05-25 09:10:33 +0800416 pthread_mutex_init(&g_lynq_network_sendto_mutex, NULL);
rjw7e50cd32022-01-18 18:30:37 +0800417 return 0;
418}
419
420int strUpper(char * str)
421{
422 int i=0;
423 while(1)
424 {
425 if(str[i]=='\0')
426 {
427 break;
428 }
429 if(str[i]>='a'&&str[i]<='z')
430 {
431 str[i]=str[i]-32;
432 }
433 i++;
434 }
435 return 0;
436}
437
rjw62a60152022-06-09 17:43:01 +0800438int copyCellInfoList(Parcel &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw7e50cd32022-01-18 18:30:37 +0800439{
440 int32_t v=0;
441 int64_t v6=0;
442 if(NULL == cellinfo)
443 {
444 LYERRLOG("*cellinfo error");
445 }
446
447 int nothing = 0;
rjw62a60152022-06-09 17:43:01 +0800448 int tmp_uint64 = 0;
rjw7e50cd32022-01-18 18:30:37 +0800449 p.readInt32(&v);
450 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
451 p.readInt32(&nothing);
452 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
453 // p.readInt32(&cellinfo->cellinfo.registered);
454 p.readInt32(&v);
455 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
456 p.readInt64(&v6);
457 // cellinfo->cellinfo.timeStamp = v6;
458 switch(cellinfoType) {
459 case RIL_CELL_INFO_TYPE_GSM: {
460 p.readInt32(&nothing);
461 p.readInt32(&nothing);
462 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800463 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800464 p.readInt32(&nothing);
465 p.readInt32(&nothing);
466 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800467 *cellinfo = (uint64_t)tmp_uint64;
rjw61974852022-05-17 16:30:32 +0800468 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800469 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800470 break;
471 }
472 case RIL_CELL_INFO_TYPE_WCDMA: {
473 p.readInt32(&nothing);
474 p.readInt32(&nothing);
475 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800476 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800477 p.readInt32(&nothing);
478 p.readInt32(&nothing);
479 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800480 *cellinfo = (uint64_t)tmp_uint64;
rjw4200a082022-05-17 17:58:35 +0800481 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800482 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800483 break;
484 }
485 case RIL_CELL_INFO_TYPE_CDMA: {
486 p.readInt32(&nothing);
487 p.readInt32(&nothing);
488 p.readInt32(&nothing);
489 p.readInt32(&nothing);
490 p.readInt32(&nothing);
491 p.readInt32(&nothing);
492 p.readInt32(&nothing);
493 p.readInt32(&nothing);
494 p.readInt32(&nothing);
495 p.readInt32(&nothing);
496 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800497 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800498 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800499 break;
500 }
501 case RIL_CELL_INFO_TYPE_LTE: {
502 p.readInt32(&nothing);
503 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800504 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800505 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800506 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800507 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800508 p.readInt32(&nothing);
509 p.readInt32(&nothing);
510 p.readInt32(&nothing);
511 p.readInt32(&nothing);
512 p.readInt32(&nothing);
513 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800514 *cellinfo = (uint64_t)tmp_uint64;
rjw7e50cd32022-01-18 18:30:37 +0800515 break;
516 }
517 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
518 p.readInt32(&nothing);
519 p.readInt32(&nothing);
520 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800521 p.readInt32(&tmp_uint64);
rjw7e50cd32022-01-18 18:30:37 +0800522 p.readInt32(&nothing);
523 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800524 *cellinfo = (uint64_t)tmp_uint64;
rjwa8011682022-05-31 17:31:28 +0800525 tac = &nothing;
526 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800527 break;
528 }
529 case RIL_CELL_INFO_TYPE_NR: {
530 p.readInt32(&nothing);
531 p.readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800532 p.readUint64(cellinfo);
rjw7e50cd32022-01-18 18:30:37 +0800533 p.readInt32(&nothing);
rjw61974852022-05-17 16:30:32 +0800534 p.readInt32(tac);
rjwa8011682022-05-31 17:31:28 +0800535 p.readInt32(earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800536 p.readInt32(&nothing);
537 p.readInt32(&nothing);
538 p.readInt32(&nothing);
539 p.readInt32(&nothing);
540 p.readInt32(&nothing);
541 p.readInt32(&nothing);
542 break;
543 }
544 }
rjw62a60152022-06-09 17:43:01 +0800545 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjwa8011682022-05-31 17:31:28 +0800546 LYINFLOG("tac in fUNC :%d",*tac);
547 LYINFLOG("earfcn in fUNC :%d",*earfcn);
rjw7e50cd32022-01-18 18:30:37 +0800548 return 0;
549}
550
551int lynq_network_deinit(void){
rjw22947c22022-03-15 09:21:29 +0800552 if (g_lynq_network_init_flag == 0)
553 {
554 LYERRLOG("deinit twice is not allowed");
555 return -1;
556 }
557 if (network_sock_fd > 0)
558 {
559 close(network_sock_fd);
560 }
561 g_lynq_network_init_flag = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800562 network_urc_status = 0;
q.huang47d4dfe2022-08-17 17:52:29 +0800563
564 deinit_network_timer_all();
565
rjw7e50cd32022-01-18 18:30:37 +0800566 return 0;
567}
568
569static char * lynqStrdupReadString(Parcel &p) {
570 size_t stringlen;
571 const char16_t *s16;
572
573 s16 = p.readString16Inplace(&stringlen);
574 return strndup16to8(s16, stringlen);
575}
576
577int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
578{
579 int ret = -1;
580 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
581 return ret;
582 int send_num = 0;
583 int recv_num = 0;
584 int num = 0;
585 lynq_client_t client_t;
rjw02a50422022-01-25 14:57:53 +0800586 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800587 memset(&client_t,0,sizeof(client_t));
588 client_t.request = RIL_REQUEST_OPERATOR;
589 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800590 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800591 memset(client_t.param,0,sizeof(client_t.param));
592
rjw9c301f82022-05-25 09:10:33 +0800593 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800594 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 +0800595 if(send_num<0)
596 {
597 LYERRLOG("sendto error:");
598 return ret;
599 }
600
601 //get data
rjw7e50cd32022-01-18 18:30:37 +0800602 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800603 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800604 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
605 if (ret != 0)
606 {
607 return ret;
608 }
609
rjw7e50cd32022-01-18 18:30:37 +0800610 if(p.dataAvail() > 0)
611 {
612 p.readInt32(&response.resp_type);
613 p.readInt32(&response.request);
614 p.readInt32(&response.slot_id);
615 p.readInt32(&response.error);
616 if(response.error != 0)
617 {
618 LYERRLOG("response return error");
619 return response.error;
620 }
621 p.readInt32(&num);
622 if(num == 0)
623 {
624 LYERRLOG("no paramters");
625 }else{
626 for(int i = 0; i<num;i++)
627 {
628 resp[i] = lynqStrdupReadString(p);
629 }
630 if(NULL != resp[0])
631 {
rjw02a50422022-01-25 14:57:53 +0800632 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800633 }
634 if(NULL != resp[1])
635 {
rjw02a50422022-01-25 14:57:53 +0800636 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800637 }
638 if(NULL != resp[2])
639 {
rjw02a50422022-01-25 14:57:53 +0800640 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800641 }
642 }
643 }
644 return response.error;
645}
646
647int lynq_query_network_selection_mode(int *netselMode)
648{
649 int ret = -1;
650 if(NULL == netselMode)
651 return ret;
652 int send_num = 0;
653 int recv_num = 0;
654 int readnum = 0;
655 lynq_client_t client_t;
rjw7e50cd32022-01-18 18:30:37 +0800656 memset(&client_t,0,sizeof(client_t));
657 client_t.request = RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE;
658 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800659 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800660
661 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800662 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800663 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 +0800664 if(send_num<0)
665 {
666 LYERRLOG("sendto error:");
667 return -1;
668 }
669
670 //get data
rjw7e50cd32022-01-18 18:30:37 +0800671 Parcel p;
rjwf00f5272022-07-12 16:42:02 +0800672 ret = get_response(p,600);
rjw46769c92022-07-04 21:17:25 +0800673 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
674 if (ret != 0)
675 {
676 return ret;
677 }
rjw7e50cd32022-01-18 18:30:37 +0800678 if(p.dataAvail() > 0)
679 {
680 p.readInt32(&response.resp_type);
681 p.readInt32(&response.request);
682 p.readInt32(&response.slot_id);
683 p.readInt32(&response.error);
684 if(response.error != 0)
685 {
686 LYERRLOG("response return error");
687 return response.error;
688 }
689 p.readInt32(&readnum);
690 p.readInt32(netselMode);
691 }
692 return response.error;
693}
694
695int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
696{
697 int ret = -1;
rjw78d04502022-02-24 13:37:11 +0800698 if(NULL == mode)
rjw7e50cd32022-01-18 18:30:37 +0800699 return ret;
rjw78d04502022-02-24 13:37:11 +0800700 if(strlen(mode) == 0)
701 {
702 return ret;
703 }
rjw7e50cd32022-01-18 18:30:37 +0800704 int send_num = 0;
705 lynq_client_t client_t;
706 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800707 memset(&client_t,0,sizeof(client_t));
708 if(!strcmp(mode,"Auto"))
709 {
710 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC;
711 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800712 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800713 memset(client_t.param,0,sizeof(client_t.param));
714 }else if(!strcmp(mode,"Manual")){
rjw78d04502022-02-24 13:37:11 +0800715 if(mccmnc == NULL)
716 {
717 LYERRLOG("mccmnc is NULL!!!");
718 return ret;
719 }
720 if(strlen(mccmnc) == 0)
721 {
722 LYERRLOG("mccmnc strlen is 0!!!");
723 return ret;
724 }
rjw7e50cd32022-01-18 18:30:37 +0800725 client_t.request = RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL;
726 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +0800727 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800728 sprintf(client_t.param,"%s",mccmnc);
rjwcdd83ae2022-01-22 14:10:42 +0800729 }else{
730 LYERRLOG("request error");
731 return ret;
rjw7e50cd32022-01-18 18:30:37 +0800732 }
733
rjw9c301f82022-05-25 09:10:33 +0800734 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800735 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 +0800736 if(send_num<0)
737 {
738 LYERRLOG("sendto error:");
739 return ret;
740 }
741
rjw7e50cd32022-01-18 18:30:37 +0800742 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800743 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800744 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
745 if (ret != 0)
746 {
747 return ret;
748 }
rjw7e50cd32022-01-18 18:30:37 +0800749 if(p.dataAvail() > 0)
750 {
751 p.readInt32(&response.resp_type);
752 p.readInt32(&response.request);
753 p.readInt32(&response.slot_id);
754 p.readInt32(&response.error);
755 }
756 return response.error;
757}
758
759int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
760{
761 int ret = -1;
762 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
763 return ret;
764 int send_num = 0;
765 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800766 char *resp[128];
767 lynq_client_t client_t;
768 memset(&client_t,0,sizeof(client_t));
769 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_NETWORKS;
770 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800771 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800772 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800773 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800774 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 +0800775 if(send_num<0)
776 {
777 LYERRLOG("sendto error:");
778 return ret;
779 }
780
781 //get data
rjw7e50cd32022-01-18 18:30:37 +0800782 Parcel p;
rjw46769c92022-07-04 21:17:25 +0800783 ret = get_response(p,600);
784 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
785 if (ret != 0)
786 {
787 return ret;
788 }
rjw7e50cd32022-01-18 18:30:37 +0800789 if(p.dataAvail() > 0)
790 {
791 p.readInt32(&response.resp_type);
792 p.readInt32(&response.request);
793 p.readInt32(&response.slot_id);
794 p.readInt32(&response.error);
795 if(response.error != 0)
796 {
797 LYERRLOG("response return error");
798 return response.error;
799 }
800 int num =p.readInt32();
801 if(num == 0)
802 {
803 LYERRLOG("no paramters");
804 }else{
805 for(int i = 0; i<num;i++)
806 {
807 resp[i] = lynqStrdupReadString(p);
808 }
809 if(NULL != resp[0])
810 {
rjw02a50422022-01-25 14:57:53 +0800811 strcpy(OperatorFN,resp[0]);
rjw7e50cd32022-01-18 18:30:37 +0800812 }
813 if(NULL != resp[1])
814 {
rjw02a50422022-01-25 14:57:53 +0800815 strcpy(OperatorSH,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800816 }
817 if(NULL != resp[2])
818 {
rjw02a50422022-01-25 14:57:53 +0800819 strcpy(MccMnc,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800820 }
821 if(NULL != resp[3])
822 {
rjw02a50422022-01-25 14:57:53 +0800823 strcpy(NetStatus,resp[2]);
rjw7e50cd32022-01-18 18:30:37 +0800824 }
825 }
826 }
827 return response.error;
828}
829
rjw4544e132022-04-01 15:00:26 +0800830int 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 +0800831{
832 int ret = -1;
rjwd98d5872022-04-09 13:50:58 +0800833 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
rjw7e50cd32022-01-18 18:30:37 +0800834 return ret;
835 int send_num = 0;
836 int recv_num = 0;
837 int num = 0;
838 char str[LYNQ_TYPE_BUF];
rjwcdd83ae2022-01-22 14:10:42 +0800839 char *resp[LYNQ_RESP_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800840 lynq_client_t client_t;
841 memset(&client_t,0,sizeof(client_t));
842 if(strlen(type)>LYNQ_TYPE_BUF)
843 {
844 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
845 }
846 memcpy(str,type,strlen(type)+1);
847 strUpper(str);
848 if(!strcmp(str,"VOICE"))
849 {
q.huang47d4dfe2022-08-17 17:52:29 +0800850 if(lynq_get_registration_state_to_buf_voice(regState,netType,netRejected)==0)
851 {
852 return 0;
853 }
rjw7e50cd32022-01-18 18:30:37 +0800854 client_t.request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
855 }else if(!strcmp(str,"DATA")){
q.huang47d4dfe2022-08-17 17:52:29 +0800856 if(lynq_get_registration_state_to_buf_data(regState,LAC,CID,netType)==0)
857 {
858 return 0;
859 }
rjw7e50cd32022-01-18 18:30:37 +0800860 client_t.request = RIL_REQUEST_DATA_REGISTRATION_STATE;
861 }else if(!strcmp(str,"IMS")){
q.huang47d4dfe2022-08-17 17:52:29 +0800862 if(lynq_get_registration_state_to_buf_ims(imsRegState,radioTechFam)==0)
863 {
864 return 0;
865 }
rjw7e50cd32022-01-18 18:30:37 +0800866 client_t.request = RIL_REQUEST_IMS_REGISTRATION_STATE;
867 }else{
868 LYERRLOG("request error");
869 return ret;
870 }
871 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800872 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800873 memset(client_t.param,0,sizeof(client_t.param));
874
rjw9c301f82022-05-25 09:10:33 +0800875 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800876 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 +0800877 if(send_num<0)
878 {
879 LYERRLOG("sendto error:");
880 return ret;
881 }
882
883 //get data
rjw7e50cd32022-01-18 18:30:37 +0800884 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800885 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800886 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
887 if (ret != 0)
888 {
889 return ret;
890 }
rjw7e50cd32022-01-18 18:30:37 +0800891 if(p.dataAvail() > 0)
892 {
893 p.readInt32(&response.resp_type);
894 p.readInt32(&response.request);
895 p.readInt32(&response.slot_id);
896 p.readInt32(&response.error);
897 if(response.error != 0)
898 {
899 LYERRLOG("response return error");
900 return response.error;
901 }
902 if(!strcmp(str,"VOICE"))
903 {
904 p.readInt32(&num);
905 if(num == 15)
906 {
907 *regState = atoi(lynqStrdupReadString(p));
908 lynqStrdupReadString(p);
909 lynqStrdupReadString(p);
910 *netType = atoi(lynqStrdupReadString(p));
rjw4544e132022-04-01 15:00:26 +0800911 lynqStrdupReadString(p);
912 lynqStrdupReadString(p);
913 lynqStrdupReadString(p);
914 lynqStrdupReadString(p);
915 lynqStrdupReadString(p);
916 lynqStrdupReadString(p);
917 lynqStrdupReadString(p);
918 lynqStrdupReadString(p);
919 lynqStrdupReadString(p);
920 lynqStrdupReadString(p);
q.huang47d4dfe2022-08-17 17:52:29 +0800921 *netRejected = atoi(lynqStrdupReadString(p));
922 lynq_set_registration_state_to_buf_voice(*regState,*netType,*netRejected);
rjw7e50cd32022-01-18 18:30:37 +0800923 }
924 }else if(!strcmp(str,"DATA")){
925 p.readInt32(&num);
926 if(num == 11)
927 {
928 *regState = atoi(lynqStrdupReadString(p));
rjwcdd83ae2022-01-22 14:10:42 +0800929 resp[0] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800930 strcpy(LAC,resp[0]);
rjwcdd83ae2022-01-22 14:10:42 +0800931
932 resp[1] = lynqStrdupReadString(p);
rjw02a50422022-01-25 14:57:53 +0800933 strcpy(CID,resp[1]);
rjw7e50cd32022-01-18 18:30:37 +0800934 *netType = atoi(lynqStrdupReadString(p));
q.huang47d4dfe2022-08-17 17:52:29 +0800935 lynq_set_registration_state_to_buf_data(*regState,LAC,CID,*netType);
rjw7e50cd32022-01-18 18:30:37 +0800936 }
937
938 }else if(!strcmp(str,"IMS")){
939 p.readInt32(&num);
940 if(num == 2)
941 {
942 p.readInt32(imsRegState);
943 p.readInt32(radioTechFam);
q.huang47d4dfe2022-08-17 17:52:29 +0800944 lynq_set_registration_state_to_buf_ims(*imsRegState,*radioTechFam);
rjw7e50cd32022-01-18 18:30:37 +0800945 }
946 }else{
947 LYERRLOG("request error");
948 return ret;
949 }
950 }
951 return response.error;
952}
953
954int lynq_query_prefferred_networktype(int *preNetType)
955{
956 int ret = -1;
957 int send_num = 0;
958 int recv_num = 0;
959 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +0800960 lynq_client_t client_t;
961 memset(&client_t,0,sizeof(client_t));
962 client_t.request = RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE;
963 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +0800964 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +0800965 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +0800966 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +0800967 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 +0800968 if(send_num<0)
969 {
970 LYERRLOG("sendto error:");
971 return ret;
972 }
973
974 //get data
rjw7e50cd32022-01-18 18:30:37 +0800975 Parcel p;
rjwa59bf312022-07-05 11:50:31 +0800976 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +0800977 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
978 if (ret != 0)
979 {
980 return ret;
981 }
rjw7e50cd32022-01-18 18:30:37 +0800982 if(p.dataAvail() > 0)
983 {
984 p.readInt32(&response.resp_type);
985 p.readInt32(&response.request);
986 p.readInt32(&response.slot_id);
987 p.readInt32(&response.error);
988 if(response.error != 0)
989 {
990 LYERRLOG("response return error");
991 return response.error;
992 }
993 p.readInt32(&num);
994 p.readInt32(preNetType);
995 }
996 return response.error;
997}
998
999int lynq_set_prefferred_networktype(const int preffertype)
1000{
1001 int ret = -1;
1002 if(preffertype < 0||preffertype >33)
1003 return ret;
1004 int send_num = 0;
1005 lynq_client_t client_t;
1006 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001007 memset(&client_t,0,sizeof(client_t));
1008 client_t.request = RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE;
1009 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001010 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001011 sprintf(client_t.param,"%d",preffertype);
rjw9c301f82022-05-25 09:10:33 +08001012 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001013 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 +08001014 if(send_num<0)
1015 {
1016 LYERRLOG("sendto error:");
1017 return ret;
1018 }
1019
rjw46769c92022-07-04 21:17:25 +08001020 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001021 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001022 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001023 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001024 {
rjw46769c92022-07-04 21:17:25 +08001025 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001026 }
1027
rjw7e50cd32022-01-18 18:30:37 +08001028 if(p.dataAvail() > 0)
1029 {
1030 p.readInt32(&response.resp_type);
1031 p.readInt32(&response.request);
1032 p.readInt32(&response.slot_id);
1033 p.readInt32(&response.error);
1034 }
1035
1036 return response.error;
1037
1038}
1039
rjw62a60152022-06-09 17:43:01 +08001040int 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 +08001041{
1042 int ret = -1;
1043 if(NULL == realNum)
1044 return ret;
1045 int send_num = 0;
1046 int recv_num = 0;
1047 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001048 lynq_client_t client_t;
1049 memset(&client_t,0,sizeof(client_t));
1050 client_t.request = RIL_REQUEST_GET_CELL_INFO_LIST;
1051 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001052 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001053 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001054 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001055 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001056 if(send_num<0)
1057 {
1058 LYERRLOG("sendto error:");
1059 return ret;
1060 }
1061
1062 //get data
rjw7e50cd32022-01-18 18:30:37 +08001063 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001064 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001065 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1066 if (ret != 0)
1067 {
1068 return ret;
1069 }
rjw7e50cd32022-01-18 18:30:37 +08001070 if(p.dataAvail() > 0)
1071 {
1072 p.readInt32(&response.resp_type);
1073 p.readInt32(&response.request);
1074 p.readInt32(&response.slot_id);
1075 p.readInt32(&response.error);
1076 if(response.error != 0)
1077 {
1078 LYERRLOG("response return error");
1079 return response.error;
1080 }
1081 p.readInt32(&num);
1082 LYINFLOG("cell info num:%d",num);
1083 *realNum = num;
1084 for(int i = 0;i<num;i++)
1085 {
rjwa8011682022-05-31 17:31:28 +08001086 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw7e50cd32022-01-18 18:30:37 +08001087 }
1088 }
1089 return response.error;
1090
1091}
1092
1093int lynq_set_unsol_cell_info_listrate(const int rate)
1094{
1095 int ret = -1;
1096 int send_num = 0;
1097 int recv_num = 0;
rjw7e50cd32022-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_UNSOL_CELL_INFO_LIST_RATE;
1101 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001102 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001103 sprintf(client_t.param,"%d",rate);
rjw9c301f82022-05-25 09:10:33 +08001104 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-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);
rjw7e50cd32022-01-18 18:30:37 +08001106 if(send_num<0)
1107 {
1108 LYERRLOG("sendto error:");
1109 return ret;
1110 }
1111
rjw9c301f82022-05-25 09:10:33 +08001112
rjw46769c92022-07-04 21:17:25 +08001113 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001114 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001115 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001116 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001117 {
rjw46769c92022-07-04 21:17:25 +08001118 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001119 }
1120
rjw7e50cd32022-01-18 18:30:37 +08001121 if(p.dataAvail() > 0)
1122 {
1123 p.readInt32(&response.resp_type);
1124 p.readInt32(&response.request);
1125 p.readInt32(&response.slot_id);
1126 p.readInt32(&response.error);
1127 }
1128
1129 return response.error;
1130}
1131
1132int lynq_set_band_mode(const int bandmode)
1133{
1134 int ret = -1;
1135 int send_num = 0;
1136 int recv_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001137 lynq_client_t client_t;
1138 memset(&client_t,0,sizeof(client_t));
1139 client_t.request = RIL_REQUEST_SET_BAND_MODE;
1140 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001141 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001142 sprintf(client_t.param,"%d",bandmode);
rjw9c301f82022-05-25 09:10:33 +08001143 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001144 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 +08001145 if(send_num<0)
1146 {
1147 LYERRLOG("sendto error:");
1148 return ret;
1149 }
1150
rjw46769c92022-07-04 21:17:25 +08001151 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001152 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001153 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001154 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001155 {
rjw46769c92022-07-04 21:17:25 +08001156 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001157 }
1158
rjw7e50cd32022-01-18 18:30:37 +08001159 if(p.dataAvail() > 0)
1160 {
1161 p.readInt32(&response.resp_type);
1162 p.readInt32(&response.request);
1163 p.readInt32(&response.slot_id);
1164 p.readInt32(&response.error);
1165 }
1166
1167 return response.error;
1168}
1169
1170int lynq_query_available_bandmode(int availBanMode[])
1171{
1172 int ret = -1;
1173 if(NULL == availBanMode)
1174 return ret;
1175 int send_num = 0;
1176 int recv_num = 0;
1177 int num = 0;
1178 int res = 0;
rjw7e50cd32022-01-18 18:30:37 +08001179 lynq_client_t client_t;
1180 memset(&client_t,0,sizeof(client_t));
1181 client_t.request = RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE;
1182 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001183 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001184 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001185 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001186 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
rjw7e50cd32022-01-18 18:30:37 +08001187 if(send_num<0)
1188 {
1189 LYERRLOG("sendto error:");
1190 return ret;
1191 }
1192
1193 //get data
rjw46769c92022-07-04 21:17:25 +08001194 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001195 ret = get_response(p,30);
rjw9c301f82022-05-25 09:10:33 +08001196 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
rjw46769c92022-07-04 21:17:25 +08001197 if (ret != 0)
rjw7e50cd32022-01-18 18:30:37 +08001198 {
rjw46769c92022-07-04 21:17:25 +08001199 return ret;
rjw7e50cd32022-01-18 18:30:37 +08001200 }
rjw78d04502022-02-24 13:37:11 +08001201 for(int i = 0;i<10;i++)
rjw7e50cd32022-01-18 18:30:37 +08001202 {
1203 availBanMode[i]=0;
1204 }
rjw7e50cd32022-01-18 18:30:37 +08001205 if(p.dataAvail() > 0)
1206 {
1207 p.readInt32(&response.resp_type);
1208 p.readInt32(&response.request);
1209 p.readInt32(&response.slot_id);
1210 p.readInt32(&response.error);
1211 if(response.error != 0)
1212 {
1213 LYERRLOG("response return error");
1214 return response.error;
1215 }
1216 p.readInt32(&num);
1217 LYINFLOG("num = %d",num);
1218 availBanMode[0] = num;
1219 for(int i=1 ;i<=num;i++)
1220 {
1221 p.readInt32(&res);
1222 availBanMode[i]=res;
1223 }
1224 }
1225
1226 return response.error;
1227}
1228
1229int lynq_radio_on(const int data)
1230{
1231 int ret = -1;
1232 if(data < 0)
1233 return ret;
1234 int send_num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001235 int recv_num = 0;
1236 lynq_client_t client_t;
1237 memset(&client_t,0,sizeof(client_t));
1238 client_t.request = RIL_REQUEST_RADIO_POWER;
1239 client_t.paramLen = 1;
rjwbc8a05f2022-03-02 15:23:11 +08001240 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001241 sprintf(client_t.param,"%d",data);
rjw9c301f82022-05-25 09:10:33 +08001242 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001243 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 +08001244 if(send_num<0)
1245 {
1246 LYERRLOG("sendto error:");
1247 return ret;
1248 }
1249
rjw7e50cd32022-01-18 18:30:37 +08001250 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001251 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001252 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1253 if (ret != 0)
1254 {
1255 return ret;
1256 }
rjw7e50cd32022-01-18 18:30:37 +08001257 if(p.dataAvail() > 0)
1258 {
1259 p.readInt32(&response.resp_type);
1260 p.readInt32(&response.request);
1261 p.readInt32(&response.slot_id);
1262 p.readInt32(&response.error);
1263 }
1264
1265 return response.error;
1266}
1267
1268int lynq_query_radio_tech(int* radioTech)
1269{
1270 int ret = -1;
1271 if(NULL == radioTech)
1272 return ret;
1273 int send_num = 0;
1274 int recv_num = 0;
1275 int num = 0;
rjw7e50cd32022-01-18 18:30:37 +08001276 lynq_client_t client_t;
1277 memset(&client_t,0,sizeof(client_t));
1278 client_t.request = RIL_REQUEST_VOICE_RADIO_TECH;
1279 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001280 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001281 memset(client_t.param,0,sizeof(client_t.param));
rjw9c301f82022-05-25 09:10:33 +08001282 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001283 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 +08001284 if(send_num<0)
1285 {
1286 LYERRLOG("sendto error:");
1287 return ret;
1288 }
1289
rjw7e50cd32022-01-18 18:30:37 +08001290 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001291 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001292 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1293 if (ret != 0)
1294 {
1295 return ret;
1296 }
rjw7e50cd32022-01-18 18:30:37 +08001297 if(p.dataAvail() > 0)
1298 {
1299 p.readInt32(&response.resp_type);
1300 p.readInt32(&response.request);
1301 p.readInt32(&response.slot_id);
1302 p.readInt32(&response.error);
1303 if(response.error != 0)
1304 {
1305 LYERRLOG("response return error");
1306 return response.error;
1307 }
1308 p.readInt32(&num);
1309 p.readInt32(radioTech);
1310 }
1311 return response.error;
1312}
1313
1314int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
1315{
1316 int ret = -1;
1317 if(NULL == solSigStren)
1318 return ret;
1319 int send_num = 0;
1320 int recv_num = 0;
1321 int sum = 0;
1322 int LTE_signalstrength = 0;
1323 int WCDMA_signalstrength = 0;
1324 int none = 0;
rjw7e50cd32022-01-18 18:30:37 +08001325 lynq_client_t client_t;
1326 memset(&client_t,0,sizeof(client_t));
1327 client_t.request = RIL_REQUEST_SIGNAL_STRENGTH;
1328 client_t.paramLen = 0;
rjwbc8a05f2022-03-02 15:23:11 +08001329 client_t.uToken = network_Global_uToken;
rjw7e50cd32022-01-18 18:30:37 +08001330 memset(client_t.param,0,sizeof(client_t.param));
1331
rjw9c301f82022-05-25 09:10:33 +08001332 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjwbc8a05f2022-03-02 15:23:11 +08001333 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 +08001334 if(send_num<0)
1335 {
1336 LYERRLOG("sendto error:");
1337 return ret;
1338 }
1339
1340 //get data
rjw7e50cd32022-01-18 18:30:37 +08001341 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001342 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001343 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1344 if (ret != 0)
1345 {
1346 return ret;
1347 }
rjw7e50cd32022-01-18 18:30:37 +08001348 if(p.dataAvail() > 0)
1349 {
1350 p.readInt32(&response.resp_type);
1351 p.readInt32(&response.request);
1352 p.readInt32(&response.slot_id);
1353 p.readInt32(&response.error);
1354 if(response.error != 0)
1355 {
1356 LYERRLOG("response return error");
1357 return response.error;
1358 }
1359
1360 p.readInt32(&solSigStren->rssi);
1361 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
1362 {
1363 solSigStren->gw_sig_valid = 1;
1364 }else{
1365 solSigStren->gw_sig_valid = 0;
1366 }
1367
1368 p.readInt32(&none);
1369 p.readInt32(&none);
1370 p.readInt32(&none);
1371 p.readInt32(&none);
1372 p.readInt32(&none);
1373 p.readInt32(&none);
1374 p.readInt32(&none);
1375 p.readInt32(&LTE_signalstrength);
1376 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1377 p.readInt32(&solSigStren->rsrp);
1378 p.readInt32(&solSigStren->rsrq);
1379 p.readInt32(&solSigStren->rssnr);
1380 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1381 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1382 {
1383 solSigStren->lte_sig_valid = 1;
1384 }else{
1385 solSigStren->lte_sig_valid = 0;
1386 }
1387
1388 p.readInt32(&none);
1389 p.readInt32(&none);
1390 p.readInt32(&none);
1391 p.readInt32(&none);
1392 p.readInt32(&none);
1393 p.readInt32(&WCDMA_signalstrength);
1394 p.readInt32(&none);
1395 p.readInt32(&solSigStren->rscp);
1396 p.readInt32(&solSigStren->ecno);
1397 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1398 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1399 {
rjwcdd83ae2022-01-22 14:10:42 +08001400 solSigStren->wcdma_sig_valid = 1;
rjw7e50cd32022-01-18 18:30:37 +08001401 }else{
rjwcdd83ae2022-01-22 14:10:42 +08001402 solSigStren->wcdma_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +08001403 }
rjwcdd83ae2022-01-22 14:10:42 +08001404 /*bug fix*/
rjw7e50cd32022-01-18 18:30:37 +08001405 p.readInt32(&solSigStren->ssRsrp);
1406 p.readInt32(&solSigStren->ssRsrq);
1407 p.readInt32(&solSigStren->ssSinr);
1408 p.readInt32(&solSigStren->csiRsrp);
1409 p.readInt32(&solSigStren->csiRsrq);
1410 p.readInt32(&solSigStren->csiSinr);
1411 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1412 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1413 if(sum != 0)
1414 {
1415 solSigStren->nr_sig_valid = 1;
1416 }else{
1417 LYERRLOG("None of NR signal info");
1418 }
1419 }
1420 return response.error;
1421}
rjwbc8a05f2022-03-02 15:23:11 +08001422
rjw4a5a78d2022-03-10 11:04:24 +08001423int lynq_set_ims(const int ims_mode)
1424{
1425 int ret = -1;
1426 if (ims_mode < 0 || ims_mode > 1)
1427 {
1428 LYERRLOG("incoming ims_mode error");
1429 return ret;
1430 }
1431 int send_num = 0;
rjw4a5a78d2022-03-10 11:04:24 +08001432 int recv_num = 0;
1433 lynq_client_t client_t;
1434
1435 memset(&client_t,0,sizeof(client_t));
1436 client_t.request = RIL_REQUEST_SET_IMS_ENABLE;
1437 client_t.paramLen = 1;
1438 client_t.uToken = network_Global_uToken;
1439 sprintf(client_t.param,"%d",ims_mode);
rjw9c301f82022-05-25 09:10:33 +08001440 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
rjw4a5a78d2022-03-10 11:04:24 +08001441 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1442 if (send_num<0)
1443 {
1444 LYERRLOG("sendto error:");
1445 return ret;
1446 }
1447
rjw4a5a78d2022-03-10 11:04:24 +08001448 Parcel p;
rjwa59bf312022-07-05 11:50:31 +08001449 ret = get_response(p,30);
rjw46769c92022-07-04 21:17:25 +08001450 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1451 if (ret != 0)
1452 {
1453 return ret;
1454 }
rjw4a5a78d2022-03-10 11:04:24 +08001455 if (p.dataAvail() > 0)
1456 {
1457 p.readInt32(&response.resp_type);
1458 p.readInt32(&response.request);
1459 p.readInt32(&response.slot_id);
1460 p.readInt32(&response.error);
1461 }
1462
1463 return response.error;
1464}
1465
1466
rjwbc8a05f2022-03-02 15:23:11 +08001467/*Used to wait for an update signal*/
1468int lynq_wait_signalchanges(int *handle)
1469{
1470 LYDBGLOG("start wait signalchanges info");
1471 if(NULL == handle)
1472 {
1473 LYERRLOG("illegal input");
1474 return -1;
1475 }
1476 wait_signal_changes();
1477 LYDBGLOG("get signalchanges");
1478 *handle = network_wait_urc_id;
1479 return 0;
1480}
1481/*Used to get urc info*/
1482int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1483{
1484 LYDBGLOG("start get urc info");
1485 if(handle != 1002&&handle != 1009)
1486 {
1487 LYINFLOG("invalid handle!!!");
1488 return -1;
1489 }
1490 if(NULL == solSigStren && NULL == slot_id)
1491 {
1492 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1493 return -1;
1494 }
1495 switch(handle)
1496 {
1497 case 1002: //RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
1498 {
1499 LYDBGLOG("get state update to VOICE");
1500 *slot_id = network_urc_slot_id;
1501 LYINFLOG("slot_id = %d",network_urc_slot_id);
rjw25d01752022-08-04 09:42:00 +08001502 break;
rjwbc8a05f2022-03-02 15:23:11 +08001503 }
1504 case 1009: //RIL_UNSOL_SIGNAL_STRENGTH
1505 {
1506 LYDBGLOG("get state update to signal info");
1507 solSigStren->gw_sig_valid = network_urc_solSigStren.gw_sig_valid;
1508 solSigStren->rssi = network_urc_solSigStren.rssi;
1509 solSigStren->wcdma_sig_valid = network_urc_solSigStren.wcdma_sig_valid;
1510 solSigStren->rscp = network_urc_solSigStren.rscp;
1511 solSigStren->ecno = network_urc_solSigStren.ecno;
1512 solSigStren->lte_sig_valid = network_urc_solSigStren.lte_sig_valid;
1513 solSigStren->rsrp = network_urc_solSigStren.rsrp;
1514 solSigStren->rsrq = network_urc_solSigStren.rsrq;
1515 solSigStren->rssnr = network_urc_solSigStren.rssnr;
1516 solSigStren->nr_sig_valid = network_urc_solSigStren.nr_sig_valid;
1517 solSigStren->ssRsrp = network_urc_solSigStren.ssRsrp;
1518 solSigStren->ssRsrq = network_urc_solSigStren.ssRsrq;
1519 solSigStren->ssSinr = network_urc_solSigStren.ssSinr;
1520 solSigStren->csiRsrp = network_urc_solSigStren.csiRsrp;
1521 solSigStren->csiRsrq = network_urc_solSigStren.csiRsrq;
1522 solSigStren->csiSinr = network_urc_solSigStren.csiSinr;
rjw25d01752022-08-04 09:42:00 +08001523 break;
rjwbc8a05f2022-03-02 15:23:11 +08001524 }
1525 }
1526 return 0;
rjw4200a082022-05-17 17:58:35 +08001527}
lh3a26dd52022-07-01 04:44:57 -07001528
1529/**@brief parse at response,return error code,and the response
1530* @param response [IN] <response>:original at response,This parameter must be a character array.
1531
1532* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1533* field:
1534* eg:
1535* "+cnum: 123456\n+cnum: 456"
1536* value:12345;456;
1537* @param value_len [IN] <value_len>: The value length.
1538
1539* @return:AT error code
1540*/
1541static int parse_at_result(char response[],char value[],int value_len)
1542{
1543 if(response == NULL || value == NULL)
1544 {
1545 LYERRLOG("parameter invalid");
1546 return -1;
1547 }
1548 if(strstr(response,"ERROR"))
1549 {
1550 int i;
1551 for(i = 0;i < strlen(response);i++)
1552 {
1553 if(response[i]==':')
1554 {
1555 break;
1556 }
1557 }
1558 if(i < strlen(response))
1559 {
1560 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1561 return atoi(response+i+1);
1562 }
1563 else
1564 {
1565 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1566 return 100; //unknown
1567 }
1568 }
1569 else if(strstr(response,"OK"))
1570 {
1571 /** parse the at response value
1572 * eg:
1573 * --> at+cnum
1574 * <-- +CNUM:"1243452"
1575 * need parse the "1243452" to <value>
1576 *@ To-Do
1577 */
1578 int count;
1579 int resp_addr[32] = {0};
1580 char temp_buf[1024] = {0};
1581 char *dest;
1582 dest = NULL;
1583 count = 0;
1584 int res_len = strlen(response);
1585 LYINFLOG("res_len:%d",res_len);
1586 for(int i = 0; i < res_len; i++)
1587 {
1588 if(response[i]==':')
1589 {
1590 resp_addr[count] = i;
1591 count++;
1592 }
1593 if(response[i] == '\n')
1594 {
1595 response[i] = '\0';
1596 }
1597 }
1598 LYINFLOG("count:%d",count);
1599 if(count > 0)
1600 {
1601 for(int i = 0; i < count; i++)
1602 {
1603 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1604 {
1605 LYINFLOG("2 will be out of range\n");
1606 break;
1607 }
1608 if(strlen(temp_buf) >= 1023)
1609 {
1610 LYINFLOG("1 will be out of range\n");
1611 break;
1612 }
1613 strcat(temp_buf,response+resp_addr[i]+2);
1614
1615 if(strlen(temp_buf) >= 1023)
1616 {
1617 LYINFLOG("1 will be out of range\n");
1618 break;
1619 }
1620 strcat(temp_buf,";");
1621 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1622 }
1623 LYINFLOG("parse_result:%s\n",temp_buf);
1624 if(strlen(temp_buf) > value_len)
1625 {
1626 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1627 memcpy(value,temp_buf,value_len);
1628 }
1629 else
1630 {
1631 memcpy(value,temp_buf,strlen(temp_buf));
1632 }
1633 }
1634 return 0;
1635 }
1636 else
1637 {
1638 LYINFLOG("%s this response invalid\n",response);
1639 return -1;
1640 }
1641}
1642#ifdef MODEM_GEN97
1643
1644int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1645{
1646 int ret;
1647 int send_num;
1648 int recv_len;
1649 Parcel p;
1650 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1651 lynq_client_t client_t;
1652 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1653
1654 ret = -1;
1655 send_num = -1;
1656 recv_len = -1;
1657
1658 LYINFLOG("lynq_oos_recover_timer_interval start");
1659 if((mode < 0) || (mode >1) || (NULL == interval) || (NULL == result))
1660 {
1661 LYERRLOG("lynq_oos_recover_timer_interval paramter fail!!!");
1662 return ret;
1663 }
1664
1665 memset(&client_t,0,sizeof(client_t));
1666 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL
1667 client_t.paramLen = 1;
1668 client_t.uToken = network_Global_uToken;
1669 if(mode == 0)
1670 {
1671 sprintf(client_t.param,"AT+ERSCFG=%s",interval);
1672 }
1673 else
1674 {
1675 sprintf(client_t.param,"AT+ERSCFG?",interval);
1676 }
1677 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1678 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1679 if(send_num < 0)
1680 {
1681 LYERRLOG("sendto error:%s",strerror(errno));
1682 return ret;
1683 }
1684 ret = get_response(p,-1); //use defualt time (5s)
1685 if(ret != 0)
1686 {
1687 return ret;
1688 }
1689 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1690 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1691 if(0 == response.error)
1692 {
1693 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1694 LYINFLOG("get recover timer interval");
1695 p.readInt32(&recv_len);
1696 if(recv_len == -1)
1697 {
1698 LYINFLOG("no responset");
1699 return -1;
1700 }
1701 else
1702 {
1703 LYINFLOG("recv_len:%d",recv_len);
1704 p.read(response_interval,recv_len);
1705 }
1706 LYINFLOG("response_interval:%s",response_interval);
1707 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1708 if(mode == 1)
1709 {
1710 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1711 {
1712 memcpy(result,res_data,strlen(res_data));
1713 }
1714 }
1715 LYINFLOG("ret:%d",ret);
1716 return ret;
1717 }
1718 else
1719 {
1720 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1721 return response.error;
1722 }
1723}
1724
1725int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1726{
1727 int ret;
1728 int send_num;
1729 int recv_len;
1730 Parcel p;
1731 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1732 lynq_client_t client_t;
1733 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1734
1735 ret = -1;
1736 send_num = -1;
1737 recv_len = -1;
1738
1739 LYINFLOG("lynq_oos_deep_sleep_recover_timer_interval start");
1740 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
1741 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1742 {
1743 LYERRLOG("lynq_oos_deep_sleep_recover_timer_interval paramter fail!!!");
1744 return ret;
1745 }
1746
1747 memset(&client_t,0,sizeof(client_t));
1748 client_t.request = RIL_REQUEST_OEM_HOOK_RAW; //LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL
1749 client_t.paramLen = 1;
1750 client_t.uToken = network_Global_uToken;
1751 sprintf(client_t.param,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
1752 pthread_mutex_lock(&g_lynq_network_sendto_mutex);
1753 send_num = sendto(network_sock_fd,&client_t,sizeof(client_t),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv);
1754 if(send_num<0)
1755 {
1756 LYERRLOG("sendto error:%s",strerror(errno));
1757 return ret;
1758 }
1759 ret = get_response(p,-1); //use defualt time (5s)
1760 if(ret != 0)
1761 {
1762 return ret;
1763 }
1764 JumpHeader(p, &response.resp_type, &response.request, &response.slot_id, &response.error);
1765 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",response.resp_type, response.request, response.slot_id, response.error);
1766 if(0 == response.error)
1767 {
1768 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1769 LYINFLOG("set deep sleep recover timer interval response");
1770 p.readInt32(&recv_len);
1771 if(recv_len == -1)
1772 {
1773 LYINFLOG("no responset");
1774 return -1;
1775 }
1776 else
1777 {
1778 LYINFLOG("recv_len:%d",recv_len);
1779 p.read(response_interval,recv_len);
1780 }
1781 LYINFLOG("response_interval:%s",response_interval);
1782 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1783 return ret;
1784 }
1785 else
1786 {
1787 pthread_mutex_unlock(&g_lynq_network_sendto_mutex);
1788 return response.error;
1789 }
1790}
1791#endif
1792