stm32_ota/ABM开发板(APP源码)/FreeRTOS版本/APPV3.0/HARDWARE/LTE/EC20/ec20net.c

435 lines
17 KiB
C
Raw Normal View History

2024-12-17 20:03:43 +08:00
#include "ec20net.h"
#include "syslib.h"
/********************************************************************************
* @file ec20.c
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief <EFBFBD>Quectelģ<EFBFBD><EFBFBD>EC20<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣨼<EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ContextID<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>EC20<EFBFBD><EFBFBD><EFBFBD>ڻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
* @attention
* Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
* contextID:<EFBFBD><EFBFBD>·ID
* EC20ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ID<EFBFBD><EFBFBD>Χ1~16<EFBFBD><EFBFBD>ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD> ͨ<EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>Χ0~11<EFBFBD><EFBFBD>
* ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ID<EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ/<EFBFBD><EFBFBD>ͬͨ<EFBFBD><EFBFBD>Э<EFBFBD>TCP/IP<EFBFBD><EFBFBD>UDP<EFBFBD><EFBFBD>HTTP<EFBFBD><EFBFBD>FTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @use<EFBFBD><EFBFBD>
* <EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD>EC20_Uart_Init()<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ͨѶ<EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>ActivePDP()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ʵ<EFBFBD><EFBFBD>
* TCP\HTTTP\FTPͨ<EFBFBD><EFBFBD>
*******************************************************************************/
/*****************************************
*ec20 NET <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
****************************************/
#define NET_CMDPACK_LEN 128 //EC20 NET<45><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define APN "CMIOT" //APN<50><4E>ʹ<EFBFBD>õ<EFBFBD>SIM<49><4D>Ӫ<EFBFBD>̲<EFBFBD>ͬ<EFBFBD><CDAC>Ӧ<EFBFBD><D3A6>APN<50><4E><EFBFBD>ܲ<EFBFBD>ͨ
/********************************************************
ec20ģ<EFBFBD><EFBFBD>PDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************/
enum eNetCmdNum
{
QUERYICCID =0, SETCS =1, QUERYCS =2 , SETPS =3, QUERYPS =4,
QUERYNETINFO =5, QUERYCSQ =6, COFCONTEXT =7, ACTCONTEXT =8,
DEACTCONTEXT =9, QUERYCONTEXT =10
} ; //ö<><C3B6>ec20ģ<30><C4A3>NET<45><54><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
volatile EC20_CMD_DATA_s sNetCmd[11]=
{
// cmdNum cmdStr, timeout(100ms), trueStr, trueOffset falseStr revResult rtyNum
{QUERYICCID, "AT+QCCID\r\n", 5, "+QCCID" , -1, "ERROR", TIMEOUT, 3 },
{SETCS, "AT+CREG=2\r\n", 3, "OK" , -1, "ERROR", TIMEOUT, 2 },
{QUERYCS, "AT+CREG?\r\n", 3, "+CREG:" , -1, "ERROR", TIMEOUT, 2 },
{SETPS, "AT+CGREG=2\r\n", 3, "OK" , -1, "ERROR", TIMEOUT, 2 },
{QUERYPS, "AT+CGREG?\r\n", 3, "+CGREG:" , -1, "ERROR", TIMEOUT, 2 },
{QUERYNETINFO, "AT+QNWINFO\r\n", 3, "+QNWINFO:" , -1, "ERROR", TIMEOUT, 1 },
{QUERYCSQ, "AT+CSQ\r\n", 3, "+CSQ:" , -1, "ERROR", TIMEOUT, 2 },
{COFCONTEXT, "AT+QICSGP=%d,1,\"%s\",\"\",\"\",1\r\n", 3, "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD>TCP context
{ACTCONTEXT, "AT+QIACT=%d\r\n", (150*10), "OK" , -1, "ERROR", TIMEOUT, 1 },
{DEACTCONTEXT, "AT+QIDEACT=%d\r\n", (40*10), "OK" , -1, "ERROR", TIMEOUT, 1 },
{QUERYCONTEXT, "AT+QIACT?\r\n", 3, "+QIACT:", -1, "ERROR", TIMEOUT, 2 }
} ; //EC20ģ<30><C4A3>NET<45><54><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>EC20_CMD_DATA_s<5F><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> static const char *NetCmdNumToString(enum eNetCmdNum result)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>ٳ<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eNetCmdNum<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ö<EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ϊö<EFBFBD>ٵij<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
**************************************************************************************************/
static inline const char *NetCmdNumToString(enum eNetCmdNum result)
{
switch (result)
{
ENUM_CHIP_TYPE_CASE(QUERYICCID)
ENUM_CHIP_TYPE_CASE(SETCS)
ENUM_CHIP_TYPE_CASE(QUERYCS)
ENUM_CHIP_TYPE_CASE(SETPS)
ENUM_CHIP_TYPE_CASE(QUERYPS)
ENUM_CHIP_TYPE_CASE(QUERYNETINFO)
ENUM_CHIP_TYPE_CASE(QUERYCSQ)
ENUM_CHIP_TYPE_CASE(COFCONTEXT)
ENUM_CHIP_TYPE_CASE(ACTCONTEXT)
ENUM_CHIP_TYPE_CASE(DEACTCONTEXT)
ENUM_CHIP_TYPE_CASE(QUERYCONTEXT)
}
ErrorLogPrintf("EC20 <20><>ЧeNetCmdNum!") ;
return "<EFBFBD>޴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_SendNetCmd( uint8_t cmdNum, char *format,... )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> MCU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EC20<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 cmdNum EC20_CMD_DATA_s<EFBFBD><EFBFBD>cmdNum<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param2 char *format,... <EFBFBD>ɱ<EFBFBD><EFBFBD>α<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_SendNetCmd( uint8_t cmdNum, char *format,... )
{
uint8_t revTimes = 0 ;
RunResult status = TIMEOUT ;
uint8_t retryTimes = sNetCmd[cmdNum].rtyNum ;
char *cmdPack = NULL ;
format = sNetCmd[cmdNum].cmdStr ;
cmdPack = portMalloc(NET_CMDPACK_LEN*sizeof(uint8_t)) ;
va_list ap;
va_start (ap, format);
int outLen = vsnprintf(cmdPack, NET_CMDPACK_LEN, (const char*)format, ap); //vsprintf (temp, cmd, ap); //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ܵ<EFBFBD>temp<6D><70>
if((outLen<=0)||( outLen > NET_CMDPACK_LEN)) //vsprintf (temp, cmd, ap); //<2F><><EFBFBD><EFBFBD>Ϊֹ<CEAA><D6B9><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ܵ<EFBFBD>temp<6D><70>
{
ErrorLogPrintf("%s,%d:cmdPack spillover<65><72>",__FILE__, __LINE__) ; //<2F><><EFBFBD><EFBFBD>NET_CMDPACK_LEN<45><4E>ֵ
status = RUNERR ;
goto netCmdOut ;
}
while(retryTimes--)
{
Ec20AtBufReset() ;
revTimes = 0 ;
//UARTx_Printf(EC20_UART, (uint8_t *)"%s", (uint8_t *)cmdPack);
UARTx_SendData(EC20_UART, cmdPack, outLen) ; //DMA<4D><41><EFBFBD><EFBFBD>
while( revTimes++ < sNetCmd[cmdNum].timeout )
{
Wait_For_Nms(100);
sNetCmd[cmdNum].trueOffset = kmp(ec20AtBuf, sNetCmd[cmdNum].trueStr) ;
if( sNetCmd[cmdNum].trueOffset >= 0)
{
status = RUNOK ;
goto netCmdOut ;
}
else if( kmp(ec20AtBuf, sNetCmd[cmdNum].falseStr) >= 0)
{
status = RUNERR ;
goto netCmdOut ;
}
}
Wait_For_Nms( 1000 ) ;
}
netCmdOut:portFree(cmdPack) ;
va_end (ap);
DebugLogPrintf("%s %s", NetCmdNumToString((enum eNetCmdNum)cmdNum), RunResultToString(status) ) ;
return (status) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Config_Context( uint8_t contextId )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>contextID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>( <APN>, <username>, <password><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ)
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult Config_Context( uint8_t contextId )
{
RunResult runStatus = EC20_SendNetCmd(COFCONTEXT, NULL, contextId, APN ) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Act_Context( uint8_t contextId )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>contextID
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult Act_Context( uint8_t contextId )
{
RunResult runStatus = EC20_SendNetCmd(ACTCONTEXT, NULL, contextId) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Deact_Context( uint8_t contextId )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>contextID
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult Deact_Context( uint8_t contextId )
{
RunResult runStatus = EC20_SendNetCmd(DEACTCONTEXT, NULL, contextId) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Query_Context( uint8_t contextId, uint8_t *localIp )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯcontextID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* @param2 *localIp: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>ݵĵ<EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
* ע <EFBFBD>Ŀǰֻ֧<EFBFBD><EFBFBD>contextIDС<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>·<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ȡ
**************************************************************************************************/
RunResult Query_Context( uint8_t contextId, uint8_t *localIp )
{
RunResult runStatus = EC20_SendNetCmd(QUERYCONTEXT, NULL, contextId) ;
if( RUNOK == runStatus )
{
switch(contextId)
{
case 1:
sNetCmd[QUERYCONTEXT].trueOffset = kmp(ec20AtBuf, "+QIACT: 1" );
break ;
case 2:
sNetCmd[QUERYCONTEXT].trueOffset = kmp(ec20AtBuf, "+QIACT: 2" );
break ;
case 3:
sNetCmd[QUERYCONTEXT].trueOffset = kmp(ec20AtBuf, "+QIACT: 3" );
break ;
default:
sNetCmd[QUERYCONTEXT].trueOffset = kmp(ec20AtBuf, "+QIACT: 1" );
break ;
}
if( (sNetCmd[QUERYCONTEXT].trueOffset>=0) &&
(ec20AtBuf[sNetCmd[QUERYCONTEXT].trueOffset+8] == (0x30+contextId))&&
(ec20AtBuf[sNetCmd[QUERYCONTEXT].trueOffset+10] == '1') //ƫ<>Ƶ<EFBFBD>ַ10ָʾcontext״̬<D7B4><CCAC>Activated<65><64>1<EFBFBD><31>Deactivated<65><64>0
)
{
runStatus = RUNOK ;
CopyValues(localIp, (uint8_t*)&ec20AtBuf[sNetCmd[QUERYCONTEXT].trueOffset+15], '"', MAX_IP_LEN) ;
//AppLogPrintf("ContextId %c <20><><EFBFBD><EFBFBD>IP<49><50>%s",contextId, localIp) ;
}
else
{
runStatus = RUNERR ;
}
}
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_QueryCsServiceStatus(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<EFBFBD><EFBFBD>CS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_QueryCsServiceStatus(void)
{
RunResult runStatus = TIMEOUT ;
int checkCsTimes = 45 ; //45*2S<32><53>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>CS Server<65><72><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>TCP(IP)_AT_Commands<64><73><EFBFBD>ֲ<EFBFBD>P8 Ҫ<><D2AA>90S<30>ȴ<EFBFBD> <stat>equals to 1 or 5
EC20_SendNetCmd(SETCS, NULL ) ;
while( checkCsTimes-- )
{
Wait_For_Nms(2000) ;
runStatus = EC20_SendNetCmd(QUERYCS, NULL ) ;
if( RUNOK == runStatus )
{
if( (sNetCmd[QUERYCS].trueOffset > 0)&&
((ec20AtBuf[sNetCmd[QUERYCS].trueOffset+9] == 0x31)||(ec20AtBuf[sNetCmd[QUERYCS].trueOffset+9] == 0x35) ))
{
runStatus =RUNOK ;
break;
}
else
{
runStatus =RUNERR ;
}
}
}
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_QueryPsServiceStatus(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<EFBFBD><EFBFBD>PS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_QueryPsServiceStatus(void)
{
RunResult runResult = TIMEOUT ;
int checkPsTimes = 30 ; //30*2S<32><53>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>CS Server<65><72><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> <20><>TCP(IP)_AT_Commands<64><73><EFBFBD>ֲ<EFBFBD>P8 Ҫ<><D2AA>60S<30>ȴ<EFBFBD> <stat>equals to 1 or 5
EC20_SendNetCmd(SETPS, NULL ) ; //Enable network registration unsolicited result code with location information+CREG: <stat>[,<lac>,<ci>[,<Act>]]
while( checkPsTimes-- )
{
Wait_For_Nms(2000) ;
runResult = EC20_SendNetCmd(QUERYPS, NULL ) ; //<2F><>ѯģ<D1AF><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PS server<65><72>״̬
if( RUNOK == runResult )
{
if(
(sNetCmd[QUERYPS].trueOffset > 0)&&
((ec20AtBuf[sNetCmd[QUERYPS].trueOffset+10] == 0x31)||(ec20AtBuf[sNetCmd[QUERYPS].trueOffset+10] == 0x35))
)
{
runResult =RUNOK ;
break ;
}
else
{
runResult =RUNERR ;
}
}
}
return (runResult) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_Query_SimIccid(char *simICCID)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯSIM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ICCID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 *simICCID<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ICCID<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_Query_SimIccid(char *simICCID)
{
char *start ;
memset(simICCID, 0, SIM_ICCID_LEN);
RunResult runStatus = EC20_SendNetCmd(QUERYICCID, NULL ) ;
if( RUNOK == runStatus )
{
CopyValues((uint8_t*)simICCID, (uint8_t*)&ec20AtBuf[(sNetCmd[QUERYICCID].trueOffset+8)], 0x0D, SIM_ICCID_LEN) ;
}
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> char* EC20_Query_NetInfo(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CSQ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>ŵ<EFBFBD>ַ
**************************************************************************************************/
char* EC20_Query_NetInfo(void)
{
char *end ;
RunResult runResult = EC20_SendNetCmd(QUERYNETINFO, NULL ) ;
if( RUNOK == runResult )
{
//start = strchr( (const char*)ec20ReceBuffer, ':' ) ;
end = strchr((const char*)&ec20AtBuf[sNetCmd[QUERYNETINFO].trueOffset], 0x0D) ;
*end = 0x00 ; //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>β
return (char*)&ec20AtBuf[sNetCmd[QUERYNETINFO].trueOffset+10] ;
}
else
{
return "<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<EFBFBD><EFBFBD>!" ;
}
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_Query_CSQ(char *csq)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CSQ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 *csq <EFBFBD><EFBFBD><EFBFBD><EFBFBD>csq<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_Query_CSQ(char *csq)
{
memset(csq, 0, CSQ_LEN+1);
RunResult runResult = EC20_SendNetCmd(QUERYCSQ, NULL ) ;
if( RUNOK == runResult )
{
CopyValues((uint8_t*)csq, (uint8_t*)&ec20AtBuf[sNetCmd[QUERYCSQ].trueOffset+6], ',', SIM_ICCID_LEN) ;
}
return (runResult) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_Net_Reg(char *errInfo, uint8_t errLen)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<EFBFBD><EFBFBD>ע<EFBFBD>CS\PS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 *errInfo <EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param2 errLen <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 status RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult EC20_Net_Reg(char *errInfo, uint8_t errLen)
{
RunResult runResult = TIMEOUT ;
runResult = EC20_Query_SimIccid(sEc20Param.simICCID) ;
if( RUNOK != runResult )
{
snprintf(errInfo, errLen, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SIM<EFBFBD><EFBFBD>") ;
ErrorLogPrintf("δ<EFBFBD><EFBFBD><EFBFBD>⵽SIM<EFBFBD><EFBFBD>") ;
return (RUNERR) ;
}
AppLogPrintf("Sim<EFBFBD><EFBFBD>ICCID<EFBFBD><EFBFBD>%.*s", SIM_ICCID_LEN, sEc20Param.simICCID) ;
runResult = EC20_QueryCsServiceStatus() ;
if( RUNOK != runResult )
{
snprintf(errInfo, errLen, "SIM<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>") ;
ErrorLogPrintf("SIMǷ<EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") ;
return (RUNERR) ;
}
EC20_QueryPsServiceStatus() ;
AppLogPrintf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>%s", EC20_Query_NetInfo()) ;
EC20_Query_CSQ(sEc20Param.csq) ;
snprintf(errInfo, errLen, "<EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%s", sEc20Param.csq) ;
AppLogPrintf("LTE CSQ<53><51>%.*s", CSQ_LEN, sEc20Param.csq) ;
return (runResult) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult ActivePDP( uint8_t contextId, uint8_t *localIp)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDP<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDP<EFBFBD><EFBFBD>· <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·IP
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* @param2 *localIp: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>ݵĵ<EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult ActivePDP( uint8_t contextId, uint8_t *localIp)
{
RunResult runResult = TIMEOUT ;
Config_Context(contextId) ; //<2F><><EFBFBD><EFBFBD>PDP VPN<50><4E><EFBFBD><EFBFBD>Ϣ
runResult = Act_Context(contextId) ; //<2F><><EFBFBD><EFBFBD>PDP
if( runResult == RUNOK )
{
Query_Context(contextId, localIp) ; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>-><3E><>ȡPDP<44><50>IP
}
return (runResult) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult DeactivePDP( uint8_t contextId, uint8_t *localIp)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDP<EFBFBD><EFBFBD>·
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 contextId: ȡֵ<EFBFBD><EFBFBD>Χ1~16
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 runStatus RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult DeactivePDP( uint8_t contextId)
{
RunResult runResult = TIMEOUT ;
runResult = Deact_Context(contextId) ;
}