| you.chen | 5ef374a | 2023-12-26 17:25:16 +0800 | [diff] [blame^] | 1 | /*============================================================================= |
| 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" |
| 23 | usb_cmd_t Usb_commands[] = { |
| 24 | #include "lynq_commands.h" |
| 25 | }; |
| 26 | |
| 27 | usb_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 | |
| 33 | extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX] = {}; |
| 34 | extern int apn_count = 0; |
| 35 | extern char lynq_at[LYNQ_AT_LEN_MAX]= {}; |
| 36 | char mccmnc[8] = {0}; |
| 37 | pthread_cond_t lynq_at_cond = PTHREAD_COND_INITIALIZER; |
| 38 | pthread_mutex_t lynq_at_mutex= PTHREAD_MUTEX_INITIALIZER; |
| 39 | |
| 40 | |
| 41 | //int lynqSendToRil(int argc,char *argv[],int uToken); |
| 42 | usb_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 | |
| 57 | usb_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 | |
| 73 | int 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 | } |
| 121 | int 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 | } |
| 132 | int 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 | } |
| 153 | void 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 |
| 160 | int 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 | |
| 368 | int CGMI(int argc,char*argv[],char *rilReq, int uToken) |
| 369 | { |
| 370 | return 0; |
| 371 | } |
| 372 | int 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 | } |
| 386 | int 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 | } |
| 417 | int 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 | |
| 450 | static 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 | |
| 461 | int 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 | |
| 520 | int 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 | |
| 623 | void 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 | |
| 630 | int 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 | |
| 721 | static 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 | |
| 729 | static 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 | |
| 741 | static 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 | |
| 748 | int 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 | |
| 774 | void * 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*/ |
| 789 | int 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 | |
| 846 | void* 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 | |
| 868 | void* 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 | |
| 890 | int 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 | } |
| 907 | void 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 | } |
| 914 | void 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 | } |