欢迎来到天天文库
浏览记录
ID:37936354
大小:47.00 KB
页数:5页
时间:2019-06-03
《ZigBee学习之40——Home Automation Profile3》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、ZigBee学习之40——Home Automation Profile3staticvoidzclProcessMessageMSG(afIncomingMSGPacket_t*pkt){…………//首先检查命令域的数据长度,如果没有数据则直接退出if(pkt->cmd.DataLength==0)return;//Error,ignorethemessage…………//然后检查消息的目的终端是否存在于节点上,若不是发送给此节点的则退出epDesc=afFindEndPointDesc(pkt->endPoint);if(epDesc==NULL)return;//
2、Error,ignorethemessage//将簇ID转换到逻辑簇ID,如果为0xFFFF则退出logicalClusterID=zclConvertClusterID(pkt->clusterId,epDesc->simpleDesc->AppProfId,TRUE);if(logicalClusterID==ZCL_INVALID_CLUSTER_ID)return;//Error,ignorethemessage//检查设备是否可操作,即检查DEVICE_ENABLED属性if(zcl_DeviceOperational(pkt->endPoint,pkt->
3、clusterId,inMsg.hdr.fc.type,inMsg.hdr.commandID)==FALSE){return;//Error,ignorethemessage}//一下是处理和解析收到的命令if(zcl_ProfileCmd(inMsg.hdr.fc.type)){//收到的是针对剖面的命令比如读写属性,报告属性,身份认证等if(inMsg.hdr.fc.manuSpecific){//Wedon'tsupportanymanufacturerspecificcommand//不支持生产商的特定命令status=ZCL_STATUS_UNSUP_MA
4、NU_GENERAL_COMMAND;}elseif((inMsg.hdr.commandID<=ZCL_CMD_MAX)&&(zclCmdTable[inMsg.hdr.commandID].pfnParseInProfile!=NULL)){//接收到的命令ID小于最大命令ID,并且命令表中此命令定义了解析函数,则解析并处理此命令zclParseCmd_tparseCmd;parseCmd.endpoint=pkt->endPoint;parseCmd.dataLen=inMsg.pDataLen;parseCmd.pData=inMsg.pData;//Pars
5、ethecommand,rememberthatthereturnvalueisapointertoallocatedmemoryinMsg.attrCmd=zclParseCmd(inMsg.hdr.commandID,&parseCmd);if((inMsg.attrCmd!=NULL)&&(zclCmdTable[inMsg.hdr.commandID].pfnProcessInProfile!=NULL)){//Processthecommandif(zclProcessCmd(inMsg.hdr.commandID,&inMsg)==FALSE){//处理此
6、命令不成功//Couldn'tfindattributeinthetable.}………………}else{//处理此簇ID的特殊命令//Nope,mustbespecifictotheclusterID//为实际的簇ID查找合适的插头//FindtheappropriatepluginpInPlugin=zclFindPlugin(pkt->clusterId,epDesc->simpleDesc->AppProfId);//在这个查找插头的函数中关联了一个静态变量plugins,这个变量中指明了插头的范围以及处理输入消息的函数,其数据结构定义为:【zcl.c】type
7、defstructzclLibPlugin{structzclLibPlugin*next;uint16startLogCluster;//startinglogicalclusterIDuint16endLogCluster;//endinglogicalclusterIDzclInHdlr_tpfnIncomingHdlr;//functiontohandleincomingmessage}zclLibPlugin_t;//在zclSampleLight_Init()中我们通过调用zclGeneral_RegisterCmdCallbacks()
此文档下载收益归作者所有