Exemple #1
0
        public override EnOceanPacket ToPacket()
        {
            var data = new List <byte>();

            data.Add((byte)Rorg);
            data.AddRange(Data.Span.ToArray()); //TODO: Change to Packet function
            //source id
            data.AddRange(_idBase.ToArray());
            data.Add(0x30);

            var optionalData = new List <byte>();

            //optional data
            optionalData.Add(3);
            optionalData.Add(0xFF);
            optionalData.Add(0xFF);
            optionalData.Add(0xFF);
            optionalData.Add(0xFF);
            optionalData.Add(0xFF); //dBM
            optionalData.Add(0);    //security level

            var headerBuf = new List <byte>();

            headerBuf.Add(0x55);
            headerBuf.Add((byte)(data.Count >> 8));
            headerBuf.Add((byte)data.Count);
            headerBuf.Add(7);
            headerBuf.Add((byte)EnOcean.PacketType.RadioErp1);

            return(EnOceanPacket.CreateNew(headerBuf.ToArray(), data.ToArray(), optionalData.ToArray()));
        }
Exemple #2
0
        private RadioErp1Packet CreatePacket(string data)
        {
            var byteData = Automatica.Core.Driver.Utility.Utils.StringToByteArray(data);

            var packet = EnOceanPacket.Parse(byteData);

            var telegram = EnOceanTelegramFactory.FromPacket(packet) as RadioErp1Packet;

            return(telegram);
        }
Exemple #3
0
        public void Test_PackageParse()
        {
            var byteData =
                Automatica.Core.Driver.Utility.Utils.StringToByteArray("55000A0701EBA500010948FF0000000001FFFFFFFF490066");

            var packet = EnOceanPacket.Parse(byteData);

            Assert.Equal(EnOcean.PacketType.RadioErp1, packet.PacketType);
            Assert.Equal(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }, packet.DestinationId);
            Assert.Equal((byte)73, packet.Dbm);
            Assert.False(packet.SecurityLevel);
        }
Exemple #4
0
 public void WriteFrame(EnOceanPacket frame)
 {
     try
     {
         _stream.Write(frame.RawData.ToArray(), 0, frame.RawData.Length);
         Logger.Logger.Instance.LogHexOut(frame.RawData);
     }
     catch (Exception e)
     {
         Logger.Logger.Instance.LogError($"Could not write frame {e}", e);
     }
 }
Exemple #5
0
        public void Test_PackageParseNoLearnMode()
        {
            var byteData = Automatica.Core.Driver.Utility.Utils.StringToByteArray("55000707017AD508019C20150001FFFFFFFF500088");

            var packet = EnOceanPacket.Parse(byteData);

            var radioErp1 = new RadioErp1Packet();

            radioErp1.FromPacket(packet);

            Assert.False(RadioErp1Packet.IsTechIn(radioErp1));
            Assert.Equal(EnOcean.PacketType.RadioErp1, packet.PacketType);
            Assert.False(packet.SecurityLevel);
        }
        public void Test_Telegram1()
        {
            var byteData = Automatica.Core.Driver.Utility.Utils.StringToByteArray("55000A0701EBA500008E48FFA8AB000001FFFFFFFF560073");

            var packet = EnOceanPacket.Parse(byteData);

            var telegram = EnOceanTelegramFactory.FromPacket(packet) as RadioErp1Packet;

            Assert.NotNull(telegram);

            Assert.IsType <RadioErp1Packet>(telegram);

            Assert.Equal(Rorg.FourBs, telegram.Rorg);
        }
Exemple #7
0
        public override void FromPacket(EnOceanPacket packet)
        {
            packet.ParseData();
            Packet = packet;
            Rorg   = (Rorg)packet.Data.Span[0];

            var dataLength = GetRorgDataSize(Rorg);

            Data = packet.Data.Slice(1, dataLength);

            SenderId = packet.Data.Slice(dataLength + 1, 4);
            Status   = packet.Data.Span[packet.Data.Length - 1];

            Logger.Logger.Instance.LogDebug($"RadioERP1 Packet {Rorg} from {Automatica.Core.Driver.Utility.Utils.ByteArrayToString(SenderId)}  Data: {Automatica.Core.Driver.Utility.Utils.ByteArrayToString(Data)}");
        }
        public override EnOceanPacket ToPacket()
        {
            var header = new List <byte>();

            header.Add(0x55);
            header.Add(0x00);
            header.Add(0x01);
            header.Add(0x00);
            header.Add(0x05); // COMMON_COMMAND

            var data = new List <byte>();

            data.Add((byte)_command); // command type

            return(EnOceanPacket.CreateNew(header.ToArray(), data.ToArray(), new byte[0]));
        }
Exemple #9
0
        private async Task <EnOceanPacket> ReadFrameInternal()
        {
            try
            {
                var firstChar = (byte)_stream.ReadByte();
                await Task.Delay(100);

                if (firstChar == EnOcean.SyncByte)
                {
                    var dataLen     = new byte[2];
                    var dataLenRead = await _stream.ReadAsync(dataLen, 0, 2);

                    if (dataLenRead == 2)
                    {
                        var dataLenShort = BitConverter.ToUInt16(dataLen.Reverse().ToArray(), 0);

                        var optLen     = (byte)_stream.ReadByte();
                        var packetType = (byte)_stream.ReadByte();
                        var crc8Header = (byte)_stream.ReadByte();

                        var header = new byte[] { firstChar, dataLen[0], dataLen[1], optLen, packetType, crc8Header };

                        var           data       = new byte[dataLenShort];
                        Memory <byte> dataMemory = new Memory <byte>(data);
                        var           read       = await _stream.ReadAsync(dataMemory);

                        if (read == dataLenShort)
                        {
                            var           optData   = new byte[optLen];
                            Memory <byte> optMemory = new Memory <byte>(optData);

                            read = await _stream.ReadAsync(optMemory);

                            if (read == optLen)
                            {
                                var crcData = (byte)_stream.ReadByte();
                                var packet  = EnOceanPacket.Parse(new Memory <byte>(header), dataMemory, optMemory, crcData);

                                Logger.Logger.Instance.LogHexIn(packet.RawData);
                                return(packet);
                            }
                        }
                        else
                        {
                            Logger.Logger.Instance.LogDebug($"In buffer length to short {read}/{dataLenShort}");
                        }
                    }
                    else
                    {
                        Logger.Logger.Instance.LogDebug($"Could not read length of package");
                    }
                }
                else
                {
                    Logger.Logger.Instance.LogDebug($"Invalid sync byte received {firstChar}");
                    if (_stream.BytesToRead > 0)
                    {
                        return(await ReadFrameInternal());
                    }
                }
            }
            catch (IOException ioe)
            {
                Logger.Logger.Instance.LogError($"Could not read frame {ioe}", ioe);
                Close();
                Thread.Sleep(100);
                Open();
            }
            catch (Exception e)
            {
                Logger.Logger.Instance.LogError($"Could not read frame {e}", e);
            }
            return(null);
        }
 public override void FromPacket(EnOceanPacket packet)
 {
     throw new NotImplementedException();
 }
 public abstract void FromPacket(EnOceanPacket packet);
Exemple #12
0
 public override void FromPacket(EnOceanPacket packet)
 {
     ReturnCode = (ReturnCode)packet.Data.Span[0];
 }