blob: 98e33f6d3b146d6964816fa24d56b33d119b95e4 [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();
q.huang036b6cf2023-01-10 14:29:20 +080057
58 ret = lynq_start_all_urc_socket_thread();
q.huang52921662022-10-20 15:25:45 +080059 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
q.huang036b6cf2023-01-10 14:29:20 +080066 ret = lynq_start_all_rc_socket_thread();
rjw7e50cd32022-01-18 18:30:37 +080067 if(ret !=0)
68 {
69 LYERRLOG("init socket client fail!!!");
q.huang036b6cf2023-01-10 14:29:20 +080070 lynq_close_all_urc_socket_thread();
q.huang52921662022-10-20 15:25:45 +080071 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
q.huang036b6cf2023-01-10 14:29:20 +080088 lynq_close_all_urc_socket_thread();
89 lynq_close_all_rc_socket_thread();
q.huang52921662022-10-20 15:25:45 +080090 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 {
rjwfe7c8a42022-10-21 15:09:21 +0800432 strcpy(NetStatus,resp[3]);
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
q.huang036b6cf2023-01-10 14:29:20 +08001116bool is_support_urc(int urc_id)
1117{
1118 switch(urc_id)
1119 {
1120 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1121 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1122 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1123 case RIL_UNSOL_SIGNAL_STRENGTH:
1124 return true;
1125 default:
1126 return false;
1127 }
1128}
1129
q.huang52921662022-10-20 15:25:45 +08001130void urc_msg_process(Parcel *p)
1131{
1132 int resp_type;
1133 int none = 0;
1134 int NR_sum = 0;
1135 int urc_LTE_signalstrength = 0;
1136 int urc_WCDMA_signalstrength = 0;
1137
q.huang036b6cf2023-01-10 14:29:20 +08001138 int size=p->dataSize();
q.huang52921662022-10-20 15:25:45 +08001139 p->readInt32(&resp_type);
1140 p->readInt32(&s_module_wait_urc_id);
1141 p->readInt32(&s_module_urc_slot_id);
q.huang036b6cf2023-01-10 14:29:20 +08001142 LYINFLOG("%s urc id = %d, slot_id = %d, size is %d, msg is %s",__func__, s_module_wait_urc_id,s_module_urc_slot_id,size,requestToString(s_module_wait_urc_id));
q.huang52921662022-10-20 15:25:45 +08001143 switch(s_module_wait_urc_id)
1144 {
1145 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1146 {
1147 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);
1148 send_urc_signal_changes();
1149 break;
1150 }
1151 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1152 {
1153 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);
1154 send_urc_signal_changes();
1155 break;
1156 }
1157 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1158 {
1159 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);
1160 send_urc_signal_changes();
1161 break;
1162 }
1163 case RIL_UNSOL_SIGNAL_STRENGTH:
1164 {
1165 p->readInt32(&s_network_urc_solSigStren.rssi);
1166 if((s_network_urc_solSigStren.rssi!=99)&&(s_network_urc_solSigStren.rssi!=0))
1167 {
1168 s_network_urc_solSigStren.gw_sig_valid = 1;
1169 }else{
1170 s_network_urc_solSigStren.gw_sig_valid = 0;
1171 }
1172 if(s_network_urc_solSigStren.gw_sig_valid == 1)
1173 {
1174 LYINFLOG("urc_GSM_signalstrength:%d",s_network_urc_solSigStren.rssi);
1175 }
1176 p->readInt32(&none);
1177 p->readInt32(&none);
1178 p->readInt32(&none);
1179 p->readInt32(&none);
1180 p->readInt32(&none);
1181 p->readInt32(&none);
1182 p->readInt32(&none);
1183 p->readInt32(&urc_LTE_signalstrength);
1184 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1185 p->readInt32(&s_network_urc_solSigStren.rsrp);
1186 p->readInt32(&s_network_urc_solSigStren.rsrq);
1187 p->readInt32(&s_network_urc_solSigStren.rssnr);
1188 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
1189 {
1190 s_network_urc_solSigStren.lte_sig_valid = 1;
1191 }else{
1192 s_network_urc_solSigStren.lte_sig_valid = 0;
1193 }
1194 if(s_network_urc_solSigStren.lte_sig_valid == 1)
1195 {
1196 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
1197 }
1198 p->readInt32(&none);
1199 p->readInt32(&none);
1200 p->readInt32(&none);
1201 p->readInt32(&none);
1202 p->readInt32(&none);
1203 p->readInt32(&urc_WCDMA_signalstrength);
1204 p->readInt32(&none);
1205 p->readInt32(&s_network_urc_solSigStren.rscp);
1206 p->readInt32(&s_network_urc_solSigStren.ecno);
1207 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
1208 {
1209 s_network_urc_solSigStren.wcdma_sig_valid = 1;
1210 }else{
1211 s_network_urc_solSigStren.wcdma_sig_valid = 0;
1212 }
1213 if(s_network_urc_solSigStren.wcdma_sig_valid == 1)
1214 {
1215 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
1216 }
1217 p->readInt32(&s_network_urc_solSigStren.ssRsrp);
1218 p->readInt32(&s_network_urc_solSigStren.ssRsrq);
1219 p->readInt32(&s_network_urc_solSigStren.ssSinr);
1220 p->readInt32(&s_network_urc_solSigStren.csiRsrp);
1221 p->readInt32(&s_network_urc_solSigStren.csiRsrq);
1222 p->readInt32(&s_network_urc_solSigStren.csiSinr);
1223 NR_sum = (s_network_urc_solSigStren.ssRsrp) + (s_network_urc_solSigStren.ssRsrq) + (s_network_urc_solSigStren.ssSinr) + (s_network_urc_solSigStren.csiRsrp)+\
1224 (s_network_urc_solSigStren.csiRsrq) + (s_network_urc_solSigStren.csiSinr);
1225 if(NR_sum != 0)
1226 {
1227 s_network_urc_solSigStren.nr_sig_valid = 1;
1228 }else{
1229 s_network_urc_solSigStren.nr_sig_valid = 0;
1230 }
1231 if(s_network_urc_solSigStren.nr_sig_valid == 1)
1232 {
1233 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
1234 s_network_urc_solSigStren.ssRsrp,s_network_urc_solSigStren.ssRsrq,s_network_urc_solSigStren.ssSinr, \
1235 s_network_urc_solSigStren.csiRsrp,s_network_urc_solSigStren.csiRsrq,s_network_urc_solSigStren.csiSinr);
1236 }
1237 send_urc_signal_changes();
1238 break;
1239 }
1240 }
1241}
rjw4a5a78d2022-03-10 11:04:24 +08001242
rjwbc8a05f2022-03-02 15:23:11 +08001243/*Used to wait for an update signal*/
1244int lynq_wait_signalchanges(int *handle)
1245{
1246 LYDBGLOG("start wait signalchanges info");
1247 if(NULL == handle)
1248 {
1249 LYERRLOG("illegal input");
q.huang52921662022-10-20 15:25:45 +08001250 return LYNQ_E_PARAMETER_ANONALY;
rjwbc8a05f2022-03-02 15:23:11 +08001251 }
q.huang52921662022-10-20 15:25:45 +08001252 wait_urc_signal_changes();
rjwbc8a05f2022-03-02 15:23:11 +08001253 LYDBGLOG("get signalchanges");
q.huang52921662022-10-20 15:25:45 +08001254 *handle = s_module_wait_urc_id;
1255 return RESULT_OK;
rjw4200a082022-05-17 17:58:35 +08001256}
lh3a26dd52022-07-01 04:44:57 -07001257
q.huang52921662022-10-20 15:25:45 +08001258#ifdef MODEM_GEN97
lh3a26dd52022-07-01 04:44:57 -07001259/**@brief parse at response,return error code,and the response
1260* @param response [IN] <response>:original at response,This parameter must be a character array.
1261
1262* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1263* field:
1264* eg:
1265* "+cnum: 123456\n+cnum: 456"
1266* value:12345;456;
1267* @param value_len [IN] <value_len>: The value length.
1268
1269* @return:AT error code
1270*/
1271static int parse_at_result(char response[],char value[],int value_len)
1272{
1273 if(response == NULL || value == NULL)
1274 {
1275 LYERRLOG("parameter invalid");
q.huang52921662022-10-20 15:25:45 +08001276 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001277 }
1278 if(strstr(response,"ERROR"))
1279 {
1280 int i;
1281 for(i = 0;i < strlen(response);i++)
1282 {
1283 if(response[i]==':')
1284 {
1285 break;
1286 }
1287 }
1288 if(i < strlen(response))
1289 {
1290 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1291 return atoi(response+i+1);
1292 }
1293 else
1294 {
1295 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1296 return 100; //unknown
1297 }
1298 }
1299 else if(strstr(response,"OK"))
1300 {
1301 /** parse the at response value
1302 * eg:
1303 * --> at+cnum
1304 * <-- +CNUM:"1243452"
1305 * need parse the "1243452" to <value>
1306 *@ To-Do
1307 */
1308 int count;
1309 int resp_addr[32] = {0};
1310 char temp_buf[1024] = {0};
1311 char *dest;
1312 dest = NULL;
1313 count = 0;
1314 int res_len = strlen(response);
1315 LYINFLOG("res_len:%d",res_len);
1316 for(int i = 0; i < res_len; i++)
1317 {
1318 if(response[i]==':')
1319 {
1320 resp_addr[count] = i;
1321 count++;
1322 }
1323 if(response[i] == '\n')
1324 {
1325 response[i] = '\0';
1326 }
1327 }
1328 LYINFLOG("count:%d",count);
1329 if(count > 0)
1330 {
1331 for(int i = 0; i < count; i++)
1332 {
1333 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1334 {
1335 LYINFLOG("2 will be out of range\n");
1336 break;
1337 }
1338 if(strlen(temp_buf) >= 1023)
1339 {
1340 LYINFLOG("1 will be out of range\n");
1341 break;
1342 }
1343 strcat(temp_buf,response+resp_addr[i]+2);
1344
1345 if(strlen(temp_buf) >= 1023)
1346 {
1347 LYINFLOG("1 will be out of range\n");
1348 break;
1349 }
1350 strcat(temp_buf,";");
1351 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1352 }
1353 LYINFLOG("parse_result:%s\n",temp_buf);
1354 if(strlen(temp_buf) > value_len)
1355 {
1356 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1357 memcpy(value,temp_buf,value_len);
1358 }
1359 else
1360 {
1361 memcpy(value,temp_buf,strlen(temp_buf));
1362 }
1363 }
q.huang52921662022-10-20 15:25:45 +08001364 return RESULT_OK;
lh3a26dd52022-07-01 04:44:57 -07001365 }
1366 else
1367 {
1368 LYINFLOG("%s this response invalid\n",response);
q.huang52921662022-10-20 15:25:45 +08001369 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001370 }
1371}
lh3a26dd52022-07-01 04:44:57 -07001372
1373int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1374{
q.huang52921662022-10-20 15:25:45 +08001375 if(g_module_init_flag != MODULE_RUNNING)
1376 {
1377 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1378 return LYNQ_E_CONFLICT;
1379 }
1380
q.huang7de1d662022-09-13 14:19:24 +08001381 if((mode < 0) || (mode >1) || (mode == 0 && NULL == interval) || (NULL == result))
lh3a26dd52022-07-01 04:44:57 -07001382 {
q.huang7de1d662022-09-13 14:19:24 +08001383 LYERRLOG("%s mode %d interval %s result %s error",__func__,mode,interval,result);
q.huang52921662022-10-20 15:25:45 +08001384 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001385 }
1386
q.huang7de1d662022-09-13 14:19:24 +08001387 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001388 int ret;
q.huang7de1d662022-09-13 14:19:24 +08001389
lh3a26dd52022-07-01 04:44:57 -07001390 if(mode == 0)
1391 {
q.huang52921662022-10-20 15:25:45 +08001392 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 -07001393 }
q.huang7de1d662022-09-13 14:19:24 +08001394 else
lh3a26dd52022-07-01 04:44:57 -07001395 {
q.huang52921662022-10-20 15:25:45 +08001396 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG?");
lh3a26dd52022-07-01 04:44:57 -07001397 }
q.huang7de1d662022-09-13 14:19:24 +08001398
q.huang52921662022-10-20 15:25:45 +08001399 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001400 {
q.huang52921662022-10-20 15:25:45 +08001401 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1402 return ret;
1403 }
q.huang7de1d662022-09-13 14:19:24 +08001404
q.huang52921662022-10-20 15:25:45 +08001405 int recv_len;
1406 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1407 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
q.huang7de1d662022-09-13 14:19:24 +08001408
q.huang52921662022-10-20 15:25:45 +08001409 LYINFLOG("get recover timer interval");
1410 p->readInt32(&recv_len);
1411 if(recv_len == -1)
1412 {
1413 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001414 delete p;
q.huang52921662022-10-20 15:25:45 +08001415 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001416 }
q.huang52921662022-10-20 15:25:45 +08001417 else
1418 {
1419 LYINFLOG("recv_len:%d",recv_len);
1420 p->read(response_interval,recv_len);
1421 }
1422 LYINFLOG("response_interval:%s",response_interval);
1423 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1424 if(mode == 1)
1425 {
1426 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1427 {
1428 memcpy(result,res_data,strlen(res_data));
1429 }
1430 }
1431 LYERRLOG("%s ret:%d",__func__,ret);
1432 delete p;
1433 return ret;
lh3a26dd52022-07-01 04:44:57 -07001434}
1435
1436int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1437{
q.huang52921662022-10-20 15:25:45 +08001438 if(g_module_init_flag != MODULE_RUNNING)
1439 {
1440 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1441 return LYNQ_E_CONFLICT;
1442 }
1443 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
lh3a26dd52022-07-01 04:44:57 -07001444 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1445 {
q.huang52921662022-10-20 15:25:45 +08001446 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);
1447 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001448 }
1449
q.huang7de1d662022-09-13 14:19:24 +08001450 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001451 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 +08001452
q.huang52921662022-10-20 15:25:45 +08001453 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001454 {
q.huang52921662022-10-20 15:25:45 +08001455 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1456 return ret;
1457 }
1458
1459 int recv_len;
1460 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1461 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1462
1463 p->readInt32(&recv_len);
1464 if(recv_len == -1)
1465 {
1466 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001467 delete p;
q.huang52921662022-10-20 15:25:45 +08001468 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001469 }
q.huang52921662022-10-20 15:25:45 +08001470 else
1471 {
1472 LYINFLOG("recv_len:%d",recv_len);
1473 p->read(response_interval,recv_len);
1474 }
1475 LYINFLOG("response_interval:%s",response_interval);
1476 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1477 LYERRLOG("%s ret:%d",__func__,ret);
1478 delete p;
1479 return ret;
1480
lh3a26dd52022-07-01 04:44:57 -07001481}
1482#endif
1483