From d71d1c07e214c206eedc09ca293bb406dcb2dc21 Mon Sep 17 00:00:00 2001 From: payton Date: Tue, 12 Dec 2023 13:55:52 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E8=87=AA=E5=8A=A8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=B3=A8=E7=BD=91=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sf_app/code/source/4gMng/sf_eg91_sim.c | 317 ++++++++++++++---- 1 file changed, 258 insertions(+), 59 deletions(-) diff --git a/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c b/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c index 726d9ff5e..ca796cc95 100755 --- a/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c @@ -4070,9 +4070,10 @@ SINT32 sf_auto_net_reg(void) UINT8 cqSignal = 0; char *pTemp = NULL; char *delim = NULL; + UINT32 StrNumber = 0; UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - SF_TTY_DATA_TYPE_S ttyData = { .waitMs = 500, .len = 3, .lenMax = (GPRS_INFO_LINE_MAX-1), .cmp = "OK", .cmperr = "ERROR", .data = gsmPara}; + SF_TTY_DATA_TYPE_S ttyData = { .waitMs = 500, .len = 255, .lenMax = (GPRS_INFO_LINE_MAX-1), .cmp = "OK", .cmperr = "ERROR", .data = gsmPara}; SF_LOG(" s\n"); @@ -4093,7 +4094,6 @@ SINT32 sf_auto_net_reg(void) ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); eNetRegLocation = QUECTEL_NETREG_QSIMSTAT; - ttyData.len = 255;//Must wait for OK or error. } else if(strstr((const char *)gsmPara, "ERROR")) { @@ -4108,7 +4108,6 @@ SINT32 sf_auto_net_reg(void) strcpy((char *)gsmPara, "ATE1\r"); ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - ttyData.len = 255;//Must wait for OK or error. } break; @@ -4131,10 +4130,6 @@ SINT32 sf_auto_net_reg(void) SF_LOG("AT+QSIMSTAT? Timeout"); goto SF_MODULE_END; } - - //strcpy((char *)gsmPara, "AT+QSIMSTAT?\r"); - //ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); - //SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); break; } else if(strstr((const char *)gsmPara, "+QSIMSTAT: 0,1")) @@ -4147,18 +4142,19 @@ SINT32 sf_auto_net_reg(void) } else { - eNetRegLocation = QUECTEL_NETREG_QLWCFG_URC; - if(strstr(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG915Q)){ - strcpy((char *)gsmPara, "AT+QLWCFG=\"auto_reg\",0\r"); - } - else{ - strcpy((char *)gsmPara, "AT+QLWCFG=\"startup\",0\r"); - } + eNetRegLocation = QUECTEL_NETREG_CIMI_1; + strcpy((char *)gsmPara, "AT+CIMI\r"); + // eNetRegLocation = QUECTEL_NETREG_QLWCFG_URC; + // if(strstr(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG915Q)){ + // strcpy((char *)gsmPara, "AT+QLWCFG=\"auto_reg\",0\r"); + // } + // else{ + // strcpy((char *)gsmPara, "AT+QLWCFG=\"startup\",0\r"); + // } } sf_set_sim_insert(1); ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - ttyData.len = strlen(gsmPara) + 2; } else if((strstr((const char *)gsmPara, "+QSIMSTAT: 0,2"))) { @@ -4202,47 +4198,259 @@ SINT32 sf_auto_net_reg(void) break; - case QUECTEL_NETREG_QLWCFG_URC: + case QUECTEL_NETREG_CIMI_1: - if(strstr((const char *)gsmPara, "OK")) - { - eNetRegLocation = QUECTEL_NETREG_QLWCFG_STARTUP; - strcpy((char *)gsmPara, "AT+QCFG=\"tcp/windowsize\",1,100\r"); - ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); - SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - //DelayTime = 50; - ttyData.len = strlen(gsmPara) + 2; - } + if(strstr((const char *)gsmPara, "OK")) + { - break; + delim = " \r\n"; - case QUECTEL_NETREG_QLWCFG_STARTUP: + if(strstr((const char *)gsmPara, "AT+CIMI")) + { + pTemp = strtok((char *)strstr((const char *)gsmPara, "AT+CIMI"), delim); + StrNumber = 1; + } + else + { + pTemp = strtok((char *)gsmPara, delim); + StrNumber = 0; + } - if(strstr((const char *)gsmPara, "OK")) - { - eNetRegLocation = QUECTEL_NETREG_CGDCONT; - //DelayTime = 200; + mm = 0; + memset(strtmp, '\0', sizeof(strtmp)); + while((pTemp != NULL) && (mm < 12)) + { + strcpy((char *)strtmp[mm], (const char *)pTemp); + printf("---pTemp[%d]:%s\n", mm, pTemp); + mm++; + pTemp = strtok((char *)0, delim); + } - if(strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON)) - { - eNetRegLocation = QUECTEL_NETREG_CGREG; - strcpy((char *)gsmPara, "AT+CGREG?\r"); - sf_time(&cTime); - } - else if(strstr((const char *)puiPara->Sim4gApn, APN_4G_ATT)) - { - sprintf((char *)gsmPara, "AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r", puiPara->Sim4gApn); - } - else - { - sprintf((char *)gsmPara, "%s", "AT+CGDCONT=1,\"IPV4V6\",\"\"\r"); - } + if(((strtmp[StrNumber][0] - '0') >= 0) && ((strtmp[StrNumber][0] - '0') <= 9) && ((strtmp[StrNumber][5] - '0') >= 0) && ((strtmp[StrNumber][5] - '0') <= 9)) + { + memset(puiPara->OperatorCode, '\0', sizeof(puiPara->OperatorCode)); + strncpy((char *)puiPara->OperatorCode, (const char *)strtmp[StrNumber], 5); + strncpy((char *)SimImei, (const char *)strtmp[1], 5); + SF_DEBUG("OperatorCode=%s", puiPara->OperatorCode); - ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); - SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - ttyData.cmp = "OK"; - ttyData.len = strlen(gsmPara) + 2; - } + if(puiPara->SimAutoSwitch == 0) + { + if(sf_auto_operation_adjust() == FAIL) + { + SLOGE(gsmPara); + sprintf((char *)logStr, "Auto Operation Fail,MCCMNC:%s\n", puiPara->OperatorCode); + SLOGE(logStr); + + ret = SF_SIM_ERROR_APN; + sprintf((char *)logStr, "Error Code:0x%08X\n", ret); + SLOGE(logStr); + + //sf_guide_operator_match_status_set(); + goto SF_MODULE_END; + } + else + { + sprintf((char *)logStr, "Auto Operation Success,MCCMNC:%s\n", puiPara->OperatorCode); + SLOGI(logStr); + } + + SF_DEBUG("Sim4gApn=%s", puiPara->Sim4gApn); + } + else + { + SF_LOG("operation info manual set,default success.\n"); + } + SF_LOG("puiPara->ModuleVer:%s\n",puiPara->ModuleVer); + if((strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON)) \ + && (((SF_STRNCMP(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG91_NAXD, 6) == 0))|| ((SF_STRNCMP(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG95_NAXD, 6) == 0)))) + { + eNetRegLocation = QUECTEL_NETREG_QNVFW; + sprintf((char *)gsmPara, "%s", "at+qnvfr=\"/nv/item_files/modem/uim/gstk/feature_bmsk\"\r"); + } + else + { + if(strstr((const char *)puiPara->Sim4gApn, APN_4G_ATT)) + { + eNetRegLocation = QUECTEL_NETREG_CGDCONT; + sprintf((char *)gsmPara, "AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r", puiPara->Sim4gApn); + } + else if(strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON)) + { + eNetRegLocation = QUECTEL_SEARCH_IPV4V6; + sprintf((char *)gsmPara, "%s", "AT+QICSGP=1\r"); + } + else + { + eNetRegLocation = QUECTEL_NETREG_CGDCONT; + sprintf((char *)gsmPara, "%s", "AT+CGDCONT=1,\"IPV4V6\",\"\"\r"); + } + + + } + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + else + { + ret = SF_SIM_ERROR_APN; + SLOGE(gsmPara); + sprintf((char *)logStr, "Error Code:0x%08X\n", ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + else + { + callTime++; + + if(callTime > 10) + { + ret = SF_SIM_ERROR_APN; + SLOGE(gsmPara); + sprintf((char *)logStr, "Error Code:0x%08X\n", ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + + strcpy((char *)gsmPara, "AT+CIMI\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_NETREG_QNVFW: + + if(strstr((const char *)gsmPara, "+QNVFR:")) + { + if(strstr((const char *)gsmPara, "+QNVFR: 11000000")) + { + eNetRegLocation = QUECTEL_SEARCH_QICSGP1; + sprintf((char *)gsmPara, "%s", "at+qnvfw=\"/nv/item_files/modem/uim/gstk/feature_bmsk\",01000000\r"); + } + else + { + eNetRegLocation = QUECTEL_SEARCH_IPV4V6; + sprintf((char *)gsmPara, "%s", "AT+QICSGP=1\r"); + } + + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + else + { + //eNetRegLocation = QUECTEL_NETREG_MODULE_RESTART; + eNetRegLocation = QUECTEL_SEARCH_IPV4V6; + sprintf((char *)gsmPara, "%s", "AT+QICSGP=1\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_SEARCH_QICSGP1: + + if(strstr((const char *)gsmPara, "OK")) + { + eNetRegLocation = QUECTEL_SEARCH_IPV4V6; + sprintf((char *)gsmPara, "%s", "AT+QICSGP=1\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + break; + + case QUECTEL_SEARCH_IPV4V6: + + if(strstr((const char *)gsmPara, "OK")) + { + if((strstr((const char *)gsmPara, "\"ims\"") == NULL) && (strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON))) + { + + eNetRegLocation = QUECTEL_NETREG_QPRTPARA; + if(((SF_STRNCMP(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG91_NAXD, 6) == 0))|| ((SF_STRNCMP(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG95_NAXD, 6) == 0))) + { + sprintf((char *)gsmPara, "AT+QPRTPARA=3\r"); + } + else + { + sprintf((char *)gsmPara, "%s", "AT+CGDCONT=1,\"IPV4V6\",\"\"\r"); + eNetRegLocation = QUECTEL_NETREG_CGDCONT; + } + } + else + { + eNetRegLocation = QUECTEL_NETREG_CGDCONT; + + if(strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON)) + { + sprintf((char *)gsmPara, "AT+CGREG?\r"); + eNetRegLocation = QUECTEL_NETREG_CGREG; + sf_time(&cTime); + } + else if(strstr((const char *)puiPara->Sim4gApn, APN_4G_ATT)) + { + sprintf((char *)gsmPara, "AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r", puiPara->Sim4gApn); + } + else + { + sprintf((char *)gsmPara, "%s", "AT+CGDCONT=1,\"IPV4V6\",\"\"\r"); + } + } + + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_NETREG_QPRTPARA: + + if(strstr((const char *)gsmPara, "OK") != NULL) + { + if(sf_ttyusb_restart() == SUCCESS) + { + callTime = 0; + time = 0; + eNetRegLocation = QUECTEL_NETREG_MODULE_RESTART; + } + else + { + ret = SF_SIM_ERROR_REG_NET; + printf("[%s:%d] tty usb restart err.\n", __FUNCTION__, __LINE__); + SLOGE(gsmPara); + sprintf((char *)logStr, "tty usb restart err,Error Code:0x%08X\n", ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + + break; + + case QUECTEL_NETREG_MODULE_RESTART: + ret = sf_module_complete_init(); + + if(ret == SF_SUCCESS) + { + eNetRegLocation = QUECTEL_NETREG_FRIST; + //sprintf((char *)gsmPara, "AT+CGREG?\r"); + //eNetRegLocation = QUECTEL_NETREG_CGREG; + } + else + { + goto SF_MODULE_END; + } + + break; + + // case QUECTEL_NETREG_QLWCFG_URC: + + // if(strstr((const char *)gsmPara, "OK")) + // { + // eNetRegLocation = QUECTEL_NETREG_QLWCFG_STARTUP; + // strcpy((char *)gsmPara, "AT+QCFG=\"tcp/windowsize\",1,100\r"); + // ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + // SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + // } break; @@ -4255,9 +4463,6 @@ SINT32 sf_auto_net_reg(void) strcpy((char *)gsmPara, "AT+CGREG?\r"); ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - - ttyData.cmp = "OK"; - ttyData.len = strlen(gsmPara) + 2; } break; @@ -4310,8 +4515,6 @@ SINT32 sf_auto_net_reg(void) sprintf((char *)gsmPara, "AT+CIMI\r"); ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); - ttyData.cmp = "OK"; - ttyData.len = strlen(gsmPara) + 2; } } else @@ -4376,8 +4579,6 @@ SINT32 sf_auto_net_reg(void) SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); AddCimiTimes++; time = 0; - ttyData.cmp = "OK"; - ttyData.len = strlen(gsmPara) + 2; //sf_set_netsearch_step(GPRS_SEARCH_STEP_RETRYING); //sp5kHostMsgSend(APP_UI_MSG_TRANSFER_REFLUSH, 0, 0, 0); } @@ -4447,8 +4648,6 @@ SINT32 sf_auto_net_reg(void) SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); callTime = 0; } - ttyData.cmp = "OK"; - ttyData.len = strlen(gsmPara) + 2; } else {