in sim70x0/cellular_sim70x0_api.c [2191:2280]
CellularError_t Cellular_SetPdnConfig( CellularHandle_t cellularHandle,
uint8_t contextId,
const CellularPdnConfig_t * pPdnConfig )
{
CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
CellularError_t cellularStatus = CELLULAR_SUCCESS;
CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE * 2 ] = { '\0' }; /* APN and auth info is too long */
CellularAtReq_t atReqSetPdn =
{
cmdBuf,
CELLULAR_AT_NO_RESULT,
NULL,
NULL,
NULL,
0,
};
if( pPdnConfig == NULL )
{
LogError( ( "Cellular_ATCommandRaw: Input parameter is NULL" ) );
cellularStatus = CELLULAR_BAD_PARAMETER;
}
if( cellularStatus == CELLULAR_SUCCESS )
{
cellularStatus = IsValidPDP( contextId ) ? CELLULAR_SUCCESS : CELLULAR_BAD_PARAMETER; /* 0-3 */
}
if( cellularStatus == CELLULAR_SUCCESS )
{
/* Make sure the library is open. */
cellularStatus = _Cellular_CheckLibraryStatus( pContext );
}
if( cellularStatus == CELLULAR_SUCCESS )
{
const char * pPdnType = "IP"; /*default: CELLULAR_PDN_CONTEXT_IPV4 */
if( pPdnConfig->pdnContextType == CELLULAR_PDN_CONTEXT_IPV6 )
{
pPdnType = "IPV6";
}
else if( pPdnConfig->pdnContextType == CELLULAR_PDN_CONTEXT_IPV4V6 )
{
pPdnType = "IPV4V6";
}
( void ) snprintf( cmdBuf, sizeof( cmdBuf ), "AT+CGDCONT=%d,\"%s\",\"%s\"",
CELLULAR_PDN_CONTEXT_ID,
pPdnType,
pPdnConfig->apnName );
pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPdn );
if( pktStatus != CELLULAR_PKT_STATUS_OK )
{
LogError( ( "Cellular_SetPdnConfig: can't set PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
}
if( pPdnConfig->pdnAuthType == 0 )
{
( void ) snprintf( cmdBuf, sizeof( cmdBuf ), "AT+CGAUTH=%d,0", CELLULAR_PDN_CONTEXT_ID );
}
else
{
( void ) snprintf( cmdBuf, sizeof( cmdBuf ), "AT+CGAUTH=%d,%d,\"%s\",\"%s\"",
CELLULAR_PDN_CONTEXT_ID,
pPdnConfig->pdnAuthType,
pPdnConfig->password,
pPdnConfig->username );
}
cellularModuleContext_t * pSimContex = ( cellularModuleContext_t * ) pContext->pModueContext;
memcpy( &pSimContex->pdnCfg, pPdnConfig, sizeof( CellularPdnConfig_t ) );
pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPdn );
if( pktStatus != CELLULAR_PKT_STATUS_OK )
{
LogError( ( "Cellular_SetPdnConfig: can't set PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
}
}
return cellularStatus;
}