zigbee里面应用对象是建立在端点的基础上的,写应用代码时,如果不把端点的实现机制搞明白,总觉得有点虚。
好在TI没有把这一块的代码编译到库里,有源代码分析起很方便。
在zigbee规范里面,端点最多可以支持256个,其中0号端点作保留给ZDO,255号端作为广播用途,用户可以使用的端点大概240个左右。
从AF.C和AF.H可以看到端点是借助单向链表来管理的。用户需要使用某个端点进行通讯时,先要调用afRegister注册相应的端点向端点管理链表添加一条记录。
端点一量注册之后,在接收和发送两个过程中都会使用到。
在接收过程,afIncomingData函数提取来自APS层数据包中的目标端点号,搜索节点已注册的端点号,进行匹配。如果端点号匹配则需要进一步匹配应用配置ID,应用配置ID也匹配的语,数据包就会被打包,然后借助OSAL的消息机制,最终发送到相应端点应用对象的消息处理函数。
在发送过程,端点信息被AF_DataRequest读取,填写到数据包相关的区域,如果端点注册了回调函数,回调函数将在数据发送前被调用。