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