/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="writer"></param> /// <param name="config"></param> public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8900_0xF7 value = new JT808_0x8900_0xF7(); value.USBCount = reader.ReadByte(); writer.WriteNumber($"[{value.USBCount.ReadNumber()}]外设ID列表总数", value.USBCount); if (value.USBCount > 0) { writer.WriteStartArray("外设ID列表"); for (int i = 0; i < value.USBCount; i++) { writer.WriteStartObject(); byte usbId = reader.ReadByte(); writer.WriteNumber($"[{usbId.ReadNumber()}]外设ID", usbId); writer.WriteEndObject(); } writer.WriteEndArray(); } }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x1205 value = new JT808_0x1205(); value.MsgNum = reader.ReadUInt16(); writer.WriteNumber($"[{value.MsgNum.ReadNumber()}]流水号", value.MsgNum); value.AVResouceTotal = reader.ReadUInt32(); writer.WriteNumber($"[{value.AVResouceTotal.ReadNumber()}]音视频资源总数", value.AVResouceTotal); writer.WriteStartArray("音视频资源列表"); var formatter = config.GetMessagePackFormatter <JT808_0x1205_AVResouce>(); for (int i = 0; i < value.AVResouceTotal; i++) { writer.WriteStartObject(); formatter.Analyze(ref reader, writer, config); writer.WriteEndObject(); } writer.WriteEndArray(); }
public JT808_0x1205 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x1205 jT808_0x1205 = new JT808_0x1205(); jT808_0x1205.MsgNum = reader.ReadUInt16(); jT808_0x1205.AVResouceTotal = reader.ReadUInt32(); var channelTotal = jT808_0x1205.AVResouceTotal;//音视频资源总数 if (channelTotal > 0) { jT808_0x1205.AVResouces = new List <JT808_0x1205_AVResouce>(); var formatter = config.GetMessagePackFormatter <JT808_0x1205_AVResouce>(); for (int i = 0; i < channelTotal; i++) { jT808_0x1205.AVResouces.Add(formatter.Deserialize(ref reader, config)); } } return(jT808_0x1205); }
public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8103_0xF366 value = new JT808_0x8103_0xF366(); value.ParamId = reader.ReadUInt32(); value.ParamLength = reader.ReadByte(); value.TyreSpecificationType = reader.ReadString(12); value.TyrePressureUnit = reader.ReadUInt16(); value.NormalFetalPressure = reader.ReadUInt16(); value.ThresholdUnbalancedTirePressure = reader.ReadUInt16(); value.SlowLeakageThreshold = reader.ReadUInt16(); value.LowVoltageThreshold = reader.ReadUInt16(); value.HighVoltageThreshold = reader.ReadUInt16(); value.HighTemperatureThreshold = reader.ReadUInt16(); value.VoltageThreshold = reader.ReadUInt16(); value.TimedReportingInterval = reader.ReadUInt16(); value.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); return(value); }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x0200_0x14 value = new JT808_0x0200_0x14(); value.AttachInfoId = reader.ReadByte(); writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); value.AttachInfoLength = reader.ReadByte(); writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); value.AlarmTag = reader.ReadUInt32(); writer.WriteStartArray($"[{value.AlarmTag.ReadNumber()}]视频报警标志位"); writer.WriteStringValue((value.AlarmTag & 01) > 0 ? "视频信号丢失报警" : "视频信号丢失报警解除"); writer.WriteStringValue((value.AlarmTag & 02) > 0 ? "主存储器故障报警" : "主存储器故障报警解除"); writer.WriteStringValue((value.AlarmTag & 04) > 0 ? "灾备存储单元故障报警" : "灾备存储单元故障报警解除"); writer.WriteStringValue((value.AlarmTag & 08) > 0 ? "其他视频设备故障报警" : "其他视频设备故障报警解除"); writer.WriteStringValue((value.AlarmTag & 16) > 0 ? "客车超载报警" : "客车超载报警解除"); writer.WriteStringValue((value.AlarmTag & 32) > 0 ? "异常驾驶行为报警" : "异常驾驶行为报警解除"); writer.WriteStringValue((value.AlarmTag & 64) > 0 ? "特殊报警录像达到存储阈值报警" : "收到应答后清零,占用存储容量发生变化后再次报警"); writer.WriteEndArray(); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x8108 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8108 jT808_0X8108 = new JT808_0x8108(); jT808_0X8108.UpgradeType = (JT808UpgradeType)reader.ReadByte(); if (reader.Version == JT808Version.JTT2019) { jT808_0X8108.MakerId = reader.ReadString(11); } else { jT808_0X8108.MakerId = reader.ReadString(5); } jT808_0X8108.VersionNumLength = reader.ReadByte(); jT808_0X8108.VersionNum = reader.ReadString(jT808_0X8108.VersionNumLength); jT808_0X8108.UpgradePackageLength = reader.ReadInt32(); jT808_0X8108.UpgradePackage = reader.ReadArray(jT808_0X8108.UpgradePackageLength).ToArray(); return(jT808_0X8108); }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x0200_0x17 value = new JT808_0x0200_0x17(); value.AttachInfoId = reader.ReadByte(); writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); value.AttachInfoLength = reader.ReadByte(); writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); value.StorageFaultAlarmStatus = reader.ReadUInt16(); writer.WriteNumber($"[{value.StorageFaultAlarmStatus.ReadNumber()}]存储器故障报警状态", value.StorageFaultAlarmStatus); var storageFaultAlarmStatusSpan = Convert.ToString(value.StorageFaultAlarmStatus, 2).PadLeft(16, '0').AsSpan(); writer.WriteStartArray("存储器故障报警状态集合"); int index = 0; foreach (var item in storageFaultAlarmStatusSpan) { if (index < 4) { if (item == '1') { writer.WriteStringValue($"{index}灾备存储装置故障"); } else { writer.WriteStringValue($"{index}灾备存储装置正常"); } } else { if (item == '1') { writer.WriteStringValue($"{index}主存储器故障"); } else { writer.WriteStringValue($"{index}主存储器正常"); } } index++; } writer.WriteEndArray(); }
public JT808_0x8606 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8606 jT808_0X8606 = new JT808_0x8606(); jT808_0X8606.RouteId = reader.ReadUInt32(); jT808_0X8606.RouteProperty = reader.ReadUInt16(); ReadOnlySpan <char> routeProperty16Bit = Convert.ToString(jT808_0X8606.RouteProperty, 2).PadLeft(16, '0').AsSpan(); bool bit0Flag = routeProperty16Bit.Slice(routeProperty16Bit.Length - 1).ToString().Equals("0"); if (!bit0Flag) { jT808_0X8606.StartTime = reader.ReadDateTime6(); jT808_0X8606.EndTime = reader.ReadDateTime6(); } jT808_0X8606.InflectionPointCount = reader.ReadUInt16(); jT808_0X8606.InflectionPointItems = new List <JT808InflectionPointProperty>(); for (var i = 0; i < jT808_0X8606.InflectionPointCount; i++) { JT808InflectionPointProperty jT808InflectionPointProperty = new JT808InflectionPointProperty(); jT808InflectionPointProperty.InflectionPointId = reader.ReadUInt32(); jT808InflectionPointProperty.SectionId = reader.ReadUInt32(); jT808InflectionPointProperty.InflectionPointLat = reader.ReadUInt32(); jT808InflectionPointProperty.InflectionPointLng = reader.ReadUInt32(); jT808InflectionPointProperty.SectionWidth = reader.ReadByte(); jT808InflectionPointProperty.SectionProperty = reader.ReadByte(); ReadOnlySpan <char> sectionProperty16Bit = Convert.ToString(jT808InflectionPointProperty.SectionProperty, 2).PadLeft(16, '0').AsSpan(); bool sectionBit0Flag = sectionProperty16Bit.Slice(sectionProperty16Bit.Length - 1).ToString().Equals("0"); if (!sectionBit0Flag) { jT808InflectionPointProperty.SectionLongDrivingThreshold = reader.ReadUInt16(); jT808InflectionPointProperty.SectionDrivingUnderThreshold = reader.ReadUInt16(); } bool sectionBit1Flag = sectionProperty16Bit.Slice(sectionProperty16Bit.Length - 2, 1).ToString().Equals("0"); if (!sectionBit1Flag) { jT808InflectionPointProperty.SectionHighestSpeed = reader.ReadUInt16(); jT808InflectionPointProperty.SectionOverspeedDuration = reader.ReadByte(); } jT808_0X8606.InflectionPointItems.Add(jT808InflectionPointProperty); } return(jT808_0X8606); }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_CarDVR_Up_0x11 value = new JT808_CarDVR_Up_0x11(); writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); var count = (reader.ReadCurrentRemainContentLength() - 1) / 50;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x11_DriveOverTime jT808_CarDVR_Up_0x11_DriveOverTime = new JT808_CarDVR_Up_0x11_DriveOverTime(); writer.WriteStartObject(); writer.WriteStartObject($"指定的结束时间前最近的第 {i+1}条超时驾驶记录"); var hex = reader.ReadVirtualArray(18); jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo = reader.ReadASCII(18); writer.WriteString($"[{hex.ToArray().ToHexString()}机动车驾驶证号码]", jT808_CarDVR_Up_0x11_DriveOverTime.DriverLicenseNo); hex = reader.ReadVirtualArray(6); jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime = reader.ReadDateTime6(); writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶开始时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingStartTime); hex = reader.ReadVirtualArray(6); jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime = reader.ReadDateTime6(); writer.WriteString($"[{hex.ToArray().ToHexString()}连续驾驶结束时间]", jT808_CarDVR_Up_0x11_DriveOverTime.ContinueDrivingEndTime); writer.WriteStartObject("连续驾驶开始时间所在的最近一次有效位置信息"); jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng = reader.ReadInt32(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLng); jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat = reader.ReadInt32(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat.ReadNumber()}纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsStartLat); jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight = reader.ReadInt16(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.StartHeight); writer.WriteEndObject(); writer.WriteStartObject("连续驾驶结束时间所在的最近一次有效位置信息"); jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng = reader.ReadInt32(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng.ReadNumber()}]经度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLng); jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat = reader.ReadInt32(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat.ReadNumber()}]纬度", jT808_CarDVR_Up_0x11_DriveOverTime.GpsEndLat); jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight = reader.ReadInt16(); writer.WriteNumber($"[{ jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight.ReadNumber()}]高度", jT808_CarDVR_Up_0x11_DriveOverTime.EndHeight); writer.WriteEndObject(); writer.WriteEndObject(); writer.WriteEndObject(); } writer.WriteEndArray(); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x8602 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8602 jT808_0X8602 = new JT808_0x8602(); jT808_0X8602.SettingAreaProperty = reader.ReadByte(); jT808_0X8602.AreaCount = reader.ReadByte(); jT808_0X8602.AreaItems = new List <JT808RectangleAreaProperty>(); for (var i = 0; i < jT808_0X8602.AreaCount; i++) { JT808RectangleAreaProperty areaProperty = new JT808RectangleAreaProperty(); areaProperty.AreaId = reader.ReadUInt32(); areaProperty.AreaProperty = reader.ReadUInt16(); areaProperty.UpLeftPointLat = reader.ReadUInt32(); areaProperty.UpLeftPointLng = reader.ReadUInt32(); areaProperty.LowRightPointLat = reader.ReadUInt32(); areaProperty.LowRightPointLng = reader.ReadUInt32(); ReadOnlySpan <char> areaProperty16Bit = Convert.ToString(areaProperty.AreaProperty, 2).PadLeft(16, '0').AsSpan(); bool bit0Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 1).ToString().Equals("0"); if (!bit0Flag) { areaProperty.StartTime = reader.ReadDateTime6(); areaProperty.EndTime = reader.ReadDateTime6(); } bool bit1Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 2, 1).ToString().Equals("0"); if (!bit1Flag) { areaProperty.HighestSpeed = reader.ReadUInt16(); areaProperty.OverspeedDuration = reader.ReadByte(); if (reader.Version == JT808Version.JTT2019) { areaProperty.NightMaximumSpeed = reader.ReadUInt16(); } } if (reader.Version == JT808Version.JTT2019) { areaProperty.NameLength = reader.ReadUInt16(); areaProperty.AreaName = reader.ReadString(areaProperty.NameLength); } jT808_0X8602.AreaItems.Add(areaProperty); } return(jT808_0X8602); }
public JT808_0x8103_0xF365 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8103_0xF365 jT808_0X8103_0XF365 = new JT808_0x8103_0xF365(); jT808_0X8103_0XF365.ParamId = reader.ReadUInt32(); jT808_0X8103_0XF365.ParamLength = reader.ReadByte(); jT808_0X8103_0XF365.AlarmJudgeSpeedThreshold = reader.ReadByte(); jT808_0X8103_0XF365.WarningVolume = reader.ReadByte(); jT808_0X8103_0XF365.ActivePhotographyStrategy = reader.ReadByte(); jT808_0X8103_0XF365.ActivelyTimePhotoInterval = reader.ReadUInt16(); jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16(); jT808_0X8103_0XF365.SingleInitiativePhotos = reader.ReadByte(); jT808_0X8103_0XF365.SingleInitiativePhotosInterval = reader.ReadByte(); jT808_0X8103_0XF365.PhotoResolution = reader.ReadByte(); jT808_0X8103_0XF365.VideoRecordingResolution = reader.ReadByte(); jT808_0X8103_0XF365.AlarmEnable = reader.ReadUInt32(); jT808_0X8103_0XF365.EventEnable = reader.ReadUInt32(); jT808_0X8103_0XF365.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16(); jT808_0X8103_0XF365.CallAlarmDetermineTimeInterval = reader.ReadUInt16(); jT808_0X8103_0XF365.Reserve = reader.ReadArray(3).ToArray(); jT808_0X8103_0XF365.GradedSpeedThresholdFatigueDrivingAlarm = reader.ReadByte(); jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = reader.ReadByte(); jT808_0X8103_0XF365.FatigueDrivingAlarmPhotograph = reader.ReadByte(); jT808_0X8103_0XF365.FatigueDrivingAlarmPhotographInterval = reader.ReadByte(); jT808_0X8103_0XF365.ClassifiedSpeedThresholdCallAlarm = reader.ReadByte(); jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm = reader.ReadByte(); jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeatures = reader.ReadByte(); jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeaturesInterval = reader.ReadByte(); jT808_0X8103_0XF365.ClassifiedSpeedThresholdSmokingAlarm = reader.ReadByte(); jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm = reader.ReadByte(); jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte(); jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte(); jT808_0X8103_0XF365.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte(); jT808_0X8103_0XF365.DistractedDrivingAlarmPhotography = reader.ReadByte(); jT808_0X8103_0XF365.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte(); jT808_0X8103_0XF365.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte(); jT808_0X8103_0XF365.PhotographsAbnormalDrivingBehavior = reader.ReadByte(); jT808_0X8103_0XF365.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte(); jT808_0X8103_0XF365.DriverIdentificationTrigger = reader.ReadByte(); jT808_0X8103_0XF365.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray(); return(jT808_0X8103_0XF365); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="writer"></param> /// <param name="config"></param> public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { writer.WriteStartArray("请求发送指定的时间范围内 N 个单位数据块的数据"); var count = (reader.ReadCurrentRemainContentLength() - 1) / 7;//记录块个数, -1 去掉校验位 for (int i = 0; i < count; i++) { JT808_CarDVR_Up_0x14_ParameterModify jT808_CarDVR_Up_0x14_ParameterModify = new JT808_CarDVR_Up_0x14_ParameterModify(); writer.WriteStartObject(); writer.WriteStartObject($"指定的结束时间之前最近的第{i+1}条参数修改记录"); var hex = reader.ReadVirtualArray(6); jT808_CarDVR_Up_0x14_ParameterModify.EventTime = reader.ReadDateTime6(); writer.WriteString($"[{hex.ToArray().ToHexString()}]事件发生时间", jT808_CarDVR_Up_0x14_ParameterModify.EventTime); jT808_CarDVR_Up_0x14_ParameterModify.EventType = reader.ReadByte(); writer.WriteString($"[{ jT808_CarDVR_Up_0x14_ParameterModify.EventType.ReadNumber()}]事件类型", ((JT808CarDVRCommandID)jT808_CarDVR_Up_0x14_ParameterModify.EventType).ToString()); writer.WriteEndObject(); writer.WriteEndObject(); } writer.WriteEndArray(); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="writer"></param> /// <param name="config"></param> public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8800 value = new JT808_0x8800(); value.MultimediaId = reader.ReadUInt32(); value.RetransmitPackageCount = reader.ReadByte(); value.RetransmitPackageIds = reader.ReadArray(value.RetransmitPackageCount * 2).ToArray(); writer.WriteNumber($"[{ value.MultimediaId.ReadNumber()}]多媒体ID", value.MultimediaId); writer.WriteNumber($"[{ value.RetransmitPackageCount.ReadNumber()}]重传包总数", value.RetransmitPackageCount); writer.WriteString($"重传包", value.RetransmitPackageIds.ToHexString()); writer.WriteStartArray($"重传包ID列表"); ReadOnlySpan <byte> tmp = value.RetransmitPackageIds; for (int i = 0; i < value.RetransmitPackageCount; i++) { writer.WriteStringValue($"{tmp.Slice(i*2 , 2).ToArray().ToHexString()}"); } writer.WriteEndArray(); }
public JT808_0x0802 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0802 value = new JT808_0x0802(); value.MsgNum = reader.ReadUInt16(); value.MultimediaItemCount = reader.ReadUInt16(); value.MultimediaSearchItems = new List <JT808MultimediaSearchProperty>(); for (var i = 0; i < value.MultimediaItemCount; i++) { JT808MultimediaSearchProperty jT808MultimediaSearchProperty = new JT808MultimediaSearchProperty(); jT808MultimediaSearchProperty.MultimediaId = reader.ReadUInt32(); jT808MultimediaSearchProperty.MultimediaType = reader.ReadByte(); jT808MultimediaSearchProperty.ChannelId = reader.ReadByte(); jT808MultimediaSearchProperty.EventItemCoding = reader.ReadByte(); JT808MessagePackReader positionReader = new JT808MessagePackReader(reader.ReadArray(28)); jT808MultimediaSearchProperty.Position = config.GetMessagePackFormatter <JT808_0x0200>().Deserialize(ref positionReader, config); value.MultimediaSearchItems.Add(jT808MultimediaSearchProperty); } return(value); }
public JT808_0x8103_0x0075 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8103_0x0075 jT808_0X8103_0X0075 = new JT808_0x8103_0x0075(); jT808_0X8103_0X0075.ParamId = reader.ReadUInt32(); jT808_0X8103_0X0075.ParamLength = reader.ReadByte(); jT808_0X8103_0X0075.RTS_EncodeMode = reader.ReadByte(); jT808_0X8103_0X0075.RTS_Resolution = reader.ReadByte(); jT808_0X8103_0X0075.RTS_KF_Interval = reader.ReadUInt16(); jT808_0X8103_0X0075.RTS_Target_FPS = reader.ReadByte(); jT808_0X8103_0X0075.RTS_Target_CodeRate = reader.ReadUInt32(); jT808_0X8103_0X0075.StreamStore_EncodeMode = reader.ReadByte(); jT808_0X8103_0X0075.StreamStore_Resolution = reader.ReadByte(); jT808_0X8103_0X0075.StreamStore_KF_Interval = reader.ReadUInt16(); jT808_0X8103_0X0075.StreamStore_Target_FPS = reader.ReadByte(); jT808_0X8103_0X0075.StreamStore_Target_CodeRate = reader.ReadUInt32(); jT808_0X8103_0X0075.OSD = reader.ReadUInt16(); jT808_0X8103_0X0075.AudioOutputEnabled = reader.ReadByte(); return(jT808_0X8103_0X0075); }
public byte[] AnalyzeJsonBuffer(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default, int minBufferSize = 8096) { byte[] buffer = JT808ArrayPool.Rent(minBufferSize); try { JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); jT808MessagePackReader.Decode(buffer); using (MemoryStream memoryStream = new MemoryStream()) using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) { jT808Package.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); utf8JsonWriter.Flush(); return(memoryStream.ToArray()); } } finally { JT808ArrayPool.Return(buffer); } }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x0900_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0900_0xF7 value = new JT808_0x0900_0xF7(); value.USBMessageCount = reader.ReadByte(); if (value.USBMessageCount > 0) { value.USBMessages = new List <JT808_0x0900_0xF7_USB>(); for (int i = 0; i < value.USBMessageCount; i++) { JT808_0x0900_0xF7_USB item = new JT808_0x0900_0xF7_USB(); item.USBID = reader.ReadByte(); item.MessageLength = reader.ReadByte(); item.WorkingCondition = reader.ReadByte(); item.AlarmStatus = reader.ReadUInt32(); value.USBMessages.Add(item); } } return(value); }
public JT808_0x0705 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0705 jT808_0X0705 = new JT808_0x0705(); jT808_0X0705.CanItemCount = reader.ReadUInt16(); jT808_0X0705.FirstCanReceiveTime = reader.ReadDateTime5(); jT808_0X0705.CanItems = new List <JT808CanProperty>(); for (var i = 0; i < jT808_0X0705.CanItemCount; i++) { JT808CanProperty jT808CanProperty = new JT808CanProperty(); jT808CanProperty.CanId = reader.ReadUInt32(); jT808CanProperty.CanData = reader.ReadArray(8).ToArray(); if (jT808CanProperty.CanData.Length != 8) { throw new JT808Exception(Enums.JT808ErrorCode.NotEnoughLength, $"{nameof(jT808CanProperty.CanData)}->8"); } jT808_0X0705.CanItems.Add(jT808CanProperty); } return(jT808_0X0705); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x9208 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x9208 value = new JT808_0x9208(); value.AttachmentServerIPLength = reader.ReadByte(); value.AttachmentServerIP = reader.ReadString(value.AttachmentServerIPLength); value.AttachmentServerIPTcpPort = reader.ReadUInt16(); value.AttachmentServerIPUdpPort = reader.ReadUInt16(); value.AlarmIdentification = new AlarmIdentificationProperty { TerminalID = reader.ReadString(7), Time = reader.ReadDateTime_yyMMddHHmmss(), SN = reader.ReadByte(), AttachCount = reader.ReadByte(), Retain = reader.ReadByte() }; value.AlarmId = reader.ReadString(32); value.Retain = reader.ReadArray(16).ToArray(); return(value); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="writer"></param> /// <param name="config"></param> public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_CarDVR_Up_0x07 value = new JT808_CarDVR_Up_0x07(); var hex = reader.ReadVirtualArray(7); value.ProductionPlantCCCCertificationCode = reader.ReadASCII(7); writer.WriteString($"[{hex.ToArray().ToHexString()}]生产厂 CCC 认证代码", value.ProductionPlantCCCCertificationCode); hex = reader.ReadVirtualArray(16); value.CertifiedProductModels = reader.ReadASCII(16); writer.WriteString($"[{hex.ToArray().ToHexString()}]认证产品型号", value.CertifiedProductModels); hex = reader.ReadVirtualArray(3); value.ProductionDate = reader.ReadDateTime3(); writer.WriteString($"[{hex.ToArray().ToHexString()}]生产日期", value.ProductionDate); hex = reader.ReadVirtualArray(4); value.ProductProductionFlowNumber = reader.ReadString(4); writer.WriteString($"[{hex.ToArray().ToHexString()}]产品生产流水号", value.ProductProductionFlowNumber); hex = reader.ReadVirtualArray(5); value.Reversed = reader.ReadString(5); writer.WriteString($"[{hex.ToArray().ToHexString()}]备用", value.Reversed); }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8103_0x0077 value = new JT808_0x8103_0x0077(); value.ParamId = reader.ReadUInt32(); writer.WriteNumber($"[{value.ParamId.ReadNumber()}]参数 ID", value.ParamId); value.ParamLength = reader.ReadByte(); writer.WriteNumber($"[{value.ParamLength.ReadNumber()}]数据长度", value.ParamLength); value.NeedSetChannelTotal = reader.ReadByte(); writer.WriteNumber($"[{value.NeedSetChannelTotal.ReadNumber()}]需单独设置视频参数的通道数量", value.NeedSetChannelTotal); writer.WriteStartArray("音视频通道对照表"); for (int i = 0; i < value.NeedSetChannelTotal; i++) { writer.WriteStartObject(); var formatter = config.GetMessagePackFormatter <JT808_0x8103_0x0077_SignalChannel>(); formatter.Analyze(ref reader, writer, config); writer.WriteEndObject(); } writer.WriteEndArray(); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x8604 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8604 jT808_0X8604 = new JT808_0x8604(); jT808_0X8604.AreaId = reader.ReadUInt32(); jT808_0X8604.AreaProperty = reader.ReadUInt16(); 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 = reader.ReadDateTime6(); jT808_0X8604.EndTime = reader.ReadDateTime6(); } bool bit1Flag = areaProperty16Bit.Slice(areaProperty16Bit.Length - 2, 1).ToString().Equals("0"); if (!bit1Flag) { jT808_0X8604.HighestSpeed = reader.ReadUInt16(); jT808_0X8604.OverspeedDuration = reader.ReadByte(); } jT808_0X8604.PeakCount = reader.ReadUInt16(); jT808_0X8604.PeakItems = new List <JT808PeakProperty>(); for (var i = 0; i < jT808_0X8604.PeakCount; i++) { var item = new JT808PeakProperty(); item.Lat = reader.ReadUInt32(); item.Lng = reader.ReadUInt32(); jT808_0X8604.PeakItems.Add(item); } if (reader.Version == JT808Version.JTT2019) { if (!bit1Flag) { jT808_0X8604.NightMaximumSpeed = reader.ReadUInt16(); } jT808_0X8604.NameLength = reader.ReadUInt16(); jT808_0X8604.AreaName = reader.ReadString(jT808_0X8604.NameLength); } return(jT808_0X8604); }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8B01 value = new JT808_0x8B01(); value.GprsId = reader.ReadUInt32(); writer.WriteNumber($"[{value.GprsId.ReadNumber()}]线路编号", value.GprsId); value.GuideBoard = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.GuideBoard.Length}]路牌", value.GuideBoard); value.TrainNumber = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.TrainNumber.Length}]车次编号", value.TrainNumber); value.SelfId = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.SelfId.Length}]车辆编号", value.SelfId); value.TrafficType = reader.ReadByte(); writer.WriteNumber($"[{value.TrafficType.ReadNumber()}]业务类型-{Enum.GetName(typeof(TrafficType), value.TrafficType)}", value.TrafficType); value.DispatchType = reader.ReadByte(); writer.WriteNumber($"[{value.DispatchType.ReadNumber()}]调度类型-{Enum.GetName(typeof(DispatchType), value.DispatchType)}", value.DispatchType); value.DriverId = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.DriverId.Length}]驾驶员编号", value.DriverId); value.DriverName = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.DriverName.Length}]驾驶员姓名", value.DriverName); value.AttendantId1 = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.AttendantId1.Length}]乘务员1编号", value.AttendantId1); value.AttendantId2 = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.AttendantId2.Length}]乘务员2编号", value.AttendantId2); value.StartTime = reader.ReadDateTime6(); writer.WriteString($"[{value.StartTime:yyMMddHHmmss}]起始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); value.EndTime = reader.ReadDateTime6(); writer.WriteString($"[{value.EndTime:yyMMddHHmmss}]终止时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); value.StartStationId = reader.ReadUInt32(); writer.WriteNumber($"[{value.StartStationId.ReadNumber()}]起始站点编号", value.StartStationId); value.StartStationName = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.StartStationName.Length}]起始场站车站名称", value.StartStationName); value.EndStationId = reader.ReadUInt32(); writer.WriteNumber($"[{value.EndStationId.ReadNumber()}]终止站点编号", value.EndStationId); value.EndStationName = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.EndStationName.Length}]终止场站车站名称", value.EndStationName); value.Additional = reader.ReadStringEndChar0(); writer.WriteString($"[Length:{value.Additional.Length}]附加内容", value.Additional); value.Time = reader.ReadDateTime6(); writer.WriteString($"[{value.Time:yyMMddHHmmss}]发送通知的时间", value.Time.ToString("yyyy-MM-dd HH:mm:ss")); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="config"></param> /// <returns></returns> public JT808_0x8401 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8401 jT808_0X8401 = new JT808_0x8401(); jT808_0X8401.SettingTelephoneBook = (JT808SettingTelephoneBook)reader.ReadByte(); jT808_0X8401.ContactCount = reader.ReadByte(); List <JT808ContactProperty> jT808_0X8401s = new List <JT808ContactProperty>(); for (var i = 0; i < jT808_0X8401.ContactCount; i++) { JT808ContactProperty jT808ContactProperty = new JT808ContactProperty(); jT808ContactProperty.TelephoneBookContactType = (JT808TelephoneBookContactType)reader.ReadByte(); jT808ContactProperty.PhoneNumberLength = reader.ReadByte(); jT808ContactProperty.PhoneNumber = reader.ReadString(jT808ContactProperty.PhoneNumberLength); jT808ContactProperty.ContactLength = reader.ReadByte(); jT808ContactProperty.Contact = reader.ReadString(jT808ContactProperty.ContactLength); jT808_0X8401s.Add(jT808ContactProperty); } jT808_0X8401.JT808ContactProperties = jT808_0X8401s; return(jT808_0X8401); }
public byte[] AnalyzeJsonBuffer <T>(ReadOnlySpan <byte> bytes, JT808Version version = JT808Version.JTT2013, JsonWriterOptions options = default) { JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes, version); var analyze = jT808Config.GetAnalyze <T>(); using (MemoryStream memoryStream = new MemoryStream()) using (Utf8JsonWriter utf8JsonWriter = new Utf8JsonWriter(memoryStream, options)) { if (!CheckPackageType(typeof(T))) { utf8JsonWriter.WriteStartObject(); } analyze.Analyze(ref jT808MessagePackReader, utf8JsonWriter, jT808Config); if (!CheckPackageType(typeof(T))) { utf8JsonWriter.WriteEndObject(); } utf8JsonWriter.Flush(); return(memoryStream.ToArray()); } }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8803 value = new JT808_0x8803(); value.MultimediaType = reader.ReadByte(); value.ChannelId = reader.ReadByte(); value.EventItemCoding = reader.ReadByte(); value.StartTime = reader.ReadDateTime6(); value.EndTime = reader.ReadDateTime6(); value.MultimediaDeleted = reader.ReadByte(); JT808MultimediaType multimediaType = (JT808MultimediaType)value.MultimediaType; JT808EventItemCoding eventItemCoding = (JT808EventItemCoding)value.EventItemCoding; JT808MultimediaDeleted multimediaDeleted = (JT808MultimediaDeleted)value.MultimediaDeleted; writer.WriteNumber($"[{ value.MultimediaType.ReadNumber()}]多媒体类型-{multimediaType.ToString()}", value.MultimediaType); writer.WriteNumber($"[{ value.ChannelId.ReadNumber()}]通道ID", value.ChannelId); writer.WriteNumber($"[{ value.EventItemCoding.ReadNumber()}]事件项编码-{eventItemCoding.ToString()}", value.EventItemCoding); writer.WriteString($"[{ value.StartTime.ToString("yyMMddHHmmss")}]起始时间", value.StartTime.ToString("yyyy-MM-dd HH:mm:ss")); writer.WriteString($"[{ value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); writer.WriteNumber($"[{ value.MultimediaDeleted.ReadNumber()}]删除标志-{multimediaDeleted.ToString()}", value.MultimediaDeleted); }
public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0200_0x65 jT808_0X0200_0X65 = new JT808_0x0200_0x65(); jT808_0X0200_0X65.AttachInfoId = reader.ReadByte(); jT808_0X0200_0X65.AttachInfoLength = reader.ReadByte(); jT808_0X0200_0X65.AlarmId = reader.ReadUInt32(); jT808_0X0200_0X65.FlagState = reader.ReadByte(); jT808_0X0200_0X65.AlarmOrEventType = reader.ReadByte(); jT808_0X0200_0X65.AlarmLevel = reader.ReadByte(); jT808_0X0200_0X65.Fatigue = reader.ReadByte(); jT808_0X0200_0X65.Retain = reader.ReadArray(4).ToArray(); jT808_0X0200_0X65.Speed = reader.ReadByte(); jT808_0X0200_0X65.Altitude = reader.ReadUInt16(); jT808_0X0200_0X65.Latitude = (int)reader.ReadUInt32(); jT808_0X0200_0X65.Longitude = (int)reader.ReadUInt32(); jT808_0X0200_0X65.AlarmTime = reader.ReadDateTime6(); jT808_0X0200_0X65.VehicleState = reader.ReadUInt16(); jT808_0X0200_0X65.AlarmIdentification = JT808_AlarmIdentificationProperty_Formatter.Instance.Deserialize(ref reader, config); return(jT808_0X0200_0X65); }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <param name="writer"></param> /// <param name="config"></param> public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8608 value = new JT808_0x8608(); value.QueryType = reader.ReadByte(); value.Count = reader.ReadUInt32(); writer.WriteNumber($"[{ value.QueryType.ReadNumber()}]查询类型", value.QueryType); writer.WriteNumber($"[{ value.Count.ReadNumber()}]查询的区域或线路的ID数量", value.Count); if (value.Count > 0) { writer.WriteStartArray("Id列表"); for (int i = 0; i < value.Count; i++) { writer.WriteStartObject(); uint id = reader.ReadUInt32(); writer.WriteNumber($"[{id.ReadNumber()}]Id{i+1}", id); writer.WriteEndObject(); } writer.WriteEndArray(); } }
public JT808Header Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808Header jT808Header = new JT808Header(); // 1.消息ID jT808Header.MsgId = reader.ReadUInt16(); // 2.消息体属性 jT808Header.MessageBodyProperty = new JT808HeaderMessageBodyProperty(reader.ReadUInt16()); // 3.终端手机号 jT808Header.TerminalPhoneNo = reader.ReadBCD(config.TerminalPhoneNoLength, config.Trim); jT808Header.MsgNum = reader.ReadUInt16(); // 4.判断有无分包 if (jT808Header.MessageBodyProperty.IsPackage) { //5.读取消息包总数 jT808Header.PackgeCount = reader.ReadUInt16(); //6.读取消息包序号 jT808Header.PackageIndex = reader.ReadUInt16(); } return(jT808Header); }
public JT808_0x0702 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0702 jT808_0X0702 = new JT808_0x0702(); jT808_0X0702.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte(); jT808_0X0702.IC_Card_PlugDateTime = reader.ReadDateTime6(); if (jT808_0X0702.IC_Card_Status == JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班) { jT808_0X0702.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte(); if (jT808_0X0702.IC_Card_ReadResult == JT808ICCardReadResult.IC卡读卡成功) { jT808_0X0702.DriverUserNameLength = reader.ReadByte(); jT808_0X0702.DriverUserName = reader.ReadString(jT808_0X0702.DriverUserNameLength); jT808_0X0702.QualificationCode = reader.ReadString(20); jT808_0X0702.LicenseIssuingLength = reader.ReadByte(); jT808_0X0702.LicenseIssuing = reader.ReadString(jT808_0X0702.LicenseIssuingLength); jT808_0X0702.CertificateExpiresDate = reader.ReadDateTime4(); } } return(jT808_0X0702); }