From 6f948373338fe7cd9b21f8c50c96a9922ec0e484 Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Mon, 12 Aug 2019 07:34:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=8F=E7=BA=AC=E5=BA=A6=E8=B4=9F=E6=95=B0?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MessageBody/JT808_0x0200Test.cs | 64 +++++++++++++++++++ .../JT808_0x0200_Formatter.cs | 35 +++++++--- 2 files changed, 91 insertions(+), 8 deletions(-) diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs index 93868f5..94eb983 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0200Test.cs @@ -370,5 +370,69 @@ namespace JT808.Protocol.Test.MessageBody Assert.Equal("7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E", hex); //7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E } + + [Fact] + public void Test6() + { + JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 + { + AlarmFlag = 1, + Altitude = 40, + GPSTime = DateTime.Parse("2018-07-15 10:10:10"), + Lat = -12222222, + Lng = -132444444, + Speed = 60, + Direction = 0, + JT808LocationAttachData = new Dictionary() + }; + jT808UploadLocationRequest.StatusFlag = 402653184; + var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); + Assert.Equal("0000000118000000FF4580F2F81B0EE40028003C0000180715101010", hex); + } + + [Fact] + public void Test6_1() + { + byte[] bodys = "0000000118000000FF4580F2F81B0EE40028003C0000180715101010".ToHexBytes(); + JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize(bodys); + Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag); + Assert.Equal(402653184u, jT808UploadLocationRequest.StatusFlag); + Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime); + Assert.Equal(-12222222, jT808UploadLocationRequest.Lat); + Assert.Equal(-132444444, jT808UploadLocationRequest.Lng); + Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬ + } + + [Fact] + public void Test7() + { + JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200 + { + AlarmFlag = 1, + Altitude = 40, + GPSTime = DateTime.Parse("2018-07-15 10:10:10"), + Lat = 12222222, + Lng = 132444444, + Speed = 60, + Direction = 0, + JT808LocationAttachData = new Dictionary() + }; + jT808UploadLocationRequest.StatusFlag = 0x8000000; + var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString(); + Assert.Equal("000000010800000000BA7F0EF81B0EE40028003C0000180715101010", hex); + } + + [Fact] + public void Test7_1() + { + byte[] bodys = "000000010800000000BA7F0EF81B0EE40028003C0000180715101010".ToHexBytes(); + JT808_0x0200 jT808UploadLocationRequest = JT808Serializer.Deserialize(bodys); + Assert.Equal(1u, jT808UploadLocationRequest.AlarmFlag); + Assert.Equal((uint)0x8000000, jT808UploadLocationRequest.StatusFlag); + Assert.Equal(DateTime.Parse("2018-07-15 10:10:10"), jT808UploadLocationRequest.GPSTime); + Assert.Equal(12222222, jT808UploadLocationRequest.Lat); + Assert.Equal(-132444444, jT808UploadLocationRequest.Lng); + Assert.Equal(60, jT808UploadLocationRequest.Speed); //‭402653184‬ + } } } diff --git a/src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs b/src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs index 9278ba6..f249095 100644 --- a/src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs +++ b/src/JT808.Protocol/Formatters/MessageBodyFormatters/JT808_0x0200_Formatter.cs @@ -15,16 +15,21 @@ namespace JT808.Protocol.Formatters.MessageBodyFormatters JT808_0x0200 jT808_0X0200 = new JT808_0x0200(); jT808_0X0200.AlarmFlag = reader.ReadUInt32(); jT808_0X0200.StatusFlag = reader.ReadUInt32(); - jT808_0X0200.Lat = reader.ReadInt32(); jT808_0X0200.Lng = reader.ReadInt32(); - JT808StatusProperty jT808StatusProperty = new JT808StatusProperty(Convert.ToString(jT808_0X0200.StatusFlag, 2).PadLeft(32, '0')); - if (jT808StatusProperty.Bit28 == '1')//西经 - { - jT808_0X0200.Lng = -jT808_0X0200.Lng; - } - if (jT808StatusProperty.Bit29 == '1')//南纬 + jT808_0X0200.Lng = reader.ReadInt32(); +#warning 反解析的时候 负数 + switch (jT808_0X0200.StatusFlag) { - jT808_0X0200.Lat = -jT808_0X0200.Lat; + case 0x8000000: //西经 ‭134217728‬ + //jT808_0X0200.Lng = -lng; + break; + case 0x10000000: //南纬 268435456 + //jT808_0X0200.Lat = -lat; + break; + case 0x18000000: //西经-南纬 ‭402653184‬ + //jT808_0X0200.Lat = -lat; + //jT808_0X0200.Lng = -lng; + break; } jT808_0X0200.Altitude = reader.ReadUInt16(); jT808_0X0200.Speed = reader.ReadUInt16(); @@ -82,6 +87,20 @@ namespace JT808.Protocol.Formatters.MessageBodyFormatters { writer.WriteUInt32(value.AlarmFlag); writer.WriteUInt32(value.StatusFlag); +#warning 反解析的时候 负数 + switch (value.StatusFlag) + { + case 0x8000000: //西经 ‭134217728‬ + value.Lat = -value.Lat; + break; + case 0x10000000: //南纬 268435456 + value.Lng = -value.Lng; + break; + case 0x18000000: //西经-南纬 ‭402653184‬ + value.Lat = -value.Lat; + value.Lng = -value.Lng; + break; + } writer.WriteInt32(value.Lat); writer.WriteInt32(value.Lng); writer.WriteUInt16(value.Altitude);