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.
之前发了个帖子“使用Z-stact 3.0.1 的GenericApp做透传应用,数据在空中发出了但接收节点都没有接收到数据”,没有得到明确的答案,自己努力了一周还是没有通。目前状态 1、组网是成功的:end-devic的_NIB.nwkState状态为NWK_ENDDEVICE,coodinator的_NIB.nwkState状态为NWK_ROUTER。2、双方使用的端点号是相同的,都为GENERICAPP_ENDPOINT (8)。 双方的组网成功后end-devic和coodinator之间用AF_DataRequest()分别向对方短地址发数据,都能在sniffer上抓到有数据包发出,但对方都没有任何事件产生(除了没有开源的mac、nwk等,我在所有的xxx_event_loop()中都加入了打印出event值的语句)。
这里问几个问题希望大神给解答一下:
1,目前是没有进行绑定操作直接通过短地址(给coodinator发用0,给end-devic发用分配到的)调用AF_DataRequest()发数据,是否必须进行绑定操作后才能收发数据?
2,在定义端点时使用zcl_genericapp_data.c中定义好的zclGenericApp_SimpleDesc,其中的zclGenericApp_InClusterList[]和zclGenericApp_OutClusterList[]内容是否必须要修改? 我的理解是关于Cluster的处理都是进入ZDApp_event_loop()之后进行的,而我在发送端调用AF_DataRequest()之后接收端并没有进入ZDApp_event_loop(),所以收发双方关于Cluster的匹配不是影响成功接收的因素,对不对?
3,在已组网成功情况下,除了正确的接收方短地址、正确的地址模式、端点号一致,还有哪些因素会影响接收端成功接收AF_DataRequest()发出的数据包?
SampleApp_ProcessEvent( uint8 task_id, uint16 events )
里面case AF_INCOMING_MSG_CMD:下处理接收到的数据
谢谢VV,
接收端没有GenericApp的任何事件产生,我想应该是底层没有把数据往上层送,不知道什么原因。
sniffer抓包的数据能看出原因吗?附件是一个有3个节点的网络(en/co/ro)中en(0x686A)给ro(0x0D88)发送一个数据包的过程,能看到en先给co发了这个数据包(第7个),然后co转发给ro(第9个),之后ro还通过co发出了给en的一个响应(第11个),但是没有看到ro上有产生GenericApp或者zcl或者ZDO的任何相关事件
谢谢,
问题已解决。原因是没理解清楚af_datarequest的接口使用,以为接收节点的端点指定是在srcEP参数中的endpoint,实际应该是dstADDr中的endpoint,我没有设置这个数据。srcEP里面的ep是发送端点的端点号,可以和dstADDr里的ep不同。
找到问题的过程是偶然发现有时ZDApp_event_loop会收到AF_INCOMING_MSG_CMD,再回头看发送操作的地址设置,发现srcEP.endpoint没有被设置,加上之后就好了。 一个小问题花了这么长事件,泪奔~~
你好!
我也遇到你一样的问题了。
我的EP这是样设置的,COORD和ROUTER都 一样
zclSampleSw_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //AddrNotPresent;
zclSampleSw_DstAddr.endPoint = 0;
zclSampleSw_DstAddr.addr.shortAddr = 0x0000;
zclSampleSw_epDesc.endPoint = 0;
zclSampleSw_epDesc.task_id = &zclSampleSw_TaskID;
zclSampleSw_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
afRegister( &zclSampleSw_epDesc );
发送命令
if ( AF_DataRequest( &zclSampleSw_DstAddr, &zclSampleSw_epDesc,
ZCL_CMD_DISCOVER_ATTRS_RSP,
10,
"dakte",
&zclSampleSw_TankID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
其中zclSampleSw_TankID =0;
endPoint也设置过 #define SAMPLESW_ENDPOINT 8 但还是不行
请指点下。
谢谢