1
Zigbee的网络层是基于adhoc的图景(除去终端节点;而且可能存在暂时静态的路由)
2
Zigbee的应用层呢?有一些概念:端点,profile-cluster-cmd。感觉端点是和地址他们结合起来寻址的,profile-cluster-cmd是结合起来搞应用的。总的概念有endpoint,profile,cluster,command(感觉就不存在command这么一个东西(在标准协议文档中),只不过是网络上的一些对cluster的不标准的叫法),group,绑定,zdo,直接寻址和间接寻址。
【端点的实现】端点用链表来管理。用afregister()来实现。
下面找一些用来分清应用层的概念的事实。
Endpoint如何与cluster那些东西联系起来?
typedef struct
{
uint16srcIdx; //源地址索引
uint8srcEP; //源端点
uint8dstGroupMode; //指定寻址模式
uint16dstIdx; //目标地址索引或者分组号
uint8dstEP; //目标端点
uint8numClusterIds; //在簇标识符表中簇标识符的个数
uint16clusterIdList[MAX_BINDING_CLUSTER_IDS]; //簇标识符表
}BindingEntry_t;
在绑定条目里面,有关于这个绑定的簇的标示符列表。即这个绑定条目是关联着这些簇的。绑定的形式化表达式(sidx,sep,didx,dep,cluster_1, cluster_2,……, cluster_n)。
绑定表在什么时候使用?
在使用间接寻址的时候。间接寻址在zbdatarequest()和af_datarequest()中都能够使用。在apsde-data-request()中更是能够使用。
绑定表是怎么建立的?
不管
为啥要有绑定表呢?
有了绑定表,在zbdatarequest()的时候,可以直接把地址置为间接寻址模式(就是说上层可以不关心地址),而直接发送要发送的cluster加上cluster的相应的数据。
Profile,cluster这两个概念有什么用意呢?
我暂时估计是要应用域不用管硬件实现域而提出的这样的概念。解释如下:在整个一个项目中,既有硬件节点的部署,也有在这些硬件节点上的逻辑。而且逻辑可能用的还不知一个(如整个家庭的灯光系统,整个家庭的温度系统,整个家庭的监控系统等多个分立的系统)。那么就可以把这些逻辑分割成为不同的profile,在根据逻辑的细化而产生cluster。应用程序在编写程序的时候可以不管采用了什么硬件,硬件是如何部署的,而是在profile中增删改查cluster的属性。它的具体实现是通过绑定表来实现的。而绑定表的建立(每一对节点要不要绑定每一个profile中的每一个cluster,由其他的什么服务发现之类的来管理,好像是zdo设备对象的发现api提供了这样的接口)。
Endpoint注册的时候规定了输入输出簇的列表。
网络层的数据服务不涉及端点(参数中没有端点信息),但是涉及到组(可以以组地址为目的地发送数据包)
感觉profile,cluster,attribute之间的关系好像如下图所示
应用层aps子层是基础,提供了数据和管理服务
l 网络层的管理服务原语如下(共13条):
在这13条原语中,并没有涉及到组的原语。
l 应用层
n Aps子层
u 数据实体
l 功能:应用层数据包的生成,绑定,组地址过滤,可靠传输,重复拒绝
l Apsde-data原语是发送数据的原语,其参数有很多。对目标的寻址参数包括:目标地址模式,目标地址,目标endpoint,这些参数共同的决定了目标上的一个端点。该原语的参数还包含了源端点,源地址是网络层的事情,且是已知的。合法的目标地址模式有4种(0,1,2,3)。
n 0:间接寻址模式。Apsde查找绑定表,然后根据绑定表匹配的 一个或者多个条目构造apdu并传递给nlde实体发送。
n 1:使用组播模式,apsde构造apdu,带有组地址,然后发送给 网络层
n 2:16位的网络地址和endpoint号(感觉像是标准模式)
n 3:64位的ieee地址。需要在aps ib中找到对应的16位网络地址。
u 管理实体
l 功能:Aib管理,安全,组管理
n Af层:
u 数据服务api:af_dataRequest()。需要给定目标的地址(和模式,来决定寻址方式吧)还要给定簇号