微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530,z-stack协议栈中API接口ZDP_IEEEAddrReq()参数宏没有定义。

CC2530,z-stack协议栈中API接口ZDP_IEEEAddrReq()参数宏没有定义。

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

/*********************************************************************
 * @fn          ZDP_IEEEAddrReq
 *
 * @brief       This builds and send a IEEE_addr_req message.  This
 *              function sends a unicast message looking for a 64
 *              bit IEEE address with a 16 bit address as bait.
 *
 * @param       ReqType - ZDP_IEEEADDR_REQTYPE_SINGLE or
 *                        ZDP_IEEEADDR_REQTYPE_EXTENDED
 * @param       SecurityEnable - Security Options
 *
 * @return      afStatus_t
 */
afStatus_t ZDP_IEEEAddrReq( uint16 shortAddr, byte ReqType,
                            byte StartIndex, byte SecurityEnable )
{
  uint8 *pBuf = ZDP_TmpBuf;
  byte len = 2 + 1 + 1;  // shortAddr + ReqType + StartIndex.
  zAddrType_t dstAddr;

  (void)SecurityEnable;  // Intentionally unreferenced parameter

  dstAddr.addrMode = (afAddrMode_t)Addr16Bit;
  dstAddr.addr.shortAddr = shortAddr;

  *pBuf++ = LO_UINT16( shortAddr );
  *pBuf++ = HI_UINT16( shortAddr );

  *pBuf++ = ReqType;
  *pBuf++ = StartIndex;

  return fillAndSend( &ZDP_TransID, &dstAddr, IEEE_addr_req, len );
}

在这个API函数中参数ReqType 的取值为 ZDP_IEEEADDR_REQTYPE_SINGLE 和 ZDP_IEEEADDR_REQTYPE_EXTENDED,但是在使用的时候编译不能通过,提示没有定义。望尽快解决。

Hi Yuyang,

请问您是怎么调用这个API的呢?请问您是用什么版本的Zstack?

ZDP_ADDR_REQTYPE_SINGLE 和 ZDP_ADDR_REQTYPE_EXTENDED 的定义均在 ZDProfile.h 文件里面。

 // IEEE_addr_req request types
#define ZDP_ADDR_REQTYPE_SINGLE     0
#define ZDP_ADDR_REQTYPE_EXTENDED   1

对了,或许你可以参考一下ZStack-CC2530-2.5.1a的SimpleApp工程,目录为:ZStack-CC2530-2.5.1a\Projects\zstack\Samples\SimpleApp

该工程的sapi.c文件的第919行有调用  ZDP_IEEEAddrReq( pRsp->nwkAddr, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );

可以参考一下这个工程里面是怎么调用的。

问题是解决了,主要是你们提供的API文档上面和代码中的这两个宏的定义不一致造成的,不过还是谢谢!

另外还想问一下,我用这个API主要是在发现网络拓扑结构的逻辑上,有没有发现网络拓扑结构更好的方法呢?可不可以给一个发现网络拓扑结构的示例代码?

想要知道网络的拓扑结构,对于任何一个节点来说,就是要搞清楚他的父节点是谁,他有哪些字节点的,如果需要进一部知道相邻节点间的相对位置,那还要知道每个节点的neighbor。

关于父节点:extern byte AssocIsParent( uint16 shortAddr );

关于子节点:AssocGetNextChildNode( uint16 shortAddr );

这些函数都在AssocList.h文件里面,可以好好研究下。

现在遇到一个新的问题就是,我这样调用ZDP_IEEEAddrReq(0x00, ZDP_ADDR_REQTYPE_EXTENDED, 0, 0); 这个函数,通过抓包发现,它是将请求发到了协调器,并且协调器也通过射频将他的IEEE地址和与它相关设备的短地址返回给了请求节点。问题就是,协调器将数据返回给了请求节点的端点0。在请求节点端,我通过SYS_MSG_EVENT事件去取协调器返回的数据,发现根本取不到。

现在我想知道的就是怎样去取ZDP_IEEEAddr_Req()这个函数请求返回的数据?有专门的API可以用吗?如果不是,那么又该怎样编成去取返回到端点0的数据呢?

可以看一下,zstack安装目录下的document里面的

Z-stack Developer's Guide 第6节

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

网站地图

Top