blob: 13a2318c9075e74a7cd67c5441800bcf1be480a7 [file] [log] [blame]
you.chen5ef374a2023-12-26 17:25:16 +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>
12#include <vendor-ril/telephony/mtk_ril_sp.h>
13#include "liblog/lynq_deflog.h"
14#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
20#define LYNQ_TYPE_BUF 10
21#define USER_LOG_TAG "LYNQ_NETWORK"
22
23/*in CR AUTO00210807 MTK confirm set network selection mode max time is 14min 30s, first set 5 min 10s*/
24#define WAIT_TIME_LENGTH_FOR_SET_NETWORK_SELECTION_MODE (310)
25/*in CR AUTO00207414, in modem, 23G detach need 10s, 5g ims detach need 5s, so set length to 12s */
26#define WAIT_TIME_LENGTH_FOR_SET_PREFFERRED_NETWORK_TYPE (12)
27/*For T800-API-1475, cfun 0 need 7s */
28#define WAIT_TIME_LENGTH_FOR_RADIO_ON (65)
29
30#define SET_SBP_OPEN " AT+ESBP=5,\"SBP_NRRC_BAR_CELL_WITH_CONNECTION_FAILURE\",1 "
31#define SET_SBP_CLOSE " AT+ESBP=5,\"SBP_NRRC_BAR_CELL_WITH_CONNECTION_FAILURE\",0 "
32#define QUERY_SBP_STATUS "AT+ESBP=7,\"SBP_NRRC_BAR_CELL_WITH_CONNECTION_FAILURE\""
33#define OPEN 1
34#define CLOSE 0
35
36
37using ::android::Parcel;
38
39static int s_module_wait_urc_id;
40static int s_module_urc_slot_id;
41static signalStrength_t s_network_urc_solSigStren;
42
43/**g_module_init_flag
44* @brief mark network initialization state
45* 0:deinit status
46* 1:init state
47*/
48int g_module_init_flag = 0;
49
50int lynq_network_init(int utoken){
51
52 LYLOGSET(LOG_INFO);
53 LYLOGEINIT(USER_LOG_TAG);
54
55 LYERRLOG("%s start, parameter is %d", __func__,utoken);
56
57 if(g_module_init_flag != MODULE_CLOSED)
58 {
59 LYERRLOG("module state is %d",g_module_init_flag);
60 return LYNQ_E_CONFLICT;
61 }
62
63 if(utoken <0){
64 LYERRLOG("utoken is less than 0",utoken);
65 return LYNQ_E_PARAMETER_ANONALY;
66 }
67
68 g_module_init_flag = MODULE_SWITCHING;
69
70 g_module_Global_uToken = utoken;
71
72 int ret;
73
74 init_network_timer_all();
75
76 ret = lynq_start_all_urc_socket_thread();
77 if(ret != 0)
78 {
79 LYERRLOG("init socket urc fail!!!");
80 g_module_init_flag = MODULE_CLOSED;
81 return LYNQ_E_INNER_ERROR;
82 }
83
84 ret = lynq_start_all_rc_socket_thread();
85 if(ret !=0)
86 {
87 LYERRLOG("init socket client fail!!!");
88 lynq_close_all_urc_socket_thread();
89 g_module_init_flag = MODULE_CLOSED;
90 return LYNQ_E_INNER_ERROR;
91 }
92 g_module_init_flag = MODULE_RUNNING;
93
94 LYERRLOG("%s end suc", __func__);
95
96 return RESULT_OK;
97}
98
99int lynq_network_deinit(void){
100
101 LYERRLOG("%s start", __func__);
102
103 if (g_module_init_flag != MODULE_RUNNING)
104 {
105 LYERRLOG("module state is %d",g_module_init_flag);
106 return LYNQ_E_CONFLICT;
107 }
108 g_module_init_flag = MODULE_SWITCHING;
109
110 lynq_close_all_urc_socket_thread();
111 lynq_close_all_rc_socket_thread();
112 deinit_network_timer_all();
113
114 g_module_init_flag = MODULE_CLOSED;
115
116 LYERRLOG("%s end suc", __func__);
117 return RESULT_OK;
118}
119
120int strUpper(char * str)
121{
122 int i=0;
123 while(1)
124 {
125 if(str[i]=='\0')
126 {
127 break;
128 }
129 if(str[i]>='a'&&str[i]<='z')
130 {
131 str[i]=str[i]-32;
132 }
133 i++;
134 }
135 return RESULT_OK;
136}
137
138int copyCellInfoList(Parcel* &p,uint64_t *cellinfo,int *tac,int *earfcn)
139{
140 int32_t v=0;
141 int64_t v6=0;
142 if(NULL == cellinfo)
143 {
144 LYERRLOG("*cellinfo error");
145 return LYNQ_E_PARAMETER_ANONALY;
146 }
147
148 int nothing = 0;
149 int tmp_uint64 = 0;
150 p->readInt32(&v);
151 RIL_CellInfoType cellinfoType = RIL_CellInfoType(v);
152 p->readInt32(&nothing);
153 // cellinfo->cellinfo.cellInfoType = RIL_CellInfoType(v);
154 // p->readInt32(&cellinfo->cellinfo.registered);
155 p->readInt32(&v);
156 // cellinfo->cellinfo.timeStampType = RIL_TimeStampType(v);
157 p->readInt64(&v6);
158 // cellinfo->cellinfo.timeStamp = v6;
159 switch(cellinfoType) {
160 case RIL_CELL_INFO_TYPE_GSM: {
161 p->readInt32(&nothing);
162 p->readInt32(&nothing);
163 p->readInt32(&nothing);
164 p->readInt32(&tmp_uint64);
165 p->readInt32(&nothing);
166 p->readInt32(&nothing);
167 p->readInt32(&nothing);
168 *cellinfo = (uint64_t)tmp_uint64;
169 tac = &nothing;
170 earfcn = &nothing;
171 break;
172 }
173 case RIL_CELL_INFO_TYPE_WCDMA: {
174 p->readInt32(&nothing);
175 p->readInt32(&nothing);
176 p->readInt32(&nothing);
177 p->readInt32(&tmp_uint64);
178 p->readInt32(&nothing);
179 p->readInt32(&nothing);
180 p->readInt32(&nothing);
181 *cellinfo = (uint64_t)tmp_uint64;
182 tac = &nothing;
183 earfcn = &nothing;
184 break;
185 }
186 case RIL_CELL_INFO_TYPE_CDMA: {
187 p->readInt32(&nothing);
188 p->readInt32(&nothing);
189 p->readInt32(&nothing);
190 p->readInt32(&nothing);
191 p->readInt32(&nothing);
192 p->readInt32(&nothing);
193 p->readInt32(&nothing);
194 p->readInt32(&nothing);
195 p->readInt32(&nothing);
196 p->readInt32(&nothing);
197 cellinfo = 0;
198 tac = &nothing;
199 earfcn = &nothing;
200 break;
201 }
202 case RIL_CELL_INFO_TYPE_LTE: {
203 p->readInt32(&nothing);
204 p->readInt32(&nothing);
205 p->readInt32(&tmp_uint64);
206 p->readInt32(&nothing);
207 p->readInt32(tac);
208 p->readInt32(earfcn);
209 p->readInt32(&nothing);
210 p->readInt32(&nothing);
211 p->readInt32(&nothing);
212 p->readInt32(&nothing);
213 p->readInt32(&nothing);
214 p->readInt32(&nothing);
215 *cellinfo = (uint64_t)tmp_uint64;
216 break;
217 }
218 case RIL_CELL_INFO_TYPE_TD_SCDMA: {
219 p->readInt32(&nothing);
220 p->readInt32(&nothing);
221 p->readInt32(&nothing);
222 p->readInt32(&tmp_uint64);
223 p->readInt32(&nothing);
224 p->readInt32(&nothing);
225 *cellinfo = (uint64_t)tmp_uint64;
226 tac = &nothing;
227 earfcn = &nothing;
228 break;
229 }
230 case RIL_CELL_INFO_TYPE_NR: {
231 p->readInt32(&nothing);
232 p->readInt32(&nothing);
233 p->readUint64(cellinfo);
234 p->readInt32(&nothing);
235 p->readInt32(tac);
236 p->readInt32(earfcn);
237 p->readInt32(&nothing);
238 p->readInt32(&nothing);
239 p->readInt32(&nothing);
240 p->readInt32(&nothing);
241 p->readInt32(&nothing);
242 p->readInt32(&nothing);
243 break;
244 }
245 }
246 LYINFLOG("CID in fUNC :%llu",*cellinfo);
247 LYINFLOG("tac in fUNC :%d",*tac);
248 LYINFLOG("earfcn in fUNC :%d",*earfcn);
249 return RESULT_OK;
250}
251
252static char * lynqStrdupReadString(Parcel* &p) {
253 size_t stringlen;
254 const char16_t *s16;
255
256 s16 = p->readString16Inplace(&stringlen);
257 return strndup16to8(s16, stringlen);
258}
259
260int lynq_query_operater(char *OperatorFN,char *OperatorSH,char *MccMnc)
261{
262 if(g_module_init_flag != MODULE_RUNNING)
263 {
264 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
265 return LYNQ_E_CONFLICT;
266 }
267
268 if(NULL == OperatorFN||NULL == OperatorSH|| NULL == MccMnc)
269 {
270 LYERRLOG("%s some parameter OperatorFN OperatorSH MccMnc %s %s %s is NULL",__func__,OperatorFN,OperatorSH,MccMnc);
271 return LYNQ_E_PARAMETER_ANONALY;
272 }
273
274 Parcel* p=NULL;
275 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OPERATOR,0,"");
276
277 if(ret!=RESULT_OK)
278 {
279 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
280 return ret;
281 }
282
283 int num ;
284 char *resp[LYNQ_RESP_STRING_MAX_NUM];
285
286 p->readInt32(&num);
287 if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)
288 {
289 LYERRLOG("no paramters or num %d too great",num);
290 delete p;
291 return LYNQ_E_INNER_ERROR;
292 }else{
293 int i;
294 for(i = 0; i<num;i++)
295 {
296 resp[i] = lynqStrdupReadString(p);
297 }
298 if(NULL != resp[0])
299 {
300 strcpy(OperatorFN,resp[0]);
301 }
302 if(NULL != resp[1])
303 {
304 strcpy(OperatorSH,resp[1]);
305 }
306 if(NULL != resp[2])
307 {
308 strcpy(MccMnc,resp[2]);
309 }
310 for(i = 0; i<num;i++)
311 {
312 if(resp[i]!=NULL)
313 {
314 free(resp[i]);
315 }
316 }
317 }
318
319 LYINFLOG("%s suc",__func__);
320 delete p;
321 return RESULT_OK;
322}
323
324int lynq_query_network_selection_mode(int *netselMode)
325{
326 if(g_module_init_flag != MODULE_RUNNING)
327 {
328 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
329 return LYNQ_E_CONFLICT;
330 }
331
332 if(NULL == netselMode)
333 {
334 LYERRLOG("%s parameter is NULL",__func__);
335 return LYNQ_E_PARAMETER_ANONALY;
336 }
337
338 Parcel* p=NULL;
339 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE,0,"");
340
341 if(ret!=RESULT_OK)
342 {
343 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
344 return ret;
345 }
346
347 int readnum;
348 p->readInt32(&readnum);
349 p->readInt32(netselMode);
350
351 LYINFLOG("%s suc",__func__);
352 delete p;
353 return RESULT_OK;
354}
355
356int lynq_set_network_selection_mode(const char *mode,const char* mccmnc)
357{
358 if(g_module_init_flag != MODULE_RUNNING)
359 {
360 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
361 return LYNQ_E_CONFLICT;
362 }
363
364 if(NULL == mode || (strlen(mode) == 0))
365 {
366 LYERRLOG("%s parameter mod %s is error",__func__,mode);
367 return LYNQ_E_PARAMETER_ANONALY;
368 }
369
370 if(!strcmp(mode,"Manual"))
371 {
372 if(mccmnc == NULL || strlen(mccmnc) == 0)
373 {
374 LYERRLOG("%s parameter mccmnc %s is error",__func__,mccmnc);
375 return LYNQ_E_PARAMETER_ANONALY;
376 }
377 }
378
379 Parcel* p=NULL;
380 int ret;
381
382 if(!strcmp(mode,"Auto"))
383 {
384 ret=lynq_send_common_request(p,WAIT_TIME_LENGTH_FOR_SET_NETWORK_SELECTION_MODE,RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC,0,"");
385 }
386 else if(!strcmp(mode,"Manual"))
387 {
388 ret=lynq_send_common_request(p,WAIT_TIME_LENGTH_FOR_SET_NETWORK_SELECTION_MODE,RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL,1,"%s",mccmnc);
389 }
390 else
391 {
392 LYERRLOG("%s parameter mode %s is errir",__func__,mode);
393 return LYNQ_E_PARAMETER_ANONALY;
394 }
395
396 if(ret!=RESULT_OK)
397 {
398 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
399 return ret;
400 }
401
402 LYINFLOG("%s set mode %s mccmnc %s suc",__func__,mode,mccmnc);
403 delete p;
404 return RESULT_OK;
405}
406
407int lynq_query_available_network(char *OperatorFN,char *OperatorSH,char *MccMnc,char * NetStatus)
408{
409 if(g_module_init_flag != MODULE_RUNNING)
410 {
411 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
412 return LYNQ_E_CONFLICT;
413 }
414 if(NULL == OperatorFN||NULL == OperatorSH||NULL == MccMnc||NULL == NetStatus)
415 {
416 LYERRLOG("%s there is parameter is NULL",__func__);
417 return LYNQ_E_PARAMETER_ANONALY;
418 }
419
420 Parcel* p=NULL;
421 int ret=lynq_send_common_request(p,600,RIL_REQUEST_QUERY_AVAILABLE_NETWORKS,0,"");
422
423 if(ret!=RESULT_OK)
424 {
425 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
426 return ret;
427 }
428
429 int num =p->readInt32();
430 char *resp[LYNQ_RESP_STRING_MAX_NUM];
431 if(num == 0 || num > LYNQ_RESP_STRING_MAX_NUM)
432 {
433 LYERRLOG("no paramters or num %d too great",num);
434 delete p;
435 return LYNQ_E_INNER_ERROR;
436 }else{
437 int i;
438 for(i = 0; i<num;i++)
439 {
440 resp[i] = lynqStrdupReadString(p);
441 }
442 if(NULL != resp[0])
443 {
444 strcpy(OperatorFN,resp[0]);
445 }
446 if(NULL != resp[1])
447 {
448 strcpy(OperatorSH,resp[1]);
449 }
450 if(NULL != resp[2])
451 {
452 strcpy(MccMnc,resp[2]);
453 }
454 if(NULL != resp[3])
455 {
456 strcpy(NetStatus,resp[3]);
457 }
458 for(i = 0; i<num;i++)
459 {
460 if(resp[i]!=NULL)
461 {
462 free(resp[i]);
463 }
464 }
465 }
466 delete p;
467 LYINFLOG("%s suc",__func__);
468 return RESULT_OK;
469}
470
471int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)
472{
473 if(g_module_init_flag != MODULE_RUNNING)
474 {
475 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
476 return LYNQ_E_CONFLICT;
477 }
478
479 if(NULL == type || NULL ==regState ||NULL ==imsRegState ||NULL ==LAC ||NULL ==CID ||NULL ==netType ||NULL ==radioTechFam || NULL == netRejected)
480 {
481 LYERRLOG("%s there is parameter is NULL",__func__);
482 return LYNQ_E_PARAMETER_ANONALY;
483 }
484 if(strlen(type)>LYNQ_TYPE_BUF)
485 {
486 LYERRLOG("[%s]the parameter is inavaliable !",__FUNCTION__);
487 return LYNQ_E_PARAMETER_ANONALY;
488 }
489
490 int request;
491 char str[LYNQ_TYPE_BUF];
492 memcpy(str,type,strlen(type)+1);
493 strUpper(str);
494 if(!strcmp(str,"VOICE"))
495 {
496 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)
497 {
498 return RESULT_OK;
499 }
500 request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
501 }else if(!strcmp(str,"DATA")){
502 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)
503 {
504 return RESULT_OK;
505 }
506 request = RIL_REQUEST_DATA_REGISTRATION_STATE;
507 }else if(!strcmp(str,"IMS")){
508 if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,imsRegState,radioTechFam,0)==0)
509 {
510 return RESULT_OK;
511 }
512 request = RIL_REQUEST_IMS_REGISTRATION_STATE;
513 }else{
514 LYERRLOG("request error");
515 return LYNQ_E_PARAMETER_ANONALY;
516 }
517
518 Parcel* p=NULL;
519 int ret=lynq_send_common_request(p,g_wait_time,request,0,"");
520
521 if(ret!=RESULT_OK)
522 {
523 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
524 return ret;
525 }
526
527 int num,i;
528 char *resp[LYNQ_RESP_STRING_MAX_NUM];
529 if(!strcmp(str,"VOICE"))
530 {
531 p->readInt32(&num);
532 if(num == 15)
533 {
534 for(i=0;i<15;i++)
535 {
536 resp[i]=lynqStrdupReadString(p);
537 }
538 *regState = atoi(resp[0]);
539 *netType = atoi(resp[3]);
540 *netRejected = atoi(resp[14]);
541 for(i=0;i<15;i++)
542 {
543 if(resp[i]!=NULL)
544 {
545 free(resp[i]);
546 }
547 }
548 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);
549 }
550 else
551 {
552 LYERRLOG("%s type %s num %d error",__func__,str,num);
553 delete p;
554 return LYNQ_E_INNER_ERROR;
555 }
556 }
557 else if(!strcmp(str,"DATA")){
558 p->readInt32(&num);
559 if(num == 11)
560 {
561 for(i=0;i<4;i++)
562 {
563 resp[i]=lynqStrdupReadString(p);
564 }
565 *regState = atoi(resp[0]);
566 strcpy(LAC,resp[1]);
567 strcpy(CID,resp[2]);
568 *netType = atoi(resp[3]);
569 for(i=0;i<4;i++)
570 {
571 if(resp[i]!=NULL)
572 {
573 free(resp[i]);
574 }
575 }
576 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);
577 }
578 else
579 {
580 LYERRLOG("%s type %s num %d error",__func__,str,num);
581 delete p;
582 return LYNQ_E_INNER_ERROR;
583 }
584
585 }
586 else // "IMS"
587 {
588 p->readInt32(&num);
589 if(num == 2)
590 {
591 p->readInt32(imsRegState);
592 p->readInt32(radioTechFam);
593 set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);
594 }
595 else
596 {
597 LYERRLOG("%s type %s num %d error",__func__,str,num);
598 delete p;
599 return LYNQ_E_INNER_ERROR;
600 }
601 }
602 LYINFLOG("%s suc",__func__);
603 delete p;
604 return RESULT_OK;
605}
606
607int lynq_query_prefferred_networktype(int *preNetType)
608{
609 if(g_module_init_flag != MODULE_RUNNING)
610 {
611 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
612 return LYNQ_E_CONFLICT;
613 }
614 if(NULL == preNetType)
615 {
616 LYERRLOG("%s there is parameter is NULL",__func__);
617 return LYNQ_E_PARAMETER_ANONALY;
618 }
619
620 Parcel* p=NULL;
621 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE,0,"");
622
623 if(ret!=RESULT_OK)
624 {
625 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
626 return ret;
627 }
628
629 int num;
630 p->readInt32(&num);
631 p->readInt32(preNetType);
632
633 LYINFLOG("%s suc",__func__);
634 delete p;
635 return RESULT_OK;
636}
637
638int lynq_set_prefferred_networktype(const int preffertype)
639{
640 if(g_module_init_flag != MODULE_RUNNING)
641 {
642 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
643 return LYNQ_E_CONFLICT;
644 }
645 if(preffertype < 0||preffertype >33)
646 {
647 LYERRLOG("%s parameter %d error",__func__,preffertype);
648 return LYNQ_E_PARAMETER_ANONALY;
649 }
650
651 Parcel* p=NULL;
652 int ret=lynq_send_common_request(p,WAIT_TIME_LENGTH_FOR_SET_PREFFERRED_NETWORK_TYPE,RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE,1,"%d",preffertype);
653
654 if(ret!=RESULT_OK)
655 {
656 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
657 return ret;
658 }
659
660 LYINFLOG("%s set %d suc",__func__,preffertype);
661 delete p;
662 return RESULT_OK;
663
664}
665
666int lynq_query_cell_info(uint64_t cellinfo[CELLINFO_MAX_NUM],int tac[CELLINFO_MAX_NUM],int earfcn[CELLINFO_MAX_NUM],int * realNum)
667{
668 if(g_module_init_flag != MODULE_RUNNING)
669 {
670 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
671 return LYNQ_E_CONFLICT;
672 }
673 if(NULL == realNum)
674 {
675 LYERRLOG("%s there is parameter is NULL",__func__);
676 return LYNQ_E_PARAMETER_ANONALY;
677 }
678
679 Parcel* p=NULL;
680 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_CELL_INFO_LIST,0,"");
681
682 if(ret!=RESULT_OK)
683 {
684 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
685 return ret;
686 }
687
688 int num;
689
690 p->readInt32(&num);
691 LYINFLOG("cell info num:%d",num);
692 *realNum = num;
693 for(int i = 0;i<num;i++)
694 {
695 copyCellInfoList(p,&cellinfo[i],&tac[i],&earfcn[i]);
696 }
697
698 LYINFLOG("%s suc",__func__);
699 delete p;
700 return RESULT_OK;
701}
702
703int lynq_set_unsol_cell_info_listrate(const int rate)
704{
705 if(g_module_init_flag != MODULE_RUNNING)
706 {
707 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
708 return LYNQ_E_CONFLICT;
709 }
710 Parcel* p=NULL;
711 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE,1,"%d",rate);
712
713 if(ret!=RESULT_OK)
714 {
715 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
716 return ret;
717 }
718
719 LYINFLOG("%s set %d suc",__func__,rate);
720 delete p;
721 return RESULT_OK;
722}
723
724int lynq_set_band_mode(const int bandmode)
725{
726 if(g_module_init_flag != MODULE_RUNNING)
727 {
728 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
729 return LYNQ_E_CONFLICT;
730 }
731 Parcel* p=NULL;
732 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_BAND_MODE,1,"%d",bandmode);
733
734 if(ret!=RESULT_OK)
735 {
736 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
737 return ret;
738 }
739
740 LYINFLOG("%s set %d suc",__func__,bandmode);
741 delete p;
742 return RESULT_OK;
743}
744
745int lynq_query_available_bandmode(int availBanMode[])
746{
747 if(g_module_init_flag != MODULE_RUNNING)
748 {
749 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
750 return LYNQ_E_CONFLICT;
751 }
752 if(NULL == availBanMode)
753 {
754 LYERRLOG("%s parameter is NULL",__func__);
755 return LYNQ_E_PARAMETER_ANONALY;
756 }
757
758 Parcel* p=NULL;
759 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE,0,"");
760 if(ret!=RESULT_OK)
761 {
762 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
763 return ret;
764 }
765
766 int num = 0;
767 int res = 0;
768 int i;
769
770 p->readInt32(&num);
771 LYINFLOG("num = %d",num);
772 availBanMode[0] = num;
773 for(i=1 ;i<=num;i++)
774 {
775 p->readInt32(&res);
776 availBanMode[i]=res;
777 }
778
779 LYINFLOG("%s suc",__func__);
780 delete p;
781 return RESULT_OK;
782}
783
784int lynq_radio_on(const lynq_network_radio_on_type type)
785{
786 if(g_module_init_flag != MODULE_RUNNING)
787 {
788 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
789 return LYNQ_E_CONFLICT;
790 }
791 if (type != NETWORK_RADIO_ON_TYPE_CFUN_0 && type != NETWORK_RADIO_ON_TYPE_NORMAL_MODE && type!=NETWORK_RADIO_ON_TYPE_FLIGHT_MODE)
792 {
793 LYERRLOG("%s parameter %d error",__func__,type);
794 return LYNQ_E_PARAMETER_ANONALY;
795 }
796
797 Parcel* p=NULL;
798 int ret;
799
800 if(type==NETWORK_RADIO_ON_TYPE_CFUN_0)
801 {
802 ret=lynq_send_common_request(p,WAIT_TIME_LENGTH_FOR_RADIO_ON,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN=0");
803 }
804 else
805 {
806 ret=lynq_send_common_request(p,WAIT_TIME_LENGTH_FOR_RADIO_ON,RIL_REQUEST_RADIO_POWER,1,"%d",(type==NETWORK_RADIO_ON_TYPE_NORMAL_MODE));
807 }
808
809 if(ret!=RESULT_OK)
810 {
811 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
812 return ret;
813 }
814
815 LYINFLOG("%s set %d suc",__func__,type);
816 delete p;
817 return RESULT_OK;
818}
819
820const char * lynq_get_raw_data(Parcel* &p, int* data_len)
821{
822 int32_t len;
823 int status;
824 char *data;
825
826 *data_len=0;
827
828 status = p->readInt32(&len);
829
830 if (status != 0) {
831 LYERRLOG("%s status is %d",__func__,status);
832 return NULL;
833 }
834
835 // The java code writes -1 for null arrays
836 if (((int)len) == -1 || ((int)len) == 0)
837 {
838 LYERRLOG("%s len is %d",__func__,len);
839 return NULL;
840 }
841 LYINFLOG("%s len is %d",__func__,len);
842
843 data = (char*) p->readInplace(len);
844 *data_len=len;
845
846 return data;
847}
848
849int lynq_query_radio_state(int *radio_state)
850{
851 if(g_module_init_flag != MODULE_RUNNING)
852 {
853 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
854 return LYNQ_E_CONFLICT;
855 }
856 if(NULL == radio_state)
857 {
858 LYERRLOG("%s radio state is NULL",__func__);
859 return LYNQ_E_PARAMETER_ANONALY;
860 }
861
862 Parcel* p=NULL;
863 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s","AT+CFUN");
864 if(ret!=RESULT_OK)
865 {
866 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
867 return ret;
868 }
869
870 int bfind=false;
871 const char* data;
872 int data_len;
873 char* data_str;
874 char* start;
875 int length;
876 int i;
877 int num_start;
878 data = lynq_get_raw_data(p,&data_len);
879 if(data==NULL || data_len == 0)
880 {
881 LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);
882 delete p;
883 return LYNQ_E_INNER_ERROR;
884 }
885 data_str = (char*) calloc(1,data_len+1);
886 if (NULL == data_str)
887 {
888 LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);
889 delete p;
890 return LYNQ_E_MALLOC_ERROR;
891 }
892 memmove(data_str, data, data_len);
893 data_str[data_len]='\0';
894 LYINFLOG("%s return string is %s",__func__,data_str);
895 start = strstr(data_str,"CFUN");
896 if(start!=NULL)
897 {
898 start=start+4;
899 length=strlen(start);
900 for(i=0; i<length;i++)
901 {
902 if((!bfind) && (start[i] >= '0') && (start[i] <= '9'))
903 {
904 bfind=true;
905 num_start=i;
906 }
907 else if(bfind && ((start[i] < '0') || (start[i] > '9')))
908 {
909 start[i]='\0';
910 break;
911 }
912 }
913 if(bfind)
914 {
915 (*radio_state) = atoi(start+num_start);
916 LYINFLOG("%s, radio state is %s %d",__func__,start+num_start,*radio_state);
917 free(data_str);
918 delete p;
919 return RESULT_OK;
920 }
921 }
922 LYERRLOG("%s return string %s no cfun or no digit",__func__,data_str);
923 free(data_str);
924 delete p;
925 return LYNQ_E_INNER_ERROR;
926}
927
928int lynq_query_radio_tech(int* radioTech)
929{
930 if(g_module_init_flag != MODULE_RUNNING)
931 {
932 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
933 return LYNQ_E_CONFLICT;
934 }
935 if(NULL == radioTech)
936 {
937 LYERRLOG("%s radio tech is NULL",__func__);
938 return LYNQ_E_PARAMETER_ANONALY;
939 }
940
941 Parcel* p=NULL;
942 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_VOICE_RADIO_TECH,0,"");
943
944 if(ret!=RESULT_OK)
945 {
946 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
947 return ret;
948 }
949
950 int num;
951 p->readInt32(&num);
952 p->readInt32(radioTech);
953
954 LYINFLOG("%s suc",__func__);
955 delete p;
956 return RESULT_OK;
957}
958
959int lynq_solicited_signal_strength(signalStrength_t *solSigStren)
960{
961 if(g_module_init_flag != MODULE_RUNNING)
962 {
963 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
964 return LYNQ_E_CONFLICT;
965 }
966 if(NULL == solSigStren)
967 {
968 LYERRLOG("%s parameter is NULL",__func__);
969 return LYNQ_E_PARAMETER_ANONALY;
970 }
971
972 Parcel* p=NULL;
973 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SIGNAL_STRENGTH,0,"");
974 if(ret!=RESULT_OK)
975 {
976 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
977 return ret;
978 }
979
980 int sum = 0;
981 int LTE_signalstrength = 0;
982 int WCDMA_signalstrength = 0;
983 int none = 0;
984
985 p->readInt32(&solSigStren->rssi);
986 if((solSigStren->rssi!=99)&&(solSigStren->rssi!=0))
987 {
988 solSigStren->gw_sig_valid = 1;
989 }else{
990 solSigStren->gw_sig_valid = 0;
991 }
992
993 p->readInt32(&none);
994 p->readInt32(&none);
995 p->readInt32(&none);
996 p->readInt32(&none);
997 p->readInt32(&none);
998 p->readInt32(&none);
999 p->readInt32(&none);
1000 p->readInt32(&LTE_signalstrength);
1001 // p->readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1002 p->readInt32(&solSigStren->rsrp);
1003 p->readInt32(&solSigStren->rsrq);
1004 p->readInt32(&solSigStren->rssnr);
1005 LYINFLOG("LTE_signalstrength:%d",LTE_signalstrength);
1006 if((LTE_signalstrength!=99)&&(LTE_signalstrength!=0))
1007 {
1008 solSigStren->lte_sig_valid = 1;
1009 }else{
1010 solSigStren->lte_sig_valid = 0;
1011 }
1012
1013 p->readInt32(&none);
1014 p->readInt32(&none);
1015 p->readInt32(&none);
1016 p->readInt32(&none);
1017 p->readInt32(&none);
1018 p->readInt32(&WCDMA_signalstrength);
1019 p->readInt32(&none);
1020 p->readInt32(&solSigStren->rscp);
1021 p->readInt32(&solSigStren->ecno);
1022 LYINFLOG("WCDMA_signalstrength:%d",WCDMA_signalstrength);
1023 if((WCDMA_signalstrength!=99)&&(WCDMA_signalstrength!=0))
1024 {
1025 solSigStren->wcdma_sig_valid = 1;
1026 }else{
1027 solSigStren->wcdma_sig_valid = 0;
1028 }
1029 /*bug fix*/
1030 p->readInt32(&solSigStren->ssRsrp);
1031 p->readInt32(&solSigStren->ssRsrq);
1032 p->readInt32(&solSigStren->ssSinr);
1033 p->readInt32(&solSigStren->csiRsrp);
1034 p->readInt32(&solSigStren->csiRsrq);
1035 p->readInt32(&solSigStren->csiSinr);
1036 sum = (solSigStren->ssRsrp) + (solSigStren->ssRsrq) + (solSigStren->ssSinr) + (solSigStren->csiRsrp)+\
1037 (solSigStren->csiRsrq) + (solSigStren->csiSinr);
1038 if(sum != 0)
1039 {
1040 solSigStren->nr_sig_valid = 1;
1041 }else{
1042 LYERRLOG("None of NR signal info");
1043 }
1044
1045 LYINFLOG("%s suc",__func__);
1046 delete p;
1047 return RESULT_OK;
1048}
1049
1050int lynq_set_ims(const int ims_mode)
1051{
1052 if(g_module_init_flag != MODULE_RUNNING)
1053 {
1054 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1055 return LYNQ_E_CONFLICT;
1056 }
1057 if (ims_mode < 0 || ims_mode > 1)
1058 {
1059 LYERRLOG("%s parameter %d error",__func__,ims_mode);
1060 return LYNQ_E_PARAMETER_ANONALY;
1061 }
1062
1063 Parcel* p=NULL;
1064 int ret = lynq_send_common_request(p,65,RIL_REQUEST_SET_IMS_ENABLE,1,"%d",ims_mode);
1065 if(ret!=RESULT_OK)
1066 {
1067 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1068 return ret;
1069 }
1070
1071 LYINFLOG("%s set %d suc",__func__,ims_mode);
1072 delete p;
1073 return RESULT_OK;
1074}
1075
1076/*Used to get urc info*/
1077int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id)
1078{
1079 if(g_module_init_flag != MODULE_RUNNING)
1080 {
1081 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1082 return LYNQ_E_CONFLICT;
1083 }
1084 LYDBGLOG("start get urc info");
1085 if(handle != RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED &&handle != RIL_UNSOL_SIGNAL_STRENGTH)
1086 {
1087 LYINFLOG("invalid handle!!!");
1088 return LYNQ_E_PARAMETER_ANONALY;
1089 }
1090 if((handle ==RIL_UNSOL_SIGNAL_STRENGTH && NULL == solSigStren) ||
1091 (handle ==RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED && NULL == slot_id))
1092 {
1093 LYINFLOG("incoming solSigStren or slot_id is NULL!!!");
1094 return LYNQ_E_PARAMETER_ANONALY;
1095 }
1096 switch(handle)
1097 {
1098 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: //1002
1099 {
1100 LYDBGLOG("get state update to VOICE");
1101 *slot_id = s_module_urc_slot_id;
1102 LYINFLOG("slot_id = %d",s_module_urc_slot_id);
1103 break;
1104 }
1105 case RIL_UNSOL_SIGNAL_STRENGTH: //1009
1106 {
1107 LYDBGLOG("get state update to signal info");
1108 solSigStren->gw_sig_valid = s_network_urc_solSigStren.gw_sig_valid;
1109 solSigStren->rssi = s_network_urc_solSigStren.rssi;
1110 solSigStren->wcdma_sig_valid = s_network_urc_solSigStren.wcdma_sig_valid;
1111 solSigStren->rscp = s_network_urc_solSigStren.rscp;
1112 solSigStren->ecno = s_network_urc_solSigStren.ecno;
1113 solSigStren->lte_sig_valid = s_network_urc_solSigStren.lte_sig_valid;
1114 solSigStren->rsrp = s_network_urc_solSigStren.rsrp;
1115 solSigStren->rsrq = s_network_urc_solSigStren.rsrq;
1116 solSigStren->rssnr = s_network_urc_solSigStren.rssnr;
1117 solSigStren->nr_sig_valid = s_network_urc_solSigStren.nr_sig_valid;
1118 solSigStren->ssRsrp = s_network_urc_solSigStren.ssRsrp;
1119 solSigStren->ssRsrq = s_network_urc_solSigStren.ssRsrq;
1120 solSigStren->ssSinr = s_network_urc_solSigStren.ssSinr;
1121 solSigStren->csiRsrp = s_network_urc_solSigStren.csiRsrp;
1122 solSigStren->csiRsrq = s_network_urc_solSigStren.csiRsrq;
1123 solSigStren->csiSinr = s_network_urc_solSigStren.csiSinr;
1124 break;
1125 }
1126 }
1127 return RESULT_OK;
1128}
1129
1130
1131/*****************************************
1132* @brief:sned at request ,close or open SBP
1133* @param count [IN]:sbp_flag 0:close 1:open
1134* @param sum [OUT]:NA
1135* @return :NA
1136* @todo:
1137* @see:NA
1138* @warning:NA
1139******************************************/
1140int lynq_set_feature_config_sbp(int sbp_flag)
1141{
1142 int ret = 0;
1143 Parcel* p=NULL;
1144
1145 if(sbp_flag != OPEN && sbp_flag != CLOSE)
1146 {
1147 LYERRLOG("Bad input paramater ,you need input 0 or 1 !!!");
1148 return RESULT_ERROR;
1149 }
1150 if(sbp_flag == OPEN)
1151 {
1152 ret = lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s",SET_SBP_OPEN);
1153 }
1154 else if(sbp_flag == CLOSE)
1155 {
1156 ret = lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s",SET_SBP_CLOSE);
1157 }
1158 if(ret != RESULT_OK)
1159 {
1160
1161 LYERRLOG("%s lynq_send_common_request failure, ret is %d",__func__,ret);
1162 return ret;
1163 }
1164 return 0;
1165}
1166
1167/*****************************************
1168* @brief:send at request,get sbp status
1169* @param count [IN]:NA
1170* @param sum [OUT]:sbp_status
1171* @return :NA
1172* @todo:
1173* @see:NA
1174* @warning:NA
1175******************************************/
1176int lynq_query_feature_config_sbp(int *sbp_status )
1177{
1178 int ret = 0;
1179 Parcel* p=NULL;
1180
1181 ret = lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"%s",QUERY_SBP_STATUS);
1182 if(ret != RESULT_OK)
1183 {
1184
1185 LYERRLOG("%s lynq_send_common_request failure, ret is %d",__func__,ret);
1186 return ret;
1187 }
1188
1189
1190 const char* data;
1191 int data_len;
1192 char* data_str;
1193 char* start;
1194 char status[8] = {'0'};
1195 data = lynq_get_raw_data(p,&data_len);
1196 if(data==NULL || data_len == 0)
1197 {
1198 LYERRLOG("%s lynq_get_raw_data NULL or data_len is 0",__func__);
1199 delete p;
1200 return LYNQ_E_INNER_ERROR;
1201 }
1202 data_str = (char*) calloc(1,data_len+1);
1203 if (NULL == data_str)
1204 {
1205 LYERRLOG("%s alloc mem error, data_len is %d",__func__,data_len+1);
1206 delete p;
1207 return LYNQ_E_MALLOC_ERROR;
1208 }
1209 memmove(data_str, data, data_len);
1210 data_str[data_len]='\0';
1211 LYINFLOG("%s return string is %s",__func__,data_str);
1212 start = strchr(data_str,':');
1213 if(start != NULL)
1214 {
1215 strncpy(status,start+1,4);
1216 *sbp_status = atoi(status);
1217 LYINFLOG("Query sbp status is %d",*sbp_status);
1218 return RESULT_OK;
1219
1220 }
1221 else
1222 {
1223 LYERRLOG("Query sbp status Failed");
1224 return LYNQ_E_INNER_ERROR;
1225 }
1226
1227}
1228
1229
1230static pthread_mutex_t urc_signal_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
1231static pthread_cond_t urc_signal_state_change_cond = PTHREAD_COND_INITIALIZER;
1232
1233int wait_urc_signal_changes()
1234{
1235 pthread_mutex_lock(&urc_signal_state_change_mutex);
1236 pthread_cond_wait(&urc_signal_state_change_cond,&urc_signal_state_change_mutex);
1237 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1238 return RESULT_OK;
1239}
1240
1241void send_urc_signal_changes()
1242{
1243 pthread_mutex_lock(&urc_signal_state_change_mutex);
1244 pthread_cond_signal(&urc_signal_state_change_cond);
1245 pthread_mutex_unlock(&urc_signal_state_change_mutex);
1246 return;
1247}
1248
1249bool is_support_urc(int urc_id)
1250{
1251 switch(urc_id)
1252 {
1253 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1254 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1255 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1256 case RIL_UNSOL_SIGNAL_STRENGTH:
1257 return true;
1258 default:
1259 return false;
1260 }
1261}
1262
1263void urc_msg_process(Parcel *p)
1264{
1265 int resp_type;
1266 int none = 0;
1267 int NR_sum = 0;
1268 int urc_LTE_signalstrength = 0;
1269 int urc_WCDMA_signalstrength = 0;
1270
1271 int size=p->dataSize();
1272 p->readInt32(&resp_type);
1273 p->readInt32(&s_module_wait_urc_id);
1274 p->readInt32(&s_module_urc_slot_id);
1275 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));
1276 switch(s_module_wait_urc_id)
1277 {
1278 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
1279 {
1280 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);
1281 send_urc_signal_changes();
1282 break;
1283 }
1284 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
1285 {
1286 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);
1287 send_urc_signal_changes();
1288 break;
1289 }
1290 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
1291 {
1292 set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);
1293 send_urc_signal_changes();
1294 break;
1295 }
1296 case RIL_UNSOL_SIGNAL_STRENGTH:
1297 {
1298 p->readInt32(&s_network_urc_solSigStren.rssi);
1299 if((s_network_urc_solSigStren.rssi!=99)&&(s_network_urc_solSigStren.rssi!=0))
1300 {
1301 s_network_urc_solSigStren.gw_sig_valid = 1;
1302 }else{
1303 s_network_urc_solSigStren.gw_sig_valid = 0;
1304 }
1305 if(s_network_urc_solSigStren.gw_sig_valid == 1)
1306 {
1307 LYINFLOG("urc_GSM_signalstrength:%d",s_network_urc_solSigStren.rssi);
1308 }
1309 p->readInt32(&none);
1310 p->readInt32(&none);
1311 p->readInt32(&none);
1312 p->readInt32(&none);
1313 p->readInt32(&none);
1314 p->readInt32(&none);
1315 p->readInt32(&none);
1316 p->readInt32(&urc_LTE_signalstrength);
1317 // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);
1318 p->readInt32(&s_network_urc_solSigStren.rsrp);
1319 p->readInt32(&s_network_urc_solSigStren.rsrq);
1320 p->readInt32(&s_network_urc_solSigStren.rssnr);
1321 if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))
1322 {
1323 s_network_urc_solSigStren.lte_sig_valid = 1;
1324 }else{
1325 s_network_urc_solSigStren.lte_sig_valid = 0;
1326 }
1327 if(s_network_urc_solSigStren.lte_sig_valid == 1)
1328 {
1329 LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);
1330 }
1331 p->readInt32(&none);
1332 p->readInt32(&none);
1333 p->readInt32(&none);
1334 p->readInt32(&none);
1335 p->readInt32(&none);
1336 p->readInt32(&urc_WCDMA_signalstrength);
1337 p->readInt32(&none);
1338 p->readInt32(&s_network_urc_solSigStren.rscp);
1339 p->readInt32(&s_network_urc_solSigStren.ecno);
1340 if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))
1341 {
1342 s_network_urc_solSigStren.wcdma_sig_valid = 1;
1343 }else{
1344 s_network_urc_solSigStren.wcdma_sig_valid = 0;
1345 }
1346 if(s_network_urc_solSigStren.wcdma_sig_valid == 1)
1347 {
1348 LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);
1349 }
1350 p->readInt32(&s_network_urc_solSigStren.ssRsrp);
1351 p->readInt32(&s_network_urc_solSigStren.ssRsrq);
1352 p->readInt32(&s_network_urc_solSigStren.ssSinr);
1353 p->readInt32(&s_network_urc_solSigStren.csiRsrp);
1354 p->readInt32(&s_network_urc_solSigStren.csiRsrq);
1355 p->readInt32(&s_network_urc_solSigStren.csiSinr);
1356 NR_sum = (s_network_urc_solSigStren.ssRsrp) + (s_network_urc_solSigStren.ssRsrq) + (s_network_urc_solSigStren.ssSinr) + (s_network_urc_solSigStren.csiRsrp)+\
1357 (s_network_urc_solSigStren.csiRsrq) + (s_network_urc_solSigStren.csiSinr);
1358 if(NR_sum != 0)
1359 {
1360 s_network_urc_solSigStren.nr_sig_valid = 1;
1361 }else{
1362 s_network_urc_solSigStren.nr_sig_valid = 0;
1363 }
1364 if(s_network_urc_solSigStren.nr_sig_valid == 1)
1365 {
1366 LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\
1367 s_network_urc_solSigStren.ssRsrp,s_network_urc_solSigStren.ssRsrq,s_network_urc_solSigStren.ssSinr, \
1368 s_network_urc_solSigStren.csiRsrp,s_network_urc_solSigStren.csiRsrq,s_network_urc_solSigStren.csiSinr);
1369 }
1370 send_urc_signal_changes();
1371 break;
1372 }
1373 }
1374}
1375
1376/*Used to wait for an update signal*/
1377int lynq_wait_signalchanges(int *handle)
1378{
1379 LYDBGLOG("start wait signalchanges info");
1380 if(NULL == handle)
1381 {
1382 LYERRLOG("illegal input");
1383 return LYNQ_E_PARAMETER_ANONALY;
1384 }
1385 wait_urc_signal_changes();
1386 LYDBGLOG("get signalchanges");
1387 *handle = s_module_wait_urc_id;
1388 return RESULT_OK;
1389}
1390
1391#ifdef MODEM_GEN97
1392/**@brief parse at response,return error code,and the response
1393* @param response [IN] <response>:original at response,This parameter must be a character array.
1394
1395* @param value [OUT] <value>: Used to receive the parsed value, if multiple values are separated by ";".
1396* field:
1397* eg:
1398* "+cnum: 123456\n+cnum: 456"
1399* value:12345;456;
1400* @param value_len [IN] <value_len>: The value length.
1401
1402* @return:AT error code
1403*/
1404static int parse_at_result(char response[],char value[],int value_len)
1405{
1406 if(response == NULL || value == NULL)
1407 {
1408 LYERRLOG("parameter invalid");
1409 return LYNQ_E_PARAMETER_ANONALY;
1410 }
1411 if(strstr(response,"ERROR"))
1412 {
1413 int i;
1414 for(i = 0;i < strlen(response);i++)
1415 {
1416 if(response[i]==':')
1417 {
1418 break;
1419 }
1420 }
1421 if(i < strlen(response))
1422 {
1423 LYINFLOG("parse_result:%d\n",atoi(response+i+1));
1424 return atoi(response+i+1);
1425 }
1426 else
1427 {
1428 LYINFLOG("%s parse_result:fail,this response invalid\n",response);
1429 return 100; //unknown
1430 }
1431 }
1432 else if(strstr(response,"OK"))
1433 {
1434 /** parse the at response value
1435 * eg:
1436 * --> at+cnum
1437 * <-- +CNUM:"1243452"
1438 * need parse the "1243452" to <value>
1439 *@ To-Do
1440 */
1441 int count;
1442 int resp_addr[32] = {0};
1443 char temp_buf[1024] = {0};
1444 char *dest;
1445 dest = NULL;
1446 count = 0;
1447 int res_len = strlen(response);
1448 LYINFLOG("res_len:%d",res_len);
1449 for(int i = 0; i < res_len; i++)
1450 {
1451 if(response[i]==':')
1452 {
1453 resp_addr[count] = i;
1454 count++;
1455 }
1456 if(response[i] == '\n')
1457 {
1458 response[i] = '\0';
1459 }
1460 }
1461 LYINFLOG("count:%d",count);
1462 if(count > 0)
1463 {
1464 for(int i = 0; i < count; i++)
1465 {
1466 if((strlen(temp_buf) + strlen(response+resp_addr[i]+2)) >= 1023)
1467 {
1468 LYINFLOG("2 will be out of range\n");
1469 break;
1470 }
1471 if(strlen(temp_buf) >= 1023)
1472 {
1473 LYINFLOG("1 will be out of range\n");
1474 break;
1475 }
1476 strcat(temp_buf,response+resp_addr[i]+2);
1477
1478 if(strlen(temp_buf) >= 1023)
1479 {
1480 LYINFLOG("1 will be out of range\n");
1481 break;
1482 }
1483 strcat(temp_buf,";");
1484 printf("parse_result[%d]:%s,strcated:%s\n",i,response+resp_addr[i]+2,temp_buf);
1485 }
1486 LYINFLOG("parse_result:%s\n",temp_buf);
1487 if(strlen(temp_buf) > value_len)
1488 {
1489 printf("result length over value:%ld,%d\n",strlen(temp_buf),value_len);
1490 memcpy(value,temp_buf,value_len);
1491 }
1492 else
1493 {
1494 memcpy(value,temp_buf,strlen(temp_buf));
1495 }
1496 }
1497 return RESULT_OK;
1498 }
1499 else
1500 {
1501 LYINFLOG("%s this response invalid\n",response);
1502 return LYNQ_E_INNER_ERROR;
1503 }
1504}
1505
1506int lynq_oos_recover_timer_interval(int mode, char interval[LY_RECOVER_TIMER_INTERVAL],char result[LY_RECOVER_TIMER_INTERVAL])
1507{
1508 if(g_module_init_flag != MODULE_RUNNING)
1509 {
1510 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1511 return LYNQ_E_CONFLICT;
1512 }
1513
1514 if((mode < 0) || (mode >1) || (mode == 0 && NULL == interval) || (NULL == result))
1515 {
1516 LYERRLOG("%s mode %d interval %s result %s error",__func__,mode,interval,result);
1517 return LYNQ_E_PARAMETER_ANONALY;
1518 }
1519
1520 Parcel* p=NULL;
1521 int ret;
1522
1523 if(mode == 0)
1524 {
1525 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG=%s",interval);
1526 }
1527 else
1528 {
1529 ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_OEM_HOOK_RAW,1,"AT+ERSCFG?");
1530 }
1531
1532 if(ret!=RESULT_OK)
1533 {
1534 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1535 return ret;
1536 }
1537
1538 int recv_len;
1539 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1540 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1541
1542 LYINFLOG("get recover timer interval");
1543 p->readInt32(&recv_len);
1544 if(recv_len == -1)
1545 {
1546 LYINFLOG("no responset");
1547 delete p;
1548 return LYNQ_E_INNER_ERROR;
1549 }
1550 else
1551 {
1552 LYINFLOG("recv_len:%d",recv_len);
1553 p->read(response_interval,recv_len);
1554 }
1555 LYINFLOG("response_interval:%s",response_interval);
1556 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1557 if(mode == 1)
1558 {
1559 if(strlen(res_data) <= LY_RECOVER_TIMER_INTERVAL)
1560 {
1561 memcpy(result,res_data,strlen(res_data));
1562 }
1563 }
1564 LYERRLOG("%s ret:%d",__func__,ret);
1565 delete p;
1566 return ret;
1567}
1568
1569int lynq_oos_deep_sleep_recover_timer_interval(int recovery_threshold,int fullband_timer,int sniffer_timer,int inactive_mode)
1570{
1571 if(g_module_init_flag != MODULE_RUNNING)
1572 {
1573 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
1574 return LYNQ_E_CONFLICT;
1575 }
1576 if(((recovery_threshold < 2) || (recovery_threshold > 10)) || (fullband_timer < 90) ||
1577 ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))
1578 {
1579 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);
1580 return LYNQ_E_PARAMETER_ANONALY;
1581 }
1582
1583 Parcel* p=NULL;
1584 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);
1585
1586 if(ret!=RESULT_OK)
1587 {
1588 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
1589 return ret;
1590 }
1591
1592 int recv_len;
1593 char res_data[LY_RECOVER_TIMER_INTERVAL] = {0};
1594 char response_interval[LY_RECOVER_TIMER_INTERVAL*2] = {0};
1595
1596 p->readInt32(&recv_len);
1597 if(recv_len == -1)
1598 {
1599 LYINFLOG("no responset");
1600 delete p;
1601 return LYNQ_E_INNER_ERROR;
1602 }
1603 else
1604 {
1605 LYINFLOG("recv_len:%d",recv_len);
1606 p->read(response_interval,recv_len);
1607 }
1608 LYINFLOG("response_interval:%s",response_interval);
1609 ret = parse_at_result(response_interval,res_data,LY_RECOVER_TIMER_INTERVAL);
1610 LYERRLOG("%s ret:%d",__func__,ret);
1611 delete p;
1612 return ret;
1613
1614}
1615#endif
1616