stm32_ota/HARDWARE/LTE/EC20/ec20http.c

343 lines
14 KiB
C
Raw Normal View History

2023-12-15 06:28:06 +00:00
#include "ec20http.h"
#include <stdlib.h>
#include "syslib.h" //#define STR2(R) STR1(R)
/********************************************************************************
* @file ec20http.c
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief <EFBFBD>Quectelģ<EFBFBD><EFBFBD>EC20<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTTP<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>HTTPЭ<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·1D<EFBFBD><EFBFBD><EFBFBD><EFBFBD>contextID=2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTTP<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* @use<EFBFBD><EFBFBD>
* <EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD>Http_Init()<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>HTTP<EFBFBD><EFBFBD>·<EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>Send_Post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>POST<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>Http_Read<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>POST<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
/*****************************************
*<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
****************************************/
#define HTTP_CMDPACK_LEN 300 //EC20 HTTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define HTTP_CONTEXTID 2 //1~16 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹ涨<C6B9><E6B6A8>HTTPЭ<50><D0AD>ֻ<EFBFBD><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·1D<31><44><EFBFBD><EFBFBD>contextID=2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTTP<54><50>·
/********************************************************
ec20ģ<EFBFBD><EFBFBD>TCP/IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ATָ<EFBFBD><EFBFBD><EFBFBD>
*********************************************************/
enum eHttpCmdNum
{
HTTPCONTEST =0, ENREQHEADER =1, CLOSETIME =2,
BODYTYPE =3, SETURLCMD =4, HTTPURL =5,
POSTREQCMD =6, POSTREQBUF =7, HTTPREAD =8
} ; //ö<><C3B6>ec20ģ<30><C4A3>http<74><70><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
volatile EC20_CMD_DATA_s sHttpCmd[9]=
{
// cmdNum cmdStr, timeout(100ms), trueStr, trueOffset, falseStr revResult rtyNum
{HTTPCONTEST, "AT+QHTTPCFG=\"contextid\","STR2(HTTP_CONTEXTID)"\r\n", 5, "OK", -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD>httpʹ<70>õ<EFBFBD>contextid
{ENREQHEADER, "AT+QHTTPCFG=\"requestheader\",1\r\n" , 5, "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
{CLOSETIME, "AT+QHTTPCFG=\"closewaittime\",100\r\n" , 5, "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
{BODYTYPE, "AT+QHTTPCFG=\"contenttype\",1\r\n" , 5, "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD>content_typeΪ 1 text/plain<69><6E><EFBFBD><EFBFBD>
{SETURLCMD, "AT+QHTTPURL=%d,60\r\n" , (60*10), "CONNECT", -1, "ERROR", TIMEOUT, 1 }, //<2F><><EFBFBD><EFBFBD>URL
{HTTPURL, "%s" , 5, "OK" , -1, "ERROR", TIMEOUT, 2 }, //<2F><><EFBFBD><EFBFBD>post<73><74><EFBFBD><EFBFBD>
{POSTREQCMD, "AT+QHTTPPOST=%d,6,6\r\n" , (6*10), "CONNECT", -1, "ERROR", TIMEOUT, 1 },
{POSTREQBUF, "%s" , (8*10), "+QHTTPPOST: 0,200", -1, "ERROR", TIMEOUT, 1 }, //<2F><>ȡhttp<74><70><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
//{HTTPREAD, "AT+QHTTPREAD=6\r\n" , (6*10), "OK", -1, "ERROR", TIMEOUT, 2 }
{HTTPREAD, "AT+QHTTPREAD=6\r\n" , (10*10), "+QHTTPREAD", -1, "ERROR", TIMEOUT, 1 }
} ; //EC20ģ<30><C4A3>HTTP<54><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 *HttpCmdNumToString(enum eHttpCmdNum 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> eHttpCmdNum<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 *HttpCmdNumToString(enum eHttpCmdNum result)
{
switch (result)
{
ENUM_CHIP_TYPE_CASE(HTTPCONTEST)
ENUM_CHIP_TYPE_CASE(ENREQHEADER)
ENUM_CHIP_TYPE_CASE(CLOSETIME)
ENUM_CHIP_TYPE_CASE(BODYTYPE)
ENUM_CHIP_TYPE_CASE(SETURLCMD)
ENUM_CHIP_TYPE_CASE(HTTPURL)
ENUM_CHIP_TYPE_CASE(POSTREQCMD)
ENUM_CHIP_TYPE_CASE(POSTREQBUF)
ENUM_CHIP_TYPE_CASE(HTTPREAD)
}
return "<EFBFBD>޴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult EC20_SendHttpCmd( 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>http<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_SendHttpCmd( uint8_t cmdNum, char *format,... )
{
uint8_t revTimes = 0 ;
RunResult status = TIMEOUT ;
uint8_t retryTimes = sHttpCmd[cmdNum].rtyNum ;
char *cmdPack = NULL ;
format = sHttpCmd[cmdNum].cmdStr ;
cmdPack = portMalloc(HTTP_CMDPACK_LEN*sizeof(uint8_t)) ;
va_list ap;
va_start (ap, format);
int outLen = vsnprintf(cmdPack, HTTP_CMDPACK_LEN, (const char*)format, ap) ;
if((outLen<=0)||( outLen > HTTP_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("Http cmdPack <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D><><EFBFBD><EFBFBD>HTTP_CMDPACK_LEN<45><4E>ֵ<EFBFBD><D6B5>") ;
goto httpCmdOut ;
}
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++ < (sHttpCmd[cmdNum].timeout*2) )
{
Wait_For_Nms(50);
sHttpCmd[cmdNum].trueOffset = kmp(ec20AtBuf, sHttpCmd[cmdNum].trueStr) ;
if( sHttpCmd[cmdNum].trueOffset >= 0)
{
status = RUNOK ;
goto httpCmdOut ;
}
else if( kmp(ec20AtBuf, sHttpCmd[cmdNum].falseStr) >= 0)
{
status = RUNERR ;
goto httpCmdOut ;
}
}
Wait_For_Nms( 1000 ) ;
}
httpCmdOut:portFree(cmdPack) ;
va_end (ap);
DebugLogPrintf("%s %s", HttpCmdNumToString((enum eHttpCmdNum)cmdNum), RunResultToString(status) ) ;
return (status) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Http_Config(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> http<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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>
**************************************************************************************************/
RunResult Http_Config(void)
{
RunResult runStatus = TIMEOUT ;
runStatus = EC20_SendHttpCmd(HTTPCONTEST, NULL ) ;
if( RUNOK != runStatus )
{
return (runStatus) ;
}
runStatus = EC20_SendHttpCmd(ENREQHEADER, NULL ) ;
if( RUNOK != runStatus )
{
return (runStatus) ;
}
if( (kmp(sEc20Param.ec20SoftVer , "EC20CEFDKGR06A03M2G") < 0) ) //EC20<32>ð汾<C3B0><E6B1BE>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
{
runStatus = EC20_SendHttpCmd(CLOSETIME, NULL ) ; //ec20SoftVer
if( RUNOK != runStatus )
{
return (runStatus) ;
}
}
// runStatus = EC20_SendHttpCmd(CLOSETIME, NULL ) ; //ec20SoftVer
// if( RUNOK != runStatus )
// {
// return (runStatus) ;
// }
runStatus = EC20_SendHttpCmd(BODYTYPE, NULL ) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Http_PDP_Init(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> httpЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ID contextid<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪHTTP_CONTEXTID
**************************************************************************************************/
RunResult Http_PDP_Init( void )
{
RunResult runResult = TIMEOUT ;
uint8_t *httpLocalIp = portMalloc(MAX_IP_LEN) ;
runResult = Query_Context( HTTP_CONTEXTID, httpLocalIp ) ; //<2F><>ѯHTTP_CONTEXTID<49>Ƿ񼤻<C7B7>
if( RUNOK == runResult ) /*HTTP_CONTEXTID<49>Ѽ<EFBFBD><D1BC><EFBFBD>*/ //ȥ<><C8A5><EFBFBD><EFBFBD>-><3E>ٴμ<D9B4><CEBC><EFBFBD>
{
// runResult = Deact_Context(HTTP_CONTEXTID) ;
// if( RUNOK != runResult ) /*HTTP_CONTEXTIDȥ<44><C8A5><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>*/ //ֱ<>ӷ<EFBFBD><D3B7>ش<EFBFBD><D8B4><EFBFBD>
// {
// return RUNERR ;
// }
return RUNOK ;
}
runResult = ActivePDP(HTTP_CONTEXTID, httpLocalIp) ;
if( RUNOK == runResult )
{
AppLogPrintf("HTTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>%s", httpLocalIp) ;
}
portFree(httpLocalIp) ;
return(runResult) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Set_HttpURL(char *host)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 *host <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
**************************************************************************************************/
RunResult Set_HttpURL(char *host)
{
RunResult runStatus = TIMEOUT ;
int hostLen = strlen(host) ;
char *url = portMalloc(10+hostLen) ;
snprintf(url, 10+hostLen, "%s%s", "http://", host) ;
runStatus = EC20_SendHttpCmd(SETURLCMD, NULL, strlen((const char*)url) ) ;
if( RUNOK == runStatus )
{
runStatus = EC20_SendHttpCmd(HTTPURL, NULL, url ) ;
if( RUNOK == runStatus )
{
AppLogPrintf("POST URL:%s.", url) ;
}
}
portFree(url) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Http_PDP_Init(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> http<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 Http_Init( void )
{
RunResult runStatus = TIMEOUT ;
if( RUNOK != Http_Config() )
return (runStatus) ;
runStatus = Http_PDP_Init() ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Send_Post( POSTP_s *psHttpP, char* postBody )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> http<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 *psHttpP POSTP_s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
* @param2 *postBody post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><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>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RUNOK˵<EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD>Http_Read<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 Send_Post( POSTP_s *psHttpP, char* postBody )
{
int outLen = 0 ;
RunResult runStatus = TIMEOUT ;
Set_HttpURL(psHttpP->host) ; //<2F><><EFBFBD><EFBFBD>HTTP<54><50><EFBFBD><EFBFBD>URL
char *headerBodyBuf = portMalloc(HTTP_CMDPACK_LEN) ;
outLen = snprintf(headerBodyBuf, HTTP_CMDPACK_LEN, psHttpP->postBuf, psHttpP->host, psHttpP->httpPort, psHttpP->host,strlen(postBody), postBody ) ;
if((outLen<=0)||(outLen>HTTP_CMDPACK_LEN))
{
runStatus = RUNERR ;
ErrorLogPrintf("headerBodyBuf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--<2D><><EFBFBD><EFBFBD>HTTP_CMDPACK_LEN<45><4E>ֵ<EFBFBD><D6B5>") ;
goto PostOut ;
}
runStatus = EC20_SendHttpCmd(POSTREQCMD, NULL, outLen ) ; //<2F><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( RUNOK != runStatus )
{
goto PostOut ;
}
runStatus = EC20_SendHttpCmd(POSTREQBUF, NULL, headerBodyBuf ) ;//<2F><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //DebugLogPrintf("%s",headerBodyBuf) ;
PostOut:
portFree(headerBodyBuf) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> RunResult Http_Read( void )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡhttp<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>ec20HttpBuf<EFBFBD><EFBFBD>
**************************************************************************************************/
RunResult Http_Read( void )
{
uint8_t revTimes = 0 ;
int errCode = 0 ;
RunResult runStatus = TIMEOUT ;
Ec20HttpBufReset() ; //ec20HttpBuf<75><66><EFBFBD><EFBFBD> ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
httpDataMode = true ; //<2F><>EC20_UART<52><54><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>ģʽ<C4A3><CABD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD>ģʽ
UARTx_SendData(EC20_UART, sHttpCmd[HTTPREAD].cmdStr, strlen((const char*)sHttpCmd[HTTPREAD].cmdStr) ) ; //DMA<4D><41><EFBFBD><EFBFBD>
while( revTimes++ < (sHttpCmd[HTTPREAD].timeout) )
{
Wait_For_Nms(100) ; //<2F>ȴ<EFBFBD>100ms
sHttpCmd[HTTPREAD].trueOffset = kmp(ec20HttpBuf, sHttpCmd[HTTPREAD].trueStr) ; //<2F><>ec20HttpBuf<75><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD> sHttpCmd[HTTPREAD].trueStr<74>ִ<EFBFBD>
if( sHttpCmd[HTTPREAD].trueOffset >= 0)
{
if( ec20HttpBuf[sHttpCmd[HTTPREAD].trueOffset+12] == 0x30 ) /*"AT+QHTTPREAD"ָ<><EFBFBD>ء<EFBFBD>+QHTTPREAD: 0<><30> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>*/
{
errCode = 0 ;
runStatus = RUNOK ;
}
else /*"AT+QHTTPREAD"ָ<><EFBFBD>ء<EFBFBD>+QHTTPREAD: <err><3E><> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{
errCode = (ec20HttpBuf[sHttpCmd[HTTPREAD].trueOffset+1]-0x30)*100+(ec20HttpBuf[sHttpCmd[HTTPREAD].trueOffset+2]-0x30)*10+
(ec20HttpBuf[sHttpCmd[HTTPREAD].trueOffset+3]) ;
runStatus = RUNERR ;
}
HttpErrorCode(errCode) ;
break ;
}
else if( kmp(ec20AtBuf, sHttpCmd[HTTPREAD].falseStr) >= 0)
{
runStatus = RUNERR ;
break ;
}
}
httpDataMode = false ; //<2F>ر<EFBFBD> <20><><EFBFBD><EFBFBD>http<74><70><EFBFBD><EFBFBD>ģʽ
DebugLogPrintf("%s %s", HttpCmdNumToString(HTTPREAD), RunResultToString(runStatus) ) ;
return (runStatus) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void HttpErrorCode( int errCode )
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>HTTP<EFBFBD><EFBFBD><EFBFBD>صĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ա<EFBFBD>Quectel_EC2x&EG9x&EM05_HTTP(S)_AT_Commands_Manual_V1.0.pdf<EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>P35
* <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param1 errCode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**************************************************************************************************/
void HttpErrorCode( int errCode )
{
switch( errCode)
{
case 0:
AppLogPrintf("Http Operation successful.") ;
break ;
case 701:
AppLogPrintf("HTTP(S) unknown error.") ;
break ;
case 702:
AppLogPrintf("HTTP(S) timeout.") ;
break ;
default:
AppLogPrintf("HTTP(S) other error.") ;
break ;
}
}