Board logo

标题: F8 Wireless z-stack之惑 [打印本页]

作者: soundsilly    时间: 2006-7-25 14:35     标题: F8 Wireless z-stack之惑

没有lincense,不能使用z-tool等工具,文档对关于z-stack如何配置等问题似乎也没有详细说明.


现正使用serial app,每个结点能够将从自身串口获取的数据发送给与它有绑定关系的结点.


默认状态下,能够进行组网,终端结点绑定,互发串口数据.现很想制造结点离开网络的现象,但却不知如何去配置参数.


如 ZDConfig.h


 // Normal operation and sample apps only use End Device Bind
  // and Match Request.
 
  //#define ZDO_NWKADDR_REQUEST
  //#define ZDO_IEEEADDR_REQUEST
  #define ZDO_MATCH_REQUEST
  //#define ZDO_NODEDESC_REQUEST
  //#define ZDO_POWERDESC_REQUEST
  //#define ZDO_SIMPLEDESC_REQUEST
  //#define ZDO_ACTIVEEP_REQUEST
  //#define ZDO_COMPLEXDESC_REQUEST
  //#define ZDO_USERDESC_REQUEST
  //#define ZDO_DISCOVERYREG_REQUEST
  //#define ZDO_USERDESCSET_REQUEST
  #define ZDO_ENDDEVICEBIND_REQUEST
  //#define ZDO_BIND_UNBIND_REQUEST
 
  //#define ZDO_COMPLEXDESC_RESPONSE
  //#define ZDO_USERDESC_RESPONSE
  //#define ZDO_USERDESCSET_RESPONSE
 
  //#define ZDO_MGMT_NWKDISC_REQUEST
  //#define ZDO_MGMT_LQI_REQUEST
  //#define ZDO_MGMT_RTG_REQUEST
  //#define ZDO_MGMT_BIND_REQUEST
  #define ZDO_MGMT_LEAVE_REQUEST
  //#define ZDO_MGMT_JOINDIRECT_REQUEST
  //#define ZDO_ENDDEVICE_ANNCE_REQUEST
 
  //#define ZDO_MGMT_NWKDISC_RESPONSE
  //#define ZDO_MGMT_LQI_RESPONSE
  //#define ZDO_MGMT_RTG_RESPONSE
  //#define ZDO_MGMT_BIND_RESPONSE
  #define ZDO_MGMT_LEAVE_RESPONSE
  //#define ZDO_MGMT_JOINDIRECT_RESPONSE
  //#define ZDO_ENDDEVICE_ANNCE
 
  #if defined ( COORDINATOR_BINDING  )
    // Binding needs this request to do a 64 to 16 bit conversion
    #define ZDO_NWKADDR_REQUEST
    #define ZDO_IEEEADDR_REQUEST
  #endif


本人激活了


#define ZDO_MGMT_LEAVE_REQUEST


#define ZDO_MGMT_LEAVE_RESPONSE


并在用户按下按钮三的情况下,加入ZDP_MgmtLeaveReq()的应用事件,但却未能使结点成功脱离网络,请问关于这方面的文档在哪呢?我似乎找不到也...,或者说明实在是太简略.


作者: jimmytan    时间: 2006-7-25 15:38

调用API: NLME_LeaveRequest().具体的文档可以参照C:\F8W\FS-1.0-1.2.2\Z-Stack\Documentation\High Level Design\NWK API.
作者: soundsilly    时间: 2006-7-26 11:23

工程:serial app
现修改文件SerialApp.c
void SerialApp_HandleKeys( byte shift, byte keys )
{
// Shift is used to make each button/switch dual purpose.
if ( shift )
{
if ( keys & EVAL_SW1 )
{
}
if ( keys & EVAL_SW2 )
{
}
if ( keys & EVAL_SW3 )
{
}
if ( keys & EVAL_SW4 )
{
}
}
else
{
if ( keys & EVAL_SW1 )
{
}

if ( keys & EVAL_SW2 )
{
// Initiate an End Device Bind Request for the mandatory endpoint
ZDApp_SendEndDeviceBindReq( SerialApp_epDesc.endPoint );
}

if ( keys & EVAL_SW3 )
{
NLME_LeaveRequest(NLME_GetExtAddr());
}

if ( keys & EVAL_SW4 )
{
// Initiate a Match Description Request (Service Discovery)
// for the mandatory endpoint
ZDApp_AutoFindDestination( SerialApp_epDesc.endPoint );
}
}
}
这里"NLME_LeaveRequest(NLME_GetExtAddr());"是我加入的代码.
出现的现象:
网络中的EndDevice和Router结点对我按健三的触发行为没有任何表示,即并没有我设想中的发送离开网络的包.,而当我按下Coordinator的按键三时,其发出的包是:
61 88 86 01 32 fa 03 00 00 05 00 00 00 00 00 01 01 04 40 f4 ea

请教的问题如下:
1,为什么EndDevice和Router都没有什么行动,是因为我哪里还有东西没激活吗?
2,Coordinator发出这一leave command frame令人疑惑,因为网络中不存在地址为fa 03的结点,且似乎没有任何文档说明fa 03有什么特殊作用也.
作者: jimmytan    时间: 2006-7-26 14:12

在z-stack的例程中,没有调用这个功能.所以需要参考NWK API的相关文档资料.

1.NLME_LeaveRequest一般是指网络中的ROUTER或者DEVICE发出这个Request,而不是Coordinator.这也功能的prototype应该是:ZStatus_t NLME_LeaveRequest( byte *DeviceAddress ), 你要指定你希望离开的这个DEVICE的地址。

2.NLME_LeaveConfirm()这个功能是在上层会收到底层关于这个leave request的一个确认信息。prototype : void NLME_LeaveConfirm( byte *DeviceAddress, ZStatus_t Status );

3.NLME_LeaveIndication()这个功能是coordinator的上层会收到底层关于某个router或者device的leave request的通知。prototype: void NLME_LeaveConfirm( byte *DeviceAddress, ZStatus_t Status );

所以我想你的程序中,需要加入void NLME_LeaveConfirm( byte *DeviceAddress, ZStatus_t Status );和void NLME_LeaveConfirm( byte *DeviceAddress, ZStatus_t Status );这些功能.
具体可以参考Z-stack NWK API_F8W-2003-0008_.pdf.
作者: soundsilly    时间: 2006-7-26 14:57

我明白您的意思,但是当我调用了NLME_LeaveRequest,Router或是Device总是应该发出一个类似的包让我抓到吧?我既然每次都能抓到coordinator发出的leave command包(当然这包可能是非法的),就说明我不可能每次都抓不到Router或是Device发出的leave command包.


既然我每次都抓不到Router和Device发出的包,那可能是我给NLME_LeaveRequest的参数错了(问题1)?


根据zigbee_specification文档所述,NLME-LEAVE.request应该带两个参数,一个是byte *DeviceAddress,另一个是BOOL RemoveChildren,freescale提供的函数只带一个参数,是不是表示removechildren默认值为1呢(问题2)?


Z-stack NWK API_F8W-2003-0008_.pdf文档没有告诉我给deviceAddress的值是NULL和非NULL是什么区别.根据zigbee_specification文档所述,若deviceAddress值为NULL,则将删除的消息通知该结点的所有孩子及其双亲,具体其他结点要不要删除该结点的的信息由removechildren值来决定.若deviceAddress值为该结点某一孩子的地址,则只对该孩子进行设备的离开网络处理,具体要不要真的删除关于该孩子的所有信息也得由removechildren参数决定.

所以,freescale提供的z-stack,其deviceAddress的值为NULL,表示对所有孩子进行操作,非NULL,则选定该结点某一孩子的地址,表示只对该孩子进行操作(问题3)?


[此贴子已经被作者于2006-7-26 14:57:36编辑过]






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0