硬件平台:JN5169
SDK:JN-SW-4170
参考文档:ZigBee-Base-Device-Behavior-Specification.pdf
概要:分析设备首次入门的流程(bdbNodeIsOnANetwork属性为FALSE),设备入网规范遵循ZigBee-Base-Device-Behavior-Specification 8.3小节
1 节点首先将bdbcommitoningstatus设置为IN_PROGRESS,将vDoPrimaryScan设置为TRUE,将vScanChannels设置为bdbPrimaryChannelSet
BDB_PRIMARY_CHANNEL_SET = 0x02108800;
BDB_SECONDARY_CHANNEL_SET = 0x07FFF800 ^ 0x02108800;
BDB_eNsStartNwkSteering(void)
{
//有省略
sBDB.sAttrib.ebdbCommissioningStatus = E_BDB_COMMISSIONING_STATUS_IN_PROGRESS;
bDoPrimaryScan = TRUE;
u32ScanChannels = sBDB.sAttrib.u32bdbPrimaryChannelSet;
u8ScanChannel = BDB_CHANNEL_MIN;
bAssociationJoin = FALSE;
vNsDiscoverNwk();
}
进入vNsDiscoverNwk()函数后,跳到12步进行判断
2 节点应进行信道扫描,以发现其无线电范围内的一组信道上有哪些网络可用
void vNsDiscoverNwk()
{
//此函数有省略
eNS_State = E_NS_WAIT_DISCOVERY; //状态机状态,注意
ZPS_eAplZdoDiscoverNetworks(u32ScanChannels & (1<<u8ScanChannel));
8ScanChannel++;
}
ZPS_eAplZdoDiscoverNetworks()函数调用最终都会在终端设备或路由器上导致生成堆栈事件ZPS_EVENT_NWK_DISCOVERY_COMPLETE
bdb_taskBDB();
BDB_vNsStateMachine(&sZpsAfEvent);
case E_NS_WAIT_DISCOVERY:
case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:
//有省略
3 如果NLME-NETWORK-DISCOVERY确认原语的状态参数不等于SUCCESS,表明通道扫描不成功,则节点从步骤2继续。
意思就是判断sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus状态不等于MAC_ENUM_SUCCESS,继续执行下面函数:
vNsDiscoverNwk();
4 节点通过分析NetworkCount和NetworkDescriptor参数,判断是否有设置为TRUE的permit join flag合适的网络。
eNS_State = E_NS_WAIT_JOIN;
vNsTryNwkJoin(TRUE, &(psZpsAfEvent->sStackEvent.uEvent.sNwkDiscoveryEvent));
//以下位于vNsTryNwkJoin()函数,有无关代码省略
if(