diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj
index 501a5ce..e812d17 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808.Protocol.Extensions.JTActiveSafety.Test.csproj
@@ -1,15 +1,20 @@
- netcoreapp2.2
+ netcoreapp3.1
false
+
+
+
+
+
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x64_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x64_Test.cs
new file mode 100644
index 0000000..2d77ed4
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x64_Test.cs
@@ -0,0 +1,94 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x0200_0x64_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x0200_0x64_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ 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,
+ StatusFlag = 2,
+ JT808LocationAttachData = new Dictionary()
+ };
+ jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x64, new JT808_0x0200_0x64
+ {
+ AlarmId = 1,
+ AlarmIdentification = new Metadata.AlarmIdentificationProperty
+ {
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AlarmLevel = 5,
+ AlarmOrEventType = 6,
+ AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"),
+ Altitude = 7,
+ CarOrPedestrianDistanceAhead = 10,
+ DeviateType = 11,
+ FlagState = 12,
+ Latitude = 13,
+ Longitude = 14,
+ RoadSignIdentificationData = 15,
+ RoadSignIdentificationType = 16,
+ Speed = 17,
+ VehicleSpeed = 18,
+ VehicleState = 19
+ });
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106420000000010C0605120A0B100F1100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
+ jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_Constants.JT808_0X0200_0x64, out var value);
+ JT808_0x0200_0x64 jT808_0X0200_0X64 = value as JT808_0x0200_0x64;
+ Assert.Equal(1u, jT808_0X0200_0X64.AlarmId);
+ Assert.Equal(2, jT808_0X0200_0X64.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808_0X0200_0X64.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808_0X0200_0X64.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X64.AlarmIdentification.Time);
+ Assert.Equal(5, jT808_0X0200_0X64.AlarmLevel);
+ Assert.Equal(6, jT808_0X0200_0X64.AlarmOrEventType);
+ Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X64.AlarmTime);
+ Assert.Equal(7, jT808_0X0200_0X64.Altitude);
+ Assert.Equal(0x64, jT808_0X0200_0X64.AttachInfoId);
+ Assert.Equal(32, jT808_0X0200_0X64.AttachInfoLength);
+ Assert.Equal(10, jT808_0X0200_0X64.CarOrPedestrianDistanceAhead);
+ Assert.Equal(11, jT808_0X0200_0X64.DeviateType);
+ Assert.Equal(12, jT808_0X0200_0X64.FlagState);
+ Assert.Equal(13, jT808_0X0200_0X64.Latitude);
+ Assert.Equal(14, jT808_0X0200_0X64.Longitude);
+ Assert.Equal(15, jT808_0X0200_0X64.RoadSignIdentificationData);
+ Assert.Equal(16, jT808_0X0200_0X64.RoadSignIdentificationType);
+ Assert.Equal(17, jT808_0X0200_0X64.Speed);
+ Assert.Equal(18, jT808_0X0200_0X64.VehicleSpeed);
+ Assert.Equal(19, jT808_0X0200_0X64.VehicleState);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
new file mode 100644
index 0000000..761a7b0
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x65_Test.cs
@@ -0,0 +1,88 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x0200_0x65_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x0200_0x65_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ 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,
+ StatusFlag = 2,
+ JT808LocationAttachData = new Dictionary()
+ };
+ jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x65, new JT808_0x0200_0x65
+ {
+ AlarmId = 1,
+ AlarmIdentification = new Metadata.AlarmIdentificationProperty
+ {
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AlarmLevel = 5,
+ AlarmOrEventType = 6,
+ AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"),
+ Altitude = 7,
+ Retain=new byte[] { 1, 2, 3, 4 },
+ FlagState = 12,
+ Latitude = 13,
+ Longitude = 14,
+ Speed = 17,
+ Fatigue=18,
+ VehicleState = 19
+ });
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C00001807151010106520000000010C060512010203041100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
+ jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_Constants.JT808_0X0200_0x65, out var value);
+ JT808_0x0200_0x65 jT808_0X0200_0X65 = value as JT808_0x0200_0x65;
+ Assert.Equal(1u, jT808_0X0200_0X65.AlarmId);
+ Assert.Equal(2, jT808_0X0200_0X65.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808_0X0200_0X65.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808_0X0200_0X65.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X65.AlarmIdentification.Time);
+ Assert.Equal(5, jT808_0X0200_0X65.AlarmLevel);
+ Assert.Equal(6, jT808_0X0200_0X65.AlarmOrEventType);
+ Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X65.AlarmTime);
+ Assert.Equal(7, jT808_0X0200_0X65.Altitude);
+ Assert.Equal(0x65, jT808_0X0200_0X65.AttachInfoId);
+ Assert.Equal(32, jT808_0X0200_0X65.AttachInfoLength);
+ Assert.Equal(new byte[] { 1, 2, 3, 4 }.ToHexString(), jT808_0X0200_0X65.Retain.ToHexString());
+ Assert.Equal(12, jT808_0X0200_0X65.FlagState);
+ Assert.Equal(13, jT808_0X0200_0X65.Latitude);
+ Assert.Equal(14, jT808_0X0200_0X65.Longitude);
+ Assert.Equal(17, jT808_0X0200_0X65.Speed);
+ Assert.Equal(18, jT808_0X0200_0X65.Fatigue);
+ Assert.Equal(19, jT808_0X0200_0X65.VehicleState);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x66_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x66_Test.cs
new file mode 100644
index 0000000..3ba2c3f
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x66_Test.cs
@@ -0,0 +1,107 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x0200_0x66_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x0200_0x66_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ 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,
+ StatusFlag = 2,
+ JT808LocationAttachData = new Dictionary()
+ };
+ jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x66, new JT808_0x0200_0x66
+ {
+ AlarmId = 1,
+ AlarmIdentification = new Metadata.AlarmIdentificationProperty
+ {
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"),
+ Altitude = 7,
+ AlarmOrEventCount = 2,
+ AlarmOrEvents = new List {
+ new Metadata.AlarmOrEventProperty{
+ AlarmOrEventType=1,
+ BatteryLevel=2,
+ TirePressure=3,
+ TirePressureAlarmPosition=4,
+ TireTemperature=5
+ },
+ new Metadata.AlarmOrEventProperty{
+ AlarmOrEventType=6,
+ BatteryLevel=7,
+ TirePressure=8,
+ TirePressureAlarmPosition=9,
+ TireTemperature=10
+ }
+ },
+ FlagState = 12,
+ Latitude = 13,
+ Longitude = 14,
+ Speed = 17,
+ VehicleState = 19
+ });
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C0000180715101010663B000000010C1100070000000D0000000E191211183100001334343434343434191210183100030200020400010003000500020900060008000A0007".ToHexBytes());
+ jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_Constants.JT808_0X0200_0x66, out var value);
+ JT808_0x0200_0x66 jT808_0X0200_0X66 = value as JT808_0x0200_0x66;
+ Assert.Equal(1u, jT808_0X0200_0X66.AlarmId);
+ Assert.Equal(2, jT808_0X0200_0X66.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808_0X0200_0X66.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808_0X0200_0X66.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X66.AlarmIdentification.Time);
+ Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X66.AlarmTime);
+ Assert.Equal(7, jT808_0X0200_0X66.Altitude);
+ Assert.Equal(2, jT808_0X0200_0X66.AlarmOrEventCount);
+ Assert.Equal(1, jT808_0X0200_0X66.AlarmOrEvents[0].AlarmOrEventType);
+ Assert.Equal(2, jT808_0X0200_0X66.AlarmOrEvents[0].BatteryLevel);
+ Assert.Equal(3, jT808_0X0200_0X66.AlarmOrEvents[0].TirePressure);
+ Assert.Equal(4, jT808_0X0200_0X66.AlarmOrEvents[0].TirePressureAlarmPosition);
+ Assert.Equal(5, jT808_0X0200_0X66.AlarmOrEvents[0].TireTemperature);
+ Assert.Equal(6, jT808_0X0200_0X66.AlarmOrEvents[1].AlarmOrEventType);
+ Assert.Equal(7, jT808_0X0200_0X66.AlarmOrEvents[1].BatteryLevel);
+ Assert.Equal(8, jT808_0X0200_0X66.AlarmOrEvents[1].TirePressure);
+ Assert.Equal(9, jT808_0X0200_0X66.AlarmOrEvents[1].TirePressureAlarmPosition);
+ Assert.Equal(10, jT808_0X0200_0X66.AlarmOrEvents[1].TireTemperature);
+ Assert.Equal(0x66, jT808_0X0200_0X66.AttachInfoId);
+ Assert.Equal(12, jT808_0X0200_0X66.FlagState);
+ Assert.Equal(13, jT808_0X0200_0X66.Latitude);
+ Assert.Equal(14, jT808_0X0200_0X66.Longitude);
+ Assert.Equal(17, jT808_0X0200_0X66.Speed);
+ Assert.Equal(19, jT808_0X0200_0X66.VehicleState);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x67_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x67_Test.cs
new file mode 100644
index 0000000..280ad27
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x0200_0x67_Test.cs
@@ -0,0 +1,84 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x0200_0x67_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x0200_0x67_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ 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,
+ StatusFlag = 2,
+ JT808LocationAttachData = new Dictionary()
+ };
+ jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x67, new JT808_0x0200_0x67
+ {
+ AlarmId = 1,
+ AlarmIdentification = new Metadata.AlarmIdentificationProperty
+ {
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AlarmTime = Convert.ToDateTime("2019-12-11 18:31:00"),
+ Altitude = 7,
+ AlarmLevel=8,
+ AlarmOrEventType=9,
+ FlagState = 12,
+ Latitude = 13,
+ Longitude = 14,
+ Speed = 17,
+ VehicleState = 19
+ });
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("000000010000000200BA7F0E07E4F11C0028003C0000180715101010671A000000010C09081100070000000D0000000E191211183100001334343434343434191210183100030200".ToHexBytes());
+ jT808UploadLocationRequest.JT808LocationAttachData.TryGetValue(JT808_JTActiveSafety_Constants.JT808_0X0200_0x67, out var value);
+ JT808_0x0200_0x67 jT808_0X0200_0X67 = value as JT808_0x0200_0x67;
+ Assert.Equal(1u, jT808_0X0200_0X67.AlarmId);
+ Assert.Equal(2, jT808_0X0200_0X67.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808_0X0200_0X67.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808_0X0200_0X67.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808_0X0200_0X67.AlarmIdentification.Time);
+ Assert.Equal(Convert.ToDateTime("2019-12-11 18:31:00"), jT808_0X0200_0X67.AlarmTime);
+ Assert.Equal(7, jT808_0X0200_0X67.Altitude);
+ Assert.Equal(8, jT808_0X0200_0X67.AlarmLevel);
+ Assert.Equal(9, jT808_0X0200_0X67.AlarmOrEventType);
+ Assert.Equal(0x67, jT808_0X0200_0X67.AttachInfoId);
+ Assert.Equal(26, jT808_0X0200_0X67.AttachInfoLength);
+ Assert.Equal(12, jT808_0X0200_0X67.FlagState);
+ Assert.Equal(13, jT808_0X0200_0X67.Latitude);
+ Assert.Equal(14, jT808_0X0200_0X67.Longitude);
+ Assert.Equal(17, jT808_0X0200_0X67.Speed);
+ Assert.Equal(19, jT808_0X0200_0X67.VehicleState);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs
new file mode 100644
index 0000000..7076d48
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1210_Test.cs
@@ -0,0 +1,76 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x1210_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x1210_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x1210 jT808UploadLocationRequest = new JT808_0x1210
+ {
+ AlarmId = "11111111111111111111111111111111",
+ AlarmIdentification = new Metadata.AlarmIdentificationProperty
+ {
+ Retain = 1,
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AttachInfos = new List {
+ new Metadata.AttachProperty{
+ FileName="filename",
+ FileSize=9
+ },
+ new Metadata.AttachProperty{
+ FileName="filename1",
+ FileSize=10
+ }
+ },
+ TerminalID = "4444444",
+ InfoType = 0
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("3434343434343434343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100020866696C656E616D65000000090966696C656E616D65310000000A".ToHexBytes());
+ Assert.Equal("11111111111111111111111111111111", jT808UploadLocationRequest.AlarmId);
+ Assert.Equal(2, jT808UploadLocationRequest.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808UploadLocationRequest.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808UploadLocationRequest.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808UploadLocationRequest.AlarmIdentification.Time);
+ Assert.Equal(2, jT808UploadLocationRequest.AttachCount);
+
+ Assert.Equal("filename", jT808UploadLocationRequest.AttachInfos[0].FileName);
+ Assert.Equal(8, jT808UploadLocationRequest.AttachInfos[0].FileNameLength);
+ Assert.Equal(9u, jT808UploadLocationRequest.AttachInfos[0].FileSize);
+
+ Assert.Equal("filename1", jT808UploadLocationRequest.AttachInfos[1].FileName);
+ Assert.Equal(9, jT808UploadLocationRequest.AttachInfos[1].FileNameLength);
+ Assert.Equal(10u, jT808UploadLocationRequest.AttachInfos[1].FileSize);
+
+ Assert.Equal("4444444", jT808UploadLocationRequest.TerminalID);
+ Assert.Equal(0, jT808UploadLocationRequest.InfoType);
+
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs
new file mode 100644
index 0000000..21e06b3
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1211_Test.cs
@@ -0,0 +1,44 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x1211_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x1211_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x1211 jT808UploadLocationRequest = new JT808_0x1211
+ {
+ FileName= "FileName",
+ FileSize=1,
+ FileType=2
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("0846696C654E616D650200000001", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("0846696C654E616D650200000001".ToHexBytes());
+ Assert.Equal("FileName", jT808UploadLocationRequest.FileName);
+ Assert.Equal(1u, jT808UploadLocationRequest.FileSize);
+ Assert.Equal(2, jT808UploadLocationRequest.FileType);
+ Assert.Equal("FileName".Length, jT808UploadLocationRequest.FileNameLength);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1212_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1212_Test.cs
new file mode 100644
index 0000000..f91515f
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x1212_Test.cs
@@ -0,0 +1,44 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x1212_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x1212_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x1212 jT808UploadLocationRequest = new JT808_0x1212
+ {
+ FileName= "FileName",
+ FileSize=1,
+ FileType=2
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("0846696C654E616D650200000001", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("0846696C654E616D650200000001".ToHexBytes());
+ Assert.Equal("FileName", jT808UploadLocationRequest.FileName);
+ Assert.Equal(1u, jT808UploadLocationRequest.FileSize);
+ Assert.Equal(2, jT808UploadLocationRequest.FileType);
+ Assert.Equal("FileName".Length, jT808UploadLocationRequest.FileNameLength);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs
new file mode 100644
index 0000000..996fa33
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF364_Test.cs
@@ -0,0 +1,133 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x8103_0xF364_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x8103_0xF364_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
+ {
+ ParamList=new List {
+ new JT808_0x8103_0xF364{
+ ActiveDistancePhotographyDistanceInterval=1,
+ ActivelyTimePhotoInterval=2,
+ ActivePhotographyStrategy=3,
+ AlarmEnable=4,
+ AlarmJudgeSpeedThreshold=5,
+ AlarmPhotoVehicleCloseDistance=6,
+ AlarmPhotoVehicleCloseDistanceInterval=7,
+ BarrierAlarmPhotographs=8,
+ DistanceThresholdObstacleAlarm=9,
+ EventEnable=10,
+ ForwardCollisionAlarmInterval=11,
+ ForwardCollisionAlarmPhotographs=12,
+ ForwardCollisionWarningTimeThreshold=13,
+ FrequentAlarmJudgmentNumberChannelChange=14,
+ FrequentChannelChangeAlarmJudgmentTimePeriod=15,
+ FrequentChannelChangeAlarmPhotos=16,
+ FrequentLaneChangeAlarmInterval=17,
+ GradedSpeedThresholdLaneDeviationAlarm=18,
+ HierarchicalSpeedThresholdForwardCollisionWarning=19,
+ HierarchicalSpeedThresholdFrequentChannelChangeAlarm=20,
+ HierarchicalSpeedThresholdObstacleAlarm=21,
+ LaneDepartureAlarmPhoto=22,
+ LaneDepartureAlarmPhotoInterval=23,
+ ObstacleAlarmInterval=24,
+ PedestrianCollisionAlarmEnablingSpeedThreshold=25,
+ PedestrianCollisionAlarmInterval=26,
+ PedestrianCollisionAlarmPhotos=27,
+ PedestrianCollisionAlarmTimeThreshold=28,
+ PhotoResolution=29,
+ Placeholder1=30,
+ Placeholder2=new byte[]{1,2,3,4 },
+ RoadSignRecognitionPhotographs=32,
+ RoadSignRecognitionPhotographsInterval=33,
+ SingleInitiativePhotos=34,
+ SingleInitiativePhotosInterval=35,
+ VehicleDistanceMonitoringAlarmDistanceThreshold=36,
+ VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold=37,
+ VideoRecordingResolution=38,
+ VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity=39,
+ VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm=40,
+ VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm=41,
+ VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm=42,
+ VideoRecordingTimeBeforeAndAfterObstacleAlarm=43,
+ VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm=44,
+ WarningVolume=45
+ }
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F36438052D030002000122231D26000000040000000A1E09152B08180F0E14291011122A16170D13280C0B1C192C1B1A2425270607202101020304".ToHexBytes());
+ JT808_0x8103_0xF364 jT808_0X8103_0XF364 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF364;
+ Assert.Equal(1, jT808_0X8103_0XF364.ActiveDistancePhotographyDistanceInterval);
+ Assert.Equal(2, jT808_0X8103_0XF364.ActivelyTimePhotoInterval);
+ Assert.Equal(3, jT808_0X8103_0XF364.ActivePhotographyStrategy);
+ Assert.Equal(4u, jT808_0X8103_0XF364.AlarmEnable);
+ Assert.Equal(5, jT808_0X8103_0XF364.AlarmJudgeSpeedThreshold);
+ Assert.Equal(6, jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistance);
+ Assert.Equal(7, jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistanceInterval);
+ Assert.Equal(8, jT808_0X8103_0XF364.BarrierAlarmPhotographs);
+ Assert.Equal(9, jT808_0X8103_0XF364.DistanceThresholdObstacleAlarm);
+ Assert.Equal(10u, jT808_0X8103_0XF364.EventEnable);
+ Assert.Equal(11, jT808_0X8103_0XF364.ForwardCollisionAlarmInterval);
+ Assert.Equal(12, jT808_0X8103_0XF364.ForwardCollisionAlarmPhotographs);
+ Assert.Equal(13, jT808_0X8103_0XF364.ForwardCollisionWarningTimeThreshold);
+ Assert.Equal(14, jT808_0X8103_0XF364.FrequentAlarmJudgmentNumberChannelChange);
+ Assert.Equal(15, jT808_0X8103_0XF364.FrequentChannelChangeAlarmJudgmentTimePeriod);
+ Assert.Equal(16, jT808_0X8103_0XF364.FrequentChannelChangeAlarmPhotos);
+ Assert.Equal(17, jT808_0X8103_0XF364.FrequentLaneChangeAlarmInterval);
+ Assert.Equal(18, jT808_0X8103_0XF364.GradedSpeedThresholdLaneDeviationAlarm);
+ Assert.Equal(19, jT808_0X8103_0XF364.HierarchicalSpeedThresholdForwardCollisionWarning);
+ Assert.Equal(20, jT808_0X8103_0XF364.HierarchicalSpeedThresholdFrequentChannelChangeAlarm);
+ Assert.Equal(21, jT808_0X8103_0XF364.HierarchicalSpeedThresholdObstacleAlarm);
+ Assert.Equal(22, jT808_0X8103_0XF364.LaneDepartureAlarmPhoto);
+ Assert.Equal(23, jT808_0X8103_0XF364.LaneDepartureAlarmPhotoInterval);
+ Assert.Equal(24, jT808_0X8103_0XF364.ObstacleAlarmInterval);
+ Assert.Equal(25, jT808_0X8103_0XF364.PedestrianCollisionAlarmEnablingSpeedThreshold);
+ Assert.Equal(26, jT808_0X8103_0XF364.PedestrianCollisionAlarmInterval);
+ Assert.Equal(27, jT808_0X8103_0XF364.PedestrianCollisionAlarmPhotos);
+ Assert.Equal(28, jT808_0X8103_0XF364.PedestrianCollisionAlarmTimeThreshold);
+ Assert.Equal(29, jT808_0X8103_0XF364.PhotoResolution);
+ Assert.Equal(30, jT808_0X8103_0XF364.Placeholder1);
+ Assert.Equal(new byte[] { 1, 2, 3, 4 }.ToHexString(), jT808_0X8103_0XF364.Placeholder2.ToHexString());
+ Assert.Equal(32, jT808_0X8103_0XF364.RoadSignRecognitionPhotographs);
+ Assert.Equal(33, jT808_0X8103_0XF364.RoadSignRecognitionPhotographsInterval);
+ Assert.Equal(34, jT808_0X8103_0XF364.SingleInitiativePhotos);
+ Assert.Equal(35, jT808_0X8103_0XF364.SingleInitiativePhotosInterval);
+ Assert.Equal(36, jT808_0X8103_0XF364.VehicleDistanceMonitoringAlarmDistanceThreshold);
+ Assert.Equal(37, jT808_0X8103_0XF364.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold);
+ Assert.Equal(38, jT808_0X8103_0XF364.VideoRecordingResolution);
+ Assert.Equal(39, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity);
+ Assert.Equal(40, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm);
+ Assert.Equal(41, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm);
+ Assert.Equal(42, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm);
+ Assert.Equal(43, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterObstacleAlarm);
+ Assert.Equal(44, jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm);
+ Assert.Equal(45, jT808_0X8103_0XF364.WarningVolume);
+ Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364, jT808_0X8103_0XF364.ParamId);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs
new file mode 100644
index 0000000..5502d67
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF365_Test.cs
@@ -0,0 +1,111 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x8103_0xF365_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x8103_0xF365_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
+ {
+ ParamList=new List {
+ new JT808_0x8103_0xF365{
+ ActiveDistancePhotographyDistanceInterval=1,
+ ActivelyTimePhotoInterval=2,
+ ActivePhotographyStrategy=3,
+ AlarmEnable=4,
+ AlarmJudgeSpeedThreshold=5,
+ EventEnable=10,
+ PhotoResolution=29,
+ SingleInitiativePhotos=34,
+ SingleInitiativePhotosInterval=35,
+ VideoRecordingResolution=38,
+ WarningVolume=45,
+ CallAlarmDetermineTimeInterval=46,
+ CallAlarmTakePicturesDriverFacialFeatures=47,
+ CallAlarmTakePicturesDriverFacialFeaturesInterval=48,
+ ClassifiedSpeedThresholdCallAlarm=49,
+ ClassifiedSpeedThresholdDistractedDrivingAlarm=50,
+ ClassifiedSpeedThresholdSmokingAlarm=51,
+ DistractedDrivingAlarmPhotography=52,
+ DistractedDrivingAlarmPhotographyInterval=53,
+ DriverIdentificationTrigger=54,
+ FatigueDrivingAlarmPhotograph=55,
+ FatigueDrivingAlarmPhotographInterval=56,
+ GradedSpeedThresholdFatigueDrivingAlarm=57,
+ PhotographsAbnormalDrivingBehavior=58,
+ PictureIntervalAbnormalDrivingBehavior=59,
+ Reserve=new byte[]{1,2,3 },
+ Retain=new byte[]{5,6 },
+ SmokingAlarmPhotographsDriverFaceCharacteristics=60,
+ SmokingAlarmPhotographsDriverFaceCharacteristicsInterval=61,
+ TimeIntervalSmokingAlarmJudgment=62,
+ VideoRecordingTimeAbnormalDrivingBehavior=63,
+ VideoRecordingTimeBeforeAndAfterCallAlarm=64,
+ VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm=65,
+ VideoRecordingTimeBeforeAndAfterSmokingAlarm=66
+ }
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F3652F052D030002000122231D26000000040000000A003E002E0102033941373831402F3033423C3D3234353F3A3B360506".ToHexBytes());
+ JT808_0x8103_0xF365 jT808_0X8103_0XF365 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF365;
+ Assert.Equal(1, jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval);
+ Assert.Equal(2, jT808_0X8103_0XF365.ActivelyTimePhotoInterval);
+ Assert.Equal(3, jT808_0X8103_0XF365.ActivePhotographyStrategy);
+ Assert.Equal(4u, jT808_0X8103_0XF365.AlarmEnable);
+ Assert.Equal(5, jT808_0X8103_0XF365.AlarmJudgeSpeedThreshold);
+ Assert.Equal(10u, jT808_0X8103_0XF365.EventEnable);
+ Assert.Equal(29, jT808_0X8103_0XF365.PhotoResolution);
+ Assert.Equal(34, jT808_0X8103_0XF365.SingleInitiativePhotos);
+ Assert.Equal(35, jT808_0X8103_0XF365.SingleInitiativePhotosInterval);
+ Assert.Equal(38, jT808_0X8103_0XF365.VideoRecordingResolution);
+ Assert.Equal(45, jT808_0X8103_0XF365.WarningVolume);
+ Assert.Equal(46, jT808_0X8103_0XF365.CallAlarmDetermineTimeInterval);
+ Assert.Equal(47, jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeatures);
+ Assert.Equal(48, jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeaturesInterval);
+ Assert.Equal(49, jT808_0X8103_0XF365.ClassifiedSpeedThresholdCallAlarm);
+ Assert.Equal(50, jT808_0X8103_0XF365.ClassifiedSpeedThresholdDistractedDrivingAlarm);
+ Assert.Equal(51, jT808_0X8103_0XF365.ClassifiedSpeedThresholdSmokingAlarm);
+ Assert.Equal(52, jT808_0X8103_0XF365.DistractedDrivingAlarmPhotography);
+ Assert.Equal(53, jT808_0X8103_0XF365.DistractedDrivingAlarmPhotographyInterval);
+ Assert.Equal(54, jT808_0X8103_0XF365.DriverIdentificationTrigger);
+ Assert.Equal(55, jT808_0X8103_0XF365.FatigueDrivingAlarmPhotograph);
+ Assert.Equal(56, jT808_0X8103_0XF365.FatigueDrivingAlarmPhotographInterval);
+ Assert.Equal(57, jT808_0X8103_0XF365.GradedSpeedThresholdFatigueDrivingAlarm);
+ Assert.Equal(58, jT808_0X8103_0XF365.PhotographsAbnormalDrivingBehavior);
+ Assert.Equal(59, jT808_0X8103_0XF365.PictureIntervalAbnormalDrivingBehavior);
+ Assert.Equal(new byte[] { 1, 2, 3 }.ToHexString(), jT808_0X8103_0XF365.Reserve.ToHexString());
+ Assert.Equal(new byte[] { 5, 6 }.ToHexString(), jT808_0X8103_0XF365.Retain.ToHexString());
+ Assert.Equal(60, jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristics);
+ Assert.Equal(61, jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval);
+ Assert.Equal(62, jT808_0X8103_0XF365.TimeIntervalSmokingAlarmJudgment);
+ Assert.Equal(63, jT808_0X8103_0XF365.VideoRecordingTimeAbnormalDrivingBehavior);
+ Assert.Equal(64, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm);
+ Assert.Equal(65, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm);
+ Assert.Equal(66, jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm);
+ Assert.Equal(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365, jT808_0X8103_0XF365.ParamId);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs
new file mode 100644
index 0000000..6edad20
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF366_Test.cs
@@ -0,0 +1,64 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x8103_0xF366_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x8103_0xF366_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
+ {
+ ParamList=new List {
+ new JT808_0x8103_0xF366{
+ HighTemperatureThreshold=1,
+ HighVoltageThreshold=2,
+ LowVoltageThreshold=3,
+ NormalFetalPressure=4,
+ Retain=new byte[]{1,2,3,4,5,6 },
+ SlowLeakageThreshold=5,
+ ThresholdUnbalancedTirePressure=6,
+ TimedReportingInterval=7,
+ TyrePressureUnit=8,
+ TyreSpecificationType="999999999999",
+ VoltageThreshold=10
+ }
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F366243939393939393939393939390008000400060005000300020001000A0007010203040506".ToHexBytes());
+ JT808_0x8103_0xF366 jT808_0x8103_0xF366 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF366;
+ Assert.Equal(1, jT808_0x8103_0xF366.HighTemperatureThreshold);
+ Assert.Equal(2, jT808_0x8103_0xF366.HighVoltageThreshold);
+ Assert.Equal(3, jT808_0x8103_0xF366.LowVoltageThreshold);
+ Assert.Equal(4, jT808_0x8103_0xF366.NormalFetalPressure);
+ Assert.Equal(new byte[] { 1, 2, 3, 4, 5, 6 }.ToHexString(), jT808_0x8103_0xF366.Retain.ToHexString());
+ Assert.Equal(5, jT808_0x8103_0xF366.SlowLeakageThreshold);
+ Assert.Equal(6, jT808_0x8103_0xF366.ThresholdUnbalancedTirePressure);
+ Assert.Equal(7, jT808_0x8103_0xF366.TimedReportingInterval);
+ Assert.Equal(8, jT808_0x8103_0xF366.TyrePressureUnit);
+ Assert.Equal("999999999999", jT808_0x8103_0xF366.TyreSpecificationType);
+ Assert.Equal(10, jT808_0x8103_0xF366.VoltageThreshold);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs
new file mode 100644
index 0000000..1bd0ab8
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x8103_0xF367_Test.cs
@@ -0,0 +1,46 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x8103_0xF367_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x8103_0xF367_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x8103 jT808UploadLocationRequest = new JT808_0x8103
+ {
+ ParamList=new List {
+ new JT808_0x8103_0xF367{
+ LateralRearApproachAlarmTimeThreshold=1,
+ RearApproachAlarmTimeThreshold=2
+ }
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("010000F367020201", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("010000F367020201".ToHexBytes());
+ JT808_0x8103_0xF367 jT808_0x8103_0xF367 = jT808UploadLocationRequest.ParamList[0] as JT808_0x8103_0xF367;
+ Assert.Equal(1, jT808_0x8103_0xF367.LateralRearApproachAlarmTimeThreshold);
+ Assert.Equal(2, jT808_0x8103_0xF367.RearApproachAlarmTimeThreshold);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs
new file mode 100644
index 0000000..8a68d4c
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9208_Test.cs
@@ -0,0 +1,58 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x9208_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x9208_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x9208 jT808UploadLocationRequest = new JT808_0x9208
+ {
+ AlarmId="11111111111111111111111111111111",
+ AlarmIdentification=new Metadata.AlarmIdentificationProperty {
+ Retain=1,
+ AttachCount = 2,
+ SN = 3,
+ TerminalID = "4444444",
+ Time = Convert.ToDateTime("2019-12-10 18:31:00")
+ },
+ AttachmentServerIP="192.168.1.1",
+ AttachmentServerIPTcpPort=5000,
+ AttachmentServerIPUdpPort=5001
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("0B3139322E3136382E312E311388138934343434343434191210183100030201313131313131313131313131313131313131313131313131313131313131313100000000000000000000000000000000".ToHexBytes());
+ Assert.Equal("11111111111111111111111111111111", jT808UploadLocationRequest.AlarmId);
+ Assert.Equal(1, jT808UploadLocationRequest.AlarmIdentification.Retain);
+ Assert.Equal(2, jT808UploadLocationRequest.AlarmIdentification.AttachCount);
+ Assert.Equal(3, jT808UploadLocationRequest.AlarmIdentification.SN);
+ Assert.Equal("4444444", jT808UploadLocationRequest.AlarmIdentification.TerminalID);
+ Assert.Equal(Convert.ToDateTime("2019-12-10 18:31:00"), jT808UploadLocationRequest.AlarmIdentification.Time);
+ Assert.Equal("192.168.1.1", jT808UploadLocationRequest.AttachmentServerIP);
+ Assert.Equal("192.168.1.1".Length, jT808UploadLocationRequest.AttachmentServerIPLength);
+ Assert.Equal(5000, jT808UploadLocationRequest.AttachmentServerIPTcpPort);
+ Assert.Equal(5001, jT808UploadLocationRequest.AttachmentServerIPUdpPort);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs
new file mode 100644
index 0000000..a77be8d
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_0x9212_Test.cs
@@ -0,0 +1,61 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_0x9212_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_0x9212_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_0x9212 jT808UploadLocationRequest = new JT808_0x9212
+ {
+ DataPackageCount=2,
+ DataPackages=new List {
+ new Metadata.DataPackageProperty{
+ Length=10,
+ Offset=20
+ },
+ new Metadata.DataPackageProperty{
+ Length=30,
+ Offset=40
+ }
+ },
+ FileName= "FileName",
+ FileType=1,
+ UploadResult=2
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("0846696C654E616D65010202000000140000000A000000280000001E", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("0846696C654E616D65010202000000140000000A000000280000001E".ToHexBytes());
+ Assert.Equal(2, jT808UploadLocationRequest.DataPackageCount);
+ Assert.Equal("FileName", jT808UploadLocationRequest.FileName);
+ Assert.Equal(1, jT808UploadLocationRequest.FileType);
+ Assert.Equal(2, jT808UploadLocationRequest.UploadResult);
+
+ Assert.Equal(10u, jT808UploadLocationRequest.DataPackages[0].Length);
+ Assert.Equal(20u, jT808UploadLocationRequest.DataPackages[0].Offset);
+
+ Assert.Equal(30u, jT808UploadLocationRequest.DataPackages[1].Length);
+ Assert.Equal(40u, jT808UploadLocationRequest.DataPackages[1].Offset);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x0900_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x0900_Test.cs
new file mode 100644
index 0000000..4f63bc6
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x0900_Test.cs
@@ -0,0 +1,79 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_JTActiveSafety_0x0900_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_JTActiveSafety_0x0900_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_JTActiveSafety_0x0900 jT808UploadLocationRequest = new JT808_JTActiveSafety_0x0900
+ {
+ USBMessageCount=2,
+ USBMessages=new List {
+ new JT808_JTActiveSafety_0x0900_USBMessage{
+ USBID=1,
+ MessageContentObejct=new JT808_JTActiveSafety_0x0900_USB_0xF7{
+ AlarmStatus=1,
+ WorkingCondition=2
+ }
+ },
+ new JT808_JTActiveSafety_0x0900_USBMessage{
+ USBID=2,
+ MessageContentObejct=new JT808_JTActiveSafety_0x0900_USB_0xF8{
+ CompantName="CompantName",
+ CustomerCode="CustomerCode",
+ DevicesID="DevicesID",
+ HardwareVersionNumber="HardwareVersionNumber",
+ ProductModel="ProductModel",
+ SoftwareVersionNumber="SoftwareVersionNumber"
+ }
+ }
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("0201050200000001025C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("0201050200000001025C0B436F6D70616E744E616D650C50726F647563744D6F64656C15486172647761726556657273696F6E4E756D62657215536F66747761726556657273696F6E4E756D626572094465766963657349440C437573746F6D6572436F6465".ToHexBytes());
+ Assert.Equal(2, jT808UploadLocationRequest.USBMessageCount);
+
+ Assert.Equal(1, jT808UploadLocationRequest.USBMessages[0].USBID);
+ JT808_JTActiveSafety_0x0900_USB_0xF7 jT808_JTActiveSafety_0X0900_USB_0XF7 = JT808Serializer.Deserialize< JT808_JTActiveSafety_0x0900_USB_0xF7 >(jT808UploadLocationRequest.USBMessages[0].MessageContent) ;
+ Assert.Equal(1u, jT808_JTActiveSafety_0X0900_USB_0XF7.AlarmStatus);
+ Assert.Equal(2, jT808_JTActiveSafety_0X0900_USB_0XF7.WorkingCondition);
+
+ Assert.Equal(2, jT808UploadLocationRequest.USBMessages[1].USBID);
+ JT808_JTActiveSafety_0x0900_USB_0xF8 jT808_JTActiveSafety_0X0900_USB_0XF8 = JT808Serializer.Deserialize(jT808UploadLocationRequest.USBMessages[1].MessageContent); ;
+ Assert.Equal("CompantName", jT808_JTActiveSafety_0X0900_USB_0XF8.CompantName);
+ Assert.Equal("CompantName".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.CompantNameLength);
+ Assert.Equal("CustomerCode", jT808_JTActiveSafety_0X0900_USB_0XF8.CustomerCode);
+ Assert.Equal("CustomerCode".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.CustomerCodeLength);
+ Assert.Equal("DevicesID", jT808_JTActiveSafety_0X0900_USB_0XF8.DevicesID);
+ Assert.Equal("DevicesID".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.DevicesIDLength);
+ Assert.Equal("HardwareVersionNumber", jT808_JTActiveSafety_0X0900_USB_0XF8.HardwareVersionNumber);
+ Assert.Equal("HardwareVersionNumber".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.HardwareVersionNumberLength);
+ Assert.Equal("ProductModel", jT808_JTActiveSafety_0X0900_USB_0XF8.ProductModel);
+ Assert.Equal("ProductModel".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.ProductModelLength);
+ Assert.Equal("SoftwareVersionNumber", jT808_JTActiveSafety_0X0900_USB_0XF8.SoftwareVersionNumber);
+ Assert.Equal("SoftwareVersionNumber".Length, jT808_JTActiveSafety_0X0900_USB_0XF8.SoftwareVersionNumberLength);
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x8900_Test.cs b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x8900_Test.cs
new file mode 100644
index 0000000..924d008
--- /dev/null
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety.Test/JT808_JTActiveSafety_0x8900_Test.cs
@@ -0,0 +1,41 @@
+using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
+using JT808.Protocol.MessageBody;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+
+namespace JT808.Protocol.Extensions.JTActiveSafety.Test
+{
+ public class JT808_JTActiveSafety_0x8900_Test
+ {
+ JT808Serializer JT808Serializer;
+ public JT808_JTActiveSafety_0x8900_Test()
+ {
+ ServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure()
+ .AddJTActiveSafetyConfigure();
+ IJT808Config jT808Config = serviceDescriptors.BuildServiceProvider().GetRequiredService();
+ JT808Serializer = new JT808Serializer(jT808Config);
+ }
+ [Fact]
+ public void Serializer()
+ {
+ JT808_JTActiveSafety_0x8900 jT808UploadLocationRequest = new JT808_JTActiveSafety_0x8900
+ {
+ USBCount=2,
+ MultipleUSB=new List {1,2 }
+ };
+ var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();
+ Assert.Equal("020102", hex);
+ }
+ [Fact]
+ public void Deserialize()
+ {
+ var jT808UploadLocationRequest = JT808Serializer.Deserialize("020102".ToHexBytes());
+ Assert.Equal(2, jT808UploadLocationRequest.USBCount);
+ Assert.Equal(new List { 1, 2 }.ToArray().ToHexString(), jT808UploadLocationRequest.MultipleUSB.ToArray().ToHexString());
+ }
+ }
+}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/Extensions/JT808_JTActiveSafety_0x0900_USBMessageExtensions.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/Extensions/JT808_JTActiveSafety_0x0900_USBMessageExtensions.cs
index d72af91..07f8aff 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/Extensions/JT808_JTActiveSafety_0x0900_USBMessageExtensions.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/Extensions/JT808_JTActiveSafety_0x0900_USBMessageExtensions.cs
@@ -1,10 +1,6 @@
using JT808.Protocol.Extensions.JTActiveSafety.Enums;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
using JT808.Protocol.Extensions.JTActiveSafety.MessageBody;
using JT808.Protocol.MessagePack;
-using System;
-using System.Collections.Generic;
-using System.Text;
namespace JT808.Protocol.Extensions.JTActiveSafety.Extensions
{
@@ -22,11 +18,11 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.Extensions
{
case JT808_JTActiveSafety_0x0900_Type.QueryState:
JT808MessagePackReader QueryStateMessagePackReader = new JT808MessagePackReader(jT808_JTActiveSafety_0X0900_USBMessage.MessageContent);
- jT808_JTActiveSafety_0X0900_USBMessage.MessageContentObejct=JT808_JTActiveSafety_0x0900_USB_0xF7_Formatter.Instance.Deserialize(ref QueryStateMessagePackReader, null);
+ jT808_JTActiveSafety_0X0900_USBMessage.MessageContentObejct= JT808_JTActiveSafety_0x0900_USB_0xF7.Instance.Deserialize(ref QueryStateMessagePackReader, null);
break;
case JT808_JTActiveSafety_0x0900_Type.QueryInfomation:
JT808MessagePackReader QueryInfomationMessagePackReader = new JT808MessagePackReader(jT808_JTActiveSafety_0X0900_USBMessage.MessageContent);
- jT808_JTActiveSafety_0X0900_USBMessage.MessageContentObejct = JT808_JTActiveSafety_0x0900_USB_0xF7_Formatter.Instance.Deserialize(ref QueryInfomationMessagePackReader, null);
+ jT808_JTActiveSafety_0X0900_USBMessage.MessageContentObejct = JT808_JTActiveSafety_0x0900_USB_0xF7.Instance.Deserialize(ref QueryInfomationMessagePackReader, null);
break;
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
index cc270aa..1a38fe2 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/JT808.Protocol.Extensions.JTActiveSafety.csproj
@@ -1,7 +1,7 @@
- netstandard2.0
+ netstandard2.0;netstandard2.1;
7.3
Copyright 2019.
SmallChi(Koike)
@@ -15,12 +15,29 @@
https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE
https://github.com/SmallChi/JTActiveSafety/blob/master/LICENSE
false
- 2.1.6
+ 2.2.2
LICENSE
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30,6 +47,14 @@
+
+
+
+
+
+
+
+
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/JTActiveSafetyDependencyInjectionExtensions.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/JTActiveSafetyDependencyInjectionExtensions.cs
index facbb1e..13591ca 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/JTActiveSafetyDependencyInjectionExtensions.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/JTActiveSafetyDependencyInjectionExtensions.cs
@@ -14,19 +14,6 @@ namespace JT808.Protocol.Extensions.JTActiveSafety
public static IJT808Builder AddJTActiveSafetyConfigure(this IJT808Builder jT808Builder)
{
jT808Builder.Config.Register(Assembly.GetExecutingAssembly());
- jT808Builder.Config.MsgIdFactory.SetMap((ushort)JT808_JTActiveSafety_MsgId.报警附件信息消息, "");
- jT808Builder.Config.MsgIdFactory.SetMap((ushort)JT808_JTActiveSafety_MsgId.文件信息上传, "");
- jT808Builder.Config.MsgIdFactory.SetMap((ushort)JT808_JTActiveSafety_MsgId.文件上传完成消息, "");
- jT808Builder.Config.MsgIdFactory.SetMap((ushort)JT808_JTActiveSafety_MsgId.报警附件上传指令, "");
- jT808Builder.Config.MsgIdFactory.SetMap((ushort)JT808_JTActiveSafety_MsgId.文件上传完成消息应答, "");
- jT808Builder.Config.JT808_0X0200_Factory.JT808LocationAttachMethod.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x64, typeof(JT808_0x0200_0x64));
- jT808Builder.Config.JT808_0X0200_Factory.JT808LocationAttachMethod.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x65, typeof(JT808_0x0200_0x65));
- jT808Builder.Config.JT808_0X0200_Factory.JT808LocationAttachMethod.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x66, typeof(JT808_0x0200_0x66));
- jT808Builder.Config.JT808_0X0200_Factory.JT808LocationAttachMethod.Add(JT808_JTActiveSafety_Constants.JT808_0X0200_0x67, typeof(JT808_0x0200_0x67));
- jT808Builder.Config.JT808_0X8103_Factory.ParamMethods.Add(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF364, typeof(JT808_0x8103_0xF364));
- jT808Builder.Config.JT808_0X8103_Factory.ParamMethods.Add(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF365, typeof(JT808_0x8103_0xF365));
- jT808Builder.Config.JT808_0X8103_Factory.ParamMethods.Add(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF366, typeof(JT808_0x8103_0xF366));
- jT808Builder.Config.JT808_0X8103_Factory.ParamMethods.Add(JT808_JTActiveSafety_Constants.JT808_0X8103_0xF367, typeof(JT808_0x8103_0xF367));
return jT808Builder;
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs
index 015410a..3d20ac6 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x64.cs
@@ -1,7 +1,7 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -11,8 +11,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
///
/// 高级驾驶辅助系统报警信息
///
- [JT808Formatter(typeof(JT808_0x0200_0x64_Formatter))]
- public class JT808_0x0200_0x64 : JT808_0x0200_BodyBase
+ public class JT808_0x0200_0x64 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter
{
public override byte AttachInfoId { get; set; } = 0x64;
public override byte AttachInfoLength { get; set; } = 32;
@@ -82,5 +81,65 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 报警标识号
///
public AlarmIdentificationProperty AlarmIdentification { get; set; }
+
+ public JT808_0x0200_0x64 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x0200_0x64 jT808_0X0200_0X64 = new JT808_0x0200_0x64();
+ jT808_0X0200_0X64.AttachInfoId = reader.ReadByte();
+ jT808_0X0200_0X64.AttachInfoLength = reader.ReadByte();
+ jT808_0X0200_0X64.AlarmId = reader.ReadUInt32();
+ jT808_0X0200_0X64.FlagState = reader.ReadByte();
+ jT808_0X0200_0X64.AlarmOrEventType = reader.ReadByte();
+ jT808_0X0200_0X64.AlarmLevel = reader.ReadByte();
+ jT808_0X0200_0X64.VehicleSpeed = reader.ReadByte();
+ jT808_0X0200_0X64.CarOrPedestrianDistanceAhead = reader.ReadByte();
+ jT808_0X0200_0X64.DeviateType = reader.ReadByte();
+ jT808_0X0200_0X64.RoadSignIdentificationType = reader.ReadByte();
+ jT808_0X0200_0X64.RoadSignIdentificationData = reader.ReadByte();
+ jT808_0X0200_0X64.Speed = reader.ReadByte();
+ jT808_0X0200_0X64.Altitude = reader.ReadUInt16();
+ jT808_0X0200_0X64.Latitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X64.Longitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X64.AlarmTime = reader.ReadDateTime6();
+ jT808_0X0200_0X64.VehicleState = reader.ReadUInt16();
+ jT808_0X0200_0X64.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ return jT808_0X0200_0X64;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x64 value, IJT808Config config)
+ {
+ writer.WriteByte(value.AttachInfoId);
+ writer.WriteByte(value.AttachInfoLength);
+ writer.WriteUInt32(value.AlarmId);
+ writer.WriteByte(value.FlagState);
+ writer.WriteByte(value.AlarmOrEventType);
+ writer.WriteByte(value.AlarmLevel);
+ writer.WriteByte(value.VehicleSpeed);
+ writer.WriteByte(value.CarOrPedestrianDistanceAhead);
+ writer.WriteByte(value.DeviateType);
+ writer.WriteByte(value.RoadSignIdentificationType);
+ writer.WriteByte(value.RoadSignIdentificationData);
+ writer.WriteByte(value.Speed);
+ writer.WriteUInt16(value.Altitude);
+ writer.WriteUInt32((uint)value.Latitude);
+ writer.WriteUInt32((uint)value.Longitude);
+ writer.WriteDateTime6(value.AlarmTime);
+ writer.WriteUInt16(value.VehicleState);
+ if (value.AlarmIdentification == null) {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
index 1321da3..b2abcf8 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x65.cs
@@ -1,7 +1,7 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -11,8 +11,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
///
/// 驾驶员状态监测系统报警信息
///
- [JT808Formatter(typeof(JT808_0x0200_0x65_Formatter))]
- public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase
+ public class JT808_0x0200_0x65 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter
{
public override byte AttachInfoId { get; set; } = 0x65;
public override byte AttachInfoLength { get; set; } = 32;
@@ -70,5 +69,64 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 报警标识号
///
public AlarmIdentificationProperty AlarmIdentification { get; set; }
+
+ public JT808_0x0200_0x65 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x0200_0x65 jT808_0X0200_0X65 = new JT808_0x0200_0x65();
+ jT808_0X0200_0X65.AttachInfoId = reader.ReadByte();
+ jT808_0X0200_0X65.AttachInfoLength = reader.ReadByte();
+ jT808_0X0200_0X65.AlarmId = reader.ReadUInt32();
+ jT808_0X0200_0X65.FlagState = reader.ReadByte();
+ jT808_0X0200_0X65.AlarmOrEventType = reader.ReadByte();
+ jT808_0X0200_0X65.AlarmLevel = reader.ReadByte();
+ jT808_0X0200_0X65.Fatigue = reader.ReadByte();
+ jT808_0X0200_0X65.Retain = reader.ReadArray(4).ToArray();
+ jT808_0X0200_0X65.Speed = reader.ReadByte();
+ jT808_0X0200_0X65.Altitude = reader.ReadUInt16();
+ jT808_0X0200_0X65.Latitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X65.Longitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X65.AlarmTime = reader.ReadDateTime6();
+ jT808_0X0200_0X65.VehicleState = reader.ReadUInt16();
+ jT808_0X0200_0X65.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ return jT808_0X0200_0X65;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x65 value, IJT808Config config)
+ {
+ writer.WriteByte(value.AttachInfoId);
+ writer.WriteByte(value.AttachInfoLength);
+ writer.WriteUInt32(value.AlarmId);
+ writer.WriteByte(value.FlagState);
+ writer.WriteByte(value.AlarmOrEventType);
+ writer.WriteByte(value.AlarmLevel);
+ writer.WriteByte(value.Fatigue);
+ if (value.Retain.Length != 4)
+ {
+ throw new ArgumentOutOfRangeException($"{nameof(JT808_0x0200_0x65.Retain)} length==4");
+ }
+ writer.WriteArray(value.Retain);
+ writer.WriteByte(value.Speed);
+ writer.WriteUInt16(value.Altitude);
+ writer.WriteUInt32((uint)value.Latitude);
+ writer.WriteUInt32((uint)value.Longitude);
+ writer.WriteDateTime6(value.AlarmTime);
+ writer.WriteUInt16(value.VehicleState);
+ if (value.AlarmIdentification == null)
+ {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs
index e72a4f9..cdf9ec8 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x66.cs
@@ -1,7 +1,7 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -11,8 +11,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
///
/// 胎压监测系统报警信息
///
- [JT808Formatter(typeof(JT808_0x0200_0x66_Formatter))]
- public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase
+ public class JT808_0x0200_0x66 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter
{
public override byte AttachInfoId { get; set; } = 0x66;
public override byte AttachInfoLength { get; set; }
@@ -62,5 +61,80 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 报警/事件信息列表
///
public List AlarmOrEvents { get; set; }
+
+ public JT808_0x0200_0x66 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x0200_0x66 jT808_0X0200_0X66 = new JT808_0x0200_0x66();
+ jT808_0X0200_0X66.AttachInfoId = reader.ReadByte();
+ jT808_0X0200_0X66.AttachInfoLength = reader.ReadByte();
+ jT808_0X0200_0X66.AlarmId = reader.ReadUInt32();
+ jT808_0X0200_0X66.FlagState = reader.ReadByte();
+ jT808_0X0200_0X66.Speed = reader.ReadByte();
+ jT808_0X0200_0X66.Altitude = reader.ReadUInt16();
+ jT808_0X0200_0X66.Latitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X66.Longitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X66.AlarmTime = reader.ReadDateTime6();
+ jT808_0X0200_0X66.VehicleState = reader.ReadUInt16();
+ jT808_0X0200_0X66.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ jT808_0X0200_0X66.AlarmOrEventCount = reader.ReadByte();
+ if (jT808_0X0200_0X66.AlarmOrEventCount > 0)
+ {
+ jT808_0X0200_0X66.AlarmOrEvents = new List();
+ for (int i = 0; i < jT808_0X0200_0X66.AlarmOrEventCount; i++)
+ {
+ AlarmOrEventProperty alarmOrEventProperty = new AlarmOrEventProperty();
+ alarmOrEventProperty.TirePressureAlarmPosition = reader.ReadByte();
+ alarmOrEventProperty.AlarmOrEventType = reader.ReadUInt16();
+ alarmOrEventProperty.TirePressure = reader.ReadUInt16();
+ alarmOrEventProperty.TireTemperature = reader.ReadUInt16();
+ alarmOrEventProperty.BatteryLevel = reader.ReadUInt16();
+ jT808_0X0200_0X66.AlarmOrEvents.Add(alarmOrEventProperty);
+ }
+ }
+ return jT808_0X0200_0X66;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x66 value, IJT808Config config)
+ {
+ writer.WriteByte(value.AttachInfoId);
+ writer.Skip(1, out int AttachInfoLengthPosition);
+ writer.WriteUInt32(value.AlarmId);
+ writer.WriteByte(value.FlagState);
+ writer.WriteByte(value.Speed);
+ writer.WriteUInt16(value.Altitude);
+ writer.WriteUInt32((uint)value.Latitude);
+ writer.WriteUInt32((uint)value.Longitude);
+ writer.WriteDateTime6(value.AlarmTime);
+ writer.WriteUInt16(value.VehicleState);
+ if (value.AlarmIdentification == null)
+ {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ if (value.AlarmOrEvents.Count > 0)
+ {
+ writer.WriteByte((byte)value.AlarmOrEvents.Count);
+ foreach (var item in value.AlarmOrEvents)
+ {
+ writer.WriteByte(item.TirePressureAlarmPosition);
+ writer.WriteUInt16(item.AlarmOrEventType);
+ writer.WriteUInt16(item.TirePressure);
+ writer.WriteUInt16(item.TireTemperature);
+ writer.WriteUInt16(item.BatteryLevel);
+ }
+ }
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - AttachInfoLengthPosition - 1), AttachInfoLengthPosition);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs
index 995f462..5c13152 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x0200_0x67.cs
@@ -1,7 +1,7 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -11,8 +11,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
///
/// 盲区监测系统报警信息
///
- [JT808Formatter(typeof(JT808_0x0200_0x67_Formatter))]
- public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase
+ public class JT808_0x0200_0x67 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter
{
public override byte AttachInfoId { get; set; } = 0x67;
public override byte AttachInfoLength { get; set; } = 26;
@@ -62,5 +61,56 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 报警标识号
///
public AlarmIdentificationProperty AlarmIdentification { get; set; }
+
+ public JT808_0x0200_0x67 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x0200_0x67 jT808_0X0200_0X67 = new JT808_0x0200_0x67();
+ jT808_0X0200_0X67.AttachInfoId = reader.ReadByte();
+ jT808_0X0200_0X67.AttachInfoLength = reader.ReadByte();
+ jT808_0X0200_0X67.AlarmId = reader.ReadUInt32();
+ jT808_0X0200_0X67.FlagState = reader.ReadByte();
+ jT808_0X0200_0X67.AlarmOrEventType = reader.ReadByte();
+ jT808_0X0200_0X67.AlarmLevel = reader.ReadByte();
+ jT808_0X0200_0X67.Speed = reader.ReadByte();
+ jT808_0X0200_0X67.Altitude = reader.ReadUInt16();
+ jT808_0X0200_0X67.Latitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X67.Longitude = (int)reader.ReadUInt32();
+ jT808_0X0200_0X67.AlarmTime = reader.ReadDateTime6();
+ jT808_0X0200_0X67.VehicleState = reader.ReadUInt16();
+ jT808_0X0200_0X67.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ return jT808_0X0200_0X67;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x67 value, IJT808Config config)
+ {
+ writer.WriteByte(value.AttachInfoId);
+ writer.WriteByte(value.AttachInfoLength);
+ writer.WriteUInt32(value.AlarmId);
+ writer.WriteByte(value.FlagState);
+ writer.WriteByte(value.AlarmOrEventType);
+ writer.WriteByte(value.AlarmLevel);
+ writer.WriteByte(value.Speed);
+ writer.WriteUInt16(value.Altitude);
+ writer.WriteUInt32((uint)value.Latitude);
+ writer.WriteUInt32((uint)value.Longitude);
+ writer.WriteDateTime6(value.AlarmTime);
+ writer.WriteUInt16(value.VehicleState);
+ if (value.AlarmIdentification == null)
+ {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs
index 4c86c06..69f89a1 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1210.cs
@@ -1,6 +1,6 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
@@ -10,8 +10,7 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
///
/// 报警附件信息消息
///
- [JT808Formatter(typeof(JT808_0x1210_Formatter))]
- public class JT808_0x1210:JT808Bodies
+ public class JT808_0x1210:JT808Bodies, IJT808MessagePackFormatter
{
///
/// 终端ID
@@ -41,5 +40,68 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 附件信息列表
///
public List AttachInfos { get; set; }
+
+ public override ushort MsgId => 0x1210;
+
+ public JT808_0x1210 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x1210 jT808_0X1210 = new JT808_0x1210();
+ jT808_0X1210.TerminalID = reader.ReadString(7);
+ jT808_0X1210.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ jT808_0X1210.AlarmId = reader.ReadString(32);
+ jT808_0X1210.InfoType = reader.ReadByte();
+ jT808_0X1210.AttachCount = reader.ReadByte();
+ if (jT808_0X1210.AttachCount > 0)
+ {
+ jT808_0X1210.AttachInfos = new List();
+ for (int i = 0; i < jT808_0X1210.AttachCount; i++)
+ {
+ AttachProperty attachProperty = new AttachProperty();
+ attachProperty.FileNameLength = reader.ReadByte();
+ attachProperty.FileName = reader.ReadString(attachProperty.FileNameLength);
+ attachProperty.FileSize = reader.ReadUInt32();
+ jT808_0X1210.AttachInfos.Add(attachProperty);
+ }
+ }
+ return jT808_0X1210;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1210 value, IJT808Config config)
+ {
+ writer.WriteString(value.TerminalID.PadRight(7, '0'));
+ if (value.AlarmIdentification == null)
+ {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ writer.WriteString(value.AlarmId);
+ writer.WriteByte(value.InfoType);
+ if (value.AttachInfos != null && value.AttachInfos.Count > 0)
+ {
+ writer.WriteByte((byte)value.AttachInfos.Count);
+ foreach (var item in value.AttachInfos)
+ {
+ writer.Skip(1, out int FileNameLengthPosition);
+ writer.WriteString(item.FileName);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
+ writer.WriteUInt32(item.FileSize);
+ }
+ }
+ else
+ {
+ writer.WriteByte(0);
+ }
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs
index d2c0184..7f7d385 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1211.cs
@@ -1,16 +1,12 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 文件信息上传
///
- [JT808Formatter(typeof(JT808_0x1211_Formatter))]
- public class JT808_0x1211 : JT808Bodies
+ public class JT808_0x1211 : JT808Bodies, IJT808MessagePackFormatter
{
///
/// 文件名称长度
@@ -29,5 +25,26 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 文件大小
///
public uint FileSize { get; set; }
+
+ public override ushort MsgId => 0x1211;
+
+ public JT808_0x1211 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x1211 jT808_0X1211 = new JT808_0x1211();
+ jT808_0X1211.FileNameLength = reader.ReadByte();
+ jT808_0X1211.FileName = reader.ReadString(jT808_0X1211.FileNameLength);
+ jT808_0X1211.FileType = reader.ReadByte();
+ jT808_0X1211.FileSize = reader.ReadUInt32();
+ return jT808_0X1211;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1211 value, IJT808Config config)
+ {
+ writer.Skip(1, out int FileNameLengthPosition);
+ writer.WriteString(value.FileName);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
+ writer.WriteByte(value.FileType);
+ writer.WriteUInt32(value.FileSize);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs
index d5a1626..d69b556 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x1212.cs
@@ -1,16 +1,12 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 文件上传完成消息
///
- [JT808Formatter(typeof(JT808_0x1212_Formatter))]
- public class JT808_0x1212 : JT808Bodies
+ public class JT808_0x1212 : JT808Bodies, IJT808MessagePackFormatter
{
///
/// 文件名称长度
@@ -29,5 +25,25 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 文件大小
///
public uint FileSize { get; set; }
+ public override ushort MsgId => 0x1212;
+
+ public JT808_0x1212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x1212 jT808_0X1212 = new JT808_0x1212();
+ jT808_0X1212.FileNameLength = reader.ReadByte();
+ jT808_0X1212.FileName = reader.ReadString(jT808_0X1212.FileNameLength);
+ jT808_0X1212.FileType = reader.ReadByte();
+ jT808_0X1212.FileSize = reader.ReadUInt32();
+ return jT808_0X1212;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1212 value, IJT808Config config)
+ {
+ writer.Skip(1, out int FileNameLengthPosition);
+ writer.WriteString(value.FileName);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
+ writer.WriteByte(value.FileType);
+ writer.WriteUInt32(value.FileSize);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs
index c22e5cf..011a0ca 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF364.cs
@@ -1,17 +1,13 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 高级驾驶辅助系统参数
///
- [JT808Formatter(typeof(JT808_0x8103_0xF364_Formatter))]
- public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase
+ public class JT808_0x8103_0xF364 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter
{
public override uint ParamId { get; set; } = 0xF364;
public override byte ParamLength { get; set; }
@@ -196,5 +192,110 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 保留字段
///
public byte[] Placeholder2 { get; set; } = new byte[4];
+
+ public JT808_0x8103_0xF364 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x8103_0xF364 jT808_0X8103_0XF364 = new JT808_0x8103_0xF364();
+ jT808_0X8103_0XF364.ParamId = reader.ReadUInt32();
+ jT808_0X8103_0XF364.ParamLength = reader.ReadByte();
+ jT808_0X8103_0XF364.AlarmJudgeSpeedThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.WarningVolume = reader.ReadByte();
+ jT808_0X8103_0XF364.ActivePhotographyStrategy = reader.ReadByte();
+ jT808_0X8103_0XF364.ActivelyTimePhotoInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF364.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF364.SingleInitiativePhotos = reader.ReadByte();
+ jT808_0X8103_0XF364.SingleInitiativePhotosInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.PhotoResolution = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingResolution = reader.ReadByte();
+ jT808_0X8103_0XF364.AlarmEnable = reader.ReadUInt32();
+ jT808_0X8103_0XF364.EventEnable = reader.ReadUInt32();
+ jT808_0X8103_0XF364.Placeholder1 = reader.ReadByte();
+ jT808_0X8103_0XF364.DistanceThresholdObstacleAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.HierarchicalSpeedThresholdObstacleAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterObstacleAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.BarrierAlarmPhotographs = reader.ReadByte();
+ jT808_0X8103_0XF364.ObstacleAlarmInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.FrequentChannelChangeAlarmJudgmentTimePeriod = reader.ReadByte();
+ jT808_0X8103_0XF364.FrequentAlarmJudgmentNumberChannelChange = reader.ReadByte();
+ jT808_0X8103_0XF364.HierarchicalSpeedThresholdFrequentChannelChangeAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.FrequentChannelChangeAlarmPhotos = reader.ReadByte();
+ jT808_0X8103_0XF364.FrequentLaneChangeAlarmInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.GradedSpeedThresholdLaneDeviationAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.LaneDepartureAlarmPhoto = reader.ReadByte();
+ jT808_0X8103_0XF364.LaneDepartureAlarmPhotoInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.ForwardCollisionWarningTimeThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.HierarchicalSpeedThresholdForwardCollisionWarning = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.ForwardCollisionAlarmPhotographs = reader.ReadByte();
+ jT808_0X8103_0XF364.ForwardCollisionAlarmInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.PedestrianCollisionAlarmTimeThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.PedestrianCollisionAlarmEnablingSpeedThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm = reader.ReadByte();
+ jT808_0X8103_0XF364.PedestrianCollisionAlarmPhotos = reader.ReadByte();
+ jT808_0X8103_0XF364.PedestrianCollisionAlarmInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.VehicleDistanceMonitoringAlarmDistanceThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold = reader.ReadByte();
+ jT808_0X8103_0XF364.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity = reader.ReadByte();
+ jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistance = reader.ReadByte();
+ jT808_0X8103_0XF364.AlarmPhotoVehicleCloseDistanceInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.RoadSignRecognitionPhotographs = reader.ReadByte();
+ jT808_0X8103_0XF364.RoadSignRecognitionPhotographsInterval = reader.ReadByte();
+ jT808_0X8103_0XF364.Placeholder2 = reader.ReadArray(4).ToArray();
+ return jT808_0X8103_0XF364;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF364 value, IJT808Config config)
+ {
+ writer.WriteUInt32(value.ParamId);
+ writer.Skip(1, out int ParamLengthPosition);
+ writer.WriteByte(value.AlarmJudgeSpeedThreshold);
+ writer.WriteByte(value.WarningVolume);
+ writer.WriteByte(value.ActivePhotographyStrategy);
+ writer.WriteUInt16(value.ActivelyTimePhotoInterval);
+ writer.WriteUInt16(value.ActiveDistancePhotographyDistanceInterval);
+ writer.WriteByte(value.SingleInitiativePhotos);
+ writer.WriteByte(value.SingleInitiativePhotosInterval);
+ writer.WriteByte(value.PhotoResolution);
+ writer.WriteByte(value.VideoRecordingResolution);
+ writer.WriteUInt32(value.AlarmEnable);
+ writer.WriteUInt32(value.EventEnable);
+ writer.WriteByte(value.Placeholder1);
+ writer.WriteByte(value.DistanceThresholdObstacleAlarm);
+ writer.WriteByte(value.HierarchicalSpeedThresholdObstacleAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterObstacleAlarm);
+ writer.WriteByte(value.BarrierAlarmPhotographs);
+ writer.WriteByte(value.ObstacleAlarmInterval);
+ writer.WriteByte(value.FrequentChannelChangeAlarmJudgmentTimePeriod);
+ writer.WriteByte(value.FrequentAlarmJudgmentNumberChannelChange);
+ writer.WriteByte(value.HierarchicalSpeedThresholdFrequentChannelChangeAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFrequentLaneChangeAlarm);
+ writer.WriteByte(value.FrequentChannelChangeAlarmPhotos);
+ writer.WriteByte(value.FrequentLaneChangeAlarmInterval);
+ writer.WriteByte(value.GradedSpeedThresholdLaneDeviationAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterLaneDepartureAlarm);
+ writer.WriteByte(value.LaneDepartureAlarmPhoto);
+ writer.WriteByte(value.LaneDepartureAlarmPhotoInterval);
+ writer.WriteByte(value.ForwardCollisionWarningTimeThreshold);
+ writer.WriteByte(value.HierarchicalSpeedThresholdForwardCollisionWarning);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterForwardCollisionAlarm);
+ writer.WriteByte(value.ForwardCollisionAlarmPhotographs);
+ writer.WriteByte(value.ForwardCollisionAlarmInterval);
+ writer.WriteByte(value.PedestrianCollisionAlarmTimeThreshold);
+ writer.WriteByte(value.PedestrianCollisionAlarmEnablingSpeedThreshold);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterPedestrianCollisionAlarm);
+ writer.WriteByte(value.PedestrianCollisionAlarmPhotos);
+ writer.WriteByte(value.PedestrianCollisionAlarmInterval);
+ writer.WriteByte(value.VehicleDistanceMonitoringAlarmDistanceThreshold);
+ writer.WriteByte(value.VehicleDistanceMonitoringAndAlarmClassificationSpeedThreshold);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterAlarmVehicleProximity);
+ writer.WriteByte(value.AlarmPhotoVehicleCloseDistance);
+ writer.WriteByte(value.AlarmPhotoVehicleCloseDistanceInterval);
+ writer.WriteByte(value.RoadSignRecognitionPhotographs);
+ writer.WriteByte(value.RoadSignRecognitionPhotographsInterval);
+ writer.WriteArray(value.Placeholder2);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs
index 519e100..851c10b 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF365.cs
@@ -1,17 +1,13 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 驾驶员状态监测系统参数
///
- [JT808Formatter(typeof(JT808_0x8103_0xF365_Formatter))]
- public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase
+ public class JT808_0x8103_0xF365 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter
{
public override uint ParamId { get; set; } = 0xF365;
public override byte ParamLength { get; set; }
@@ -151,5 +147,88 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 保留字段
///
public byte[] Retain { get; set; } = new byte[2];
+
+ public JT808_0x8103_0xF365 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x8103_0xF365 jT808_0X8103_0XF365 = new JT808_0x8103_0xF365();
+ jT808_0X8103_0XF365.ParamId = reader.ReadUInt32();
+ jT808_0X8103_0XF365.ParamLength = reader.ReadByte();
+ jT808_0X8103_0XF365.AlarmJudgeSpeedThreshold = reader.ReadByte();
+ jT808_0X8103_0XF365.WarningVolume = reader.ReadByte();
+ jT808_0X8103_0XF365.ActivePhotographyStrategy = reader.ReadByte();
+ jT808_0X8103_0XF365.ActivelyTimePhotoInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF365.ActiveDistancePhotographyDistanceInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF365.SingleInitiativePhotos = reader.ReadByte();
+ jT808_0X8103_0XF365.SingleInitiativePhotosInterval = reader.ReadByte();
+ jT808_0X8103_0XF365.PhotoResolution = reader.ReadByte();
+ jT808_0X8103_0XF365.VideoRecordingResolution = reader.ReadByte();
+ jT808_0X8103_0XF365.AlarmEnable = reader.ReadUInt32();
+ jT808_0X8103_0XF365.EventEnable = reader.ReadUInt32();
+ jT808_0X8103_0XF365.TimeIntervalSmokingAlarmJudgment = reader.ReadUInt16();
+ jT808_0X8103_0XF365.CallAlarmDetermineTimeInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF365.Reserve = reader.ReadArray(3).ToArray();
+ jT808_0X8103_0XF365.GradedSpeedThresholdFatigueDrivingAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.FatigueDrivingAlarmPhotograph = reader.ReadByte();
+ jT808_0X8103_0XF365.FatigueDrivingAlarmPhotographInterval = reader.ReadByte();
+ jT808_0X8103_0XF365.ClassifiedSpeedThresholdCallAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterCallAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeatures = reader.ReadByte();
+ jT808_0X8103_0XF365.CallAlarmTakePicturesDriverFacialFeaturesInterval = reader.ReadByte();
+ jT808_0X8103_0XF365.ClassifiedSpeedThresholdSmokingAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.VideoRecordingTimeBeforeAndAfterSmokingAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristics = reader.ReadByte();
+ jT808_0X8103_0XF365.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval = reader.ReadByte();
+ jT808_0X8103_0XF365.ClassifiedSpeedThresholdDistractedDrivingAlarm = reader.ReadByte();
+ jT808_0X8103_0XF365.DistractedDrivingAlarmPhotography = reader.ReadByte();
+ jT808_0X8103_0XF365.DistractedDrivingAlarmPhotographyInterval = reader.ReadByte();
+ jT808_0X8103_0XF365.VideoRecordingTimeAbnormalDrivingBehavior = reader.ReadByte();
+ jT808_0X8103_0XF365.PhotographsAbnormalDrivingBehavior = reader.ReadByte();
+ jT808_0X8103_0XF365.PictureIntervalAbnormalDrivingBehavior = reader.ReadByte();
+ jT808_0X8103_0XF365.DriverIdentificationTrigger = reader.ReadByte();
+ jT808_0X8103_0XF365.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
+ return jT808_0X8103_0XF365;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF365 value, IJT808Config config)
+ {
+ writer.WriteUInt32(value.ParamId);
+ writer.Skip(1, out int ParamLengthPosition);
+ writer.WriteByte(value.AlarmJudgeSpeedThreshold);
+ writer.WriteByte(value.WarningVolume);
+ writer.WriteByte(value.ActivePhotographyStrategy);
+ writer.WriteUInt16(value.ActivelyTimePhotoInterval);
+ writer.WriteUInt16(value.ActiveDistancePhotographyDistanceInterval);
+ writer.WriteByte(value.SingleInitiativePhotos);
+ writer.WriteByte(value.SingleInitiativePhotosInterval);
+ writer.WriteByte(value.PhotoResolution);
+ writer.WriteByte(value.VideoRecordingResolution);
+ writer.WriteUInt32(value.AlarmEnable);
+ writer.WriteUInt32(value.EventEnable);
+ writer.WriteUInt16(value.TimeIntervalSmokingAlarmJudgment);
+ writer.WriteUInt16(value.CallAlarmDetermineTimeInterval);
+ writer.WriteArray(value.Reserve);
+ writer.WriteByte(value.GradedSpeedThresholdFatigueDrivingAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterFatigueDrivingAlarm);
+ writer.WriteByte(value.FatigueDrivingAlarmPhotograph);
+ writer.WriteByte(value.FatigueDrivingAlarmPhotographInterval);
+ writer.WriteByte(value.ClassifiedSpeedThresholdCallAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterCallAlarm);
+ writer.WriteByte(value.CallAlarmTakePicturesDriverFacialFeatures);
+ writer.WriteByte(value.CallAlarmTakePicturesDriverFacialFeaturesInterval);
+ writer.WriteByte(value.ClassifiedSpeedThresholdSmokingAlarm);
+ writer.WriteByte(value.VideoRecordingTimeBeforeAndAfterSmokingAlarm);
+ writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristics);
+ writer.WriteByte(value.SmokingAlarmPhotographsDriverFaceCharacteristicsInterval);
+ writer.WriteByte(value.ClassifiedSpeedThresholdDistractedDrivingAlarm);
+ writer.WriteByte(value.DistractedDrivingAlarmPhotography);
+ writer.WriteByte(value.DistractedDrivingAlarmPhotographyInterval);
+ writer.WriteByte(value.VideoRecordingTimeAbnormalDrivingBehavior);
+ writer.WriteByte(value.PhotographsAbnormalDrivingBehavior);
+ writer.WriteByte(value.PictureIntervalAbnormalDrivingBehavior);
+ writer.WriteByte(value.DriverIdentificationTrigger);
+ writer.WriteArray(value.Retain);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs
index 3a4bb48..718d04f 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF366.cs
@@ -1,22 +1,18 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 胎压监测系统参数
///
- [JT808Formatter(typeof(JT808_0x8103_0xF366_Formatter))]
- public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase
+ public class JT808_0x8103_0xF366 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter
{
public override uint ParamId { get; set; } = 0xF366;
public override byte ParamLength { get; set; } = 46;
///
- /// 轮胎规格型号
+ /// 轮胎规格型号 12位
///
public string TyreSpecificationType { get; set; }
///
@@ -59,5 +55,42 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 保留项
///
public byte[] Retain { get; set; } = new byte[6];
+
+ public JT808_0x8103_0xF366 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x8103_0xF366 jT808_0X8103_0XF366 = new JT808_0x8103_0xF366();
+ jT808_0X8103_0XF366.ParamId = reader.ReadUInt32();
+ jT808_0X8103_0XF366.ParamLength = reader.ReadByte();
+ jT808_0X8103_0XF366.TyreSpecificationType = reader.ReadString(12);
+ jT808_0X8103_0XF366.TyrePressureUnit = reader.ReadUInt16();
+ jT808_0X8103_0XF366.NormalFetalPressure = reader.ReadUInt16();
+ jT808_0X8103_0XF366.ThresholdUnbalancedTirePressure = reader.ReadUInt16();
+ jT808_0X8103_0XF366.SlowLeakageThreshold = reader.ReadUInt16();
+ jT808_0X8103_0XF366.LowVoltageThreshold = reader.ReadUInt16();
+ jT808_0X8103_0XF366.HighVoltageThreshold = reader.ReadUInt16();
+ jT808_0X8103_0XF366.HighTemperatureThreshold = reader.ReadUInt16();
+ jT808_0X8103_0XF366.VoltageThreshold = reader.ReadUInt16();
+ jT808_0X8103_0XF366.TimedReportingInterval = reader.ReadUInt16();
+ jT808_0X8103_0XF366.Retain = reader.ReadArray(reader.ReadCurrentRemainContentLength()).ToArray();
+ return jT808_0X8103_0XF366;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF366 value, IJT808Config config)
+ {
+ writer.WriteUInt32(value.ParamId);
+ writer.Skip(1, out int ParamLengthPosition);
+ writer.WriteString(value.TyreSpecificationType);
+ writer.WriteUInt16(value.TyrePressureUnit);
+ writer.WriteUInt16(value.NormalFetalPressure);
+ writer.WriteUInt16(value.ThresholdUnbalancedTirePressure);
+ writer.WriteUInt16(value.SlowLeakageThreshold);
+ writer.WriteUInt16(value.LowVoltageThreshold);
+ writer.WriteUInt16(value.HighVoltageThreshold);
+ writer.WriteUInt16(value.HighTemperatureThreshold);
+ writer.WriteUInt16(value.VoltageThreshold);
+ writer.WriteUInt16(value.TimedReportingInterval);
+ writer.WriteArray(value.Retain);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ParamLengthPosition - 1), ParamLengthPosition);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs
index 6d2c89b..636a65a 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x8103_0xF367.cs
@@ -1,17 +1,13 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 盲区监测系统参数
///
- [JT808Formatter(typeof(JT808_0x8103_0xF367_Formatter))]
- public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase
+ public class JT808_0x8103_0xF367 : JT808_0x8103_BodyBase, IJT808MessagePackFormatter
{
public override uint ParamId { get; set; } = 0xF367;
public override byte ParamLength { get; set; } = 2;
@@ -23,5 +19,23 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 侧后方接近报警时间阈值
///
public byte LateralRearApproachAlarmTimeThreshold { get; set; }
+
+ public JT808_0x8103_0xF367 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x8103_0xF367 jT808_0X8103_0XF367 = new JT808_0x8103_0xF367();
+ jT808_0X8103_0XF367.ParamId = reader.ReadUInt32();
+ jT808_0X8103_0XF367.ParamLength = reader.ReadByte();
+ jT808_0X8103_0XF367.RearApproachAlarmTimeThreshold = reader.ReadByte();
+ jT808_0X8103_0XF367.LateralRearApproachAlarmTimeThreshold = reader.ReadByte();
+ return jT808_0X8103_0XF367;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0xF367 value, IJT808Config config)
+ {
+ writer.WriteUInt32(value.ParamId);
+ writer.WriteByte(2);
+ writer.WriteByte(value.RearApproachAlarmTimeThreshold);
+ writer.WriteByte(value.LateralRearApproachAlarmTimeThreshold);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs
index d5d6f6f..4691c94 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9208.cs
@@ -1,17 +1,14 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
using System;
-using System.Collections.Generic;
-using System.Text;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 报警附件上传指令
///
- [JT808Formatter(typeof(JT808_0x9208_Formatter))]
- public class JT808_0x9208:JT808Bodies
+ public class JT808_0x9208:JT808Bodies, IJT808MessagePackFormatter
{
public byte AttachmentServerIPLength { get; set; }
public string AttachmentServerIP { get; set; }
@@ -30,5 +27,47 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 预留
///
public byte[] Retain { get; set; } = new byte[16];
+
+ public override ushort MsgId => 0x9208;
+
+ public JT808_0x9208 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x9208 jT808_0X9208 = new JT808_0x9208();
+ jT808_0X9208.AttachmentServerIPLength = reader.ReadByte();
+ jT808_0X9208.AttachmentServerIP = reader.ReadString(jT808_0X9208.AttachmentServerIPLength);
+ jT808_0X9208.AttachmentServerIPTcpPort = reader.ReadUInt16();
+ jT808_0X9208.AttachmentServerIPUdpPort = reader.ReadUInt16();
+ jT808_0X9208.AlarmIdentification = new AlarmIdentificationProperty
+ {
+ TerminalID = reader.ReadString(7),
+ Time = reader.ReadDateTime6(),
+ SN = reader.ReadByte(),
+ AttachCount = reader.ReadByte(),
+ Retain = reader.ReadByte()
+ };
+ jT808_0X9208.AlarmId = reader.ReadString(32);
+ jT808_0X9208.Retain = reader.ReadArray(16).ToArray();
+ return jT808_0X9208;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9208 value, IJT808Config config)
+ {
+ writer.Skip(1, out int AttachmentServerIPLengthPosition);
+ writer.WriteString(value.AttachmentServerIP);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - AttachmentServerIPLengthPosition - 1), AttachmentServerIPLengthPosition);
+ writer.WriteUInt16(value.AttachmentServerIPTcpPort);
+ writer.WriteUInt16(value.AttachmentServerIPUdpPort);
+ if (value.AlarmIdentification == null)
+ {
+ throw new NullReferenceException($"{nameof(AlarmIdentificationProperty)}不为空");
+ }
+ writer.WriteString(value.AlarmIdentification.TerminalID);
+ writer.WriteDateTime6(value.AlarmIdentification.Time);
+ writer.WriteByte(value.AlarmIdentification.SN);
+ writer.WriteByte(value.AlarmIdentification.AttachCount);
+ writer.WriteByte(value.AlarmIdentification.Retain);
+ writer.WriteString(value.AlarmId);
+ writer.WriteArray(value.Retain);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs
index a6d9c69..b409731 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_0x9212.cs
@@ -1,17 +1,14 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
-using System;
+using JT808.Protocol.Extensions.JTActiveSafety.Metadata;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
using System.Collections.Generic;
-using System.Text;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 文件上传完成消息应答
///
- [JT808Formatter(typeof(JT808_0x9212_Formatter))]
- public class JT808_0x9212:JT808Bodies
+ public class JT808_0x9212:JT808Bodies, IJT808MessagePackFormatter
{
///
/// 文件名称长度
@@ -38,5 +35,51 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 补传数据包列表
///
public List DataPackages { get; set; }
+
+ public override ushort MsgId => 0x9212;
+
+ public JT808_0x9212 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x9212 jT808_0X9212 = new JT808_0x9212();
+ jT808_0X9212.FileNameLength = reader.ReadByte();
+ jT808_0X9212.FileName = reader.ReadString(jT808_0X9212.FileNameLength);
+ jT808_0X9212.FileType = reader.ReadByte();
+ jT808_0X9212.UploadResult = reader.ReadByte();
+ jT808_0X9212.DataPackageCount = reader.ReadByte();
+ if (jT808_0X9212.DataPackageCount > 0)
+ {
+ jT808_0X9212.DataPackages = new List();
+ for (int i = 0; i < jT808_0X9212.DataPackageCount; i++)
+ {
+ DataPackageProperty dataPackageProperty = new DataPackageProperty();
+ dataPackageProperty.Offset = reader.ReadUInt32();
+ dataPackageProperty.Length = reader.ReadUInt32();
+ jT808_0X9212.DataPackages.Add(dataPackageProperty);
+ }
+ }
+ return jT808_0X9212;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9212 value, IJT808Config config)
+ {
+ writer.Skip(1, out int FileNameLengthPosition);
+ writer.WriteString(value.FileName);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - FileNameLengthPosition - 1), FileNameLengthPosition);
+ writer.WriteByte(value.FileType);
+ writer.WriteByte(value.UploadResult);
+ if (value.DataPackages != null && value.DataPackages.Count > 0)
+ {
+ writer.WriteByte((byte)value.DataPackages.Count);
+ foreach (var item in value.DataPackages)
+ {
+ writer.WriteUInt32(item.Offset);
+ writer.WriteUInt32(item.Length);
+ }
+ }
+ else
+ {
+ writer.WriteByte(0);
+ }
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900.cs
index 71956fc..38c951d 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900.cs
@@ -1,17 +1,14 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
+using JT808.Protocol.MessagePack;
using System.Collections.Generic;
-using System.Text;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 上传基本信息
///
- [JT808Formatter(typeof(JT808_JTActiveSafety_0x0900_Formatter))]
- public class JT808_JTActiveSafety_0x0900 : JT808_0x0900_BodyBase
+ public class JT808_JTActiveSafety_0x0900 : JT808_0x0900_BodyBase, IJT808MessagePackFormatter
{
///
/// 消息列表总数
@@ -19,5 +16,48 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
public byte USBMessageCount { get; set; }
public List USBMessages { get; set; }
+
+ public JT808_JTActiveSafety_0x0900 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_JTActiveSafety_0x0900 jT808_JTActiveSafety_0X0900 = new JT808_JTActiveSafety_0x0900();
+ jT808_JTActiveSafety_0X0900.USBMessageCount = reader.ReadByte();
+ if (jT808_JTActiveSafety_0X0900.USBMessageCount > 0)
+ {
+ jT808_JTActiveSafety_0X0900.USBMessages = new List();
+ for (int i = 0; i < jT808_JTActiveSafety_0X0900.USBMessageCount; i++)
+ {
+ JT808_JTActiveSafety_0x0900_USBMessage jT808_JTActiveSafety_0X0900_USBMessage = new JT808_JTActiveSafety_0x0900_USBMessage();
+ jT808_JTActiveSafety_0X0900_USBMessage.USBID = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USBMessage.MessageLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USBMessage.MessageContent = reader.ReadArray(jT808_JTActiveSafety_0X0900_USBMessage.MessageLength).ToArray();
+ jT808_JTActiveSafety_0X0900.USBMessages.Add(jT808_JTActiveSafety_0X0900_USBMessage);
+ }
+ }
+ return jT808_JTActiveSafety_0X0900;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_JTActiveSafety_0x0900 value, IJT808Config config)
+ {
+ if (value.USBMessages != null && value.USBMessages.Count > 0)
+ {
+ writer.WriteByte((byte)value.USBMessages.Count);
+ foreach (var item in value.USBMessages)
+ {
+ writer.WriteByte(item.USBID);
+ if (item.MessageContent != null && item.MessageContent.Length > 0)
+ {
+ writer.WriteByte((byte)item.MessageContent.Length);
+ writer.WriteArray(item.MessageContent);
+ }
+ else if (item.MessageContentObejct != null)
+ {
+ writer.Skip(1, out int MessageContentLengthPosition);
+ object obj = config.GetMessagePackFormatterByType(item.MessageContentObejct.GetType());
+ JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, item.MessageContentObejct, config);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - MessageContentLengthPosition - 1), MessageContentLengthPosition);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF7.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF7.cs
index 560ff69..691bdd5 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF7.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF7.cs
@@ -1,14 +1,14 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
- [JT808Formatter(typeof(JT808_JTActiveSafety_0x0900_USB_0xF7_Formatter))]
- public class JT808_JTActiveSafety_0x0900_USB_0xF7 : JT808_JTActiveSafety_0x0900_USB_Base
+ ///
+ /// 外设工作状态
+ ///
+ public class JT808_JTActiveSafety_0x0900_USB_0xF7 : JT808_JTActiveSafety_0x0900_USB_Base, IJT808MessagePackFormatter
{
+ public static JT808_JTActiveSafety_0x0900_USB_0xF7 Instance = new JT808_JTActiveSafety_0x0900_USB_0xF7();
///
/// 工作状态
///
@@ -17,5 +17,19 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 报警状态
///
public uint AlarmStatus { get; set; }
+
+ public JT808_JTActiveSafety_0x0900_USB_0xF7 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_JTActiveSafety_0x0900_USB_0xF7 jT808_JTActiveSafety_0X0900_USB_0XF7 = new JT808_JTActiveSafety_0x0900_USB_0xF7();
+ jT808_JTActiveSafety_0X0900_USB_0XF7.WorkingCondition = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF7.AlarmStatus = reader.ReadUInt32();
+ return jT808_JTActiveSafety_0X0900_USB_0XF7;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_JTActiveSafety_0x0900_USB_0xF7 value, IJT808Config config)
+ {
+ writer.WriteByte(value.WorkingCondition);
+ writer.WriteUInt32(value.AlarmStatus);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF8.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF8.cs
index 24c9a6c..788bad8 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF8.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x0900_USB_0xF8.cs
@@ -1,13 +1,12 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
-using System;
-using System.Collections.Generic;
-using System.Text;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
- [JT808Formatter(typeof(JT808_JTActiveSafety_0x0900_USB_0xF8_Formatter))]
- public class JT808_JTActiveSafety_0x0900_USB_0xF8 : JT808_JTActiveSafety_0x0900_USB_Base
+ ///
+ /// 外设系统信息
+ ///
+ public class JT808_JTActiveSafety_0x0900_USB_0xF8 : JT808_JTActiveSafety_0x0900_USB_Base, IJT808MessagePackFormatter
{
///
/// 公司名称长度
@@ -59,5 +58,50 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 客户代码
///
public string CustomerCode { get; set; }
+
+ public JT808_JTActiveSafety_0x0900_USB_0xF8 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_JTActiveSafety_0x0900_USB_0xF8 jT808_JTActiveSafety_0X0900_USB_0XF8 = new JT808_JTActiveSafety_0x0900_USB_0xF8();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.CompantNameLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.CompantName = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.CompantNameLength);
+ jT808_JTActiveSafety_0X0900_USB_0XF8.ProductModelLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.ProductModel = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.ProductModelLength);
+ jT808_JTActiveSafety_0X0900_USB_0XF8.HardwareVersionNumberLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.HardwareVersionNumber = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.HardwareVersionNumberLength);
+ jT808_JTActiveSafety_0X0900_USB_0XF8.SoftwareVersionNumberLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.SoftwareVersionNumber = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.SoftwareVersionNumberLength);
+ jT808_JTActiveSafety_0X0900_USB_0XF8.DevicesIDLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.DevicesID = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.DevicesIDLength);
+ jT808_JTActiveSafety_0X0900_USB_0XF8.CustomerCodeLength = reader.ReadByte();
+ jT808_JTActiveSafety_0X0900_USB_0XF8.CustomerCode = reader.ReadString(jT808_JTActiveSafety_0X0900_USB_0XF8.CustomerCodeLength);
+ return jT808_JTActiveSafety_0X0900_USB_0XF8;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_JTActiveSafety_0x0900_USB_0xF8 value, IJT808Config config)
+ {
+ writer.Skip(1, out int CompantNameLengthPosition);
+ writer.WriteString(value.CompantName);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CompantNameLengthPosition - 1), CompantNameLengthPosition);
+
+ writer.Skip(1, out int ProductModelLengthPosition);
+ writer.WriteString(value.ProductModel);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - ProductModelLengthPosition - 1), ProductModelLengthPosition);
+
+ writer.Skip(1, out int HardwareVersionNumberLengthPosition);
+ writer.WriteString(value.HardwareVersionNumber);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - HardwareVersionNumberLengthPosition - 1), HardwareVersionNumberLengthPosition);
+
+ writer.Skip(1, out int SoftwareVersionNumberLengthPosition);
+ writer.WriteString(value.SoftwareVersionNumber);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - SoftwareVersionNumberLengthPosition - 1), SoftwareVersionNumberLengthPosition);
+
+ writer.Skip(1, out int DevicesIDLengthPosition);
+ writer.WriteString(value.DevicesID);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - DevicesIDLengthPosition - 1), DevicesIDLengthPosition);
+
+ writer.Skip(1, out int CustomerCodeLengthPosition);
+ writer.WriteString(value.CustomerCode);
+ writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - CustomerCodeLengthPosition - 1), CustomerCodeLengthPosition);
+ }
}
}
diff --git a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x8900.cs b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x8900.cs
index f8c5eeb..cf33a67 100644
--- a/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x8900.cs
+++ b/src/JT808.Protocol.Extensions.JTActiveSafety/MessageBody/JT808_JTActiveSafety_0x8900.cs
@@ -1,17 +1,14 @@
-using JT808.Protocol.Attributes;
-using JT808.Protocol.Extensions.JTActiveSafety.Formatters;
+using JT808.Protocol.Formatters;
using JT808.Protocol.MessageBody;
-using System;
+using JT808.Protocol.MessagePack;
using System.Collections.Generic;
-using System.Text;
namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
{
///
/// 查询基本信息
///
- [JT808Formatter(typeof(JT808_JTActiveSafety_0x8900_Formatter))]
- public class JT808_JTActiveSafety_0x8900: JT808_0x8900_BodyBase
+ public class JT808_JTActiveSafety_0x8900: JT808_0x8900_BodyBase, IJT808MessagePackFormatter
{
///
/// 外设ID列表总数
@@ -21,5 +18,32 @@ namespace JT808.Protocol.Extensions.JTActiveSafety.MessageBody
/// 外设ID
///
public List MultipleUSB { get; set; }
+
+ public JT808_JTActiveSafety_0x8900 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_JTActiveSafety_0x8900 jT808_JTActiveSafety_0X8900 = new JT808_JTActiveSafety_0x8900();
+ jT808_JTActiveSafety_0X8900.USBCount = reader.ReadByte();
+ if (jT808_JTActiveSafety_0X8900.USBCount > 0)
+ {
+ jT808_JTActiveSafety_0X8900.MultipleUSB = new List();
+ for (int i = 0; i < jT808_JTActiveSafety_0X8900.USBCount; i++)
+ {
+ jT808_JTActiveSafety_0X8900.MultipleUSB.Add(reader.ReadByte());
+ }
+ }
+ return jT808_JTActiveSafety_0X8900;
+ }
+
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_JTActiveSafety_0x8900 value, IJT808Config config)
+ {
+ if (value.MultipleUSB != null && value.MultipleUSB.Count > 0)
+ {
+ writer.WriteByte((byte)value.MultipleUSB.Count);
+ foreach (var item in value.MultipleUSB)
+ {
+ writer.WriteByte(item);
+ }
+ }
+ }
}
}
diff --git a/src/JTActiveSafety.sln b/src/JTActiveSafety.sln
index f62cc95..5747435 100644
--- a/src/JTActiveSafety.sln
+++ b/src/JTActiveSafety.sln
@@ -7,9 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol.Extensions.J
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTActiveSafety.Protocol", "JTActiveSafety.Protocol\JTActiveSafety.Protocol.csproj", "{FF716FAA-0C89-4DB9-A559-C50E502B996D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.Protocol.Extensions.JTActiveSafety.Test", "JT808.Protocol.Extensions.JTActiveSafety.Test\JT808.Protocol.Extensions.JTActiveSafety.Test.csproj", "{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Protocol.Extensions.JTActiveSafety.Test", "JT808.Protocol.Extensions.JTActiveSafety.Test\JT808.Protocol.Extensions.JTActiveSafety.Test.csproj", "{5A5B068D-4276-4E9D-84A4-C659A86A4A6B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JTActiveSafety.Protocol.Test", "JTActiveSafety.Protocol.Test\JTActiveSafety.Protocol.Test.csproj", "{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JTActiveSafety.Protocol.Test", "JTActiveSafety.Protocol.Test\JTActiveSafety.Protocol.Test.csproj", "{148DB5C2-A8ED-4430-8AB8-44839FC45C7F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution