This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
bug描述:
MAC_CbackEvent中,消息MAC_MCPS_DATA_CNF返回的内容中,pData->dataCnf.pDataReq中的msdu,其实不是msdu,而是包含了mac header部分。msdu.len的长度是整个MAC包减去CRC的长度,msdu.p[0]和msdu[1]为MAC Frame Control域而非NWK Frame Control域。但是在StubAPS_ZMacCallback的处理中,直接把msdu.p当做网络层的域来处理,这是不对的。
uint8 StubAPS_ZMacCallback( uint8 *msgPtr ) { uint16 nwk_fc; uint8 aps_fc; uint8 frameType; uint8 *buf = NULL; uint8 event = ((osal_event_hdr_t *)msgPtr)->event; if ( event == MAC_MCPS_DATA_IND ) { buf = ((macMcpsDataInd_t *)msgPtr)->msdu.p; } else if ( event == MAC_MCPS_DATA_CNF ) { buf = ((macMcpsDataCnf_t *)msgPtr)->pDataReq->msdu.p;//这个是不正确的 }
测试了Home 1.2.2a和Mesh 1.0.0,都有这个现象。
解决方案,在函数ZMacCbackEventHdlr中加入以下代码
//fix the bug of msdu index erro when MAC_MCPS_DATA_CNF if ( event == MAC_MCPS_DATA_CNF ) { uint8 *originalMsdup = (uint8 *)pData->dataCnf.pDataReq + sizeof(macMcpsDataReq_t) + MAC_DATA_OFFSET; pData->dataCnf.pDataReq->msdu.len -= (uint8)(originalMsdup - pData->dataCnf.pDataReq->msdu.p); pData->dataCnf.pDataReq->msdu.p = originalMsdup; }
多谢分享Aries Lord 说:解决方案,在函数ZMacCbackEventHdlr中加入以下代码
//fix the bug of msdu index erro when MAC_MCPS_DATA_CNF if ( event == MAC_MCPS_DATA_CNF ) { uint8 *originalMsdup = (uint8 *)pData->dataCnf.pDataReq + sizeof(macMcpsDataReq_t) + MAC_DATA_OFFSET; pData->dataCnf.pDataReq->msdu.len -= (uint8)(originalMsdup - pData->dataCnf.pDataReq->msdu.p); pData->dataCnf.pDataReq->msdu.p = originalMsdup; }