From 3573028ccf9c5bc50fe885890dff3996709e3bdc Mon Sep 17 00:00:00 2001
From: "SmallChi(Koike)" <564952747@qq.com>
Date: Tue, 10 Aug 2021 14:22:52 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=A9=E5=B1=95=E8=BD=A6?=
=?UTF-8?q?=E8=BE=86=E4=BF=A1=E5=8F=B7=E7=8A=B6=E6=80=81=E4=BD=8D=E6=9E=9A?=
=?UTF-8?q?=E4=B8=BE=E5=8F=8A=E5=AF=B9=E5=BA=94=E8=A7=A3=E6=9E=90=E5=99=A8?=
=?UTF-8?q?=E7=9A=84=E6=8F=8F=E8=BF=B0=E4=BF=AE=E6=94=B9=20=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0IO=E7=8A=B6=E6=80=81=E4=BD=8D=E6=9E=9A=E4=B8=BE?=
=?UTF-8?q?=E5=8F=8A=E5=AF=B9=E5=BA=94=E8=A7=A3=E6=9E=90=E5=99=A8=E7=9A=84?=
=?UTF-8?q?=E6=8F=8F=E8=BF=B0=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MessageBody/JT808_0x0200Test.cs | 7 ++
.../Enums/JT808CarSignalStatus.cs | 72 ++++++++++++++
src/JT808.Protocol/Enums/JT808IOStatus.cs | 22 +++++
src/JT808.Protocol/JT808.Protocol.xml | 98 +++++++++++++++++++
.../MessageBody/JT808_0x0200_0x25.cs | 30 +++++-
.../MessageBody/JT808_0x0200_0x2A.cs | 10 ++
6 files changed, 235 insertions(+), 4 deletions(-)
create mode 100644 src/JT808.Protocol/Enums/JT808CarSignalStatus.cs
create mode 100644 src/JT808.Protocol/Enums/JT808IOStatus.cs
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();
}
///
///