public void Test1()
 {
     var list0 = JT808EnumExtensions.ParseAlarmStatus(5);
     var list1 = JT808EnumExtensions.ParseAlarmStatus(16);
     var list2 = JT808EnumExtensions.ParseAlarmStatus(18);
     var list3 = JT808EnumExtensions.ParseAlarmStatus(24);
     var list4 = JT808EnumExtensions.ParseAlarmStatus(31);
 }
예제 #2
0
 public void Test1()
 {
     var list0 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(5, 32);
     var list1 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(16, 32);
     var list2 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(18, 32);
     var list3 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(24, 32);
     var list4 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(31, 32);
 }
예제 #3
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_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.VideoRelateAlarm = reader.ReadUInt32();
            writer.WriteNumber($"[{value.VideoRelateAlarm.ReadNumber()}]视频相关报警", value.VideoRelateAlarm);
            var videoRelateAlarmFlags = JT808EnumExtensions.GetEnumTypes <VideoRelateAlarmType>(value.VideoRelateAlarm, 32);

            if (videoRelateAlarmFlags.Any())
            {
                writer.WriteStartArray("视频报警集合");
                foreach (var item in videoRelateAlarmFlags)
                {
                    writer.WriteStringValue(item.ToString());
                }
                writer.WriteEndArray();
            }
        }
예제 #4
0
        public void Test1()
        {
            var list0 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(5, 32);
            var list1 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(16, 32);
            var list2 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(18, 32);
            var list3 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(24, 32);
            var list4 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(31, 32);
            var list5 = JT808EnumExtensions.GetEnumTypes <JT808.Protocol.Enums.JT808Alarm>(2147483679, 33);

            Assert.Equal(list0, new List <JT808Alarm>()
            {
                JT808Alarm.紧急报警_触动报警开关后触发, JT808Alarm.疲劳驾驶
            });
            Assert.Equal(list1, new List <JT808Alarm>()
            {
                JT808Alarm.GNSS模块发生故障
            });
            Assert.Equal(list2, new List <JT808Alarm>()
            {
                JT808Alarm.超速报警, JT808Alarm.GNSS模块发生故障
            });
            Assert.Equal(list3, new List <JT808Alarm>()
            {
                JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障
            });
            Assert.Equal(list3, new List <JT808Alarm>()
            {
                JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障
            });
            Assert.Equal(list4, new List <JT808Alarm>()
            {
                JT808Alarm.紧急报警_触动报警开关后触发, JT808Alarm.超速报警, JT808Alarm.疲劳驾驶, JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障
            });
            Assert.Equal(list5, new List <JT808Alarm>()
            {
                JT808Alarm.紧急报警_触动报警开关后触发, JT808Alarm.超速报警, JT808Alarm.疲劳驾驶, JT808Alarm.危险预警, JT808Alarm.GNSS模块发生故障, JT808Alarm.非法开门报警
            });
        }
예제 #5
0
        public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
        {
            JT808_0x0200 value = new JT808_0x0200();

            value.AlarmFlag = reader.ReadUInt32();
            writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag);
            var alarmFlags = JT808EnumExtensions.GetEnumTypes <JT808Alarm>((int)value.AlarmFlag, 32);

            if (alarmFlags.Any())
            {
                writer.WriteStartArray("报警标志集合");
                foreach (var item in alarmFlags)
                {
                    writer.WriteStringValue(item.ToString());
                }
                writer.WriteEndArray();
            }
            value.StatusFlag = reader.ReadUInt32();
            writer.WriteNumber($"[{value.StatusFlag.ReadNumber()}]状态位标志", value.StatusFlag);
            var status = JT808EnumExtensions.GetEnumTypes <JT808Status>((int)value.StatusFlag, 32);

            if (status.Any())
            {
                writer.WriteStartArray("状态标志集合");
                foreach (var item in status)
                {
                    writer.WriteStringValue(item.ToString());
                }
                writer.WriteEndArray();
            }
            if (((value.StatusFlag >> 28) & 1) == 1)
            {   //南纬 268435456 0x10000000
                value.Lat = (int)reader.ReadUInt32();
                writer.WriteNumber($"[{value.Lat.ReadNumber()}]纬度", value.Lat);
            }
            else
            {
                value.Lat = reader.ReadInt32();
                writer.WriteNumber($"[{value.Lat.ReadNumber()}]纬度", value.Lat);
            }
            if (((value.StatusFlag >> 27) & 1) == 1)
            {   //西经 ‭134217728‬ 0x8000000
                value.Lng = (int)reader.ReadUInt32();
                writer.WriteNumber($"[{value.Lng.ReadNumber()}]经度", value.Lng);
            }
            else
            {
                value.Lng = reader.ReadInt32();
                writer.WriteNumber($"[{value.Lng.ReadNumber()}]经度", value.Lng);
            }
            value.Altitude = reader.ReadUInt16();
            writer.WriteNumber($"[{value.Altitude.ReadNumber()}]高程", value.Altitude);
            value.Speed = reader.ReadUInt16();
            writer.WriteNumber($"[{value.Speed.ReadNumber()}]速度", value.Speed);
            value.Direction = reader.ReadUInt16();
            writer.WriteNumber($"[{value.Direction.ReadNumber()}]方向", value.Direction);
            value.GPSTime = reader.ReadDateTime6();
            writer.WriteString($"[{value.GPSTime.ToString("yyMMddHHmmss")}]定位时间", value.GPSTime.ToString("yyyy-MM-dd HH:mm:ss"));
            // 位置附加信息
            writer.WriteStartArray("附加信息列表");
            while (reader.ReadCurrentRemainContentLength() > 0)
            {
                try
                {
                    ReadOnlySpan <byte> attachSpan = reader.GetVirtualReadOnlySpan(2);
                    byte attachId  = attachSpan[0];
                    byte attachLen = attachSpan[1];
                    if (config.JT808_0X0200_Factory.Map.TryGetValue(attachId, out object jT808LocationAttachInstance))
                    {
                        writer.WriteStartObject();
                        jT808LocationAttachInstance.Analyze(ref reader, writer, config);
                        writer.WriteEndObject();
                    }
                    else if (config.JT808_0X0200_Custom_Factory.Map.TryGetValue(attachId, out object customAttachInstance))
                    {
                        writer.WriteStartObject();
                        customAttachInstance.Analyze(ref reader, writer, config);
                        writer.WriteEndObject();
                    }
                    else
                    {
                        writer.WriteStartObject();
                        reader.Skip(2);
                        writer.WriteNumber($"[{attachId.ReadNumber()}]未知附加信息Id", attachId);
                        writer.WriteNumber($"[{attachLen.ReadNumber()}]未知附加信息长度", attachLen);
                        writer.WriteString($"未知附加信息", reader.ReadArray(reader.ReaderCount - 2, attachLen + 2).ToArray().ToHexString());
                        reader.Skip(attachLen);
                        writer.WriteEndObject();
                    }
                }
                catch
                {
                    writer.WriteStartObject();
                    try
                    {
                        byte attachId  = reader.ReadByte();
                        byte attachLen = reader.ReadByte();
                        writer.WriteNumber($"[{attachId.ReadNumber()}]未知附加信息Id", attachId);
                        writer.WriteNumber($"[{attachLen.ReadNumber()}]未知附加信息长度", attachLen);
                        writer.WriteString($"未知附加信息", reader.ReadArray(reader.ReaderCount - 2, attachLen + 2).ToArray().ToHexString());
                        reader.Skip(attachLen);
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                    finally
                    {
                        writer.WriteEndObject();
                    }
                }
            }
            writer.WriteEndArray();
        }