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.

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

Other Parts Discussed in Thread: Z-STACK

/*********************************************************************
 * @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节