zigbee学习笔记——四种地址绑定模式

来源:互联网 发布:离婚率数据 编辑:程序博客网 时间:2024/06/02 17:41
 
 
ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,
                        SERIALAPP_PROFID,
                        SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,
                        SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,
                        FALSE );
也叫匹配描述符绑定,一般相当于广播绑定,网络中可能有一个或多个与本节点端口匹配的设备,本节点只接受其中一个节点的设备信息,既一对一绑定。处理函数是:
 
 case Match_Desc_rsp:
      {
        ZDO_ActiveEndpointRsp_t *pRsp = ZDO_ParseEPListRsp( inMsg );
        if ( pRsp )
        {
          if ( pRsp->status == ZSuccess && pRsp->cnt )
          {
            SerialApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
            SerialApp_DstAddr.addr.shortAddr = pRsp->nwkAddr;
            // Take the first endpoint, Can be changed to search through endpoints
            SerialApp_DstAddr.endPoint = pRsp->epList[0];
            
            // Light LED
            HalLedSet( HAL_LED_4, HAL_LED_MODE_ON );
          }
          osal_mem_free( pRsp );
        }
      }
  
 
也叫终端绑定,当按键按下时,调用函数
 ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(), 
                            SerialApp_epDesc.endPoint,
                            SERIALAPP_PROFID,
                            SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,
                            SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList,
                            FALSE );
 
终端绑定实际上是两个终端设备通过与协调器绑定,实现两个终端设备之间互相通信。处理函数
 
  case End_Device_Bind_rsp:
 
 
广播模式一般采用匹配符绑定方式,和直接地址模式相似,只是在发送函数中加入下列语句
  SerialApp_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;//自己添加
   SerialApp_DstAddr.addr.shortAddr = 0xffff;//自己修改,用于协调器广播
然后会调用 AF_DataRequest函数,这样既可以将协调器数据发给网络中的所有设备。
 
 
 aps_Group_t SerialApp_Group;
  SerialApp_Group.ID = 0x0001;
  osal_memcpy(SerialApp_Group.name,"Broad Group",11);
  
  static afAddrType_t SerialApp_GrpDstAddr;
  SerialApp_GrpDstAddr.addrMode = (afAddrMode_t)afAddrGroup;
  SerialApp_GrpDstAddr.endPoint = SERIALAPP_ENDPOINT;
  SerialApp_GrpDstAddr.addr.shortAddr = SerialApp_Group.ID;
 
aps_AddGroup(SERIALAPP_ENDPOINT,&SerialApp_Group);
原创粉丝点击