blob: 350d65dff81c0d9844f07a212f0640f5a10946f8 [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#include "liblog/lynq_deflog.h"
q.huang52921662022-10-20 15:25:45 +080014#include "lynq_network.h"
15#include "lynq_module_common.h"
16#include "lynq_module_socket.h"
17#include "lynq_module_state_buffer.h"
18
19#define LYNQ_RESP_STRING_MAX_NUM 128
rjw7e50cd32022-01-18 18:30:37 +080020#define LYNQ_TYPE_BUF 10
21#define USER_LOG_TAG "LYNQ_NETWORK"
22
rjw7e50cd32022-01-18 18:30:37 +080023using ::android::Parcel;
24
q.huang52921662022-10-20 15:25:45 +080025static int s_module_wait_urc_id;
26static int s_module_urc_slot_id;
27static signalStrength_t s_network_urc_solSigStren;
rjw7e50cd32022-01-18 18:30:37 +080028
q.huang52921662022-10-20 15:25:45 +080029/**g_module_init_flag
rjw22947c22022-03-15 09:21:29 +080030* @brief mark network initialization state
31* 0:deinit status
32* 1:init state
33*/
q.huang52921662022-10-20 15:25:45 +080034int g_module_init_flag = 0;
rjw7e50cd32022-01-18 18:30:37 +080035
36int lynq_network_init(int utoken){
q.huang52921662022-10-20 15:25:45 +080037 if(g_module_init_flag != MODULE_CLOSED)
rjw22947c22022-03-15 09:21:29 +080038 {
q.huang52921662022-10-20 15:25:45 +080039 LYERRLOG("module state is %d",g_module_init_flag);
40 return LYNQ_E_CONFLICT;
rjw22947c22022-03-15 09:21:29 +080041 }
q.huang52921662022-10-20 15:25:45 +080042
43 if(utoken <0){
44 LYERRLOG("utoken is less than 0",utoken);
45 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +080046 }
q.huang52921662022-10-20 15:25:45 +080047
48 g_module_init_flag = MODULE_SWITCHING;
49
50 g_module_Global_uToken = utoken;
rjw7e50cd32022-01-18 18:30:37 +080051 LYLOGSET(LOG_INFO);
52 LYLOGEINIT(USER_LOG_TAG);
q.huang52921662022-10-20 15:25:45 +080053
q.huang693ff3b2022-10-20 15:25:45 +080054 int ret;
rjw7e50cd32022-01-18 18:30:37 +080055
q.huang47d4dfe2022-08-17 17:52:29 +080056 init_network_timer_all();
57
q.huang52921662022-10-20 15:25:45 +080058 ret = lynq_urc_socket_start();
59 if(ret != 0)
60 {
61 LYERRLOG("init socket urc fail!!!");
62 g_module_init_flag = MODULE_CLOSED;
63 return LYNQ_E_INNER_ERROR;
64 }
65
rjw7e50cd32022-01-18 18:30:37 +080066 ret = lynq_server_socket_start();
67 if(ret !=0)
68 {
69 LYERRLOG("init socket client fail!!!");
q.huang52921662022-10-20 15:25:45 +080070 lynq_close_urc_thread();
71 g_module_init_flag = MODULE_CLOSED;
72 return LYNQ_E_INNER_ERROR;
rjw7e50cd32022-01-18 18:30:37 +080073 }
q.huang52921662022-10-20 15:25:45 +080074 g_module_init_flag = MODULE_RUNNING;
q.huang7de1d662022-09-13 14:19:24 +080075
q.huang52921662022-10-20 15:25:45 +080076 return RESULT_OK;
77}
78
79int lynq_network_deinit(void){
80
81 if (g_module_init_flag != MODULE_RUNNING)
82 {
83 LYERRLOG("module state is %d",g_module_init_flag);
84 return LYNQ_E_CONFLICT;
85 }
86 g_module_init_flag = MODULE_SWITCHING;
87
88 lynq_close_urc_thread();
89 lynq_close_rc_thread();
90 deinit_network_timer_all();
91
92 g_module_init_flag = MODULE_CLOSED;
93 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +080094}
95
96int strUpper(char * str)
97{
98 int i=0;
99 while(1)
100 {
101 if(str[i]=='\0')
102 {
103 break;
104 }
105 if(str[i]>='a'&&str[i]<='z')
106 {
107 str[i]=str[i]-32;
108 }
109 i++;
110 }
q.huang52921662022-10-20 15:25:45 +0800111 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800112}
113
q.huang7de1d662022-09-13 14:19:24 +0800114int copyCellInfoList(Parcel* &p,uint64_t *cellinfo,int *tac,int *earfcn)
rjw7e50cd32022-01-18 18:30:37 +0800115{
116 int32_t v=0;
117 int64_t v6=0;
118 if(NULL == cellinfo)
119 {
120 LYERRLOG("*cellinfo error");
q.huang52921662022-10-20 15:25:45 +0800121 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +0800122 }
123
124 int nothing = 0;
rjw62a60152022-06-09 17:43:01 +0800125 int tmp_uint64 = 0;
q.huang7de1d662022-09-13 14:19:24 +0800126 p->readInt32(&v);
rjw7e50cd32022-01-18 18:30:37 +0800127 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
q.huang7de1d662022-09-13 14:19:24 +0800128 p->readInt32(&nothing);
rjw7e50cd32022-01-18 18:30:37 +0800129 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
q.huang7de1d662022-09-13 14:19:24 +0800130 // p->readInt32(&cellinfo->cellinfo.registered);
131 p->readInt32(&v);
rjw7e50cd32022-01-18 18:30:37 +0800132 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
q.huang7de1d662022-09-13 14:19:24 +0800133 p->readInt64(&v6);
rjw7e50cd32022-01-18 18:30:37 +0800134 // cellinfo->cellinfo.timeStamp = v6;
135 switch(cellinfoType) {
136 case RIL_CELL_INFO_TYPE_GSM: {
q.huang7de1d662022-09-13 14:19:24 +0800137 p->readInt32(&nothing);
138 p->readInt32(&nothing);
139 p->readInt32(&nothing);
140 p->readInt32(&tmp_uint64);
141 p->readInt32(&nothing);
142 p->readInt32(&nothing);
143 p->readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800144 *cellinfo = (uint64_t)tmp_uint64;
rjw61974852022-05-17 16:30:32 +0800145 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800146 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800147 break;
148 }
149 case RIL_CELL_INFO_TYPE_WCDMA: {
q.huang7de1d662022-09-13 14:19:24 +0800150 p->readInt32(&nothing);
151 p->readInt32(&nothing);
152 p->readInt32(&nothing);
153 p->readInt32(&tmp_uint64);
154 p->readInt32(&nothing);
155 p->readInt32(&nothing);
156 p->readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800157 *cellinfo = (uint64_t)tmp_uint64;
rjw4200a082022-05-17 17:58:35 +0800158 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800159 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800160 break;
161 }
162 case RIL_CELL_INFO_TYPE_CDMA: {
q.huang7de1d662022-09-13 14:19:24 +0800163 p->readInt32(&nothing);
164 p->readInt32(&nothing);
165 p->readInt32(&nothing);
166 p->readInt32(&nothing);
167 p->readInt32(&nothing);
168 p->readInt32(&nothing);
169 p->readInt32(&nothing);
170 p->readInt32(&nothing);
171 p->readInt32(&nothing);
172 p->readInt32(&nothing);
rjw7e50cd32022-01-18 18:30:37 +0800173 cellinfo = 0;
rjw61974852022-05-17 16:30:32 +0800174 tac = &nothing;
rjwa8011682022-05-31 17:31:28 +0800175 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800176 break;
177 }
178 case RIL_CELL_INFO_TYPE_LTE: {
q.huang7de1d662022-09-13 14:19:24 +0800179 p->readInt32(&nothing);
180 p->readInt32(&nothing);
181 p->readInt32(&tmp_uint64);
182 p->readInt32(&nothing);
183 p->readInt32(tac);
184 p->readInt32(earfcn);
185 p->readInt32(&nothing);
186 p->readInt32(&nothing);
187 p->readInt32(&nothing);
188 p->readInt32(&nothing);
189 p->readInt32(&nothing);
190 p->readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800191 *cellinfo = (uint64_t)tmp_uint64;
rjw7e50cd32022-01-18 18:30:37 +0800192 break;
193 }
194 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
q.huang7de1d662022-09-13 14:19:24 +0800195 p->readInt32(&nothing);
196 p->readInt32(&nothing);
197 p->readInt32(&nothing);
198 p->readInt32(&tmp_uint64);
199 p->readInt32(&nothing);
200 p->readInt32(&nothing);
rjw62a60152022-06-09 17:43:01 +0800201 *cellinfo = (uint64_t)tmp_uint64;
rjwa8011682022-05-31 17:31:28 +0800202 tac = &nothing;
203 earfcn = &nothing;
rjw7e50cd32022-01-18 18:30:37 +0800204 break;
205 }
206 case RIL_CELL_INFO_TYPE_NR: {
q.huang7de1d662022-09-13 14:19:24 +0800207 p->readInt32(&nothing);
208 p->readInt32(&nothing);
209 p->readUint64(cellinfo);
210 p->readInt32(&nothing);
211 p->readInt32(tac);
212 p->readInt32(earfcn);
213 p->readInt32(&nothing);
214 p->readInt32(&nothing);
215 p->readInt32(&nothing);
216 p->readInt32(&nothing);
217 p->readInt32(&nothing);
218 p->readInt32(&nothing);
rjw7e50cd32022-01-18 18:30:37 +0800219 break;
220 }
221 }
rjw62a60152022-06-09 17:43:01 +0800222 LYINFLOG("CID in fUNC :%llu",*cellinfo);
rjwa8011682022-05-31 17:31:28 +0800223 LYINFLOG("tac in fUNC :%d",*tac);
224 LYINFLOG("earfcn in fUNC :%d",*earfcn);
q.huang52921662022-10-20 15:25:45 +0800225 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800226}
227
q.huang7de1d662022-09-13 14:19:24 +0800228static char * lynqStrdupReadString(Parcel* &p) {
rjw7e50cd32022-01-18 18:30:37 +0800229 size_t stringlen;
230 const char16_t *s16;
231
q.huang7de1d662022-09-13 14:19:24 +0800232 s16 = p->readString16Inplace(&stringlen);
rjw7e50cd32022-01-18 18:30:37 +0800233 return strndup16to8(s16, stringlen);
234}
235
236int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
237{
q.huang52921662022-10-20 15:25:45 +0800238 if(g_module_init_flag != MODULE_RUNNING)
239 {
240 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
241 return LYNQ_E_CONFLICT;
242 }
243
rjw7e50cd32022-01-18 18:30:37 +0800244 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
rjw7e50cd32022-01-18 18:30:37 +0800245 {
q.huang7de1d662022-09-13 14:19:24 +0800246 LYERRLOG("%s some parameter OperatorFN OperatorSH MccMnc %s %s %s is NULL",__func__,OperatorFN,OperatorSH,MccMnc);
q.huang52921662022-10-20 15:25:45 +0800247 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800248 }
q.huang52921662022-10-20 15:25:45 +0800249
q.huang7de1d662022-09-13 14:19:24 +0800250 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800251 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OPERATOR,0,"");
252
253 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800254 {
q.huang52921662022-10-20 15:25:45 +0800255 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
256 return ret;
257 }
258
259 int num ;
260 char *resp[LYNQ_RESP_STRING_MAX_NUM];
q.huang7de1d662022-09-13 14:19:24 +0800261
q.huang52921662022-10-20 15:25:45 +0800262 p->readInt32(&num);
263 if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)
264 {
265 LYERRLOG("no paramters or num %d too great",num);
266 delete p;
267 return LYNQ_E_INNER_ERROR;
268 }else{
269 int i;
270 for(i = 0; i<num;i++)
rjw7e50cd32022-01-18 18:30:37 +0800271 {
q.huang52921662022-10-20 15:25:45 +0800272 resp[i] = lynqStrdupReadString(p);
rjw7e50cd32022-01-18 18:30:37 +0800273 }
q.huang52921662022-10-20 15:25:45 +0800274 if(NULL != resp[0])
275 {
276 strcpy(OperatorFN,resp[0]);
277 }
278 if(NULL != resp[1])
279 {
280 strcpy(OperatorSH,resp[1]);
281 }
282 if(NULL != resp[2])
283 {
284 strcpy(MccMnc,resp[2]);
285 }
286 for(i = 0; i<num;i++)
287 {
288 if(resp[i]!=NULL)
289 {
290 free(resp[i]);
291 }
292 }
rjw7e50cd32022-01-18 18:30:37 +0800293 }
q.huang7de1d662022-09-13 14:19:24 +0800294
q.huang52921662022-10-20 15:25:45 +0800295 LYINFLOG("%s suc",__func__);
296 delete p;
297 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800298}
299
300int lynq_query_network_selection_mode(int *netselMode)
301{
q.huang52921662022-10-20 15:25:45 +0800302 if(g_module_init_flag != MODULE_RUNNING)
303 {
304 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
305 return LYNQ_E_CONFLICT;
306 }
307
rjw7e50cd32022-01-18 18:30:37 +0800308 if(NULL == netselMode)
rjw7e50cd32022-01-18 18:30:37 +0800309 {
q.huang7de1d662022-09-13 14:19:24 +0800310 LYERRLOG("%s parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800311 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800312 }
q.huang52921662022-10-20 15:25:45 +0800313
314 Parcel* p=NULL;
315 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,0,"");
316
317 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800318 {
q.huang52921662022-10-20 15:25:45 +0800319 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
320 return ret;
321 }
322
323 int readnum;
324 p->readInt32(&readnum);
325 p->readInt32(netselMode);
q.huang7de1d662022-09-13 14:19:24 +0800326
q.huang52921662022-10-20 15:25:45 +0800327 LYINFLOG("%s suc",__func__);
328 delete p;
329 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800330}
331
332int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
333{
q.huang52921662022-10-20 15:25:45 +0800334 if(g_module_init_flag != MODULE_RUNNING)
335 {
336 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
337 return LYNQ_E_CONFLICT;
338 }
339
q.huang7de1d662022-09-13 14:19:24 +0800340 if(NULL == mode || (strlen(mode) == 0))
rjw78d04502022-02-24 13:37:11 +0800341 {
q.huang7de1d662022-09-13 14:19:24 +0800342 LYERRLOG("%s parameter mod %s is error",__func__,mode);
q.huang52921662022-10-20 15:25:45 +0800343 return LYNQ_E_PARAMETER_ANONALY;
rjw78d04502022-02-24 13:37:11 +0800344 }
q.huang7de1d662022-09-13 14:19:24 +0800345
346 if(!strcmp(mode,"Manual"))
347 {
348 if(mccmnc == NULL || strlen(mccmnc) == 0)
349 {
350 LYERRLOG("%s parameter mccmnc %s is error",__func__,mccmnc);
q.huang52921662022-10-20 15:25:45 +0800351 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800352 }
353 }
354
q.huang7de1d662022-09-13 14:19:24 +0800355 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800356 int ret;
q.huang7de1d662022-09-13 14:19:24 +0800357
rjw7e50cd32022-01-18 18:30:37 +0800358 if(!strcmp(mode,"Auto"))
359 {
q.huang52921662022-10-20 15:25:45 +0800360 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,0,"");
q.huang7de1d662022-09-13 14:19:24 +0800361 }
362 else if(!strcmp(mode,"Manual"))
363 {
q.huang52921662022-10-20 15:25:45 +0800364 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,1,"%s",mccmnc);
q.huang7de1d662022-09-13 14:19:24 +0800365 }
366 else
367 {
q.huang52921662022-10-20 15:25:45 +0800368 LYERRLOG("%s parameter mode %s is errir",__func__,mode);
369 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +0800370 }
371
q.huang52921662022-10-20 15:25:45 +0800372 if(ret!=RESULT_OK)
373 {
374 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
375 return ret;
376 }
377
378 LYINFLOG("%s set mode %s mccmnc %s suc",__func__,mode,mccmnc);
379 delete p;
380 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800381}
382
383int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
384{
q.huang52921662022-10-20 15:25:45 +0800385 if(g_module_init_flag != MODULE_RUNNING)
386 {
387 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
388 return LYNQ_E_CONFLICT;
389 }
rjw7e50cd32022-01-18 18:30:37 +0800390 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
rjw7e50cd32022-01-18 18:30:37 +0800391 {
q.huang7de1d662022-09-13 14:19:24 +0800392 LYERRLOG("%s there is parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800393 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800394 }
q.huang52921662022-10-20 15:25:45 +0800395
q.huang7de1d662022-09-13 14:19:24 +0800396 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800397 int ret=lynq_send_common_request(p,600,RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,0,"");
rjw7e50cd32022-01-18 18:30:37 +0800398
q.huang52921662022-10-20 15:25:45 +0800399 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800400 {
q.huang52921662022-10-20 15:25:45 +0800401 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
402 return ret;
403 }
q.huang7de1d662022-09-13 14:19:24 +0800404
q.huang52921662022-10-20 15:25:45 +0800405 int num =p->readInt32();
406 char *resp[LYNQ_RESP_STRING_MAX_NUM];
407 if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)
408 {
409 LYERRLOG("no paramters or num %d too great",num);
410 delete p;
411 return LYNQ_E_INNER_ERROR;
412 }else{
413 int i;
414 for(i = 0; i<num;i++)
415 {
416 resp[i] = lynqStrdupReadString(p);
417 }
418 if(NULL != resp[0])
419 {
420 strcpy(OperatorFN,resp[0]);
421 }
422 if(NULL != resp[1])
423 {
424 strcpy(OperatorSH,resp[1]);
425 }
426 if(NULL != resp[2])
427 {
428 strcpy(MccMnc,resp[2]);
429 }
430 if(NULL != resp[3])
431 {
q.huang693ff3b2022-10-20 15:25:45 +0800432 strcpy(NetStatus,resp[2]);
q.huang52921662022-10-20 15:25:45 +0800433 }
434 for(i = 0; i<num;i++)
435 {
436 if(resp[i]!=NULL)
437 {
438 free(resp[i]);
439 }
440 }
441 }
442 delete p;
443 LYINFLOG("%s suc",__func__);
444 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800445}
446
rjw4544e132022-04-01 15:00:26 +0800447int 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 +0800448{
q.huang52921662022-10-20 15:25:45 +0800449 if(g_module_init_flag != MODULE_RUNNING)
450 {
451 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
452 return LYNQ_E_CONFLICT;
453 }
454
rjwd98d5872022-04-09 13:50:58 +0800455 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
q.huang7de1d662022-09-13 14:19:24 +0800456 {
457 LYERRLOG("%s there is parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800458 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800459 }
rjw7e50cd32022-01-18 18:30:37 +0800460 if(strlen(type)>LYNQ_TYPE_BUF)
461 {
462 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
q.huang52921662022-10-20 15:25:45 +0800463 return LYNQ_E_PARAMETER_ANONALY;
464 }
q.huang7de1d662022-09-13 14:19:24 +0800465
466 int request;
467 char str[LYNQ_TYPE_BUF];
rjw7e50cd32022-01-18 18:30:37 +0800468 memcpy(str,type,strlen(type)+1);
469 strUpper(str);
470 if(!strcmp(str,"VOICE"))
471 {
q.huangd3804bd2022-10-20 14:36:14 +0800472 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)
q.huang47d4dfe2022-08-17 17:52:29 +0800473 {
q.huangd3804bd2022-10-20 14:36:14 +0800474 return RESULT_OK;
q.huang47d4dfe2022-08-17 17:52:29 +0800475 }
q.huang7de1d662022-09-13 14:19:24 +0800476 request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
rjw7e50cd32022-01-18 18:30:37 +0800477 }else if(!strcmp(str,"DATA")){
q.huangd3804bd2022-10-20 14:36:14 +0800478 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)
q.huang47d4dfe2022-08-17 17:52:29 +0800479 {
q.huangd3804bd2022-10-20 14:36:14 +0800480 return RESULT_OK;
q.huang47d4dfe2022-08-17 17:52:29 +0800481 }
q.huang7de1d662022-09-13 14:19:24 +0800482 request = RIL_REQUEST_DATA_REGISTRATION_STATE;
rjw7e50cd32022-01-18 18:30:37 +0800483 }else if(!strcmp(str,"IMS")){
q.huangd3804bd2022-10-20 14:36:14 +0800484 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,imsRegState,radioTechFam,0)==0)
q.huang47d4dfe2022-08-17 17:52:29 +0800485 {
q.huangd3804bd2022-10-20 14:36:14 +0800486 return RESULT_OK;
q.huang47d4dfe2022-08-17 17:52:29 +0800487 }
q.huang7de1d662022-09-13 14:19:24 +0800488 request = RIL_REQUEST_IMS_REGISTRATION_STATE;
rjw7e50cd32022-01-18 18:30:37 +0800489 }else{
490 LYERRLOG("request error");
q.huang52921662022-10-20 15:25:45 +0800491 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800492 }
rjw7e50cd32022-01-18 18:30:37 +0800493
q.huang52921662022-10-20 15:25:45 +0800494 Parcel* p=NULL;
495 int ret=lynq_send_common_request(p,g_wait_time,request,0,"");
496
497 if(ret!=RESULT_OK)
rjw7e50cd32022-01-18 18:30:37 +0800498 {
q.huang52921662022-10-20 15:25:45 +0800499 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
500 return ret;
501 }
502
503 int num,i;
504 char *resp[LYNQ_RESP_STRING_MAX_NUM];
505 if(!strcmp(str,"VOICE"))
506 {
507 p->readInt32(&num);
508 if(num == 15)
rjw7e50cd32022-01-18 18:30:37 +0800509 {
q.huang693ff3b2022-10-20 15:25:45 +0800510 for(i=0;i<15;i++)
q.huang52921662022-10-20 15:25:45 +0800511 {
512 resp[i]=lynqStrdupReadString(p);
513 }
q.huang693ff3b2022-10-20 15:25:45 +0800514 *regState = atoi(resp[0]);
515 *netType = atoi(resp[3]);
516 *netRejected = atoi(resp[14]);
517 for(i=0;i<15;i++)
q.huang52921662022-10-20 15:25:45 +0800518 {
519 if(resp[i]!=NULL)
520 {
521 free(resp[i]);
522 }
523 }
524 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);
rjw7e50cd32022-01-18 18:30:37 +0800525 }
q.huang52921662022-10-20 15:25:45 +0800526 else
q.huang7de1d662022-09-13 14:19:24 +0800527 {
q.huang52921662022-10-20 15:25:45 +0800528 LYERRLOG("%s type %s num %d error",__func__,str,num);
q.huang7de1d662022-09-13 14:19:24 +0800529 delete p;
q.huang52921662022-10-20 15:25:45 +0800530 return LYNQ_E_INNER_ERROR;
531 }
rjw7e50cd32022-01-18 18:30:37 +0800532 }
q.huang52921662022-10-20 15:25:45 +0800533 else if(!strcmp(str,"DATA")){
534 p->readInt32(&num);
535 if(num == 11)
536 {
537 for(i=0;i<4;i++)
538 {
q.huang693ff3b2022-10-20 15:25:45 +0800539 resp[i]=lynqStrdupReadString(p);
540 }
541 *regState = atoi(resp[0]);
542 strcpy(LAC,resp[1]);
543 strcpy(CID,resp[2]);
544 *netType = atoi(resp[3]);
545 for(i=0;i<4;i++)
q.huang52921662022-10-20 15:25:45 +0800546 {
547 if(resp[i]!=NULL)
548 {
549 free(resp[i]);
550 }
551 }
552 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);
553 }
554 else
555 {
556 LYERRLOG("%s type %s num %d error",__func__,str,num);
557 delete p;
558 return LYNQ_E_INNER_ERROR;
559 }
q.huang7de1d662022-09-13 14:19:24 +0800560
q.huang52921662022-10-20 15:25:45 +0800561 }
562 else // "IMS"
563 {
564 p->readInt32(&num);
565 if(num == 2)
566 {
567 p->readInt32(imsRegState);
568 p->readInt32(radioTechFam);
569 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);
570 }
571 else
572 {
573 LYERRLOG("%s type %s num %d error",__func__,str,num);
574 delete p;
575 return LYNQ_E_INNER_ERROR;
576 }
577 }
578 LYINFLOG("%s suc",__func__);
579 delete p;
580 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800581}
582
583int lynq_query_prefferred_networktype(int *preNetType)
q.huang7de1d662022-09-13 14:19:24 +0800584{
q.huang52921662022-10-20 15:25:45 +0800585 if(g_module_init_flag != MODULE_RUNNING)
586 {
587 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
588 return LYNQ_E_CONFLICT;
589 }
q.huang7de1d662022-09-13 14:19:24 +0800590 if(NULL == preNetType)
rjw7e50cd32022-01-18 18:30:37 +0800591 {
q.huang7de1d662022-09-13 14:19:24 +0800592 LYERRLOG("%s there is parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800593 return LYNQ_E_PARAMETER_ANONALY;
594 }
rjw7e50cd32022-01-18 18:30:37 +0800595
q.huang52921662022-10-20 15:25:45 +0800596 Parcel* p=NULL;
597 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE,0,"");
598
599 if(ret!=RESULT_OK)
600 {
601 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
602 return ret;
603 }
604
605 int num;
606 p->readInt32(&num);
607 p->readInt32(preNetType);
608
609 LYINFLOG("%s suc",__func__);
610 delete p;
611 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800612}
613
614int lynq_set_prefferred_networktype(const int preffertype)
615{
q.huang52921662022-10-20 15:25:45 +0800616 if(g_module_init_flag != MODULE_RUNNING)
617 {
618 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
619 return LYNQ_E_CONFLICT;
620 }
rjw7e50cd32022-01-18 18:30:37 +0800621 if(preffertype < 0||preffertype >33)
rjw7e50cd32022-01-18 18:30:37 +0800622 {
q.huang7de1d662022-09-13 14:19:24 +0800623 LYERRLOG("%s parameter %d error",__func__,preffertype);
q.huang52921662022-10-20 15:25:45 +0800624 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800625 }
q.huang52921662022-10-20 15:25:45 +0800626
q.huang7de1d662022-09-13 14:19:24 +0800627 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800628 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE,1,"%d",preffertype);
629
630 if(ret!=RESULT_OK)
rjw7e50cd32022-01-18 18:30:37 +0800631 {
q.huang52921662022-10-20 15:25:45 +0800632 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
633 return ret;
634 }
635
636 LYINFLOG("%s set %d suc",__func__,preffertype);
637 delete p;
638 return RESULT_OK;
639
rjw7e50cd32022-01-18 18:30:37 +0800640}
641
rjw62a60152022-06-09 17:43:01 +0800642int 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 +0800643{
q.huang52921662022-10-20 15:25:45 +0800644 if(g_module_init_flag != MODULE_RUNNING)
645 {
646 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
647 return LYNQ_E_CONFLICT;
648 }
rjw7e50cd32022-01-18 18:30:37 +0800649 if(NULL == realNum)
rjw7e50cd32022-01-18 18:30:37 +0800650 {
q.huang7de1d662022-09-13 14:19:24 +0800651 LYERRLOG("%s there is parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800652 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800653 }
654
q.huang52921662022-10-20 15:25:45 +0800655 Parcel* p=NULL;
656 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_CELL_INFO_LIST,0,"");
657
658 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800659 {
q.huang52921662022-10-20 15:25:45 +0800660 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
661 return ret;
662 }
663
664 int num;
q.huang7de1d662022-09-13 14:19:24 +0800665
q.huang52921662022-10-20 15:25:45 +0800666 p->readInt32(&num);
667 LYINFLOG("cell info num:%d",num);
668 *realNum = num;
669 for(int i = 0;i<num;i++)
670 {
671 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
rjw7e50cd32022-01-18 18:30:37 +0800672 }
q.huang52921662022-10-20 15:25:45 +0800673
674 LYINFLOG("%s suc",__func__);
675 delete p;
676 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800677}
678
679int lynq_set_unsol_cell_info_listrate(const int rate)
680{
q.huang52921662022-10-20 15:25:45 +0800681 if(g_module_init_flag != MODULE_RUNNING)
rjw7e50cd32022-01-18 18:30:37 +0800682 {
q.huang52921662022-10-20 15:25:45 +0800683 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
684 return LYNQ_E_CONFLICT;
rjw7e50cd32022-01-18 18:30:37 +0800685 }
q.huang52921662022-10-20 15:25:45 +0800686 Parcel* p=NULL;
687 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE,1,"%d",rate);
rjw7e50cd32022-01-18 18:30:37 +0800688
q.huang52921662022-10-20 15:25:45 +0800689 if(ret!=RESULT_OK)
690 {
691 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
692 return ret;
693 }
694
695 LYINFLOG("%s set %d suc",__func__,rate);
696 delete p;
697 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800698}
699
700int lynq_set_band_mode(const int bandmode)
701{
q.huang52921662022-10-20 15:25:45 +0800702 if(g_module_init_flag != MODULE_RUNNING)
rjw7e50cd32022-01-18 18:30:37 +0800703 {
q.huang52921662022-10-20 15:25:45 +0800704 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
705 return LYNQ_E_CONFLICT;
rjw7e50cd32022-01-18 18:30:37 +0800706 }
q.huang52921662022-10-20 15:25:45 +0800707 Parcel* p=NULL;
708 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_BAND_MODE,1,"%d",bandmode);
rjw7e50cd32022-01-18 18:30:37 +0800709
q.huang52921662022-10-20 15:25:45 +0800710 if(ret!=RESULT_OK)
711 {
712 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
713 return ret;
714 }
715
716 LYINFLOG("%s set %d suc",__func__,bandmode);
717 delete p;
718 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800719}
720
721int lynq_query_available_bandmode(int availBanMode[])
722{
q.huang52921662022-10-20 15:25:45 +0800723 if(g_module_init_flag != MODULE_RUNNING)
724 {
725 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
726 return LYNQ_E_CONFLICT;
727 }
rjw7e50cd32022-01-18 18:30:37 +0800728 if(NULL == availBanMode)
rjw7e50cd32022-01-18 18:30:37 +0800729 {
q.huang7de1d662022-09-13 14:19:24 +0800730 LYERRLOG("%s parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800731 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +0800732 }
733
q.huang7de1d662022-09-13 14:19:24 +0800734 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800735 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,0,"");
736 if(ret!=RESULT_OK)
rjw7e50cd32022-01-18 18:30:37 +0800737 {
q.huang52921662022-10-20 15:25:45 +0800738 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
739 return ret;
740 }
q.huang7de1d662022-09-13 14:19:24 +0800741
q.huang52921662022-10-20 15:25:45 +0800742 int num = 0;
743 int res = 0;
744 int i;
745
746 p->readInt32(&num);
747 LYINFLOG("num = %d",num);
748 availBanMode[0] = num;
749 for(i=1 ;i<=num;i++)
750 {
751 p->readInt32(&res);
752 availBanMode[i]=res;
753 }
754
755 LYINFLOG("%s suc",__func__);
756 delete p;
757 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800758}
759
760int lynq_radio_on(const int data)
q.huang52921662022-10-20 15:25:45 +0800761{
762 if(g_module_init_flag != MODULE_RUNNING)
763 {
764 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
765 return LYNQ_E_CONFLICT;
766 }
q.huang7de1d662022-09-13 14:19:24 +0800767 if (data < 0 || data > 1)
rjw7e50cd32022-01-18 18:30:37 +0800768 {
q.huang7de1d662022-09-13 14:19:24 +0800769 LYERRLOG("%s parameter %d error",__func__,data);
q.huang52921662022-10-20 15:25:45 +0800770 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800771 }
772
q.huang52921662022-10-20 15:25:45 +0800773 Parcel* p=NULL;
774 int ret=lynq_send_common_request(p,65,RIL_REQUEST_RADIO_POWER,1,"%d",data);
rjw7e50cd32022-01-18 18:30:37 +0800775
q.huang52921662022-10-20 15:25:45 +0800776 if(ret!=RESULT_OK)
777 {
778 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
779 return ret;
780 }
781
782 LYINFLOG("%s set %d suc",__func__,data);
783 delete p;
784 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800785}
786
q.huang7de1d662022-09-13 14:19:24 +0800787const char * lynq_get_raw_data(Parcel* &p, int* data_len)
q.huang16dcb0f2022-09-07 09:17:37 +0800788{
rjw776c85f2022-10-21 15:09:21 +0800789 int32_t len;
q.huang16dcb0f2022-09-07 09:17:37 +0800790 int status;
791 char *data;
792
793 *data_len=0;
rjw776c85f2022-10-21 15:09:21 +0800794
q.huang7de1d662022-09-13 14:19:24 +0800795 status = p->readInt32(&len);
rjw776c85f2022-10-21 15:09:21 +0800796
q.huang16dcb0f2022-09-07 09:17:37 +0800797 if (status != 0) {
798 LYERRLOG("%s status is %d",__func__,status);
799 return NULL;
rjw776c85f2022-10-21 15:09:21 +0800800 }
801
802 // The java code writes -1 for null arrays
q.huang16dcb0f2022-09-07 09:17:37 +0800803 if (((int)len) == -1 || ((int)len) == 0)
804 {
805 LYERRLOG("%s len is %d",__func__,len);
806 return NULL;
807 }
808 LYINFLOG("%s len is %d",__func__,len);
rjw776c85f2022-10-21 15:09:21 +0800809
q.huang7de1d662022-09-13 14:19:24 +0800810 data = (char*) p->readInplace(len);
q.huang16dcb0f2022-09-07 09:17:37 +0800811 *data_len=len;
rjw776c85f2022-10-21 15:09:21 +0800812
q.huang16dcb0f2022-09-07 09:17:37 +0800813 return data;
814}
815
816int lynq_query_radio_state(int *radio_state)
817{
q.huang52921662022-10-20 15:25:45 +0800818 if(g_module_init_flag != MODULE_RUNNING)
819 {
820 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
821 return LYNQ_E_CONFLICT;
822 }
q.huang16dcb0f2022-09-07 09:17:37 +0800823 if(NULL == radio_state)
824 {
825 LYERRLOG("%s radio state is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800826 return LYNQ_E_PARAMETER_ANONALY;
q.huang16dcb0f2022-09-07 09:17:37 +0800827 }
828
q.huang7de1d662022-09-13 14:19:24 +0800829 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800830 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN");
831 if(ret!=RESULT_OK)
q.huang16dcb0f2022-09-07 09:17:37 +0800832 {
q.huang52921662022-10-20 15:25:45 +0800833 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
834 return ret;
835 }
q.huang7de1d662022-09-13 14:19:24 +0800836
q.huang52921662022-10-20 15:25:45 +0800837 int bfind=false;
838 const char* data;
839 int data_len;
840 char* data_str;
841 char* start;
842 int length;
843 int i;
844 int num_start;
845 data = lynq_get_raw_data(p,&data_len);
846 if(data==NULL || data_len == 0)
847 {
848 LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);
q.huang7de1d662022-09-13 14:19:24 +0800849 delete p;
q.huang52921662022-10-20 15:25:45 +0800850 return LYNQ_E_INNER_ERROR;
q.huang16dcb0f2022-09-07 09:17:37 +0800851 }
q.huang52921662022-10-20 15:25:45 +0800852 data_str = (char*) calloc(1,data_len+1);
853 if (NULL == data_str)
854 {
855 LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);
856 delete p;
857 return LYNQ_E_MALLOC_ERROR;
858 }
859 memmove(data_str, data, data_len);
860 data_str[data_len]='\0';
861 LYINFLOG("%s return string is %s",__func__,data_str);
862 start = strstr(data_str,"CFUN");
863 if(start!=NULL)
864 {
865 start=start+4;
866 length=strlen(start);
867 for(i=0; i<length;i++)
868 {
869 if((!bfind) && (start[i] >= '0') && (start[i] <= '9'))
870 {
871 bfind=true;
872 num_start=i;
873 }
874 else if(bfind && ((start[i] < '0') || (start[i] > '9')))
875 {
876 start[i]='\0';
877 break;
878 }
879 }
880 if(bfind)
881 {
882 (*radio_state) = atoi(start+num_start);
883 LYINFLOG("%s, radio state is %s %d",__func__,start+num_start,*radio_state);
884 free(data_str);
885 delete p;
886 return RESULT_OK;
887 }
888 }
889 LYERRLOG("%s return string %s no cfun or no digit",__func__,data_str);
890 free(data_str);
891 delete p;
892 return LYNQ_E_INNER_ERROR;
q.huang16dcb0f2022-09-07 09:17:37 +0800893}
894
rjw7e50cd32022-01-18 18:30:37 +0800895int lynq_query_radio_tech(int* radioTech)
896{
q.huang52921662022-10-20 15:25:45 +0800897 if(g_module_init_flag != MODULE_RUNNING)
898 {
899 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
900 return LYNQ_E_CONFLICT;
901 }
rjw7e50cd32022-01-18 18:30:37 +0800902 if(NULL == radioTech)
rjw7e50cd32022-01-18 18:30:37 +0800903 {
q.huang7de1d662022-09-13 14:19:24 +0800904 LYERRLOG("%s radio tech is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800905 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800906 }
rjw7e50cd32022-01-18 18:30:37 +0800907
q.huang7de1d662022-09-13 14:19:24 +0800908 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800909 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_VOICE_RADIO_TECH,0,"");
910
911 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800912 {
q.huang52921662022-10-20 15:25:45 +0800913 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
914 return ret;
915 }
q.huang7de1d662022-09-13 14:19:24 +0800916
q.huang52921662022-10-20 15:25:45 +0800917 int num;
918 p->readInt32(&num);
919 p->readInt32(radioTech);
q.huang7de1d662022-09-13 14:19:24 +0800920
q.huang52921662022-10-20 15:25:45 +0800921 LYINFLOG("%s suc",__func__);
922 delete p;
923 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800924}
925
926int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
927{
q.huang52921662022-10-20 15:25:45 +0800928 if(g_module_init_flag != MODULE_RUNNING)
929 {
930 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
931 return LYNQ_E_CONFLICT;
932 }
rjw7e50cd32022-01-18 18:30:37 +0800933 if(NULL == solSigStren)
rjw7e50cd32022-01-18 18:30:37 +0800934 {
q.huang7de1d662022-09-13 14:19:24 +0800935 LYERRLOG("%s parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800936 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +0800937 }
938
q.huang7de1d662022-09-13 14:19:24 +0800939 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800940 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,"");
941 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800942 {
q.huang52921662022-10-20 15:25:45 +0800943 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
944 return ret;
945 }
946
947 int sum = 0;
948 int LTE_signalstrength = 0;
949 int WCDMA_signalstrength = 0;
950 int none = 0;
rjw7e50cd32022-01-18 18:30:37 +0800951
q.huang52921662022-10-20 15:25:45 +0800952 p->readInt32(&solSigStren->rssi);
953 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
954 {
955 solSigStren->gw_sig_valid = 1;
956 }else{
957 solSigStren->gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800958 }
q.huang7de1d662022-09-13 14:19:24 +0800959
q.huang52921662022-10-20 15:25:45 +0800960 p->readInt32(&none);
961 p->readInt32(&none);
962 p->readInt32(&none);
963 p->readInt32(&none);
964 p->readInt32(&none);
965 p->readInt32(&none);
966 p->readInt32(&none);
967 p->readInt32(&LTE_signalstrength);
968 // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
969 p->readInt32(&solSigStren->rsrp);
970 p->readInt32(&solSigStren->rsrq);
971 p->readInt32(&solSigStren->rssnr);
972 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
973 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
974 {
975 solSigStren->lte_sig_valid = 1;
976 }else{
977 solSigStren->lte_sig_valid = 0;
978 }
q.huang7de1d662022-09-13 14:19:24 +0800979
q.huang52921662022-10-20 15:25:45 +0800980 p->readInt32(&none);
981 p->readInt32(&none);
982 p->readInt32(&none);
983 p->readInt32(&none);
984 p->readInt32(&none);
985 p->readInt32(&WCDMA_signalstrength);
986 p->readInt32(&none);
987 p->readInt32(&solSigStren->rscp);
988 p->readInt32(&solSigStren->ecno);
989 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
990 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
991 {
992 solSigStren->wcdma_sig_valid = 1;
993 }else{
994 solSigStren->wcdma_sig_valid = 0;
995 }
996 /*bug fix*/
997 p->readInt32(&solSigStren->ssRsrp);
998 p->readInt32(&solSigStren->ssRsrq);
999 p->readInt32(&solSigStren->ssSinr);
1000 p->readInt32(&solSigStren->csiRsrp);
1001 p->readInt32(&solSigStren->csiRsrq);
1002 p->readInt32(&solSigStren->csiSinr);
1003 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1004 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1005 if(sum != 0)
1006 {
1007 solSigStren->nr_sig_valid = 1;
1008 }else{
1009 LYERRLOG("None of NR signal info");
1010 }
1011
1012 LYINFLOG("%s suc",__func__);
1013 delete p;
1014 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +08001015}
rjwbc8a05f2022-03-02 15:23:11 +08001016
rjw4a5a78d2022-03-10 11:04:24 +08001017int lynq_set_ims(const int ims_mode)
1018{
q.huang52921662022-10-20 15:25:45 +08001019 if(g_module_init_flag != MODULE_RUNNING)
q.huang7de1d662022-09-13 14:19:24 +08001020 {
q.huang52921662022-10-20 15:25:45 +08001021 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1022 return LYNQ_E_CONFLICT;
q.huang7de1d662022-09-13 14:19:24 +08001023 }
rjw4a5a78d2022-03-10 11:04:24 +08001024 if (ims_mode < 0 || ims_mode > 1)
1025 {
q.huang7de1d662022-09-13 14:19:24 +08001026 LYERRLOG("%s parameter %d error",__func__,ims_mode);
q.huang52921662022-10-20 15:25:45 +08001027 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +08001028 }
rjw4a5a78d2022-03-10 11:04:24 +08001029
q.huang52921662022-10-20 15:25:45 +08001030 Parcel* p=NULL;
1031 int ret = lynq_send_common_request(p,65,RIL_REQUEST_SET_IMS_ENABLE,1,"%d",ims_mode);
1032 if(ret!=RESULT_OK)
1033 {
1034 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1035 return ret;
1036 }
1037
1038 LYINFLOG("%s set %d suc",__func__,ims_mode);
1039 delete p;
1040 return RESULT_OK;
rjw4a5a78d2022-03-10 11:04:24 +08001041}
1042
q.huang52921662022-10-20 15:25:45 +08001043/*Used to get urc info*/
1044int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1045{
1046 if(g_module_init_flag != MODULE_RUNNING)
1047 {
1048 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1049 return LYNQ_E_CONFLICT;
1050 }
1051 LYDBGLOG("start get urc info");
1052 if(handle != RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED &&handle != RIL_UNSOL_SIGNAL_STRENGTH)
1053 {
1054 LYINFLOG("invalid handle!!!");
1055 return LYNQ_E_PARAMETER_ANONALY;
1056 }
1057 if((handle ==RIL_UNSOL_SIGNAL_STRENGTH && NULL == solSigStren) ||
1058 (handle ==RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED && NULL == slot_id))
1059 {
1060 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1061 return LYNQ_E_PARAMETER_ANONALY;
1062 }
1063 switch(handle)
1064 {
1065 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: //1002
1066 {
1067 LYDBGLOG("get state update to VOICE");
1068 *slot_id = s_module_urc_slot_id;
1069 LYINFLOG("slot_id = %d",s_module_urc_slot_id);
1070 break;
1071 }
1072 case RIL_UNSOL_SIGNAL_STRENGTH: //1009
1073 {
1074 LYDBGLOG("get state update to signal info");
1075 solSigStren->gw_sig_valid = s_network_urc_solSigStren.gw_sig_valid;
1076 solSigStren->rssi = s_network_urc_solSigStren.rssi;
1077 solSigStren->wcdma_sig_valid = s_network_urc_solSigStren.wcdma_sig_valid;
1078 solSigStren->rscp = s_network_urc_solSigStren.rscp;
1079 solSigStren->ecno = s_network_urc_solSigStren.ecno;
1080 solSigStren->lte_sig_valid = s_network_urc_solSigStren.lte_sig_valid;
1081 solSigStren->rsrp = s_network_urc_solSigStren.rsrp;
1082 solSigStren->rsrq = s_network_urc_solSigStren.rsrq;
1083 solSigStren->rssnr = s_network_urc_solSigStren.rssnr;
1084 solSigStren->nr_sig_valid = s_network_urc_solSigStren.nr_sig_valid;
1085 solSigStren->ssRsrp = s_network_urc_solSigStren.ssRsrp;
1086 solSigStren->ssRsrq = s_network_urc_solSigStren.ssRsrq;
1087 solSigStren->ssSinr = s_network_urc_solSigStren.ssSinr;
1088 solSigStren->csiRsrp = s_network_urc_solSigStren.csiRsrp;
1089 solSigStren->csiRsrq = s_network_urc_solSigStren.csiRsrq;
1090 solSigStren->csiSinr = s_network_urc_solSigStren.csiSinr;
1091 break;
1092 }
1093 }
1094 return RESULT_OK;
1095}
1096
1097static pthread_mutex_t urc_signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
1098static pthread_cond_t urc_signal_state_change_cond = PTHREAD_COND_INITIALIZER;
1099
1100int wait_urc_signal_changes()
1101{
1102 pthread_mutex_lock(&urc_signal_state_change_mutex);
1103 pthread_cond_wait(&urc_signal_state_change_cond,&urc_signal_state_change_mutex);
1104 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1105 return RESULT_OK;
1106}
1107
1108void send_urc_signal_changes()
1109{
1110 pthread_mutex_lock(&urc_signal_state_change_mutex);
1111 pthread_cond_signal(&urc_signal_state_change_cond);
1112 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1113 return;
1114}
1115
1116void urc_msg_process(Parcel *p)
1117{
1118 int resp_type;
1119 int none = 0;
1120 int NR_sum = 0;
1121 int urc_LTE_signalstrength = 0;
1122 int urc_WCDMA_signalstrength = 0;
1123
1124 p->readInt32(&resp_type);
1125 p->readInt32(&s_module_wait_urc_id);
1126 p->readInt32(&s_module_urc_slot_id);
1127 LYINFLOG("urc id = %d, slot_id = %d",s_module_wait_urc_id,s_module_urc_slot_id);
1128 switch(s_module_wait_urc_id)
1129 {
1130 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1131 {
1132 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);
1133 send_urc_signal_changes();
1134 break;
1135 }
1136 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1137 {
1138 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);
1139 send_urc_signal_changes();
1140 break;
1141 }
1142 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1143 {
1144 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);
1145 send_urc_signal_changes();
1146 break;
1147 }
1148 case RIL_UNSOL_SIGNAL_STRENGTH:
1149 {
1150 p->readInt32(&s_network_urc_solSigStren.rssi);
1151 if((s_network_urc_solSigStren.rssi!=99)&&(s_network_urc_solSigStren.rssi!=0))
1152 {
1153 s_network_urc_solSigStren.gw_sig_valid = 1;
1154 }else{
1155 s_network_urc_solSigStren.gw_sig_valid = 0;
1156 }
1157 if(s_network_urc_solSigStren.gw_sig_valid == 1)
1158 {
1159 LYINFLOG("urc_GSM_signalstrength:%d",s_network_urc_solSigStren.rssi);
1160 }
1161 p->readInt32(&none);
1162 p->readInt32(&none);
1163 p->readInt32(&none);
1164 p->readInt32(&none);
1165 p->readInt32(&none);
1166 p->readInt32(&none);
1167 p->readInt32(&none);
1168 p->readInt32(&urc_LTE_signalstrength);
1169 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1170 p->readInt32(&s_network_urc_solSigStren.rsrp);
1171 p->readInt32(&s_network_urc_solSigStren.rsrq);
1172 p->readInt32(&s_network_urc_solSigStren.rssnr);
1173 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
1174 {
1175 s_network_urc_solSigStren.lte_sig_valid = 1;
1176 }else{
1177 s_network_urc_solSigStren.lte_sig_valid = 0;
1178 }
1179 if(s_network_urc_solSigStren.lte_sig_valid == 1)
1180 {
1181 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
1182 }
1183 p->readInt32(&none);
1184 p->readInt32(&none);
1185 p->readInt32(&none);
1186 p->readInt32(&none);
1187 p->readInt32(&none);
1188 p->readInt32(&urc_WCDMA_signalstrength);
1189 p->readInt32(&none);
1190 p->readInt32(&s_network_urc_solSigStren.rscp);
1191 p->readInt32(&s_network_urc_solSigStren.ecno);
1192 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
1193 {
1194 s_network_urc_solSigStren.wcdma_sig_valid = 1;
1195 }else{
1196 s_network_urc_solSigStren.wcdma_sig_valid = 0;
1197 }
1198 if(s_network_urc_solSigStren.wcdma_sig_valid == 1)
1199 {
1200 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
1201 }
1202 p->readInt32(&s_network_urc_solSigStren.ssRsrp);
1203 p->readInt32(&s_network_urc_solSigStren.ssRsrq);
1204 p->readInt32(&s_network_urc_solSigStren.ssSinr);
1205 p->readInt32(&s_network_urc_solSigStren.csiRsrp);
1206 p->readInt32(&s_network_urc_solSigStren.csiRsrq);
1207 p->readInt32(&s_network_urc_solSigStren.csiSinr);
1208 NR_sum = (s_network_urc_solSigStren.ssRsrp) + (s_network_urc_solSigStren.ssRsrq) + (s_network_urc_solSigStren.ssSinr) + (s_network_urc_solSigStren.csiRsrp)+\
1209 (s_network_urc_solSigStren.csiRsrq) + (s_network_urc_solSigStren.csiSinr);
1210 if(NR_sum != 0)
1211 {
1212 s_network_urc_solSigStren.nr_sig_valid = 1;
1213 }else{
1214 s_network_urc_solSigStren.nr_sig_valid = 0;
1215 }
1216 if(s_network_urc_solSigStren.nr_sig_valid == 1)
1217 {
1218 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
1219 s_network_urc_solSigStren.ssRsrp,s_network_urc_solSigStren.ssRsrq,s_network_urc_solSigStren.ssSinr, \
1220 s_network_urc_solSigStren.csiRsrp,s_network_urc_solSigStren.csiRsrq,s_network_urc_solSigStren.csiSinr);
1221 }
1222 send_urc_signal_changes();
1223 break;
1224 }
1225 }
1226}
rjw4a5a78d2022-03-10 11:04:24 +08001227
rjwbc8a05f2022-03-02 15:23:11 +08001228/*Used to wait for an update signal*/
1229int lynq_wait_signalchanges(int *handle)
1230{
1231 LYDBGLOG("start wait signalchanges info");
1232 if(NULL == handle)
1233 {
1234 LYERRLOG("illegal input");
q.huang52921662022-10-20 15:25:45 +08001235 return LYNQ_E_PARAMETER_ANONALY;
rjwbc8a05f2022-03-02 15:23:11 +08001236 }
q.huang52921662022-10-20 15:25:45 +08001237 wait_urc_signal_changes();
rjwbc8a05f2022-03-02 15:23:11 +08001238 LYDBGLOG("get signalchanges");
q.huang52921662022-10-20 15:25:45 +08001239 *handle = s_module_wait_urc_id;
1240 return RESULT_OK;
rjw4200a082022-05-17 17:58:35 +08001241}
lh3a26dd52022-07-01 04:44:57 -07001242
q.huang52921662022-10-20 15:25:45 +08001243#ifdef MODEM_GEN97
lh3a26dd52022-07-01 04:44:57 -07001244/**@brief parse at response,return error code,and the response
1245* @param response [IN] <response>:original at response,This parameter must be a character array.
1246
1247* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1248* field:
1249* eg:
1250* "+cnum: 123456\n+cnum: 456"
1251* value:12345;456;
1252* @param value_len [IN] <value_len>: The value length.
1253
1254* @return:AT error code
1255*/
1256static int parse_at_result(char response[],char value[],int value_len)
1257{
1258 if(response == NULL || value == NULL)
1259 {
1260 LYERRLOG("parameter invalid");
q.huang52921662022-10-20 15:25:45 +08001261 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001262 }
1263 if(strstr(response,"ERROR"))
1264 {
1265 int i;
1266 for(i = 0;i < strlen(response);i++)
1267 {
1268 if(response[i]==':')
1269 {
1270 break;
1271 }
1272 }
1273 if(i < strlen(response))
1274 {
1275 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1276 return atoi(response+i+1);
1277 }
1278 else
1279 {
1280 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1281 return 100; //unknown
1282 }
1283 }
1284 else if(strstr(response,"OK"))
1285 {
1286 /** parse the at response value
1287 * eg:
1288 * --> at+cnum
1289 * <-- +CNUM:"1243452"
1290 * need parse the "1243452" to <value>
1291 *@ To-Do
1292 */
1293 int count;
1294 int resp_addr[32] = {0};
1295 char temp_buf[1024] = {0};
1296 char *dest;
1297 dest = NULL;
1298 count = 0;
1299 int res_len = strlen(response);
1300 LYINFLOG("res_len:%d",res_len);
1301 for(int i = 0; i < res_len; i++)
1302 {
1303 if(response[i]==':')
1304 {
1305 resp_addr[count] = i;
1306 count++;
1307 }
1308 if(response[i] == '\n')
1309 {
1310 response[i] = '\0';
1311 }
1312 }
1313 LYINFLOG("count:%d",count);
1314 if(count > 0)
1315 {
1316 for(int i = 0; i < count; i++)
1317 {
1318 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1319 {
1320 LYINFLOG("2 will be out of range\n");
1321 break;
1322 }
1323 if(strlen(temp_buf) >= 1023)
1324 {
1325 LYINFLOG("1 will be out of range\n");
1326 break;
1327 }
1328 strcat(temp_buf,response+resp_addr[i]+2);
1329
1330 if(strlen(temp_buf) >= 1023)
1331 {
1332 LYINFLOG("1 will be out of range\n");
1333 break;
1334 }
1335 strcat(temp_buf,";");
1336 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1337 }
1338 LYINFLOG("parse_result:%s\n",temp_buf);
1339 if(strlen(temp_buf) > value_len)
1340 {
1341 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1342 memcpy(value,temp_buf,value_len);
1343 }
1344 else
1345 {
1346 memcpy(value,temp_buf,strlen(temp_buf));
1347 }
1348 }
q.huang52921662022-10-20 15:25:45 +08001349 return RESULT_OK;
lh3a26dd52022-07-01 04:44:57 -07001350 }
1351 else
1352 {
1353 LYINFLOG("%s this response invalid\n",response);
q.huang52921662022-10-20 15:25:45 +08001354 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001355 }
1356}
lh3a26dd52022-07-01 04:44:57 -07001357
1358int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1359{
q.huang52921662022-10-20 15:25:45 +08001360 if(g_module_init_flag != MODULE_RUNNING)
1361 {
1362 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1363 return LYNQ_E_CONFLICT;
1364 }
1365
q.huang7de1d662022-09-13 14:19:24 +08001366 if((mode < 0) || (mode >1) || (mode == 0 && NULL == interval) || (NULL == result))
lh3a26dd52022-07-01 04:44:57 -07001367 {
q.huang7de1d662022-09-13 14:19:24 +08001368 LYERRLOG("%s mode %d interval %s result %s error",__func__,mode,interval,result);
q.huang52921662022-10-20 15:25:45 +08001369 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001370 }
1371
q.huang7de1d662022-09-13 14:19:24 +08001372 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001373 int ret;
q.huang7de1d662022-09-13 14:19:24 +08001374
lh3a26dd52022-07-01 04:44:57 -07001375 if(mode == 0)
1376 {
q.huang52921662022-10-20 15:25:45 +08001377 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG=%s",interval);
lh3a26dd52022-07-01 04:44:57 -07001378 }
q.huang7de1d662022-09-13 14:19:24 +08001379 else
lh3a26dd52022-07-01 04:44:57 -07001380 {
q.huang52921662022-10-20 15:25:45 +08001381 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG?");
lh3a26dd52022-07-01 04:44:57 -07001382 }
q.huang7de1d662022-09-13 14:19:24 +08001383
q.huang52921662022-10-20 15:25:45 +08001384 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001385 {
q.huang52921662022-10-20 15:25:45 +08001386 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1387 return ret;
1388 }
q.huang7de1d662022-09-13 14:19:24 +08001389
q.huang52921662022-10-20 15:25:45 +08001390 int recv_len;
1391 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1392 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
q.huang7de1d662022-09-13 14:19:24 +08001393
q.huang52921662022-10-20 15:25:45 +08001394 LYINFLOG("get recover timer interval");
1395 p->readInt32(&recv_len);
1396 if(recv_len == -1)
1397 {
1398 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001399 delete p;
q.huang52921662022-10-20 15:25:45 +08001400 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001401 }
q.huang52921662022-10-20 15:25:45 +08001402 else
1403 {
1404 LYINFLOG("recv_len:%d",recv_len);
1405 p->read(response_interval,recv_len);
1406 }
1407 LYINFLOG("response_interval:%s",response_interval);
1408 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1409 if(mode == 1)
1410 {
1411 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1412 {
1413 memcpy(result,res_data,strlen(res_data));
1414 }
1415 }
1416 LYERRLOG("%s ret:%d",__func__,ret);
1417 delete p;
1418 return ret;
lh3a26dd52022-07-01 04:44:57 -07001419}
1420
1421int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1422{
q.huang52921662022-10-20 15:25:45 +08001423 if(g_module_init_flag != MODULE_RUNNING)
1424 {
1425 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1426 return LYNQ_E_CONFLICT;
1427 }
1428 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
lh3a26dd52022-07-01 04:44:57 -07001429 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1430 {
q.huang52921662022-10-20 15:25:45 +08001431 LYERRLOG("%s paramter recovery_threshold %d fullband_timer %d sniffer_timer %d inactive_mode %d error!",__func__,recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
1432 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001433 }
1434
q.huang7de1d662022-09-13 14:19:24 +08001435 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001436 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ESRVREC=%d,%d,%d,%d",recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);
q.huang7de1d662022-09-13 14:19:24 +08001437
q.huang52921662022-10-20 15:25:45 +08001438 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001439 {
q.huang52921662022-10-20 15:25:45 +08001440 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1441 return ret;
1442 }
1443
1444 int recv_len;
1445 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1446 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1447
1448 p->readInt32(&recv_len);
1449 if(recv_len == -1)
1450 {
1451 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001452 delete p;
q.huang52921662022-10-20 15:25:45 +08001453 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001454 }
q.huang52921662022-10-20 15:25:45 +08001455 else
1456 {
1457 LYINFLOG("recv_len:%d",recv_len);
1458 p->read(response_interval,recv_len);
1459 }
1460 LYINFLOG("response_interval:%s",response_interval);
1461 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1462 LYERRLOG("%s ret:%d",__func__,ret);
1463 delete p;
1464 return ret;
1465
lh3a26dd52022-07-01 04:44:57 -07001466}
1467#endif
1468