in sim70x0/cellular_sim70x0_api.c [2336:2415]
CellularError_t Cellular_SocketRecv( CellularHandle_t cellularHandle,
CellularSocketHandle_t socketHandle,
uint8_t * pBuffer,
uint32_t bufferLength,
uint32_t * pReceivedDataLength )
{
CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
CellularError_t cellularStatus = CELLULAR_SUCCESS;
CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
uint32_t recvTimeout = DATA_READ_TIMEOUT_MS;
uint32_t recvLen = bufferLength;
_socketDataRecv_t dataRecv =
{
pReceivedDataLength,
pBuffer,
NULL
};
CellularAtReq_t atReqSocketRecv =
{
cmdBuf,
CELLULAR_AT_MULTI_DATA_WO_PREFIX,
"+CARECV",
_Cellular_RecvFuncData,
( void * ) &dataRecv,
bufferLength,
};
cellularStatus = _Cellular_CheckLibraryStatus( pContext );
if( cellularStatus != CELLULAR_SUCCESS )
{
LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
}
else if( socketHandle == NULL )
{
cellularStatus = CELLULAR_INVALID_HANDLE;
}
else if( ( pBuffer == NULL ) || ( pReceivedDataLength == NULL ) || ( bufferLength == 0U ) )
{
LogError( ( "_Cellular_RecvData: Bad input Param" ) );
cellularStatus = CELLULAR_BAD_PARAMETER;
}
else
{
/* Update recvLen to maximum module length. */
if( CELLULAR_MAX_RECV_DATA_LEN <= bufferLength )
{
recvLen = ( uint32_t ) CELLULAR_MAX_RECV_DATA_LEN;
}
/* Update receive timeout to default timeout if not set with setsocketopt. */
if( socketHandle->recvTimeoutMs != 0U )
{
recvTimeout = socketHandle->recvTimeoutMs;
}
LogDebug( ( "Cellular module wait +CDATAIND: %d ...", socketHandle->socketId ) );
cellularModuleContext_t * pSimContex = ( cellularModuleContext_t * ) pContext->pModueContext;
xEventGroupWaitBits( pSimContex->pdnEvent, CNACT_EVENT_BIT_IND, false, false,
pdMS_TO_TICKS( PDN_ACTIVATION_PACKET_REQ_TIMEOUT_MS ) );
/* Form the AT command. */
( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE,
"AT+CARECV=%ld,%ld", socketHandle->socketId, recvLen );
pktStatus = _Cellular_TimeoutAtcmdDataRecvRequestWithCallback( pContext,
atReqSocketRecv, recvTimeout, socketRecvDataPrefix, pContext );
if( pktStatus != CELLULAR_PKT_STATUS_OK )
{
/* Reset data handling parameters. */
LogError( ( "_Cellular_RecvData: Data Receive fail, pktStatus: %d", pktStatus ) );
cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
}
}
return cellularStatus;
}