blob: 418fe86011de0561b1a02341ac1b9913eea05014 [file] [log] [blame]
you.chen5ef374a2023-12-26 17:25:16 +08001/*=============================================================================
2** FileName: lynq_common.cpp
3** Desc: lynq common
4** Author: Warren
5** Version: V1.0
6** LastChange: 2021-09-27
7** History:
8**=============================================================================*/
9
10#include <stdio.h>
11#include <string.h>
12#include <log/log.h>
13#include "lynq_common.h"
14#include "lynq_user.h"
15#include "common.h"
16#include <pthread.h>
17#define USB_BUF_SIZE 8192
18#include <liblog/lynq_deflog.h>
19#include <sys/time.h>
20#include "Phone_utils.h"
21#include "utils.h"
22#include "data_gdbus.h"
23usb_cmd_t Usb_commands[] = {
24#include "lynq_commands.h"
25};
26
27usb_at_transfer_t Usb_transfer_commands[] = {
28#include "lynq_at_transfer_table.h"
29};
30#undef LOG_TAG
31#define LOG_TAG "LYNQ_COMMON"
32
33extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX] = {};
34extern int apn_count = 0;
35extern char lynq_at[LYNQ_AT_LEN_MAX]= {};
36char mccmnc[8] = {0};
37pthread_cond_t lynq_at_cond = PTHREAD_COND_INITIALIZER;
38pthread_mutex_t lynq_at_mutex= PTHREAD_MUTEX_INITIALIZER;
39
40
41//int lynqSendToRil(int argc,char *argv[],int uToken);
42usb_at_transfer_t *lynqFindId(char *cmd)
43{
44 if(cmd==NULL)
45 {
46 RLOGD("lynqFindId CMD is NULL!!!");
47 return ((usb_at_transfer_t*)NULL);
48 }
49 for(int i=0;Usb_transfer_commands[i].cmdName;i++)
50 {
51 if (strcmp (cmd, Usb_transfer_commands[i].cmdName) == 0)
52 return (&Usb_transfer_commands[i]);
53 }
54 return ((usb_at_transfer_t*)NULL);
55}
56
57usb_cmd_t * lynqFindUsbEvent(char *cmd)
58{
59 if(cmd==NULL)
60 {
61 RLOGD("lynqFindUsbEvent CMD is NULL!!!");
62 return ((usb_cmd_t*)NULL);
63 }
64 printf("cmd =%s\n",cmd);
65 for(int i=0;Usb_commands[i].cmdName;i++)
66 {
67 if (strcmp (cmd, Usb_commands[i].cmdName) == 0)
68 return (&Usb_commands[i]);
69 }
70 return ((usb_cmd_t *)NULL);
71}
72
73int routeCmd(int request)
74{
75 switch (request)
76 {
77 case LYNQ_REQUEST_CGMI:
78 case LYNQ_REQUEST_GMI:
79 case LYNQ_REQUEST_CGACT:
80 case LYNQ_REQUEST_CGDCONT:
81 {
82 return LYNQ_GOTO_AT;
83 }
84 case LYNQ_REQUEST_ATD:
85 case LYNQ_REQUEST_LAPNACT:
86 case LYNQ_REQUEST_ELAPNACT:
87 case LYNQ_REQUEST_SCREEN_STATE:
88 case LYNQ_REQUEST_APN:
89 case LYNQ_REQUEST_SWITCH_SIM:
90 {
91 return LYNQ_GOTO_TELE_REQ;
92 }
93 case LYNQ_REQUEST_SEND_LOG_DATA:
94 {
95 return LYNQ_GOTO_PLAT_REQ;
96 }
97 case LYNQ_USER_REQUEST_GNSS:
98 case LYNQ_USER_REQUEST_OTHRE:
99 case LYNQ_REQUEST_INSIDE_VERSION:
100 case LYNQ_PLAT_LGMDS:
101 {
102 return LYNQ_GOTO_USER_REQ;
103 }
104 case LYNQ_REQUEST_RNDIS:
105 {
106
107 return LYNQ_GOTO_RNDIS_REQ;
108 }
109 case LYNQ_REQUEST_LINFO:
110 return LYNQ_GOTO_LINFO_REQ;
111 case LYNQ_REQUEST_FACTORY:
112 return LYNQ_GOTO_FACTORY;
113 case LYNQ_REQUEST_FOTA:
114 return LYNQ_GOTO_FOTA;
115 case LYNQ_REQUEST_TEMP:
116 return LYNQ_GOTO_TEMP;
117 default:
118 return -1;
119 }
120}
121int g_number(const char *p){
122 int cnt = 0;
123 while(*p != '\0'){
124 if(*p == ','){
125 cnt++;
126 }
127 *p++;
128 }
129 return cnt+4;//for count character string
130
131}
132int syncRespToUsb(int error_code)
133{
134 char BUF[32] = {};
135 int ret = -1;
136 int len = 0;
137 if(error_code==0)
138 {
139 len = write(ttyGS3_fd,"OK\n",3);
140 }
141 else
142 {
143 sprintf(BUF,"+CME ERROR: %d\n\0",error_code);
144 len = write(ttyGS3_fd,BUF,strlen(BUF));
145 }
146 if(len < 0)
147 {
148 perror("lynq resp write:");
149 return -1;
150 }
151 return 0;
152}
153void lynqSetArgv(char **argv, char** Point,const char* value)
154{
155 *argv=*Point;
156 sprintf(*argv, "%s", value);
157 (*Point) += (strlen(value)+1);
158}
159//argv[2]:0 send,1 list,2 get
160int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],char* parser_buf,int maxArgc)
161{
162 char *token;
163 char *str = test;
164 char *string;
165 char *parameter;
166 char* Point=parser_buf;
167 int cnt = g_number(cmd);
168 memcpy(test, cmd, strlen(cmd));
169 test[strlen(cmd)] = '\0';
170 argv[1] = (char *)cmd;
171 if(strstr(cmd,"=?"))
172 {
173 token = strtok(str, "=?");
174 //argv[0] = token;
175 argv[0] = strstr(token, "+")+1;
176 lynqSetArgv(&(argv[2]),&Point,"1");
177 while (token != NULL)
178 {
179 string = token;
180 token = strtok(NULL, "=?");
181 }
182 parameter = strtok(string, ",");
183 int i = 3;
184 while (parameter != NULL)
185 {
186 argv[i++] = parameter;
187 parameter = strtok(NULL, ",");
188 }
189 }
190 else if(strstr(cmd,"="))
191 {
192 lynqSetArgv(&(argv[2]),&Point,"0");
193 token = strtok(str, "=");
194 //argv[0] = token;
195 if(strstr(token, "+"))
196 {
197 argv[0] = strstr(token, "+")+1;
198 while (token != NULL)
199 {
200 string = token;
201 token = strtok(NULL, "=");
202 }
203 parameter = strtok(string, ",");
204 int i = 3;
205 while (parameter != NULL)
206 {
207 argv[i++] = parameter;
208 parameter = strtok(NULL, ",");
209 }
210 }
211 else
212 {
213 argv[0] = token;
214 }
215 }
216 else if(strstr(cmd,"?"))
217 {
218 lynqSetArgv(&(argv[2]),&Point,"2");
219 token = strtok(str, "?");
220 //argv[0] = token;
221 argv[0] = strstr(token, "+")+1;
222 while (token != NULL)
223 {
224 string = token;
225 token = strtok(NULL, "?");
226 }
227 parameter = strtok(string, ",");
228 int i = 3;
229 while (parameter != NULL)
230 {
231 argv[i++] = parameter;
232 parameter = strtok(NULL, ",");
233 }
234 }
235 else
236 {
237 lynqSetArgv(&(argv[2]),&Point,"0");
238 if(strstr(cmd,"+"))
239 {
240 argv[0] = test+3;
241 return 3;
242 }
243 else
244 {
245 RLOGD("sp test 01");
246 if(!strcmp(cmd, "ATA")){
247 lynqSetArgv(&(argv[0]),&Point,"ATA");
248 return 3;
249 }
250 if(!strcmp(cmd, "AT")){
251 lynqSetArgv(&(argv[0]),&Point,"AT");
252 return 3;
253 }
254 /*UNKNOW*/
255 else if(!strncmp(cmd, "ATD", 3)){
256 lynqSetArgv(&(argv[0]),&Point,"ATD");
257 argv[3] = test+3;
258 return 4;
259 }
260 else if(!strncmp(cmd, "ATE", 3)){
261 lynqSetArgv(&(argv[0]),&Point,"ATE");
262 argv[3] = test+3;
263 return 4;
264 }
265 else if(!strcmp(cmd, "ATH")){
266 lynqSetArgv(&(argv[0]),&Point,"ATH");
267 return 3;
268 }
269 else if(!strncmp(cmd, "ATI", 3)){
270 lynqSetArgv(&(argv[0]),&Point,"ATI");
271 argv[3] = test+3;
272 return 4;
273 }
274 else if(!strncmp(cmd, "ATL", 3)){
275 lynqSetArgv(&(argv[0]),&Point,"ATL");
276 argv[3] = test+3;
277 return 4;
278 }
279 else if(!strncmp(cmd, "ATO", 3)){
280 lynqSetArgv(&(argv[0]),&Point,"ATO");
281 argv[3] = test+3;
282 return 3;
283 }
284 /*ATP*/
285 /*
286 */
287 else if(!strncmp(cmd, "ATQ", 3)){
288 lynqSetArgv(&(argv[0]),&Point,"ATQ");
289 argv[3] = test+3;
290 return 4;
291 }
292 else if(!strncmp(cmd, "ATS3", 4)){
293 lynqSetArgv(&(argv[0]),&Point,"ATS3");
294 argv[3] = test+4;
295 return 4;
296 }
297 else if(!strncmp(cmd, "ATS4", 4)){
298 lynqSetArgv(&(argv[0]),&Point,"ATS4");
299 argv[3] = test+4;
300 return 4;
301 }
302 else if(!strncmp(cmd, "ATS5", 4)){
303 lynqSetArgv(&(argv[0]),&Point,"ATS5");
304 argv[3] = test+4;
305 return 4;
306 }
307 /*ATS6*/
308 /*
309 */
310 else if(!strncmp(cmd, "ATS7", 4)){
311 lynqSetArgv(&(argv[0]),&Point,"ATS7");
312 argv[3] = test+4;
313 return 4;
314 }
315 else if(!strncmp(cmd, "ATS8", 4)){
316 lynqSetArgv(&(argv[0]),&Point,"ATS8");
317 argv[3] = test+4;
318 return 4;
319 }
320 else if(!strncmp(cmd, "ATS10", 5)){
321 lynqSetArgv(&(argv[0]),&Point,"ATS10");
322 argv[3] = test+5;
323 return 4;
324 }
325 /*ATT*/
326 /*
327
328
329
330 */
331 else if(!strncmp(cmd, "ATV", 3)){
332 lynqSetArgv(&(argv[0]),&Point,"ATV");
333 argv[3] = test+3;
334 return 4;
335 }
336 /*ATX*/
337 /*
338
339
340
341 */
342 else if(!strncmp(cmd, "ATZ", 3)){
343 lynqSetArgv(&(argv[0]),&Point,"ATZ");
344 argv[3] = test+3;
345 return 4;
346 }
347 else if(!strncmp(cmd, "AT&F", 4)){
348 lynqSetArgv(&(argv[0]),&Point,"AT&F");
349 argv[3] = test+4;
350 return 4;
351 }
352 else
353 {
354 RLOGD("can't find this command");
355 return -1;
356 }
357 }
358 }
359 //char *testtest = strstr(argv[0], "+")+1;
360 //printf("testtest:%s\n", testtest);
361 //argv[0] = testtest;
362 //printf("%d\n", __FUNCTION__);
363 if(cnt > maxArgc)
364 return -1;
365 return cnt;
366}
367
368int CGMI(int argc,char*argv[],char *rilReq, int uToken)
369{
370 return 0;
371}
372int dialACall(int argc,char*argv[],char *rilReq, int uToken)
373{
374 if(argc < 4)
375 {
376 RLOGD("parameter error!!!");
377 return 1;
378 }
379 char *new_argv[3] = {};
380 new_argv[0] = (char *)rilReq;
381 new_argv[1] = argv[3];
382 new_argv[2] = "0";
383 android::lynqSendToRil(3,new_argv,uToken);
384 return 0;
385}
386int checkDataRegistration(int uToken)
387{
388 /*chech radio status*/
389 int ret = -1;
390 char *argv_temp[3]={};
391 argv_temp[0] = "RIL_REQUEST_DATA_REGISTRATION_STATE";
392 android::lynqSendToRil(1,argv_temp,uToken);
393 ret = lynqATWaitWithTime(10);
394 printf("ret=%d\n,current_data_reg=%d\n",ret,current_data_reg);
395 /*
396 if(ret == ETIMEDOUT)
397 {
398 int n = write(ttyGS3_fd,"+CME:ERROR 8004\n",strlen("+CME:ERROR 8004\n"));
399 if(n<0)
400 {
401 perror("lynq resp write:");
402 }
403 return -1;
404 }
405 */
406 if(current_data_reg!=0)
407 {
408 int n = write(ttyGS3_fd,"+CME ERROR: 1\n",strlen("+CME ERROR: 1\n"));
409 if(n<0)
410 {
411 perror("lynq resp write:");
412 }
413 return -1;
414 }
415 return 0;
416}
417int setupData(int argc,char*argv[],char *rilReq, int uToken)
418{
419 int status = 0;
420 int ret = -1;
421 if(argc < 4)
422 {
423 RLOGD("parameter error!!!");
424 return -1;
425 }
426 bzero(lynq_at,LYNQ_AT_LEN_MAX);
427 sprintf(lynq_at,"LAPNACT");
428 status = atoi(argv[3]);
429 char *new_argv[3] = {};
430 if(status==1)
431 {
432 ret = checkDataRegistration(uToken);
433 if(ret != 0)
434 {
435 RLOGD("[setupData] radio is not available!!!");
436 return -1;
437 }
438 new_argv[0] = (char *)rilReq;
439 android::lynqSendToRil(1,new_argv,uToken);
440 syncRespToUsb(0);
441 }
442 else if(status == 0)
443 {
444 new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
445 android::lynqSendToRil(1,new_argv,uToken);
446 }
447 return 0;
448}
449
450static void lynq_display_pdnstate(void)
451{
452 lynq_output_info("\n");
453 for(int i = 0;i < apn_count; i ++)
454 {
455 lynq_output_info("+ELAPNACT:%s,%s,%d,%s,%s\n", apn_table[i].apn, apn_table[i].apntype ,apn_table[i].pdpstate, apn_table[i].ifaceName, apn_table[i].address);
456 }
457 lynq_output_info("OK\n");
458 return;
459}
460
461int setupData_e(int argc,char*argv[],char *rilReq, int uToken)
462{
463 int status = 0;
464 int ret = -1;
465 char *new_argv[10] = {};
466 if(NULL == argv[2])
467 {
468 lynq_output_info("\n+ELAPNACT: 10\n");
469 return -1;
470 }
471 int type = atoi(argv[2]);
472 if(type == 0)
473 {
474 if(argc < 5)
475 {
476 RLOGD("parameter error!!!");
477 return 1;
478 }
479 status = atoi(argv[3]);
480 if(status == 1 )
481 {
482 ret = checkDataRegistration(uToken);
483 if(ret != 0)
484 {
485 RLOGD("[setupData] radio is not available!!!");
486 return -1;
487 }
488 new_argv[0] = (char *)rilReq;
489 new_argv[1] = argv[4];//apn
490 new_argv[2] = argv[5];//apntype
491 new_argv[3] = argv[6];//user
492 new_argv[4] = argv[7];//password
493 new_argv[5] = argv[8];//authType
494 new_argv[6] = argv[9];//normalprotocol
495 new_argv[7] = argv[10];//roamingprotocol
496 //memcpy(apn_table[apn_count].apn,argv[4],strlen(argv[4]));
497 //apn_count++;
498 android::lynqSendToRil(8,new_argv,uToken);
499 syncRespToUsb(0);
500 }
501 else if(status == 0)
502 {
503 new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
504 new_argv[1] = argv[4];//apntype
505 android::lynqSendToRil(2,new_argv,uToken);
506 }
507 }
508 else if (type == 1)
509 {
510 lynq_output_info("\n+ELAPNACT: (0-7)\n");
511 lynq_output_info("OK\n\n");
512 }
513 else if (type == 2)
514 {
515 lynq_display_pdnstate();
516 }
517 return 0;
518}
519
520int insert_apn_char(char *agc, char *id,char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
521{
522 char strtmp[10][64];
523 if (!strcmp(id,"null"))
524 {
525 sprintf(strtmp[0], "id=;");
526 }
527 else
528 {
529 sprintf(strtmp[0], "id=%s;", id);
530 }
531 if (!strcmp(mcc,"null"))
532 {
533 char mcc[8] = {0};
534 if(strlen(mccmnc))
535 {
536 strncpy(mcc, mccmnc, 3);
537 sprintf(strtmp[1], "mcc=%s;", mcc);
538 }
539 else
540 {
541 sprintf(strtmp[2], "mcc=;");
542 }
543 }
544 else
545 {
546 sprintf(strtmp[1], "mcc=%s;", mcc);
547 }
548 if (!strcmp(mnc,"null"))
549 {
550 if(strlen(mccmnc))
551 {
552 sprintf(strtmp[2], "mnc=%s;", mccmnc+3);
553 }
554 else
555 {
556 sprintf(strtmp[2], "mnc=;");
557 }
558 }
559 else
560 {
561 sprintf(strtmp[2], "mnc=%s;", mnc);
562 }
563 if (!strcmp(apn,"null"))
564 {
565 sprintf(strtmp[3], "apn=;");
566 }
567 else
568 {
569 sprintf(strtmp[3], "apn=%s;", apn);
570 }
571 if (!strcmp(apntype,"null"))
572 {
573 sprintf(strtmp[4], "apntype=;");
574 }
575 else
576 {
577 sprintf(strtmp[4], "type=%s;", apntype);
578 }
579 if (!strcmp(user,"null"))
580 {
581 sprintf(strtmp[5], "user=;");
582 }
583 else
584 {
585 sprintf(strtmp[5], "user=%s;", user);
586 }
587 if (!strcmp(password,"null"))
588 {
589 sprintf(strtmp[6], "password=;");
590 }
591 else
592 {
593 sprintf(strtmp[6], "password=%s;", password);
594 }
595 if (!strcmp(normalprotocol,"null"))
596 {
597 sprintf(strtmp[7], "protocol=;");
598 }
599 else
600 {
601 sprintf(strtmp[7], "normalprotocol=%s;", normalprotocol);
602 }
603 if (!strcmp(roamingprotocol,"null"))
604 {
605 sprintf(strtmp[8], "roamingprotocol=;");
606 }
607 else
608 {
609 sprintf(strtmp[8], "roamingprotocol=%s;", roamingprotocol);
610 }
611 if (!strcmp(carrier,"null"))
612 {
613 sprintf(strtmp[9], "carrier=;");
614 }
615 else
616 {
617 sprintf(strtmp[9], "carrier=%s;", carrier);
618 }
619 sprintf(agc, "%s%s%s%s%s%s%s%s%s%s",strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
620 return 0;
621}
622
623void lynq_req_mccmnc(int uToken)
624{
625 char *new_argv[10] = {};
626 new_argv[0] = "RIL_REQUEST_OPERATOR";
627 android::lynqSendToRil(1,new_argv,uToken);//for get mccmnc
628}
629
630int lynq_modify_apn_info(int argc,char*argv[],char *rilReq, int uToken)
631{
632 /*
633 argv[4];//id argv[5];//mcc argv[6];//mnc argv[7];//apn argv[8];//apntype argv[9];//user
634 argv[10];//password argv[11] normalprotocol argv[12] roamingprotocol
635 */
636 int operate = 0;
637 int ret = -1;
638 if(argc < 3)
639 {
640 RLOGD("parameter error!!!");
641 return 1;
642 }
643 if(argv[3] == NULL)
644 {
645 syncRespToUsb(100);
646 return -1;
647 }
648 char *new_argv[10] = {};
649 char apn_info[512];
650 operate = atoi(argv[3]);
651 new_argv[0] = (char *)rilReq;
652 if(operate == 0)//insert apn db
653 {
654 for(int i = 4; i < 14; i++)
655 {
656 if(argv[i] == NULL)
657 {
658 syncRespToUsb(100);
659 return -1;
660 }
661 }
662 lynq_req_mccmnc(uToken);
663 usleep(500*1000);
664 insert_apn_char(apn_info, argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
665 new_argv[1] = "0";
666 new_argv[2] = apn_info;
667 android::lynqSendToRil(3,new_argv,uToken);
668 usleep(100*1000);
669 syncRespToUsb(0);
670 }
671 else if(operate == 1)//delete apn db
672 {
673 if(argv[4] == NULL)
674 {
675 syncRespToUsb(100);
676 return -1;
677 }
678 sprintf(apn_info, "id=%s", argv[4]);
679 new_argv[1] = "1";
680 new_argv[2] = apn_info;
681 android::lynqSendToRil(3,new_argv,uToken);
682 usleep(100*1000);
683 syncRespToUsb(0);
684 }
685 else if(operate == 2)//query apn db
686 {
687 if(argv[4] == NULL)
688 {
689 syncRespToUsb(100);
690 return -1;
691 }
692 sprintf(apn_info, "id=%s", argv[4]);
693 new_argv[1] = "2";
694 new_argv[2] = apn_info;
695 android::lynqSendToRil(3,new_argv,uToken);
696 usleep(100*1000);
697 syncRespToUsb(0);
698 }
699 else if(operate == 3)//modify apn db
700 {
701 for(int i = 4; i < 14; i++)
702 {
703 printf("argv[%d] %s\n", i,argv[i]);
704 if(argv[i] == NULL)
705 {
706 syncRespToUsb(100);
707 return -1;
708 }
709 }
710 insert_apn_char(apn_info, argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
711 //sprintf(new_argv[1], "%d", operate);
712 new_argv[1] = "3";
713 new_argv[2] = apn_info;
714 android::lynqSendToRil(3,new_argv,uToken);
715 usleep(100*1000);
716 syncRespToUsb(0);
717 }
718 return 0;
719}
720
721static void lynq_get_current_card(void)
722{
723 int id = get_default_sim_all();
724 lynq_output_info("+LCSUS: %d\n", id);
725 lynq_output_info("OK\n");
726 return;
727}
728
729static void lynq_switch_card(char*argv[], char *rilReq, int uToken)
730{
731 int slot = 0;
732 int ret = -1;
733 char *new_argv[10] = {};
734 slot = atoi(argv[3]);
735 new_argv[0] = (char *)rilReq;
736 new_argv[1] = argv[3];
737 android::lynqSendToRil(2,new_argv,uToken);
738 return;
739}
740
741static void lynq_display_dsds_mode(void)
742{
743 lynq_output_info("+LCSUS: (0-1)\n");
744 lynq_output_info("OK\n");
745 return;
746}
747
748int lynq_dsds_support(int argc,char*argv[],char *rilReq, int uToken)
749{
750 if(argc < 4)
751 {
752 RLOGD("parameter error!!!");
753 return 1;
754 }
755 int type = atoi(argv[2]);
756 if(type == 2)//get mode
757 {
758 RLOGD("lynq_dsds_support get mode\n");
759 lynq_get_current_card();
760 }
761 else if(type == 0)//set mode
762 {
763 RLOGD("lynq_dsds_support set mode\n");
764 lynq_switch_card(argv, rilReq, uToken);
765 }
766 else if(type == 1)//get list mode
767 {
768 RLOGD("lynq_dsds_support get list mode\n");
769 lynq_display_dsds_mode();
770 }
771 return 0;
772}
773
774void * thread_test(void * arg)
775{
776 FILE *fp;
777 char buf[1024*3] = {0};
778 sprintf(buf, "echo 7 | emdlogger_ctrl 2>&1");
779 fp=popen(buf, "r");
780 if(!fp){
781 perror("popen:");
782 }
783 while(fgets(buf, 4072, fp) != NULL){}
784 pclose(fp);
785 return 0;
786}
787
788/*lei modify :Low power consumption for factory test only*/
789int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
790 pthread_t thid;
791 int ret = pthread_create(&thid, NULL, thread_test, NULL);
792 if(ret != 0){
793 RLOGD("pthread_create error!!!");
794 return ret;
795 }
796 #if 0
797 char eBuf[64] = {0};
798 sprintf(eBuf,"\nOK\n\0");
799 int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
800 if(n<0)
801 {
802 perror("lynq resp write:");
803 }
804 #endif
805 /*lei modify*/
806 system("echo \"Sys flight mode\" >/dev/console");
807 /*lei modify*/
808 char *new_argv[2] = {};
809 if(argc < 4)
810 {
811 RLOGD("parameter error!!!");
812 return -1;
813 }
814 /*Cut to SIM2*/
815 new_argv[0] = "SET_DEFAULT_SIM_ALL";
816 new_argv[1] = "1";
817 android::lynqSendToRil(2,new_argv,uToken);
818 sleep(1);
819 new_argv[0] = (char *)rilReq;
820 new_argv[1] = argv[3];
821 android::lynqSendToRil(2,new_argv,uToken);
822 sleep(1);
823 /*Cut to SIM1*/
824 new_argv[0] = "SET_DEFAULT_SIM_ALL";
825 new_argv[1] = "0";
826 android::lynqSendToRil(2,new_argv,uToken);
827 sleep(1);
828 new_argv[0] = (char *)rilReq;
829 new_argv[1] = argv[3];
830 android::lynqSendToRil(2,new_argv,uToken);
831 system("echo reg_netsys_srcclkena_mask_b 0 > /sys/power/spm/suspend_ctrl");
832 system("echo reg_netsys_infra_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
833 system("echo reg_netsys_apsrc_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
834 system("echo reg_netsys_vrf18_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
835 system("echo reg_netsys_ddr_en_mask_b 0 > /sys/power/spm/suspend_ctrl");
836 system("echo mem > /sys/power/autosleep");
837 ret = pthread_join(thid,NULL);
838 if(ret != 0){
839 RLOGD("pthread_join error!!!");
840 return ret;
841 }
842 return 0;
843}
844/*lei modify :Low power consumption for factory test only*/
845
846void* getMDstate(int argc,char*argv[],int uToken)
847{
848 FILE *FP;
849 char BUFFER[64]={};
850 char BUF[32] = {};
851 int ret = -1;
852 int len = 0;
853 FP = popen("cat /sys/kernel/ccci/boot","r");
854 fgets(BUFFER,sizeof(BUFFER),FP);
855 printf("buffer %s",BUFFER);
856 modemStatus = atoi(&BUFFER[4]);
857 sprintf(BUF,"+LGMDS:%d\n\0",modemStatus);
858 len = write(ttyGS3_fd,BUF,strlen(BUF));
859 if(len < 0)
860 {
861 perror("lynq resp write:");
862 return 0;
863 }
864 syncRespToUsb(0);
865 return 0;
866}
867
868void* lynq_get_inside_version(int argc,char*argv[],int uToken)
869{
870 int request = RIL_REQUEST_OEM_HOOK_RAW;
871 RIL_SOCKET_ID id = RIL_SOCKET_1;
872 if(utils::is_support_dsds())
873 {
874 id = (RIL_SOCKET_ID)get_default_sim_all_except_data();
875 }
876 else if(utils::is_suppport_dsss())
877 {
878 id = (RIL_SOCKET_ID)Phone_utils::get_enable_sim_for_dsss();
879 }
880 RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
881 //only for factory test
882 /*lei add for factory test*/
883 pRI->lynqEvent=3;
884 argv[1] = "AT+CGMR";
885 /*lei add for factory test*/
886 sendATCMD(2, argv,id,pRI);
887 return 0;
888}
889
890int lynqATWaitWithTime(int time)
891{
892 int ret = 0;
893 struct timespec start_tm;
894 //struct timespec end_tm;
895 //int timeout_ms = 2500;
896 clock_gettime(CLOCK_MONOTONIC, &start_tm);
897 //struct timeval now;
898 struct timespec outTime;
899 //gettimeofday(&now, NULL);//now.tv_sec(s),now.tv_usec(Micro s)
900 outTime.tv_sec = start_tm.tv_sec + time;
901 pthread_mutex_lock(&lynq_at_mutex);
902 //ret = pthread_cond_timedwait(&lynq_at_cond,&lynq_at_mutex,&outTime);
903 pthread_cond_wait(&lynq_at_cond,&lynq_at_mutex);
904 pthread_mutex_unlock(&lynq_at_mutex);
905 return ret;
906}
907void lynqAtRespWatingEvent()
908{
909 pthread_mutex_lock(&lynq_at_mutex);
910 pthread_cond_signal(&lynq_at_cond);
911 pthread_mutex_unlock(&lynq_at_mutex);
912 return;
913}
914void lynqInfo(char*argv[])
915{
916 int type = atoi(argv[2]);
917
918 if(type==2){
919 //lynq_output_LINFO_all();
920 syncRespToUsb(0);
921 }
922 else if(type==0){
923 int status = atoi(argv[3]);
924 if(status==1 || status==0){
925 //lynq_output_LINFO_enable=status;
926 //lynq_output_info("+LINFO: Report switch when key information changed is set: %d\n",lynq_output_LINFO_enable);
927 syncRespToUsb(0);
928 }
929 else {
930 //lynq_output_info("parameter error\n");
931 syncRespToUsb(100);
932 }
933 }
934 else if(type==1){
935 //lynq_output_info("+LINFO: (0-1)\n");
936 syncRespToUsb(0);
937 }
938 else {
939 //lynq_output_info("parameter error\n");
940 syncRespToUsb(100);
941 }
942}