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); }
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); }
/// <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(); } }
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.非法开门报警 }); }
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(); }