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.

[参考译文] CC2650EMK:NLME_OrphanJodrequest 错误代码

Guru**** 663810 points
Other Parts Discussed in Thread: CC2538, CC2650, Z-STACK, CC2650EMK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1280395/cc2650emk-nlme_orphanjoinrequest-error-code

器件型号:CC2650EMK
主题中讨论的其他器件:CC2538CC2650Z-stack

您好!

我已经 开发了 基于 Z Stack 1.2.2HA 的 Zigbee 终端设备 (CC2650),这些设备可以与协调器 CC2538通信。

我以前问过以下关于 NLME_NetworkDiscoveryRequest 的主题。
https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1255216/cc2650emk-nlme_networkdiscoveryrequest-specification


你是否得到相同的错误关于 NLME_OrphanJodrquest ?
另外、其他错误代码是什么、在什么情况下会发生这些错误代码?

此致、
村田裕也

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

    返回值可以是

    1.MAC_SCAN_IN_PROGRESS 表示已在进行扫描。

    2.MAC_NO_RESOURCES 表示无存储器资源可用。

    3.ZMacSuccessess 表示扫描成功。

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

    您好、YiKai、
    感谢您的答复。

     此函数是否发生  ZNwkInvalidRequest?

    此致、
    余亚市

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

    AFAIK、此 API 不返回 ZNWkInvalidRequest。

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

    感谢您的答复。

    我有关于 MAC_SCAN_IN_PROGRESS 错误的问题。
    超时发生在多少秒之后?
    如果在超时之前调用 NLME_OrphanNotification、是否会发生该错误?

    此致、
    余亚市

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

    我无法很好地理解您的问题。 所有这些 NLME API 都在 Z-Stack 中处理、应用开发人员无需更改部分源代码。 您能否详细说明一下要实现什么?

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

    您好、YiPai

    我必须把这个 ZED 放进世界里。
    即使在接收不良的地方、该 ZED 也必须自动连接到 ZC。
    然而,有一个问题, BeaconRequest 没有出现和 Zed 无法连接到 ZC。
    发现原因是 NLME_NetworkDiscovery 中的 ZNwkInvalidRequest 错误。
    我的主管想知道其他函数(NLME_OrphanNotification 和 NLME_RejoinRequest)是否导致了错误且未连接到 ZC。 他认为情况就是这样。
    我需要向我的主管解释、这样的事情不会发生、我会询问每个功能。

    此致、
    余亚市

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

    您是否会使用嗅探器先检查通过空气传播时到底发生了什么?

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

    您好!

    在 Beacon Reqeust 不出现时、我已经获得了嗅探器日志和调试日志。
    请参阅以下帖子。
    https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1255216/cc2650emk-nlme_networkdiscoveryrequest-specification

    程序和每个函数的规范必须显示可能发生的其他错误、以指示不会发生该错误/如果确实发生、可以处理该错误。
    所以我要求这些 NLME_OrphanJoReRequest 和 NLME_RejoinRequest 函数的详细规格。

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

    那篇文章中、我建议您使用 Switch_processZStackMsgs (以 SampleSwitch 为例)来检查断开连接和其他网络状态、但您不会回复我。 您试过吗? 顺便说一下,它根本没有帮助为同一问题创建这么多的帖子。 我建议您保留一个来帮助您。

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

    未购买 CC2650EMK。
    因此、我无法使用 SampleSwitch 进行调试。
    取而代之的是使用原始电路和 CC2650进行调试。
    对于调试、zstacktask.c 中的 processSysNwkInfoReadReq 函数已经被修改。
    z-stack 中的变量由应用使用 zclport_getDeviceInfo 获取、并以串行方式输出。

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

    您使用的是哪个示例都无关紧要。 您必须拥有自己的 processZStackMsg 才能检查断开连接和其他网络状态。 请先检查。

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

    我更改了 processorZstackMsg 以便能够捕捉 B 事件、如下所示。
    这是您要做的事情吗?

    static void TempSensor_processZStackMsgs(zstackmsg_genericReq_t *pMsg)
    {
      System_printf("In processZStackMsg\r\n\0");
      switch(pMsg->hdr.event)
      {
      case zstackmsg_CmdIDs_DEV_STATE_CHANGE_IND:
        {
          // The ZStack Thread is indicating a state change
    	  System_printf("msg=DEV_STATE_CHANGE_IND\r\n\0");
          zstackmsg_devStateChangeInd_t *pInd
            = (zstackmsg_devStateChangeInd_t *)pMsg;
          
          // Only process the state change if it actually changed.
          if(savedState != pInd->req.state)
          {
            savedState = pInd->req.state;
            
            if((pInd->req.state == zstack_DevState_DEV_ZB_COORD)
               || (pInd->req.state == zstack_DevState_DEV_ROUTER)
                 || (pInd->req.state == zstack_DevState_DEV_END_DEVICE))
            {
              // The device is part of a network, get the device's
              // network parameters.
              //pNwkInfo = zclport_getDeviceInfo(ztsEntity);
              
              
              if(pInd->req.state != zstack_DevState_DEV_END_DEVICE)
              {
                
                
              }
              else
              {
                // Change the default poll rate from 1 second to
                // the config setting in znwk_config.h
                TempSensor_setPollRate(1000);
              }
              
    #if defined (ZCL_EZMODE)
              zcl_EZModeAction(EZMODE_ACTION_NETWORK_STARTED, NULL);
    #endif
            }
          }
        }
        break;
        
    #if defined (ZCL_EZMODE)
      case zstackmsg_CmdIDs_ZDO_MATCH_DESC_RSP:
        {
          zstackmsg_zdoMatchDescRspInd_t *pInd
            = (zstackmsg_zdoMatchDescRspInd_t *)pMsg;
          zclEZMode_ActionData_t actionData;
          ZDO_MatchDescRsp_t *pRsp;
          
          /*
          * Parse the Match Descriptor Response and give it to
          * the ZCL EZMode module to process
          */
          pRsp = (ZDO_MatchDescRsp_t *)ICall_allocMsg(
                                                      sizeof(ZDO_MatchDescRsp_t) + pInd->rsp.n_matchList);
          if(pRsp)
          {
            pRsp->status = pInd->rsp.status;
            pRsp->nwkAddr = pInd->rsp.nwkAddrOfInterest;
            pRsp->cnt = pInd->rsp.n_matchList;
            memcpy(pRsp->epList, pInd->rsp.pMatchList,
                   pInd->rsp.n_matchList);
            
            actionData.pMatchDescRsp = pRsp;
            zcl_EZModeAction(EZMODE_ACTION_MATCH_DESC_RSP, &actionData);
            ICall_freeMsg(pRsp);
          }
        }
        break;
    #endif // ZCL_EZMODE
        
      case zstackmsg_CmdIDs_AF_INCOMING_MSG_IND:
        {
          // Process incoming data messages
          zstackmsg_afIncomingMsgInd_t *pInd
            = (zstackmsg_afIncomingMsgInd_t *)pMsg;
          TempSensor_processAfIncomingMsgInd( &(pInd->req) );
        }
        break;
        
        /*
        * These are messages/indications from ZStack that this
        * application doesn't process.  These message can be
        * processed by your application, remove from this list and
        * process them here in this switch statement.
        */
      case zstackmsg_CmdIDs_AF_DATA_CONFIRM_IND:
    	break;
      case zstackmsg_CmdIDs_ZDO_DEVICE_ANNOUNCE:
    	System_printf("ZDO_DEVICE_ANNOUNCE occured");
    	break;
      case zstackmsg_CmdIDs_ZDO_NWK_ADDR_RSP:
      case zstackmsg_CmdIDs_ZDO_IEEE_ADDR_RSP:
      case zstackmsg_CmdIDs_ZDO_NODE_DESC_RSP:
      case zstackmsg_CmdIDs_ZDO_POWER_DESC_RSP:
      case zstackmsg_CmdIDs_ZDO_SIMPLE_DESC_RSP:
      case zstackmsg_CmdIDs_ZDO_ACTIVE_EP_RSP:
      case zstackmsg_CmdIDs_ZDO_COMPLEX_DESC_RSP:
      case zstackmsg_CmdIDs_ZDO_USER_DESC_RSP:
      case zstackmsg_CmdIDs_ZDO_USER_DESC_SET_RSP:
      case zstackmsg_CmdIDs_ZDO_SERVER_DISC_RSP:
      case zstackmsg_CmdIDs_ZDO_END_DEVICE_BIND_RSP:
      case zstackmsg_CmdIDs_ZDO_BIND_RSP:
      case zstackmsg_CmdIDs_ZDO_UNBIND_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_NWK_DISC_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_LQI_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_RTG_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_BIND_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_LEAVE_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_DIRECT_JOIN_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_PERMIT_JOIN_RSP:
      case zstackmsg_CmdIDs_ZDO_MGMT_NWK_UPDATE_NOTIFY:
      case zstackmsg_CmdIDs_ZDO_SRC_RTG_IND:
      case zstackmsg_CmdIDs_ZDO_CONCENTRATOR_IND:
    	break;
      case zstackmsg_CmdIDs_ZDO_NWK_DISC_CNF:
    	System_printf("ZDO_NWK_DISC_CNF occured");
    	break;
      case zstackmsg_CmdIDs_ZDO_BEACON_NOTIFY_IND:
    	break;
      case zstackmsg_CmdIDs_ZDO_JOIN_CNF:
    	System_printf("ZDO_NWK_JOIN_CNF occured");
    	break;
      case zstackmsg_CmdIDs_ZDO_LEAVE_CNF:
    	System_printf("ZDO_LEAVE_CNF occured");
    	break;
      case zstackmsg_CmdIDs_ZDO_LEAVE_IND:
      case zstackmsg_CmdIDs_SYS_RESET_IND:
      case zstackmsg_CmdIDs_AF_REFLECT_ERROR_IND:
      case zstackmsg_CmdIDs_ZDO_TC_DEVICE_IND:
      case zstackmsg_CmdIDs_DEV_PERMIT_JOIN_IND:
        break;
        
      default:
        break;
      }
    }
    

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

    您可以打印 Pind->req.state 以检查设备状态。

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

    我已 在 Sensor_Process 函数中按如下方式打印 Z-stack 状态。
    I 在事件发生时打印 Z-stack 状态。

    ICallerrNo = ICall_wait(ICALL_TIMEOUT_FOREVER);
    	System_printf("In ICALL_WAIT\r\n\0");
    	System_printf("ICallErrNo = %d \r\n\0", ICallerrNo);
        if(ICallerrNo == ICALL_ERRNO_SUCCESS)
        {
    	  System_printf("In ICALL_WAIT\r\n\0");
    	  pzDevInfo = zclport_getDeviceInfo(ztsEntity);
    	  dDevState = pzDevInfo->devState;
    	  outputDevState(dDevState);


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

    当状态发生变化时、它将触发 TempSensor_processZStackMsg 并且您可以在 TempSensor_processZStackMsg 中打印 Pind->req.state。

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

    这可能是由错误的网络状态、CSMA 退避、器件锁定等导致的。  假设是第一种情况。  如果_nib.nwkState 为 NWK_ENDDEVICE、加入请求将会以 ZNwkInvalidRequest 失败 、因为它已经是网络的一部分。  重新  加入请求返回 ZNwkInvalidRequest。如果在获取网络描述符时选择加入的路由器与设备自身的短地址匹配、则会出现意外结果。  如 QD 所述、 生成的多个 E2E 线程使此问题的解决方案变得更复杂、因此应调查更强大的控制台日志和应用程序调试过程。

    此致、
    瑞安

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

    您好、Ryan。
    感谢您的答复。

    我已决定解决 重新启动后出现的_nib.nwkState = NWK_ENDDEVICE 问题。

    后续回复将发布到原始文章。
    e2e.ti.com/.../cc2650emk-nlme_networkdiscoveryrequest-specification

    此致、
    余亚市