Pārlūkot izejas kodu

v2.4.0

1.调整0x0704设备补报数据解析异常的处理方式
2.修复19056兼容消息块为空的情况
3.修复19056中的上行0x05消息
tags/v2.4.0
SmallChi(Koike) pirms 4 gadiem
vecāks
revīzija
a2b8535ee6
4 mainītis faili ar 75 papildinājumiem un 11 dzēšanām
  1. +31
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs
  2. +1
    -1
      src/JT808.Protocol/JT808.Protocol.csproj
  3. +6
    -0
      src/JT808.Protocol/JT808.Protocol.xml
  4. +37
    -10
      src/JT808.Protocol/JT808CarDVRUpPackage.cs

+ 31
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0700Test.cs Parādīt failu

@@ -666,6 +666,7 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(50, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].RecordSpeed);
Assert.Equal(40, body.JT808_CarDVR_Up_0x15_SpeedStatusLogs[0].JT808_CarDVR_Up_0x15_SpeedPerSeconds[0].ReferenceSpeed);
}

[Fact]
public void Test_Serialize_0x82()
{
@@ -689,5 +690,35 @@ namespace JT808.Protocol.Test.MessageBody
Assert.Equal(1, value.ReplyMsgNum);
var body = value.JT808CarDVRUpPackage.Bodies as JT808_CarDVR_Up_0x82;
}

[Fact]
public void Test_Serialize_Error()
{
JT808_0x0700 value = new JT808_0x0700();
value.CommandId = 0xFA;
value.ReplyMsgNum = 1;
value.JT808CarDVRUpPackage = new JT808CarDVRUpPackage
{
CommandId = 0xFA
};
var hex = JT808Serializer.Serialize(value).ToHexString();
Assert.Equal("0001FA557AFA00D5", hex);
}

[Fact]
public void Test_Deserilize_Error()
{
byte[] bytes = "0001FA557AFA00D5".ToHexBytes();
JT808_0x0700 value = JT808Serializer.Deserialize<JT808_0x0700>(bytes);
Assert.Equal(1, value.ReplyMsgNum);
Assert.True(value.JT808CarDVRUpPackage.ErrorFlag);
}

[Fact]
public void Test_Json_Error()
{
byte[] bytes = "0001FA557AFA00D5".ToHexBytes();
string json = JT808Serializer.Analyze<JT808_0x0700>(bytes);
}
}
}

+ 1
- 1
src/JT808.Protocol/JT808.Protocol.csproj Parādīt failu

@@ -15,7 +15,7 @@
<license>https://github.com/SmallChi/JT808/blob/master/LICENSE</license>
<DocumentationFile>JT808.Protocol.xml</DocumentationFile>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Version>2.3.9</Version>
<Version>2.4.0</Version>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<AnalysisLevel>latest</AnalysisLevel>
<EnableNETAnalyzers>true</EnableNETAnalyzers>


+ 6
- 0
src/JT808.Protocol/JT808.Protocol.xml Parādīt failu

@@ -4791,6 +4791,12 @@
命令字
</summary>
</member>
<member name="P:JT808.Protocol.JT808CarDVRUpPackage.ErrorFlag">
<summary>
错误标志
CommandId == 0xFA || CommandId == 0xFB
</summary>
</member>
<member name="P:JT808.Protocol.JT808CarDVRUpPackage.DataLength">
<summary>
数据块长度


+ 37
- 10
src/JT808.Protocol/JT808CarDVRUpPackage.cs Parādīt failu

@@ -29,6 +29,11 @@ namespace JT808.Protocol
/// </summary>
public byte CommandId { get; set; }
/// <summary>
/// 错误标志
/// CommandId == 0xFA || CommandId == 0xFB
/// </summary>
public bool ErrorFlag { get; set; }
/// <summary>
/// 数据块长度
/// </summary>
public ushort DataLength { get; set; }
@@ -58,9 +63,18 @@ namespace JT808.Protocol
value.Begin = reader.ReadUInt16();
writer.WriteNumber($"[{value.Begin.ReadNumber()}]起始字头", value.Begin);
value.CommandId = reader.ReadByte();
writer.WriteString($"[{value.Begin.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
value.DataLength = reader.ReadUInt16();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength);
//出错标志位
value.ErrorFlag = value.CommandId == 0xFA || value.CommandId == 0xFB;
if (!value.ErrorFlag)
{
writer.WriteString($"[{value.CommandId.ReadNumber()}]命令字", ((JT808CarDVRCommandID)value.CommandId).ToString());
value.DataLength = reader.ReadUInt16();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}]数据块长度", value.DataLength);
}
else
{
writer.WriteString($"[{value.CommandId.ReadNumber()}]出错标志字", value.CommandId.ToString());
}
value.KeepFields = reader.ReadByte();
writer.WriteNumber($"[{value.KeepFields.ReadNumber()}]保留字", value.KeepFields);
if (value.DataLength > 0)
@@ -97,7 +111,12 @@ namespace JT808.Protocol
int currentPosition = reader.ReaderCount;
value.Begin = reader.ReadUInt16();
value.CommandId = reader.ReadByte();
value.DataLength = reader.ReadUInt16();
//出错标志位
value.ErrorFlag = value.CommandId == 0xFA || value.CommandId == 0xFB;
if (!value.ErrorFlag)
{
value.DataLength = reader.ReadUInt16();
}
value.KeepFields = reader.ReadByte();
if (value.DataLength > 0)
{
@@ -128,17 +147,25 @@ namespace JT808.Protocol
var currentPosition = writer.GetCurrentPosition();
writer.WriteUInt16(value.Begin);
writer.WriteByte(value.CommandId);
writer.Skip(2, out var datalengthPosition);
var isError = value.CommandId == 0xFA || value.CommandId == 0xFB;
int datalengthPosition=0;
if (!isError)
{
writer.Skip(2, out datalengthPosition);
}
writer.WriteByte(value.KeepFields);
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance))
if (datalengthPosition > 0)
{
if (!value.Bodies.SkipSerialization)
if (config.JT808_CarDVR_Up_Factory.Map.TryGetValue(value.CommandId, out var instance))
{
//4.2.处理消息体
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config);
if (!value.Bodies.SkipSerialization)
{
//4.2.处理消息体
JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(instance, ref writer, value.Bodies, config);
}
}
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() - 2 - 1 - datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度
}
writer.WriteUInt16Return((ushort)(writer.GetCurrentPosition() -2-1- datalengthPosition), datalengthPosition);//此处-2:减去数据长度字段2位,-1:减去保留字长度
writer.WriteCarDVRCheckCode(currentPosition);
}
}


Notiek ielāde…
Atcelt
Saglabāt