blob: dd45fdc7fe67ee6f7b57f1ac449a0336670fdbaa [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
q.huang36833592023-04-04 16:46:26 +0800760int lynq_radio_on(const lynq_network_radio_on_type type)
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.huang36833592023-04-04 16:46:26 +0800767 if (type != NETWORK_RADIO_ON_TYPE_CFUN_0 && type != NETWORK_RADIO_ON_TYPE_NORMAL_MODE && type!=NETWORK_RADIO_ON_TYPE_FLIGHT_MODE)
rjw7e50cd32022-01-18 18:30:37 +0800768 {
q.huang36833592023-04-04 16:46:26 +0800769 LYERRLOG("%s parameter %d error",__func__,type);
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;
q.huang36833592023-04-04 16:46:26 +0800774 int ret;
775
776 if(type==NETWORK_RADIO_ON_TYPE_CFUN_0)
777 {
778 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN=0");
779 }
780 else
781 {
782 ret=lynq_send_common_request(p,65,RIL_REQUEST_RADIO_POWER,1,"%d",(type==NETWORK_RADIO_ON_TYPE_NORMAL_MODE));
783 }
rjw7e50cd32022-01-18 18:30:37 +0800784
q.huang52921662022-10-20 15:25:45 +0800785 if(ret!=RESULT_OK)
786 {
787 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
788 return ret;
789 }
790
q.huang36833592023-04-04 16:46:26 +0800791 LYINFLOG("%s set %d suc",__func__,type);
q.huang52921662022-10-20 15:25:45 +0800792 delete p;
793 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800794}
795
q.huang7de1d662022-09-13 14:19:24 +0800796const char * lynq_get_raw_data(Parcel* &p, int* data_len)
q.huang16dcb0f2022-09-07 09:17:37 +0800797{
rjw776c85f2022-10-21 15:09:21 +0800798 int32_t len;
q.huang16dcb0f2022-09-07 09:17:37 +0800799 int status;
800 char *data;
801
802 *data_len=0;
rjw776c85f2022-10-21 15:09:21 +0800803
q.huang7de1d662022-09-13 14:19:24 +0800804 status = p->readInt32(&len);
rjw776c85f2022-10-21 15:09:21 +0800805
q.huang16dcb0f2022-09-07 09:17:37 +0800806 if (status != 0) {
807 LYERRLOG("%s status is %d",__func__,status);
808 return NULL;
rjw776c85f2022-10-21 15:09:21 +0800809 }
810
811 // The java code writes -1 for null arrays
q.huang16dcb0f2022-09-07 09:17:37 +0800812 if (((int)len) == -1 || ((int)len) == 0)
813 {
814 LYERRLOG("%s len is %d",__func__,len);
815 return NULL;
816 }
817 LYINFLOG("%s len is %d",__func__,len);
rjw776c85f2022-10-21 15:09:21 +0800818
q.huang7de1d662022-09-13 14:19:24 +0800819 data = (char*) p->readInplace(len);
q.huang16dcb0f2022-09-07 09:17:37 +0800820 *data_len=len;
rjw776c85f2022-10-21 15:09:21 +0800821
q.huang16dcb0f2022-09-07 09:17:37 +0800822 return data;
823}
824
825int lynq_query_radio_state(int *radio_state)
826{
q.huang52921662022-10-20 15:25:45 +0800827 if(g_module_init_flag != MODULE_RUNNING)
828 {
829 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
830 return LYNQ_E_CONFLICT;
831 }
q.huang16dcb0f2022-09-07 09:17:37 +0800832 if(NULL == radio_state)
833 {
834 LYERRLOG("%s radio state is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800835 return LYNQ_E_PARAMETER_ANONALY;
q.huang16dcb0f2022-09-07 09:17:37 +0800836 }
837
q.huang7de1d662022-09-13 14:19:24 +0800838 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800839 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN");
840 if(ret!=RESULT_OK)
q.huang16dcb0f2022-09-07 09:17:37 +0800841 {
q.huang52921662022-10-20 15:25:45 +0800842 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
843 return ret;
844 }
q.huang7de1d662022-09-13 14:19:24 +0800845
q.huang52921662022-10-20 15:25:45 +0800846 int bfind=false;
847 const char* data;
848 int data_len;
849 char* data_str;
850 char* start;
851 int length;
852 int i;
853 int num_start;
854 data = lynq_get_raw_data(p,&data_len);
855 if(data==NULL || data_len == 0)
856 {
857 LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);
q.huang7de1d662022-09-13 14:19:24 +0800858 delete p;
q.huang52921662022-10-20 15:25:45 +0800859 return LYNQ_E_INNER_ERROR;
q.huang16dcb0f2022-09-07 09:17:37 +0800860 }
q.huang52921662022-10-20 15:25:45 +0800861 data_str = (char*) calloc(1,data_len+1);
862 if (NULL == data_str)
863 {
864 LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);
865 delete p;
866 return LYNQ_E_MALLOC_ERROR;
867 }
868 memmove(data_str, data, data_len);
869 data_str[data_len]='\0';
870 LYINFLOG("%s return string is %s",__func__,data_str);
871 start = strstr(data_str,"CFUN");
872 if(start!=NULL)
873 {
874 start=start+4;
875 length=strlen(start);
876 for(i=0; i<length;i++)
877 {
878 if((!bfind) && (start[i] >= '0') && (start[i] <= '9'))
879 {
880 bfind=true;
881 num_start=i;
882 }
883 else if(bfind && ((start[i] < '0') || (start[i] > '9')))
884 {
885 start[i]='\0';
886 break;
887 }
888 }
889 if(bfind)
890 {
891 (*radio_state) = atoi(start+num_start);
892 LYINFLOG("%s, radio state is %s %d",__func__,start+num_start,*radio_state);
893 free(data_str);
894 delete p;
895 return RESULT_OK;
896 }
897 }
898 LYERRLOG("%s return string %s no cfun or no digit",__func__,data_str);
899 free(data_str);
900 delete p;
901 return LYNQ_E_INNER_ERROR;
q.huang16dcb0f2022-09-07 09:17:37 +0800902}
903
rjw7e50cd32022-01-18 18:30:37 +0800904int lynq_query_radio_tech(int* radioTech)
905{
q.huang52921662022-10-20 15:25:45 +0800906 if(g_module_init_flag != MODULE_RUNNING)
907 {
908 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
909 return LYNQ_E_CONFLICT;
910 }
rjw7e50cd32022-01-18 18:30:37 +0800911 if(NULL == radioTech)
rjw7e50cd32022-01-18 18:30:37 +0800912 {
q.huang7de1d662022-09-13 14:19:24 +0800913 LYERRLOG("%s radio tech is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800914 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +0800915 }
rjw7e50cd32022-01-18 18:30:37 +0800916
q.huang7de1d662022-09-13 14:19:24 +0800917 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800918 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_VOICE_RADIO_TECH,0,"");
919
920 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800921 {
q.huang52921662022-10-20 15:25:45 +0800922 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
923 return ret;
924 }
q.huang7de1d662022-09-13 14:19:24 +0800925
q.huang52921662022-10-20 15:25:45 +0800926 int num;
927 p->readInt32(&num);
928 p->readInt32(radioTech);
q.huang7de1d662022-09-13 14:19:24 +0800929
q.huang52921662022-10-20 15:25:45 +0800930 LYINFLOG("%s suc",__func__);
931 delete p;
932 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +0800933}
934
935int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
936{
q.huang52921662022-10-20 15:25:45 +0800937 if(g_module_init_flag != MODULE_RUNNING)
938 {
939 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
940 return LYNQ_E_CONFLICT;
941 }
rjw7e50cd32022-01-18 18:30:37 +0800942 if(NULL == solSigStren)
rjw7e50cd32022-01-18 18:30:37 +0800943 {
q.huang7de1d662022-09-13 14:19:24 +0800944 LYERRLOG("%s parameter is NULL",__func__);
q.huang52921662022-10-20 15:25:45 +0800945 return LYNQ_E_PARAMETER_ANONALY;
rjw7e50cd32022-01-18 18:30:37 +0800946 }
947
q.huang7de1d662022-09-13 14:19:24 +0800948 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +0800949 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,"");
950 if(ret!=RESULT_OK)
rjw46769c92022-07-04 21:17:25 +0800951 {
q.huang52921662022-10-20 15:25:45 +0800952 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
953 return ret;
954 }
955
956 int sum = 0;
957 int LTE_signalstrength = 0;
958 int WCDMA_signalstrength = 0;
959 int none = 0;
rjw7e50cd32022-01-18 18:30:37 +0800960
q.huang52921662022-10-20 15:25:45 +0800961 p->readInt32(&solSigStren->rssi);
962 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
963 {
964 solSigStren->gw_sig_valid = 1;
965 }else{
966 solSigStren->gw_sig_valid = 0;
rjw7e50cd32022-01-18 18:30:37 +0800967 }
q.huang7de1d662022-09-13 14:19:24 +0800968
q.huang52921662022-10-20 15:25:45 +0800969 p->readInt32(&none);
970 p->readInt32(&none);
971 p->readInt32(&none);
972 p->readInt32(&none);
973 p->readInt32(&none);
974 p->readInt32(&none);
975 p->readInt32(&none);
976 p->readInt32(&LTE_signalstrength);
977 // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
978 p->readInt32(&solSigStren->rsrp);
979 p->readInt32(&solSigStren->rsrq);
980 p->readInt32(&solSigStren->rssnr);
981 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
982 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
983 {
984 solSigStren->lte_sig_valid = 1;
985 }else{
986 solSigStren->lte_sig_valid = 0;
987 }
q.huang7de1d662022-09-13 14:19:24 +0800988
q.huang52921662022-10-20 15:25:45 +0800989 p->readInt32(&none);
990 p->readInt32(&none);
991 p->readInt32(&none);
992 p->readInt32(&none);
993 p->readInt32(&none);
994 p->readInt32(&WCDMA_signalstrength);
995 p->readInt32(&none);
996 p->readInt32(&solSigStren->rscp);
997 p->readInt32(&solSigStren->ecno);
998 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
999 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1000 {
1001 solSigStren->wcdma_sig_valid = 1;
1002 }else{
1003 solSigStren->wcdma_sig_valid = 0;
1004 }
1005 /*bug fix*/
1006 p->readInt32(&solSigStren->ssRsrp);
1007 p->readInt32(&solSigStren->ssRsrq);
1008 p->readInt32(&solSigStren->ssSinr);
1009 p->readInt32(&solSigStren->csiRsrp);
1010 p->readInt32(&solSigStren->csiRsrq);
1011 p->readInt32(&solSigStren->csiSinr);
1012 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1013 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1014 if(sum != 0)
1015 {
1016 solSigStren->nr_sig_valid = 1;
1017 }else{
1018 LYERRLOG("None of NR signal info");
1019 }
1020
1021 LYINFLOG("%s suc",__func__);
1022 delete p;
1023 return RESULT_OK;
rjw7e50cd32022-01-18 18:30:37 +08001024}
rjwbc8a05f2022-03-02 15:23:11 +08001025
rjw4a5a78d2022-03-10 11:04:24 +08001026int lynq_set_ims(const int ims_mode)
1027{
q.huang52921662022-10-20 15:25:45 +08001028 if(g_module_init_flag != MODULE_RUNNING)
q.huang7de1d662022-09-13 14:19:24 +08001029 {
q.huang52921662022-10-20 15:25:45 +08001030 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1031 return LYNQ_E_CONFLICT;
q.huang7de1d662022-09-13 14:19:24 +08001032 }
rjw4a5a78d2022-03-10 11:04:24 +08001033 if (ims_mode < 0 || ims_mode > 1)
1034 {
q.huang7de1d662022-09-13 14:19:24 +08001035 LYERRLOG("%s parameter %d error",__func__,ims_mode);
q.huang52921662022-10-20 15:25:45 +08001036 return LYNQ_E_PARAMETER_ANONALY;
q.huang7de1d662022-09-13 14:19:24 +08001037 }
rjw4a5a78d2022-03-10 11:04:24 +08001038
q.huang52921662022-10-20 15:25:45 +08001039 Parcel* p=NULL;
1040 int ret = lynq_send_common_request(p,65,RIL_REQUEST_SET_IMS_ENABLE,1,"%d",ims_mode);
1041 if(ret!=RESULT_OK)
1042 {
1043 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1044 return ret;
1045 }
1046
1047 LYINFLOG("%s set %d suc",__func__,ims_mode);
1048 delete p;
1049 return RESULT_OK;
rjw4a5a78d2022-03-10 11:04:24 +08001050}
1051
q.huang52921662022-10-20 15:25:45 +08001052/*Used to get urc info*/
1053int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1054{
1055 if(g_module_init_flag != MODULE_RUNNING)
1056 {
1057 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1058 return LYNQ_E_CONFLICT;
1059 }
1060 LYDBGLOG("start get urc info");
1061 if(handle != RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED &&handle != RIL_UNSOL_SIGNAL_STRENGTH)
1062 {
1063 LYINFLOG("invalid handle!!!");
1064 return LYNQ_E_PARAMETER_ANONALY;
1065 }
1066 if((handle ==RIL_UNSOL_SIGNAL_STRENGTH && NULL == solSigStren) ||
1067 (handle ==RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED && NULL == slot_id))
1068 {
1069 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1070 return LYNQ_E_PARAMETER_ANONALY;
1071 }
1072 switch(handle)
1073 {
1074 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: //1002
1075 {
1076 LYDBGLOG("get state update to VOICE");
1077 *slot_id = s_module_urc_slot_id;
1078 LYINFLOG("slot_id = %d",s_module_urc_slot_id);
1079 break;
1080 }
1081 case RIL_UNSOL_SIGNAL_STRENGTH: //1009
1082 {
1083 LYDBGLOG("get state update to signal info");
1084 solSigStren->gw_sig_valid = s_network_urc_solSigStren.gw_sig_valid;
1085 solSigStren->rssi = s_network_urc_solSigStren.rssi;
1086 solSigStren->wcdma_sig_valid = s_network_urc_solSigStren.wcdma_sig_valid;
1087 solSigStren->rscp = s_network_urc_solSigStren.rscp;
1088 solSigStren->ecno = s_network_urc_solSigStren.ecno;
1089 solSigStren->lte_sig_valid = s_network_urc_solSigStren.lte_sig_valid;
1090 solSigStren->rsrp = s_network_urc_solSigStren.rsrp;
1091 solSigStren->rsrq = s_network_urc_solSigStren.rsrq;
1092 solSigStren->rssnr = s_network_urc_solSigStren.rssnr;
1093 solSigStren->nr_sig_valid = s_network_urc_solSigStren.nr_sig_valid;
1094 solSigStren->ssRsrp = s_network_urc_solSigStren.ssRsrp;
1095 solSigStren->ssRsrq = s_network_urc_solSigStren.ssRsrq;
1096 solSigStren->ssSinr = s_network_urc_solSigStren.ssSinr;
1097 solSigStren->csiRsrp = s_network_urc_solSigStren.csiRsrp;
1098 solSigStren->csiRsrq = s_network_urc_solSigStren.csiRsrq;
1099 solSigStren->csiSinr = s_network_urc_solSigStren.csiSinr;
1100 break;
1101 }
1102 }
1103 return RESULT_OK;
1104}
1105
1106static pthread_mutex_t urc_signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
1107static pthread_cond_t urc_signal_state_change_cond = PTHREAD_COND_INITIALIZER;
1108
1109int wait_urc_signal_changes()
1110{
1111 pthread_mutex_lock(&urc_signal_state_change_mutex);
1112 pthread_cond_wait(&urc_signal_state_change_cond,&urc_signal_state_change_mutex);
1113 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1114 return RESULT_OK;
1115}
1116
1117void send_urc_signal_changes()
1118{
1119 pthread_mutex_lock(&urc_signal_state_change_mutex);
1120 pthread_cond_signal(&urc_signal_state_change_cond);
1121 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1122 return;
1123}
1124
q.huang036b6cf2023-01-10 14:29:20 +08001125bool is_support_urc(int urc_id)
1126{
1127 switch(urc_id)
1128 {
1129 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1130 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1131 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1132 case RIL_UNSOL_SIGNAL_STRENGTH:
1133 return true;
1134 default:
1135 return false;
1136 }
1137}
1138
q.huang52921662022-10-20 15:25:45 +08001139void urc_msg_process(Parcel *p)
1140{
1141 int resp_type;
1142 int none = 0;
1143 int NR_sum = 0;
1144 int urc_LTE_signalstrength = 0;
1145 int urc_WCDMA_signalstrength = 0;
1146
q.huang036b6cf2023-01-10 14:29:20 +08001147 int size=p->dataSize();
q.huang52921662022-10-20 15:25:45 +08001148 p->readInt32(&resp_type);
1149 p->readInt32(&s_module_wait_urc_id);
1150 p->readInt32(&s_module_urc_slot_id);
q.huang036b6cf2023-01-10 14:29:20 +08001151 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 +08001152 switch(s_module_wait_urc_id)
1153 {
1154 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1155 {
1156 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);
1157 send_urc_signal_changes();
1158 break;
1159 }
1160 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1161 {
1162 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);
1163 send_urc_signal_changes();
1164 break;
1165 }
1166 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1167 {
1168 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);
1169 send_urc_signal_changes();
1170 break;
1171 }
1172 case RIL_UNSOL_SIGNAL_STRENGTH:
1173 {
1174 p->readInt32(&s_network_urc_solSigStren.rssi);
1175 if((s_network_urc_solSigStren.rssi!=99)&&(s_network_urc_solSigStren.rssi!=0))
1176 {
1177 s_network_urc_solSigStren.gw_sig_valid = 1;
1178 }else{
1179 s_network_urc_solSigStren.gw_sig_valid = 0;
1180 }
1181 if(s_network_urc_solSigStren.gw_sig_valid == 1)
1182 {
1183 LYINFLOG("urc_GSM_signalstrength:%d",s_network_urc_solSigStren.rssi);
1184 }
1185 p->readInt32(&none);
1186 p->readInt32(&none);
1187 p->readInt32(&none);
1188 p->readInt32(&none);
1189 p->readInt32(&none);
1190 p->readInt32(&none);
1191 p->readInt32(&none);
1192 p->readInt32(&urc_LTE_signalstrength);
1193 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1194 p->readInt32(&s_network_urc_solSigStren.rsrp);
1195 p->readInt32(&s_network_urc_solSigStren.rsrq);
1196 p->readInt32(&s_network_urc_solSigStren.rssnr);
1197 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
1198 {
1199 s_network_urc_solSigStren.lte_sig_valid = 1;
1200 }else{
1201 s_network_urc_solSigStren.lte_sig_valid = 0;
1202 }
1203 if(s_network_urc_solSigStren.lte_sig_valid == 1)
1204 {
1205 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
1206 }
1207 p->readInt32(&none);
1208 p->readInt32(&none);
1209 p->readInt32(&none);
1210 p->readInt32(&none);
1211 p->readInt32(&none);
1212 p->readInt32(&urc_WCDMA_signalstrength);
1213 p->readInt32(&none);
1214 p->readInt32(&s_network_urc_solSigStren.rscp);
1215 p->readInt32(&s_network_urc_solSigStren.ecno);
1216 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
1217 {
1218 s_network_urc_solSigStren.wcdma_sig_valid = 1;
1219 }else{
1220 s_network_urc_solSigStren.wcdma_sig_valid = 0;
1221 }
1222 if(s_network_urc_solSigStren.wcdma_sig_valid == 1)
1223 {
1224 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
1225 }
1226 p->readInt32(&s_network_urc_solSigStren.ssRsrp);
1227 p->readInt32(&s_network_urc_solSigStren.ssRsrq);
1228 p->readInt32(&s_network_urc_solSigStren.ssSinr);
1229 p->readInt32(&s_network_urc_solSigStren.csiRsrp);
1230 p->readInt32(&s_network_urc_solSigStren.csiRsrq);
1231 p->readInt32(&s_network_urc_solSigStren.csiSinr);
1232 NR_sum = (s_network_urc_solSigStren.ssRsrp) + (s_network_urc_solSigStren.ssRsrq) + (s_network_urc_solSigStren.ssSinr) + (s_network_urc_solSigStren.csiRsrp)+\
1233 (s_network_urc_solSigStren.csiRsrq) + (s_network_urc_solSigStren.csiSinr);
1234 if(NR_sum != 0)
1235 {
1236 s_network_urc_solSigStren.nr_sig_valid = 1;
1237 }else{
1238 s_network_urc_solSigStren.nr_sig_valid = 0;
1239 }
1240 if(s_network_urc_solSigStren.nr_sig_valid == 1)
1241 {
1242 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
1243 s_network_urc_solSigStren.ssRsrp,s_network_urc_solSigStren.ssRsrq,s_network_urc_solSigStren.ssSinr, \
1244 s_network_urc_solSigStren.csiRsrp,s_network_urc_solSigStren.csiRsrq,s_network_urc_solSigStren.csiSinr);
1245 }
1246 send_urc_signal_changes();
1247 break;
1248 }
1249 }
1250}
rjw4a5a78d2022-03-10 11:04:24 +08001251
rjwbc8a05f2022-03-02 15:23:11 +08001252/*Used to wait for an update signal*/
1253int lynq_wait_signalchanges(int *handle)
1254{
1255 LYDBGLOG("start wait signalchanges info");
1256 if(NULL == handle)
1257 {
1258 LYERRLOG("illegal input");
q.huang52921662022-10-20 15:25:45 +08001259 return LYNQ_E_PARAMETER_ANONALY;
rjwbc8a05f2022-03-02 15:23:11 +08001260 }
q.huang52921662022-10-20 15:25:45 +08001261 wait_urc_signal_changes();
rjwbc8a05f2022-03-02 15:23:11 +08001262 LYDBGLOG("get signalchanges");
q.huang52921662022-10-20 15:25:45 +08001263 *handle = s_module_wait_urc_id;
1264 return RESULT_OK;
rjw4200a082022-05-17 17:58:35 +08001265}
lh3a26dd52022-07-01 04:44:57 -07001266
q.huang52921662022-10-20 15:25:45 +08001267#ifdef MODEM_GEN97
lh3a26dd52022-07-01 04:44:57 -07001268/**@brief parse at response,return error code,and the response
1269* @param response [IN] <response>:original at response,This parameter must be a character array.
1270
1271* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1272* field:
1273* eg:
1274* "+cnum: 123456\n+cnum: 456"
1275* value:12345;456;
1276* @param value_len [IN] <value_len>: The value length.
1277
1278* @return:AT error code
1279*/
1280static int parse_at_result(char response[],char value[],int value_len)
1281{
1282 if(response == NULL || value == NULL)
1283 {
1284 LYERRLOG("parameter invalid");
q.huang52921662022-10-20 15:25:45 +08001285 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001286 }
1287 if(strstr(response,"ERROR"))
1288 {
1289 int i;
1290 for(i = 0;i < strlen(response);i++)
1291 {
1292 if(response[i]==':')
1293 {
1294 break;
1295 }
1296 }
1297 if(i < strlen(response))
1298 {
1299 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1300 return atoi(response+i+1);
1301 }
1302 else
1303 {
1304 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1305 return 100; //unknown
1306 }
1307 }
1308 else if(strstr(response,"OK"))
1309 {
1310 /** parse the at response value
1311 * eg:
1312 * --> at+cnum
1313 * <-- +CNUM:"1243452"
1314 * need parse the "1243452" to <value>
1315 *@ To-Do
1316 */
1317 int count;
1318 int resp_addr[32] = {0};
1319 char temp_buf[1024] = {0};
1320 char *dest;
1321 dest = NULL;
1322 count = 0;
1323 int res_len = strlen(response);
1324 LYINFLOG("res_len:%d",res_len);
1325 for(int i = 0; i < res_len; i++)
1326 {
1327 if(response[i]==':')
1328 {
1329 resp_addr[count] = i;
1330 count++;
1331 }
1332 if(response[i] == '\n')
1333 {
1334 response[i] = '\0';
1335 }
1336 }
1337 LYINFLOG("count:%d",count);
1338 if(count > 0)
1339 {
1340 for(int i = 0; i < count; i++)
1341 {
1342 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1343 {
1344 LYINFLOG("2 will be out of range\n");
1345 break;
1346 }
1347 if(strlen(temp_buf) >= 1023)
1348 {
1349 LYINFLOG("1 will be out of range\n");
1350 break;
1351 }
1352 strcat(temp_buf,response+resp_addr[i]+2);
1353
1354 if(strlen(temp_buf) >= 1023)
1355 {
1356 LYINFLOG("1 will be out of range\n");
1357 break;
1358 }
1359 strcat(temp_buf,";");
1360 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1361 }
1362 LYINFLOG("parse_result:%s\n",temp_buf);
1363 if(strlen(temp_buf) > value_len)
1364 {
1365 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1366 memcpy(value,temp_buf,value_len);
1367 }
1368 else
1369 {
1370 memcpy(value,temp_buf,strlen(temp_buf));
1371 }
1372 }
q.huang52921662022-10-20 15:25:45 +08001373 return RESULT_OK;
lh3a26dd52022-07-01 04:44:57 -07001374 }
1375 else
1376 {
1377 LYINFLOG("%s this response invalid\n",response);
q.huang52921662022-10-20 15:25:45 +08001378 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001379 }
1380}
lh3a26dd52022-07-01 04:44:57 -07001381
1382int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1383{
q.huang52921662022-10-20 15:25:45 +08001384 if(g_module_init_flag != MODULE_RUNNING)
1385 {
1386 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1387 return LYNQ_E_CONFLICT;
1388 }
1389
q.huang7de1d662022-09-13 14:19:24 +08001390 if((mode < 0) || (mode >1) || (mode == 0 && NULL == interval) || (NULL == result))
lh3a26dd52022-07-01 04:44:57 -07001391 {
q.huang7de1d662022-09-13 14:19:24 +08001392 LYERRLOG("%s mode %d interval %s result %s error",__func__,mode,interval,result);
q.huang52921662022-10-20 15:25:45 +08001393 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001394 }
1395
q.huang7de1d662022-09-13 14:19:24 +08001396 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001397 int ret;
q.huang7de1d662022-09-13 14:19:24 +08001398
lh3a26dd52022-07-01 04:44:57 -07001399 if(mode == 0)
1400 {
q.huang52921662022-10-20 15:25:45 +08001401 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 -07001402 }
q.huang7de1d662022-09-13 14:19:24 +08001403 else
lh3a26dd52022-07-01 04:44:57 -07001404 {
q.huang52921662022-10-20 15:25:45 +08001405 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG?");
lh3a26dd52022-07-01 04:44:57 -07001406 }
q.huang7de1d662022-09-13 14:19:24 +08001407
q.huang52921662022-10-20 15:25:45 +08001408 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001409 {
q.huang52921662022-10-20 15:25:45 +08001410 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1411 return ret;
1412 }
q.huang7de1d662022-09-13 14:19:24 +08001413
q.huang52921662022-10-20 15:25:45 +08001414 int recv_len;
1415 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1416 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
q.huang7de1d662022-09-13 14:19:24 +08001417
q.huang52921662022-10-20 15:25:45 +08001418 LYINFLOG("get recover timer interval");
1419 p->readInt32(&recv_len);
1420 if(recv_len == -1)
1421 {
1422 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001423 delete p;
q.huang52921662022-10-20 15:25:45 +08001424 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001425 }
q.huang52921662022-10-20 15:25:45 +08001426 else
1427 {
1428 LYINFLOG("recv_len:%d",recv_len);
1429 p->read(response_interval,recv_len);
1430 }
1431 LYINFLOG("response_interval:%s",response_interval);
1432 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1433 if(mode == 1)
1434 {
1435 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1436 {
1437 memcpy(result,res_data,strlen(res_data));
1438 }
1439 }
1440 LYERRLOG("%s ret:%d",__func__,ret);
1441 delete p;
1442 return ret;
lh3a26dd52022-07-01 04:44:57 -07001443}
1444
1445int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1446{
q.huang52921662022-10-20 15:25:45 +08001447 if(g_module_init_flag != MODULE_RUNNING)
1448 {
1449 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1450 return LYNQ_E_CONFLICT;
1451 }
1452 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) ||
lh3a26dd52022-07-01 04:44:57 -07001453 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1454 {
q.huang52921662022-10-20 15:25:45 +08001455 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);
1456 return LYNQ_E_PARAMETER_ANONALY;
lh3a26dd52022-07-01 04:44:57 -07001457 }
1458
q.huang7de1d662022-09-13 14:19:24 +08001459 Parcel* p=NULL;
q.huang52921662022-10-20 15:25:45 +08001460 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 +08001461
q.huang52921662022-10-20 15:25:45 +08001462 if(ret!=RESULT_OK)
lh3a26dd52022-07-01 04:44:57 -07001463 {
q.huang52921662022-10-20 15:25:45 +08001464 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1465 return ret;
1466 }
1467
1468 int recv_len;
1469 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1470 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1471
1472 p->readInt32(&recv_len);
1473 if(recv_len == -1)
1474 {
1475 LYINFLOG("no responset");
q.huang7de1d662022-09-13 14:19:24 +08001476 delete p;
q.huang52921662022-10-20 15:25:45 +08001477 return LYNQ_E_INNER_ERROR;
lh3a26dd52022-07-01 04:44:57 -07001478 }
q.huang52921662022-10-20 15:25:45 +08001479 else
1480 {
1481 LYINFLOG("recv_len:%d",recv_len);
1482 p->read(response_interval,recv_len);
1483 }
1484 LYINFLOG("response_interval:%s",response_interval);
1485 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1486 LYERRLOG("%s ret:%d",__func__,ret);
1487 delete p;
1488 return ret;
1489
lh3a26dd52022-07-01 04:44:57 -07001490}
1491#endif
1492