# base device behavior * [Base-Device-Behavior-Specification-2](http://www.zigbee.org/wp-content/uploads/2014/10/docs-13-0402-13-00zi-Base-Device-Behavior-Specification-2.pdf) * [Webinar_ZigBee_3-0_Launch_FINAL](https://www.zigbee.org/download/introducing-zigbee-3-0-webinar-presentation/?wpdmdl=2176)->`ZigBee 3.0 Base Device Behavior ` ![bdb 框图](images/bdb_architecture.png) bdb 是zigbee 应用层上面的纯接口层,提供了设备操作网络相关的交互行为,也就是bdb已经概况总结了可能的人机操作网络的行为(例如,建立网络/加入网络/离开网络),并且规划成接口,方便应用层直接调用,从而进一步规范厂商的应用行为,达到标准化。 > **提示**:这里之所以总结为纯接口层,是因为其未在zigbee 帧上面产生数据行为。 从功能上划分面归纳如下行为: ## commissioning ### network steering ![网络操作](images/network_steering.png) 包含未加入网络设备的如下行为: * 信道扫描; * 选择一个开放网络执行关联加入; * 获取 network key; * 集中式安全网络的tc link key获取; 而对于已经加入网络的设备的: * 控制mac运行设备加入180s(开放网络); * 关闭网络; ### network formation * 信道扫描; * 选择一个合适信道,并且初始化网络参数; * 集中式安全网络的tc(信任中心)建立; * 分布式网络的建立; ### finding & binding ![ez 模式下的发现和绑定](images/ez_mode_finding_binding.png) * 广播 `identify query request` 并且接收回复; * 请求 `simple descriptor`; * 匹配 initiator 和 target的cluster; * 在绑定表创建对应关系; ### touch link 这是分布式安全网络的两个设备之间的快速网络建立/设备加入机制,该流程区分常规的关联设备加入流程,看起来类似作为子节点的终端设备和父节点失联后,发起的孤儿节点宣告寻找父亲过程。所以设备的加入不是走的关联加入流程,需要参考[zigbee Specification Revision 22 1.0]()->`Chapter 3 Network Specification`-> `3.6.1.4 Joining a Network`->`3.6.1.4.3 Joining a Network Directly`。所以从流程上看,这里发起的是`Rejoin request` 流程。不过需要确定rejoin流程匹配的标识符是父节点的ieee地址,那这里的又是匹配目标设备的什么特征? 原来...... > **提示**:详细参考,[Z-Stack 3.0 Developer's Guide.pdf]()->`10.7 Touchlink joining` 以及[Base-Device-Behavior-Specification-2.pdf]()-> `8.7 Touchlink procedure for an initiator `。 ## security ### install code 默认地,tc link key获取都是通过新加入网络设备发起数据请求。现在可以设备出厂的install code 携带一个随机128bit tc link key和16bit的crc,加入网络前tc通过一些物理接口(key/lcd、serial)获取该install code,从而直接允许新设备的加入。 > **提示**:详细参考,[Z-Stack 3.0 Developer's Guide.pdf]()->`10.5.2 Install Code Derived Trust Center Link Key` 以及[Base-Device-Behavior-Specification-2.pdf]()-> `10.1 Install codes `。 ## reset bdb还定义一些支持的网络复位行为,这里不再详细介绍; * 基本cluster复位; * 通过touchlink commission cluster复位; * 通过离开网络命令; * 通过ZDO 层Mgmt_Leave_req复位; * 在系统的一些硬件交互的复位操作;