This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
根据下面链接来修改的,协调器2538,终端2530,都是基于3.0.2协议栈(HomeAutomation)
[FAQ] CC2538: Z-Stack 3.0.2 Known Issues and Fixes - Zigbee & Thread forum - Zigbee & Thread - TI E2E...
1.关于第24条的修改:
修改为 i = (gMAX_NWK_SEC_MATERIAL_TABLE_ENTRIES - 1); // ADD THIS LINE
请问这里的修改是不是协调器和终端里面都需要修改?
2.关于第18条的修改:
In ZDApp_ProcessNetworkJoin of ZDApp.c, remove NLME_SetPollRate( zgRejoinPollRate ); from if
(nwkStatus == ZSuccess) and place in the else statement instead. One must also set the
zgRejoinPollRate when device state is DEV_END_DEVICE_UNAUTH
2.1:这句话具体怎么修改?NLME_SetPollRate( zgRejoinPollRate )放在else的什么位置?
2.2:One must also set the
zgRejoinPollRate when device state is DEV_END_DEVICE_UNAUTH
这个具体怎么设置呢?
Optimally, also place NLME_SetPollRate( ZDApp_SavedPollRate ); inside of ZDO_JoinConfirmCB
2.3:这句话具体怎么修改?NLME_SetPollRate( ZDApp_SavedPollRate );放在ZDO_JoinConfirmCB的哪个位置?
2.4:关于第18条的修改是协调器和终端都需要修改吗?
1&2
if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey( TRUE ) == false ) ) { //if ( ZSTACK_END_DEVICE_BUILD ) //{ // NLME_SetPollRate( zgRejoinPollRate ); //} // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH ); bdb_nwkAssocAttemt(TRUE); } ... if (nwkStatus == ZSuccess) { //When the device has successfully rejoined then reset retryCnt retryCnt = 0; // Verify NWK key is available before sending Device_annce if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey( TRUE ) == false ) ) { //加在這 if ( ZSTACK_END_DEVICE_BUILD ) { NLME_SetPollRate( zgRejoinPollRate ); } // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH ); // Start the reset timer for MAX UNAUTH time ZDApp_ResetTimerStart( MAX_DEVICE_UNAUTH_TIMEOUT ); }
3. ZDO_JoinConfirmCB的最後一行就可以
In ZDApp_ProcessNetworkJoin of ZDApp.c, remove NLME_SetPollRate( zgRejoinPollRate ); from if (nwkStatus == ZSuccess) and place in the else statement instead. One must also set the zgRejoinPollRate when device state is DEV_END_DEVICE_UNAUTH 关于上面一句话的理解,还是不太明白,是不是下面函数的两个地方都要修改? 下面的函数有两个地方都有if ( nwkStatus == ZSuccess ) 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 ); #if defined ( POWER_SAVING ) osal_pwrmgr_device( PWRMGR_BATTERY ); #endif if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey( TRUE ) == false ) ) { if ( ZSTACK_END_DEVICE_BUILD ) { NLME_SetPollRate( zgRejoinPollRate );//这里注释吗? } // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH ); bdb_nwkAssocAttemt(TRUE); } else { if ( ZSTACK_ROUTER_BUILD ) { if ( devState == DEV_NWK_ORPHAN && ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE ) { // Change NIB state to router for restore _NIB.nwkState = NWK_ROUTER; } } if ( devState == DEV_NWK_JOINING ) { ZDApp_AnnounceNewAddress(); if( bdbCommissioningProcedureState.bdbCommissioningState == BDB_COMMISSIONING_STATE_TL ) { bdb_setNodeIsOnANetwork(TRUE); bdb_reportCommissioningState( BDB_COMMISSIONING_STATE_TL, TRUE ); } } ZDApp_ChangeState( DEV_END_DEVICE ); if ( ZSTACK_ROUTER_BUILD ) { // NOTE: first two parameters are not used, see NLMEDE.h for details if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE ) { NLME_StartRouterRequest( 0, 0, false ); } } } } else { bdb_nwkAssocAttemt(FALSE); NLME_SetPollRate( zgRejoinPollRate );//这里添加? } } else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_SEC_REJOIN_CURR_CHANNEL || devState == DEV_NWK_TC_REJOIN_CURR_CHANNEL || devState == DEV_NWK_TC_REJOIN_ALL_CHANNEL || devState == DEV_NWK_SEC_REJOIN_ALL_CHANNEL ) { // results of an orphaning attempt by this device if (nwkStatus == ZSuccess) { //When the device has successfully rejoined then reset retryCnt retryCnt = 0; // Verify NWK key is available before sending Device_annce if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey( TRUE ) == false ) ) { if ( ZSTACK_END_DEVICE_BUILD ) { NLME_SetPollRate( zgRejoinPollRate );//这里注释? } // wait for auth from trust center ZDApp_ChangeState( DEV_END_DEVICE_UNAUTH ); // Start the reset timer for MAX UNAUTH time ZDApp_ResetTimerStart( MAX_DEVICE_UNAUTH_TIMEOUT ); } else { ZDApp_ChangeState( DEV_END_DEVICE ); osal_stop_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF ); // setup Power Manager Device #if defined ( POWER_SAVING ) osal_pwrmgr_device( PWRMGR_BATTERY ); #endif // The receiver is on, turn network layer polling off. if ( ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE ) { // if Child Table Management process is not enabled if ( zgChildAgingEnable == FALSE ) { NLME_SetPollRate( 0 ); NLME_SetQueuedPollRate( 0 ); NLME_SetResponseRate( 0 ); } } if ( ZSTACK_ROUTER_BUILD ) { // NOTE: first two parameters are not used, see NLMEDE.h for details if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE ) { NLME_StartRouterRequest( 0, 0, false ); } } ZDApp_AnnounceNewAddress(); } } else { if ( devStartMode == MODE_RESUME ) { if ( ++retryCnt <= MAX_RESUME_RETRY ) { if ( _NIB.nwkPanId == 0xFFFF ) devStartMode = MODE_JOIN; else { devStartMode = MODE_REJOIN; _tmpRejoinState = true; prevDevState = DEV_NWK_SEC_REJOIN_CURR_CHANNEL; } } // Do a normal join to the network after certain times of rejoin retries else if( AIB_apsUseInsecureJoin == true ) { devStartMode = MODE_JOIN; } } else if(devStartMode == MODE_REJOIN) { if ( ZSTACK_END_DEVICE_BUILD ) { devStartMode = MODE_REJOIN; _tmpRejoinState = true; _NIB.nwkState = NWK_INIT; } } // Clear the neighbor Table and network discovery tables. nwkNeighborInitTable(); NLME_NwkDiscTerm(); if ( ( ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) == 0 ) || ( (ZDO_Config_Node_Descriptor.CapabilityFlags & CAPINFO_RCVR_ON_IDLE) && (zgChildAgingEnable == TRUE) ) ) && (devStartMode == MODE_REJOIN) ) { NLME_SetPollRate( zgRejoinPollRate ); } } NLME_SetPollRate( zgRejoinPollRate );//这里添加? } #if defined ( ZIGBEEPRO ) else if ( devState != DEV_HOLD ) { #ifdef APP_TP2 if(devState == DEV_END_DEVICE_UNAUTH ) { return; } #endif // Assume from address conflict // Notify the network ZDApp_AnnounceNewAddress(); // Notify apps osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); } #endif }
这是你之前回复的,我现在是基于3.0.2协议栈(HA),是不是这个bug已经更新过了?你之前发的修改方法,实在没看明白
Proposed fix:
In ZDApp_ProcessNetworkJoin of ZDApp.c, remove NLME_SetPollRate( zgRejoinPollRate ); from if
(nwkStatus == ZSuccess) and place in the else statement instead. One must also set the
zgRejoinPollRate when device state is DEV_END_DEVICE_UNAUTH
Optimally, also place NLME_SetPollRate( ZDApp_SavedPollRate ); inside of ZDO_JoinConfirmCB.
剛剛比對了一下,看起來Z-STACK 3.0.2預設已經有PATCH這個項目了,所以你不用再PATCH