谷动谷力

 找回密码
 立即注册
查看: 1033|回复: 0
收起左侧

【ZigBee】JN5169 ZigBee3.0设备入网过程

[复制链接]
发表于 2022-5-16 13:38:55 | 显示全部楼层 |阅读模式
本帖最后由 fannifu 于 2022-5-25 23:15 编辑
- s) {, S. q; o6 ~4 u4 ^1 D
2 E. n3 F# {2 R0 a3 m9 j  @! y【ZigBee】JN5169 ZigBee3.0设备入网过程
) p5 I2 A% w+ t& S& a- L4 E; X7 ^. w$ O$ G) N
硬件平台:JN5169
+ Q5 t. b- h/ G' p9 Z* e) PSDK:JN-SW-4170
9 t0 y+ g3 @( i+ p参考文档:ZigBee-Base-Device-Behavior-Specification.pdf + j7 H1 K* ~# u

  O  w4 S4 j0 }8 ~* ?: B概要:分析设备首次入门的流程(bdbNodeIsOnANetwork属性为FALSE),设备入网规范遵循ZigBee-Base-Device-Behavior-Specification 8.3小节
9 f, E% z4 o: C6 W' p  h" C% l5 o8 n. p1 p' W
1  节点首先将bdbcommitoningstatus设置为IN_PROGRESS,将vDoPrimaryScan设置为TRUE,将vScanChannels设置为bdbPrimaryChannelSet5 Q1 Q/ ?/ p" d' j9 h8 _
  1. BDB_PRIMARY_CHANNEL_SET = 0x02108800;
    % J- |5 r( i- v# d' \6 b9 T! m
  2. BDB_SECONDARY_CHANNEL_SET = 0x07FFF800 ^ 0x02108800;8 M3 }2 t9 v8 A8 U% U  F
  3. 1 A6 h! Q6 z9 e
  4. BDB_eNsStartNwkSteering(void)5 I' n/ G, ?/ J2 Y: A; T# [
  5. {  $ ^- M* n7 t$ v& z! I5 x: I
  6.         //有省略
    " z. l# d  o  Z
  7.         sBDB.sAttrib.ebdbCommissioningStatus = E_BDB_COMMISSIONING_STATUS_IN_PROGRESS;' F% m2 n% r  f0 H6 F
  8.         bDoPrimaryScan = TRUE;0 M9 q: B1 V# C2 F  B% U* E& C) C) L: ^
  9.         u32ScanChannels = sBDB.sAttrib.u32bdbPrimaryChannelSet;
    2 e4 I9 a7 Z  X7 M" w
  10.         u8ScanChannel = BDB_CHANNEL_MIN;
    ; a# F& N6 n2 R( N9 b3 T
  11.         bAssociationJoin = FALSE;3 ]/ _: _9 r4 w8 ^% G! C8 k, e
  12.         vNsDiscoverNwk();
    3 a5 I; U1 p/ G+ h5 X9 V1 ~5 Q
  13. }
复制代码

; |0 \6 l' n4 f# }9 v% h: ^进入vNsDiscoverNwk()函数后,跳到12步进行判断2 a9 s8 m, X4 I; t& j# w

; o1 a' i4 r+ K6 n2  节点应进行信道扫描,以发现其无线电范围内的一组信道上有哪些网络可用9 U( o7 ~# e7 M7 @$ g, n* r% q9 A
  1. void vNsDiscoverNwk()
    + l* A. e; K* Z5 Q7 `  M( u; [
  2. {* q( N+ _) d+ R' K9 z2 W
  3.         //此函数有省略- S& P8 r+ Z4 @: B, G  _0 }- w4 {
  4.         eNS_State = E_NS_WAIT_DISCOVERY;    //状态机状态,注意) L% ?. P5 |0 T1 u8 e1 o/ x7 V4 {
  5.         ZPS_eAplZdoDiscoverNetworks(u32ScanChannels & (1<<u8ScanChannel));1 \4 @8 O. E( [) U6 m8 X4 I0 J( _
  6.         8ScanChannel++;4 Q% |: {/ `8 z% x/ Y+ z
  7. }
复制代码

9 T$ I& R# t$ {& |6 }4 C2 xZPS_eAplZdoDiscoverNetworks()函数调用最终都会在终端设备或路由器上导致生成堆栈事件ZPS_EVENT_NWK_DISCOVERY_COMPLETE
/ K5 C8 L+ q6 d5 g
  1. bdb_taskBDB();
    1 V- `) u9 L8 z) N
  2.         BDB_vNsStateMachine(&sZpsAfEvent);9 B/ ~& ~5 K/ o! L; z
  3.                 case E_NS_WAIT_DISCOVERY: : O+ c2 h# Y$ l6 h0 B9 {1 p' R( n
  4.                         case ZPS_EVENT_NWK_DISCOVERY_COMPLETE:! h4 ?- Q  i! X: ?: C4 G
  5.                             //有省略
复制代码
. O& Q  F, \' u+ C. e3 h& X
3  如果NLME-NETWORK-DISCOVERY确认原语的状态参数不等于SUCCESS,表明通道扫描不成功,则节点从步骤2继续。5 l: `1 x& A3 U0 |# k
意思就是判断sStackEvent.uEvent.sNwkDiscoveryEvent.eStatus状态不等于MAC_ENUM_SUCCESS,继续执行下面函数:0 s+ B+ q* h. g; s& a

, e  Q4 @7 g& C3 M
  1. vNsDiscoverNwk();
复制代码

1 o6 H0 w% V- e& _1 K9 l4  节点通过分析NetworkCount和NetworkDescriptor参数,判断是否有设置为TRUE的permit join flag合适的网络。3 R, Q8 A; @/ W8 n, i; ~
  1. eNS_State = E_NS_WAIT_JOIN;6 a$ v: l& U# s3 i( n5 |: ]$ ?4 Q
  2. vNsTryNwkJoin(TRUE, &(psZpsAfEvent->sStackEvent.uEvent.sNwkDiscoveryEvent));. |6 Q8 i  t* e! M. w9 R7 c" L

  3. 8 ^( C/ }. r- U- H) C8 G; `
  4.         //以下位于vNsTryNwkJoin()函数,有无关代码省略  ^! `8 S4 N6 t+ N0 Y6 L  R4 d
  5.          if(
    3 y' L' }/ T; P
  6.                 (pNwkDescr[u8NwkIndex].u8PermitJoining) && \
    0 v$ |9 _. H7 v0 |, C: K
  7.                 (
    : {5 M% y' I/ Q$ M; \0 B
  8.                     (0 == ZPS_psAplAibGetAib()->u64ApsUseExtendedPanid) ||\        . }6 s3 S# t9 S6 S& V; |  L
  9.                     (pNwkDescr[u8NwkIndex].u64ExtPanId == ZPS_psAplAibGetAib()->u64ApsUseExtendedPanid)7 i7 z; }2 r$ M2 b3 X4 o
  10.                 )% @; k9 m0 a/ m* X" |
  11.             ){, w2 Y- V% N2 P, ], h
  12.                     eNS_State = E_NS_WAIT_JOIN;( D: ~) \1 q' D9 f. |$ U
  13.                     eStatus = ZPS_eAplZdoJoinNetwork(&pNwkDescr[u8NwkIndex]);
    ( {! }8 M; K- e. _+ d% X2 D
  14.              }
复制代码

; F9 E$ z1 ?. {9 x; K, P5  如果在通道扫描中没有找到合适的网络,节点从步骤2继续
+ Q6 T. h/ e& E2 `6 n
  1. vNsTryNwkJoin(TRUE, &(psZpsAfEvent->sStackEvent.uEvent.sNwkDiscoveryEvent));( S4 P$ H7 P7 M+ Y* P5 V

  2. 6 I! k$ @1 _. e7 |( E* L
  3.         DBG_vPrintf(TRACE_BDB," BDB: No suitable network! Continue Discovery \n");& e' }$ ~/ C6 Y: ~4 t9 D8 M# q
  4.         vNsDiscoverNwk();
复制代码

$ L% G4 M- ^3 W6  节点应尝试加入使用MAC关联发现的网络
6 U) Z- }/ F( a6 @% I. j
  1. vNsTryNwkJoin(TRUE, &(psZpsAfEvent->sStackEvent.uEvent.sNwkDiscoveryEvent));( k; T9 }& y4 L, k. [4 w7 \: v
  2. ; u+ ~, T2 u, x) L
  3.         //以下位于vNsTryNwkJoin()函数,有无关代码省略  W# }3 h" F" u
  4.         eNS_State = E_NS_WAIT_JOIN;5 x* x- v* h  d) r4 ^4 j# h" p4 H9 J
  5.         eStatus = ZPS_eAplZdoJoinNetwork(&pNwkDescr[u8NwkIndex]);
复制代码
* U, t- [' a& T, H5 C3 N
7  允许再次尝试加入同一网络,但每次尝试次数不得超过bdbcmaxsamenetworkretrytrytries次数
3 X! K/ P: X/ s) R
  1. vNsTryNwkJoin(TRUE, &(psZpsAfEvent->sStackEvent.uEvent.sNwkDiscoveryEvent));
      g3 C  U! j; h# N( V

  2. & h1 v* i4 K/ _- t. j" s
  3.         //以下位于vNsTryNwkJoin()函数,有无关代码省略
    # N. ?: E% F' p6 J
  4.         if(u8RecSameNwkRetryAttempts < BDBC_MAX_SAME_NETWORK_RETRY_ATTEMPTS). V/ Q2 q% v* [; V* E/ {! n
  5.         {4 s: n9 x( p( I- ^3 M) t5 l0 ^
  6.                 eNS_State = E_NS_WAIT_JOIN;
    " G* k1 f: K  c# a
  7.                 eStatus = ZPS_eAplZdoJoinNetwork(&pNwkDescr[u8NwkIndex]);4 s- c! M0 \: U' N8 Z3 A4 S! Y" ?" P
  8.         }
复制代码

* g+ B& U. ?) Z' x% wZPS_eAplZdoJoinNetwork()函数返回堆栈事件1 l7 F  n% R/ Y+ \' d* [3 w  ~
//以下代码有省略,请注意
9 [+ a% i. K( V+ s
  1. bdb_taskBDB();
    ) |9 P. U, A$ s* d
  2.         BDB_vNsStateMachine(&sZpsAfEvent);
    7 u+ Z/ F9 V# L) x" s$ W4 w
  3.                 case E_NS_WAIT_JOIN:
    # D# ^0 E6 x7 D. w! _5 |
  4.                     switch(psZpsAfEvent->sStackEvent.eType)7 W; {3 G# _& |1 p" s% R
  5.                     {
    1 t$ F; U: H* b6 a
  6.                             case ZPS_EVENT_NWK_FAILED_TO_JOIN:2 h! }+ _' c: L& K8 ?6 r4 u0 h
  7.                                 break;
    8 D9 v1 Y5 K4 l9 H' f# d$ e& ?( L& x
  8.                             case ZPS_EVENT_NWK_JOINED_AS_ROUTER:
    3 o' S3 X5 U6 d  I9 s9 [. h. F
  9.                             case ZPS_EVENT_NWK_JOINED_AS_ENDDEVICE:
    4 X5 W. p; N9 n, X7 g$ p0 J' N  ?
  10.                                 break;; F/ L, g- |* M$ l" o& m
  11. }
复制代码

' ^# j' e6 G8 U5 N3 \8  如果是堆栈事件为ZPS_EVENT_NWK_FAILED_TO_JOIN,再次尝试同一网络+ |1 l4 B- X: ^5 Q  I
//以下代码有省略,请注意. ?" ]$ _) i/ b" `
  1. bdb_taskBDB(); 1 U2 j" W9 p8 C: E+ s+ |4 L
  2.         BDB_vNsStateMachine(&sZpsAfEvent);
    & B  ~4 I5 t! v& N) O
  3.                 case E_NS_WAIT_JOIN:
    ) O9 a. q! y' u( q+ ^0 l' D" k* _7 h
  4.                     switch(psZpsAfEvent->sStackEvent.eType)& ~5 h3 G0 K: l1 z0 G8 ~
  5.                     {
    $ ]$ \' N3 P0 v+ c8 ?; ]
  6.                             case ZPS_EVENT_NWK_FAILED_TO_JOIN:
    0 I& B) R2 x& C) V9 p
  7.                                  vNsTryNwkJoin(FALSE, NULL);& `2 y8 o, i3 w) j
  8.                             break;! g, r% Q1 |& E- M% M5 s! k

  9.   I1 M7 I/ M8 D7 B# A$ I
  10. }
复制代码

$ ]- d( |5 t/ ^0 b) z6 k6 m" A9  如果是堆栈事件为ZPS_EVENT_NWK_JOINED_AS_ROUTER或者ZPS_EVENT_NWK_JOINED_AS_ENDDEVICE,应相应地设置bdbNodeJoinLinkKeyType,以指示用于解密接收到的网络密钥的链路密钥类型。
, c) ]/ x$ X0 j' ?" X* f//以下代码有省略,请注意
+ ~: u$ y4 R) R7 }
  1. bdb_taskBDB(); ) O0 k% d, F, t6 e  P2 J- I
  2.         BDB_vNsStateMachine(&sZpsAfEvent);
    4 x4 p6 J& z  ]3 u5 s2 b
  3.                 case E_NS_WAIT_JOIN:
    $ O  `' r9 u. T
  4.                     switch(psZpsAfEvent->sStackEvent.eType)" [1 h9 y4 Q! O  _2 ~( a4 k
  5.                     {$ W* f( K6 j1 f* ?% {
  6.                             case ZPS_EVENT_NWK_FAILED_TO_JOIN:9 }$ a8 m  x- L- m, U
  7.                                 break;
    7 J' C6 p8 ~0 i7 J$ d& n
  8.                             case ZPS_EVENT_NWK_JOINED_AS_ROUTER:2 @1 s. ]4 L9 P4 Q1 ?5 I3 Z
  9.                             case ZPS_EVENT_NWK_JOINED_AS_ENDDEVICE:
    ' G8 l, \6 U( H, \% Y! E+ U2 A+ G
  10.                                 psApsKeyDesc = ZPS_psGetActiveKey(ZPS_u64AplZdoLookupIeeeAddr(psZpsAfEvent->sStackEvent.uEvent.sNwkJoinedEvent.u16Addr), &u32Index);0 b0 n+ z& P- W& m) g
  11.                                 /*根据接收到的网络密钥的链路密钥类型,相应地设置bdbNodeJoinLinkKeyType*/
    . R! s) [3 y3 j4 r) C: k
  12.                                 if(!memcmp(sBDB.pu8DefaultTCLinkKey, &psApsKeyDesc->au8LinkKey[0], ZPS_SEC_KEY_LENGTH))3 R/ T, P7 c. c5 I9 N
  13.                                 {
    9 X  b' j) k; x( k4 y# j1 @
  14.                                     sBDB.sAttrib.u8bdbNodeJoinLinkKeyType = DEFAULT_GLOBAL_TRUST_CENTER_LINK_KEY;8 f: j9 B0 I: [
  15.                                 }
    3 E/ z1 u- ~; T3 o9 X
  16.                                 else if(!memcmp(sBDB.pu8DistributedLinkKey, &psApsKeyDesc->au8LinkKey[0], ZPS_SEC_KEY_LENGTH))
    $ N0 J! u& [& i6 [5 s' H" ?, F# K
  17.                                 {5 i- y. r( l3 X) `
  18.                                     sBDB.sAttrib.u8bdbNodeJoinLinkKeyType = DISTRIBUTED_SECURITY_GLOBAL_LINK_KEY;
      Q, V2 J" r8 }) _- w. M
  19.                                 }3 u4 S! b; R! h9 B1 b
  20.                                 else if(!memcmp(sBDB.pu8TouchLinkKey, &psApsKeyDesc->au8LinkKey[0], ZPS_SEC_KEY_LENGTH))
    . ?% v( G' U, i$ r, D2 ]
  21.                                 {
    % d, L. {# z5 M5 ?7 F
  22.                                     sBDB.sAttrib.u8bdbNodeJoinLinkKeyType = TOUCHLINK_PRECONFIGURED_LINK_KEY;8 Z5 @& u$ L7 T8 D/ a
  23.                                 }3 \* t2 U- O0 A. I) m
  24.                                 else if(!memcmp(sBDB.pu8PreConfgLinkKey, &psApsKeyDesc->au8LinkKey[0], ZPS_SEC_KEY_LENGTH))6 g9 i! n* i! o6 ?6 X8 e* i
  25.                                 {
    ) ]0 l  Z9 V/ a! \5 j2 y( w% \; f& z
  26.                                     sBDB.sAttrib.u8bdbNodeJoinLinkKeyType =  INSTALL_CODE_DERIVED_PRECONFIGURED_LINK_KEY;
    2 `. Z4 C) ?2 Q1 t
  27.                                 }
复制代码
7 @& `9 t3 I7 o8 ], W( ?
10  节点将bdbNodeIsOnANetwork设置为TRUE,然后广播Device_annce ZDO命令。如果apsTrustCenterAddress等于0xffffffffffffff,节点应该并从步骤13继续。$ L, [0 \/ n) R7 S
  1. //以下代码有省略,请注意; }& i0 K/ I3 ]+ V' t
  2. sBDB.sAttrib.bbdbNodeIsOnANetwork = TRUE;' R$ u* G; U4 T- H
  3. eNS_State = E_NS_WAIT_AFTER_NWK_JOIN;1 |- @, F/ f8 E6 @' v- N
  4. ZTIMER_eStart(u8TimerBdbNs, ZTIMER_TIME_MSEC(300)); //启动BDB_vNsTimerCb()任务
    / h& m$ h' m& L
  5. ( w- M. ~* n! Y
  6.         BDB_vNsTimerCb()
    $ }1 i/ {% J, a5 u* Z
  7.         switch(eNS_State)& g1 p5 v# Q( S6 H+ i) T; o
  8.         {
    1 l8 P+ S- B1 }, \  x( P5 L6 ?
  9.             case E_NS_WAIT_AFTER_NWK_JOIN:
    # N1 o' |- ^3 |# w' d
  10.              if(ZPS_psAplAibGetAib()->u64ApsTrustCenterAddress == 0xFFFFFFFFFFFFFFFFULL)
    4 N, r% b+ I1 V) I: x
  11.             {
    ) c5 m3 Z5 h; w) w
  12.                 eNS_State = E_NS_IDLE;: d. x, J* o8 M: ~) T5 S* J# R
  13.                 vNsAfterNwkJoin();
    ; D# \. N* n6 ~1 m' ^- S: x: M
  14.             }
    6 I: q  s3 a% V! S

  15. + c! m5 W8 A2 B
  16.         }
复制代码

- ?: R# H5 A5 T4 {& V11  节点应执行检索新的信任中心链接键的过程(参见子条款10.2.5)。+ J  m5 ~9 r" l2 }- \$ a1 K+ u: [
如果过程成功,节点将从步骤13继续。
+ |' |( U: V% T- u9 y2 F8 \, l# X
如果该过程不成功,则节点应在其旧网络上执行休假请求并重置其网络参数。$ A4 y: f' q' U/ F: z2 L2 \

4 I( I; e9 [: L( H8 o% @然后节点将bdbNodeIsOnANetwork设置为FALSE,并将bdbcommitoningstatus设置为TCLK_EX_FAILURE。1 _/ b3 d3 i- T. V. J$ b- x
- \+ F3 W) H" k7 e$ O# I. j
为了执行休假请求,节点发出nlm - leave。向NWK层请求原语,3 F# y3 N- ~" q) P( M3 D

8 k- v5 _+ [- Z4 _& N# G; n2 T$ xDeviceAddress参数设置为NULL, RemoveChildren参数设置为FALSE, Rejoin参数设置为FALSE。在收到我的假期。确认原语,通知节点请求离开网络的状态。
6 K: ~' J5 E7 F  H+ y
+ _4 ]! @- x5 P4 D1 y+ s, o节点然后终止7 O! ?0 A- @. ^5 J( o- ~& G
  1. //以下代码有省略,请注意
    ( n: _6 i/ v( c: s. F$ Q
  2. sBDB.sAttrib.bbdbNodeIsOnANetwork = TRUE;
    1 R% s# ^6 l& g! G% E
  3. eNS_State = E_NS_WAIT_AFTER_NWK_JOIN;
    4 j; F/ ^' L: V* P3 Z: Y2 j
  4. ZTIMER_eStart(u8TimerBdbNs, ZTIMER_TIME_MSEC(300)); //启动BDB_vNsTimerCb()任务
    6 \1 x( D9 G4 e8 s
  5. 5 E+ n7 n! r! [! \: F9 r
  6.         BDB_vNsTimerCb()7 n! T! `9 b2 H" {" ~
  7.         switch(eNS_State)6 i, j# q. F8 l
  8.         {
    % F! z& v5 z6 v; ~0 [% k
  9.             case E_NS_WAIT_AFTER_NWK_JOIN:  r5 F# F0 v4 `8 i- F4 w' {
  10.                 if(ZPS_psAplAibGetAib()->u64ApsTrustCenterAddress == 0xFFFFFFFFFFFFFFFFULL)
    * c1 @% F) F, a7 E! T( _& j" |
  11.                 {7 N/ e% n) B# q$ L- z
  12.                     eNS_State = E_NS_IDLE;
    " Q% J9 ]- U) E' d# T& `
  13.                     vNsAfterNwkJoin();
    " p6 R; ]0 I1 E4 C& G  O0 P
  14.                 }; B- Z- x& v) o! M) o) X2 M
  15.                 if(0x00 == sBDB.sAttrib.u8bdbTCLinkKeyExchangeMethod)
    + I, ^, g* i. V; [* V
  16.                 {
      O2 {; b6 Z1 e9 M( R
  17.                     vNsStartTclk();
    ' t2 D$ N3 G4 R+ T8 l1 ?
  18.                 }
    & U' n' P+ T2 R& G
  19.                 else                //检索新的信任中心链接键的过程,成功4 C+ B0 X  `# u! ^) g8 o; f
  20.                 {: Q" v5 h; `8 |2 q1 p. O1 V
  21.                     DBG_vPrintf(TRACE_BDB,"Only ApsReqKey is supported !\n");
    9 I# M1 o" N% P' `) d2 r
  22.                     eNS_State = E_NS_IDLE;
    7 h1 o1 e% U! F
  23.                     vNsAfterNwkJoin();
    ( U: E; M& q2 U: c
  24.                 }' H5 G( I0 Z% j" F/ F1 H
  25.         }
复制代码
5 y) a2 Z: i6 m% D. |, r( ~% u& C
12  如果vDoPrimaryScan等于FALSE或bdbSecondaryChannelSet等于0x00000000,节点将从步骤16继续。
6 |6 ^- s" W& S4 n4 ]5 M+ o' u如果bdbSecondaryChannelSet不等于0x00000000,节点将vDoPrimaryScan设为FALSE,将vScanChannels设为bdbSecondaryChannelSet,从步骤2继续。, ^/ s4 g) j& p3 Z& c: q/ e
  1. bDoPrimaryScan = FALSE;
    8 X$ t  F7 F7 q+ [  v4 f
  2. u32ScanChannels = sBDB.sAttrib.u32bdbSecondaryChannelSet;
    " h" D& D, a5 b! E" y; R
  3. u8ScanChannel = BDB_CHANNEL_MIN;2 \' e1 G) s) B
  4. vNsDiscoverNwk();
复制代码
! V/ Q; Q& m7 @: r: t
13  节点广播Mgmt_Permit_Joining_req ZDO命令,将 PermitDuration 字段至少设置为bdbcMinCommissioningTime,将TC_Significance字段设置为0x01/ W4 d' ^1 d" \  ^$ x0 t! X

  J- k! K& K0 W1 v2 C9 b- ^
  1. vNsAfterNwkJoin();! D6 G  D5 X. T3 y" l2 {
  2.         vNsSendPermitJoin();
复制代码
7 V4 ]* B  ~, {# B
14. 如果节点能够允许新节点加入,则应激活其permit join标志。为此,节点发出nlm - permit - join。将PermitDuration参数设置为至少bdbcmincommission oningtime的request原语。收到NWK层的NLME-PERMIT- .confirm原语后,将通知节点激活许可证连接的请求的状态。0 U. Q, d! E6 P- M8 M" @
  1. vNsAfterNwkJoin();* I2 x6 Z, x4 @/ Y! C& I& l
  2.         vNsSendPermitJoin();
复制代码
2 W( _2 g- N1 W( [* Q$ ^% z: Z
15  然后节点将bdbcommitoningstatus设置为SUCCESS。如果节点支持touchlink,它将aplFreeNwkAddrRangeBegin、aplFreeNwkAddrRangeEnd、aplFreeGroupID-RangeBegin和aplFreeGroupIDRangeEnd属性的值设置为0x0000(表示节点使用MAC关联加入了网络)。然后,节点应终止对不在网络上的节点的网络指导过程。
8 ~6 @& H0 {% D' n3 Z
  1. sBDB.sAttrib.ebdbCommissioningStatus = E_BDB_COMMISSIONING_STATUS_SUCCESS;  G6 E' x! O) X: S$ }2 Z' g7 [/ d
  2. eNS_State = E_NS_IDLE;
    & d& g+ o; e5 u( Q6 M
  3. ZPS_eAplAibSetApsUseExtendedPanId(ZPS_u64NwkNibGetEpid( ZPS_pvAplZdoGetNwkHandle()));
    - e  [$ c8 }  ~. e# r
  4. sBdbEvent.eEventType = BDB_EVENT_NWK_STEERING_SUCCESS;; a  r' u7 g0 H/ w  G# B! P
  5. APP_vBdbCallback(&sBdbEvent);5 X6 d1 Q7 s% u* I0 W
  6.         DBG_vPrintf(TRACE_SWITCH_NODE,"GoRunningState!\n");9 W4 @' V: D9 n. G4 F3 |0 m
  7.         vHandleJoinAndRejoin();" G( [- A6 K. j3 H6 [
  8.                 sDeviceDesc.eNodeState = E_RUNNING;/ a! @! I) W, v! w9 D2 J; N
  9.                 ZTIMER_eStart(u8TimerPoll, POLL_TIME);. J; F9 B4 E; _2 D
  10.                 ZTIMER_eStart(u8TimerTick, ZCL_TICK_TIME);
复制代码
- q1 N3 c& z& M* X) m3 x" W1 E
16. 节点可以使用制造商指定的程序重试,或者将bdbcommission oningstatus设置为NO_NETWORK,然后终止不在网络上的节点的网络转向过程。如果尝试制造商特定的过程,bdbcommitoningstatus和bdbNodeIsOnANetwork属性将在其终止时相应地更新,以便调试过程是一致的。* q7 B! x: r! ]' h& i! l
  1. //有省略
    0 a4 l" s3 H0 v: H9 O; e7 t
  2. vNsDiscoverNwk(), Y3 Q) Q7 d2 `. a5 I) u- [
  3. {
    $ n! e8 y! r, ~+ G
  4.     if((!u32ScanChannels) || (u8ScanChannel > BDB_CHANNEL_MAX))
    * _# W: Y' P# i7 {# L  U9 f& \1 v: n
  5.     {     
    2 K9 T- L2 y/ s
  6.         if(bDoPrimaryScan == FALSE)0 S! z0 |  B. h* b6 \
  7.         {
    6 J  `) ]8 o  P. v9 l
  8.             vNsTerminateNwkSteering();
    " N0 b& R  v% |% G5 ?
  9.             return;
    4 ]2 ?( B: u' r2 a$ ~1 Z1 ^- G0 p
  10.         }
    4 i, c. a- Q+ C- w2 o8 m
  11.     }
    , K3 q- m) u7 ~& F5 f
  12. }
    ; r0 `! M1 N$ S6 R+ q) c" U* t
复制代码

1 c6 J$ Q7 C; e7 @7 e- m' p; j& X" ^: w. T4 j
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-3-29 16:34 , Processed in 0.100633 second(s), 31 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表