in modules/sara_r4/cellular_r4_api.c [512:609]
CellularError_t Cellular_SocketRecv( CellularHandle_t cellularHandle,
CellularSocketHandle_t socketHandle,
/* coverity[misra_c_2012_rule_8_13_violation] */
uint8_t * pBuffer,
uint32_t bufferLength,
/* coverity[misra_c_2012_rule_8_13_violation] */
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 = { 0 };
CellularAtReq_t atReqSocketRecv =
{
NULL,
CELLULAR_AT_MULTI_DATA_WO_PREFIX,
"+USORD",
_Cellular_RecvFuncData,
NULL,
0,
};
uint32_t sessionId = 0;
dataRecv.pDataLen = pReceivedDataLength;
dataRecv.pData = pBuffer;
atReqSocketRecv.pAtCmd = cmdBuf;
atReqSocketRecv.pData = ( void * ) &dataRecv;
atReqSocketRecv.dataLen = bufferLength;
cellularStatus = _Cellular_CheckLibraryStatus( pContext );
if( cellularStatus != CELLULAR_SUCCESS )
{
LogDebug( ( "Cellular_SocketRecv: _Cellular_CheckLibraryStatus failed" ) );
}
else if( socketHandle == NULL )
{
cellularStatus = CELLULAR_INVALID_HANDLE;
}
else if( ( pBuffer == NULL ) || ( pReceivedDataLength == NULL ) || ( bufferLength == 0U ) )
{
LogDebug( ( "Cellular_SocketRecv: Bad input Param" ) );
cellularStatus = CELLULAR_BAD_PARAMETER;
}
else
{
sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
if( sessionId == INVALID_SESSION_ID )
{
LogError( ( "Cellular_SocketRecv : invalid session ID for socket index %u",
socketHandle->socketId ) );
cellularStatus = CELLULAR_INVALID_HANDLE;
}
}
if( cellularStatus == CELLULAR_SUCCESS )
{
/* 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( recvLen > 0 )
{
if( socketHandle->recvTimeoutMs != 0U )
{
recvTimeout = socketHandle->recvTimeoutMs;
}
/* The return value of snprintf is not used.
* The max length of the string is fixed and checked offline. */
/* coverity[misra_c_2012_rule_21_6_violation]. */
( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE,
"%s%u,%u", "AT+USORD=", sessionId, recvLen );
pktStatus = _Cellular_TimeoutAtcmdDataRecvRequestWithCallback( pContext,
atReqSocketRecv,
recvTimeout,
socketRecvDataPrefix,
NULL );
if( pktStatus != CELLULAR_PKT_STATUS_OK )
{
/* Reset data handling parameters. */
LogError( ( "Cellular_SocketRecv: Data Receive fail, pktStatus: %d", pktStatus ) );
cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
}
}
}
return cellularStatus;
}