Example #1
0
        public JT808_0x8604 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x8604 jT808_0X8604 = new JT808_0x8604
            {
                AreaId       = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                AreaProperty = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset)
            };
            ReadOnlySpan <char> areaProperty16Bit = Convert.ToString(jT808_0X8604.AreaProperty, 2).PadLeft(16, '0').AsSpan();
            bool bit0Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 1).ToString().Equals("0");

            if (!bit0Flag)
            {
                jT808_0X8604.StartTime = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
                jT808_0X8604.EndTime   = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
            }
            bool bit1Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 2, 1).ToString().Equals("0");

            if (!bit1Flag)
            {
                jT808_0X8604.HighestSpeed      = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
                jT808_0X8604.OverspeedDuration = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
            }
            jT808_0X8604.PeakCount = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            jT808_0X8604.PeakItems = new List <JT808PeakProperty>();
            if (jT808_0X8604.PeakCount > 0)
            {
                for (var i = 0; i < jT808_0X8604.PeakCount; i++)
                {
                    var item = new JT808PeakProperty
                    {
                        Lat = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                        Lng = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset)
                    };
                    jT808_0X8604.PeakItems.Add(item);
                }
            }
            readSize = offset;
            return(jT808_0X8604);
        }
Example #2
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0200 value)
 {
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.AlarmFlag);
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.StatusFlag);
     offset += JT808BinaryExtensions.WriteInt32Little(bytes, offset, value.Lat);
     offset += JT808BinaryExtensions.WriteInt32Little(bytes, offset, value.Lng);
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.Altitude);
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.Speed);
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.Direction);
     offset += JT808BinaryExtensions.WriteDateTime6Little(bytes, offset, value.GPSTime);
     if (value.JT808LocationAttachData != null && value.JT808LocationAttachData.Count > 0)
     {
         foreach (var item in value.JT808LocationAttachData)
         {
             try
             {
                 object attachImplObj = JT808FormatterExtensions.GetFormatter(item.Value.GetType());
                 offset = JT808FormatterResolverExtensions.JT808DynamicSerialize(attachImplObj, ref bytes, offset, item.Value);
             }
             catch (Exception ex)
             {
             }
         }
     }
     if (value.JT808CustomLocationAttachData != null && value.JT808CustomLocationAttachData.Count > 0)
     {
         foreach (var item in value.JT808CustomLocationAttachData)
         {
             try
             {
                 object attachImplObj = JT808FormatterExtensions.GetFormatter(item.Value.GetType());
                 offset = JT808FormatterResolverExtensions.JT808DynamicSerialize(attachImplObj, ref bytes, offset, item.Value);
             }
             catch (Exception ex)
             {
             }
         }
     }
     return(offset);
 }
Example #3
0
        public JT808_0x8602 Deserialize(ReadOnlySpan <byte> bytes, out int readSize, IJT808Config config)
        {
            int          offset       = 0;
            JT808_0x8602 jT808_0X8602 = new JT808_0x8602
            {
                SettingAreaProperty = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
                AreaCount           = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
                AreaItems           = new List <JT808RectangleAreaProperty>()
            };

            for (var i = 0; i < jT808_0X8602.AreaCount; i++)
            {
                JT808RectangleAreaProperty jT808CircleAreaProperty = new JT808RectangleAreaProperty
                {
                    AreaId           = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                    AreaProperty     = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset),
                    UpLeftPointLat   = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                    UpLeftPointLng   = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                    LowRightPointLat = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                    LowRightPointLng = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset)
                };
                ReadOnlySpan <char> areaProperty16Bit = Convert.ToString(jT808CircleAreaProperty.AreaProperty, 2).PadLeft(16, '0').AsSpan();
                bool bit0Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 1).ToString().Equals("0");
                if (!bit0Flag)
                {
                    jT808CircleAreaProperty.StartTime = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
                    jT808CircleAreaProperty.EndTime   = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
                }
                bool bit1Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 2, 1).ToString().Equals("0");
                if (!bit1Flag)
                {
                    jT808CircleAreaProperty.HighestSpeed      = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
                    jT808CircleAreaProperty.OverspeedDuration = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                }
                jT808_0X8602.AreaItems.Add(jT808CircleAreaProperty);
            }
            readSize = offset;
            return(jT808_0X8602);
        }
Example #4
0
        public JT808_0x8103 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x8103 jT808_0x8103 = new JT808_0x8103
            {
                ParamList = new List <JT808_0x8103_BodyBase>()
            };
            var paramCount = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);//参数总数

            for (int i = 0; i < paramCount; i++)
            {
                var paramId         = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset);//参数ID
                int readSubBodySize = 0;
                if (JT808_0x8103_BodyBase.JT808_0x8103Method.TryGetValue(paramId, out Type type))
                {
                    jT808_0x8103.ParamList.Add(JT808FormatterResolverExtensions.JT808DynamicDeserialize(JT808FormatterExtensions.GetFormatter(type), bytes.Slice(offset), out readSubBodySize));
                }
                offset = offset + readSubBodySize;
            }
            readSize = offset;
            return(jT808_0x8103);
        }
Example #5
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0705 value, IJT808Config config)
 {
     if (value.CanItems != null && value.CanItems.Count > 0)
     {
         offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, (ushort)value.CanItems.Count);
         offset += JT808BinaryExtensions.WriteDateTime5Little(bytes, offset, value.FirstCanReceiveTime);
         foreach (var item in value.CanItems)
         {
             if (item.CanId.Length != 4)
             {
                 throw new JT808Exception(Enums.JT808ErrorCode.NotEnoughLength, $"{nameof(item.CanId)}->4");
             }
             offset += JT808BinaryExtensions.WriteBytesLittle(bytes, offset, item.CanId);
             if (item.CanData.Length != 8)
             {
                 throw new JT808Exception(Enums.JT808ErrorCode.NotEnoughLength, $"{nameof(item.CanData)}->8");
             }
             offset += JT808BinaryExtensions.WriteBytesLittle(bytes, offset, item.CanData);
         }
     }
     return(offset);
 }
 public JT808_0x8301 Deserialize(ReadOnlySpan<byte> bytes, out int readSize)
 {
     int offset = 0;
     JT808_0x8301 jT808_0X8301 = new JT808_0x8301
     {
         SettingType = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
         SettingCount = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
         EventItems = new List<JT808EventProperty>()
     };
     for (var i = 0; i < jT808_0X8301.SettingCount; i++)
     {
         JT808EventProperty jT808EventProperty = new JT808EventProperty
         {
             EventId = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
             EventContentLength = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset)
         };
         jT808EventProperty.EventContent = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808EventProperty.EventContentLength);
         jT808_0X8301.EventItems.Add(jT808EventProperty);
     }
     readSize = offset;
     return jT808_0X8301;
 }
Example #7
0
        public JT808_0x8303 Deserialize(ReadOnlySpan <byte> bytes, out int readSize, IJT808Config config)
        {
            int          offset       = 0;
            JT808_0x8303 jT808_0X8303 = new JT808_0x8303
            {
                SettingType          = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
                InformationItemCount = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
                InformationItems     = new List <JT808InformationItemProperty>()
            };

            for (var i = 0; i < jT808_0X8303.InformationItemCount; i++)
            {
                JT808InformationItemProperty jT808InformationItemProperty = new JT808InformationItemProperty
                {
                    InformationType   = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset),
                    InformationLength = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset)
                };
                jT808InformationItemProperty.InformationName = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808InformationItemProperty.InformationLength);
                jT808_0X8303.InformationItems.Add(jT808InformationItemProperty);
            }
            readSize = offset;
            return(jT808_0X8303);
        }
Example #8
0
        public JT808_0x0702 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x0702 jT808_0X0702 = new JT808_0x0702();

            jT808_0X0702.IC_Card_Status       = (JT808ICCardStatus)JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
            jT808_0X0702.IC_Card_PlugDateTime = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
            if (jT808_0X0702.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班)
            {
                jT808_0X0702.IC_Card_ReadResult = (JT808ICCardReadResult)JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                if (jT808_0X0702.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功)
                {
                    jT808_0X0702.DriverUserNameLength   = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                    jT808_0X0702.DriverUserName         = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808_0X0702.DriverUserNameLength);
                    jT808_0X0702.QualificationCode      = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, 20);
                    jT808_0X0702.LicenseIssuingLength   = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                    jT808_0X0702.LicenseIssuing         = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808_0X0702.LicenseIssuingLength);
                    jT808_0X0702.CertificateExpiresDate = JT808BinaryExtensions.ReadDateTime4Little(bytes, ref offset);
                }
            }
            readSize = offset;
            return(jT808_0X0702);
        }
Example #9
0
        public JT808_0x8401 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x8401 jT808_0X8401 = new JT808_0x8401();

            jT808_0X8401.SettingTelephoneBook = (JT808SettingTelephoneBook)JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
            jT808_0X8401.ContactCount         = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
            List <JT808ContactProperty> jT808_0X8401s = new List <JT808ContactProperty>();

            for (var i = 0; i < jT808_0X8401.ContactCount; i++)
            {
                JT808ContactProperty jT808ContactProperty = new JT808ContactProperty();
                jT808ContactProperty.TelephoneBookContactType = (JT808TelephoneBookContactType)JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808ContactProperty.PhoneNumberLength        = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808ContactProperty.PhoneNumber   = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808ContactProperty.PhoneNumberLength);
                jT808ContactProperty.ContactLength = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808ContactProperty.Contact       = JT808BinaryExtensions.ReadStringLittle(bytes, ref offset, jT808ContactProperty.ContactLength);
                jT808_0X8401s.Add(jT808ContactProperty);
            }
            jT808_0X8401.JT808ContactProperties = jT808_0X8401s;
            readSize = offset;
            return(jT808_0X8401);
        }
Example #10
0
        public JT808_0x0802 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x0802 JT808_0x0802 = new JT808_0x0802();

            JT808_0x0802.MsgNum = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            JT808_0x0802.MultimediaItemCount   = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            JT808_0x0802.MultimediaSearchItems = new List <JT808Properties.JT808MultimediaSearchProperty>();
            int bufReadSize;

            for (var i = 0; i < JT808_0x0802.MultimediaItemCount; i++)
            {
                JT808Properties.JT808MultimediaSearchProperty jT808MultimediaSearchProperty = new JT808Properties.JT808MultimediaSearchProperty();
                jT808MultimediaSearchProperty.MultimediaId    = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset);
                jT808MultimediaSearchProperty.MultimediaType  = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808MultimediaSearchProperty.ChannelId       = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808MultimediaSearchProperty.EventItemCoding = JT808BinaryExtensions.ReadByteLittle(bytes, ref offset);
                jT808MultimediaSearchProperty.Position        = JT808FormatterExtensions.GetFormatter <JT808_0x0200>().Deserialize(bytes.Slice(offset, 28), out bufReadSize);
                offset += 28;
                JT808_0x0802.MultimediaSearchItems.Add(jT808MultimediaSearchProperty);
            }
            readSize = offset;
            return(JT808_0x0802);
        }
Example #11
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0108 value, IJT808Config config)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.UpgradeType);
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.UpgradeResult);
     return(offset);
 }
Example #12
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8400 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, (byte)value.CallBack);
     offset += JT808BinaryExtensions.WriteStringLittle(bytes, offset, value.PhoneNumber);
     return(offset);
 }
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0102 value)
 {
     offset += JT808BinaryExtensions.WriteStringLittle(bytes, offset, value.Code);
     return(offset);
 }
 public int Serialize(IMemoryOwner <byte> memoryOwner, int offset, JT808_0x0500 value)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(memoryOwner, offset, value.MsgNum);
     offset += JT808FormatterExtensions.GetFormatter <JT808_0x0200>().Serialize(memoryOwner, offset, value.JT808_0x0200);
     return(offset);
 }
Example #15
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8805 value)
 {
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.MultimediaId);
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.MultimediaDeleted);
     return(offset);
 }
Example #16
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0302 value)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.ReplySNo);
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.AnswerId);
     return(offset);
 }
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0500 value, IJT808FormatterResolver formatterResolver)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(ref bytes, offset, value.MsgNum);
     offset += formatterResolver.GetFormatter <JT808_0x0200>().Serialize(ref bytes, offset, value.JT808_0x0200, formatterResolver);
     return(offset);
 }
 public int Serialize(IMemoryOwner <byte> memoryOwner, int offset, JT808_0x8300 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(memoryOwner, offset, value.TextFlag);
     offset += JT808BinaryExtensions.WriteStringLittle(memoryOwner, offset, value.TextInfo);
     return(offset);
 }
Example #19
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0X8900_Test_BodiesImpl value)
 {
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.Id);
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.Sex);
     return(offset);
 }
Example #20
0
        public JT808_0x0200 Deserialize(ReadOnlySpan <byte> bytes, out int readSize)
        {
            int          offset       = 0;
            JT808_0x0200 jT808_0X0200 = new JT808_0x0200
            {
                AlarmFlag  = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                StatusFlag = JT808BinaryExtensions.ReadUInt32Little(bytes, ref offset),
                Lat        = JT808BinaryExtensions.ReadInt32Little(bytes, ref offset),
                Lng        = JT808BinaryExtensions.ReadInt32Little(bytes, ref offset)
            };
            JT808StatusProperty jT808StatusProperty = new JT808StatusProperty(Convert.ToString(jT808_0X0200.StatusFlag, 2).PadLeft(32, '0'));

            if (jT808StatusProperty.Bit28 == '1')//西经
            {
                jT808_0X0200.Lng = -jT808_0X0200.Lng;
            }
            if (jT808StatusProperty.Bit29 == '1')//南纬
            {
                jT808_0X0200.Lat = -jT808_0X0200.Lat;
            }
            jT808_0X0200.Altitude  = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            jT808_0X0200.Speed     = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            jT808_0X0200.Direction = JT808BinaryExtensions.ReadUInt16Little(bytes, ref offset);
            jT808_0X0200.GPSTime   = JT808BinaryExtensions.ReadDateTime6Little(bytes, ref offset);
            // 位置附加信息
            jT808_0X0200.JT808LocationAttachData = new Dictionary <byte, JT808_0x0200_BodyBase>();
            jT808_0X0200.JT808CustomLocationAttachOriginalData = new Dictionary <byte, byte[]>();
            if (bytes.Length > 28)
            {
                int attachOffset = 0;
                ReadOnlySpan <byte> locationAttachMemory = bytes;
                ReadOnlySpan <byte> locationAttachSpan   = locationAttachMemory.Slice(28);
                while (locationAttachSpan.Length > attachOffset)
                {
                    int attachId  = 1;
                    int attachLen = 1;
                    try
                    {
                        Type jT808LocationAttachType;
                        if (JT808_0x0200_BodyBase.JT808LocationAttachMethod.TryGetValue(locationAttachSpan[attachOffset], out jT808LocationAttachType))
                        {
                            int attachContentLen             = locationAttachSpan[attachOffset + 1];
                            int locationAttachTotalLen       = attachId + attachLen + attachContentLen;
                            ReadOnlySpan <byte> attachBuffer = locationAttachSpan.Slice(attachOffset, locationAttachTotalLen);
                            object  attachImplObj            = JT808FormatterExtensions.GetFormatter(jT808LocationAttachType);
                            dynamic attachImpl = JT808FormatterResolverExtensions.JT808DynamicDeserialize(attachImplObj, attachBuffer, out readSize);
                            attachOffset = attachOffset + locationAttachTotalLen;
                            jT808_0X0200.JT808LocationAttachData.Add(attachImpl.AttachInfoId, attachImpl);
                        }
                        else if (JT808_0x0200_CustomBodyBase.CustomAttachIds.Contains(locationAttachSpan[attachOffset]))
                        {
                            int attachContentLen             = locationAttachSpan[attachOffset + 1];
                            int locationAttachTotalLen       = attachId + attachLen + attachContentLen;
                            ReadOnlySpan <byte> attachBuffer = locationAttachSpan.Slice(attachOffset, locationAttachTotalLen);
                            jT808_0X0200.JT808CustomLocationAttachOriginalData.Add(locationAttachSpan[attachOffset], attachBuffer.ToArray());
                            attachOffset = attachOffset + locationAttachTotalLen;
                        }
                        else
                        {
                            int attachContentLen       = locationAttachSpan[attachOffset + 1];
                            int locationAttachTotalLen = attachId + attachLen + attachContentLen;
                            attachOffset = attachOffset + locationAttachTotalLen;
                        }
                    }
                    catch (Exception)
                    {
                        int attachContentLen       = locationAttachSpan[attachOffset + 1];
                        int locationAttachTotalLen = attachId + attachLen + attachContentLen;
                        attachOffset = attachOffset + locationAttachTotalLen;
                    }
                }
                offset = offset + attachOffset;
            }
            readSize = offset;
            return(jT808_0X0200);
        }
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8500 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.ControlFlag);
     return(offset);
 }
Example #22
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8202 value)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.Interval);
     offset += JT808BinaryExtensions.WriteInt32Little(bytes, offset, value.LocationTrackingValidity);
     return(offset);
 }
Example #23
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0303 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.InformationType);
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.Flag);
     return(offset);
 }
Example #24
0
        public int Serialize(ref byte[] bytes, int offset, JT808_0x8606 value)
        {
            offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.RouteId);
            offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.RouteProperty);
            ReadOnlySpan <char> routeProperty16Bit = Convert.ToString(value.RouteProperty, 2).PadLeft(16, '0').AsSpan();
            bool bit0Flag = routeProperty16Bit.Slice(routeProperty16Bit.Length - 1).ToString().Equals("0");

            if (!bit0Flag)
            {
                if (value.StartTime.HasValue)
                {
                    offset += JT808BinaryExtensions.WriteDateTime6Little(bytes, offset, value.StartTime.Value);
                }

                if (value.EndTime.HasValue)
                {
                    offset += JT808BinaryExtensions.WriteDateTime6Little(bytes, offset, value.EndTime.Value);
                }
            }
            bool bit1Flag = routeProperty16Bit.Slice(routeProperty16Bit.Length - 2, 1).ToString().Equals("0");

            if (value.InflectionPointItems != null && value.InflectionPointItems.Count > 0)
            {
                offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, (ushort)value.InflectionPointItems.Count);
                foreach (var item in value.InflectionPointItems)
                {
                    offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, item.InflectionPointId);
                    offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, item.SectionId);
                    offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, item.InflectionPointLat);
                    offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, item.InflectionPointLng);
                    offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, item.SectionWidth);
                    offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, item.SectionProperty);

                    ReadOnlySpan <char> sectionProperty16Bit = Convert.ToString(item.SectionProperty, 2).PadLeft(16, '0').AsSpan();
                    bool sectionBit0Flag = sectionProperty16Bit.Slice(sectionProperty16Bit.Length - 1).ToString().Equals("0");
                    if (!sectionBit0Flag)
                    {
                        if (item.SectionLongDrivingThreshold.HasValue)
                        {
                            offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, item.SectionLongDrivingThreshold.Value);
                        }
                        if (item.SectionDrivingUnderThreshold.HasValue)
                        {
                            offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, item.SectionDrivingUnderThreshold.Value);
                        }
                    }
                    bool sectionBit1Flag = sectionProperty16Bit.Slice(sectionProperty16Bit.Length - 2, 1).ToString().Equals("0");
                    if (!sectionBit1Flag)
                    {
                        if (item.SectionHighestSpeed.HasValue)
                        {
                            offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, item.SectionHighestSpeed.Value);
                        }
                        if (item.SectionOverspeedDuration.HasValue)
                        {
                            offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, item.SectionOverspeedDuration.Value);
                        }
                    }
                }
            }
            return(offset);
        }
Example #25
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8203 value)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.AlarmMsgNum);
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.ManualConfirmAlarmType);
     return(offset);
 }
Example #26
0
 public int Serialize(IMemoryOwner <byte> memoryOwner, int offset, JT808_0x8400 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(memoryOwner, offset, (byte)value.CallBack);
     offset += JT808BinaryExtensions.WriteStringLittle(memoryOwner, offset, value.PhoneNumber);
     return(offset);
 }
Example #27
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x0201 value)
 {
     offset += JT808BinaryExtensions.WriteUInt16Little(bytes, offset, value.MsgNum);
     offset += JT808FormatterExtensions.GetFormatter <JT808_0x0200>().Serialize(ref bytes, offset, value.Position);
     return(offset);
 }
Example #28
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8106 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.ParameterCount);
     offset += JT808BinaryExtensions.WriteBytesLittle(bytes, offset, value.Parameters);
     return(offset);
 }
Example #29
0
 public int Serialize(ref byte[] bytes, int offset, JT808_0x8103_0x0093 value)
 {
     offset += JT808BinaryExtensions.WriteByteLittle(bytes, offset, value.ParamLength);
     offset += JT808BinaryExtensions.WriteUInt32Little(bytes, offset, value.ParamValue);
     return(offset);
 }
Example #30
0
 public int Serialize(IMemoryOwner <byte> memoryOwner, int offset, JT808_0x0900_0x83 value)
 {
     offset += JT808BinaryExtensions.WriteStringLittle(memoryOwner, offset, value.PassthroughContent);
     return(offset);
 }