in sim70x0/cellular_sim70x0_api.c [114:325]
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 CellularATError_t parsePdnStatusContextId( char * pToken,
CellularPdnStatus_t * pPdnStatusBuffers );
static CellularATError_t parsePdnStatusContextState( 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 );
/*-----------------------------------------------------------*/
/*
* //+CPSI: <System Mode>,<Operation Mode>,<MCC>-<MNC>,<TAC>,<SCellID>,<PCellID>,<Frequency Band>,<earfcn>,<dlbw>,<ulbw>,<RSRQ>,<RSRP>,<RSSI>,<RSSNR>
* //+CPSI: LTE CAT-M1,Online,440-52,0x6061,33815299,94,EUTRAN-BAND18,5900,3,3,-8,-84,-60,18
* //+CPSI: LTE NB-IOT,Online,440-20,0x1182,10171378,293,EUTRAN-BAND8,3740,0,0,-12,-75,-63,13
*/
static bool _parseSignalQuality( char * pQcsqPayload,
CellularSignalInfo_t * pSignalInfo )
{
char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
int32_t tempValue = 0;
if( ( pSignalInfo == NULL ) || ( pQcsqPayload == NULL ) )
{
LogError( ( "_parseSignalQuality: Invalid Input Parameters" ) );
return false;
}
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<System Mode> */
LogDebug( ( "_parseSignalQuality: get <System Mode> failed" ) );
return false;
}
if( ( strcmp( pToken, "LTE CAT-M1" ) != 0 ) &&
( strcmp( pToken, "LTE NB-IOT" ) != 0 ) )
{
LogDebug( ( "_parseSignalQuality: Unsupport <System Mode>" ) );
return false;
}
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<Operation Mode> */
LogDebug( ( "_parseSignalQuality: get <Operation Mode> failed" ) );
return false;
}
if( ( strcmp( pToken, "Online" ) != 0 ) )
{
LogDebug( ( "_parseSignalQuality: <Operation Mode>=%s", pToken ) );
return false;
}
if( ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<MCC>-<MNC>: 440-20 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<TAC>: 0x1182 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<SCellID>: 10171378 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<PCellID>: 293 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<Frequency Band>: EUTRAN-BAND8 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<earfcn>: 3740 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) || /*<dlbw>: 0 */
( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS ) ) /*<ulbw>: 0 */
{
LogDebug( ( "_parseSignalQuality: CPSI Response not expected format." ) );
return false;
}
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<RSRQ> */
LogDebug( ( "_parseSignalQuality: get RSRQ failed" ) );
return false;
}
if( Cellular_ATStrtoi( pToken, 10, &tempValue ) != CELLULAR_AT_SUCCESS )
{
LogError( ( "_parseSignalQuality: Error in processing RSRQ. Token %s", pToken ) );
return false;
}
pSignalInfo->rsrq = ( int16_t ) tempValue;
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<RSRP> */
LogDebug( ( "_parseSignalQuality: get RSRP failed" ) );
return false;
}
if( Cellular_ATStrtoi( pToken, 10, &tempValue ) != CELLULAR_AT_SUCCESS )
{
LogError( ( "_parseSignalQuality: Error in processing RSRP. Token %s", pToken ) );
return false;
}
pSignalInfo->rsrp = ( int16_t ) tempValue;
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<RSSI> */
LogDebug( ( "_parseSignalQuality: get RSSI failed" ) );
return false;
}
if( Cellular_ATStrtoi( pToken, 10, &tempValue ) != CELLULAR_AT_SUCCESS )
{
LogError( ( "_parseSignalQuality: Error in processing RSSI. Token %s", pToken ) );
return false;
}
pSignalInfo->rssi = ( int16_t ) tempValue;
if( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) != CELLULAR_AT_SUCCESS )
{ /*<RSSNR> */
LogDebug( ( "_parseSignalQuality: get RSSNR failed" ) );
return false;
}
if( Cellular_ATStrtoi( pToken, 10, &tempValue ) != CELLULAR_AT_SUCCESS )
{
LogError( ( "_parseSignalQuality: Error in processing SINR. pToken %s", pToken ) );
return false;
}
/* SINR -20 dBm to +30 dBm. */
pSignalInfo->sinr = ( int16_t ) ( SIGNAL_QUALITY_SINR_MIN_VALUE + 10 * tempValue / SIGNAL_QUALITY_SINR_DIVISIBILITY_FACTOR );
return true;
}