ZigBeeÎÞÏßͨÐÅÍøÂçÈí¼þ±ÏÒµÉè¼Æ - ͼÎÄ ÏÂÔØ±¾ÎÄ

if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) ) {

devState = DEV_NWK_DISC;

#if defined( MANAGED_SCAN ) ZDOManagedScan_Next();

ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );

#else

ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );

#endif } ¡­¡­ else {

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( \#endif

HalUARTWrite(HAL_UART_PORT_0,\ } }

#endif //!ZDO COORDINATOR || SOFT_START

if ( ret != ZSuccess )

osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY );

} ¢Ú ·¢ÏÖÍøÂçÈ·ÈÏ£º

ZStatus_t ZDO_NetworkDiscoveryConfirmCB( byte ResultCount,

networkDesc_t *NetworkList ) {

??

ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(ZDO_NetworkDiscoveryCfm_t), (byte *)&msg );

return (ZSuccess);

} // ZDO_NetworkDiscoveryConfirmCB

¢Û ´¦ÀíZDO²ã´¦ÀíZDO_NWK_DISC_CNFÏûÏ¢£¬µ÷ÓÃNLME_JoinRequest£º void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr ) £û ??

case ZDO_NWK_DISC_CNF:

if (devState != DEV_NWK_DISC)

24

{ }

#if !defined ( ZDO_COORDINATOR ) || defined ( SOFT_START ) #if defined ( MANAGED_SCAN )

else if ( (((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->hdr.status == ZDO_SUCCESS) && (zdoDiscCounter > NUM_DISC_ATTEMPTS) )

#else

else if ( (((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->hdr.status == ZDO_SUCCESS) && (zdoDiscCounter++ > NUM_DISC_ATTEMPTS) )

#endif {

if ( devStartMode == MODE_JOIN ) //¼ÓÈëģʽ {

devState = DEV_NWK_JOINING;

ZDApp_NodeProfileSync((ZDO_NetworkDiscoveryCfm_t *)msgPtr);

if ( NLME_JoinRequest( ((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->extendedPANID,

BUILD_UINT16( ((ZDO_NetworkDiscoveryCfm_t

*)msgPtr)->panIdLSB, ((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->panIdMSB ),

((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->logicalChannel, ZDO_Config_Node_Descriptor.CapabilityFlags ) != ZSuccess ) {

ZDApp_NetworkInit( (uint16)(NWK_START_DELAY + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );

} }

else if ( devStartMode == MODE_REJOIN ) //ÖØÐ¼ÓÈëģʽ {

devState = DEV_NWK_REJOIN;

if ( NLME_ReJoinRequest() != ZSuccess ) {

ZDApp_NetworkInit( (uint16)(NWK_START_DELAY + ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );

} }

if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE )

{

// The receiver is on, turn network layer polling off.

25

NLME_SetPollRate( 0 );

NLME_SetQueuedPollRate( 0 ); NLME_SetResponseRate( 0 ); } } else {

#if defined ( SOFT_START ) && !defined ( VIRTKEY_SOFT_START ) #if defined ( MANAGED_SCAN ) if ( (softStartAllowCoord)

&& (((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->hdr.status != ZDO_SUCCESS )

&& (zdoDiscCounter > NUM_DISC_ATTEMPTS) ) #else

if ( (softStartAllowCoord)

&& (((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->hdr.status != ZDO_SUCCESS )

&& (zdoDiscCounter++ > NUM_DISC_ATTEMPTS) ) #endif {

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR; devStartMode = MODE_HARD; //½«Æô¶¯Ä£Ê½¸Ã¸Ä±ä³ÉÓ²¼þģʽ }

else if ( continueJoining == FALSE ) {

devState = DEV_HOLD;

osal_stop_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT ); break; // Don't init } #endif

#if defined ( MANAGED_SCAN )

ZDApp_NetworkInit( MANAGEDSCAN_DELAY_BETWEEN_SCANS ); #else

if ( continueJoining ) {

ZDApp_NetworkInit( (uint16)(BEACON_REQUEST_DELAY

+ ((uint16)(osal_rand()& BEACON_REQ_DELAY_MASK))) ); } #endif }

#endif // !ZDO_COORDINATOR break; ?? £ý

26

¢Ü ¼ÓÈëÍøÂçÈ·ÈÏ£¬·¢ËÍZDO_NWK_DISC_CNFÏûÏ¢£º void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status ) {

??

// Notify ZDApp

ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_IND, sizeof(osal_event_hdr_t), (byte*)NULL );

}

¢Ý ZDApp´¦ÀíÍøÂç¼ÓÈëʼþ

void ZDApp_ProcessNetworkJoin( void )

{

if ( (devState == DEV_NWK_JOINING) ||

((devState == DEV_NWK_ORPHAN) &&

(ZDO_Config_Node_Descriptor.LogicalType == NODETYPE_ROUTER)) ) {

// Result of a Join attempt by this device. if ( nwkStatus == ZSuccess ) {

osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); //ÉèÖÃÍøÂç״̬¸Ä±äʼþ

?? £ý ?? }

£¨2£©½ÚµãµÄ°ó¶¨

´«¸Ð½Úµã¿ÉÒԺͶÔÓ¦µÄ¿ØÖÆ½Úµã½øÐа󶨣¬¾ßÌåµÄ¹âÕÕ´«¸Ð½ÚµãÄܹ»°ó¶¨LED̨µÆ½Úµã£¬Êª¶È´«¸Ð½ÚµãÄܹ»°ó¶¨Ë®±Ã½Úµã£¬¶þÑõ»¯Ì¼´«¸Ð½ÚµãÄܹ»°ó¶¨¾íÁ±½Úµã¡£ÒѾ­°ó¶¨µÄ½ÚµãÄܹ»½øÐС°×Ô¶¯¿ØÖÆ¡±£¬Ò²¾ÍÊÇͨ¹ý´«¸ÐÆ÷µÄÖµÀ´¿ØÖÆÏàÓ¦½ÚµãµÄ¶¯×÷¡£

°ó¶¨Ô­Àí˵Ã÷£º

°ó¶¨ÊÇÒ»ÖÖ¿ØÖÆÁ½¸ö»òÕß¶à¸öÉ豸ӦÓòãÖ®¼äÐÅÏ¢Á÷´«µÝµÄ»úÖÆ¡£ÔÚZigBee2006·¢²¼°æ±¾ÖУ¬Ëü±»³ÆÎªÔ´°ó¶¨£¬ËùÓеÄÉ豸¶¼¿ÉÒÔÖ´Ðа󶨻úÖÆ¡£ °ó¶¨ÔÊÐíÓ¦ÓóÌÐò·¢ËÍÒ»¸öÊý¾Ý°ü¶ø²»ÐèÒªÖªµÀÄ¿±êÉ豸µÄ¶ÌµØÖ·¡£Ó¦ÓÃÖ§³Ö×Ӳ㣨APS£©´ÓËüµÄ°ó¶¨±íÖÐÈ·¶¨Ä¿±êÉ豸µÄ¶ÌµØÖ·£¬È»ºó½«Êý¾Ý·¢Ë͸øÄ¿±êÓ¦ÓûòÕßÄ¿±ê×é¡£Èç¹ûÔڰ󶨱íÖÐÕÒµ½µÄ¶ÌµØÖ·²»Ö¹Ò»¸ö£¬Ð­ÒéÕ»»áÏòËùÓÐÕÒµ½µÄ¶ÌµØÖ··¢ËÍÊý¾Ý¡£

°ó¶¨Ö»ÄÜÔÚ»¥Îª\²¹³äµÄ\É豸¼ä±»´´½¨¡£Ò²¾ÍÊÇ˵£¬µ±Á½¸öÉ豸ÒѾ­ÔÚËûÃÇ

27