Преглед изворни кода

1.感谢奋斗在北京过检的大兄弟帮忙指出

2.修复0702、0705时间的BCD处理问题
tags/v2.2.6
SmallChi(Koike) пре 5 година
родитељ
комит
5add5a7881
7 измењених фајлова са 33 додато и 20 уклоњено
  1. +5
    -5
      src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs
  2. +2
    -2
      src/JT808.Protocol.Test/MessageBody/JT808_0x0705Test.cs
  3. +1
    -1
      src/JT808.Protocol.Test/MessagePack/JT808MessagePackReaderTest.cs
  4. +6
    -6
      src/JT808.Protocol.Test/MessagePack/JT808MessagePackWriterTest.cs
  5. +2
    -0
      src/JT808.Protocol/JT808.Protocol.xml
  6. +9
    -2
      src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs
  7. +8
    -4
      src/JT808.Protocol/MessagePack/JT808MessagePackWriter.cs

+ 5
- 5
src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs Прегледај датотеку

@@ -67,14 +67,14 @@ namespace JT808.Protocol.Test.MessageBody
CertificateExpiresDate = DateTime.Parse("2018-08-16") CertificateExpiresDate = DateTime.Parse("2018-08-16")
}; };
var hex = JT808Serializer.Serialize(jT808_0X0702).ToHexString(); var hex = JT808Serializer.Serialize(jT808_0X0702).ToHexString();
Assert.Equal("01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 07 E2 08 16".Replace(" ", ""), hex);
//"01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 07 E2 08 16"
Assert.Equal("01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 20 18 08 16".Replace(" ", ""), hex);
//"01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 20 18 08 16"
} }


[Fact] [Fact]
public void Test3_1() public void Test3_1()
{ {
byte[] bytes = "01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 07 E2 08 16".ToHexBytes();
byte[] bytes = "01 18 08 16 09 16 16 00 05 6B 6F 69 6B 65 71 77 65 31 32 33 34 35 36 61 61 61 30 30 30 30 30 30 30 30 06 71 77 65 72 74 78 20 18 08 16".ToHexBytes();
JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize<JT808_0x0702>(bytes); JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize<JT808_0x0702>(bytes);
Assert.Equal(JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班, jT808_0X0702.IC_Card_Status); Assert.Equal(JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班, jT808_0X0702.IC_Card_Status);
Assert.Equal(DateTime.Parse("2018-08-16 09:16:16"), jT808_0X0702.IC_Card_PlugDateTime); Assert.Equal(DateTime.Parse("2018-08-16 09:16:16"), jT808_0X0702.IC_Card_PlugDateTime);
@@ -100,14 +100,14 @@ namespace JT808.Protocol.Test.MessageBody
DriverIdentityCard="12345678901234567" DriverIdentityCard="12345678901234567"
}; };
var hex = JT808Serializer.Serialize(jT808_0X0702, JT808Version.JTT2019).ToHexString(); var hex = JT808Serializer.Serialize(jT808_0X0702, JT808Version.JTT2019).ToHexString();
Assert.Equal("0119120111111100056B6F696B6571776531323334353661616130303030303030300671776572747807E312013132333435363738393031323334353637303030", hex);
Assert.Equal("0119120111111100056B6F696B65717765313233343536616161303030303030303006717765727478201912013132333435363738393031323334353637303030", hex);
} }


[Fact] [Fact]
public void Test_2019_2() public void Test_2019_2()
{ {
byte[] bytes = "0119120111111100056B6F696B6571776531323334353661616130303030303030300671776572747807E312013132333435363738393031323334353637303030".ToHexBytes();
byte[] bytes = "0119120111111100056B6F696B65717765313233343536616161303030303030303006717765727478201912013132333435363738393031323334353637303030".ToHexBytes();
JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize<JT808_0x0702>(bytes, JT808Version.JTT2019); JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize<JT808_0x0702>(bytes, JT808Version.JTT2019);
Assert.Equal(JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班, jT808_0X0702.IC_Card_Status); Assert.Equal(JT808ICCardStatus.从业资格证IC卡插入_驾驶员上班, jT808_0X0702.IC_Card_Status);
Assert.Equal(DateTime.Parse("2019-12-01 11:11:11"), jT808_0X0702.IC_Card_PlugDateTime); Assert.Equal(DateTime.Parse("2019-12-01 11:11:11"), jT808_0X0702.IC_Card_PlugDateTime);


+ 2
- 2
src/JT808.Protocol.Test/MessageBody/JT808_0x0705Test.cs Прегледај датотеку

@@ -29,13 +29,13 @@ namespace JT808.Protocol.Test.MessageBody
CanData = new byte[] { 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01 }, CanData = new byte[] { 0x01, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01 },
}); });
var hex = JT808Serializer.Serialize(jT808_0X0705).ToHexString(); var hex = JT808Serializer.Serialize(jT808_0X0705).ToHexString();
Assert.Equal("0002200005015E001203040102030401020304050607080103040506070801", hex);
Assert.Equal("00022000050350001203040102030401020304050607080103040506070801", hex);
} }


[Fact] [Fact]
public void Test2() public void Test2()
{ {
byte[] bytes = "0002200005015E001203040102030401020304050607080103040506070801".ToHexBytes();
byte[] bytes = "00022000050350001203040102030401020304050607080103040506070801".ToHexBytes();
JT808_0x0705 jT808_0X0705 = JT808Serializer.Deserialize<JT808_0x0705>(bytes); JT808_0x0705 jT808_0X0705 = JT808Serializer.Deserialize<JT808_0x0705>(bytes);


Assert.Equal(2, jT808_0X0705.CanItemCount); Assert.Equal(2, jT808_0X0705.CanItemCount);


+ 1
- 1
src/JT808.Protocol.Test/MessagePack/JT808MessagePackReaderTest.cs Прегледај датотеку

@@ -64,7 +64,7 @@ namespace JT808.Protocol.Test.MessagePack
[Fact] [Fact]
public void ReadDateTimeTest() public void ReadDateTimeTest()
{ {
byte[] bytes = "7E 07 E3 06 19 23 23 23 00 7B 19 06 19 23 23 23 7E".ToHexBytes();
byte[] bytes = "7E2019061923232301231906192323237E".ToHexBytes();
JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes); JT808MessagePackReader jT808MessagePackReader = new JT808MessagePackReader(bytes);
Assert.Equal(JT808Package.BeginFlag, jT808MessagePackReader.ReadStart()); Assert.Equal(JT808Package.BeginFlag, jT808MessagePackReader.ReadStart());
Assert.Equal(DateTime.Parse("2019-06-19"), jT808MessagePackReader.ReadDateTime4()); Assert.Equal(DateTime.Parse("2019-06-19"), jT808MessagePackReader.ReadDateTime4());


+ 6
- 6
src/JT808.Protocol.Test/MessagePack/JT808MessagePackWriterTest.cs Прегледај датотеку

@@ -64,17 +64,17 @@ namespace JT808.Protocol.Test.MessagePack
msgpackWriter.WriteEnd(); msgpackWriter.WriteEnd();
msgpackWriter.WriteEncode(); msgpackWriter.WriteEncode();
//===========output========= //===========output=========
//WriteDateTime4=>YYYYMMDD=>07 E3 06 19
//WriteDateTime5=>HH-mm-ss-fff|HH-mm-ss-msms=>23 23 23 00 7B
//WriteDateTime4=>YYYYMMDD=>20 19 06 19
//WriteDateTime5=>HH-mm-ss-fff|HH-mm-ss-msms=>23 23 23 01 23
//WriteDateTime6=>yyMMddHHmmss=>19 23 23 23 //WriteDateTime6=>yyMMddHHmmss=>19 23 23 23
//Unencode: //Unencode:
//7E 07 E3 06 19 23 23 23 00 7B 19 06 19 23 23 23 7E
//7E2019061923232312301906192323237E
//Encode //Encode
//7E 07 E3 06 19 23 23 23 00 7B 19 06 19 23 23 23 7E
//7E 20 19 06 19 23 23 23 01 23 19 06 19 23 23 23 7E
var encodeBytes = msgpackWriter.FlushAndGetEncodingArray().ToHexString(); var encodeBytes = msgpackWriter.FlushAndGetEncodingArray().ToHexString();
Assert.Equal("7E07E30619232323007B1906192323237E".Replace(" ", ""), encodeBytes);
Assert.Equal("7E2019061923232301231906192323237E".Replace(" ", ""), encodeBytes);
var realBytes = msgpackWriter.FlushAndGetRealArray().ToHexString(); var realBytes = msgpackWriter.FlushAndGetRealArray().ToHexString();
Assert.Equal("7E07E30619232323007B1906192323237E7E07E30619232323007B1906192323237E", realBytes);
Assert.Equal("7E2019061923232301231906192323237E7E2019061923232301231906192323237E", realBytes);
} }


[Fact] [Fact]


+ 2
- 0
src/JT808.Protocol/JT808.Protocol.xml Прегледај датотеку

@@ -6754,6 +6754,8 @@
<member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime4(System.DateTime,System.Int32)"> <member name="M:JT808.Protocol.MessagePack.JT808MessagePackWriter.WriteDateTime4(System.DateTime,System.Int32)">
<summary> <summary>
YYYYMMDD YYYYMMDD
BCD[4]
数据形如:20200101
</summary> </summary>
<param name="value"></param> <param name="value"></param>
<param name="fromBase"></param> <param name="fromBase"></param>


+ 9
- 2
src/JT808.Protocol/MessagePack/JT808MessagePackReader.cs Прегледај датотеку

@@ -6,6 +6,7 @@ using System;
using System.Buffers; using System.Buffers;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text; using System.Text;


@@ -269,6 +270,9 @@ namespace JT808.Protocol.MessagePack
try try
{ {
var readOnlySpan = GetReadOnlySpan(5); var readOnlySpan = GetReadOnlySpan(5);
StringBuilder sb = new StringBuilder(4);
sb.Append(readOnlySpan[3].ToString("X2"));
sb.Append(readOnlySpan[4].ToString("X2"));
d = new DateTime( d = new DateTime(
DateTime.Now.Year, DateTime.Now.Year,
DateTime.Now.Month, DateTime.Now.Month,
@@ -276,7 +280,7 @@ namespace JT808.Protocol.MessagePack
Convert.ToInt32(readOnlySpan[0].ToString(format)), Convert.ToInt32(readOnlySpan[0].ToString(format)),
Convert.ToInt32(readOnlySpan[1].ToString(format)), Convert.ToInt32(readOnlySpan[1].ToString(format)),
Convert.ToInt32(readOnlySpan[2].ToString(format)), Convert.ToInt32(readOnlySpan[2].ToString(format)),
Convert.ToInt32(((readOnlySpan[3] << 8) + readOnlySpan[4])));
Convert.ToInt32(sb.ToString().TrimStart()));
} }
catch catch
{ {
@@ -294,8 +298,11 @@ namespace JT808.Protocol.MessagePack
try try
{ {
var readOnlySpan = GetReadOnlySpan(4); var readOnlySpan = GetReadOnlySpan(4);
StringBuilder sb = new StringBuilder(4);
sb.Append(readOnlySpan[0].ToString("X2"));
sb.Append(readOnlySpan[1].ToString("X2"));
d = new DateTime( d = new DateTime(
(Convert.ToInt32(readOnlySpan[0].ToString(format)) << 8) + Convert.ToByte(readOnlySpan[1]),
Convert.ToInt32(sb.ToString()),
Convert.ToInt32(readOnlySpan[2].ToString(format)), Convert.ToInt32(readOnlySpan[2].ToString(format)),
Convert.ToInt32(readOnlySpan[3].ToString(format))); Convert.ToInt32(readOnlySpan[3].ToString(format)));
} }


+ 8
- 4
src/JT808.Protocol/MessagePack/JT808MessagePackWriter.cs Прегледај датотеку

@@ -177,8 +177,9 @@ namespace JT808.Protocol.MessagePack
span[0] = Convert.ToByte(value.ToString("HH"), fromBase); span[0] = Convert.ToByte(value.ToString("HH"), fromBase);
span[1] = Convert.ToByte(value.ToString("mm"), fromBase); span[1] = Convert.ToByte(value.ToString("mm"), fromBase);
span[2] = Convert.ToByte(value.ToString("ss"), fromBase); span[2] = Convert.ToByte(value.ToString("ss"), fromBase);
span[3] = (byte)(value.Millisecond >> 8);
span[4] = (byte)(value.Millisecond);
var msSpan = value.Millisecond.ToString().PadLeft(4,'0').AsSpan();
span[3] = Convert.ToByte(msSpan.Slice(0, 2).ToString(), fromBase);
span[4] = Convert.ToByte(msSpan.Slice(2, 2).ToString(), fromBase);
writer.Advance(5); writer.Advance(5);
} }
public void WriteUTCDateTime(DateTime value) public void WriteUTCDateTime(DateTime value)
@@ -195,14 +196,17 @@ namespace JT808.Protocol.MessagePack
} }
/// <summary> /// <summary>
/// YYYYMMDD /// YYYYMMDD
/// BCD[4]
/// 数据形如:20200101
/// </summary> /// </summary>
/// <param name="value"></param> /// <param name="value"></param>
/// <param name="fromBase"></param> /// <param name="fromBase"></param>
public void WriteDateTime4(DateTime value, int fromBase = 16) public void WriteDateTime4(DateTime value, int fromBase = 16)
{ {
var span = writer.Free; var span = writer.Free;
span[0] = (byte)(value.Year >> 8);
span[1] = (byte)(value.Year);
var yearSpan=value.ToString("yyyy").AsSpan();
span[0] = Convert.ToByte(yearSpan.Slice(0, 2).ToString(), fromBase);
span[1] = Convert.ToByte(yearSpan.Slice(2, 2).ToString(), fromBase);
span[2] = Convert.ToByte(value.ToString("MM"), fromBase); span[2] = Convert.ToByte(value.ToString("MM"), fromBase);
span[3] = Convert.ToByte(value.ToString("dd"), fromBase); span[3] = Convert.ToByte(value.ToString("dd"), fromBase);
writer.Advance(4); writer.Advance(4);


Loading…
Откажи
Сачувај