예제 #1
0
 public AvlData(AvlDataPriority priority, DateTime dateTime, GpsElement gps, IoElement data = null)
 {
     _priority = priority;
     _dateTime = dateTime;
     _gps      = gps;
     _data     = data;
 }
예제 #2
0
        public AvlData Decode(IBitReader reader)
        {
            DateTime dateTime = reader != null?DateTimeExt.FromAvl(reader.ReadInt64()) : throw new ArgumentNullException(nameof(reader));

            AvlDataPriority priority = (AvlDataPriority)reader.ReadByte();
            GpsElement      gps      = DefaultGpsElementEncoding.Instance.Decode(reader);
            IoElement       data     = DefaultIOElementEncoding.Instance16.Decode(reader);

            return(new AvlData(priority, dateTime, gps, data));
        }
예제 #3
0
        public AvlData Decode(IBitReader reader)
        {
            DateTime dateTime = reader != null?DateTimeExt.FromAvl(reader.ReadUInt32() * 1000L + reader.ReadByte() * 10) : throw new ArgumentNullException(nameof(reader));

            AvlDataPriority priority      = (AvlDataPriority)reader.ReadByte();
            GpsElementExt   gpsElementExt = FMPro3GpsElementEncoding.Instance.Decode(reader);
            IoElement       data          = FMPro3IOElementEncoding.Instance.Decode(reader);

            data.Add(gpsElementExt.IO[500001]);
            return(new AvlData(priority, dateTime, gpsElementExt.GPS, data));
        }
예제 #4
0
        public AvlData Decode(IBitReader reader)
        {
            DateTime dateTime = reader != null?DateTimeExt.FromAvl(reader.ReadInt64()) : throw new ArgumentNullException(nameof(reader));

            AvlDataPriority priority = AvlDataPriority.Low;
            byte            num      = reader.ReadByte();

            if (num > 10 && num <= 20)
            {
                priority = AvlDataPriority.High;
            }
            GpsElement gps  = DefaultGpsElementEncoding.Instance.Decode(reader);
            IoElement  data = LegacyIoElementEncoding.Instance.Decode(reader);

            if (priority == AvlDataPriority.High)
            {
                data = new IoElement(-1, data.Properties);
            }
            return(new AvlData(priority, dateTime, gps, data));
        }
        public AvlData Decode(IBitReader reader)
        {
            int num1 = reader != null?reader.ReadInt32() : throw new ArgumentNullException(nameof(reader));

            int             index     = 3 & num1 >> 30;
            AvlDataPriority priority  = Priorities[index];
            long            num2      = num1 & 1073741823;
            DateTime        dateTime  = GHepoch.AddSeconds(num2);
            GhGlobalMask    mask      = (GhGlobalMask)reader.ReadByte();
            GpsElement      gps       = GpsElement.Default;
            IoElement       ioElement = new IoElement();

            if (mask.HasFlag(GhGlobalMask.GpsElement))
            {
                GpsElementExt gpsElementExt = GhGpsElementEncoding.Instance.Decode(reader);
                gps       = gpsElementExt.GPS;
                ioElement = gpsElementExt.IO;
            }
            IList <IoProperty> properties1    = GetProperties(reader, mask, GhGlobalMask.IoInt8, GhIoElementEncoding.Int8);
            IList <IoProperty> properties2    = GetProperties(reader, mask, GhGlobalMask.IoInt16, GhIoElementEncoding.Int16);
            IList <IoProperty> properties3    = GetProperties(reader, mask, GhGlobalMask.IoInt32, GhIoElementEncoding.Int32);
            List <IoProperty>  ioPropertyList = new List <IoProperty>();

            ioPropertyList.AddRange(ioElement);
            ioPropertyList.AddRange(properties1 ?? Enumerable.Empty <IoProperty>());
            ioPropertyList.AddRange(properties2 ?? Enumerable.Empty <IoProperty>());
            ioPropertyList.AddRange(properties3 ?? Enumerable.Empty <IoProperty>());
            int eventId = 0;

            if (priority == AvlDataPriority.Panic)
            {
                IoProperty ioProperty = IoProperty.Create(204, (byte)1);
                ioPropertyList.Add(ioProperty);
                eventId = ioPropertyList.SingleOrDefault(x => x.Id == 222) == IoProperty.Default ? 204 : 222;
            }
            IoElement data = new IoElement(eventId, ioPropertyList);

            return(new AvlData(priority, dateTime, gps, data));
        }
        public AvlData Decode(IBitReader reader)
        {
            byte num = reader != null?reader.ReadByte() : throw new ArgumentNullException(nameof(reader));

            byte[] buffer = reader.ReadBytes(num);
            if (reader.ReadByte() != CRC.CalculateXor(buffer))
            {
                throw new Exception("AvlData Record CRC failure. Received CRC - {0}, calculated CRC - {1}.");
            }
            using (MemoryStream stream = new MemoryStream())
            {
                using (IBitReader suitableBitReader = stream.CreateSuitableBitReader())
                {
                    stream.Write(buffer, 0, num);
                    stream.Position = 0L;
                    long            timestamp = suitableBitReader.ReadUInt32() * 1000L;
                    AvlDataPriority priority  = (AvlDataPriority)suitableBitReader.ReadByte();
                    GpsElement      gps       = DefaultGpsElementEncoding.Instance.Decode(suitableBitReader);
                    IoElement       data      = DefaultIOElementEncoding.Instance.Decode(suitableBitReader);
                    DateTime        dateTime  = DateTimeExt.FromAvl(timestamp);
                    return(new AvlData(priority, dateTime, gps, data));
                }
            }
        }