CC2530,z-stack协议栈中API接口ZDP_IEEEAddrReq()参数宏没有定义。
/*********************************************************************
* @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节