z-stack home developer's guide里面
if the Coordinator is constrained to one channel, and
the specified Pan Id has already been established on that channel, the newly starting Coordinator will make
successive changes until it achieves a unique Pan Id. A Router or End-Device newly joining will have no way of
knowing the value of the “de-conflicted” Pan Id established, and will therefore join only the Pan Id specified. A
similarly challenging scenario arises when the permitted channel mask allows more than one channel and the
Coordinator cannot use the first channel because of a Pan Id conflict – a Router or End-Device will join the
specified Pan Id on the first channel scanned, if allowed.
这句话 A
similarly challenging scenario arises when the permitted channel mask allows more than one channel and the
Coordinator cannot use the first channel because of a Pan Id conflict – a Router or End-Device will join the
specified Pan Id on the first channel scanned, if allowed.怎么理解啊?我怎么看不懂?
这段话涉及到变量在协议栈里面主要是下面两个
1)
/* Default channel is Channel 11 - 0x0B */
// Channels are defined in the following:
// 0 : 868 MHz 0x00000001
// 1 - 10 : 915 MHz 0x000007FE
// 11 - 26 : 2.4 GHz 0x07FFF800
//
//-DMAX_CHANNELS_868MHZ 0x00000001
//-DMAX_CHANNELS_915MHZ 0x000007FE
//-DMAX_CHANNELS_24GHZ 0x07FFF800
//-DDEFAULT_CHANLIST=0x04000000 // 26 - 0x1A
//-DDEFAULT_CHANLIST=0x02000000 // 25 - 0x19
//-DDEFAULT_CHANLIST=0x01000000 // 24 - 0x18
//-DDEFAULT_CHANLIST=0x00800000 // 23 - 0x17
//-DDEFAULT_CHANLIST=0x00400000 // 22 - 0x16
//-DDEFAULT_CHANLIST=0x00200000 // 21 - 0x15
//-DDEFAULT_CHANLIST=0x00100000 // 20 - 0x14
//-DDEFAULT_CHANLIST=0x00080000 // 19 - 0x13
//-DDEFAULT_CHANLIST=0x00040000 // 18 - 0x12
//-DDEFAULT_CHANLIST=0x00020000 // 17 - 0x11
//-DDEFAULT_CHANLIST=0x00010000 // 16 - 0x10
//-DDEFAULT_CHANLIST=0x00008000 // 15 - 0x0F
//-DDEFAULT_CHANLIST=0x00004000 // 14 - 0x0E
//-DDEFAULT_CHANLIST=0x00002000 // 13 - 0x0D
//-DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C
-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B
2)
/* Define the default PAN ID.
*
* Setting this to a value other than 0xFFFF causes
* ZDO_COORD to use this value as its PAN ID and
* Routers and end devices to join PAN with this ID
*/
-DZDAPP_CONFIG_PAN_ID=0xFFFF
如果把ZDAPP_CONFIG_PAN_ID改成0xFFFF以外的值的话,那么协调器在建立网络就以这个值作为PANID,对于路由和终端设备来说就加入到指定的PANID网络中去。 如果定义-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B,表示协调器在建立网络时只会在11信道上进行扫描的,而且网络也只会在11信道建立,对于节点来说也只会在11信道搜索加入网络。如果第一协调器在信道11上建立网络以特定的PANID=0x1111,那么第二个协调器也在信道11上建立网络,发现想建立的PANID=0x1111,发现已经这样的网络存在了,导致冲突,那么这个时候第二个协调器会把网络的PANID自动改为0x1112,建立一个新的网络。这时候如果你的节点本来是想加入到第二个协调器去的,现在就加不上了,因为节点并不知道PANID冲突,一直尝试向0x1111,加网,实际想加的那个协调器已经改成0x1112了。
如果当-DDEFAULT_CHANLIST定义超过两个信道的时候,那么协调器会在多个信道上扫描建立网络,对于节点来说也去多个信道搜索网络。
第一个协调器在一个信道上建立了0x1111网络,那么第二协调器起来的时候,发现第一个信道上的网络和自己想建立的网络PANID冲突,所以会去第二个信道上建立同样PANID的网络,这个时候节点上电以后,会首先从第一个信道开始搜索对应PANID的网络,搜索到就加进去了。这样的话节点也无法加入到第二个想加入的协调器中去,原因是第二个协调器已经去另外个信道了。