⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3gtestrun.c

📁 3G module test program
💻 C
📖 第 1 页 / 共 2 页
字号:
        }        else return(SUCCEED);    }    if (VIATEL == modDec)    {        if (SendAndRev("ATI\r", buffer) == ERROR)        {            return(ERROR);        }                if (strstr(buffer, "VIATELECOM") == NULL)        {            printf("3G module detect failed!\n"); // return error            return(ERROR);        }         return(SUCCEED);    }
    
    if (SendAndRev(commandStr, buffer) == ERROR)
    {
        return(ERROR);
    }
    
    if (strstr(buffer, "OK") == NULL)
    {
        printf("3G module detect failed!\n"); // return error
        return(ERROR);
    } 

    return(SUCCEED);
}

/*****************************************
Function:     TestSimCard
Description:  test sim card
Parameter: No    
Return:
    SUCCEED: test succeed
      ERROR: test failed
Remark:
******************************************/
int TestSimCard(int modDec) 
{
    unsigned char buffer[BUFFER_LEN]; // buffer for read
    unsigned char commandStr[]="AT+CPIN?\r";
        if( DATANG == modDec)    {           printf("AT+CREG=1\n");            if (DtSendAndRev("AT+CREG=1\r", buffer) == ERROR)
        {
            return(ERROR);
        }        usleep(DELAY_MS_TIME);        printf("AT+CFUN=1\n");          if (DtSendAndRev("AT+CFUN=1\r", buffer) == ERROR)
        {
            return(ERROR);
        }        if (strstr(buffer, "OK") == NULL)        {            return(ERROR);        }                         if (DtSendAndRev(commandStr, buffer) == ERROR)
        {
            return(ERROR);
        }        if (strstr(buffer, "OK") != NULL && strstr(buffer, "READY") != NULL)        {
            printf("SIM card test OK!\n"); // return error
            return(SUCCEED);
        }        if (strstr(buffer, "ERROR: 10") != NULL)        {
            printf("SIM card not inserted!\n"); // return error
            return(SIM_NOT_IN);
        }        return(ERROR);    }
    if (SendAndRev(commandStr, buffer) == ERROR)
    {
        return(ERROR);
    }
    if (OPTION == modDec)    {
        if ((strstr(buffer, "ERROR") != NULL) && (strstr(buffer, "SIM not inserted") != NULL))
        {
            printf("SIM card not inserted!\n"); // return error
            return(SIM_NOT_IN);
        }
    }    else if (WEWINS == modDec)    {        if (strstr(buffer, "ERROR: 10") != NULL)        {            printf("SIM card not inserted!\n"); // return error
            return(SIM_NOT_IN);        }            }    if ((strstr(buffer, "OK") != NULL) && (strstr(buffer, "SIM PIN") != NULL))
    {
        printf("SIM card has PIN!\n"); // return error
        return(SIM_PUK);
    } 
    if ( (strstr(buffer, "OK") != NULL) && ((strstr(buffer, "READY") != NULL) || (strstr(buffer, "Ready") != NULL)) )
    {
        printf("SIM card test OK!\n"); // return error
        return(SUCCEED);
    } 
    
    return(ERROR);
}

int FetchServiceName(unsigned char *rev, unsigned char *SevName)
{
    unsigned char *pchar = NULL;
    int i = 0;
   
    pchar = strstr(rev, "\"");
    if (pchar == NULL)    {        printf("register hasn't finished\n");        return ERROR;    }        pchar++;
    while( (*pchar != '\0')&&(*pchar != '\"') )
    {
        SevName[i++] = *pchar++;      
    }
    SevName[i] = '\0';    return SUCCEED;
    
}

/*****************************************
Function:     TestRegister
Description:  test network register
Parameter: No    
Return:
    SUCCEED: test succeed
      ERROR: test failed
      REG_FAIL: test failed
Remark:
******************************************/

int TestRegister(int modDec, unsigned char *rev) 
{
    unsigned char buffer[BUFFER_LEN]; // buffer for read
    unsigned char commandStr[]="AT+COPS?\r";
        if (VIATEL == modDec)    {        if (SendAndRev("AT+CREG?", buffer) == ERROR)            return(ERROR);        if (buffer == NULL)            return(ERROR);        else        {            char *subStr;            if ((subStr = strstr(buffer, "+CREG: ")) == NULL)                return(ERROR);             else            {                if ( *(subStr+9) == '1' || *(subStr+9) == '5')                {                    strcpy(rev, "REG SUCCEED");                    return(SUCCEED);                }                else                return(REG_FAIL);            }        }    }    if (DATANG == modDec)    {        if (DtSendAndRev(commandStr, buffer) == ERROR)
        {
            return(ERROR);
        }        if (strstr(buffer, "OK") != NULL)        {
            return FetchServiceName(buffer, rev);
        }        if (strstr(buffer, "ERROR: 10") != NULL)        {
            printf("SIM card not insert or has PIN!\n");
            return(REG_FAIL);
        }        return(ERROR);    }
    if (SendAndRev(commandStr, buffer) == ERROR)
    {
        return(ERROR);
    }
    if (OPTION == modDec)    {
        if (strstr(buffer, "OK") != NULL)
        {
            if (strstr(buffer, "Limited Service") != NULL) 
            {       
                printf("SIM card not insert or has PIN!\n");
                return(REG_FAIL);
            }
            else
            {
                return FetchServiceName(buffer, rev);
            }
        }    }    else if (WEWINS == modDec)    {        if (strstr(buffer, "OK") != NULL)        {            return FetchServiceName(buffer, rev);        }        else        {            printf("SIM card reg failed!\n");
            return(REG_FAIL);        }            }    
    return(ERROR);
}
/*****************************************
Function:     DetectDevice
Description:  auto detect 3G device
Parameter: No    
Return:
    SUCCEED:  succeed
      ERROR:  failed
Remark:
******************************************/int DetectDevice(){    int i, ret;    char otherDevice[100];    char rev[100];        if (DtOpenCom(port_call) == SUCCEED)	{	         // 3G module detect       
        ret = ModuleDetect(DATANG);        ShowResult(1, ret, "DTMobile");
        if (SUCCEED != ret)        {            return ERROR;        }
        return DATANG;
	}    if (OpenCom(OP_DEVICE_NAME) == SUCCEED)    {        // 3G module detect       
        ret = ModuleDetect(OPTION);
        ShowResult(1, ret, "Option N.V.");
        if (SUCCEED != ret) return ERROR;        return OPTION;    }    if (OpenCom(VI_DEVICE_NAME) == SUCCEED)    {        // 3G module detect               ret = ModuleDetect(VIATEL);        ShowResult(1, ret, "Via Telecom");        if (SUCCEED != ret) return ERROR;        return VIATEL;    }        for(i = 0; ;i++)    {            close(gComFp); //close device file        sprintf(otherDevice, "/dev/ttyACM%d", i);        if (OpenCom(otherDevice) != SUCCEED)        {            return NOT_FOUND;        }        else        {            if (ReadCom(rev, 100) != SUCCEED) // read from device
            {                // 3G module detect       
                ret = ModuleDetect(WEWINS);
                ShowResult(1, ret, "WEWINS");
                if (SUCCEED != ret) return ERROR;
                return WEWINS;
            }           }    }}
/*****************************************
Function:     ThreeGTest
Description:  3G device test
Parameter: No    
Return:
    SUCCEED: test succeed
      ERROR: test failed
Remark:
******************************************/
void *Test3G(void *data)
{

    int ret; // for return    int devDec;
    unsigned char buffer[BUFFER_LEN]; // buffer for service name
        devDec = DetectDevice();
    if (devDec == OPTION || devDec == WEWINS || devDec == DATANG || devDec == VIATEL) // open 3G device
    {
        // test sim card
        ret = TestSimCard(devDec);
        ShowResult(2, ret, NULL);
        if (SUCCEED != ret) goto END;

        // test network register
        ret = TestRegister(devDec, buffer);
        ShowResult(3, ret, buffer);
    }
    else // open failed
    {
        ret = ERROR;
        ShowResult(1, ret, NULL);
    }
    
 END:    dtmux_port_close(port_call);	//dtmux_exit();
    close(gComFp); //close device file    
    data = (void *)&ret;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -