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位地址单播发送过来的数据呢? 如果不能,该怎么解决单播发送的问题。