348 lines
13 KiB
C
348 lines
13 KiB
C
![]() |
#include "ec20tcp.h"
|
|||
|
#include <stdlib.h>
|
|||
|
#include "syslib.h" //#define STR2(R) STR1(R)
|
|||
|
|
|||
|
/********************************************************************************
|
|||
|
* @file ec20tcp.c
|
|||
|
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
|
|||
|
* @version V1.0.0
|
|||
|
* @date 11-Dec-2018
|
|||
|
* @brief <EFBFBD>ṩQuectelģ<EFBFBD><EFBFBD>EC20<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP/IPӲ<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 connetcID<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID channal<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>
|
|||
|
* 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>12<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹ涨<EFBFBD><EFBFBD>TCP/IPЭ<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·1D<EFBFBD><EFBFBD><EFBFBD><EFBFBD>contextID=1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|||
|
* ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>Զ<EFBFBD>̨<EFBFBD><EFBFBD>ͬIP<EFBFBD>Ͷ˿ڵķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD>ṹ<EFBFBD><EFBFBD>ChannalP_s<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ÿһ·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @use<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD>Tcp_PDP_Init()<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>Tcp_Channal_Init<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>Tcp_SendData<EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*******************************************************************************/
|
|||
|
|
|||
|
/*****************************************
|
|||
|
*<EFBFBD>ڲ<EFBFBD>ʹ<EFBFBD>õij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
****************************************/
|
|||
|
#define TCP_CMDPACK_LEN 128 //EC20 TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
/********************************************************
|
|||
|
ec20ģ<EFBFBD><EFBFBD>TCP/IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*********************************************************/
|
|||
|
enum eTcpCmdNum
|
|||
|
{ OPENSOCKET =0, CLOSESOCKET =1, QUERYSOCKET =2,
|
|||
|
TCPSENDCMD =3, TCPSENDBUF =4
|
|||
|
} ; //ö<><C3B6>ec20ģ<30><C4A3>TCP<43><50><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
|||
|
volatile EC20_CMD_DATA_s sTcpCmd[5]=
|
|||
|
{
|
|||
|
// cmdNum cmdStr, timeout(100ms), trueStr, trueOffset falseStr revResult rtyNum
|
|||
|
{OPENSOCKET, "AT+QIOPEN="STR2(TCP_CONTEXTID)",%d,\"TCP\",\"%s\",%d,%d,1\r\n", (20*10), "+QIOPEN:", -1,"ERROR", TIMEOUT, 1 }, //<2F><><EFBFBD><EFBFBD>socket <20>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>150S
|
|||
|
{CLOSESOCKET, "AT+QICLOSE=%d,10\r\n" , (10*10), "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F>ر<EFBFBD>socket
|
|||
|
{QUERYSOCKET, "AT+QISTATE=1,%d\r\n" , 5, "+QISTATE:" , -1, "ERROR", TIMEOUT, 2 }, //<2F><>ѯsocket״̬
|
|||
|
{TCPSENDCMD, "AT+QISEND=%d,%d\r\n" , (2*10), ">" , -1, "ERROR", TIMEOUT, 1 }, //ͨ<><CDA8>socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{TCPSENDBUF, "%s" , (2*10), "SEND OK" , -1, "ERROR", TIMEOUT, 1 } //SOCKET<45><54><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
} ; //EC20ģ<30><C4A3>TCP<43><50><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 *TcpCmdNumToString(enum eTcpCmdNum 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> eTcpCmdNum<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 *TcpCmdNumToString(enum eTcpCmdNum result)
|
|||
|
{
|
|||
|
switch (result)
|
|||
|
{
|
|||
|
ENUM_CHIP_TYPE_CASE(OPENSOCKET)
|
|||
|
ENUM_CHIP_TYPE_CASE(CLOSESOCKET)
|
|||
|
ENUM_CHIP_TYPE_CASE(QUERYSOCKET)
|
|||
|
ENUM_CHIP_TYPE_CASE(TCPSENDCMD)
|
|||
|
ENUM_CHIP_TYPE_CASE(TCPSENDBUF)
|
|||
|
}
|
|||
|
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Tcp_PDP_Init( void )
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD>·
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 runResult RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**************************************************************************************************/
|
|||
|
RunResult Tcp_PDP_Init( void )
|
|||
|
{
|
|||
|
RunResult runResult = TIMEOUT ;
|
|||
|
uint8_t *tcpLocalIp = portMalloc(MAX_IP_LEN) ;
|
|||
|
runResult = Query_Context( TCP_CONTEXTID, tcpLocalIp ) ; //<2F><>ѯTCP_CONTEXTID<49>Ƿ<C7B7>
|
|||
|
if( RUNOK == runResult ) /*TCP_CONTEXTID<49>Ѽ<EFBFBD><D1BC><EFBFBD>*/ //ȥ<><C8A5><EFBFBD><EFBFBD>-><3E>ٴμ<D9B4><CEBC><EFBFBD>
|
|||
|
{
|
|||
|
// runResult = Deact_Context(TCP_CONTEXTID) ;
|
|||
|
// if( RUNOK != runResult ) /*TCP_CONTEXTIDȥ<44><C8A5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>*/ //ֱ<>ӷ<EFBFBD><D3B7>ش<EFBFBD><D8B4><EFBFBD>
|
|||
|
// {
|
|||
|
// return RUNERR ;
|
|||
|
// }
|
|||
|
return RUNOK ;
|
|||
|
}
|
|||
|
runResult = ActivePDP(TCP_CONTEXTID, tcpLocalIp) ;
|
|||
|
if( RUNOK == runResult )
|
|||
|
{
|
|||
|
AppLogPrintf("TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>%s", tcpLocalIp) ;
|
|||
|
}
|
|||
|
portFree(tcpLocalIp) ;
|
|||
|
return(runResult) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Tcp_Channal_Init( ChannalP_s *channal )
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 *channal<EFBFBD><EFBFBD>ChannalP_s<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 runResult RunResultö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**************************************************************************************************/
|
|||
|
RunResult Tcp_Channal_Init( ChannalP_s *channal )
|
|||
|
{
|
|||
|
RunResult runResult = TIMEOUT ;
|
|||
|
runResult = Close_Socket(channal->connectId) ;
|
|||
|
if( runResult != RUNOK ) //<2F>ر<EFBFBD>SOCKETʧ<54><CAA7>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>ʧ<EFBFBD><CAA7>״̬
|
|||
|
return(runResult) ;
|
|||
|
runResult = Open_Socket(channal->connectId, channal->serverIP, channal->serverPort, channal->localPort) ;
|
|||
|
if( RUNOK == runResult )
|
|||
|
Query_Socket(channal->connectId) ;
|
|||
|
return(runResult) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Tcp_SendData(ChannalP_s *channal, uint8_t *sendBuf, uint16_t sendLen)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>channal<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪsendLen<EFBFBD><EFBFBD>sendBuf<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>
|
|||
|
* @param1 *channal<EFBFBD><EFBFBD>ChannalP_s<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 *sendBuf<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
* @param3 sendLen<EFBFBD><EFBFBD><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 Tcp_SendData(ChannalP_s *channal, uint8_t *sendBuf, uint16_t sendLen)
|
|||
|
{
|
|||
|
if( sendLen <=0 )
|
|||
|
{
|
|||
|
return (RUNOK) ;
|
|||
|
}
|
|||
|
uint8_t times = 0, enableSendData = 0 ;
|
|||
|
uint16_t revTimes = 0 ;
|
|||
|
RunResult runStatus = TIMEOUT ;
|
|||
|
Ec20AtBufReset() ;
|
|||
|
UARTx_SendString(EC20_UART, (uint8_t*)sTcpCmd[TCPSENDCMD].cmdStr, channal->connectId, sendLen );
|
|||
|
while( times++ < 70 )
|
|||
|
{
|
|||
|
Wait_For_Nms(20) ;
|
|||
|
if( NULL != strchr((const char*)ec20AtBuf, '>') )
|
|||
|
{
|
|||
|
enableSendData = 1 ;
|
|||
|
break ;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if( enableSendData == 1 ) //<2F>Ѿ<EFBFBD><D1BE>ɹ<EFBFBD><C9B9>յ<EFBFBD><D5B5><EFBFBD>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF>Է<EFBFBD><D4B7><EFBFBD>TCP<43><50>Ҫ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
UARTx_SendData(EC20_UART, (char*)sendBuf, sendLen) ;
|
|||
|
while( revTimes++ < sTcpCmd[TCPSENDBUF].timeout )
|
|||
|
{
|
|||
|
Wait_For_Nms(100);
|
|||
|
sTcpCmd[TCPSENDBUF].trueOffset = kmp(ec20AtBuf, sTcpCmd[TCPSENDBUF].trueStr) ;
|
|||
|
if( sTcpCmd[TCPSENDBUF].trueOffset >= 0)
|
|||
|
{
|
|||
|
runStatus = RUNOK ;
|
|||
|
DebugLogPrintf("%s %s", TcpCmdNumToString(TCPSENDBUF), RunResultToString(runStatus)) ;
|
|||
|
break ;
|
|||
|
}
|
|||
|
else if( kmp(ec20AtBuf, sTcpCmd[TCPSENDBUF].falseStr) >= 0)
|
|||
|
{
|
|||
|
runStatus = RUNERR ;
|
|||
|
ErrorLogPrintf("%s %s %s", TcpCmdNumToString(TCPSENDBUF), RunResultToString(runStatus), ec20AtBuf ) ;
|
|||
|
break ;
|
|||
|
}
|
|||
|
}
|
|||
|
//EC20_SendTcpCmd( TCPSENDBUF, NULL ) ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ErrorLogPrintf("%s %s %s %s", TcpCmdNumToString(TCPSENDCMD), RunResultToString(runStatus), "δ<EFBFBD>յ<EFBFBD>\">\"", ec20AtBuf ) ;
|
|||
|
}
|
|||
|
return (runStatus) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_SendTcpCmd( 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>Tcp<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_SendTcpCmd( uint8_t cmdNum, char *format,... )
|
|||
|
{
|
|||
|
uint8_t revTimes = 0 ;
|
|||
|
RunResult status = TIMEOUT ;
|
|||
|
uint8_t retryTimes = sTcpCmd[cmdNum].rtyNum ;
|
|||
|
char *cmdPack = NULL ;
|
|||
|
format = sTcpCmd[cmdNum].cmdStr ;
|
|||
|
cmdPack = portMalloc(TCP_CMDPACK_LEN*sizeof(uint8_t)) ;
|
|||
|
va_list ap;
|
|||
|
va_start (ap, format);
|
|||
|
int outLen = vsnprintf(cmdPack, TCP_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 > TCP_CMDPACK_LEN))
|
|||
|
{
|
|||
|
ErrorLogPrintf("Tcp cmdPack <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D><><EFBFBD><EFBFBD>TCP_CMDPACK_LEN<45><4E>ֵ<EFBFBD><D6B5>") ;
|
|||
|
status = RUNERR ;
|
|||
|
goto tcpCmdOut ;
|
|||
|
}
|
|||
|
while(retryTimes--)
|
|||
|
{
|
|||
|
Ec20AtBufReset() ;
|
|||
|
revTimes = 0 ;
|
|||
|
UARTx_SendData(EC20_UART, cmdPack, outLen ) ; //DMA<4D><41><EFBFBD><EFBFBD>
|
|||
|
while( revTimes++ < sTcpCmd[cmdNum].timeout )
|
|||
|
{
|
|||
|
Wait_For_Nms(100) ;
|
|||
|
sTcpCmd[cmdNum].trueOffset = kmp(ec20AtBuf, sTcpCmd[cmdNum].trueStr) ;
|
|||
|
if( sTcpCmd[cmdNum].trueOffset >= 0)
|
|||
|
{
|
|||
|
status = RUNOK ;
|
|||
|
goto tcpCmdOut ;
|
|||
|
}
|
|||
|
else if( kmp(ec20AtBuf, sTcpCmd[cmdNum].falseStr) >= 0)
|
|||
|
{
|
|||
|
status = RUNERR ;
|
|||
|
goto tcpCmdOut ;
|
|||
|
}
|
|||
|
}
|
|||
|
Wait_For_Nms( 1000 ) ;
|
|||
|
}
|
|||
|
tcpCmdOut:
|
|||
|
portFree(cmdPack) ;
|
|||
|
va_end(ap) ;
|
|||
|
DebugLogPrintf("%s %s", TcpCmdNumToString((enum eTcpCmdNum)cmdNum), RunResultToString(status) ) ;
|
|||
|
return (status) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Open_Socket(uint8_t connectId, uint8_t *serverIp, uint16_t serverPortNum, uint16_t localPortNum )
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP Socket
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 connectId<EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID
|
|||
|
* @param2 *serverIp<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @param3 serverPortNum<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<EFBFBD>
|
|||
|
* @param4 localPortNum<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 Open_Socket(uint8_t connectId, uint8_t *serverIp, uint16_t serverPortNum, uint16_t localPortNum )
|
|||
|
{
|
|||
|
RunResult runStatus = TIMEOUT ;
|
|||
|
runStatus = EC20_SendTcpCmd(OPENSOCKET, NULL, connectId, serverIp, serverPortNum, localPortNum ) ;
|
|||
|
if( RUNOK == runStatus )
|
|||
|
{
|
|||
|
if( (ec20AtBuf[sTcpCmd[OPENSOCKET].trueOffset+9] == (0X30+connectId)) &&
|
|||
|
(ec20AtBuf[sTcpCmd[OPENSOCKET].trueOffset+11] == '0')
|
|||
|
)
|
|||
|
{
|
|||
|
runStatus = RUNOK ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
runStatus = RUNERR ;
|
|||
|
}
|
|||
|
}
|
|||
|
return (runStatus) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Close_Socket(uint8_t connectId)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ر<EFBFBD>TCP Socket
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 connectId<EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID
|
|||
|
* <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 Close_Socket(uint8_t connectId)
|
|||
|
{
|
|||
|
RunResult runStatus = TIMEOUT ;
|
|||
|
runStatus = EC20_SendTcpCmd(CLOSESOCKET, NULL, connectId ) ;
|
|||
|
return (runStatus) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Query_Socket(uint8_t connectId)
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ѯTCP Socket״̬
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 connectId<EFBFBD><EFBFBD>TCP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ID
|
|||
|
* <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 Query_Socket(uint8_t connectId)
|
|||
|
{
|
|||
|
RunResult runStatus = TIMEOUT ;
|
|||
|
runStatus = EC20_SendTcpCmd(QUERYSOCKET, NULL, connectId ) ;
|
|||
|
if( RUNOK == runStatus )
|
|||
|
{
|
|||
|
uint8_t serverPort[5] = {0} ;
|
|||
|
ChannalP_s *sReturnP ;
|
|||
|
sReturnP = portMalloc(sizeof(ChannalP_s)) ;
|
|||
|
sReturnP->connectId = ec20AtBuf[sTcpCmd[QUERYSOCKET].trueOffset+10] ;
|
|||
|
CopyValues(sReturnP->serverIP, (uint8_t*)&ec20AtBuf[sTcpCmd[QUERYSOCKET].trueOffset+19], ',', MAX_IP_LEN) ;
|
|||
|
CopyValues(serverPort, (uint8_t*)&ec20AtBuf[sTcpCmd[QUERYSOCKET].trueOffset+20+strlen((const char*)sReturnP->serverIP)], ',', 5) ;
|
|||
|
DebugLogPrintf("TCP Channal<61><6C>%c <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>%s<><73> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF>%s", sReturnP->connectId, sReturnP->serverIP, serverPort) ;
|
|||
|
portFree(sReturnP) ;
|
|||
|
}
|
|||
|
return (runStatus) ;
|
|||
|
}
|
|||
|
|
|||
|
/**************************************************************************************************
|
|||
|
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> TcpUrcType TcpUrcHandle( char *recvBuf, uint16_t recvLen )
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> TCP/IPЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>鷵<EFBFBD>ص<EFBFBD>һдURC<EFBFBD><EFBFBD><EFBFBD>ദ<EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param1 recvBuf <EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param2 recvLen <EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param TcpUrcType TcpUrcTypeö<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**************************************************************************************************/
|
|||
|
TcpUrcType TcpUrcHandle( char *recvBuf, uint16_t recvLen )
|
|||
|
{
|
|||
|
TcpUrcType urcType = UNKNOWM ;
|
|||
|
if( kmp(recvBuf, "+QIURC: \"closed\"") > 0 )
|
|||
|
{
|
|||
|
urcType = CLOSED ;
|
|||
|
}
|
|||
|
else if( kmp(recvBuf, "+QIURC: \"pdpdeact\"") > 0 )
|
|||
|
{
|
|||
|
urcType = PDPDEACT ;
|
|||
|
}
|
|||
|
else if( kmp(recvBuf, "+QIURC: \"incoming\"") > 0 )
|
|||
|
{
|
|||
|
urcType = INCOMING_FULL ;
|
|||
|
}
|
|||
|
else if( kmp(recvBuf, "+QIURC: \"incoming full\"") > 0 )
|
|||
|
{
|
|||
|
urcType = INCOMING_CONT ;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
urcType = UNKNOWM ;
|
|||
|
}
|
|||
|
return urcType ;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|