Zstack入网退网代码剖析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Zstack入网退网代码分析 网络初始化和路由: 网络初始化: 协调器(Coordinator)首先在某个频段发起一个网络,网络频段的定义放在DEFAULT_CHANLIST配置文件里。如果ZDAPP_CONFIG_PANID定义的PAN ID是0xFFFF(代表所有的PAN ID),则协调器根据它的IEEE地址随机确定一个PAN ID。否则,根据ZDAPP_CONFIG_PANID的定义建立PAN ID。当节点为Router或者End Device时,设备将会试图加入DEFAULT_ CHANLIST所指定的工作频段。如果ZDAPP_CONFIG_PANID没有设为0xFFFF,则Router或者End Device会加入ZDAPP_CONFIG_PANID所定义的PAN ID。 设备上电之后会自动的形成或加入网络,如果想设备上电之后不马上加入网络或者在加入网络之前先处理其他事件,可以通过定义HOLD_AUTO_START来实现。 通过调用ZDOInitDevice(int startdelay)来手动定义多久时间(startdelay)之后开始加入网络。 设备如果成功的加入网络,会将网络信息存储在非易失性存储器(NV Flash)里,掉电后仍然???存,这样当再次上电后,设备会自动读取网络信息,这样设备对网络就有一定的记忆功能。 如果需要使用NV Flash的设置,可以通过定义NV_RESTORE宏和关闭SW_BYPASS_NV来使用。 有关网络参数的设置大多保存在协议栈Tools文件夹的f8wConfig.cfg里。 路由: Z-Stack采用无线自组网按需平面距离矢量路由协议AODV,建立一个Hoc网络,支持移动节点,链接失败和数据丢失,能够自组织和自修复。当一个Router接受到一个信息包之后,NMK层将会进行以下的工作:首先确认目的地,如果目的地就是这个Router的邻居,信息包将会直接传输给目的设备;否则,Router将会确认和目的地址相应的路由表条目,如果对于目的地址能找到有效的路由表条目,信息包将会被传递到该条目中所存储的下一个hop地址;如果找不到有效的路由表条目,路由探测功能将会被启动,信息包将会被缓存直到发现一个新的路由信息。 ZigBee End Device不会执行任何路由函数,它只是简单的将信息传送给前面的可以执行路由功能的父设备。因此,如果End Device想发送信息给另外一个End Device,在发送信息之间将会启动路由探测功能,找到相应的父路由节点。 初始化流程图: ZStack代码中的设备初始化流程图如下: 网络初始化的事件处理: 其中根据宏的设置可以达到扩展panID的效果,并且所有设备类型都集中处理。 退网: 协调器和路由器上层使用ZDP_MgmtLeaveReq()进行设备退网申请,会通过ZDO的Mgmt消息处理函数ZDO_ProcessMgmtLeaveReq()来调用NLME_LeaveReq()函数,实现退网申请,主要用来申请给其他设备退网。 当前设备直接使用NLME_LeaveReq()来进行退网申请,并且注意LeaveReq的addr必须为NULL!当前设备申请后,会在网络层发送一个LeaveInd给协调器(路由器),协调器根据LeaveInd执行结果返回LeaveRsp。 因此协调器可以通过ZDO_RegisterZDOCB的函数来注册LeaveInd后处理,比如删除自制表项等等。 寻址: 为了在网络中发送数据到一个设备,应用层一般用AF_DataRequest()函数。 typedef enum { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddr64Bit = Addr64Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t; 地址模式参数是需要的,因为在ZB中,数据包能被点传输、多点传输或者广播传输。点传输被发送到单个设备,多点传输一定发送到一组设备,广播传输一般被发送到网络中的所有设备。 如下是更详细的说明。 点到传输 (Unicast):这是标准地址模式,被用于发送一个数据包到网络中单个已知地址的设备。这个addrMode参数被设置为Addr16Bit或者Addr64Bit,目的网络地址在数据包中一同被发送。其中一个是64位IEEE地址(也可以叫MAC地址或扩展地址),一个是16位网络地址(也可以叫逻辑地址或短地址)。64位地址是全球唯一的,作为设备(产品)的终生地址被分配。它通常被开发商或安装的时候被指定。该地址由IEEE分配指定。16位地址在设备加入网络的时候被分配,由这个

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档