@@ -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<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> | |||
<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\JT809ErrorCode.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; | |||
} | |||
} | |||
/// <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; | |||
} | |||
} | |||
} | |||
} |