Example #1
0
        public GarminPacket Decode(Stream stream)
        {
            EndianBinaryReader endianBinaryReader = stream != null ? new EndianBinaryReader(EndianBitConverter.Little, stream) : throw new ArgumentNullException(nameof(stream));
            byte         num       = endianBinaryReader.ReadByte() == 16 ? endianBinaryReader.ReadByte() : throw new ApplicationException("DLE expected");
            DLEStream    dleStream = new DLEStream(stream);
            int          count     = dleStream.ReadByte();
            GarminPacket packet;

            if (num == 161)
            {
                byte[] numArray = dleStream.ReadBytes(count);
                short  int16    = BitConverter.ToInt16(((IEnumerable <byte>)numArray).Take(2).ToArray(), 0);
                packet         = !garminFleetmanagementPacketIdToType.ContainsKey(int16) ? new GarminFleetManagementPacket(int16) : garminFleetmanagementPacketIdToType[int16].GetConstructor(new Type[0]).Invoke(new object[0]) as GarminPacket;
                packet.Payload = numArray;
            }
            else
            {
                byte[] numArray = dleStream.ReadBytes(count);
                packet         = !garminPacketIdToType.ContainsKey(num) ? new GarminPacket(num) : garminPacketIdToType[num].GetConstructor(new Type[0]).Invoke(new object[0]) as GarminPacket;
                packet.Payload = numArray;
            }
            if (dleStream.ReadByte() != CalcChecksum(packet))
            {
                throw new ApplicationException("Invalid checksum");
            }
            if (endianBinaryReader.ReadByte() != 16)
            {
                throw new ApplicationException("DLE expected");
            }
            if (3 != endianBinaryReader.ReadByte())
            {
                throw new ApplicationException("ETX expected");
            }
            return(packet);
        }
Example #2
0
        public void Encode(GarminPacket packet, Stream stream)
        {
            if (packet == null)
            {
                throw new ArgumentNullException(nameof(packet));
            }
            EndianBinaryWriter endianBinaryWriter = stream != null ? new EndianBinaryWriter(EndianBitConverter.Little, stream) : throw new ArgumentNullException(nameof(stream));

            endianBinaryWriter.Write((byte)16);
            endianBinaryWriter.Write(packet.Id);
            GarminFleetManagementPacket managementPacket = packet as GarminFleetManagementPacket;
            DLEStream dleStream = new DLEStream(stream);

            if (managementPacket != null)
            {
                dleStream.WriteByte((byte)packet.Payload.Length);
                dleStream.Write(packet.Payload);
            }
            else
            {
                dleStream.WriteByte((byte)packet.Payload.Length);
                dleStream.Write(packet.Payload);
            }
            byte num = CalcChecksum(packet);

            dleStream.WriteByte(num);
            endianBinaryWriter.Write((byte)16);
            endianBinaryWriter.Write((byte)3);
        }