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:zstackmsg_Cmdids_ZDO_LEAY_IND 不会在路由器上触发

Guru**** 2763595 points

Other Parts Discussed in Thread: CC2652R

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1611382/cc2652r-zstackmsg_cmdids_zdo_leave_ind-is-not-triggering-at-router

器件型号: CC2652R

尊敬的所有人:

在我的项目中、我使用 cc2652r 作为协调器和路由器。 在路由器端、我想实现这样一种逻辑:当协调器通过重新加入发起离开请求是假的时、路由器应该阻止使用其 EPAN 的协调器、而路由器则不会再次加入该协调器、直到路由器恢复出厂设置为止。  

 

我正在使用路由器上使用的 zr_zenericapp 示例、协调器上使用的 zc_switch 示例。 路由器上没有任何回调。   

我应该在哪里调用黑名单逻辑来执行此操作。  

请帮助我解决此问题。

此致、

Sushmitha.

 

 

 

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

    你好、Sushmitha、

    首先、您要设置   在 SetupZStackCallbacks 中将 has_leaveIndCB 和 leaveIndCB 更改为 true 、然后您将向 zstackmsg_Cmdids_ZDO_LEARE_IND 情况添加逻辑(确保在前后放入中断)。  然后、您可以看到 Zigbee 安全功能 SLA、第 2 部分任务 2、用于在路由器上实现拒绝列表。  您可以将 EPID 保存在 应用程序非易失性存储器内 、该存储器在恢复出厂设置期间一直保留直到被擦除。

    此致、
    Ryan

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

    您好、Ryan、

    您是否提到过我已经做到了 、但仍然没有触发、下面随附了代码供您参考。 请检查。

    静态 void 设置 ZStackCallbacks (void)
      ZStack_devZDOCBREQ_t zdoCBREQ ={0};

      //注册回调、打开:
      // 设备状态更改、
      // ZDO 匹配描述符响应、
      bool has_mgmtLeaveRsp;
      /**设置为 true 以接收 ZDO 管理休假响应*/
      Bool mgmtLeaveRsp;
    //  zdoCBReq.has_devStateChange = true;
    // zdoCBReq.devStateChange = true;

      zdoCBReq.has_devStateChange = true
      zdoCBReq.devStateChange = true
      zdoCBReq.has_matchDescRsp = true
      zdoCBReq.matchDescRsp = true
      zdoCBReq.has_ieeAddrrsp = true
      zdoCBReq.ieeAddrRsp = true
      zdoCBReq.has_mgmtLeaveRsp = true
      zdoCBReq.mgmtLeaveRsp = true
      zdoCBReq.has_leaveIndCB = true
      zdoCBReq.leaveIndCB = true
      zdoCBReq.has_deviceAnnounce = true//custom 已定义、以通过 UER 定义来处理设备通知案例
      zdoCBReq.deviceAnnounce = true//定制定义以处理 UESER 定义的器件通知案例

      (void) Zstackapi_Dev ZDOCBReq (appServiceTaskId、&zdoCBReq);
    }
        Case zstackmsg_Cmdids_ZDO_LEAY_IND:
        {

           ZStack_zdoLeaveInd_t *Pind =
        (ZStack_zdoLeaveInd_t *) pMsg->pReq


        UART2_WRITE (gUartHandle
          (uint8_t*)“离开回拨 TRIGGRED\r\n“
          50
          空)
        }
        休息
    此致、
    Sushmitha,
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于 Sushmitha、 zstackmsg_Cmdids_ZDO_LEAY_IND 引起的混淆、我深表歉意、因为这表明其他设备已离开网络。   zstackmsg_Cmdids_ZDO_LEAVE_CNF 是您希望用于离开当前 Zigbee 网络的本地设备的内容、该网络通过 HAS_leaveCnfCB 和 leaveCnfCB 启用 。  我已经从我这边确认了这种行为、这就是您要实施以实现您的应用的行为。  请注意、您将需要更改 ZDO_LeaveCnf 功能、因为 ZD App_Leave Reset->ZD App_Reset TimerStart 将在 LEOUT_RESET_DELAY 内强制器件复位 、因此您可能需要更改此行为。

    此致、
    Ryan

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

    我检查了上面的回调,但没有响应。

    静态 void 设置 ZStackCallbacks (void)
      ZStack_devZDOCBREQ_t zdoCBREQ ={0};

      //注册回调、打开:
      // 设备状态更改、
      // ZDO 匹配描述符响应、
      bool has_mgmtLeaveRsp;
      /**设置为 true 以接收 ZDO 管理休假响应*/
      Bool mgmtLeaveRsp;
    //  zdoCBReq.has_devStateChange = true;
    // zdoCBReq.devStateChange = true;

      zdoCBReq.has_devStateChange = true
      zdoCBReq.devStateChange = true
      zdoCBReq.has_matchDescRsp = true
      zdoCBReq.matchDescRsp = true
      zdoCBReq.has_ieeAddrrsp = true
      zdoCBReq.ieeAddrRsp = true
      zdoCBReq.has_mgmtLeaveRsp = true
      zdoCBReq.mgmtLeaveRsp = true
      // zdoCBReq.has_leaveIndCB = true;
      // zdoCBReq.leaveIndCB = true;
      zdoCBReq.has_leaveCnfCB =true
      /**设置为 true 以接收休假确认*/
      zdoCBReq.leaveCnfCB = true
      zdoCBReq.has_deviceAnnounce = true//custom 已定义、以通过 UER 定义来处理设备通知案例
      zdoCBReq.deviceAnnounce = true//定制定义以处理 UESER 定义的器件通知案例

      (void) Zstackapi_Dev ZDOCBReq (appServiceTaskId、&zdoCBReq);
    }
     
        案例 zstackmsg_Cmdids_ZDO_LEARE_CCF:
         {

           ZStack_zdoLeaveCnf_t *Pind =
        (ZStack_zdoLeaveCnf_t *) pMsg->pReq


        UART2_WRITE (gUartHandle
          (uint8_t*)“离开回拨 TRIGGRED\r\n“
          50
          空)
        }
        休息
        Case zstackmsg_Cmdids_ZDO_LEAY_IND:
    请检查并告诉我。
    此致、
    Sushmitha.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Sushmitha、

    您可以在  ZDO_LeaveCnf 内放置一个断点 来确定是否曾经输入过该断点、并使用 监听器件 检查无线数据包。 我不知道如何在这方面进一步的帮助,因为我已经成功地测试了我的结束  您使用的是哪个 SDK 版本? 限制使用 Leave Ind/Cnf 的功能、您可以使用 zstackmsg_Cmdids_dev_State_change_IND 来检查 ZStack_DevState  、该 ZStack_DevState 应该已从 ZStack_DevState_dev_router 更改为 ZStack_DevState、因为它不再加入网络。

    此致、
    Ryan

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

    您好、Ryan、

    SDK 版本为 simplelink_cc13xx_cc26xx_sdk_8_31_00_11

    我尝试通过断点进行调试、但没有进展。

    此致、

    Sushmitha.

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

    你好、Sushmitha、

    如果  从未输入 ZDO_LeaveCnf 或 ZDO_LeaveInd、并且 ZStack_DevState 仍为 ZStack_DevState_DEV_router(来自 sendDevStateChangeInd) 、则 ZC 似乎从未发送 ZR a leave 命令。  您应该能够通过监听无线网络数据包来确认这一点。

    此致、
    Ryan

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

    您好、Ryan、

     从不输入 ZDO_LeaveCnf 或 ZDO_LeaveInd、但是路由器正在离开网络并重置我已经验证过的网络。  

    此致、

    Sushmitha.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    路由器正在离开网络并重置我已验证的内容

    您如何确认这一点?  您可以将断点置于 ZD App_Reset TimerStart -> SysCtrlSystemReset 内、并使用调用堆栈来确定确切要求器件离开的位置、从而触发器件复位。

    此致、
    Ryan