日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zigbee zcl规范及其协议栈实现3 读取服务器端属性值

發(fā)布時間:2024/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zigbee zcl规范及其协议栈实现3 读取服务器端属性值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
zigbee zcl規(guī)范及其協(xié)議棧實現(xiàn)2? ?中有介紹?對通用命令的處理,按照那個思路和信息流程添加讀取服務器端屬性值的功能
客戶端samplesw想要知道與自己的12號端點SAMPLESW_ENDPOINT?綁定的那個節(jié)點samplelight(的13號端點)的硬件版本和廠商名字,這兩個屬性zcl都有規(guī)定,
屬于zcl general 的ZCL_CLUSTER_ID_GEN_BASIC
A
1.首先服務器samplelight端需要配置這個屬性,代碼中已經(jīng)寫過,位于
函數(shù)zclSampleLight_Init里注冊了屬性表,
zcl_registerAttrList( SAMPLELIGHT_ENDPOINT, SAMPLELIGHT_MAX_ATTRIBUTES, zclSampleLight_Attrs );
屬性表zclSampleLight_Attrs 配置了屬性ATTRID_BASIC_ZCL_VERSION和ATTRID_BASIC_MANUFACTURER_NAME,屬于ZCL_CLUSTER_ID_GEN_BASIC
? {
? ? ZCL_CLUSTER_ID_GEN_BASIC,
? ? { // Attribute record
? ? ? ATTRID_BASIC_ZCL_VERSION,
? ? ? ZCL_DATATYPE_UINT8,
? ? ? ACCESS_CONTROL_READ,
? ? ? (void *)&zclSampleLight_ZCLVersion
? ? }
? },
? {
? ? ZCL_CLUSTER_ID_GEN_BASIC,
? ? { // Attribute record
? ? ? ATTRID_BASIC_MANUFACTURER_NAME,
? ? ? ZCL_DATATYPE_CHAR_STR,
? ? ? ACCESS_CONTROL_READ,
? ? ? (void *)zclSampleLight_ManufacturerName
? ? }
? },

2. InClusters里必須添加對clusterid?ZCL_CLUSTER_ID_GEN_BASIC的支持
#define ZCLSAMPLELIGHT_BINDINGLIST ? ? ? 2
static cId_t bindingInClusters[ZCLSAMPLELIGHT_BINDINGLIST] =
{
? ZCL_CLUSTER_ID_GEN_ON_OFF,
? ZCL_CLUSTER_ID_GEN_BASIC
};

3 .在申請綁定搞定的時候,使用bindingInClusters作為參數(shù),代碼中已經(jīng)實現(xiàn)

? ? ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
? ? ? ? ? ? ? ? ? ? ? ? ? ?SAMPLELIGHT_ENDPOINT,
? ? ? ? ? ? ? ? ? ? ? ? ? ?ZCL_HA_PROFILE_ID,
? ? ? ? ? ? ? ? ? ? ? ? ? ?ZCLSAMPLELIGHT_BINDINGLIST, bindingInClusters,
? ? ? ? ? ? ? ? ? ? ? ? ? ?0, NULL, ? // No Outgoing clusters to bind
? ? ? ? ? ? ? ? ? ? ? ? ? ?TRUE );


B
1.客戶端samplesw使用與服務器對應的cluster列表
#define ZCLSAMPLESW_BINDINGLIST ? ? ?2
static cId_t bindingOutClusters[ZCLSAMPLESW_BINDINGLIST] =
{
? ZCL_CLUSTER_ID_GEN_ON_OFF,
? ZCL_CLUSTER_ID_GEN_BASIC
};
2.在申請綁定的時候使用bindingOutClusters作為參數(shù),代碼中已經(jīng)實現(xiàn)
? ? dstAddr.addrMode = afAddr16Bit;
? ? dstAddr.addr.shortAddr = 0; ? // Coordinator makes the match
? ? ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
? ? ? ? ? ? ? ? ? ? ? ? ? ?SAMPLESW_ENDPOINT,
? ? ? ? ? ? ? ? ? ? ? ? ? ?ZCL_HA_PROFILE_ID,
? ? ? ? ? ? ? ? ? ? ? ? ? ?0, NULL, ? // No incoming clusters to bind
? ? ? ? ? ? ? ? ? ? ? ? ? ?ZCLSAMPLESW_BINDINGLIST,bindingOutClusters,
? ? ? ? ? ? ? ? ? ? ? ? ? ?TRUE );
3.在某個地方執(zhí)行以下代碼,即申請讀取zclSampleSw_DstAddr的下面兩個屬性 (zcl_SendRead()中會自動指定ZCL_FRAME_TYPE_PROFILE_CMD)
? ?zclReadCmd_t readcmd;
? ?ZStatus_t st;
? ?readcmd.numAttr=2;
? ?readcmd.attrID[0]=ATTRID_BASIC_ZCL_VERSION;
? ?readcmd.attrID[1]=ATTRID_BASIC_MANUFACTURER_NAME;
? ?st= zcl_SendRead( SAMPLESW_ENDPOINT, &zclSampleSw_DstAddr,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*ZCL_CLUSTER_ID_GEN_ON_OFF*/ZCL_CLUSTER_ID_GEN_BASIC, ?&readcmd,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ZCL_FRAME_CLIENT_SERVER_DIR, ?false, 0 );

C
服務器會收到信息,觸發(fā)zclCmdTable[ZCL_CMD_READ]函數(shù)即zclProcessInReadCmd函數(shù),此函數(shù)自動讀取相關屬性返回給客戶端,通過函數(shù)zcl_SendReadRsp(),命令是ZCL_CMD_READ_RSP

D
客戶端,samplesw收到信息后觸發(fā)zclCmdTable[ZCL_CMD_READ_RSP]函數(shù)即zclSendMsg函數(shù),此函數(shù)會將這個消息以ZCL_INCOMING_MSG事件發(fā)給上層任務去處理,前提是上層任務使用zcl_registerForMsg注冊過,而在samplesw在init中已經(jīng)注冊過。

在客戶端,samplesw任務中處理之
? ? ? ? case ZCL_INCOMING_MSG:
? ? ? ? ? // Incoming ZCL Foundation command/response messages
? ? ? ? ? zclSampleSw_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );->zclSampleSw_ProcessInReadRspCmd
? ? ? ? ? break;
//屬性返回處理 static uint8 zclSampleSw_ProcessInReadRspCmd( zclIncomingMsg_t *pInMsg ) {zclReadRspCmd_t *readRspCmd;uint8 i;readRspCmd = (zclReadRspCmd_t *)pInMsg->attrCmd;for (i = 0; i < readRspCmd->numAttr; i++){uint8 str[6];// Notify the originator of the results of the original read attributes// attempt and, for each successfull request, the value of the requested// attribute/*if(i==0){uint8 ii=*readRspCmd->attrList[i].data;_itoa(ii,str,10);HalLcdWriteString(str,2);}*/if(i==1){uint8* pp=readRspCmd->attrList[i].data;HalLcdWriteString(pp,2);}}return TRUE; }

轉(zhuǎn)載于:https://www.cnblogs.com/-song/archive/2013/03/17/3331816.html

總結(jié)

以上是生活随笔為你收集整理的zigbee zcl规范及其协议栈实现3 读取服务器端属性值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。