in source/cellular_3gpp_urc_handler.c [58:162]
static CellularPktStatus_t _parseRegStatusInRegStatusParsing( CellularContext_t * pContext,
CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _parseLacTacInRegStatus( CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _parseCellIdInRegStatus( const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _parseRatInfoInRegStatus( const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _parseRejectTypeInRegStatus( CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _parseRejectCauseInRegStatus( CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData );
static CellularPktStatus_t _regStatusSwitchParsingFunc( CellularContext_t * pContext,
uint8_t i,
CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData );
static void _regStatusGenerateLog( char * pRegPayload,
CellularNetworkRegType_t regType );
static void _regStatusGenerateEvent( const CellularContext_t * pContext,
CellularNetworkRegType_t regType,
const cellularAtData_t * pLibAtData );
static bool _Cellular_RegEventStatus( const cellularAtData_t * pLibAtData,
CellularNetworkRegType_t regType,
CellularNetworkRegistrationStatus_t prevCsRegStatus,
CellularNetworkRegistrationStatus_t prevPsRegStatus );
/*-----------------------------------------------------------*/
static CellularPktStatus_t _parseRegStatusInRegStatusParsing( CellularContext_t * pContext,
CellularNetworkRegType_t regType,
const char * pToken,
cellularAtData_t * pLibAtData )
{
int32_t tempValue = 0;
CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
CellularPktStatus_t packetStatus = CELLULAR_PKT_STATUS_OK;
CellularNetworkRegistrationStatus_t regStatus = REGISTRATION_STATUS_UNKNOWN;
if( ( regType != CELLULAR_REG_TYPE_CREG ) && ( regType != CELLULAR_REG_TYPE_CEREG ) &&
( regType != CELLULAR_REG_TYPE_CGREG ) )
{
packetStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
}
else
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
if( ( tempValue >= 0 ) && ( tempValue < ( int32_t ) REGISTRATION_STATUS_MAX ) )
{
/* tempValue range is checked before casting. */
/* coverity[misra_c_2012_rule_10_5_violation] */
regStatus = ( CellularNetworkRegistrationStatus_t ) tempValue;
}
else
{
atCoreStatus = CELLULAR_AT_ERROR;
}
}
packetStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
}
if( packetStatus == CELLULAR_PKT_STATUS_OK )
{
if( regType == CELLULAR_REG_TYPE_CREG )
{
pLibAtData->csRegStatus = regStatus;
}
else
{
pLibAtData->psRegStatus = regStatus;
}
if( regStatus == REGISTRATION_STATUS_REGISTERED_HOME )
{
LogDebug( ( "Netowrk registration : HOME" ) );
}
else if( regStatus == REGISTRATION_STATUS_ROAMING_REGISTERED )
{
LogDebug( ( "Netowrk registration : ROAMING" ) );
}
else if( regStatus == REGISTRATION_STATUS_REGISTRATION_DENIED )
{
/* clear the atlib data if the registration failed. */
LogDebug( ( "Netowrk registration : DEINED" ) );
_Cellular_InitAtData( pContext, 1 );
}
else
{
/* clear the atlib data if the registration failed. */
LogDebug( ( "Netowrk registration : OTHERS" ) );
_Cellular_InitAtData( pContext, 1 );
}
}
return packetStatus;
}