diff --git a/src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs b/src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs index 40ca6a8..ec7e6e1 100644 --- a/src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs +++ b/src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs @@ -1,4 +1,5 @@ -using JT809.Protocol.JT809Extensions; +using JT809.Protocol.Enums; +using JT809.Protocol.JT809Extensions; using System; using System.Collections.Generic; using System.Text; @@ -16,5 +17,40 @@ namespace JT809.Protocol.Test.JT809Extensions Assert.Equal(7,vno.Length); Assert.Equal(8, bytes.Length); } + + [Fact] + public void Test2() + { + var jT808_Alarms = JT809EnumExtensions.GetEnumTypes(24, 32); + var jT808_Alarms1 = JT809EnumExtensions.GetEnumTypes(5, 32); + var jT808_Alarms2 = JT809EnumExtensions.GetEnumTypes(16, 32); + var jT808_Alarms3 = JT809EnumExtensions.GetEnumTypes(18, 32); + var jT808_Alarms4 = JT809EnumExtensions.GetEnumTypes(31, 32); + var jT808_Alarms5= JT809EnumExtensions.GetEnumTypes(8388609, 32); + } + + + [Fact] + public void Test3() + { + var jT808_Status = JT809EnumExtensions.GetEnumTypes(24, 32); + var jT808_Status1 = JT809EnumExtensions.GetEnumTypes(5, 32); + var jT808_Status2 = JT809EnumExtensions.GetEnumTypes(16, 32); + var jT808_Status3 = JT809EnumExtensions.GetEnumTypes(18, 32); + var jT808_Status4 = JT809EnumExtensions.GetEnumTypes(31, 32); + var jT808_Status5 = JT809EnumExtensions.GetEnumTypes(8388609, 32); + } + + [Fact] + public void Test4() + { + var jT808_Status5 = JT809EnumExtensions.GetEnumTypes(8388609, 32); + } + + [Fact] + public void Test5() + { + var jT808_Status5 = JT809EnumExtensions.GetEnumTypes(8388609, 32,false); + } } } diff --git a/src/JT809.Protocol/JT809.Protocol.csproj b/src/JT809.Protocol/JT809.Protocol.csproj index 0b29cdc..6d2c668 100644 --- a/src/JT809.Protocol/JT809.Protocol.csproj +++ b/src/JT809.Protocol/JT809.Protocol.csproj @@ -45,6 +45,8 @@ + + diff --git a/src/JT809.Protocol/JT809Enums/JT808_Alarm.cs b/src/JT809.Protocol/JT809Enums/JT808_Alarm.cs new file mode 100644 index 0000000..baefbd9 --- /dev/null +++ b/src/JT809.Protocol/JT809Enums/JT808_Alarm.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.Enums +{ + /// + /// 报警标志 + /// + [Flags] + public enum JT808_Alarm : uint + { + /// + /// 紧急报警_触动报警开关后触发 + /// 收到应答后清零 + /// + 紧急报警_触动报警开关后触发 = 1, + /// + /// 超速报警 + /// 标志维持至报警条件解除 + /// + 超速报警 = 2, + /// + /// 标志维持至报警条件解除 + /// 疲劳驾驶 + /// + 疲劳驾驶 = 4, + /// + /// 危险预警 + /// 收到应答后清零 + /// + 危险预警 = 8, + /// + /// GNSS模块发生故障 + /// 标志维持至报警条件解除 + /// + GNSS模块发生故障=16, + /// + /// GNSS天线未接或被剪断 + /// 标志维持至报警条件解除 + /// + GNSS天线未接或被剪断 = 32, + /// + /// GNSS天线短路 + /// 标志维持至报警条件解除 + /// + GNSS天线短路 = 64, + /// + /// 终端主电源欠压 + /// 标志维持至报警条件解除 + /// + 终端主电源欠压 = 128, + /// + /// 终端主电源掉电 + /// 标志维持至报警条件解除 + /// + 终端主电源掉电 = 256, + /// + /// 终端LCD或显示器故障 + /// 标志维持至报警条件解除 + /// + 终端LCD或显示器故障 = 512, + /// + /// TTS模块故障 + /// 标志维持至报警条件解除 + /// + TTS模块故障 = 1024, + /// + /// 摄像头故障 + /// 标志维持至报警条件解除 + /// + 摄像头故障 = 2048, + /// + /// 道路运输证IC卡模块故障 + /// 标志维持至报警条件解除 + /// + 道路运输证IC卡模块故障 = 4096, + /// + /// 超速预警 + /// 标志维持至报警条件解除 + /// + 超速预警 = 8192, + /// + /// 疲劳驾驶预警 + /// 标志维持至报警条件解除 + /// + 疲劳驾驶预警 = 16384, + 保留1=32768, + 保留2=65536, + 保留3=131072, + /// + /// 当天累计驾驶超时 + /// 标志维持至报警条件解除 + /// + 当天累计驾驶超时 = 262144, + /// + /// 超时停车 + /// 标志维持至报警条件解除 + /// + 超时停车 = 524288, + /// + /// 进出区域 + /// 收到应答后清零 + /// + 进出区域 = 1048576, + /// + /// 进出路线 + /// 收到应答后清零 + /// + 进出路线 = 2097152, + /// + /// 路段行驶时间不足或过长 + /// 收到应答后清零 + /// + 路段行驶时间不足或过长= 4194304, + /// + /// 路线偏离报警 + /// 标志维持至报警条件解除 + /// + 路线偏离报警 = 8388608, + /// + /// 车辆VSS故障 + /// 标志维持至报警条件解除 + /// + 车辆VSS故障= 16777216, + /// + /// 车辆油量异常 + /// 标志维持至报警条件解除 + /// + 车辆油量异常 = 33554432, + /// + /// 车辆被盗通过车辆防盗器 + /// 标志维持至报警条件解除 + /// + 车辆被盗 = 67108864, + /// + /// 车辆非法点火 + /// + 车辆非法点火 = 134217728, + /// + /// 车辆非法位移 + /// 收到应答后清零 + /// + 车辆非法位移 = 268435456, + /// + /// 碰撞预警 + /// 标志维持至报警条件解除 + /// + 碰撞预警 = 536870912, + /// + /// 侧翻预警 + /// 标志维持至报警条件解除 + /// + 侧翻预警 = 1073741824, + /// + /// 非法开门报警 + /// (终端未设置区域时,不判断非法开门) + /// 收到应答后清零 + /// + 非法开门报警 = 2147483648 + } +} diff --git a/src/JT809.Protocol/JT809Enums/JT808_Status.cs b/src/JT809.Protocol/JT809Enums/JT808_Status.cs new file mode 100644 index 0000000..a8beb2d --- /dev/null +++ b/src/JT809.Protocol/JT809Enums/JT808_Status.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT809.Protocol.Enums +{ + [Flags] + public enum JT808_Status : uint + { + ACC开 = 1, + 定位 = 2, + 南纬 = 4, + 西经 = 8, + 停运状态 = 16, + 经纬度已经保密插件加密 = 32, + //保留 = 64, + //保留 = 128, + 半载 = 256, + //保留 = 512, + 满载 = 768, + 车辆油路断开 = 1024, + 车辆电路断开 = 2048, + 车门加锁 = 4096, + 前门开 = 8192, + 中门开 = 16384, + 后门开 = 32768, + 驾驶席门开 = 65536, + 自定义 = 131072, + 使用GPS卫星进行定位 = 262144, + 使用北斗卫星进行定位 = 524288, + 使用GLONASS卫星进行定位 = 1048576, + 使用Galileo卫星进行定位 = 2097152 + } +} diff --git a/src/JT809.Protocol/JT809Extensions/JT809EnumExtensions.cs b/src/JT809.Protocol/JT809Extensions/JT809EnumExtensions.cs index 6030d16..9e62689 100644 --- a/src/JT809.Protocol/JT809Extensions/JT809EnumExtensions.cs +++ b/src/JT809.Protocol/JT809Extensions/JT809EnumExtensions.cs @@ -151,5 +151,58 @@ namespace JT809.Protocol.JT809Extensions return default; } } + + /// + /// 根据值获取对应枚举类型集合 + /// + /// 具体枚举类型 + /// 枚举值 + /// 位数(8,16,32) + /// + public static IEnumerable GetEnumTypes(this int value,int digit) where T : Enum + { + return GetEnumTypes(value, digit,true); + } + + /// + /// 根据值获取对应枚举类型集合 + /// + /// 具体枚举类型 + /// 枚举值 + /// 位数(8,16,32) + /// 是否忽略未知数据 + /// + public static IEnumerable GetEnumTypes(this int value, int digit,bool ignoreUnknown) where T : Enum + { + List values = new List(); + for (int i = 0; i < digit; i++) + { + if (Math.Pow(2, i) <= value) continue; + values.Add((T)Enum.ToObject(typeof(T), (int)Math.Pow(2, i - 1))); + value = value - (int)Math.Pow(2, i - 1); + i = 0; + if (value <= 0) break; + } + if (ignoreUnknown) + { + List results = new List(); + foreach (var item in values) + { + foreach (string itemChild in Enum.GetNames(typeof(T))) + { + if (item.ToString() == itemChild) + { + results.Add(item); + break; + } + } + } + return results; + } + else + { + return values; + } + } } }