微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > ZHA设备report问题?

ZHA设备report问题?

时间:10-02 整理:3721RD 点击:

 将自己的ZHA设备连接别人的协调器抓包数据附件所示:


① 这里的抓到simple Descriptor Respons 后为什么后面隔一段时间发Identify Query的包
② 我在线发报告


看他返回值为0, 是不是就是说发出去了,但是我这抓包工具(各个通道)没有抓到相关的report数据; 

在线调试图如附件:

这个应该是EZ-Mode的过程

       你好,VV:

                (1) 我用设备连上自己的协调器,可以正常抓到report的数据,而且用EZ_MODE不会出现后面隔一段时间发Identify Query的;

                 (2)我用的是协议栈Z-Stack Home 1.2.2a.44539的SimpleSw例程上添加report的,设备只是report数据需要知道协调器的相关的簇信息吗,还是说直接就可以report的? 如果用绑定的方式的话直接去掉ZCL_EZMODE就可以了么?

                  (3)在线调试的report,如附件:能帮我看下我这report对么! 

          你好,VV:

                   (1)  我用该设备连接自己的协调器可以抓到report数据,而且用EZ_MODE也没有出现抓到simple Descriptor Respons 后为什么后面隔一段时间发Identify Query的包;

                  (2)我想问下,设备只是report数据需要匹配协调器的簇等相关信息吗?

                 (3)我的在report函数,在线调试的 status的返回值为0 ,是不是说report成功了,但是用抓包工具就是没有抓到数据

     

static void zclSampleSw_ModeId( void )
{
  zclReportCmd_t *pReportCmd;
  uint8 statuss;     
  pReportCmd = osal_mem_alloc( 2*(sizeof(zclReportCmd_t) + sizeof(zclReport_t)) );
  if ( pReportCmd != NULL )
  {
    pReportCmd->numAttr = 2;
    pReportCmd->attrList[0].attrID   = ATTRID_BASIC_MODEL_ID;        //MODEL属性ID;
    pReportCmd->attrList[0].dataType = ZCL_DATATYPE_CHAR_STR;
    pReportCmd->attrList[0].attrData = (void *)(&zclSampleSw_ModelId);

	pReportCmd->attrList[1].attrID   = ATTRID_BASIC_MANUFACTURER_NAME;  //厂家属性ID;
    pReportCmd->attrList[1].dataType = ZCL_DATATYPE_CHAR_STR;
    pReportCmd->attrList[1].attrData = (void *)(&zclSampleSw_ManufacturerName);
	
    status = zcl_SendReportCmd( SAMPLESW_ENDPOINT, &zclSampleSw_DstAddr,			ZCL_CLUSTER_ID_GEN_BASIC,			pReportCmd, ZCL_FRAME_CLIENT_SERVER_DIR, TRUE, zclSampleSwSeqNum++);
  }

  osal_mem_free( pReportCmd );
}

        你好,VV:

                 如果不采用EZ_MODE的话,采用其他绑定的方式的话怎么将协调器直接与设备相连?

就直接用Match Descriptor Request .将需要和别人match的 cluster放上去。

  我去掉ZCL_EZMODE编译后,在按键里添加

#define ZCLSAMPLESW_BINDINGLIST 2
static cId_t bindingOutClusters[ZCLSAMPLESW_BINDINGLIST] =
{ 
ZCL_CLUSTER_ID_GEN_BASIC,
ZCL_CLUSTER_ID_GEN_ON_OFF,
};
   zAddrType_t dstAddr;
	 
      //描述符匹配请求 这也是两不同匹配方式,使用的按键不同
      // Initiate a Match Description Request (Service Discovery)

      dstAddr.addrMode = AddrBroadcast; //广播地址
      dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
	  
	  status_s = ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,			  ZCL_HA_PROFILE_ID,			  ZCLSAMPLESW_BINDINGLIST, bindingOutClusters,			  0, NULL,			  FALSE );

  发现问题
                ①.抓包发现设备没有入网(网络里就一个协调器),怎么将设备加入网络,然后直接与协调器通信?
               

你把协议栈的宏定义的HOLD_AUTO_START去掉了吗?

  在线调试发现 pData->pIdentifyQueryRsp->srcAddr->addr.shortAddr和zcl_EZModeGetNwkAddr() 获取的值第一次就是一样的,就是没有执行以下的代码,所以会一直发送Identify : Identify Query, 请问下这个是为什么,正常情况下是pData->pIdentifyQueryRsp->srcAddr->addr.shortAddr的第一次获取的值应该是0才对!

static void zclSampleSw_IdentifyQueryRspCB(  zclIdentifyQueryRsp_t *pRsp )
{
  (void)pRsp;
#ifdef ZCL_EZMODE
  {
    zclEZMode_ActionData_t data;
    data.pIdentifyQueryRsp = pRsp;

    zcl_EZModeAction ( EZMODE_ACTION_IDENTIFY_QUERY_RSP, &data );
  }
#endif
}

void zcl_EZModeAction(zclEzMode_Action_t action, zclEZMode_ActionData_t *pData)
{
  ZDO_MatchDescRsp_t *pMatchDescRsp;
  zAddrType_t dstAddr;
  
 ......
    // received identify query response
    case EZMODE_ACTION_IDENTIFY_QUERY_RSP:

      if ( pData->pIdentifyQueryRsp->srcAddr->addr.shortAddr
          != zcl_EZModeGetNwkAddr() )
      {
        // remember the node we found via identify query
     zclEZModeQueryRspNwkAddr = pData->pIdentifyQueryRsp->srcAddr->addr.shortAddr;
        zclEZModeQueryRspEP = pData->pIdentifyQueryRsp->srcAddr->endPoint;

        // initiate match descriptor request on the remote node
        dstAddr.addrMode = Addr16Bit;
        dstAddr.addr.shortAddr = zclEZModeQueryRspNwkAddr;
        zcl_EZModeSendMatchDescReq( *zclEZModeRegisterData.pTaskID,
                          &dstAddr,
                          zclEZModeQueryRspNwkAddr,
                          zclEZModeInvokeData.numActiveOutClusters,
                          zclEZModeInvokeData.pActiveOutClusterIDs,
                          zclEZModeInvokeData.numActiveInClusters,
                          zclEZModeInvokeData.pActiveInClusterIDs );
        zcl_SetEZModeState( EZMODE_STATE_WAITING_MATCHDESCRSP );
      }
    break;

    ......

}

  我把协议栈的宏定义的HOLD_AUTO_START和ZCL_EZMODE去掉后,现在可以入网, 但是还是上报不了数据!这里上报数据还需要先绑定相关的簇么?

         将发送的地址模式改成如下就可以上报数据了(之前一直用(afAddrMode_t)AddrNotPresent)

         zclSampleHuman_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top