Esempio n. 1
0
        /// <summary>
        /// Request an update of the binding table for this node.
        ///
        /// This method returns a future to a bool. Upon success the caller should call {@link #getBindingTable()}
        ///
        /// @return {@link Future} returning a {@link Boolean}
        /// </summary>
        public async Task <bool> UpdateBindingTable()
        {
            byte index     = 0;
            int  tableSize = 0;
            List <BindingTable> bindingTable = new List <BindingTable>();

            do
            {
                ManagementBindRequest bindingRequest = new ManagementBindRequest();
                bindingRequest.DestinationAddress = new ZigBeeEndpointAddress(NetworkAddress);
                bindingRequest.StartIndex         = index;

                CommandResult result = await _network.SendTransaction(bindingRequest, new ManagementBindRequest());

                if (result.IsError())
                {
                    return(false);
                }

                ManagementBindResponse response = (ManagementBindResponse)result.GetResponse();
                if (response.StartIndex == index)
                {
                    tableSize = response.BindingTableEntries;
                    index    += (byte)response.BindingTableList.Count;
                    bindingTable.AddRange(response.BindingTableList);
                }
            } while (index < tableSize);

            SetBindingTable(bindingTable);
            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// Request an update of the binding table for this node.
        ///
        /// This method returns a future to a bool. Upon success the caller should call {@link #getBindingTable()}
        ///
        /// <returns><see cref="Future"> returning a <see cref="Boolean"></returns>
        /// </summary>
        public async Task <ZigBeeStatus> UpdateBindingTable()
        {
            byte index     = 0;
            int  tableSize = 0;
            HashSet <BindingTable> bindingTable = new HashSet <BindingTable>();

            do
            {
                ManagementBindRequest bindingRequest = new ManagementBindRequest();
                bindingRequest.DestinationAddress = new ZigBeeEndpointAddress(NetworkAddress);
                bindingRequest.StartIndex         = index;

                CommandResult result = await _network.SendTransaction(bindingRequest, new ManagementBindRequest());

                if (result.IsTimeout())
                {
                    return(ZigBeeStatus.FAILURE);
                }

                ManagementBindResponse response = (ManagementBindResponse)result.GetResponse();
                if (response.StartIndex == index)
                {
                    tableSize = response.BindingTableEntries;
                    index    += (byte)response.BindingTableList.Count;
                    bindingTable.UnionWith(response.BindingTableList);
                }
            } while (index < tableSize);

            SetBindingTable(bindingTable);
            return(ZigBeeStatus.SUCCESS);
        }