int COM_Init (int *fd_atcmd, int *fd_uart, int *hUsbComPort) { char dev_node[32]; if(is_support_modem(1)) { snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS1)); fd_atcmd = openDeviceWithDeviceName(dev_node); } else if(is_support_modem(2)) { snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2)); fd_atcmd = openDeviceWithDeviceName(dev_node); } if((is_support_modem(1) || is_support_modem(2)) && (*fd_atcmd == -1)) { LOGE(TAG "Open ccci port fail\r\n" ); return *fd_atcmd; } //ATE Tool use 115200 baud rate *fd_uart = open_uart_port(UART_PORT1, 115200, 8, 'N', 1); if(*fd_uart == -1) { LOGE(TAG "Open uart port %d fail\r\n" ,UART_PORT1); return *fd_uart; } else LOGD(TAG "Open uart port %d success\r\n" ,UART_PORT1); //*hUsbComPort = open("/dev/ttyGS0",O_RDWR | O_NOCTTY | /*O_NONBLOCK | */O_NDELAY); *hUsbComPort = open_usb_port(UART_PORT1, 115200, 8, 'N', 1); if(*hUsbComPort == -1) { LOGE(TAG "Open usb fail\r\n"); return *hUsbComPort; } else { //initTermIO(*hUsbComPort); LOGD(TAG "Open usb success\r\n"); } return 0; }
int get_ccci_path(int modem_index,char * path) { int idx[MAX_MODEM_INDEX] = {1,2,5}; int md_sys[MAX_MODEM_INDEX] = {MD_SYS1, MD_SYS2, MD_SYS5}; int i = 0; if(is_support_modem(idx[modem_index])) { snprintf(path, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, (CCCI_MD)md_sys[modem_index])); LOGD(TAG "CCCI Path:%s",path); return 1 ; } else { return 0 ; } }
/// The below is for ATE signal test. void ate_signal(void) { struct itemview ate; text_t ate_title, info; char buf[100]; char buf_cmd[100]; char buf_ret[100]; int len, i; const char *pret; char dev_node[32]; int flag=0; ui_init_itemview(&ate); init_text(&info, buf, COLOR_YELLOW); ate.set_text(&ate, &info); len = sprintf(buf, "%s", "ATE Signaling Test\nEmergency call is not started\n"); //sprintf(buf+len, "%s", "Emergency call is not started\n"); ate.redraw(&ate); if(is_support_modem(1)) { if(-1 == COM_Init (&g_fd_atcmd, &g_fd_uart, &g_hUsbComPort)) { LOGE(TAG "COM_Init init fail!\n"); return; } g_fd_uart = g_hUsbComPort; } if(is_support_modem(2)){ if(g_fd_uart != -1 && g_hUsbComPort != -1) { snprintf(dev_node, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2)); g_fd_atcmdmd2 = openDeviceWithDeviceName(dev_node); if(g_fd_atcmdmd2 == -1) { LOGE(TAG "Open md2 fail\r\n"); return; } } else { if(-1 == COM_Init (&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort)) { LOGE(TAG "COM_Init init fail!\n"); return; } g_fd_uart = g_hUsbComPort; } } #if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT) if(g_fd_uart != -1 && g_hUsbComPort != -1) { g_fd_atcmdmd_dt= openDeviceWithDeviceName("/dev/ttyMT0"); if(g_fd_atcmdmd_dt== -1) { LOGE(TAG "Open md2 fail\r\n"); return; } } else { if(-1 == COM_Init (&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort)) { LOGE(TAG "COM_Init init fail!\n"); return; } g_fd_uart = g_hUsbComPort; } #endif for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup LOGD(TAG "fd_atcmd = %d, fd_uart = %d, hUsbComPort = %d\r\n", g_fd_atcmd, g_fd_uart, g_hUsbComPort); if(is_support_modem(1)){ ExitFlightMode (g_fd_atcmd, TRUE); } if(is_support_modem(2)){ ExitFlightMode_DualTalk (g_fd_atcmdmd2, TRUE); } #if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT) ExitFlightMode_DualTalk(g_fd_atcmdmd_dt, TRUE); #endif New_Thread (); while(1) { usleep(HALT_INTERVAL*20); } Free_Thread (); if(is_support_modem(1)){ COM_DeInit (&g_fd_atcmd, &g_fd_uart, &g_hUsbComPort); if(is_support_modem(2)){ if(g_fd_atcmdmd2 != -1) { close(g_fd_atcmdmd2); g_fd_atcmdmd2 = -1; } } #if defined(MTK_DT_SUPPORT) && !defined(EVDO_DT_SUPPORT) if(g_fd_atcmdmd_dt != -1) { close(g_fd_atcmdmd_dt); g_fd_atcmdmd_dt = -1; } #endif }else if(is_support_modem(2)){ COM_DeInit(&g_fd_atcmdmd2, &g_fd_uart, &g_hUsbComPort); } return; }
int sigtest_entry(struct ftm_param *param, void *priv) { char *ptr; int chosen, i; bool exit = false; struct sigtest *st = (struct sigtest *)priv; struct itemview *iv; int ret; const char *pret; int test_result_temp = FTM_TEST_PASS; char dev_node1[32]; char dev_node2[32]; char dev_node5[32]; LOGD(TAG "%s\n", __FUNCTION__); if(is_support_modem(1)){ snprintf(dev_node1, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS1)); st->fd_atmd = openDeviceWithDeviceName(dev_node1); if (-1 == st->fd_atmd) { LOGD(TAG "Fail to open CCCI interface\n"); return 0; } for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup } if(is_support_modem(2)){ snprintf(dev_node2, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS2)); st->fd_atmd2 = openDeviceWithDeviceName(dev_node2); if (-1 == st->fd_atmd2) { LOGD(TAG "Fail to open CCCI interface\n"); return 0; } for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup } #if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT) #if defined(PURE_AP_USE_EXTERNAL_MODEM) st->fd_atmd_dt = openDeviceWithDeviceName("/dev/ttyUSB1"); #else st->fd_atmd_dt = openDeviceWithDeviceName("/dev/ttyMT0"); #endif //st->fd_atmd_dt= openDeviceWithDeviceName(CCCI_MODEM_MT6252); if (-1 == st->fd_atmd_dt) { LOGD(TAG "Fail to open CCCI interface\n"); return 0; } for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup #endif if(is_support_modem(5)){ snprintf(dev_node5, 32, "%s", ccci_get_node_name(USR_FACTORY_DATA, MD_SYS5)); st->fd_atmd5 = openDeviceWithDeviceName(dev_node5); if (-1 == st->fd_atmd5) { LOGD(TAG "Fail to open /dev/eemcs_mux interface\n"); return 0; } for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup } for (i = 0; i<50; i++) usleep(50000); //sleep 1s wait for modem bootup if(is_support_modem(1)){ ExitFlightMode (st->fd_atmd, TRUE); } if(is_support_modem(2)){ ExitFlightMode_DualTalk (st->fd_atmd2, TRUE); } #if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT) ExitFlightMode_DualTalk(st->fd_atmd_dt, TRUE); #endif for (i = 0; i<30; i++) usleep(50000); //sleep 1s wait for modem bootup if(is_support_modem(5)){ ExitFlightMode (st->fd_atmd5, TRUE); } init_text(&st->title, param->name, COLOR_YELLOW); init_text(&st->text, &st->info[0], COLOR_YELLOW); memset(&st->info[0], 0, sizeof(st->info)); sprintf(st->info, "%s\n", uistr_info_emergency_call_testing); st->exit_thd = false; if (!st->iv) { iv = ui_new_itemview(); if (!iv) { LOGD(TAG "No memory"); return -1; } st->iv = iv; } iv = st->iv; iv->set_title(iv, &st->title); iv->set_items(iv, sigtest_items, 0); iv->set_text(iv, &st->text); iv->start_menu(iv,0); iv->redraw(iv); #if 0 do { chosen = iv->run(iv, &exit); switch (chosen) { #ifdef MTK_DT_SUPPORT case ITEM_CALL_FOR_MODEM_75: pret = dial112(st->fd_atmd); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", "Dial 112 Success!\n"); } else { LOGD(TAG "Dial 112 Fail\n"); sprintf(st->info, "%s\n", "Dial 112 Fail!\n"); } iv->redraw(iv); break; case ITEM_CALL_FOR_MODEM_52: pret = dial112(st->fd_atmd2); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", "Dial 112 Success!\n"); } else { LOGD(TAG "Dial 112 Fail\n"); sprintf(st->info, "%s\n", "Dial 112 Fail!\n"); } iv->redraw(iv); break; #else case ITEM_EMG_CALL: LOGD(TAG "Come to EMG Call...\n"); //mtk70828 sprintf(st->info, "%s\n", "Dial 112 on going ...!\n"); iv->redraw(iv); //mtk70828 pret = dial112(st->fd_atmd); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", "Dial 112 Success!\n"); } else { LOGD(TAG "Dial 112 Fail\n"); sprintf(st->info, "%s\n", "Dial 112 Fail!\n"); } iv->redraw(iv); break; #endif case ITEM_PASS: case ITEM_FAIL: if (chosen == ITEM_PASS) { st->mod->test_result = FTM_TEST_PASS; } else if (chosen == ITEM_FAIL) { st->mod->test_result = FTM_TEST_FAIL; } exit = true; break; } if (exit) { st->exit_thd = true; // Need to add ATH command else the loop back test will have noise. ExitFlightMode (st->fd_atmd, FALSE); #ifdef MTK_DT_SUPPORT ExitFlightMode_DualTalk (st->fd_atmd2, FALSE); #endif break; } } while (1); #endif if(is_support_modem(1)){ LOGD(TAG "Come to EMG Call IN MTK_ENABLE_MD1\n"); pret = dial112(st->fd_atmd); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem1); st->mod->test_result = FTM_TEST_PASS; test_result_temp = FTM_TEST_PASS; } else { LOGD(TAG "Dial 112 Fail IN MTK_ENABLE_MD1\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem1); st->mod->test_result = FTM_TEST_FAIL; test_result_temp = FTM_TEST_FAIL; } ExitFlightMode (st->fd_atmd, FALSE); closeDevice(st->fd_atmd); iv->redraw(iv); } if(is_support_modem(2)){ LOGD(TAG "Come to EMG Call\n"); pret = dial112(st->fd_atmd2); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem2); if(test_result_temp == FTM_TEST_PASS) { st->mod->test_result = FTM_TEST_PASS; } else { st->mod->test_result = FTM_TEST_FAIL; } } else { LOGD(TAG "Dial 112 Fail in MTK_ENABLE_MD2\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem2); st->mod->test_result = FTM_TEST_FAIL; } ExitFlightMode (st->fd_atmd2, FALSE); closeDevice (st->fd_atmd2); iv->redraw(iv); } #if defined(MTK_EXTERNAL_MODEM_SLOT) && !defined(EVDO_DT_SUPPORT) LOGD(TAG "Come to EMG Call\n"); pret = dial112(st->fd_atmd_dt); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem2); if(test_result_temp == FTM_TEST_PASS) { st->mod->test_result = FTM_TEST_PASS; } else { st->mod->test_result = FTM_TEST_FAIL; } } else { LOGD(TAG "Dial 112 Fail in MTK_ENABLE_MD2\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem2); st->mod->test_result = FTM_TEST_FAIL; } ExitFlightMode (st->fd_atmd_dt, FALSE); closeDevice (st->fd_atmd_dt); iv->redraw(iv); #endif if(is_support_modem(5)){ LOGD(TAG "Come to EMG Call IN MTK_ENABLE_MD5\n"); pret = dial112(st->fd_atmd5); if(!strcmp(pret, "OK")) { LOGD(TAG "Dial 112 Success\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_success_in_modem5); st->mod->test_result = FTM_TEST_PASS; test_result_temp = FTM_TEST_PASS; } else { LOGD(TAG "Dial 112 Fail IN MTK_ENABLE_MD5\n"); sprintf(st->info, "%s\n", uistr_info_emergency_call_fail_in_modem5); st->mod->test_result = FTM_TEST_FAIL; test_result_temp = FTM_TEST_FAIL; } ExitFlightMode (st->fd_atmd5, FALSE); closeDevice(st->fd_atmd5); iv->redraw(iv); } return 0; }
void * AP_CCCI_RX (void* lpParameter) { char buf_ack [BUF_SIZE] = {0}; char buf_log [BUF_SIZE] = {0}; int rd_len=0, wr_len=0; LOGD(TAG "Enter AP_CCCI_RX()\n"); for (;;) { #if 0 #ifdef MTK_ENABLE_MD2 if(g_mdFlag==1) rd_len = read_ack (g_fd_atcmd, buf_ack, BUF_SIZE); if(g_mdFlag==2) rd_len = read_ack (g_fd_atcmdmd2, buf_ack, BUF_SIZE); #else rd_len = read_ack (g_fd_atcmd, buf_ack, BUF_SIZE); #endif #endif if(g_mdFlag == 1) { #if defined(MTK_EXTERNAL_MODEM_SLOT) if(!strcmp(MTK_EXTERNAL_MODEM_SLOT, "1")) { #ifndef EVDO_DT_SUPPORT rd_len = read_ack(g_fd_atcmdmd_dt, buf_ack, BUF_SIZE); #endif } else { if(is_support_modem(1)){ rd_len = read_ack(g_fd_atcmd, buf_ack, BUF_SIZE); }else if(is_support_modem(2)){ rd_len = read_ack(g_fd_atcmdmd2, buf_ack, BUF_SIZE); } } #else if(is_support_modem(1)){ rd_len = read_ack(g_fd_atcmd, buf_ack, BUF_SIZE); }else if(is_support_modem(2)){ rd_len = read_ack(g_fd_atcmdmd2, buf_ack, BUF_SIZE); } #endif } else if(g_mdFlag == 2) { #if defined(MTK_EXTERNAL_MODEM_SLOT) if(!strcmp(MTK_EXTERNAL_MODEM_SLOT, "2")) { #ifndef EVDO_DT_SUPPORT rd_len = read_ack(g_fd_atcmdmd_dt, buf_ack, BUF_SIZE); #endif } else { if(is_support_modem(1)){ rd_len = read_ack(g_fd_atcmd, buf_ack, BUF_SIZE); }else if(is_support_modem(2)){ rd_len = read_ack(g_fd_atcmdmd2, buf_ack, BUF_SIZE); } } #else if(is_support_modem(1)){ rd_len = read_ack(g_fd_atcmd, buf_ack, BUF_SIZE); }else if(is_support_modem(2)){ rd_len = read_ack(g_fd_atcmdmd2, buf_ack, BUF_SIZE); } #endif } if (rd_len>0) { memcpy (buf_log, buf_ack, rd_len); buf_log[rd_len] = '\0'; LOGD(TAG "AP_CCCI_RX: %s, rd_len = %d\n", buf_log, rd_len); ACK_Pre_Process(buf_log); wr_len = write_chars (g_fd_uart, buf_ack, rd_len); if (wr_len != rd_len) LOGE(TAG "AP_CCCI_RX: wr_len != rd_len\n"); } } //pthread_exit(NULL); }
void * AP_UART_USB_RX (void* lpParameter) { char buf_cmd [BUF_SIZE] = {0}; int len; int wr_len; char result[64] = {0}; LOGD(TAG "Enter AP_UART_USB_RX()\n"); cmd_handler_init (); for (;;) { len = read_a_line(g_fd_uart, buf_cmd, BUF_SIZE); if (len>0) { buf_cmd[len] = '\0'; LOGD(TAG "AP_UART_USB_RX Command: %s, Len: %d\n" ,buf_cmd, len); AT_Pre_Process (buf_cmd); LOGD("buf_cmd:%s\n", buf_cmd); #if 0 #ifdef MTK_DT_SUPPORT if(g_mdFlag==1) send_at (g_fd_atcmd, buf_cmd); if(g_mdFlag==2) send_at (g_fd_atcmdmd2, buf_cmd); #else send_at (g_fd_atcmd, buf_cmd); #endif #endif CMD_OWENR_ENUM owner = rmmi_cmd_processor(buf_cmd, result); LOGD(TAG "result:%s\n", result); if(owner == CMD_OWENR_AP) { wr_len = write_chars (g_fd_uart, result, strlen(result)); if (wr_len != strlen(result)) LOGE(TAG "AP_CCCI_RX: wr_len != rd_len\n"); } else { if(g_mdFlag == 1) { #if defined(MTK_EXTERNAL_MODEM_SLOT) if(!strcmp(MTK_EXTERNAL_MODEM_SLOT, "1")) { #ifndef EVDO_DT_SUPPORT send_at(g_fd_atcmdmd_dt, buf_cmd); #endif } else{ if(is_support_modem(1)){ send_at(g_fd_atcmd, buf_cmd); }else if(is_support_modem(2)){ send_at(g_fd_atcmdmd2, buf_cmd); } } #else if(is_support_modem(1)){ send_at(g_fd_atcmd, buf_cmd); }else if(is_support_modem(2)){ send_at(g_fd_atcmdmd2, buf_cmd); } #endif } else if(g_mdFlag == 2) { #if defined(MTK_EXTERNAL_MODEM_SLOT) if(!strcmp(MTK_EXTERNAL_MODEM_SLOT, "2")) { #ifndef EVDO_DT_SUPPORT send_at(g_fd_atcmdmd_dt, buf_cmd); #endif }else{ if(is_support_modem(1)){ send_at(g_fd_atcmd, buf_cmd); }else if(is_support_modem(2)){ send_at(g_fd_atcmdmd2, buf_cmd); } } #else if(is_support_modem(1)){ send_at(g_fd_atcmd, buf_cmd); }else if(is_support_modem(2)){ send_at(g_fd_atcmdmd2, buf_cmd); } #endif } } } } //pthread_exit (NULL); }
static void *rf_c2k_update_thread(void *priv) { struct rf_c2k_factory *rf = (struct rf_c2k_factory*)priv; struct itemview *iv = rf->iv; const int THRESHOLD = -95;//-95dbm int sqm = -1; int rssi = 0; int fd3 = -1; int fd1 = -1; int i = 0; const int HALT_TIME = 200000;//0.2s (200000ms) char atDevPath1[32] = {0}; LOGD(TAG "%s: Start\n", __FUNCTION__); if (is_support_modem(4)) { #ifdef MTK_FTM_SVLTE_SUPPORT LOGD(TAG "Get CCCI path of modem1"); if (get_ccci_path(0, atDevPath1) == 0) { LOGD(TAG "Can't get CCCI path!"); goto err; } LOGD(TAG "Go to open modem1 fd1 atDevPath1 = %s", atDevPath1); fd1 = openDeviceWithDeviceName(atDevPath1); if (fd1 < 0) { LOGD(TAG "Fail to open fd1\n"); goto err; } LOGD(TAG "OK to open fd1\n"); for (i = 0; i < 30; i++) usleep(50000); //sleep 1.5s wait for modem bootup #endif LOGD(TAG "Go to open C2K modem fd3!"); fd3 = openDeviceWithDeviceName("/dev/ttySDIO4"); if (fd3 < 0) { LOGD(TAG "Fail to open ttySDIO4\n"); goto err; } LOGD(TAG "OK to open ttySDIO4\n"); for (i = 0; i < 30; i++) usleep(50000); //sleep 1.5s wait for modem bootup } else { LOGD(TAG "Not support C2K modem\n"); goto err; } int ret = 0; int retryCount = 0; memset(rf->info, 0, sizeof(rf->info) / sizeof(*(rf->info))); if (!rf->test_done) { bool ret = false; rf->test_done = true; const int BUF_SIZE = 256; char cmd_buf[BUF_SIZE]; char rsp_buf[BUF_SIZE]; #ifdef MTK_FTM_SVLTE_SUPPORT LOGD(TAG "[MD1] AT polling first:\n"); do { send_at (fd1, "AT\r\n"); } while (wait4_ack (fd1, NULL, 300)); LOGD(TAG "[MD1]Send AT+ESLP=0 to disable sleep mode:\n"); if (send_at (fd1, "AT+ESLP=0\r\n")) goto err; if (wait4_ack (fd1, NULL, 5000)) goto err; LOGD(TAG "[MD1]Send AT+ESIMS=1 to reset SIM1:\n"); if (send_at (fd1, "AT+ESIMS=1\r\n")) goto err; if (wait4_ack (fd1, NULL, 5000)) goto err; LOGD(TAG "[MD1]Send AT+EFUN=0\n"); if (send_at (fd1, "AT+EFUN=0\r\n")) goto err; if (wait4_ack(fd1, NULL, 5000)) goto err; LOGD(TAG "[MD1]Send AT+EMDSTATUS=1,1\n"); if (send_at(fd1, "AT+EMDSTATUS=1,1\r\n")) goto err; if (wait4_ack(fd1, NULL, 5000)) goto err; LOGD(TAG "[MD1]send AT+EFUN=1\n"); if (send_at (fd1, "AT+EFUN=1\r\n")) goto err; if (wait4_ack (fd1, NULL, 3000)) goto err; #endif LOGD(TAG "[MD2]AT polling first:\n"); send_at(fd3, "ate0q0v1\r\n"); do { send_at(fd3, "AT\r\n"); } while (wait4_ack(fd3, NULL, 3000)); LOGD(TAG "[MD2]Send AT+CPOF to reboot modem \n"); if (send_at(fd3, "AT+CPOF\r\n")) goto err; wait4_ack(fd3, NULL, 5000); LOGD(TAG "Wait for +VPON:0, C2K modem turn off:\n"); wait4_ack (fd3, "+VPON:0", 3000); #ifdef MTK_FTM_SVLTE_SUPPORT LOGD(TAG "[MD2]Send AT+EMDSTATUS=1,1\n"); if (send_at(fd3, "AT+EMDSTATUS=1,1\r\n")) goto err; wait4_ack(fd3, NULL, 5000); #endif /* Reboot modem to make new band setting work */ LOGD(TAG "[MD2]Send AT+CPON to reboot modem \n"); if (send_at(fd3, "AT+CPON\r\n")) goto err; if (wait4_ack(fd3, NULL, 5000)) goto err; usleep(150 * HALT_TIME); // Wait for regist network /* Start RF test */ retryCount = 0; while (retryCount < 100) { const char *tok = "+CSQ"; char *p = NULL; char *value = NULL; sqm = -1; rssi = 0; /* Check RF SQM level. The verdict of RF test is the SQM level shall be greater than 18 */ LOGD(TAG "\n"); usleep(HALT_TIME); memset(cmd_buf, 0, sizeof(cmd_buf)); strcpy(cmd_buf, "AT+CSQ\r\n"); write(fd3, cmd_buf, strlen(cmd_buf)); LOGD(TAG "Send AT+CSQ to check RF, retryCount=%d \n",retryCount); memset(rsp_buf, 0, sizeof(rsp_buf)); read(fd3, rsp_buf, BUF_SIZE); LOGD(TAG "------AT+CSQ start------\n"); LOGD(TAG "%s\n", rsp_buf); LOGD(TAG "------AT+CSQ end------\n"); retryCount++; p = strstr(rsp_buf, tok); if (p != NULL) { LOGD(TAG "p=%s\n", p); p = strchr(p, ':'); if (p == NULL) { LOGE(TAG "Invalid CSQ response urc"); goto err; } p++; //skip whitespace if any while (*p != '\0' && isspace(*p)) { p++; } value = strsep(&p, ":"); sqm = atoi(value); LOGD(TAG "sqm=%d\n", sqm); if (sqm > 0 && sqm < 31) { rssi = sqm * 2 - 114; } else if (sqm == 0) { rssi = -113; } else if (sqm == 31) { rssi = -51; } else { printf("invalid sqm value.\n"); } LOGD(TAG "rssi=%d\n", rssi); } /* AT+CSQ might got null immeidate response or modem did not have any measurement result yet. keep retry polling */ if (rssi >= THRESHOLD && rssi != 0) { ret = 1; LOGD(TAG "rssi pass in RF test"); break; } else if (rssi < THRESHOLD) { ret = 0; LOGD(TAG "rssi fail in RF test"); break; } } if (ret) { LOGD(TAG "C2K RF Test result pass\n"); sprintf(rf->info + strlen(rf->info), "%s: %s. RSSI value is %d dbm\n", uistr_rf_c2k_test, uistr_info_pass, rssi); close(fd3); fd3 = -1; close(fd1); fd1 = -1; iv->redraw(iv); usleep(25 * HALT_TIME); //Wait 5s to show test info LOGD(TAG "%s: Exit\n", __FUNCTION__); return NULL; } else { LOGD(TAG "C2K RF Test result fail\n"); goto err; } LOGD(TAG "redraw\n"); iv->redraw(iv); } err: LOGD(TAG "%s: FAIL\n", __FUNCTION__); sprintf(rf->info + strlen(rf->info), "%s: %s. RSSI value is %d dbm\n", uistr_rf_c2k_test, uistr_info_fail, rssi); if (fd1 > 0) { close(fd1); } fd1 = -1; if (fd3 > 0) { close(fd3); } fd3 = -1; LOGD(TAG "redraw\n"); iv->redraw(iv); usleep(25 * HALT_TIME); //Wait 5s to show test info LOGD(TAG "%s: Exit\n", __FUNCTION__); return NULL; }