1 一般想获取网络短地址基本上是父节点要干的事情,还有为什么需要ZDP_NwkAddrReq 用这个函数是因为其他2个函数一个查本身的网络地址,一个是从父节点从表里查询,但是如果遇到2级以上就查不到了,所以需要用ZDP_NwkAddrReq 查询子节点的网络地址,无论是子节点还是“孙子”节点,因为这个函数是启用无线广播,向网内广播的形式得到匹配的MAC地址节点返回短地址(网络地址)。
这里有几个帖子:http://bbs.feibit.com/thread-9537-1-1.html
http://bbs.feibit.com/thread-8889-1-1.html
三个帖子都在讨论这个函数,但是没有一个是结贴的,没有一个是说明白的。
首先 TI的W先生 ZDO_RegisterForZDOMsg(task_id, NWK_addr_rsp); 和另外2个帖子 有些出入NWK_addr_rsp 还是 NWK_addr_rsq
2 但是基本上3个帖子 都说明了 ZDP_NwkAddrReq 大致用法 借用帖子的格式
使用步骤:
1.在任务初始初始化时调用:ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp ); //sapi_TaskID:任务ID
我采用的是 SimpleApp 在这个里面 void SAPI_Init( byte task_id ) 有
如下:
// Register callback evetns from the ZDApp
ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp );
2.在任务的ZDO处理函数中,处理NWK_addr_rsp选项
case NWK_addr_rsp:
{
// Send find device callback to application
ZDO_NwkIEEEAddrResp_t *pNwkAddrRsp = ZDO_ParseAddrRsp( inMsg ); //调用解析函数
}
break;
这里就迷惑了 对面2个帖子
W先生说是在 ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr )的case ZDO_CB_MSG的ZDApp_ProcessMsgCBs( (zdoIncomingMsg_t *)msgPtr );进行处理。
网友说是在:在任务的ZDO处理函数中,处理NWK_addr_rsp选项
case NWK_addr_rsp
到底在什么位置?
3 关于网络地址到底存在什么位置 都没有说出来,不过我的理解是通过
协调器收到广播后节点的回应包采用 ZDO_ParseAddrRsp进行数据解析 存储在ZDO_ParseAddrRsp函数返回的结果中,
ZDO_NwkIEEEAddrResp_t *pNwkAddrRsp = ZDO_ParseAddrRsp( inMsg ); 这里是存贮在 *pNwkAddrRsp 中
这里对ZDO_NwkIEEEAddrResp_t 进行说明:
typedef struct {
uint8 status;
uint16 nwkAddr; 这个就是所有获取的段地址? 是不是这个我不太确认
uint8 extAddr[Z_EXTADDR_LEN];
uint8 numAssocDevs;
uint8 startIndex;
uint16 devList[];
} ZDO_NwkIEEEAddrResp_t;
我写这个帖子是想能明白到底咋整,这个函数,其次是想说对一些回复过的问题最好有一个结贴。希望大家研究一下这个问题