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

终端节点设备唤醒后上报数据报错0x10

平台是cc2530 +z-stack3.0.1,使用enddevice类型设备。

在设备初次上电并找网完成之后,通过zcl_SendReportCmd函数上报数据正常。但是当低功耗设备进入睡眠之后通过外部中断唤醒,当使用相同的函数上报相同的数据时,每次都返回错误0x10.

zcl_SendReportCmd返回0x10错误是什么原因?为什么在未睡眠之前可以发送成功,睡眠唤醒之后就一直返回0x10?

Viki Shi:

0x10是指ZMemError,申请内存失败。你的网络里有几个节点?

YiKai Chen:

你使用zcl_SendReportCmd的相關程序貼上來看一下

user4078994:

回复 YiKai Chen:

uint8 DataBuff[16] = {0};

zclReportCmd_t* reportCmd = osal_mem_alloc( sizeof( zclReportCmd_t ) + sizeof( zclReport_t )); if(reportCmd != NULL) { reportCmd->numAttr = 1; reportCmd->attrList[0].attrID = ATTRID_BASIC_SMART_LOCK_DATA; reportCmd->attrList[0].dataType = ZCL_DATATYPE_CHAR_STR; DataBuff[0] = len; memcpy(DataBuff + 1,buff,len); memcpy(SmartLockData,DataBuff,len + 1); reportCmd->attrList[0].attrData = SmartLockData;

if(ZDApp_GetState() == DEV_END_DEVICE && zoneState == SS_IAS_ZONE_STATE_ENROLLED) { HalLedSet(led_red, HAL_LED_MODE_ON); osal_start_timerEx(ias_TaskID, SAMPLEAPP_TURN_OFF_RED, 100);//亮灯 ZStatus_t status = zcl_SendReportCmd(SAMPLESW_ENDPOINT, &zclSampleSw_DstAddr, ZCL_CLUSTER_ID_GEN_BASIC, reportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, TRUE, zclSampleSwSeqNum++);

}

这是使用zcl_SendReportCmd函数的相关代码,就是此处status返回0x10错误。

ZStatus_t zcl_SendReportCmd( uint8 srcEP, afAddrType_t *dstAddr,uint16 clusterID, zclReportCmd_t *reportCmd, uint8 direction, uint8 disableDefaultRsp, uint8 seqNum ){ uint16 dataLen = 0; uint8 *buf; ZStatus_t status; uint8 i;

// calculate the size of the command for ( i = 0; i < reportCmd->numAttr; i++ ) { zclReport_t *reportRec = &(reportCmd->attrList[i]);

dataLen += 2 + 1; // Attribute ID + data type

// Attribute Data dataLen += zclGetAttrDataLength( reportRec->dataType, reportRec->attrData ); }

buf = zcl_mem_alloc( dataLen ); if ( buf != NULL ) { // Load the buffer – serially uint8 *pBuf = buf;

for ( i = 0; i < reportCmd->numAttr; i++ ) { zclReport_t *reportRec = &(reportCmd->attrList[i]);

*pBuf++ = LO_UINT16( reportRec->attrID ); *pBuf++ = HI_UINT16( reportRec->attrID ); *pBuf++ = reportRec->dataType;

pBuf = zclSerializeData( reportRec->dataType, reportRec->attrData, pBuf ); }

status = zcl_SendCommand( srcEP, dstAddr, clusterID, ZCL_CMD_REPORT, FALSE, direction, disableDefaultRsp, ReportMandCode, seqNum, dataLen, buf ); zcl_mem_free( buf ); } else { status = ZMemError; }

return ( status );}

这是zcl_SendReportCmd函数,用的是协议栈自带的版本,没有做改动,其中修改ReportMandCode=0x1249.

user4078994:

回复 Viki Shi:

网络里只有此低功耗节点和协调器两个设备

赞(0)
未经允许不得转载:TI中文支持网 » 终端节点设备唤醒后上报数据报错0x10
分享到: 更多 (0)