Beispiel #1
0
        /// <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();
            }
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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();
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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();
        }
Beispiel #10
0
        /// <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();
        }
Beispiel #13
0
        /// <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();
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
 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);
     }
 }
Beispiel #17
0
        /// <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);
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        /// <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();
        }
Beispiel #22
0
        /// <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"));
        }
Beispiel #24
0
        /// <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());
                }
        }
Beispiel #26
0
        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);
        }
Beispiel #28
0
        /// <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();
            }
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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);
        }