/// <summary> /// Get the characterisitcs associated to a node /// </summary> /// <param name="shortAddress">the address of the node</param> /// <returns>the characteristic if present, null otherwise</returns> private TransmissionCharacteristic GetNodeCharacteristic(UInt16 shortAddress) { lock (_lock) { int sqnArrayCount = _sqnArray.Count; for (int i = 0; i < sqnArrayCount; i++) { TransmissionCharacteristic holder = (TransmissionCharacteristic)_sqnArray[i]; if (holder.ShortAddress == shortAddress) { return(holder); } } return(null); } }
/// <summary> /// Set transmission characteristic (including sequence number). /// </summary> public void SetTransmissionCharacteristic(UInt16 shortAddress, byte sqn, uint timeoutForResending, uint maxFragmentsSentBeforeAck) { lock (_lock) { TransmissionCharacteristic holder = GetNodeCharacteristic(shortAddress); if (holder != null) { holder.MessageSeqNumber = sqn; holder.TimeoutForResending = timeoutForResending; holder.MaxFragmentsSentBeforeAck = maxFragmentsSentBeforeAck; } else { holder = new TransmissionCharacteristic(shortAddress, sqn, timeoutForResending, maxFragmentsSentBeforeAck); _sqnArray.Add(holder); } } }
/// <summary> /// Set transmission characteristic. /// <returns>true if update was successful and false otherwise</returns> /// </summary> public bool UpdateTransmissionCharacteristic(UInt16 shortAddress, uint timeoutForResending, uint maxFragmentsSentBeforeAck) { lock (_lock) { TransmissionCharacteristic holder = GetNodeCharacteristic(shortAddress); if (holder != null) { #if PRINTALL Trace.Print("Updating trans. char for node " + shortAddress + ": timeoutForResend = " + timeoutForResending + ", maxFrag = " + maxFragmentsSentBeforeAck); #endif holder.TimeoutForResending = timeoutForResending; holder.MaxFragmentsSentBeforeAck = maxFragmentsSentBeforeAck; return(true); } return(false); } }
/// <summary> /// Get the seq. number associated to a node. /// </summary> public bool GetTransmissionCharacteristic(UInt16 shortAddress, out byte messageSeqNumber, out uint timeoutForResending, out uint maxFragmentsSentBeforeAck) { lock (_lock) { TransmissionCharacteristic holder = GetNodeCharacteristic(shortAddress); if (holder != null) { messageSeqNumber = holder.MessageSeqNumber; timeoutForResending = holder.TimeoutForResending; maxFragmentsSentBeforeAck = holder.MaxFragmentsSentBeforeAck; return(true); } messageSeqNumber = 0; timeoutForResending = 0; maxFragmentsSentBeforeAck = 0; return(false); } }