TI中文支持网
TI专业的中文技术问题搜集分享网站

ZHA设备report问题?

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

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

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

在线调试图如附件:

VV:

这个应该是EZ-Mode的过程

qiang lin2:

回复 VV:

       你好,VV:

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

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

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

qiang lin2:

回复 VV:

          你好,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 );
}

qiang lin2:

回复 VV:

        你好,VV:

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

VV:

回复 qiang lin2:

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

qiang lin2:

回复 VV:

  我去掉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 );

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

VV:

回复 qiang lin2:

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

qiang lin2:

回复 VV:

  在线调试发现 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 responsecase 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 nodedstAddr.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;......}

qiang lin2:

回复 VV:

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

赞(0)
未经允许不得转载:TI中文支持网 » ZHA设备report问题?
分享到: 更多 (0)