Example #1
0
        public static Span <byte> GetDataPacket(byte[] CID, string sourceName, UInt16 universe, byte[] properties)
        {
            var rootLayer = new RootLayer
            {
                CID    = CID,
                Vector = RootLayerVector.VECTOR_ROOT_E131_DATA
            };

            var framingLayer = new DataPacketFramingLayer
            {
                SourceName = sourceName,
                Universe   = universe
            };

            var dmpLayer = new DMPLayer
            {
                PropertyValues = properties
            };

            int totalLength = dmpLayer.Length + DataPacketFramingLayer.Length + RootLayer.Length;

            using var owner = MemoryPool <byte> .Shared.Rent(totalLength);

            var bytes = owner.Memory.Span.Slice(0, totalLength);

            rootLayer.Write(bytes, (UInt16)(DataPacketFramingLayer.Length + dmpLayer.Length));
            framingLayer.Write(bytes.Slice(RootLayer.Length), dmpLayer.Length);
            dmpLayer.Write(bytes.Slice(RootLayer.Length + DataPacketFramingLayer.Length));

            return(bytes);
        }
Example #2
0
        public void Given_TheAddressIncrementIsIncorrect_When_ParseIsCalled_Then_NullIsReturned()
        {
            List <byte> bytes                  = new List <byte>();
            UInt16      propertyCount          = 5;
            byte        length                 = (byte)(DMPLayer.MinLength + propertyCount);
            UInt16      expectedFlagsAndLength = (UInt16)(0x7 << 12 | length);

            bytes.AddRange(new byte[] { 0x7 << 4, (length) });             // flags and length
            DMPLayerVector expectedVector = DMPLayerVector.VECTOR_DMP_SET_PROPERTY;

            bytes.Add((byte)expectedVector);             // Vector
            byte expectedAddressAndDataType = DMPLayer.AddressTypeAndDataType;

            bytes.Add(expectedAddressAndDataType);

            bytes.AddRange(new byte[] { 0, 0 });                   // first property address
            bytes.AddRange(new byte[] { 0, 42 });                  // address increment
            bytes.AddRange(new byte[] { 0, (byte)propertyCount }); // property count

            var expectedProperties = Enumerable.Range(0, propertyCount).Select(x => (byte)x);

            bytes.Add(0);             // start code
            bytes.AddRange(expectedProperties);

            var dmpLayer = DMPLayer.Parse(bytes.ToArray());

            Assert.Null(dmpLayer);
        }
Example #3
0
 public DataPacket()
 {
     RootLayer = new RootLayer
     {
         Vector = RootLayerVector.VECTOR_ROOT_E131_DATA
     };
     FramingLayer = new DataPacketFramingLayer();
     DMPLayer     = new DMPLayer();
 }
Example #4
0
        public void Given_TheDataIsCorrect_When_ParseIsCalled_Then_TheDataIsParsedAsExpected()
        {
            UInt16 propertyCount      = 5;
            var    expectedProperties = Enumerable.Range(0, propertyCount).Select(x => (byte)x);
            var    bytes = GetDMPLayer(expectedProperties);

            var dmpLayer = DMPLayer.Parse(bytes.ToArray());

            Assert.Equal(DMPLayerVector.VECTOR_DMP_SET_PROPERTY, dmpLayer.Vector);
            Assert.Equal(propertyCount, dmpLayer.PropertyValues.Count());
            Assert.Equal(expectedProperties.ToArray(), dmpLayer.PropertyValues);
        }
Example #5
0
        public void When_WriteIsCalled_Then_TheDataIsCorrect()
        {
            var properties = Enumerable.Range(0, 200).Select(x => (byte)x).ToArray();

            var dmpLayer = new DMPLayer()
            {
                PropertyValues = properties
            };

            var expectedBytes = GetDMPLayer(properties);

            using var owner = MemoryPool <byte> .Shared.Rent(DMPLayer.MinLength + properties.Length);

            var actualBytes = owner.Memory.Span.Slice(0, DMPLayer.MinLength + properties.Length);

            dmpLayer.Write(actualBytes);
            Assert.Equal(expectedBytes.ToArray(), actualBytes.ToArray());
        }