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.

[参考译文] CC2652P:当器件加入网络时、避免发送 ZDP 器件通告命令失败

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/999673/cc2652p-avoid-zdp-device-announce-command-sent-failed-when-device-join-into-a-network

器件型号:CC2652P

当设备加入网络时、ZDP 设备通告命令将通过网络广播到所有设备。 这是网络管理器设备的重要信息。

但是 、当许多设备加入网络时、广播消息很容易就会发送失败。 因此应用层应该有机会重试发送   ZDP 设备通告命令。

void (*pZdoAnnounceNewAddrFailureCB)(uint8_t status) = NULL;

/*********************************************************************
 * @fn      ZDApp_AnnounceNewAddress()
 *
 * @brief   Send Device Announce and hold all transmissions for
 *          new address timeout.
 *
 * @param   none
 *
 * @return  none
 */
void ZDApp_AnnounceNewAddress( void )
{
  // Turn off data request hold
  APSME_HoldDataRequests( 0 );

  // new function to send ZDP Device Announce with AF confirm callback
  afStatus_t status = ZDP_DeviceAnnceEx( NLME_GetShortAddr(), NLME_GetExtAddr(),
                                         ZDO_Config_Node_Descriptor.CapabilityFlags, 0, ZDO_AnnounceNewAddrConfirmCB, NULL );
  // Trigger callback when Device Announce sent failed, add by luoyiming 2021-05-08
  if( status != ZSuccess && pZdoAnnounceNewAddrFailureCB )
  {
    pZdoAnnounceNewAddrFailureCB( status );
  }

  // Setup the timeout
  APSME_HoldDataRequests( ZDAPP_HOLD_DATA_REQUESTS_TIMEOUT );

  if ( ZSTACK_END_DEVICE_BUILD )
  {
    if ( zgChildAgingEnable == TRUE )
    {
      uint8_t coordExtAddr[Z_EXTADDR_LEN];

      // Send the message to parent
      NLME_GetCoordExtAddr( coordExtAddr );
      NLME_SendEndDevTimeoutReq( NLME_GetCoordShortAddr(), coordExtAddr,
                                 zgEndDeviceTimeoutValue,
                                 zgEndDeviceConfiguration );
    }
  }
}

/*********************************************************************
 * @fn      ZDO_AnnounceNewAddrConfirmCB
 *
 * @brief   Send Device Announce confirm callback
 *
 * @param   same with pfnAfCnfCB in af.h
 *
 * @return  none
 */
void ZDO_AnnounceNewAddrConfirmCB( uint8_t status, uint8_t endpoint, uint8_t transID, uint16_t clusterID, void* cnfParam )
{
  // Trigger callback when Device Announce sent failed, add by luoyiming 2021-05-08
  if( status != ZSuccess && pZdoAnnounceNewAddrFailureCB )
  {
    pZdoAnnounceNewAddrFailureCB( status );
  }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    仅供您参考。 通常、只有当器件首次加入 Zigbee 网络时才必须使用器件通知作为请求器件信息详细信息的起点。 我们通常不会同时加入多个器件、因此如果错过了器件通知、您只需重试加入过程即可。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Zigbee 照明由2线供电。 他们同时加入网络。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我知道这种情况,但我仍然建议大家一一起来。 无论如何、请重试您的设备通知以改进此功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aries、

    感谢您提供解决方案。  由于充当信任中心的 Zigbee 协调器也可能会因这些同时进行的设备加入请求而过载、因此建议通过  应用代码中启用的偶发事件(0至30秒)错开加入设备。

    此致、
    Ryan