本文整理汇总了C++中WDI_DS_ClientDataType::receiveFrameCB方法的典型用法代码示例。如果您正苦于以下问题:C++ WDI_DS_ClientDataType::receiveFrameCB方法的具体用法?C++ WDI_DS_ClientDataType::receiveFrameCB怎么用?C++ WDI_DS_ClientDataType::receiveFrameCB使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WDI_DS_ClientDataType
的用法示例。
在下文中一共展示了WDI_DS_ClientDataType::receiveFrameCB方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WDTS_RxPacket
//.........这里部分代码省略.........
pRxMetadata->roamCandidateInd = WDI_RX_BD_GET_ROAMCANDIDATEIND(pBDHeader);
#endif
/* typeSubtype in BD doesn't look like correct. Fill from frame ctrl
TL does it for Volans but TL does not know BD for Prima. WDI should do it */
if ( 0 == WDI_RX_BD_GET_FT(pBDHeader) ) {
if ( bASF ) {
pRxMetadata->subtype = WDI_MAC_DATA_QOS_DATA;
pRxMetadata->type = WDI_MAC_DATA_FRAME;
} else {
pMacFrameCtl = (tpSirMacFrameCtl)(((wpt_uint8*)pBDHeader) + ucMPDUHOffset);
pRxMetadata->subtype = pMacFrameCtl->subType;
pRxMetadata->type = pMacFrameCtl->type;
}
} else {
pMacFrameCtl = (tpSirMacFrameCtl)(((wpt_uint8*)pBDHeader) + WDI_RX_BD_HEADER_SIZE);
pRxMetadata->subtype = pMacFrameCtl->subType;
pRxMetadata->type = pMacFrameCtl->type;
}
pRxMetadata->mpduHeaderPtr = pBDHeader + ucMPDUHOffset;
pRxMetadata->mpduDataPtr = pBDHeader + usMPDUDOffset;
pRxMetadata->mpduLength = usMPDULen;
pRxMetadata->mpduHeaderLength = ucMPDUHLen;
/*------------------------------------------------------------------------
Gather AMPDU information
------------------------------------------------------------------------*/
pRxMetadata->ampdu_reorderOpcode = (wpt_uint8)WDI_RX_BD_GET_BA_OPCODE(pBDHeader);
pRxMetadata->ampdu_reorderSlotIdx = (wpt_uint8)WDI_RX_BD_GET_BA_SI(pBDHeader);
pRxMetadata->ampdu_reorderFwdIdx = (wpt_uint8)WDI_RX_BD_GET_BA_FI(pBDHeader);
pRxMetadata->currentPktSeqNo = (wpt_uint16)WDI_RX_BD_GET_BA_CSN(pBDHeader);
/*------------------------------------------------------------------------
Gather AMSDU information
------------------------------------------------------------------------*/
pRxMetadata->amsdu_asf = bASF;
pRxMetadata->amsdu_aef = bAEF;
pRxMetadata->amsdu_esf = bFSF;
pRxMetadata->amsdu_lsf = bLSF;
pRxMetadata->amsdu_size = WDI_RX_BD_GET_AMSDU_SIZE(pBDHeader);
pRxMetadata->rssi0 = WDI_RX_BD_GET_RSSI0(pBDHeader);
pRxMetadata->rssi1 = WDI_RX_BD_GET_RSSI1(pBDHeader);
/* Missing:
wpt_uint32 fcSTATxQStatus:8;
wpt_uint32 fcSTAThreshIndMask:8;
wpt_uint32 fcSTAPwrSaveStateMask:8;
wpt_uint32 fcSTAValidMask:8;
wpt_uint8 fcSTATxQLen[8]; // one byte per STA.
wpt_uint8 fcSTACurTxRate[8]; // current Tx rate for each sta.
unknownUcastPkt
*/
pRxMetadata->replayCount = WDTS_GetReplayCounterFromRxBD(pBDHeader);
pRxMetadata->snr = WDI_RX_BD_GET_SNR(pBDHeader);
/*
* PAL BD pointer information needs to be populated
*/
WPAL_PACKET_SET_BD_POINTER(pFrame, pBDHeader);
WPAL_PACKET_SET_BD_LENGTH(pFrame, sizeof(WDI_RxBdType));
// Invoke Rx complete callback
pClientData->receiveFrameCB(pClientData->pCallbackContext, pFrame);
}
else
{
wpalPacketSetRxLength(pFrame, usMPDULen+ucMPDUHOffset);
wpalPacketRawTrimHead(pFrame, ucMPDUHOffset);
pRxMetadata = WDI_DS_ExtractRxMetaData(pFrame);
//flow control related
pRxMetadata->fc = isFcBd;
pRxMetadata->mclkRxTimestamp = WDI_RX_BD_GET_TIMESTAMP(pBDHeader);
pRxMetadata->fcStaTxDisabledBitmap = WDI_RX_FC_BD_GET_STA_TX_DISABLED_BITMAP(pBDHeader);
pRxMetadata->fcSTAValidMask = WDI_RX_FC_BD_GET_STA_VALID_MASK(pBDHeader);
// Invoke Rx complete callback
pClientData->receiveFrameCB(pClientData->pCallbackContext, pFrame);
}
//Log the RX Stats
if(gDsTrafficStats.running && pRxMetadata->staId < HAL_NUM_STA)
{
if(pRxMetadata->rateIndex < WDTS_MAX_RATE_NUM)
{
if(pRxMetadata->type == WDI_MAC_DATA_FRAME)
{
gDsTrafficStats.rxStats[pRxMetadata->staId][pRxMetadata->rateIndex].rxBytesRcvd +=
pRxMetadata->mpduLength;
gDsTrafficStats.rxStats[pRxMetadata->staId][pRxMetadata->rateIndex].rxPacketsRcvd++;
}
}
}
return eWLAN_PAL_STATUS_SUCCESS;
}
示例2: WDTS_RxPacket
//.........这里部分代码省略.........
pRxMetadata->staId = WDI_RX_BD_GET_STA_ID(pBDHeader);
pRxMetadata->addr3Idx = WDI_RX_BD_GET_ADDR3_IDX(pBDHeader);
pRxMetadata->rxChannel = WDI_RX_BD_GET_RX_CHANNEL(pBDHeader);
pRxMetadata->rtsf = WDI_RX_BD_GET_RTSF(pBDHeader);
pRxMetadata->bsf = WDI_RX_BD_GET_BSF(pBDHeader);
pRxMetadata->scan = WDI_RX_BD_GET_SCAN(pBDHeader);
pRxMetadata->dpuSig = WDI_RX_BD_GET_DPU_SIG(pBDHeader);
pRxMetadata->ft = WDI_RX_BD_GET_FT(pBDHeader);
pRxMetadata->ne = WDI_RX_BD_GET_NE(pBDHeader);
pRxMetadata->llcr = WDI_RX_BD_GET_LLCR(pBDHeader);
pRxMetadata->bcast = WDI_RX_BD_GET_UB(pBDHeader);
pRxMetadata->tid = ucTid;
pRxMetadata->dpuFeedback = WDI_RX_BD_GET_DPU_FEEDBACK(pBDHeader);
pRxMetadata->rateIndex = WDI_RX_BD_GET_RATEINDEX(pBDHeader);
pRxMetadata->rxpFlags = WDI_RX_BD_GET_RXPFLAGS(pBDHeader);
pRxMetadata->mclkRxTimestamp = WDI_RX_BD_GET_TIMESTAMP(pBDHeader);
/* typeSubtype in BD doesn't look like correct. Fill from frame ctrl
TL does it for Volans but TL does not know BD for Prima. WDI should do it */
if ( 0 == WDI_RX_BD_GET_FT(pBDHeader) ) {
if ( bASF ) {
pRxMetadata->subtype = WDI_MAC_DATA_QOS_DATA;
pRxMetadata->type = WDI_MAC_DATA_FRAME;
} else {
pMacFrameCtl = (tpSirMacFrameCtl)(((wpt_uint8*)pBDHeader) + ucMPDUHOffset);
pRxMetadata->subtype = pMacFrameCtl->subType;
pRxMetadata->type = pMacFrameCtl->type;
}
} else {
pMacFrameCtl = (tpSirMacFrameCtl)(((wpt_uint8*)pBDHeader) + WDI_RX_BD_HEADER_SIZE);
pRxMetadata->subtype = pMacFrameCtl->subType;
pRxMetadata->type = pMacFrameCtl->type;
}
pRxMetadata->mpduHeaderPtr = pBDHeader + ucMPDUHOffset;
pRxMetadata->mpduDataPtr = pBDHeader + usMPDUDOffset;
pRxMetadata->mpduLength = usMPDULen;
pRxMetadata->mpduHeaderLength = ucMPDUHLen;
/*------------------------------------------------------------------------
Gather AMPDU information
------------------------------------------------------------------------*/
pRxMetadata->ampdu_reorderOpcode = (wpt_uint8)WDI_RX_BD_GET_BA_OPCODE(pBDHeader);
pRxMetadata->ampdu_reorderSlotIdx = (wpt_uint8)WDI_RX_BD_GET_BA_SI(pBDHeader);
pRxMetadata->ampdu_reorderFwdIdx = (wpt_uint8)WDI_RX_BD_GET_BA_FI(pBDHeader);
pRxMetadata->currentPktSeqNo = (wpt_uint8)WDI_RX_BD_GET_BA_CSN(pBDHeader);
/*------------------------------------------------------------------------
Gather AMSDU information
------------------------------------------------------------------------*/
pRxMetadata->amsdu_asf = bASF;
pRxMetadata->amsdu_aef = bAEF;
pRxMetadata->amsdu_esf = bFSF;
pRxMetadata->amsdu_lsf = bLSF;
pRxMetadata->amsdu_size = WDI_RX_BD_GET_AMSDU_SIZE(pBDHeader);
pRxMetadata->rssi0 = WDI_RX_BD_GET_RSSI0(pBDHeader);
pRxMetadata->rssi1 = WDI_RX_BD_GET_RSSI1(pBDHeader);
/* Missing:
wpt_uint32 fcSTATxQStatus:8;
wpt_uint32 fcSTAThreshIndMask:8;
wpt_uint32 fcSTAPwrSaveStateMask:8;
wpt_uint32 fcSTAValidMask:8;
wpt_uint8 fcSTATxQLen[8]; // one byte per STA.
wpt_uint8 fcSTACurTxRate[8]; // current Tx rate for each sta.
unknownUcastPkt
*/
pRxMetadata->replayCount = WDTS_GetReplayCounterFromRxBD(pBDHeader);
pRxMetadata->snr = WDI_RX_BD_GET_SNR(pBDHeader);
/*
* PAL BD pointer information needs to be populated
*/
WPAL_PACKET_SET_BD_POINTER(pFrame, pBDHeader);
WPAL_PACKET_SET_BD_LENGTH(pFrame, sizeof(WDI_RxBdType));
// Invoke Rx complete callback
pClientData->receiveFrameCB(pClientData->pCallbackContext, pFrame);
}
else
{
wpalPacketSetRxLength(pFrame, usMPDULen+ucMPDUHOffset);
wpalPacketRawTrimHead(pFrame, ucMPDUHOffset);
pRxMetadata = WDI_DS_ExtractRxMetaData(pFrame);
//flow control related
pRxMetadata->fc = isFcBd;
pRxMetadata->fcStaTxDisabledBitmap = WDI_RX_FC_BD_GET_STA_TX_DISABLED_BITMAP(pBDHeader);
pRxMetadata->fcSTAValidMask = WDI_RX_FC_BD_GET_STA_VALID_MASK(pBDHeader);
// Invoke Rx complete callback
pClientData->receiveFrameCB(pClientData->pCallbackContext, pFrame);
}
return eWLAN_PAL_STATUS_SUCCESS;
}