예제 #1
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            JT809_JT1078_0x9800 value = new JT809_JT1078_0x9800();
            var virtualHex            = reader.ReadVirtualArray(21);

            value.VehicleNo = reader.ReadString(21);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo);
            value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
            writer.WriteString($"[{((byte)value.VehicleColor).ReadNumber()}]车牌颜色", value.VehicleColor.ToString());
            value.SubBusinessType = reader.ReadUInt16();
            writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString());
            value.DataLength = reader.ReadUInt32();
            writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
            try
            {
                if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
                {
                    if (instance is JT809SubBodies subBodies)
                    {
                        if (!subBodies.SkipSerialization)
                        {
                            writer.WriteStartObject("子业务类型");
                            instance.Analyze(ref reader, writer, config);
                            writer.WriteEndObject();
                        }
                    }
                }
            }
            catch
            {
                throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}");
            }
        }
예제 #2
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            var value      = new JT809_0x1400_0x1413();
            var virtualHex = reader.ReadVirtualArray(11);

            value.SourcePlatformId = reader.ReadBigNumber(11);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]发起报警平台唯一编码", value.SourcePlatformId);
            virtualHex     = reader.ReadVirtualArray(8);
            value.WarnTime = reader.ReadUTCDateTime();
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报警时间", value.WarnTime);
            value.SourceDataType = reader.ReadUInt16();
            writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
            value.SourceMsgSn = reader.ReadUInt32();
            writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
            virtualHex = reader.ReadVirtualArray(8);
            value.SupervisionEndTime = reader.ReadUTCDateTime();
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办截止时间", value.SupervisionEndTime);
            value.SupervisionLevel = (JT809_0x1413_SupervisionLevel)reader.ReadByte();
            writer.WriteString($"[{value.SupervisionLevel.ToByteValue()}]督办级别", value.SupervisionLevel.ToString());
            virtualHex       = reader.ReadVirtualArray(16);
            value.Supervisor = reader.ReadString(16);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办人", value.Supervisor);
            virtualHex          = reader.ReadVirtualArray(20);
            value.SupervisorTel = reader.ReadString(20);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办人联系电话", value.SupervisorTel);
            virtualHex            = reader.ReadVirtualArray(32);
            value.SupervisorEmail = reader.ReadString(32);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办人联系电子邮件", value.SupervisorTel);
        }
예제 #3
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            JT809_0x1300 value = new JT809_0x1300();

            value.SubBusinessType = reader.ReadUInt16();
            writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString());
            value.DataLength = reader.ReadUInt32();
            writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
            try
            {
                if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
                {
                    if (instance is JT809SubBodies subBodies)
                    {
                        if (!subBodies.SkipSerialization)
                        {
                            instance.Analyze(ref reader, writer, config);
                        }
                    }
                }
            }
            catch
            {
                throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}");
            }
        }
예제 #4
0
        public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x9200 value = new JT809_0x9200();

            value.VehicleNo       = reader.ReadString(21);
            value.VehicleColor    = (JT809VehicleColorType)reader.ReadByte();
            value.SubBusinessType = reader.ReadUInt16();
            value.DataLength      = reader.ReadUInt32();
            try
            {
                if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance))
                {
                    if (instance is JT809SubBodies subBodies)
                    {
                        if (!subBodies.SkipSerialization)
                        {
                            value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(
                                instance,
                                ref reader, config);
                        }
                    }
                }
            }
            catch
            {
                throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}");
            }
            return(value);
        }
예제 #5
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            JT809_0x9400_0x9401 value = new JT809_0x9400_0x9401();

            value.WarnSrc = (JT809WarnSrc)reader.ReadByte();
            writer.WriteString($"[{value.WarnSrc.ToByteValue()}]报警信息来源", value.WarnSrc.ToString());
            value.WarnType = reader.ReadUInt16();
            writer.WriteNumber($"[{value.WarnType.ReadNumber()}]报警类型", value.WarnType);
            var virtualHex = reader.ReadVirtualArray(8);

            value.WarnTime = reader.ReadUTCDateTime();
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报警时间", value.WarnTime);
            virtualHex          = reader.ReadVirtualArray(4);
            value.SupervisionID = reader.ReadHex(4);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]报警督办ID", value.SupervisionID);
            virtualHex = reader.ReadVirtualArray(8);
            value.SupervisionEndTime = reader.ReadUTCDateTime();
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办截止时间", value.SupervisionEndTime);
            value.SupervisionLevel = (JT809_9401_SupervisionLevel)reader.ReadByte();
            writer.WriteString($"[{value.SupervisionLevel.ToByteValue()}]督办级别", value.SupervisionLevel.ToString());
            virtualHex       = reader.ReadVirtualArray(16);
            value.Supervisor = reader.ReadString(16);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办人", value.Supervisor);
            virtualHex          = reader.ReadVirtualArray(20);
            value.SupervisorTel = reader.ReadString(20);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办联系电话", value.SupervisorTel);
            virtualHex            = reader.ReadVirtualArray(32);
            value.SupervisorEmail = reader.ReadString(32);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]督办联系电子邮件", value.SupervisorEmail);
        }
예제 #6
0
        public JT809_0x1400_0x1402 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x1400_0x1402();

            if (config.Version == JT809Version.JTT2011)
            {
                value.WarnSrc = (JT809WarnSrc)reader.ReadByte();
            }
            else
            {
                value.SourcePlatformId = reader.ReadString(11);
            }
            value.WarnType = (JT809WarnType)reader.ReadUInt16();
            value.WarnTime = reader.ReadUTCDateTime();
            if (config.Version == JT809Version.JTT2011)
            {
                value.InfoID = reader.ReadUInt32();
            }
            else
            {
                value.StartTime = reader.ReadUTCDateTime();
                value.EndTime   = reader.ReadUTCDateTime();
#warning 此处车牌号文档长度有误,使用旧版长度21
                value.VehicleNo             = reader.ReadString(21);
                value.VehicleColor          = (JT809VehicleColorType)reader.ReadByte();
                value.DestinationPlatformId = reader.ReadString(11);
                value.DRVLineId             = reader.ReadUInt32();
            }
            value.InfoLength  = reader.ReadUInt32();
            value.InfoContent = reader.ReadString((int)value.InfoLength);
            return(value);
        }
예제 #7
0
        public JT809_JT1078_0x9B00_0x9B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x9B00_0x9B03 jT808_JT1078_0x9B00_0x9B03 = new JT809_JT1078_0x9B00_0x9B03();

            jT808_JT1078_0x9B00_0x9B03.SessionId = reader.ReadUInt16();
            jT808_JT1078_0x9B00_0x9B03.Type      = reader.ReadByte();
            return(jT808_JT1078_0x9B00_0x9B03);
        }
 public JT809_JT1078_0x1A00_0x1A01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
 {
     JT809_JT1078_0x1A00_0x1A01 jT808_JT1078_0x1A00_0x1A01 = new JT809_JT1078_0x1A00_0x1A01();
     jT808_JT1078_0x1A00_0x1A01.ServerIp = reader.ReadString(32);
     jT808_JT1078_0x1A00_0x1A01.ServerPort = reader.ReadUInt16();
     jT808_JT1078_0x1A00_0x1A01.Result = reader.ReadByte();
     return jT808_JT1078_0x1A00_0x1A01;
 }
        public JT809_JT1078_0x9B00_0x9B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x9B00_0x9B02 jT808_JT1078_0x9B00_0x9B02 = new JT809_JT1078_0x9B00_0x9B02();

            jT808_JT1078_0x9B00_0x9B02.Result    = reader.ReadByte();
            jT808_JT1078_0x9B00_0x9B02.SessionId = reader.ReadUInt16();
            return(jT808_JT1078_0x9B00_0x9B02);
        }
예제 #10
0
        public JT809_0x9103 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x9103 value = new JT809_0x9103();

            value.SubBusinessType = reader.ReadUInt16();
            value.DataLength      = reader.ReadUInt32();
            value.Count           = reader.ReadByte();
            for (int i = 0; i < value.Count; i++)
            {
                JT809ManageMsgSNInform item = new JT809ManageMsgSNInform();
                item.SubBusinessType = reader.ReadUInt16();
                item.MsgSN           = reader.ReadUInt32();
                item.Time            = reader.ReadUTCDateTime();
                value.ManageMsgSNInform.Add(item);
            }
            return(value);
        }
예제 #11
0
        public JT809_JT1078_0x1B00_0x1B01 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x1B00_0x1B01 jT808_JT1078_0x1B00_0x1B01 = new JT809_JT1078_0x1B00_0x1B01();

            jT808_JT1078_0x1B00_0x1B01.Result    = reader.ReadByte();
            jT808_JT1078_0x1B00_0x1B01.SessionId = reader.ReadUInt16();
            return(jT808_JT1078_0x1B00_0x1B01);
        }
예제 #12
0
        public JT809_JT1078_0x9B00_0x9B03 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x9B00_0x9B03 value = new JT809_JT1078_0x9B00_0x9B03();

            value.SessionId = reader.ReadUInt16();
            value.Type      = (JT809_JT1078_0x9B00_0x9B03_Type)reader.ReadByte();
            return(value);
        }
예제 #13
0
        public JT809_JT1078_0x9B00_0x9B02 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x9B00_0x9B02 value = new JT809_JT1078_0x9B00_0x9B02();

            value.Result    = (JT809_JT1078_0x9B00_0x9B02_Result)reader.ReadByte();
            value.SessionId = reader.ReadUInt16();
            return(value);
        }
예제 #14
0
        public JT809_0x1400_0x1412 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x1400_0x1412();

            value.SourceDataType = reader.ReadUInt16();
            value.SourceMsgSn    = reader.ReadUInt32();
            value.Result         = (JT809_0x1412_Result)reader.ReadByte();
            return(value);
        }
예제 #15
0
        public JT809_JT1078_0x1800_0x1801 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_JT1078_0x1800_0x1801 value = new JT809_JT1078_0x1800_0x1801();

            value.Result     = (JT809_JT1078_0x1800_0x1801_Result)reader.ReadByte();
            value.ServerIp   = reader.ReadString(32);
            value.ServerPort = reader.ReadUInt16();
            return(value);
        }
예제 #16
0
        public JT809_0x9200_0x9201 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x9200_0x9201();

            value.DataType = reader.ReadUInt16();
            value.MsgSn    = reader.ReadUInt32();
            value.Result   = (JT809_0x9201_Result)reader.ReadByte();
            return(value);
        }
예제 #17
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            JT809_JT1078_0x9B00_0x9B02 value = new JT809_JT1078_0x9B00_0x9B02();

            value.Result = (JT809_JT1078_0x9B00_0x9B02_Result)reader.ReadByte();
            writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString());
            value.SessionId = reader.ReadUInt16();
            writer.WriteNumber($"[{value.SessionId.ReadNumber()}]对应平台文件上传消息的流水号", value.SessionId);
        }
예제 #18
0
        public JT809_0x1001 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x1001 jT809_0X1001 = new JT809_0x1001();

            jT809_0X1001.UserId       = reader.ReadUInt32();
            jT809_0X1001.Password     = reader.ReadString(8);
            jT809_0X1001.DownLinkIP   = reader.ReadString(32);
            jT809_0X1001.DownLinkPort = reader.ReadUInt16();
            return(jT809_0X1001);
        }
예제 #19
0
        public JT809_0x9200_0x920D Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x9200_0x920D();

            value.DRVLineID    = reader.ReadUInt32();
            value.Result       = reader.ReadByte();
            value.ReasonLength = reader.ReadUInt16();
            value.Reason       = reader.ReadString(value.ReasonLength);
            return(value);
        }
예제 #20
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            var value = new JT809_0x1400_0x1412();

            value.SourceDataType = reader.ReadUInt16();
            writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
            value.SourceMsgSn = reader.ReadUInt32();
            writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
            value.Result = (JT809_0x1412_Result)reader.ReadByte();
            writer.WriteString($"[{value.Result.ToByteValue()}]报警处理结果", value.Result.ToString());
        }
예제 #21
0
        public JT809_0x9102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x9102 value = new JT809_0x9102();

            value.SubBusinessType = reader.ReadUInt16();
            value.DataLength      = reader.ReadUInt32();
            value.PlateformId     = reader.ReadString(11);
            value.StartTime       = reader.ReadUTCDateTime();
            value.EndTime         = reader.ReadUTCDateTime();
            return(value);
        }
예제 #22
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            var value = new JT809_0x9200_0x9201();

            value.DataType = reader.ReadUInt16();
            writer.WriteNumber($"[{value.DataType.ReadNumber()}]车辆注册醒醒消息源子业务类型标识", value.DataType);
            value.MsgSn = reader.ReadUInt32();
            writer.WriteNumber($"[{value.MsgSn.ReadNumber()}]车辆注册信息消息源报文序号", value.MsgSn);
            value.Result = (JT809_0x9201_Result)reader.ReadByte();
            writer.WriteString($"[{value.Result.ToByteValue()}]处理结果", value.Result.ToString());
        }
예제 #23
0
        public JT809_0x9400_0x9403 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x9400_0x9403 jT809_0X9400_0X9403 = new JT809_0x9400_0x9403();

            jT809_0X9400_0X9403.WarnSrc     = (JT809WarnSrc)reader.ReadByte();
            jT809_0X9400_0X9403.WarnType    = (JT809WarnType)reader.ReadUInt16();
            jT809_0X9400_0X9403.WarnTime    = reader.ReadUTCDateTime();
            jT809_0X9400_0X9403.WarnLength  = reader.ReadUInt32();
            jT809_0X9400_0X9403.WarnContent = reader.ReadString((int)jT809_0X9400_0X9403.WarnLength);
            return(jT809_0X9400_0X9403);
        }
예제 #24
0
        public JT809_0x1600_0x1601 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x1600_0x1601 value = new JT809_0x1600_0x1601();

            if (config.Version == JT809Version.JTT2019)
            {
                value.SourceDataType = reader.ReadUInt16();
                value.SourceMsgSn    = reader.ReadUInt32();
            }
            value.CarInfo = reader.ReadRemainStringContent();
            return(value);
        }
예제 #25
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            JT809_JT1078_0x1A00_0x1A01 value = new JT809_JT1078_0x1A00_0x1A01();
            var virtualHex = reader.ReadVirtualArray(32);

            value.ServerIp = reader.ReadString(32);
            writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]企业视频服务器ip地址", value.ServerIp);
            value.ServerPort = reader.ReadUInt16();
            writer.WriteNumber($"[{value.ServerPort.ReadNumber()}]企业视频服务器端口号", value.ServerPort);
            value.Result = (JT809_JT1078_0x1A00_0x1A01_Result)reader.ReadByte();
            writer.WriteString($"[{((byte)value.Result).ReadNumber()}]应答结果", value.Result.ToString());
        }
예제 #26
0
        public JT809_0x1200_0x1206 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x1200_0x1206();

            if (config.Version == JT809Version.JTT2019)
            {
                value.SourceDataType = reader.ReadUInt16();
                value.SourceMsgSN    = reader.ReadUInt32();
                value.DataLength     = reader.ReadUInt32();
            }
            return(value);
        }
예제 #27
0
        public JT809_0x1400_0x1402 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x1400_0x1402 jT809_0X1400_0X1402 = new JT809_0x1400_0x1402();

            jT809_0X1400_0X1402.WarnSrc     = (JT809WarnSrc)reader.ReadByte();
            jT809_0X1400_0X1402.WarnType    = (JT809WarnType)reader.ReadUInt16();
            jT809_0X1400_0X1402.WarnTime    = reader.ReadUTCDateTime();
            jT809_0X1400_0X1402.InfoID      = reader.ReadUInt32();
            jT809_0X1400_0X1402.InfoLength  = reader.ReadUInt32();
            jT809_0X1400_0X1402.InfoContent = reader.ReadString((int)jT809_0X1400_0X1402.InfoLength);
            return(jT809_0X1400_0X1402);
        }
예제 #28
0
        public JT809_0x9200_0x9209 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            var value = new JT809_0x9200_0x9209();

            if (config.Version == JT809Version.JTT2019)
            {
                value.SourceDataType = reader.ReadUInt16();
                value.SourceMsgSn    = reader.ReadUInt32();
            }
            value.Result = (JT809_0x9209_Result)reader.ReadByte();
            return(value);
        }
예제 #29
0
        public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
        {
            JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202();

            if (config.Version == JT809Version.JTT2011)
            {
                value.VehiclePosition           = new JT809VehiclePositionProperties();
                value.VehiclePosition.Encrypt   = (JT809_VehiclePositionEncrypt)reader.ReadByte();
                value.VehiclePosition.Day       = reader.ReadByte();
                value.VehiclePosition.Month     = reader.ReadByte();
                value.VehiclePosition.Year      = reader.ReadUInt16();
                value.VehiclePosition.Hour      = reader.ReadByte();
                value.VehiclePosition.Minute    = reader.ReadByte();
                value.VehiclePosition.Second    = reader.ReadByte();
                value.VehiclePosition.Lon       = reader.ReadUInt32();
                value.VehiclePosition.Lat       = reader.ReadUInt32();
                value.VehiclePosition.Vec1      = reader.ReadUInt16();
                value.VehiclePosition.Vec2      = reader.ReadUInt16();
                value.VehiclePosition.Vec3      = reader.ReadUInt32();
                value.VehiclePosition.Direction = reader.ReadUInt16();
                value.VehiclePosition.Altitude  = reader.ReadUInt16();
                value.VehiclePosition.State     = reader.ReadUInt32();
                value.VehiclePosition.Alarm     = reader.ReadUInt32();
            }
            else
            {
                value.GNSSData            = new JT809VehiclePositionProperties_2019();
                value.GNSSData.Encrypt    = (JT809_VehiclePositionEncrypt)reader.ReadByte();
                value.GNSSData.DataLength = reader.ReadUInt32();
#warning 引用808的0x0200协议
                value.GNSSData.GnssData    = reader.ReadArray((int)value.GNSSData.DataLength).ToArray();
                value.GNSSData.PlatformId1 = reader.ReadString(11);
                value.GNSSData.Alarm1      = reader.ReadUInt32();
                value.GNSSData.PlatformId2 = reader.ReadString(11);
                value.GNSSData.Alarm2      = reader.ReadUInt32();
                value.GNSSData.PlatformId3 = reader.ReadString(11);
                value.GNSSData.Alarm3      = reader.ReadUInt32();
            }
            return(value);
        }
예제 #30
0
        public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
        {
            var value = new JT809_0x1400_0x1402();

            if (config.Version == JT809Version.JTT2011)
            {
                value.WarnSrc = (JT809WarnSrc)reader.ReadByte();
                writer.WriteString($"[{value.WarnSrc.ToByteValue()}]报警信息来源", value.WarnSrc.ToString());
            }
            else
            {
                var virtualHex = reader.ReadVirtualArray(11);
                value.SourcePlatformId = reader.ReadString(11);
                writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]发起报警平台唯一编码", value.SourcePlatformId);
            }
            value.WarnType = (JT809WarnType)reader.ReadUInt16();
            writer.WriteString($"[{value.WarnType.ToByteValue()}]报警类型", value.WarnType.ToString());
            var hex = reader.ReadVirtualArray(8);

            value.WarnTime = reader.ReadUTCDateTime();
            writer.WriteString($"[{hex.ToArray().ToHexString()}]报警时间", value.WarnTime);
            if (config.Version == JT809Version.JTT2011)
            {
                value.InfoID = reader.ReadUInt32();
                writer.WriteNumber($"[{value.InfoID.ReadNumber()}]信息ID", value.InfoID);
            }
            else
            {
                hex             = reader.ReadVirtualArray(8);
                value.StartTime = reader.ReadUTCDateTime();
                writer.WriteString($"[{hex.ToArray().ToHexString()}]事件开始时间", value.StartTime);
                hex           = reader.ReadVirtualArray(8);
                value.EndTime = reader.ReadUTCDateTime();
                writer.WriteString($"[{hex.ToArray().ToHexString()}]事件结束时间", value.EndTime);
#warning 此处车牌号文档长度有误,使用旧版长度21
                hex             = reader.ReadVirtualArray(21);
                value.VehicleNo = reader.ReadString(21);
                writer.WriteString($"[{hex.ToArray().ToHexString()}]车牌号码", value.VehicleNo);
                value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
                writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString());
                hex = reader.ReadVirtualArray(11);
                value.DestinationPlatformId = reader.ReadString(11);
                writer.WriteString($"[{hex.ToArray().ToHexString()}]被报警平台唯一编码", value.DestinationPlatformId);
                value.DRVLineId = reader.ReadUInt32();
                writer.WriteNumber($"[{value.DRVLineId.ReadNumber()}]线路ID", value.DRVLineId);
            }
            value.InfoLength = reader.ReadUInt32();
            writer.WriteNumber($"[{value.InfoLength.ReadNumber()}]数据长度", value.InfoLength);
            hex = reader.ReadVirtualArray((int)value.InfoLength);
            value.InfoContent = reader.ReadString((int)value.InfoLength);
            writer.WriteString($"[{hex.ToArray().ToHexString()}]信息内容", value.InfoContent);
        }