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.

半个月了还没调通AF_DataRequest(),请TI技术支持帮解答几个问题,AF_DataRequest()收发成功的必要条件是什么?

之前发了个帖子“使用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()发出的数据包?

  • 刚才通过仿真监控,能看到end-devic每发了一个包之后coodinator的_NIB.nwkTotalTransmissions数值会增1,说明数据是已经在网络层接收到了的,之后的数据是交给APS层处理吧?因为APS层代码没有开源,不知道这之后是怎么的处理的,有什么方法能查找APS层的问题线索,比如监控哪个变量的值?
  • SampleApp_ProcessEvent( uint8 task_id, uint16 events )

    里面case AF_INCOMING_MSG_CMD:下处理接收到的数据

  • 自己顶一下,不知道是问题没描述清楚还是确实太诡异? 目前挺茫然的,有技术支持能回应一下么
  • 接收端并没有产生AF_INCOMING_MSG_CMD事件

  • 你好,
    先回答你的问题,

    1, 不是一定需要绑定的情况下才可以通信的,两个设备虽然绑定了,但是其实在底层调用发送函数的时候还是需要用到目的短地址,目的endpoint才可以发送出去的。跟你在应用层调用AF_DataRequest的时候,直接指定是一样的效果。

    2,如果是GENERICAPP_ENDPOINT=8的数据,是不会到ZDApp_event_loop里面去的,因为ZDApp_event_loop只处理endpoint=0的数据,在Zigbee里面应用程序是不能使用endpoint=0的,因为默认留给ZDO使用的。

    3,如果你确定Sniffer上面看到这个应用层数据了,那么有可能底层没有把数据往上层送。

    正常情况下,你应该在GenericApp_ProcessEvent里面的zclGenericApp_ProcessIncomingMsg函数里面,但是这个ZCL_INCOMING_MSG的消息。
  • 谢谢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的任何相关事件

    180314数据发出接收失败.psd

  • 谢谢,

    问题已解决。原因是没理解清楚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 但还是不行
    请指点下。
    谢谢

  • 解决了吗?看到你的 AF_DataRequest()中有参数ZCL_CMD_DISCOVER_ATTRS_RSP和AF_DISCV_ROUTE我的不一样,试改成和我的一样看看。另外要确认ED的zclSampleSw_DstAddr.endPoint需要和协调器的zclSampleSw_epDesc.endPoint是相同的。