@@ -1,4 +1,5 @@ | |||||
using JT809.Protocol.JT809Extensions; | |||||
using JT809.Protocol.Enums; | |||||
using JT809.Protocol.JT809Extensions; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Text; | using System.Text; | ||||
@@ -16,5 +17,40 @@ namespace JT809.Protocol.Test.JT809Extensions | |||||
Assert.Equal(7,vno.Length); | Assert.Equal(7,vno.Length); | ||||
Assert.Equal(8, bytes.Length); | Assert.Equal(8, bytes.Length); | ||||
} | } | ||||
[Fact] | |||||
public void Test2() | |||||
{ | |||||
var jT808_Alarms = JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(24, 32); | |||||
var jT808_Alarms1 = JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(5, 32); | |||||
var jT808_Alarms2 = JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(16, 32); | |||||
var jT808_Alarms3 = JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(18, 32); | |||||
var jT808_Alarms4 = JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(31, 32); | |||||
var jT808_Alarms5= JT809EnumExtensions.GetEnumTypes<JT808_Alarm>(8388609, 32); | |||||
} | |||||
[Fact] | |||||
public void Test3() | |||||
{ | |||||
var jT808_Status = JT809EnumExtensions.GetEnumTypes<JT808_Status>(24, 32); | |||||
var jT808_Status1 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(5, 32); | |||||
var jT808_Status2 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(16, 32); | |||||
var jT808_Status3 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(18, 32); | |||||
var jT808_Status4 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(31, 32); | |||||
var jT808_Status5 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(8388609, 32); | |||||
} | |||||
[Fact] | |||||
public void Test4() | |||||
{ | |||||
var jT808_Status5 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(8388609, 32); | |||||
} | |||||
[Fact] | |||||
public void Test5() | |||||
{ | |||||
var jT808_Status5 = JT809EnumExtensions.GetEnumTypes<JT808_Status>(8388609, 32,false); | |||||
} | |||||
} | } | ||||
} | } |
@@ -45,6 +45,8 @@ | |||||
<ItemGroup> | <ItemGroup> | ||||
<Compile Include="JT809Configs\JT809EncryptOptions.cs" /> | <Compile Include="JT809Configs\JT809EncryptOptions.cs" /> | ||||
<Compile Include="JT809Enums\JT808_Alarm.cs" /> | |||||
<Compile Include="JT809Enums\JT808_Status.cs" /> | |||||
<Compile Include="JT809Enums\JT809CommandType.cs" /> | <Compile Include="JT809Enums\JT809CommandType.cs" /> | ||||
<Compile Include="JT809Enums\JT809ErrorCode.cs" /> | <Compile Include="JT809Enums\JT809ErrorCode.cs" /> | ||||
<Compile Include="JT809Enums\JT809BusinessType.cs" /> | <Compile Include="JT809Enums\JT809BusinessType.cs" /> | ||||
@@ -0,0 +1,162 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT809.Protocol.Enums | |||||
{ | |||||
/// <summary> | |||||
/// 报警标志 | |||||
/// </summary> | |||||
[Flags] | |||||
public enum JT808_Alarm : uint | |||||
{ | |||||
/// <summary> | |||||
/// 紧急报警_触动报警开关后触发 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
紧急报警_触动报警开关后触发 = 1, | |||||
/// <summary> | |||||
/// 超速报警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
超速报警 = 2, | |||||
/// <summary> | |||||
/// 标志维持至报警条件解除 | |||||
/// 疲劳驾驶 | |||||
/// </summary> | |||||
疲劳驾驶 = 4, | |||||
/// <summary> | |||||
/// 危险预警 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
危险预警 = 8, | |||||
/// <summary> | |||||
/// GNSS模块发生故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
GNSS模块发生故障=16, | |||||
/// <summary> | |||||
/// GNSS天线未接或被剪断 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
GNSS天线未接或被剪断 = 32, | |||||
/// <summary> | |||||
/// GNSS天线短路 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
GNSS天线短路 = 64, | |||||
/// <summary> | |||||
/// 终端主电源欠压 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
终端主电源欠压 = 128, | |||||
/// <summary> | |||||
/// 终端主电源掉电 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
终端主电源掉电 = 256, | |||||
/// <summary> | |||||
/// 终端LCD或显示器故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
终端LCD或显示器故障 = 512, | |||||
/// <summary> | |||||
/// TTS模块故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
TTS模块故障 = 1024, | |||||
/// <summary> | |||||
/// 摄像头故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
摄像头故障 = 2048, | |||||
/// <summary> | |||||
/// 道路运输证IC卡模块故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
道路运输证IC卡模块故障 = 4096, | |||||
/// <summary> | |||||
/// 超速预警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
超速预警 = 8192, | |||||
/// <summary> | |||||
/// 疲劳驾驶预警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
疲劳驾驶预警 = 16384, | |||||
保留1=32768, | |||||
保留2=65536, | |||||
保留3=131072, | |||||
/// <summary> | |||||
/// 当天累计驾驶超时 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
当天累计驾驶超时 = 262144, | |||||
/// <summary> | |||||
/// 超时停车 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
超时停车 = 524288, | |||||
/// <summary> | |||||
/// 进出区域 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
进出区域 = 1048576, | |||||
/// <summary> | |||||
/// 进出路线 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
进出路线 = 2097152, | |||||
/// <summary> | |||||
/// 路段行驶时间不足或过长 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
路段行驶时间不足或过长= 4194304, | |||||
/// <summary> | |||||
/// 路线偏离报警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
路线偏离报警 = 8388608, | |||||
/// <summary> | |||||
/// 车辆VSS故障 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
车辆VSS故障= 16777216, | |||||
/// <summary> | |||||
/// 车辆油量异常 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
车辆油量异常 = 33554432, | |||||
/// <summary> | |||||
/// 车辆被盗通过车辆防盗器 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
车辆被盗 = 67108864, | |||||
/// <summary> | |||||
/// 车辆非法点火 | |||||
/// </summary> | |||||
车辆非法点火 = 134217728, | |||||
/// <summary> | |||||
/// 车辆非法位移 | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
车辆非法位移 = 268435456, | |||||
/// <summary> | |||||
/// 碰撞预警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
碰撞预警 = 536870912, | |||||
/// <summary> | |||||
/// 侧翻预警 | |||||
/// 标志维持至报警条件解除 | |||||
/// </summary> | |||||
侧翻预警 = 1073741824, | |||||
/// <summary> | |||||
/// 非法开门报警 | |||||
/// (终端未设置区域时,不判断非法开门) | |||||
/// 收到应答后清零 | |||||
/// </summary> | |||||
非法开门报警 = 2147483648 | |||||
} | |||||
} |
@@ -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 | |||||
} | |||||
} |
@@ -151,5 +151,58 @@ namespace JT809.Protocol.JT809Extensions | |||||
return default; | return default; | ||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 根据值获取对应枚举类型集合 | |||||
/// </summary> | |||||
/// <typeparam name="T">具体枚举类型</typeparam> | |||||
/// <param name="value">枚举值</param> | |||||
/// <param name="digit">位数(8,16,32)</param> | |||||
/// <returns></returns> | |||||
public static IEnumerable<T> GetEnumTypes<T>(this int value,int digit) where T : Enum | |||||
{ | |||||
return GetEnumTypes<T>(value, digit,true); | |||||
} | |||||
/// <summary> | |||||
/// 根据值获取对应枚举类型集合 | |||||
/// </summary> | |||||
/// <typeparam name="T">具体枚举类型</typeparam> | |||||
/// <param name="value">枚举值</param> | |||||
/// <param name="digit">位数(8,16,32)</param> | |||||
/// <param name="ignoreUnknown">是否忽略未知数据</param> | |||||
/// <returns></returns> | |||||
public static IEnumerable<T> GetEnumTypes<T>(this int value, int digit,bool ignoreUnknown) where T : Enum | |||||
{ | |||||
List<T> values = new List<T>(); | |||||
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<T> results = new List<T>(); | |||||
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; | |||||
} | |||||
} | |||||
} | } | ||||
} | } |