in modules/bg96/cellular_bg96_api.c [120:332]
static bool _parseSignalQuality( char * pQcsqPayload,
CellularSignalInfo_t * pSignalInfo );
static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularError_t controlSignalStrengthIndication( CellularContext_t * pContext,
bool enable );
static CellularPktStatus_t _Cellular_RecvFuncGetIccid( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularPktStatus_t _Cellular_RecvFuncGetImsi( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static bool _checkCrsmMemoryStatus( const char * pToken );
static bool _checkCrsmReadStatus( const char * pToken );
static bool _parseHplmn( char * pToken,
void * pData );
static CellularPktStatus_t _Cellular_RecvFuncGetHplmn( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularPktStatus_t _Cellular_RecvFuncGetSimCardStatus( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularSimCardLockState_t _getSimLockState( char * pToken );
static CellularPktStatus_t _Cellular_RecvFuncGetSimLockStatus( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularATError_t parsePdnStatusContextId( char * pToken,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularATError_t parsePdnStatusContextState( char * pToken,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularATError_t parsePdnStatusContextType( char * pToken,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularATError_t getPdnStatusParseToken( char * pToken,
uint8_t tokenIndex,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularATError_t getPdnStatusParseLine( char * pRespLine,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularPktStatus_t _Cellular_RecvFuncGetPdnStatus( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularError_t buildSocketConnect( CellularSocketHandle_t socketHandle,
char * pCmdBuf );
static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
const _socketDataRecv_t * pDataRecv,
uint32_t outBufSize );
static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularATError_t parseQpsmsMode( char * pToken,
CellularPsmSettings_t * pPsmSettings );
static CellularATError_t parseQpsmsRau( char * pToken,
CellularPsmSettings_t * pPsmSettings );
static CellularATError_t parseQpsmsRdyTimer( char * pToken,
CellularPsmSettings_t * pPsmSettings );
static CellularATError_t parseQpsmsTau( char * pToken,
CellularPsmSettings_t * pPsmSettings );
static CellularATError_t parseQpsmsActiveTime( char * pToken,
CellularPsmSettings_t * pPsmSettings );
static CellularATError_t parseGetPsmToken( char * pToken,
uint8_t tokenIndex,
CellularPsmSettings_t * pPsmSettings );
static CellularRat_t convertRatPriority( char * pRatString );
static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularPktStatus_t _Cellular_RecvFuncGetPsmSettings( CellularContext_t * pContext,
const CellularATCommandResponse_t * pAtResp,
void * pData,
uint16_t dataLen );
static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
char * pLine,
uint32_t lineLength,
char ** ppDataStart,
uint32_t * pDataLength );
static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
CellularSocketHandle_t socketHandle,
CellularSocketAccessMode_t dataAccessMode,
const CellularSocketAddress_t * pRemoteSocketAddress );
static CellularError_t registerDnsEventCallback( cellularModuleContext_t * pModuleContext,
CellularDnsResultEventCallback_t dnsEventCallback,
char * pDnsUsrData );
static void _dnsResultCallback( cellularModuleContext_t * pModuleContext,
char * pDnsResult,
char * pDnsUsrData );
static uint32_t appendBinaryPattern( char * cmdBuf,
uint32_t cmdLen,
uint32_t value,
bool endOfString );
static CellularPktStatus_t socketSendDataPrefix( void * pCallbackContext,
char * pLine,
uint32_t * pBytesRead );
/*-----------------------------------------------------------*/
static bool _parseSignalQuality( char * pQcsqPayload,
CellularSignalInfo_t * pSignalInfo )
{
char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
int32_t tempValue = 0;
bool parseStatus = true;
CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
if( ( pSignalInfo == NULL ) || ( pQcsqPayload == NULL ) )
{
LogError( ( "_parseSignalQuality: Invalid Input Parameters" ) );
parseStatus = false;
}
if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
{
if( ( strcmp( pToken, "GSM" ) != 0 ) &&
( strcmp( pToken, "CAT-M1" ) != 0 ) &&
( strcmp( pToken, "CAT-NB1" ) != 0 ) )
{
parseStatus = false;
}
}
else
{
LogDebug( ( "_parseSignalQuality: No Valid RAT in QCSQ Response" ) );
parseStatus = false;
}
if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
pSignalInfo->rssi = ( int16_t ) tempValue;
}
else
{
LogError( ( "_parseSignalQuality: Error in processing RSSI. Token %s", pToken ) );
parseStatus = false;
}
}
else
{
parseStatus = false;
}
if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
pSignalInfo->rsrp = ( int16_t ) tempValue;
}
else
{
LogError( ( "_parseSignalQuality: Error in processing RSRP. Token %s", pToken ) );
parseStatus = false;
}
}
else
{
parseStatus = false;
}
if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
/* SINR is reported as an integer value ranging from 0 to 250 representing 1/5 of a dB.
* Value 0 correspond to -20 dBm and 250 corresponds to +30 dBm. */
pSignalInfo->sinr = ( int16_t ) ( SIGNAL_QUALITY_SINR_MIN_VALUE + ( ( tempValue ) / ( SIGNAL_QUALITY_SINR_DIVISIBILITY_FACTOR ) ) );
}
else
{
LogError( ( "_parseSignalQuality: Error in processing SINR. pToken %s", pToken ) );
parseStatus = false;
}
}
else
{
parseStatus = false;
}
if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
{
atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
if( atCoreStatus == CELLULAR_AT_SUCCESS )
{
pSignalInfo->rsrq = ( int16_t ) tempValue;
}
else
{
LogError( ( "_parseSignalQuality: Error in processing RSRQ. Token %s", pToken ) );
parseStatus = false;
}
}
else
{
parseStatus = false;
}
return parseStatus;
}