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