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.

[参考译文] CC2652R:休眠式终端设备接收和处理 ZDO MGMT-Leave 命令的争议。

Guru**** 3003130 points

Other Parts Discussed in Thread: Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1016509/cc2652r-controversies-of-sleepy-end-device-receives-and-process-zdo-mgmt-leave-command

器件型号:CC2652R
Thread 中讨论的其他器件:Z-stack

在"zDO_object.c"中、函数"ZDO_ProcessMgmtLeaveReq"。

  if ( ZG_BUILD_ENDDEVICE_TYPE )
  {
    //If rejoin is TRUE, the device will stop polling when processing rejoin.
    if(req.rejoin == FALSE)
    {
      // Stop polling and get ready to reset
      nwk_SetCurrentPollRateType(POLL_RATE_DISABLED,TRUE);
    }
  }

 注释显示"如果重新加入为真、则器件将在处理重新加入时停止轮询。" 但在此代码中、当重加入标志为"false"时、轮询将停止。 另一个问题是、终端设备收到的 mgmt-leave 命令的 target-extAddr DNO 与当前终端设备不匹配、终端设备仍将停止轮询。

因此、我认为该代码应该是这样的

    //If rejoin is TRUE, the device will stop polling when processing rejoin.
    //Is there any controversial processing about End-Device's Mgmt-Leave command, luoyiming 2020-07-07
    if( (req.rejoin == TRUE) && (req.extAddr == NULL) )
    {
      // Stop polling and get ready to reset
      nwk_SetCurrentPollRateType(POLL_RATE_DISABLED,TRUE);
    }

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

    按照我解释此功能的方式、如果器件未重新加入、则应禁用轮询速率。  您是否观察到错误行为?  此外、还有一个预先声明只有父设备才能请求 ZED 离开的代码:

      if ( ( ZG_BUILD_ENDDEVICE_TYPE ) && ( ZG_DEVICE_ENDDEVICE_TYPE ) )
      {
        //Only the parent device can request to leave, otherwise silently discard the frame
        if(inMsg->srcAddr.addr.shortAddr != _NIB.nwkCoordAddress)
        {
          return;
        }
      }

    因此、如果不是直接用于该器件、则应丢弃该消息

    此致、
    Ryan

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

    1,μ s 当父设备发送广播 mgmt-leave req、并且该数据包的 ext-Addr 与终端设备不是数学运算时、终端设备不需要离开网络。

    2、当 "req.reino"为"true"而不是"false"时、需要执行"Nwk_SetCurrentPollRateType (POLL_RATE _DISABLED、TRUE)"。

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

    父设备何时需要广播不适用于该子设备的 ZDO 管理休假请求?  ZED 也必须是非休眠配置。  这似乎是一个非常具体的临界情况。

    2.重加入为真时,为何应禁用轮询率?  当不重新加入时、应将其关闭、否则重新加入过程将重新建立正确的轮询率。  我没有观察到 ZED 数据请求由于此函数而运行异常。

    此致、
    Ryan

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

    1,一些基于 SiliconLabs MCU 的 ZigBee 协调器将发送广播  ZDO 管理离开请求、DstAddr 为"0xFFF"、可由 CC2652R-ZED 接收。   

    2、   在该代码的注释中、它说"如果重新加入为真、则停止轮询"。 但在代码中、当"重新加入"为 false 时、轮询会停止。

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

    我已告知软件开发团队。

    此致、
    Ryan

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

    但到目前为止,我还不知道泽德何时停止轮询呢? 重新加入-正确还是重新加入-错误?  

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

    从逻辑上讲,如果您已离开网络并且不打算重新加入网络,则无需轮询。  默认代码设置似乎与 Z-Stack 中的 POLL_RATE 和 DISABLED 的其他用法(例如、ZDUP_LEAVeReset)保持一致、这就是我建议将其设置为 true 的原因。

    此致、
    Ryan