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-stack 3.0.2
参考程序为:GenericApp
芯片型号:CC2530
问题:我使用按键触发了一个通过zcl_SendReportCmd报告自定义数据的函数,抓包显示发出去了接收方也ACK了,可是抓到的无线数据包多了9个字节的数据,并且接收方好像没有进入case ZCL_CMD_REPORT里面,求解,感谢。关键以及抓包文件附上。7月30日18_26_33_test1.rar
//发送方发送函数 void GenericApp_SendTheMessage(void) { zclReportCmd_t *pReportCmd; uint8 send_data[5] = {0x04,0x11,0x22,0x33,0x99}; afAddrType_t devDstAddr; devDstAddr.addrMode=(afAddrMode_t)Addr16Bit; devDstAddr.endPoint=GENERICAPP_ENDPOINT; devDstAddr.addr.shortAddr=0x0000; pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) ); if ( pReportCmd != NULL ) { pReportCmd->numAttr = 1; pReportCmd->attrList[0].attrID = ATTRID_ON_OFF; pReportCmd->attrList[0].dataType = ZCL_DATATYPE_UINT64; pReportCmd->attrList[0].attrData = (uint8*)send_data; zcl_SendReportCmd( GENERICAPP_ENDPOINT, &devDstAddr, ZCL_CLUSTER_ID_GEN_ON_OFF, pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, bdb_getZCLFrameCounter() ); } osal_mem_free(pReportCmd); }
//接收方 void zclGenericApp_ProcessInReportCmd( zclIncomingMsg_t *pInMsg ) { zclReportCmd_t *pReportCmd; pReportCmd=(zclReportCmd_t *)pInMsg->attrCmd; if ( pReportCmd->attrList[0].attrID == ATTRID_ON_OFF ) { HalUARTWrite(0,pReportCmd->attrList[0].attrData,5 ); HalUARTWrite(0,"success",sizeof("success") ); } else { HalUARTWrite(0,"fail",sizeof("fail") ); } }
static void zclGenericApp_ProcessIncomingMsg( zclIncomingMsg_t *pInMsg ) { switch ( pInMsg->zclHdr.commandID ) { #ifdef ZCL_READ case ZCL_CMD_READ_RSP: zclGenericApp_ProcessInReadRspCmd( pInMsg ); break; #endif #ifdef ZCL_WRITE case ZCL_CMD_WRITE_RSP: zclGenericApp_ProcessInWriteRspCmd( pInMsg ); break; #endif case ZCL_CMD_CONFIG_REPORT: case ZCL_CMD_CONFIG_REPORT_RSP: case ZCL_CMD_READ_REPORT_CFG: case ZCL_CMD_READ_REPORT_CFG_RSP: //bdb_ProcessIncomingReportingMsg( pInMsg ); break; case ZCL_CMD_REPORT: zclGenericApp_ProcessInReportCmd( pInMsg ); break; case ZCL_CMD_DEFAULT_RSP: zclGenericApp_ProcessInDefaultRspCmd( pInMsg ); break; default: break; } if ( pInMsg->attrCmd ) osal_mem_free( pInMsg->attrCmd ); }
你好,不会停在 ZCL_INCOMING_MSG,然后我在ZCL_INCOMING_MSG下加了一个串口输出函数也不能输出数据。
case ZCL_INCOMING_MSG: HalUARTWrite(0,"success",sizeof("success") ); // Incoming ZCL Foundation command/response messages zclGenericApp_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt ); break;
你好,我现在是自定义了一个cluster,能发出数据,但是也和ON/OFF cluster一样接收方接受不到report,我已在接收方的inclusterlist里添加了自定义的cluster,求解。代码以及抓包文件附上。
//发送方 const cId_t zclGenericApp_OutClusterList[] = { ZCL_CLUSTER_ID_GEN_BASIC, ZCL_CLUSTER_ID_HEART, // GENERICAPP_TODO: Add application specific Output Clusters Here. // See zcl.h for Cluster ID definitions }; void GenericApp_SendTheMessage(void) { zclReportCmd_t *pReportCmd; uint8 send_data[5] = {0x04,0x11,0x22,0x33,0x99}; afAddrType_t devDstAddr; devDstAddr.addrMode=(afAddrMode_t)Addr16Bit; devDstAddr.endPoint=GENERICAPP_ENDPOINT; devDstAddr.addr.shortAddr=0x0000; pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) ); if ( pReportCmd != NULL ) { pReportCmd->numAttr = 1; pReportCmd->attrList[0].attrID = ATTRID_HEART_REPORTING; pReportCmd->attrList[0].dataType = ZCL_DATATYPE_CHAR_STR; pReportCmd->attrList[0].attrData = (uint8*)send_data; zcl_SendReportCmd( GENERICAPP_ENDPOINT, &devDstAddr, ZCL_CLUSTER_ID_HEART, pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, bdb_getZCLFrameCounter() ); } osal_mem_free(pReportCmd); }
//接收方 const cId_t zclGenericApp_InClusterList[] = { ZCL_CLUSTER_ID_GEN_BASIC, ZCL_CLUSTER_ID_GEN_IDENTIFY, ZCL_CLUSTER_ID_HEART, // GENERICAPP_TODO: Add application specific Input Clusters Here. // See zcl.h for Cluster ID definitions }; //接收方对report的处理函数没改变
我在接收方的outclusterlist加上了自定义的cluster测试过不行。
const cId_t zclGenericApp_OutClusterList[] = { ZCL_CLUSTER_ID_GEN_BASIC, ZCL_CLUSTER_ID_HEART, // GENERICAPP_TODO: Add application specific Output Clusters Here. // See zcl.h for Cluster ID definitions };
你好,调试发现会进入zcl.c的zcl_ProcessMessageMSG里的if ( !interPanMsg && zcl_ProfileCmd( inMsg.hdr.fc.type ) )的一个赋值语句 status = ZCL_STATUS_UNSUP_GENERAL_COMMAND;以及在这个函数的最末尾判断status的时候会返回return ( ZCL_PROC_NOT_HANDLED );求解这是什么情况,zcl_ProcessMessageMSG如何处理了我的数据包导致我接受不到呢?感谢
发送方通过按键触发发送函数GenericApp_SendTheMessage,cluster为自定义的cluster
#define ZCL_CLUSTER_ID_HEART 0x2000
#define ATTRID_HEART_REPORTING 0x0000
void GenericApp_SendTheMessage(void) { zclReportCmd_t *pReportCmd; uint8 send_data[5] = {0x04,0x11,0x22,0x33,0x99}; afAddrType_t devDstAddr; devDstAddr.addrMode=(afAddrMode_t)Addr16Bit; devDstAddr.endPoint=GENERICAPP_ENDPOINT; devDstAddr.addr.shortAddr=0x0000; pReportCmd = osal_mem_alloc( sizeof(zclReportCmd_t) + sizeof(zclReport_t) ); if ( pReportCmd != NULL ) { pReportCmd->numAttr = 1; pReportCmd->attrList[0].attrID = ATTRID_HEART_REPORTING; pReportCmd->attrList[0].dataType = ZCL_DATATYPE_CHAR_STR; pReportCmd->attrList[0].attrData = (uint8*)send_data; zcl_SendReportCmd( GENERICAPP_ENDPOINT, &devDstAddr, ZCL_CLUSTER_ID_HEART, pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, bdb_getZCLFrameCounter() ); } osal_mem_free(pReportCmd); }
// *** Heart Cluster Attributes *** { ZCL_CLUSTER_ID_HEART, { // Attribute record ATTRID_HEART_REPORTING, ZCL_DATATYPE_CHAR_STR, ACCESS_CONTROL_READ | ACCESS_REPORTABLE, (void *)&zclGenericApp_HeartReporting } }, { ZCL_CLUSTER_ID_HEART, { // Attribute record ATTRID_CLUSTER_REVISION, ZCL_DATATYPE_UINT16, ACCESS_CONTROL_READ, (void *)&zclGenericApp_clusterRevision_all } },
const cId_t zclGenericApp_InClusterList[] = { ZCL_CLUSTER_ID_GEN_BASIC, ZCL_CLUSTER_ID_GEN_IDENTIFY, ZCL_CLUSTER_ID_HEART, // GENERICAPP_TODO: Add application specific Input Clusters Here. // See zcl.h for Cluster ID definitions };
您好,看来你的贴子,实现了数据的发送和接受。但是我只是实现了一次的数据接受,之后就一直处于掉网掉网状态。 我的做法是在入网成功之后调用了 发送函数 ,从这之后网络就链接不上。
我好像已經建議過你协调器用
bdb_StartCommissioning( BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING);組網及開放入網
不要用NLME_PermitJoiningRequest(0xff);
终端用
bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING );去入網
你好像都沒在聽建議耶