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.

Zigbee zstack 2.5.1 两个路由设备之间,怎么能点播通信。

Zigbee   zstack 2.5.1 两个路由设备之间不知道对方短地址,怎么能点播通信。我看有个 afAddr64Bit 模式,不知道是怎么使用的

dstAddr.addrMode = afAddr64Bit;
    dstAddr.addr.extAddr[7] = 0x01;
    dstAddr.addr.extAddr[6] = 0xff;
    dstAddr.addr.extAddr[5] = 0x20;
    dstAddr.addr.extAddr[4] = 0x03;
    dstAddr.addr.extAddr[3] = 0xFF;
    dstAddr.addr.extAddr[2] = 0xFF;
    dstAddr.addr.extAddr[1] = 0xFF;
    dstAddr.addr.extAddr[0] = 0xFF;
    dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//端点号

if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
IR_XUE_XI_CMD, 10, RegisterMsg, &transId, AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答
{
AFSendBufOkCnt++;
if(AFSendBufOkCnt> 0xfffffff0)
AFSendBufOkCnt=0;
}

这样设置,在协调器上发送给路由设备,路由能收到。而如果是路由这样设置发给另一个路由。却收不到。

  • afAddr64Bit的方式只能发送给直接连在协调器上的设备,而不能发给下一级设备

  • 关键我现在的问题是,一个协调器,两个路由AB,先开路由A,再开路由B。B发送数据给A。用这个afAddr64Bit 。

    还是发不过去。是端点描述符什么的要设置吗?难道端点描述符里面的输入输出簇都要设置一致,才能发送到达吗?

    社区默认的帖子文字太小,费眼睛,我给设置大了。更好看一些。技术支持们辛苦了!少占鱼zigbee单播

    dstAddr.addrMode = afAddr64Bit;
    dstAddr.addr.extAddr[0] = 0x06;
    dstAddr.addr.extAddr[1] = 0x7f;
    dstAddr.addr.extAddr[2] = 0x20;
    dstAddr.addr.extAddr[3] = 0x03;
    dstAddr.addr.extAddr[4] = 0xff;
    dstAddr.addr.extAddr[5] = 0xff;
    dstAddr.addr.extAddr[6] = 0xff;
    dstAddr.addr.extAddr[7] = 0xff;
    dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//给协调器 

    if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
    IR_XUE_XI_CMD, 10, RegisterMsg, //0X0038 定时注册,发送MAC和AD
    &transId, AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答
    {
    AFSendBufOkCnt++;
    if(AFSendBufOkCnt> 0xfffffff0)
    AFSendBufOkCnt=0;
    }

    static const SimpleDescriptionFormat_t RefNode_SimpleDesc =
    {
    LOCATION_REFNODE_ENDPOINT, //端点号定义
    LOCATION_PROFID, //终端支持的特征ID

    LOCATION_REFNODE_DEVICEID, //设备ID号

    LOCATION_DEVICE_VERSION, //版本号
    LOCATION_FLAGS, //没有使用

    sizeof(RefNode_InputClusterList), //输入簇个数
    (cId_t*)RefNode_InputClusterList, //输入簇的列表

    sizeof(RefNode_OutputClusterList), //输出簇个数
    (cId_t*)RefNode_OutputClusterList //输出簇列表
    };

    //端点描述符,
    static const endPointDesc_t epDesc =
    {
    LOCATION_REFNODE_ENDPOINT, //端点号
    &RefNode_TaskID, //任务ID
    (SimpleDescriptionFormat_t *)&RefNode_SimpleDesc, //简单描述符指针
    noLatencyReqs
    };

    static const cId_t RefNode_InputClusterList[] =
    {
    LOCATION_XY_RSSI_REQUEST, //RSSI 信号强度请求
    LOCATION_REFNODE_CONFIG, //参考节点配置
    LOCATION_REFNODE_REQUEST_CONFIG, //参考节点请求配
    LOCATION_REFNODE_PWD_CONFIG, //密钥配置请求

    LOCATION_BLINDNODE_COME_REQUEST,//查岗申请
    LOCATION_RSSI_BLAST //收集 RSSI 值
    };

    static const cId_t RefNode_OutputClusterList[] =
    {
    LOCATION_XY_RSSI_RESPONSE, //参考 RSSI 回答
    LOCATION_REFNODE_PWD_RESPONSE, //密钥配置应答
    LOCATION_REFNODE_CONFIG, //参考节点配置

    LOCATION_BLINDNODE_COME_RSSI_RESPONSE//查岗到位应答


    };

  • 我只是想实现网络内任意两个路由之间单播通信。该怎么办呢? 尽量不涉及广播。以免造成网络整体压力。

    除了先用MAC地址去广播获取短地址,没别的办法吗? 这个64位地址是指的入网后的MAC地址是从ITEM 0X0001地址里取出来的吗。入网MAC地址产生优先级遵循  芯片出厂MAC ------用户自定义IEEE ------系统随机生成MAC  的顺序吗? 那我也不知道对方入网的时候究竟是在第几步成功了。我怎么给对方发数据?少占鱼求赐

  • 成功了。能64位单播发送了。

     afAddr64Bit  64位单播发送
    有时候发送可以有时候一点都不发,原来是因为。必须先让发送方入网
    然后再打开接收方入网。这样才行。我一直先开的接收,所以老是发不过去。我晕少占鱼zigbee64位地址单播IEEE

    afAddrType_t dstAddr;

        dstAddr.addrMode = afAddr64Bit;   

        dstAddr.addr.extAddr[0] = 0x06;//目的地路由的IEEE地址。用户自定义的那个。就是他的64位入网地址
        dstAddr.addr.extAddr[1] = 0x7f;
        dstAddr.addr.extAddr[2] = 0x20;
        dstAddr.addr.extAddr[3] = 0x03;
        dstAddr.addr.extAddr[4] = 0xff;
        dstAddr.addr.extAddr[5] = 0xff;
        dstAddr.addr.extAddr[6] = 0xff;
        dstAddr.addr.extAddr[7] = 0xff;
       
        dstAddr.endPoint = LOCATION_REFNODE_ENDPOINT;//目的地 路由类

    if(afStatus_SUCCESS == AF_DataRequest( &dstAddr, (endPointDesc_t *)&epDesc,
                              IR_XUE_XI_CMD, 10, RegisterMsg,  //0X0038 定时注册,发送MAC和AD
                              &transId,  AF_DISCV_ROUTE | AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) ) //发送数据,要求APS层ACK应答 
         {
            AFSendBufOkCnt++;
            if(AFSendBufOkCnt> 0xfffffff0)
              AFSendBufOkCnt=0;
         }

     

  • 我只是想实现网络内任意两个路由之间单播通信。该怎么办呢? 尽量不涉及广播。以免造成网络整体压力。

    除了先用MAC地址去广播获取短地址,没别的办法吗? 这个64位地址是指的入网后的MAC地址是从ITEM 0X0001地址里取出来的吗。入网MAC地址产生优先级遵循  芯片出厂MAC ------用户自定义IEEE ------系统随机生成MAC  的顺序吗? 那我也不知道对方入网的时候究竟是在第几步成功了。我怎么给对方发数据?少占鱼求赐

    如果路由没有直接挂在协调器下。能不能收到其他路由的 64位地址单播发送过来的数据呢? 如果不能,该怎么解决单播发送的问题。

x 出现错误。请重试或与管理员联系。