和解决任务繁重是协议栈中很关键的一层。
345网络层
wk
网络层
wk通过使用mac层提供的各种功能保证正确完成建立和维护网络的任务实现路由功能完成数据帧的多跳传输。
wk层的主要函数有
1
wki
itvoid网络层初始化函数。使网络层进入空闲状态等待接收任务。
2
wktxdataboolfwdFlag发送数据包函数有
f一个fwdFlag参数用于标识该数据包是否为单纯的转发数据。如果不是转发数据就加上网络层的帧头交给mac层进行发送如果是单纯的转发数据则已经有正确的网络层帧头不作附加处理直接发送。
3
wkparsehdrbyteptr从接收到的数据包中读取网络层帧头信息。获得数据包的来源地址和目标地址。
4
wkcopyFwdpktvoid对需要转发的数据包进行拷贝。从栈存储区拷贝到发送缓存中。
5
wkRxbuffFullvoid判断网络层的接收缓存是否已经填满。
6
wkgetRxpacketvoid获取接收到的数据包返回数据包的起始地址供读取。
7
wkFi
dpare
tsaddRsaddRchildsaddR根据一个路由器的子节点短地址找出其父节点的短地址。网络中各节点的短地址按照其所在的层次深度进行分配每个FFd可以拥有的子节点数是一定的同一层次的FFd短地址以这个数目为公差形成等差数列。因此根据子节点的短地址所落在的区间范围就可以确定它的父节点短地址。
8
wkgethopstodestsaddRdstsaddR计算以dstsaddR为目标地址的消息进行间接转发时需要的跳数。该值与当前节点和目标节点所处的网络深度有关。网络层
wk的有限状态机设计为接收有限状态机
wkRxFsm和主状态机
f
wkFsm两个。因为接收到的数据包有多种形式需要进行不同的处理相对而言要发送的数据包无须进行附加处理所以没有为发送设计有限状态机。
接收有限状态机
wkRxFsm的设计如图315所示。有上层zigbee协议栈各层的功能应用调用网络层服务时进入命令开始状态由于目前的设计还不支持对命令帧的处理所以在接收到命令帧后将其丢弃回到空闲状态。接收到的数据帧分为两种一种是发给自已的数据包一种是可能需要转发的数据包。如果数据帧的目标地址是当前节点则提交至上层的应用层进行处理提交成功后进入空闲状态如果是需要路由的节点在当前节点的转发缓存已经为满的情况下没有办法存储新的数据帧将其丢弃对于可转发的数据帧还要查看其半径域如果为零或者超过了规定的最大跳数都将被丢弃只有符合条件的数据帧会被主状态机
wkFsm转发出去。
图315网络层接收有限状态机
wkRxFsm
网络层主状态机
wkFsm的设计如图316所示。网络层的主要任务分为数据转发和执行网络建立和维护命令两大类。对于收到的数据包如果发现是r