设为首页 | 加入收藏
首页 ZigBee联盟常识 ZigBee环球资讯 与蜂共舞 ZigBee资料下载 联系我们

    CC2530套件正式上线,详情查看蜂舞产品……

与蜂共舞
友情链接
 
TI德州仪器
Ember
飞思卡尔
Jennic
Telegesis
西安华凡科技有限公司
与蜂共舞首页 - 与蜂共舞
输入输出命令的邦定过程及数据发送
来源:郑州新双恒信息技术有限公司  加入时间:2009-3-24 点击:6568 [双击滚动窗口]

一、EP的注册
注册endPoint时的结构(要想绑定或直接点对点传送数据必须先注册endPoint)
typedef struct
{
  byte endPoint;  //EP号
  byte *task_id;  // 指向任务编号的指针.
  SimpleDescriptionFormat_t *simpleDesc;  //设备的简单描述
  afNetworkLatencyReq_t latencyReq;      //枚举具体含义和作用未知
} endPointDesc_t;
//设备的简单描述结构
typedef struct
{
  byte    EndPoint;             //EPID
  uint16  AppProfId;            // Profile ID
  uint16  AppDeviceId;          // Device ID
  byte    AppDevVer:4;         // Device Version
  byte    Reserved:4; //AF_V1_SUPPORT uses for AppFlags:4. Reserved
  byte    AppNumInClusters;    //输入命令个数
  cId_t   *pAppInClusterList;    //输入命令列表
  byte    AppNumOutClusters;   //输出命令个数
  cId_t   *pAppOutClusterList;   //输出命令列表
} SimpleDescriptionFormat_t;
注:
    猜想,如果想要不同设备的EP有邦定关系,那么Profile ID必须相等,Device ID、Device Version可以根据不同类型设备进行赋值,发出数据的设备应对输出命令个数及列表赋值,接收命令的设备应对输入命令个数及列表赋值,并且命令号要相同.
疑问:1、如果想对输入输出命令进行邦定那么EP是否必须相同,Profile ID是否必须相同。

二、关于输入输出命令的邦定过程(以simple为例)
1、调用zb_BindDevice(TRUE, TOGGLE_LIGHT_CMD_ID, NULL) ;
2、调用ZDO_AnyClusterMatches(…)检测是输入还是输出命令
3、调用ZDP_MatchDescReq(…)来填充ZDP_TmpBuf数据区
4、调用fillAndSend(…)函数向ZDApp_epDesc(ZDO管理实体)发送clusterID=Match_Desc_req
数据为ZDP_TmpBuf的一帧数据。
5、目的设备收到该帧数据后生成ZDAppTaskID任务的AF_INCOMING_MSG_CMD事件。
6、调用ZDP_IncomingData(…)函数,在函数中调用ZDO_ProcessMatchDescReq(…)函数。
7、ZDO_ProcessMatchDescReq(…)函数产生ZDO_MATCH_DESC_RSP_SENT事件并且调用ZDP_MatchDescRsp(…)函数。
8、ZDP_MatchDescRsp函数实际上是执行ZDP_EPRsp(…)函数。
9、ZDP_EPRsp(…)函数向ZDApp_epDesc(提出邦定请求的设备)发送clusterID=Match_Desc_rsp数据为ZDP_TmpBuf的一帧数据。
10、请求设备收到该帧数据后生成ZDAppTaskID任务的AF_INCOMING_MSG_CMD事件。
11、调用ZDP_IncomingData(…)函数,在函数中调用ZDO_SendMsgCBs(…)函数。
12、ZDO_SendMsgCBs函数会生成sapi_TaskID的ZDO_CB_MSG事件,进而执行SAPI_ProcessZDOMsgs(…)函数中的Match_Desc_rsp选项。
注:邦定时发送的一帧数据中clusterID好象是栈本身定义的为Match_Desc_req。Profile ID为ZDO_PROFILE_ID(因为ZDApp_epDesc的SimpleDescriptionFormat_t为NULL)
疑问:
    1、clusterID是否可以自己定义,如何定义,如果是栈本身定义那标准从那得到。
    答:在2006协议的2.4.3.1中对特殊的clusterID有个列表有定义

三、关于输入命令邦定后数据的发送
1、 发送参数中afAddrType_t *dstAddr如下:
                                       dstAddr.addrMode = afAddrNotPresent;
                                       dstAddr.endPoint = 注册的EP号;
                                       dstAddr.addr.shortAddr = 可以忽略;
endPointDesc_t *srcEP 为注册的EP描述
uint16 cID           为注册的命令号如TOGGLE_LIGHT_CMD_ID
    其它参数正常

作者:幻  
日期:2009-3-23


打印此页】【关闭窗口】    
 
Copyright © 2009 郑州新双恒信息技术有限公司 版权所有
E-mail:wfj_123@126.com QQ群:83028739
豫ICP备:09005065号