1. 程式人生 > >zigbee學習筆記——四種地址繫結模式

zigbee學習筆記——四種地址繫結模式

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);