关于zstack 的 zcl_SendRead
TI的各位大家好,在使用ZCL的时候产生了一个问题,希望能解答。
程序如下,我个人认为这样的程序是没有问题的,但是用sniffer抓不到这个包,其他发包收包都正常。
zclReadCmd_t BasicAttrsList;
BasicAttrsList.numAttr = 2;
BasicAttrsList.attrID[0] = ATTRID_BASIC_ZCL_VERSION;
BasicAttrsList.attrID[1] = ATTRID_BASIC_APPL_VERSION;
zcl_SendRead( HA_COOR_ENDPOINT, &HA_Coordinator_DstAddr, ZCL_CLUSTER_ID_GEN_BASIC, &BasicAttrsList,
ZCL_FRAME_CLIENT_SERVER_DIR, 0, 0 );
如果把 numAttr 设为0,那么是有包发出的。一旦带上数据,就没有包了。
请各位帮忙看看是我的程序有问题,还是stack本身有bug,谢谢了!
你的endpoint有注册吗?
注册了,
其他指令,比如
zcl_SendDiscoverCmd( HA_COOR_ENDPOINT, &HA_Coordinator_DstAddr, ZCL_CLUSTER_ID_GEN_BASIC, &DiscoverAttrs, ZCL_FRAME_CLIENT_SERVER_DIR, 0, 0 );
是正常发送的
问题我自己解决了, 是ztack的结构体定义没有完成,需要用户自己定义attribute数
typedef struct
{
uint8 numAttr;
uint16 attrID[];
} zclReadCmd_t;
给attiID定义一个Maximum Attributes Number 就好了,如下
#define ZCLRead_Max_Attrs_Num 20
typedef struct
{
uint8 numAttr;
uint16 attrID[ZCLRead_Max_Attrs_Num];
} zclReadCmd_t;
已测试,发包无误。
看来我C语言功力不够啊!