没有找到Structure数据是怎样定义的,我自己定义成如下结构
typedef struct
{
uint8 u8DataType0;//= ZCL_DATATYPE_BOOLEAN;
bool bData0;
uint8 u8DataType1;// = ZCL_DATATYPE_UINT16;
uint16 u16Data1;
uint8 u8DataType2;// = ZCL_DATATYPE_UINT16;
uint16 u16Data2;
uint8 u8DataType3;// = ZCL_DATATYPE_UINT40;
uint8 uDataBuff[5];
uint8 u8DataType4;// = ZCL_DATATYPE_UINT16;
uint16 u16Data4;
uint8 u8DataType5;// = ZCL_DATATYPE_UINT8;
uint8 u8Data5;
}Identification_t;
然后用zcl_SendReportCmd()函数report到Coor,但抓包发现数据并没有发出去,如下图
YiKai Chen:
你應該是要用zclReportCmd_t這個structure來填入多個attrList來report多個attribute
one Man:
回复 YiKai Chen:
我是这样做的啊,其他attribute可以report成功,但是Report一个数据类型为Structure的attribute就不成功。
YiKai Chen:
回复 one Man:
Zigbee spec沒有定義這樣的数据类型吧,你得要把你想要這樣的Structure数据类型分拆成數個attribute來report
one Man:
回复 YiKai Chen:
Zigbee spec v6 有定义,Z-Stack没有做完整
YiKai Chen:
回复 one Man:
Zigbee spec v6 有定义?方便指出你說的是那一個章節嗎?就算Z-Stack没有做完整應該也可以透過我說的方式達成
one Man:
回复 YiKai Chen:
07-5123-06-zigbee-cluster-library-specification的2.6.2,在87/869页有说到
YiKai Chen:
回复 one Man:
所以你的attrList[].dataType要設定成 ZCL_DATATYPE_STRUCT,attrList[].attrData 要指到Identification_t的結構體,長度要算對應該就要送出去了
Alvin Chen:
回复 one Man:
Hi YK and shuming mo // Attribute Report
typedef struct { uint16 attrID; // atrribute ID uint8 dataType; // attribute data type uint8 *attrData; // this structure is allocated, so the data is HERE // – the size depends on the data type of attrID } zclReport_t;
// Report Attributes Command formattypedef struct{ uint8 numAttr; // number of reports in the list zclReport_t attrList[]; // attribute report list} zclReportCmd_t;
我的建议是分为attrList[]; // attribute report list这个attrlist上进行分别report你结构体上的值。
one Man:
回复 YiKai Chen:
是啊,但是Z-Stack的zclGetAttrDataLength()和zclGetDataTypeLength()这两个函数都没有对ZCL_DATATYPE_STRUCT数据类型进行处理,要自己写。