diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs index 3261cdb..056c049 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs @@ -534,6 +534,13 @@ namespace JT808.Protocol.Test.MessageBody //7E } + [Fact] + public void Test_all_attcahids_json() + { + var data = "7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E".ToHexBytes(); + var hex = JT808Serializer.Analyze(data); + } + [Fact] public void Test_JT808_0x0200_0x07_1() { diff --git a/src/JT808.Protocol/Enums/JT808CarSignalStatus.cs b/src/JT808.Protocol/Enums/JT808CarSignalStatus.cs new file mode 100644 index 0000000..4c9948b --- /dev/null +++ b/src/JT808.Protocol/Enums/JT808CarSignalStatus.cs @@ -0,0 +1,72 @@ +using System; + +namespace JT808.Protocol.Enums +{ + /// + /// 扩展车辆信号状态位 + /// + [Flags] + public enum JT808CarSignalStatus : uint + { + /// + /// 开启近光信号灯 + /// + 近光灯信号 = 1, + /// + /// 远光灯信号 + /// + 远光灯信号 = 2, + /// + /// 右转向灯信号 + /// + 右转向灯信号 = 4, + /// + /// 左转向灯信号 + /// + 左转向灯信号 = 8, + /// + /// 制动信号 + /// + 制动信号 = 16, + /// + /// 倒档信号 + /// + 倒档信号 = 32, + /// + /// 雾灯信号 + /// + 雾灯信号 = 64, + /// + /// 示廓灯 + /// + 示廓灯 = 128, + /// + /// 喇叭信号 + /// + 喇叭信号 = 256, + /// + /// 空调状态 + /// + 空调状态 = 512, + /// + /// 空挡信号 + /// + 空挡信号 = 1024, + /// + /// 缓速器工作 + /// + 缓速器工作 = 2048, + /// + /// ABS工作 + /// + ABS工作 = 4096, + /// + /// 加热器工作 + /// + 加热器工作 = 8192, + /// + /// 离合器状态 + /// + 离合器状态 = 16384, + } +} diff --git a/src/JT808.Protocol/Enums/JT808IOStatus.cs b/src/JT808.Protocol/Enums/JT808IOStatus.cs new file mode 100644 index 0000000..b1c9c82 --- /dev/null +++ b/src/JT808.Protocol/Enums/JT808IOStatus.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.Protocol.Enums +{ + /// + /// IO状态位 + /// + [Flags] + public enum JT808IOStatus:ushort + { + /// + /// 深度休眠状态 + /// + 深度休眠状态 = 1, + /// + /// 休眠状态 + /// + 休眠状态 = 2 + } +} diff --git a/src/JT808.Protocol/JT808.Protocol.xml b/src/JT808.Protocol/JT808.Protocol.xml index 711942c..b05d7de 100644 --- a/src/JT808.Protocol/JT808.Protocol.xml +++ b/src/JT808.Protocol/JT808.Protocol.xml @@ -453,6 +453,86 @@ 返回正常工作状态 + + + 扩展车辆信号状态位 + + + + + 开启近光信号灯 + + + + + 远光灯信号 + + + + + 右转向灯信号 + + + + + 左转向灯信号 + + + + + 制动信号 + + + + + 倒档信号 + + + + + 雾灯信号 + + + + + 示廓灯 + + + + + 喇叭信号 + + + + + 空调状态 + + + + + 空挡信号 + + + + + 缓速器工作 + + + + + ABS工作 + + + + + 加热器工作 + + + + + 离合器状态 + + 方向类型 @@ -674,6 +754,21 @@ 修改菜单 + + + IO状态位 + + + + + 深度休眠状态 + + + + + 休眠状态 + + JT808消息 @@ -9615,6 +9710,7 @@ 扩展车辆信号状态位 + @@ -9659,6 +9755,8 @@ IO状态位 + Flags + diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0200_0x25.cs b/src/JT808.Protocol/MessageBody/JT808_0x0200_0x25.cs index 5b37ff2..4dc69a5 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0200_0x25.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0200_0x25.cs @@ -2,6 +2,7 @@ using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System; using System.Text.Json; namespace JT808.Protocol.MessageBody @@ -13,8 +14,9 @@ namespace JT808.Protocol.MessageBody { /// /// 扩展车辆信号状态位 + /// /// - public int CarSignalStatus { get; set; } + public uint CarSignalStatus { get; set; } /// /// JT808_0x0200_0x25 /// @@ -36,8 +38,28 @@ namespace JT808.Protocol.MessageBody writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId); value.AttachInfoLength = reader.ReadByte(); writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); - value.CarSignalStatus = reader.ReadInt32(); + value.CarSignalStatus = reader.ReadUInt32(); writer.WriteNumber($"[{value.CarSignalStatus.ReadNumber()}]扩展车辆信号状态位", value.CarSignalStatus); + writer.WriteStartObject("扩展车辆信号状态位对象信息"); + var carSignalStatus = Convert.ToString(value.CarSignalStatus, 2).PadLeft(32, '0').AsSpan(); + writer.WriteString("值", Convert.ToString(value.CarSignalStatus, 2).PadLeft(32, '0')); + writer.WriteString("bit15~31", "保留"); + writer.WriteString("bit14", (value.CarSignalStatus & 16384) == 16384 ? "离合器状态" : "无"); + writer.WriteString("bit13", (value.CarSignalStatus & 8192) == 8192 ? "加热器工作" : "无"); + writer.WriteString("bit12", (value.CarSignalStatus & 4096) == 4096 ? "ABS工作" : "无"); + writer.WriteString("bit11", (value.CarSignalStatus & 2048) == 2048 ? "缓速器工作" : "无"); + writer.WriteString("bit10", (value.CarSignalStatus & 1024) == 1024 ? "空挡信号" : "无"); + writer.WriteString("bit9", (value.CarSignalStatus & 512) == 512 ? "空调状态" : "无"); + writer.WriteString("bit8", (value.CarSignalStatus & 256) == 256 ? "喇叭信号" : "无"); + writer.WriteString("bit7", (value.CarSignalStatus & 128) == 128 ? "示廓灯" : "无"); + writer.WriteString("bit6", (value.CarSignalStatus & 64) == 64 ? "雾灯信号" : "无"); + writer.WriteString("bit5", (value.CarSignalStatus & 32) == 32 ? "倒档信号" : "无"); + writer.WriteString("bit4", (value.CarSignalStatus & 16) == 16 ? "制动信号" : "无"); + writer.WriteString("bit3", (value.CarSignalStatus & 8) == 8 ? "左转向灯信号" : "无"); + writer.WriteString("bit2", (value.CarSignalStatus & 4) == 4 ? "右转向灯信号" : "无"); + writer.WriteString("bit1", (value.CarSignalStatus & 2) == 2 ? "远光灯信号" : "无"); + writer.WriteString("bit0", (value.CarSignalStatus & 1) ==1?"近光灯信号":"无"); + writer.WriteEndObject(); } /// /// @@ -50,7 +72,7 @@ namespace JT808.Protocol.MessageBody JT808_0x0200_0x25 value = new JT808_0x0200_0x25(); value.AttachInfoId = reader.ReadByte(); value.AttachInfoLength = reader.ReadByte(); - value.CarSignalStatus = reader.ReadInt32(); + value.CarSignalStatus = reader.ReadUInt32(); return value; } /// @@ -63,7 +85,7 @@ namespace JT808.Protocol.MessageBody { writer.WriteByte(value.AttachInfoId); writer.WriteByte(value.AttachInfoLength); - writer.WriteInt32(value.CarSignalStatus); + writer.WriteUInt32(value.CarSignalStatus); } } } diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0200_0x2A.cs b/src/JT808.Protocol/MessageBody/JT808_0x0200_0x2A.cs index 0e8b1f3..9ed4006 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0200_0x2A.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0200_0x2A.cs @@ -2,6 +2,7 @@ using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; +using System; using System.Text.Json; namespace JT808.Protocol.MessageBody @@ -13,6 +14,8 @@ namespace JT808.Protocol.MessageBody { /// /// IO状态位 + /// Flags + /// /// public ushort IOStatus { get; set; } /// @@ -38,6 +41,13 @@ namespace JT808.Protocol.MessageBody writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength); value.IOStatus = reader.ReadUInt16(); writer.WriteNumber($"[{value.IOStatus.ReadNumber()}]IO状态位", value.IOStatus); + writer.WriteStartObject("IO状态位对象信息"); + var carSignalStatus = Convert.ToString(value.IOStatus, 2).PadLeft(16, '0').AsSpan(); + writer.WriteString("值", Convert.ToString(value.IOStatus, 2).PadLeft(16, '0')); + writer.WriteString("bit2~15", "保留"); + writer.WriteString("bit1", (value.IOStatus & 2) == 2 ? "休眠状态" : "无"); + writer.WriteString("bit0", (value.IOStatus & 1) == 1 ? "深度休眠状态" : "无"); + writer.WriteEndObject(); } /// ///