微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 问题:GenericApp中ZED不能接收ZDP_MatchDescReq请求

问题:GenericApp中ZED不能接收ZDP_MatchDescReq请求

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

你好,

       z-stack版本:ZStack-CC2530-2.5.1a

       GenericApp中,有两个请求ZDP_EndDeviceBindReq、ZDP_MatchDescReq;

       ZDP_EndDeviceBindReq操作一切正常;

       但ZDP_MatchDescReq有不正常的地方;

       我的系统:1个ZC;1个ZR;1个ZED;

        ZC与ZR互发ZDP_MatchDescReq都有相应;

        ZED发ZDP_MatchDescReq给ZC或ZR都有相应,但ZC或ZR发ZDP_MatchDescReq给ZED没有相应;

        我在ZED程序中设置了中断,没有中断;

        uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )

       {

       ...

              case AF_INCOMING_MSG_CMD:          

                     GenericApp_MessageMSGCB( MSGpkt );          

                     break;

       ...

       }

       是ZC或ZR的GenericApp_SimpleDesc的OutClusterList与ZED的InClusterList不匹配?还是系统已设置ZED不许匹配?

       在哪里可以查找端点匹配描述符?

 

TI同志,能否帮我分析一下?

此问题困挠我很久了,烦请回复,谢谢!

 

Jack,

你好!

你可以仔细看下2.5.1a 协议栈下面 ZDP_MatchDescReq这个函数。

afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,
                                uint16 ProfileID,
                                byte NumInClusters, cId_t *InClusterList,
                                byte NumOutClusters, cId_t *OutClusterList,
                                byte SecurityEnable )
{
  uint8 *pBuf = ZDP_TmpBuf;
  // nwkAddr+ProfileID+NumInClusters+NumOutClusters.
  byte i, len = 2 + 2 + 1 + 1;  // nwkAddr+ProfileID+NumInClusters+NumOutClusters.

  (void)SecurityEnable;  // Intentionally unreferenced parameter

  len += (NumInClusters + NumOutClusters) * sizeof(uint16);

  if ( len >= ZDP_BUF_SZ-1 )
  {
    return afStatus_MEM_FAIL;
  }

  // The spec changed in Zigbee 2007 (2.4.3.1.7.1) to not allow sending
  // this command to 0xFFFF.  So, here we will filter this and replace 
  // with 0xFFFD to only send to devices with RX ON.  This includes the 
  // network address of interest.
  if ( ((dstAddr->addrMode == AddrBroadcast) || (dstAddr->addrMode == Addr16Bit))
      && (dstAddr->addr.shortAddr == NWK_BROADCAST_SHORTADDR_DEVALL) )
  {
    dstAddr->addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
  }
  if ( nwkAddr == NWK_BROADCAST_SHORTADDR_DEVALL )
  {
    nwkAddr = NWK_BROADCAST_SHORTADDR_DEVRXON;
  }

如果这个数据发给0xFFFF的,那么地址会被过滤换成 0xFFFD,NWK_BROADCAST_SHORTADDR_DEVRXON
0xFFFD代表 Everyone with RxOnWhenIdle == TRUE
所以说End device无法收到这个数据。

在2.5.1a以后的协议栈里面,已经把这个去掉了
你可以在官网上下载最新的Z-Stack Home 1.2.1看下。
如果你还是要用2.5.1a的,那么你把这段过滤改掉就可以了。

谢谢!

谢谢;

我也发现了这个问题;

再次感谢!

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

网站地图

Top