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.

如何获取zll中Initiator的地址



target怎样得到Initiator的地址,然后向Initiator反馈信息?~~急用~~

  • Initiator在入网的时候会有device Announce,可以获得短地址

    在Touchlink过程获得了initiator的长地址

  • 非常感谢vv的回答!但我还有些不明白,详尽问题如下:

    1、Touchink和入网的不是同一个概念吗?

    2、对于Initiator 入网时发送的device Announce,target的回调函数是不是

    void zll_RouterProcessZDOMsg( zdoIncomingMsg_t *inMsg )
    {
    ZDO_DeviceAnnce_t devAnnce;

    switch ( inMsg->clusterID )
    {
    case Device_annce:
    {
    // all devices should send link status, including the one sending it
    ZDO_ParseDeviceAnnce( inMsg, &devAnnce );

    linkInfo_t *linkInfo;

    // check if entry exists
    linkInfo = nwkNeighborGetLinkInfo( devAnnce.nwkAddr, _NIB.nwkPanId );

    // if not, look for a vacant entry to add this node...
    if ( linkInfo == NULL )
    {
    nwkNeighborAdd( devAnnce.nwkAddr, _NIB.nwkPanId, 1 );
    // if we have end device childs, send link status
    if ( AssocCount(CHILD_RFD, CHILD_RFD_RX_IDLE) > 0 )
    {
    linkInfo = nwkNeighborGetLinkInfo( devAnnce.nwkAddr, _NIB.nwkPanId );
    if ( (linkInfo != NULL) && (linkInfo->txCost == 0) )
    {
    linkInfo->txCost = MAX_LINK_COST;
    }
    NLME_UpdateLinkStatus();
    }
    }
    else
    {
    // only update the TxCost, so the Link Status can be sent properly
    if (linkInfo->txCost == 0)
    {
    linkInfo->txCost = MAX_LINK_COST;
    }
    }
    }
    break;

    ......

    }

    3、如果target的回调函数是void zll_RouterProcessZDOMsg( zdoIncomingMsg_t *inMsg )的话,我怎么把Initiator的网络地址读取出来?

  • 1, 应该Touchlink是入网过程的一部分,在Touchlink 过程的目的,主要是为了一些信息的交互,包括基本的网络信息,设备信息等等。

    在获得这些信息以后,再进行加网,这个加网过程和传统ZIgBee的加网是一样的流程。

    2,建议你可以在应用层注册那个这个device annce的消息,在应用的ZDO 消息处理做处理。你这个是在ZDO层消息处理里

    3,device annce就有地址了

    typedef struct
    {
    uint16 nwkAddr;
    uint8 extAddr[Z_EXTADDR_LEN];
    uint8 capabilities;
    } ZDO_DeviceAnnce_t;