微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 发现z-stack一个重大bug,有关InterPAN通信(stub_aps.c)和MAC_MCPS_DATA_CNF消息的处理方式不正确。

发现z-stack一个重大bug,有关InterPAN通信(stub_aps.c)和MAC_MCPS_DATA_CNF消息的处理方式不正确。

时间:10-02 整理:3721RD 点击:

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,都有这个现象。

影响结果:ZLL协议栈影响严重,ZLL采用跨PANID通信,confirm消息会失效。

解决方案,在函数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;
  }

多谢分享

interPAN和extenedPAN有什么区别,能解释一下吗?

一般用的是哪个

vv大神你帮我解答一下 interPAN和extenedPAN有什么区别?

一般用的是哪个,一直搞不懂

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top