1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System; 8 using System.Collections.Generic; 9 10 namespace Antmicro.Renode.Peripherals.Wireless.IEEE802_15_4 11 { 12 public class AddressInformation 13 { AddressInformation(AddressingMode destinationAddressingMode, AddressingMode sourceAddressingMode, bool intraPan, ArraySegment<byte> data)14 public AddressInformation(AddressingMode destinationAddressingMode, AddressingMode sourceAddressingMode, bool intraPan, ArraySegment<byte> data) 15 { 16 var internalOffset = 0; 17 if(destinationAddressingMode != AddressingMode.None) 18 { 19 DestinationPan = GetValue(data, 0); 20 DestinationAddress = new Address(new ArraySegment<byte>(data.Array, data.Offset + 2, destinationAddressingMode.GetBytesLength())); 21 internalOffset = 2 + DestinationAddress.Bytes.Count; 22 } 23 24 if(sourceAddressingMode != AddressingMode.None) 25 { 26 if(intraPan) 27 { 28 SourcePan = DestinationPan; 29 } 30 else 31 { 32 SourcePan = GetValue(data, internalOffset); 33 internalOffset += 2; 34 } 35 SourceAddress = new Address(new ArraySegment<byte>(data.Array, data.Offset + internalOffset, sourceAddressingMode.GetBytesLength())); 36 } 37 38 Bytes = data; 39 } 40 41 public uint SourcePan { get; private set; } 42 public Address SourceAddress { get; private set; } 43 public uint DestinationPan { get; private set; } 44 public Address DestinationAddress { get; private set; } 45 46 public ICollection<byte> Bytes { get; private set; } 47 GetValue(IList<byte> data, int offset)48 private static uint GetValue(IList<byte> data, int offset) 49 { 50 return (uint)(data[offset] + (data[offset + 1] << 8)); 51 } 52 } 53 } 54 55