Z-Stack报文发送顺序
我在调试Z-CCa530-stack-2.5.1a中switcher和light的Demon程序时,遇到二个问题想请教下各位。
环境:二个1.8.1的EB板,一个作为灯(ZC),一个作为开关(ZED)
代码:灯:projects/zstack/homeautomation/samplelight
开关:progjects/zstack/homeautomation/sampleswitch
为了让开关在发出匹配报文后收到匹配应答报文,在Zcl_samplesw.c匹配代码后加入NwkPollReq(false)函数,以便ZED主动从ZC处取得应答,代码修改如下:
dstAddr.addrMode = AddrBroadcast;
dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,
ZCL_HA_PROFILE_ID,
ZCLSAMPLESW_BINDINGLIST, bindingOutClusters,
0, NULL, // No incoming clusters to bind
FALSE );
NwkPollReq(false);
按以上代码逻辑,应该先发送匹配报文,再发送数据请求报文(Data Request),但是我通过USB dongle取到的设备间的传输报文与代码逻辑相反,dongle取到的详细报文见附件。
我的问题有二个:
1)请问造成报文发送先后顺序变化的原因是什么?
2)将NwkPollReq(false)替换为如下代码后,ZED并没有主动、周期地向ZC请求数据报文,请问是设置不对还是有其他什么原因呢?
dstAddr.addrMode = AddrBroadcast;
dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,
ZCL_HA_PROFILE_ID,
ZCLSAMPLESW_BINDINGLIST, bindingOutClusters,
0, NULL, // No incoming clusters to bind
FALSE );
char RxOnIdle = TRUE;
ZMacSetReq( ZMacRxOnIdle, &RxOnIdle );
NLME_SetPollRate( 1000 );
NLME_SetQueuedPollRate( 1000 );
NLME_SetResponseRate( 1000 );
有人知道原因吗?