in modules/bg96/cellular_bg96_urc_handler.c [215:305]
static CellularPktStatus_t _parseUrcIndicationCsq( const CellularContext_t * pContext,
char * pUrcStr )
{
char * pToken = NULL;
CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
CellularError_t cellularStatus = CELLULAR_SUCCESS;
int32_t retStrtoi = 0;
int16_t csqRssi = CELLULAR_INVALID_SIGNAL_VALUE, csqBer = CELLULAR_INVALID_SIGNAL_VALUE;
CellularSignalInfo_t signalInfo = { 0 };
char * pLocalUrcStr = pUrcStr;
if( ( pContext == NULL ) || ( pUrcStr == NULL ) )
{
atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
}
else
{
/* Parse the RSSI index from string and convert it. */
atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
}
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &retStrtoi );
}
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
if( ( retStrtoi >= INT16_MIN ) && ( retStrtoi <= ( int32_t ) INT16_MAX ) )
{
cellularStatus = _Cellular_ConvertCsqSignalRssi( ( int16_t ) retStrtoi, &csqRssi );
if( cellularStatus != CELLULAR_SUCCESS )
{
atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
}
}
else
{
atCoreStatus = CELLULAR_AT_ERROR;
}
}
/* Parse the BER index from string and convert it. */
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
}
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &retStrtoi );
}
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
if( ( retStrtoi >= INT16_MIN ) &&
( retStrtoi <= ( int32_t ) INT16_MAX ) )
{
cellularStatus = _Cellular_ConvertCsqSignalBer( ( int16_t ) retStrtoi, &csqBer );
if( cellularStatus != CELLULAR_SUCCESS )
{
atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
}
}
else
{
atCoreStatus = CELLULAR_AT_ERROR;
}
}
/* Handle the callback function. */
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
signalInfo.rssi = csqRssi;
signalInfo.rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
signalInfo.rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
signalInfo.ber = csqBer;
signalInfo.bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
_Cellular_SignalStrengthChangedCallback( pContext, CELLULAR_URC_EVENT_SIGNAL_CHANGED, &signalInfo );
}
if( atCoreStatus != CELLULAR_AT_SUCCESS )
{
pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
}
return pktStatus;
}