@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | ||||
jT808_0X9101.ServerIPAddress = "127.0.0.1"; | |||||
jT808_0X9101.ServerVideoChannelTcpPort = 1888; | |||||
jT808_0X9101.ServerVideoChannelUdpPort = 0; | |||||
jT808_0X9101.LogicalChannelNo= 1; | |||||
jT808_0X9101.ServerIp = "127.0.0.1"; | |||||
jT808_0X9101.TcpPort = 1888; | |||||
jT808_0X9101.UdpPort = 0; | |||||
jT808_0X9101.ChannelNo= 1; | |||||
jT808_0X9101.DataType= 1; | jT808_0X9101.DataType= 1; | ||||
jT808_0X9101.StreamType= 1; | jT808_0X9101.StreamType= 1; | ||||
var hex = JT808Serializer.Serialize(jT808_0X9101).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0X9101).ToHexString(); | ||||
@@ -41,11 +41,11 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
JT808_0x9101 jT808_0X9101= JT808Serializer.Deserialize<JT808_0x9101>("093132372E302E302E3107600000010101".ToHexBytes()); | JT808_0x9101 jT808_0X9101= JT808Serializer.Deserialize<JT808_0x9101>("093132372E302E302E3107600000010101".ToHexBytes()); | ||||
Assert.Equal("127.0.0.1", jT808_0X9101.ServerIPAddress); | |||||
Assert.Equal(9, jT808_0X9101.ServerIPAddressLength); | |||||
Assert.Equal(1888, jT808_0X9101.ServerVideoChannelTcpPort); | |||||
Assert.Equal(0, jT808_0X9101.ServerVideoChannelUdpPort); | |||||
Assert.Equal(1, jT808_0X9101.LogicalChannelNo); | |||||
Assert.Equal("127.0.0.1", jT808_0X9101.ServerIp); | |||||
Assert.Equal(9, jT808_0X9101.ServerIpLength); | |||||
Assert.Equal(1888, jT808_0X9101.TcpPort); | |||||
Assert.Equal(0, jT808_0X9101.UdpPort); | |||||
Assert.Equal(1, jT808_0X9101.ChannelNo); | |||||
Assert.Equal(1, jT808_0X9101.DataType); | Assert.Equal(1, jT808_0X9101.DataType); | ||||
Assert.Equal(1, jT808_0X9101.StreamType); | Assert.Equal(1, jT808_0X9101.StreamType); | ||||
} | } | ||||
@@ -60,10 +60,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
header.TerminalPhoneNo = "12345679810"; | header.TerminalPhoneNo = "12345679810"; | ||||
jT808Package.Header = header; | jT808Package.Header = header; | ||||
JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | ||||
jT808_0X9101.ServerIPAddress = "127.0.0.1"; | |||||
jT808_0X9101.ServerVideoChannelTcpPort = 1888; | |||||
jT808_0X9101.ServerVideoChannelUdpPort = 0; | |||||
jT808_0X9101.LogicalChannelNo = 1; | |||||
jT808_0X9101.ServerIp = "127.0.0.1"; | |||||
jT808_0X9101.TcpPort = 1888; | |||||
jT808_0X9101.UdpPort = 0; | |||||
jT808_0X9101.ChannelNo = 1; | |||||
jT808_0X9101.DataType = 1; | jT808_0X9101.DataType = 1; | ||||
jT808_0X9101.StreamType = 1; | jT808_0X9101.StreamType = 1; | ||||
jT808Package.Bodies = jT808_0X9101; | jT808Package.Bodies = jT808_0X9101; | ||||
@@ -88,10 +88,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
header.TerminalPhoneNo = ""; | header.TerminalPhoneNo = ""; | ||||
jT808Package.Header = header; | jT808Package.Header = header; | ||||
JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | ||||
jT808_0X9101.ServerIPAddress = ""; | |||||
jT808_0X9101.ServerVideoChannelTcpPort = 1078; | |||||
jT808_0X9101.ServerVideoChannelUdpPort = 0; | |||||
jT808_0X9101.LogicalChannelNo = 3; | |||||
jT808_0X9101.ServerIp = ""; | |||||
jT808_0X9101.TcpPort = 1078; | |||||
jT808_0X9101.UdpPort = 0; | |||||
jT808_0X9101.ChannelNo = 3; | |||||
jT808_0X9101.DataType = 1; | jT808_0X9101.DataType = 1; | ||||
jT808_0X9101.StreamType = 1; | jT808_0X9101.StreamType = 1; | ||||
jT808Package.Bodies = jT808_0X9101; | jT808Package.Bodies = jT808_0X9101; | ||||
@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test1() | public void Test1() | ||||
{ | { | ||||
JT808_0x9102 jT808_0X9102 = new JT808_0x9102(); | JT808_0x9102 jT808_0X9102 = new JT808_0x9102(); | ||||
jT808_0X9102.LogicalChannelNo = 1; | |||||
jT808_0X9102.ChannelNo = 1; | |||||
jT808_0X9102.ControlCmd = 1; | jT808_0X9102.ControlCmd = 1; | ||||
jT808_0X9102.CloseAVData = 0; | jT808_0X9102.CloseAVData = 0; | ||||
jT808_0X9102.SwitchStreamType = 0; | |||||
jT808_0X9102.StreamType = 0; | |||||
var hex = JT808Serializer.Serialize(jT808_0X9102).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0X9102).ToHexString(); | ||||
Assert.Equal("01010000", hex); | Assert.Equal("01010000", hex); | ||||
} | } | ||||
@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
JT808_0x9102 jT808_0X9102 = JT808Serializer.Deserialize<JT808_0x9102>("01010000".ToHexBytes()); | JT808_0x9102 jT808_0X9102 = JT808Serializer.Deserialize<JT808_0x9102>("01010000".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0X9102.LogicalChannelNo); | |||||
Assert.Equal(1, jT808_0X9102.ChannelNo); | |||||
Assert.Equal(1, jT808_0X9102.ControlCmd); | Assert.Equal(1, jT808_0X9102.ControlCmd); | ||||
Assert.Equal(0, jT808_0X9102.CloseAVData); | Assert.Equal(0, jT808_0X9102.CloseAVData); | ||||
Assert.Equal(0, jT808_0X9102.SwitchStreamType); | |||||
Assert.Equal(0, jT808_0X9102.StreamType); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -55,10 +55,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
header.TerminalPhoneNo = "12345679810"; | header.TerminalPhoneNo = "12345679810"; | ||||
jT808Package.Header = header; | jT808Package.Header = header; | ||||
JT808_0x9102 jT808_0X9102 = new JT808_0x9102(); | JT808_0x9102 jT808_0X9102 = new JT808_0x9102(); | ||||
jT808_0X9102.LogicalChannelNo = 1; | |||||
jT808_0X9102.ChannelNo = 1; | |||||
jT808_0X9102.ControlCmd = 1; | jT808_0X9102.ControlCmd = 1; | ||||
jT808_0X9102.CloseAVData = 0; | jT808_0X9102.CloseAVData = 0; | ||||
jT808_0X9102.SwitchStreamType = 0; | |||||
jT808_0X9102.StreamType = 0; | |||||
jT808Package.Bodies = jT808_0X9102; | jT808Package.Bodies = jT808_0X9102; | ||||
var hex = JT808Serializer.Serialize(jT808Package).ToHexString(); | var hex = JT808Serializer.Serialize(jT808Package).ToHexString(); | ||||
//7E910200040123456798100001010100001E7E | //7E910200040123456798100001010100001E7E | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9105 jT808_0x9105 = new JT808_0x9105() | JT808_0x9105 jT808_0x9105 = new JT808_0x9105() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
DropRate=2 | DropRate=2 | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9105).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9105).ToHexString(); | ||||
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9105 = JT808Serializer.Deserialize<JT808_0x9105>("0102".ToHexBytes()); | var jT808_0x9105 = JT808Serializer.Deserialize<JT808_0x9105>("0102".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9105.LogicChannelNo); | |||||
Assert.Equal(1, jT808_0x9105.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9105.DropRate); | Assert.Equal(2, jT808_0x9105.DropRate); | ||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -39,13 +39,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9201 jT808_0x9201 = new JT808_0x9201() | JT808_0x9201 jT808_0x9201 = new JT808_0x9201() | ||||
{ | { | ||||
LogicChannelNo = 1, | |||||
AVItemType = 2, | |||||
ChannelNo = 1, | |||||
MediaType = 2, | |||||
BeginTime = Convert.ToDateTime("2019-07-16 10:10:10"), | BeginTime = Convert.ToDateTime("2019-07-16 10:10:10"), | ||||
EndTime = Convert.ToDateTime("2019-07-16 10:10:10"), | EndTime = Convert.ToDateTime("2019-07-16 10:10:10"), | ||||
FastForwardOrFastRewindMultiples=3, | |||||
MemType=5, | |||||
PlayBackWay=6, | |||||
PlaySpeed=3, | |||||
MemoryType=5, | |||||
PlaybackWay=6, | |||||
ServerIp="127.0.0.1", | ServerIp="127.0.0.1", | ||||
ServerIpLength=9, | ServerIpLength=9, | ||||
StreamType=7, | StreamType=7, | ||||
@@ -60,13 +60,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9201 = JT808Serializer.Deserialize<JT808_0x9201>("093132372E302E302E3100501F90010207050603190716101010190716101010".ToHexBytes()); | var jT808_0x9201 = JT808Serializer.Deserialize<JT808_0x9201>("093132372E302E302E3100501F90010207050603190716101010190716101010".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9201.LogicChannelNo); | |||||
Assert.Equal(2, jT808_0x9201.AVItemType); | |||||
Assert.Equal(1, jT808_0x9201.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9201.MediaType); | |||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.BeginTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.BeginTime); | ||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.EndTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9201.EndTime); | ||||
Assert.Equal(3, jT808_0x9201.FastForwardOrFastRewindMultiples); | |||||
Assert.Equal(5, jT808_0x9201.MemType); | |||||
Assert.Equal(6, jT808_0x9201.PlayBackWay); | |||||
Assert.Equal(3, jT808_0x9201.PlaySpeed); | |||||
Assert.Equal(5, jT808_0x9201.MemoryType); | |||||
Assert.Equal(6, jT808_0x9201.PlaybackWay); | |||||
Assert.Equal("127.0.0.1", jT808_0x9201.ServerIp); | Assert.Equal("127.0.0.1", jT808_0x9201.ServerIp); | ||||
Assert.Equal(9, jT808_0x9201.ServerIpLength); | Assert.Equal(9, jT808_0x9201.ServerIpLength); | ||||
Assert.Equal(7, jT808_0x9201.StreamType); | Assert.Equal(7, jT808_0x9201.StreamType); | ||||
@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9202 jT808_0x9202 = new JT808_0x9202() | JT808_0x9202 jT808_0x9202 = new JT808_0x9202() | ||||
{ | { | ||||
AVChannelNo=1, | |||||
DragPlaybackPosition=Convert.ToDateTime("2019-07-16 10:10:10"), | |||||
FastForwardOrFastRewindMultiples=2, | |||||
PlayBackControl=3 | |||||
ChannelNo=1, | |||||
DragPlayPosition=Convert.ToDateTime("2019-07-16 10:10:10"), | |||||
PlaySpeed=2, | |||||
PlayControl=3 | |||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9202).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9202).ToHexString(); | ||||
Assert.Equal("010302190716101010", hex); | Assert.Equal("010302190716101010", hex); | ||||
@@ -52,10 +52,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9202 = JT808Serializer.Deserialize<JT808_0x9202>("010302190716101010".ToHexBytes()); | var jT808_0x9202 = JT808Serializer.Deserialize<JT808_0x9202>("010302190716101010".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9202.AVChannelNo); | |||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9202.DragPlaybackPosition); | |||||
Assert.Equal(2, jT808_0x9202.FastForwardOrFastRewindMultiples); | |||||
Assert.Equal(3, jT808_0x9202.PlayBackControl); | |||||
Assert.Equal(1, jT808_0x9202.ChannelNo); | |||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9202.DragPlayPosition); | |||||
Assert.Equal(2, jT808_0x9202.PlaySpeed); | |||||
Assert.Equal(3, jT808_0x9202.PlayControl); | |||||
} | } | ||||
[Fact] | [Fact] | ||||
public void Test3() | public void Test3() | ||||
@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
JT808_0x9205 jT808_0x9205 = new JT808_0x9205() | JT808_0x9205 jT808_0x9205 = new JT808_0x9205() | ||||
{ | { | ||||
AlarmFlag=1, | AlarmFlag=1, | ||||
AVResourceType=2, | |||||
MediaType=2, | |||||
BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"), | BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"), | ||||
EndTime= Convert.ToDateTime("2019-07-16 10:10:11"), | EndTime= Convert.ToDateTime("2019-07-16 10:10:11"), | ||||
LogicChannelNo=3, | |||||
ChannelNo=3, | |||||
MemoryType=4, | MemoryType=4, | ||||
StreamType =5 | StreamType =5 | ||||
}; | }; | ||||
@@ -56,10 +56,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
var jT808_0x9205 = JT808Serializer.Deserialize<JT808_0x9205>("031907161010101907161010110000000000000001020504".ToHexBytes()); | var jT808_0x9205 = JT808Serializer.Deserialize<JT808_0x9205>("031907161010101907161010110000000000000001020504".ToHexBytes()); | ||||
Assert.Equal(1u, jT808_0x9205.AlarmFlag); | Assert.Equal(1u, jT808_0x9205.AlarmFlag); | ||||
Assert.Equal(2, jT808_0x9205.AVResourceType); | |||||
Assert.Equal(2, jT808_0x9205.MediaType); | |||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9205.BeginTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9205.BeginTime); | ||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9205.EndTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9205.EndTime); | ||||
Assert.Equal(3, jT808_0x9205.LogicChannelNo); | |||||
Assert.Equal(3, jT808_0x9205.ChannelNo); | |||||
Assert.Equal(4, jT808_0x9205.MemoryType); | Assert.Equal(4, jT808_0x9205.MemoryType); | ||||
Assert.Equal(5, jT808_0x9205.StreamType); | Assert.Equal(5, jT808_0x9205.StreamType); | ||||
} | } | ||||
@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
JT808_0x9206 jT808_0x9206 = new JT808_0x9206() | JT808_0x9206 jT808_0x9206 = new JT808_0x9206() | ||||
{ | { | ||||
AlarmFlag=1, | AlarmFlag=1, | ||||
AVResourceType=2, | |||||
MediaType=2, | |||||
BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"), | BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"), | ||||
EndTime= Convert.ToDateTime("2019-07-16 10:10:11"), | EndTime= Convert.ToDateTime("2019-07-16 10:10:11"), | ||||
LogicChannelNo=3, | |||||
ChannelNo=3, | |||||
StreamType =5, | StreamType =5, | ||||
FileUploadPath ="D://1112", | FileUploadPath ="D://1112", | ||||
FileUploadPathLength=8, | FileUploadPathLength=8, | ||||
@@ -66,10 +66,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
var jT808_0x9206 = JT808Serializer.Deserialize<JT808_0x9206>("093132372E302E302E31032802746B0631323334353608443A2F2F31313132031907161010101907161010110000000102050407".ToHexBytes()); | var jT808_0x9206 = JT808Serializer.Deserialize<JT808_0x9206>("093132372E302E302E31032802746B0631323334353608443A2F2F31313132031907161010101907161010110000000102050407".ToHexBytes()); | ||||
Assert.Equal(1u, jT808_0x9206.AlarmFlag); | Assert.Equal(1u, jT808_0x9206.AlarmFlag); | ||||
Assert.Equal(2, jT808_0x9206.AVResourceType); | |||||
Assert.Equal(2, jT808_0x9206.MediaType); | |||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9206.BeginTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:10"), jT808_0x9206.BeginTime); | ||||
Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9206.EndTime); | Assert.Equal(Convert.ToDateTime("2019-07-16 10:10:11"), jT808_0x9206.EndTime); | ||||
Assert.Equal(3, jT808_0x9206.LogicChannelNo); | |||||
Assert.Equal(3, jT808_0x9206.ChannelNo); | |||||
Assert.Equal(5, jT808_0x9206.StreamType); | Assert.Equal(5, jT808_0x9206.StreamType); | ||||
Assert.Equal("D://1112", jT808_0x9206.FileUploadPath); | Assert.Equal("D://1112", jT808_0x9206.FileUploadPath); | ||||
Assert.Equal(8, jT808_0x9206.FileUploadPathLength); | Assert.Equal(8, jT808_0x9206.FileUploadPathLength); | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9301 jT808_0x9301 = new JT808_0x9301() | JT808_0x9301 jT808_0x9301 = new JT808_0x9301() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
Speed=2, | Speed=2, | ||||
Direction=3 | Direction=3 | ||||
}; | }; | ||||
@@ -51,7 +51,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9301 = JT808Serializer.Deserialize<JT808_0x9301>("010302".ToHexBytes()); | var jT808_0x9301 = JT808Serializer.Deserialize<JT808_0x9301>("010302".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9301.LogicChannelNo); | |||||
Assert.Equal(1, jT808_0x9301.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9301.Speed); | Assert.Equal(2, jT808_0x9301.Speed); | ||||
Assert.Equal(3, jT808_0x9301.Direction); | Assert.Equal(3, jT808_0x9301.Direction); | ||||
} | } | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9303 jT808_0x9303 = new JT808_0x9303() | JT808_0x9303 jT808_0x9303 = new JT808_0x9303() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
IrisAdjustment=2 | IrisAdjustment=2 | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9303).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9303).ToHexString(); | ||||
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9303 = JT808Serializer.Deserialize<JT808_0x9303>("0102".ToHexBytes()); | var jT808_0x9303 = JT808Serializer.Deserialize<JT808_0x9303>("0102".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9303.LogicChannelNo); | |||||
Assert.Equal(1, jT808_0x9303.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9303.IrisAdjustment); | Assert.Equal(2, jT808_0x9303.IrisAdjustment); | ||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9304 jT808_0x9304 = new JT808_0x9304() | JT808_0x9304 jT808_0x9304 = new JT808_0x9304() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
StartOrStop=2 | StartOrStop=2 | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9304).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9304).ToHexString(); | ||||
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9304 = JT808Serializer.Deserialize<JT808_0x9304>("0102".ToHexBytes()); | var jT808_0x9304 = JT808Serializer.Deserialize<JT808_0x9304>("0102".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9304.LogicChannelNo); | |||||
Assert.Equal(1, jT808_0x9304.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9304.StartOrStop); | Assert.Equal(2, jT808_0x9304.StartOrStop); | ||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9305 jT808_0x9305 = new JT808_0x9305() | JT808_0x9305 jT808_0x9305 = new JT808_0x9305() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
StartOrStop=2 | StartOrStop=2 | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9305).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9305).ToHexString(); | ||||
@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
{ | { | ||||
JT808_0x9306 jT808_0x9306 = new JT808_0x9306() | JT808_0x9306 jT808_0x9306 = new JT808_0x9306() | ||||
{ | { | ||||
LogicChannelNo=1, | |||||
ChannelNo=1, | |||||
ChangeMultipleControl=2 | ChangeMultipleControl=2 | ||||
}; | }; | ||||
var hex = JT808Serializer.Serialize(jT808_0x9306).ToHexString(); | var hex = JT808Serializer.Serialize(jT808_0x9306).ToHexString(); | ||||
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test | |||||
public void Test2() | public void Test2() | ||||
{ | { | ||||
var jT808_0x9306 = JT808Serializer.Deserialize<JT808_0x9306>("0102".ToHexBytes()); | var jT808_0x9306 = JT808Serializer.Deserialize<JT808_0x9306>("0102".ToHexBytes()); | ||||
Assert.Equal(1, jT808_0x9306.LogicChannelNo); | |||||
Assert.Equal(1, jT808_0x9306.ChannelNo); | |||||
Assert.Equal(2, jT808_0x9306.ChangeMultipleControl); | Assert.Equal(2, jT808_0x9306.ChangeMultipleControl); | ||||
} | } | ||||
[Fact] | [Fact] | ||||
@@ -1,10 +1,8 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.Protocol.Extensions.JT1078.Enums | |||||
namespace JT808.Protocol.Extensions.JT1078.Enums | |||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public enum JT808_JT1078_MsgId:ushort | public enum JT808_JT1078_MsgId:ushort | ||||
{ | { | ||||
终端上传音视频属性 = 0x1003, | 终端上传音视频属性 = 0x1003, | ||||
终端上传乘客流量 = 0x1005, | 终端上传乘客流量 = 0x1005, | ||||
@@ -26,4 +24,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums | |||||
红外补光控制 = 0x9305, | 红外补光控制 = 0x9305, | ||||
云台变倍控制 = 0x9306 | 云台变倍控制 = 0x9306 | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } |
@@ -1,10 +1,9 @@ | |||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace JT808.Protocol.Extensions.JT1078.Enums | namespace JT808.Protocol.Extensions.JT1078.Enums | ||||
{ | { | ||||
[Flags] | [Flags] | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public enum VideoRelateAlarmType:uint | public enum VideoRelateAlarmType:uint | ||||
{ | { | ||||
视频信号丢失报警=0, | 视频信号丢失报警=0, | ||||
@@ -15,4 +14,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums | |||||
异常驾驶行为报警=32, | 异常驾驶行为报警=32, | ||||
特殊报警录像达到存储阈值报警=64, | 特殊报警录像达到存储阈值报警=64, | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } |
@@ -9,8 +9,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9003:JT808Bodies | public class JT808_0x9003:JT808Bodies | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "查询终端音视频属性"; | public override string Description => "查询终端音视频属性"; | ||||
public override ushort MsgId => 0x9003; | public override ushort MsgId => 0x9003; | ||||
public override bool SkipSerialization { get; set; } = true; | public override bool SkipSerialization { get; set; } = true; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -9,32 +9,35 @@ using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JT1078.MessageBody | namespace JT808.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 实时音视频传输请求 | |||||
/// 实时音视频传输请求(live、talk、listen、fanout、passThrough直播、对讲、监听、广播、透传请求) | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9101: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9101>, IJT808Analyze | public class JT808_0x9101: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9101>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "实时音视频传输请求"; | public override string Description => "实时音视频传输请求"; | ||||
public override ushort MsgId => 0x9101; | public override ushort MsgId => 0x9101; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 服务器IP地址长度 | |||||
/// 视频服务器IP地址长度 | |||||
/// </summary> | /// </summary> | ||||
public byte ServerIPAddressLength { get; set; } | |||||
public byte ServerIpLength { get;internal set; } | |||||
/// <summary> | /// <summary> | ||||
/// 服务器IP地址 | |||||
/// 视频服务器IP地址 | |||||
/// </summary> | /// </summary> | ||||
public string ServerIPAddress { get; set; } | |||||
public string ServerIp { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 服务器视频通道监听端口号(TCP) | |||||
/// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准) | |||||
/// </summary> | /// </summary> | ||||
public ushort ServerVideoChannelTcpPort { get; set; } | |||||
public ushort TcpPort { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 服务器视频通道监听端口号(UDP) | |||||
/// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准) | |||||
/// </summary> | /// </summary> | ||||
public ushort ServerVideoChannelUdpPort { get; set; } | |||||
public ushort UdpPort { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicalChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 数据类型 | /// 数据类型 | ||||
/// 0:音视频 | /// 0:音视频 | ||||
@@ -52,105 +55,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public byte StreamType { get; set; } | public byte StreamType { get; set; } | ||||
/// <summary> | |||||
/// 格式分析 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="writer"></param> | |||||
/// <param name="config"></param> | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9101 value = new JT808_0x9101(); | |||||
value.ServerIPAddressLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{value.ServerIPAddressLength.ReadNumber()}]服务器IP地址长度", value.ServerIPAddressLength); | |||||
string ipHex = reader.ReadVirtualArray(value.ServerIPAddressLength).ToArray().ToHexString(); | |||||
value.ServerIPAddress = reader.ReadString(value.ServerIPAddressLength); | |||||
writer.WriteString($"[{ipHex}]服务器IP地址", value.ServerIPAddress); | |||||
value.ServerVideoChannelTcpPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.ServerVideoChannelTcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.ServerVideoChannelTcpPort); | |||||
value.ServerVideoChannelUdpPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.ServerVideoChannelUdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.ServerVideoChannelUdpPort); | |||||
value.LogicalChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicalChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicalChannelNo)); | |||||
var value = new JT808_0x9101(); | |||||
value.ServerIpLength = reader.ReadByte(); | |||||
writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength); | |||||
string ipHex = reader.ReadVirtualArray(value.ServerIpLength).ToArray().ToHexString(); | |||||
value.ServerIp = reader.ReadString(value.ServerIpLength); | |||||
writer.WriteString($"[{ipHex}]服务器IP地址", value.ServerIp); | |||||
value.TcpPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.TcpPort); | |||||
value.UdpPort = reader.ReadUInt16(); | |||||
writer.WriteNumber($"[{value.UdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.UdpPort); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.DataType = reader.ReadByte(); | value.DataType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.DataType.ReadNumber()}]数据类型", DataTypeDisplay(value.DataType)); | writer.WriteString($"[{value.DataType.ReadNumber()}]数据类型", DataTypeDisplay(value.DataType)); | ||||
value.StreamType = reader.ReadByte(); | value.StreamType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", value.StreamType==0?"主码流":"子码流"); | writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", value.StreamType==0?"主码流":"子码流"); | ||||
string DataTypeDisplay(byte DataType) { | string DataTypeDisplay(byte DataType) { | ||||
switch (DataType) | |||||
return DataType switch | |||||
{ | { | ||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "视频"; | |||||
case 2: | |||||
return "双向对讲"; | |||||
case 3: | |||||
return "监听"; | |||||
case 4: | |||||
return "中心广播"; | |||||
case 5: | |||||
return "透传"; | |||||
default: | |||||
break; | |||||
} | |||||
return "未知"; | |||||
0 => "音视频", | |||||
1 => "视频", | |||||
2 => "双向对讲", | |||||
3 => "监听", | |||||
4 => "中心广播", | |||||
5 => "透传", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) { | string LogicalChannelNoDisplay(byte LogicalChannelNo) { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 反序列化 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="config"></param> | |||||
/// <returns></returns> | |||||
public JT808_0x9101 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9101 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9101 jT808_0X9101 = new JT808_0x9101(); | |||||
jT808_0X9101.ServerIPAddressLength = reader.ReadByte(); | |||||
jT808_0X9101.ServerIPAddress = reader.ReadString(jT808_0X9101.ServerIPAddressLength); | |||||
jT808_0X9101.ServerVideoChannelTcpPort = reader.ReadUInt16(); | |||||
jT808_0X9101.ServerVideoChannelUdpPort = reader.ReadUInt16(); | |||||
jT808_0X9101.LogicalChannelNo = reader.ReadByte(); | |||||
jT808_0X9101.DataType = reader.ReadByte(); | |||||
jT808_0X9101.StreamType = reader.ReadByte(); | |||||
return jT808_0X9101; | |||||
var jT808_0x9101 = new JT808_0x9101(); | |||||
jT808_0x9101.ServerIpLength = reader.ReadByte(); | |||||
jT808_0x9101.ServerIp = reader.ReadString(jT808_0x9101.ServerIpLength); | |||||
jT808_0x9101.TcpPort = reader.ReadUInt16(); | |||||
jT808_0x9101.UdpPort = reader.ReadUInt16(); | |||||
jT808_0x9101.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9101.DataType = reader.ReadByte(); | |||||
jT808_0x9101.StreamType = reader.ReadByte(); | |||||
return jT808_0x9101; | |||||
} | } | ||||
/// <summary> | |||||
/// 序列化 | |||||
/// </summary> | |||||
/// <param name="writer"></param> | |||||
/// <param name="value"></param> | |||||
/// <param name="config"></param> | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9101 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9101 value, IJT808Config config) | ||||
{ | { | ||||
writer.Skip(1, out int position); | writer.Skip(1, out int position); | ||||
writer.WriteString(value.ServerIPAddress); | |||||
writer.WriteString(value.ServerIp); | |||||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position); | writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position); | ||||
writer.WriteUInt16(value.ServerVideoChannelTcpPort); | |||||
writer.WriteUInt16(value.ServerVideoChannelUdpPort); | |||||
writer.WriteByte(value.LogicalChannelNo); | |||||
writer.WriteUInt16(value.TcpPort); | |||||
writer.WriteUInt16(value.UdpPort); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.DataType); | writer.WriteByte(value.DataType); | ||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
} | } | ||||
@@ -9,16 +9,18 @@ using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JT1078.MessageBody | namespace JT808.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 音视频实时传输控制 | |||||
/// 音视频实时传输控制(LiveControl直播控制) | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9102: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9102>, IJT808Analyze | |||||
public class JT808_0x9102 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9102>, IJT808Analyze | |||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "音视频实时传输控制"; | public override string Description => "音视频实时传输控制"; | ||||
public override ushort MsgId => 0x9102; | public override ushort MsgId => 0x9102; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicalChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 控制指令 | /// 控制指令 | ||||
/// 平台可以通过该指令对设备的实时音视频进行控制: | /// 平台可以通过该指令对设备的实时音视频进行控制: | ||||
@@ -43,106 +45,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// 0:主码流 | /// 0:主码流 | ||||
/// 1:子码流 | /// 1:子码流 | ||||
/// </summary> | /// </summary> | ||||
public byte SwitchStreamType { get; set; } | |||||
public byte StreamType { get; set; } | |||||
/// <summary> | |||||
/// 格式分析 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="writer"></param> | |||||
/// <param name="config"></param> | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9102 value = new JT808_0x9102(); | JT808_0x9102 value = new JT808_0x9102(); | ||||
value.LogicalChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicalChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicalChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.ControlCmd = reader.ReadByte(); | value.ControlCmd = reader.ReadByte(); | ||||
writer.WriteString($"[{value.ControlCmd.ReadNumber()}]控制指令", ControlCmdDisplay(value.ControlCmd)); | writer.WriteString($"[{value.ControlCmd.ReadNumber()}]控制指令", ControlCmdDisplay(value.ControlCmd)); | ||||
value.CloseAVData = reader.ReadByte(); | value.CloseAVData = reader.ReadByte(); | ||||
writer.WriteString($"[{value.CloseAVData.ReadNumber()}]关闭音视频类型", CloseAVDataDisplay(value.CloseAVData)); | writer.WriteString($"[{value.CloseAVData.ReadNumber()}]关闭音视频类型", CloseAVDataDisplay(value.CloseAVData)); | ||||
value.SwitchStreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.SwitchStreamType.ReadNumber()}]切换码流类型", value.SwitchStreamType==0?"主码流":"子码流"); | |||||
value.StreamType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]切换码流类型", value.StreamType == 0 ? "主码流" : "子码流"); | |||||
string CloseAVDataDisplay(byte CloseAVData) { | |||||
switch (CloseAVData) | |||||
string CloseAVDataDisplay(byte CloseAVData) | |||||
{ | |||||
return CloseAVData switch | |||||
{ | { | ||||
case 0: | |||||
return "关闭该通道有关的音视频数据"; | |||||
case 1: | |||||
return "只关闭该通道有关的音频,保留该通道有关的视频"; | |||||
case 2: | |||||
return "只关闭该通道有关的视频,保留该通道有关的音频"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "关闭该通道有关的音视频数据", | |||||
1 => "只关闭该通道有关的音频,保留该通道有关的视频", | |||||
2 => "只关闭该通道有关的视频,保留该通道有关的音频", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string ControlCmdDisplay(byte ControlCmd) { | |||||
switch (ControlCmd) | |||||
string ControlCmdDisplay(byte ControlCmd) | |||||
{ | |||||
return ControlCmd switch | |||||
{ | { | ||||
case 0: | |||||
return "关闭音视频传输指令"; | |||||
case 1: | |||||
return "切换码流(增加暂停和继续)"; | |||||
case 2: | |||||
return "暂停该通道所有流的发送"; | |||||
case 3: | |||||
return "恢复暂停前流的发送,与暂停前的流类型一致"; | |||||
case 4: | |||||
return "关闭双向对讲"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "关闭音视频传输指令", | |||||
1 => "切换码流(增加暂停和继续)", | |||||
2 => "暂停该通道所有流的发送", | |||||
3 => "恢复暂停前流的发送,与暂停前的流类型一致", | |||||
4 => "关闭双向对讲", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | string LogicalChannelNoDisplay(byte LogicalChannelNo) | ||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 反序列化 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="config"></param> | |||||
/// <returns></returns> | |||||
public JT808_0x9102 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9102 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9102 jT808_0X9102 = new JT808_0x9102(); | |||||
jT808_0X9102.LogicalChannelNo = reader.ReadByte(); | |||||
var jT808_0X9102 = new JT808_0x9102(); | |||||
jT808_0X9102.ChannelNo = reader.ReadByte(); | |||||
jT808_0X9102.ControlCmd = reader.ReadByte(); | jT808_0X9102.ControlCmd = reader.ReadByte(); | ||||
jT808_0X9102.CloseAVData = reader.ReadByte(); | jT808_0X9102.CloseAVData = reader.ReadByte(); | ||||
jT808_0X9102.SwitchStreamType = reader.ReadByte(); | |||||
jT808_0X9102.StreamType = reader.ReadByte(); | |||||
return jT808_0X9102; | return jT808_0X9102; | ||||
} | } | ||||
/// <summary> | |||||
/// 序列化 | |||||
/// </summary> | |||||
/// <param name="writer"></param> | |||||
/// <param name="value"></param> | |||||
/// <param name="config"></param> | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9102 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9102 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicalChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.ControlCmd); | writer.WriteByte(value.ControlCmd); | ||||
writer.WriteByte(value.CloseAVData); | writer.WriteByte(value.CloseAVData); | ||||
writer.WriteByte(value.SwitchStreamType); | |||||
writer.WriteByte(value.StreamType); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -13,75 +13,79 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9105 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9105>, IJT808Analyze | public class JT808_0x9105 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9105>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "实时音视频传输状态通知"; | public override string Description => "实时音视频传输状态通知"; | ||||
public override ushort MsgId => 0x9105; | public override ushort MsgId => 0x9105; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 丢包率 | |||||
/// 丢包率 | |||||
/// 当前传输通道的丢包率,数值乘以100之后取整部分 | |||||
/// </summary> | /// </summary> | ||||
public byte DropRate { get; set; } | |||||
public byte DropRate { get; set; } | |||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="writer"></param> | |||||
/// <param name="config"></param> | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9105 value = new JT808_0x9105(); | JT808_0x9105 value = new JT808_0x9105(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.DropRate = reader.ReadByte(); | value.DropRate = reader.ReadByte(); | ||||
writer.WriteNumber($"[{value.DropRate.ReadNumber()}]丢包率", value.DropRate); | writer.WriteNumber($"[{value.DropRate.ReadNumber()}]丢包率", value.DropRate); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | string LogicalChannelNoDisplay(byte LogicalChannelNo) | ||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="config"></param> | |||||
/// <returns></returns> | |||||
public JT808_0x9105 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9105 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9105 jT808_0x9105 = new JT808_0x9105(); | JT808_0x9105 jT808_0x9105 = new JT808_0x9105(); | ||||
jT808_0x9105.LogicChannelNo = reader.ReadByte(); | |||||
jT808_0x9105.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9105.DropRate = reader.ReadByte(); | jT808_0x9105.DropRate = reader.ReadByte(); | ||||
return jT808_0x9105; | return jT808_0x9105; | ||||
} | } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="writer"></param> | |||||
/// <param name="value"></param> | |||||
/// <param name="config"></param> | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9105 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9105 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.DropRate); | writer.WriteByte(value.DropRate); | ||||
} | } | ||||
} | } | ||||
@@ -9,12 +9,14 @@ using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JT1078.MessageBody | namespace JT808.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 平台下发远程录像回放请求 | |||||
/// 平台下发远程录像回放请求(vod点播请求) | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9201 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9201>, IJT808Analyze | public class JT808_0x9201 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9201>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "平台下发远程录像回放请求"; | public override string Description => "平台下发远程录像回放请求"; | ||||
public override ushort MsgId => 0x9201; | public override ushort MsgId => 0x9201; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 服务器IP地址长度 | /// 服务器IP地址长度 | ||||
/// </summary> | /// </summary> | ||||
@@ -24,49 +26,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public string ServerIp { get; set; } | public string ServerIp { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 服务器音视频通道监听端口号TCP | |||||
/// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准) | |||||
/// </summary> | /// </summary> | ||||
public ushort TcpPort { get; set; } | public ushort TcpPort { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 服务器音视频通道监听端口号UDP | |||||
/// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准) | |||||
/// </summary> | /// </summary> | ||||
public ushort UdpPort { get; set; } | public ushort UdpPort { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 音视频类型 | |||||
/// 音视频类型(媒体类型) | |||||
/// 0:audio and video | |||||
/// 1:audio | |||||
/// 2:video | |||||
/// 3:audio or video | |||||
/// </summary> | /// </summary> | ||||
public byte AVItemType { get; set; } | |||||
public byte MediaType { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 码流类型 | /// 码流类型 | ||||
/// 0:主或子码流 | |||||
/// 1:主 | |||||
/// 2:子 | |||||
/// 如果此通道只传输音频,置为0 | |||||
/// </summary> | /// </summary> | ||||
public byte StreamType { get; set; } | public byte StreamType { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 存储器类型 | /// 存储器类型 | ||||
/// 0:主或灾备存储器 | |||||
/// 1:主存储器 | |||||
/// 2:灾备存储器 | |||||
/// </summary> | /// </summary> | ||||
public byte MemType { get; set; } | |||||
public byte MemoryType { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 回放方式 | /// 回放方式 | ||||
/// 0:正常 | |||||
/// 1:快进 | |||||
/// 2:关键帧快退回放 | |||||
/// 3:关键帧播放 | |||||
/// 4:单帧上传 | |||||
/// </summary> | /// </summary> | ||||
public byte PlayBackWay { get; set; } | |||||
public byte PlaybackWay { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 快进或快退倍数 | |||||
/// 快进或快退倍数,当<see cref="PlaybackWay"/>为1和2时,此字段有效,否则置0 | |||||
/// 0:无效 | |||||
/// 1:1倍 | |||||
/// 2:2倍 | |||||
/// 3:4倍 | |||||
/// 4:8倍 | |||||
/// 5:16倍 | |||||
/// </summary> | /// </summary> | ||||
public byte FastForwardOrFastRewindMultiples { get; set; } | |||||
public byte PlaySpeed { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 起始时间 | |||||
/// 开始时间,当<see cref="PlaybackWay"/>为4时,该字段表示单帧上传时间 | |||||
/// </summary> | /// </summary> | ||||
public DateTime BeginTime { get; set; } | public DateTime BeginTime { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 结束时间 | |||||
/// 结束时间,当<see cref="PlaybackWay"/>为4时,该字段无效 | |||||
/// </summary> | /// </summary> | ||||
public DateTime EndTime { get; set; } | public DateTime EndTime { get; set; } | ||||
/// <summary> | |||||
/// 格式分析 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="writer"></param> | |||||
/// <param name="config"></param> | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9201 value = new JT808_0x9201(); | |||||
var value = new JT808_0x9201(); | |||||
value.ServerIpLength = reader.ReadByte(); | value.ServerIpLength = reader.ReadByte(); | ||||
writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength); | writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength); | ||||
string ipHex = reader.ReadVirtualArray(value.ServerIpLength).ToArray().ToHexString(); | string ipHex = reader.ReadVirtualArray(value.ServerIpLength).ToArray().ToHexString(); | ||||
@@ -76,144 +106,107 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.TcpPort); | writer.WriteNumber($"[{value.TcpPort.ReadNumber()}]服务器视频通道监听端口号(TCP)", value.TcpPort); | ||||
value.UdpPort = reader.ReadUInt16(); | value.UdpPort = reader.ReadUInt16(); | ||||
writer.WriteNumber($"[{value.UdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.UdpPort); | writer.WriteNumber($"[{value.UdpPort.ReadNumber()}]服务器视频通道监听端口号(UDP)", value.UdpPort); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.AVItemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVItemType.ReadNumber()}]音视频类型", AVItemTypeDisplay(value.AVItemType)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.MediaType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVItemTypeDisplay(value.MediaType)); | |||||
value.StreamType = reader.ReadByte(); | value.StreamType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | ||||
value.MemType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemType.ReadNumber()}]存储器类型", MemTypeDisplay(value.MemType)); | |||||
value.PlayBackWay = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlayBackWay.ReadNumber()}]回访方式", PlayBackWayDisplay(value.PlayBackWay)); | |||||
value.FastForwardOrFastRewindMultiples = reader.ReadByte(); | |||||
writer.WriteString($"[{value.FastForwardOrFastRewindMultiples.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.FastForwardOrFastRewindMultiples)); | |||||
value.MemoryType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemTypeDisplay(value.MemoryType)); | |||||
value.PlaybackWay = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlaybackWay.ReadNumber()}]回访方式", PlayBackWayDisplay(value.PlaybackWay)); | |||||
value.PlaySpeed = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlaySpeed.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.PlaySpeed)); | |||||
value.BeginTime = reader.ReadDateTime6(); | value.BeginTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
writer.WriteString($"[{value.BeginTime:yyMMddHHmmss}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
value.EndTime = reader.ReadDateTime6(); | value.EndTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
string AVItemTypeDisplay(byte AVItemType) | |||||
writer.WriteString($"[{value.EndTime:yyMMddHHmmss}]结束时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
static string AVItemTypeDisplay(byte AVItemType) | |||||
{ | { | ||||
switch (AVItemType) | |||||
return AVItemType switch | |||||
{ | { | ||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
case 3: | |||||
return "音频或视频"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "音视频", | |||||
1 => "音频", | |||||
2 => "视频", | |||||
3 => "音频或视频", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string StreamTypeDisplay(byte StreamType) | |||||
static string StreamTypeDisplay(byte StreamType) | |||||
{ | { | ||||
switch (StreamType) | |||||
return StreamType switch | |||||
{ | { | ||||
case 0: | |||||
return "主码流或子码流"; | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "主码流或子码流", | |||||
1 => "主码流", | |||||
2 => "子码流", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string MemTypeDisplay(byte MemType) | |||||
static string MemTypeDisplay(byte MemType) | |||||
{ | { | ||||
switch (MemType) | |||||
return MemType switch | |||||
{ | { | ||||
case 0: | |||||
return "主存储器或灾备服务器"; | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备服务器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "主存储器或灾备服务器", | |||||
1 => "主存储器", | |||||
2 => "灾备服务器", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string PlayBackWayDisplay(byte PlayBackWay) | |||||
static string PlayBackWayDisplay(byte PlayBackWay) | |||||
{ | { | ||||
switch (PlayBackWay) | |||||
return PlayBackWay switch | |||||
{ | { | ||||
case 0: | |||||
return "正常回放"; | |||||
case 1: | |||||
return "快进回放"; | |||||
case 2: | |||||
return "关键帧快退回访"; | |||||
case 3: | |||||
return "关键帧播放"; | |||||
case 4: | |||||
return "单帧上传"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "正常回放", | |||||
1 => "快进回放", | |||||
2 => "关键帧快退回访", | |||||
3 => "关键帧播放", | |||||
4 => "单帧上传", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples) | |||||
static string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples) | |||||
{ | { | ||||
switch (FastForwardOrFastRewindMultiples) | |||||
return FastForwardOrFastRewindMultiples switch | |||||
{ | { | ||||
case 0: | |||||
return "无效"; | |||||
case 1: | |||||
return "1倍"; | |||||
case 2: | |||||
return "2倍"; | |||||
case 3: | |||||
return "4倍"; | |||||
case 4: | |||||
return "8倍"; | |||||
case 5: | |||||
return "16倍"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "无效", | |||||
1 => "1倍", | |||||
2 => "2倍", | |||||
3 => "4倍", | |||||
4 => "8倍", | |||||
5 => "16倍", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// 反序列化 | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="config"></param> | |||||
/// <returns></returns> | |||||
public JT808_0x9201 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9201 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9201 jT808_0x9201 = new JT808_0x9201(); | JT808_0x9201 jT808_0x9201 = new JT808_0x9201(); | ||||
@@ -221,17 +214,23 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
jT808_0x9201.ServerIp = reader.ReadString(jT808_0x9201.ServerIpLength); | jT808_0x9201.ServerIp = reader.ReadString(jT808_0x9201.ServerIpLength); | ||||
jT808_0x9201.TcpPort = reader.ReadUInt16(); | jT808_0x9201.TcpPort = reader.ReadUInt16(); | ||||
jT808_0x9201.UdpPort = reader.ReadUInt16(); | jT808_0x9201.UdpPort = reader.ReadUInt16(); | ||||
jT808_0x9201.LogicChannelNo = reader.ReadByte(); | |||||
jT808_0x9201.AVItemType = reader.ReadByte(); | |||||
jT808_0x9201.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9201.MediaType = reader.ReadByte(); | |||||
jT808_0x9201.StreamType = reader.ReadByte(); | jT808_0x9201.StreamType = reader.ReadByte(); | ||||
jT808_0x9201.MemType = reader.ReadByte(); | |||||
jT808_0x9201.PlayBackWay = reader.ReadByte(); | |||||
jT808_0x9201.FastForwardOrFastRewindMultiples = reader.ReadByte(); | |||||
jT808_0x9201.MemoryType = reader.ReadByte(); | |||||
jT808_0x9201.PlaybackWay = reader.ReadByte(); | |||||
jT808_0x9201.PlaySpeed = reader.ReadByte(); | |||||
jT808_0x9201.BeginTime = reader.ReadDateTime6(); | jT808_0x9201.BeginTime = reader.ReadDateTime6(); | ||||
jT808_0x9201.EndTime = reader.ReadDateTime6(); | jT808_0x9201.EndTime = reader.ReadDateTime6(); | ||||
return jT808_0x9201; | return jT808_0x9201; | ||||
} | } | ||||
/// <summary> | |||||
/// 序列化 | |||||
/// </summary> | |||||
/// <param name="writer"></param> | |||||
/// <param name="value"></param> | |||||
/// <param name="config"></param> | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9201 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9201 value, IJT808Config config) | ||||
{ | { | ||||
writer.Skip(1, out int position); | writer.Skip(1, out int position); | ||||
@@ -239,12 +238,12 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position);//计算完字符串后,回写字符串长度 | writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - position - 1), position);//计算完字符串后,回写字符串长度 | ||||
writer.WriteUInt16(value.TcpPort); | writer.WriteUInt16(value.TcpPort); | ||||
writer.WriteUInt16(value.UdpPort); | writer.WriteUInt16(value.UdpPort); | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.AVItemType); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.MediaType); | |||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
writer.WriteByte(value.MemType); | |||||
writer.WriteByte(value.PlayBackWay); | |||||
writer.WriteByte(value.FastForwardOrFastRewindMultiples); | |||||
writer.WriteByte(value.MemoryType); | |||||
writer.WriteByte(value.PlaybackWay); | |||||
writer.WriteByte(value.PlaySpeed); | |||||
writer.WriteDateTime6(value.BeginTime); | writer.WriteDateTime6(value.BeginTime); | ||||
writer.WriteDateTime6(value.EndTime); | writer.WriteDateTime6(value.EndTime); | ||||
} | } | ||||
@@ -9,137 +9,136 @@ using System.Text.Json; | |||||
namespace JT808.Protocol.Extensions.JT1078.MessageBody | namespace JT808.Protocol.Extensions.JT1078.MessageBody | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 平台下发远程录像回放控制 | |||||
/// 平台下发远程录像回放控制(VodControl点播控制) | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9202 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9202>, IJT808Analyze | public class JT808_0x9202 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9202>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "平台下发远程录像回放控制"; | public override string Description => "平台下发远程录像回放控制"; | ||||
public override ushort MsgId => 0x9202; | public override ushort MsgId => 0x9202; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 音视频通道号 | /// 音视频通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte AVChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 回放控制 | /// 回放控制 | ||||
/// 0:开始 | |||||
/// 1:暂停 | |||||
/// 2:结束 | |||||
/// 3:快进 | |||||
/// 4:关键帧快退播放 | |||||
/// 5:拖动(到指定位置) | |||||
/// 6:关键帧播放 | |||||
/// </summary> | /// </summary> | ||||
public byte PlayBackControl { get; set; } | |||||
public byte PlayControl { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 快进或快退倍数 | |||||
/// 快进或快退倍数,当<see cref="PlayControl"/>为3和4时,此字段有效,否则置0 | |||||
/// 0:无效 | |||||
/// 1:1倍 | |||||
/// 2:2倍 | |||||
/// 3:4倍 | |||||
/// 4:8倍 | |||||
/// 5:16倍 | |||||
/// </summary> | /// </summary> | ||||
public byte FastForwardOrFastRewindMultiples { get; set; } | |||||
public byte PlaySpeed { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 拖动回放位置 | |||||
/// 拖动回放位置,当<see cref="PlayControl"/>为5时有效(必须) | |||||
/// </summary> | /// </summary> | ||||
public DateTime DragPlaybackPosition { get; set; } | |||||
public DateTime DragPlayPosition { get; set; } | |||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="writer"></param> | |||||
/// <param name="config"></param> | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9202 value = new JT808_0x9202(); | JT808_0x9202 value = new JT808_0x9202(); | ||||
value.AVChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVChannelNo.ReadNumber()}]音视频通道号", AVChannelNoDisplay(value.AVChannelNo)); | |||||
value.PlayBackControl = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlayBackControl.ReadNumber()}]回放控制", PlayBackControlDisplay(value.PlayBackControl)); | |||||
value.FastForwardOrFastRewindMultiples = reader.ReadByte(); | |||||
writer.WriteString($"[{value.FastForwardOrFastRewindMultiples.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.FastForwardOrFastRewindMultiples)); | |||||
value.DragPlaybackPosition = reader.ReadDateTime6(); | |||||
writer.WriteString($"[{value.DragPlaybackPosition.ToString("yyMMddHHmmss")}]拖动回放位置", value.DragPlaybackPosition.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
string AVChannelNoDisplay(byte LogicalChannelNo) | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]音视频通道号", AVChannelNoDisplay(value.ChannelNo)); | |||||
value.PlayControl = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlayControl.ReadNumber()}]回放控制", PlayBackControlDisplay(value.PlayControl)); | |||||
value.PlaySpeed = reader.ReadByte(); | |||||
writer.WriteString($"[{value.PlaySpeed.ReadNumber()}]快进或快退倍数", FastForwardOrFastRewindMultiplesDisplay(value.PlaySpeed)); | |||||
value.DragPlayPosition = reader.ReadDateTime6(); | |||||
writer.WriteString($"[{value.DragPlayPosition.ToString("yyMMddHHmmss")}]拖动回放位置", value.DragPlayPosition.ToString("yyyy-MM-dd HH:mm:ss")); | |||||
static string AVChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
string PlayBackControlDisplay(byte PlayBackControl) { | |||||
switch (PlayBackControl) | |||||
static string PlayBackControlDisplay(byte PlayBackControl) { | |||||
return PlayBackControl switch | |||||
{ | { | ||||
case 0: | |||||
return "开始回放"; | |||||
case 1: | |||||
return "暂停回放"; | |||||
case 2: | |||||
return "结束回放"; | |||||
case 3: | |||||
return "快进回放"; | |||||
case 4: | |||||
return "关键帧快退回放"; | |||||
case 5: | |||||
return "拖动回放"; | |||||
case 6: | |||||
return "关键帧播放"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "开始回放", | |||||
1 => "暂停回放", | |||||
2 => "结束回放", | |||||
3 => "快进回放", | |||||
4 => "关键帧快退回放", | |||||
5 => "拖动回放", | |||||
6 => "关键帧播放", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples) | |||||
static string FastForwardOrFastRewindMultiplesDisplay(byte FastForwardOrFastRewindMultiples) | |||||
{ | { | ||||
switch (FastForwardOrFastRewindMultiples) | |||||
return FastForwardOrFastRewindMultiples switch | |||||
{ | { | ||||
case 0: | |||||
return "无效"; | |||||
case 1: | |||||
return "1倍"; | |||||
case 2: | |||||
return "2倍"; | |||||
case 3: | |||||
return "4倍"; | |||||
case 4: | |||||
return "8倍"; | |||||
case 5: | |||||
return "16倍"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "无效", | |||||
1 => "1倍", | |||||
2 => "2倍", | |||||
3 => "4倍", | |||||
4 => "8倍", | |||||
5 => "16倍", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
} | } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="reader"></param> | |||||
/// <param name="config"></param> | |||||
/// <returns></returns> | |||||
public JT808_0x9202 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9202 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9202 jT808_0x9202 = new JT808_0x9202(); | |||||
jT808_0x9202.AVChannelNo = reader.ReadByte(); | |||||
jT808_0x9202.PlayBackControl = reader.ReadByte(); | |||||
jT808_0x9202.FastForwardOrFastRewindMultiples = reader.ReadByte(); | |||||
jT808_0x9202.DragPlaybackPosition = reader.ReadDateTime6(); | |||||
var jT808_0x9202 = new JT808_0x9202(); | |||||
jT808_0x9202.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9202.PlayControl = reader.ReadByte(); | |||||
jT808_0x9202.PlaySpeed = reader.ReadByte(); | |||||
jT808_0x9202.DragPlayPosition = reader.ReadDateTime6(); | |||||
return jT808_0x9202; | return jT808_0x9202; | ||||
} | } | ||||
/// <summary> | |||||
/// | |||||
/// </summary> | |||||
/// <param name="writer"></param> | |||||
/// <param name="value"></param> | |||||
/// <param name="config"></param> | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9202 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9202 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.AVChannelNo); | |||||
writer.WriteByte(value.PlayBackControl); | |||||
writer.WriteByte(value.FastForwardOrFastRewindMultiples); | |||||
writer.WriteDateTime6(value.DragPlaybackPosition); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.PlayControl); | |||||
writer.WriteByte(value.PlaySpeed); | |||||
writer.WriteDateTime6(value.DragPlayPosition); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9205 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9205>, IJT808Analyze | public class JT808_0x9205 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9205>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "查询资源列表"; | public override string Description => "查询资源列表"; | ||||
public override ushort MsgId => 0x9205; | public override ushort MsgId => 0x9205; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 开始时间 | /// 开始时间 | ||||
/// </summary> | /// </summary> | ||||
@@ -33,127 +35,108 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public ulong AlarmFlag { get; set; } | public ulong AlarmFlag { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 音视频资源类型 | /// 音视频资源类型 | ||||
/// 0:audio and video | |||||
/// 1:audio | |||||
/// 2:video | |||||
/// 3:audio or video | |||||
/// </summary> | /// </summary> | ||||
public byte AVResourceType { get; set; } | |||||
public byte MediaType { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 码流类型 | /// 码流类型 | ||||
/// 0:主或子码流 | |||||
/// 1:主 | |||||
/// 2:子 | |||||
/// </summary> | /// </summary> | ||||
public byte StreamType { get; set; } | public byte StreamType { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 存储器类型 | /// 存储器类型 | ||||
/// 0:主或灾备存储器 | |||||
/// 1:主存储器 | |||||
/// 2:灾备存储器 | |||||
/// </summary> | /// </summary> | ||||
public byte MemoryType { get; set; } | public byte MemoryType { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9205 value = new JT808_0x9205(); | JT808_0x9205 value = new JT808_0x9205(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.BeginTime = reader.ReadDateTime6(); | value.BeginTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | ||||
value.EndTime = reader.ReadDateTime6(); | value.EndTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | ||||
value.AlarmFlag = reader.ReadUInt64(); | value.AlarmFlag = reader.ReadUInt64(); | ||||
writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag); | writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag); | ||||
value.AVResourceType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.AVResourceType)); | |||||
value.MediaType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.MediaType)); | |||||
value.StreamType = reader.ReadByte(); | value.StreamType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | ||||
value.MemoryType = reader.ReadByte(); | value.MemoryType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemoryType)); | writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemoryType)); | ||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
static string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | { | ||||
switch (AVResourceType) | |||||
return AVResourceType switch | |||||
{ | { | ||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
case 3: | |||||
return "音频或视频"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "音视频", | |||||
1 => "音频", | |||||
2 => "视频", | |||||
3 => "音频或视频", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string StreamTypeDisplay(byte StreamType) | |||||
static string StreamTypeDisplay(byte StreamType) | |||||
{ | { | ||||
switch (StreamType) | |||||
return StreamType switch | |||||
{ | { | ||||
case 0: | |||||
return "所有码流"; | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "所有码流", | |||||
1 => "主码流", | |||||
2 => "子码流", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string MemoryTypeDisplay(byte MemType) | |||||
static string MemoryTypeDisplay(byte MemType) | |||||
{ | { | ||||
switch (MemType) | |||||
return MemType switch | |||||
{ | { | ||||
case 0: | |||||
return "所有存储器"; | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备服务器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "所有存储器", | |||||
1 => "主存储器", | |||||
2 => "灾备服务器", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9205 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9205 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9205 jT808_0x9205 = new JT808_0x9205(); | |||||
jT808_0x9205.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9205 = new JT808_0x9205(); | |||||
jT808_0x9205.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9205.BeginTime = reader.ReadDateTime6(); | jT808_0x9205.BeginTime = reader.ReadDateTime6(); | ||||
jT808_0x9205.EndTime = reader.ReadDateTime6(); | jT808_0x9205.EndTime = reader.ReadDateTime6(); | ||||
jT808_0x9205.AlarmFlag = reader.ReadUInt64(); | jT808_0x9205.AlarmFlag = reader.ReadUInt64(); | ||||
jT808_0x9205.AVResourceType = reader.ReadByte(); | |||||
jT808_0x9205.MediaType = reader.ReadByte(); | |||||
jT808_0x9205.StreamType = reader.ReadByte(); | jT808_0x9205.StreamType = reader.ReadByte(); | ||||
jT808_0x9205.MemoryType = reader.ReadByte(); | jT808_0x9205.MemoryType = reader.ReadByte(); | ||||
return jT808_0x9205; | return jT808_0x9205; | ||||
@@ -161,13 +144,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9205 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9205 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteDateTime6(value.BeginTime); | writer.WriteDateTime6(value.BeginTime); | ||||
writer.WriteDateTime6(value.EndTime); | writer.WriteDateTime6(value.EndTime); | ||||
writer.WriteUInt64(value.AlarmFlag); | writer.WriteUInt64(value.AlarmFlag); | ||||
writer.WriteByte(value.AVResourceType); | |||||
writer.WriteByte(value.MediaType); | |||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
writer.WriteByte(value.MemoryType); | writer.WriteByte(value.MemoryType); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9206 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9206>, IJT808Analyze | public class JT808_0x9206 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9206>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "文件上传指令"; | public override string Description => "文件上传指令"; | ||||
public override ushort MsgId => 0x9206; | public override ushort MsgId => 0x9206; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 服务器IP地址服务 | /// 服务器IP地址服务 | ||||
/// </summary> | /// </summary> | ||||
public byte ServerIpLength { get; set; } | |||||
public byte ServerIpLength { get;internal set; } | |||||
/// <summary> | /// <summary> | ||||
/// 服务器IP地址 | /// 服务器IP地址 | ||||
/// </summary> | /// </summary> | ||||
@@ -30,7 +32,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 用户名长度 | /// 用户名长度 | ||||
/// </summary> | /// </summary> | ||||
public byte UserNameLength { get; set; } | |||||
public byte UserNameLength { get; internal set; } | |||||
/// <summary> | /// <summary> | ||||
/// 用户名 | /// 用户名 | ||||
/// </summary> | /// </summary> | ||||
@@ -38,7 +40,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 密码长度 | /// 密码长度 | ||||
/// </summary> | /// </summary> | ||||
public byte PasswordLength { get; set; } | |||||
public byte PasswordLength { get; internal set; } | |||||
/// <summary> | /// <summary> | ||||
/// 密码 | /// 密码 | ||||
/// </summary> | /// </summary> | ||||
@@ -46,7 +48,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 文件上传路径长度 | /// 文件上传路径长度 | ||||
/// </summary> | /// </summary> | ||||
public byte FileUploadPathLength { get; set; } | |||||
public byte FileUploadPathLength { get; internal set; } | |||||
/// <summary> | /// <summary> | ||||
/// 文件上传路径 | /// 文件上传路径 | ||||
/// </summary> | /// </summary> | ||||
@@ -54,7 +56,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 起始时间 | /// 起始时间 | ||||
/// </summary> | /// </summary> | ||||
@@ -70,7 +72,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// <summary> | /// <summary> | ||||
/// 音视频资源类型 | /// 音视频资源类型 | ||||
/// </summary> | /// </summary> | ||||
public byte AVResourceType { get; set; } | |||||
public byte MediaType { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 码流类型 | /// 码流类型 | ||||
/// </summary> | /// </summary> | ||||
@@ -84,6 +86,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public byte TaskExcuteCondition { get; set; } | public byte TaskExcuteCondition { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9206 value = new JT808_0x9206(); | JT808_0x9206 value = new JT808_0x9206(); | ||||
@@ -110,16 +113,16 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
value.FileUploadPath = reader.ReadString(value.FileUploadPathLength); | value.FileUploadPath = reader.ReadString(value.FileUploadPathLength); | ||||
writer.WriteString($"[{fileUploadPathHex}]文件上传路径", value.FileUploadPath); | writer.WriteString($"[{fileUploadPathHex}]文件上传路径", value.FileUploadPath); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.BeginTime = reader.ReadDateTime6(); | value.BeginTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss")); | ||||
value.EndTime = reader.ReadDateTime6(); | value.EndTime = reader.ReadDateTime6(); | ||||
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); | ||||
value.AlarmFlag = reader.ReadUInt32(); | value.AlarmFlag = reader.ReadUInt32(); | ||||
writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag); | writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag); | ||||
value.AVResourceType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.AVResourceType)); | |||||
value.MediaType = reader.ReadByte(); | |||||
writer.WriteString($"[{value.MediaType.ReadNumber()}]音视频类型", AVResourceTypeDisplay(value.MediaType)); | |||||
value.StreamType = reader.ReadByte(); | value.StreamType = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType)); | ||||
value.MemoryPositon = reader.ReadByte(); | value.MemoryPositon = reader.ReadByte(); | ||||
@@ -127,90 +130,61 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
value.TaskExcuteCondition = reader.ReadByte(); | value.TaskExcuteCondition = reader.ReadByte(); | ||||
writer.WriteString($"[{value.TaskExcuteCondition.ReadNumber()}]任务执行条件", TaskExcuteConditionDisplay(value.TaskExcuteCondition)); | writer.WriteString($"[{value.TaskExcuteCondition.ReadNumber()}]任务执行条件", TaskExcuteConditionDisplay(value.TaskExcuteCondition)); | ||||
string AVResourceTypeDisplay(byte AVResourceType) | |||||
static string AVResourceTypeDisplay(byte AVResourceType) | |||||
{ | { | ||||
switch (AVResourceType) | |||||
return AVResourceType switch | |||||
{ | { | ||||
case 0: | |||||
return "音视频"; | |||||
case 1: | |||||
return "音频"; | |||||
case 2: | |||||
return "视频"; | |||||
case 3: | |||||
return "音频或视频"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "音视频", | |||||
1 => "音频", | |||||
2 => "视频", | |||||
3 => "音频或视频", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string StreamTypeDisplay(byte StreamType) | |||||
static string StreamTypeDisplay(byte StreamType) | |||||
{ | { | ||||
switch (StreamType) | |||||
return StreamType switch | |||||
{ | { | ||||
case 0: | |||||
return "所有码流"; | |||||
case 1: | |||||
return "主码流"; | |||||
case 2: | |||||
return "子码流"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "所有码流", | |||||
1 => "主码流", | |||||
2 => "子码流", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string MemoryPositonDisplay(byte MemoryPositon) | |||||
static string MemoryPositonDisplay(byte MemoryPositon) | |||||
{ | { | ||||
switch (MemoryPositon) | |||||
return MemoryPositon switch | |||||
{ | { | ||||
case 0: | |||||
return "主存储器或灾备服务器"; | |||||
case 1: | |||||
return "主存储器"; | |||||
case 2: | |||||
return "灾备服务器"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "主存储器或灾备服务器", | |||||
1 => "主存储器", | |||||
2 => "灾备服务器", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
string TaskExcuteConditionDisplay(byte TaskExcuteCondition) { | |||||
string taskExcuteConditionDisplay = string.Empty; | |||||
static string TaskExcuteConditionDisplay(byte TaskExcuteCondition) { | |||||
var taskExcuteConditionDisplay = string.Empty; | |||||
taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",WIFI":""; | taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",WIFI":""; | ||||
taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",LAN" : ""; | taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",LAN" : ""; | ||||
taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",3G/4G" : ""; | taskExcuteConditionDisplay += (TaskExcuteCondition & 0x01) == 1 ? ",3G/4G" : ""; | ||||
@@ -220,7 +194,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public JT808_0x9206 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9206 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9206 jT808_0x9206 = new JT808_0x9206(); | |||||
var jT808_0x9206 = new JT808_0x9206(); | |||||
jT808_0x9206.ServerIpLength = reader.ReadByte(); | jT808_0x9206.ServerIpLength = reader.ReadByte(); | ||||
jT808_0x9206.ServerIp = reader.ReadString(jT808_0x9206.ServerIpLength); | jT808_0x9206.ServerIp = reader.ReadString(jT808_0x9206.ServerIpLength); | ||||
jT808_0x9206.Port = reader.ReadUInt16(); | jT808_0x9206.Port = reader.ReadUInt16(); | ||||
@@ -230,11 +204,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
jT808_0x9206.Password = reader.ReadString(jT808_0x9206.PasswordLength); | jT808_0x9206.Password = reader.ReadString(jT808_0x9206.PasswordLength); | ||||
jT808_0x9206.FileUploadPathLength = reader.ReadByte(); | jT808_0x9206.FileUploadPathLength = reader.ReadByte(); | ||||
jT808_0x9206.FileUploadPath = reader.ReadString(jT808_0x9206.FileUploadPathLength); | jT808_0x9206.FileUploadPath = reader.ReadString(jT808_0x9206.FileUploadPathLength); | ||||
jT808_0x9206.LogicChannelNo = reader.ReadByte(); | |||||
jT808_0x9206.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9206.BeginTime = reader.ReadDateTime6(); | jT808_0x9206.BeginTime = reader.ReadDateTime6(); | ||||
jT808_0x9206.EndTime = reader.ReadDateTime6(); | jT808_0x9206.EndTime = reader.ReadDateTime6(); | ||||
jT808_0x9206.AlarmFlag = reader.ReadUInt32(); | jT808_0x9206.AlarmFlag = reader.ReadUInt32(); | ||||
jT808_0x9206.AVResourceType = reader.ReadByte(); | |||||
jT808_0x9206.MediaType = reader.ReadByte(); | |||||
jT808_0x9206.StreamType = reader.ReadByte(); | jT808_0x9206.StreamType = reader.ReadByte(); | ||||
jT808_0x9206.MemoryPositon = reader.ReadByte(); | jT808_0x9206.MemoryPositon = reader.ReadByte(); | ||||
jT808_0x9206.TaskExcuteCondition = reader.ReadByte(); | jT808_0x9206.TaskExcuteCondition = reader.ReadByte(); | ||||
@@ -256,14 +230,15 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.Skip(1, out int fileUploadPathLengthLengthposition); | writer.Skip(1, out int fileUploadPathLengthLengthposition); | ||||
writer.WriteString(value.FileUploadPath); | writer.WriteString(value.FileUploadPath); | ||||
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - fileUploadPathLengthLengthposition - 1), fileUploadPathLengthLengthposition); | writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - fileUploadPathLengthLengthposition - 1), fileUploadPathLengthLengthposition); | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteDateTime6(value.BeginTime); | writer.WriteDateTime6(value.BeginTime); | ||||
writer.WriteDateTime6(value.EndTime); | writer.WriteDateTime6(value.EndTime); | ||||
writer.WriteUInt32(value.AlarmFlag); | writer.WriteUInt32(value.AlarmFlag); | ||||
writer.WriteByte(value.AVResourceType); | |||||
writer.WriteByte(value.MediaType); | |||||
writer.WriteByte(value.StreamType); | writer.WriteByte(value.StreamType); | ||||
writer.WriteByte(value.MemoryPositon); | writer.WriteByte(value.MemoryPositon); | ||||
writer.WriteByte(value.TaskExcuteCondition); | writer.WriteByte(value.TaskExcuteCondition); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,8 +13,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9207 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9207>, IJT808Analyze | public class JT808_0x9207 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9207>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "文件上传控制"; | public override string Description => "文件上传控制"; | ||||
public override ushort MsgId => 0x9207; | public override ushort MsgId => 0x9207; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 流水号 | /// 流水号 | ||||
/// </summary> | /// </summary> | ||||
@@ -24,6 +26,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public byte UploadControl { get; set; } | public byte UploadControl { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9207 value = new JT808_0x9207(); | JT808_0x9207 value = new JT808_0x9207(); | ||||
@@ -31,24 +34,20 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteNumber($"[{value.MgsNum.ReadNumber()}]流水号", value.MgsNum); | writer.WriteNumber($"[{value.MgsNum.ReadNumber()}]流水号", value.MgsNum); | ||||
value.UploadControl = reader.ReadByte(); | value.UploadControl = reader.ReadByte(); | ||||
writer.WriteString($"[{value.UploadControl.ReadNumber()}]上传控制", UploadControlDisplay(value.UploadControl)); | writer.WriteString($"[{value.UploadControl.ReadNumber()}]上传控制", UploadControlDisplay(value.UploadControl)); | ||||
string UploadControlDisplay(byte UploadControl) { | |||||
switch (UploadControl) | |||||
static string UploadControlDisplay(byte UploadControl) { | |||||
return UploadControl switch | |||||
{ | { | ||||
case 0: | |||||
return "暂停"; | |||||
case 1: | |||||
return "继续"; | |||||
case 2: | |||||
return "取消"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "暂停", | |||||
1 => "继续", | |||||
2 => "取消", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9207 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9207 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9207 jT808_0x9207 = new JT808_0x9207(); | |||||
var jT808_0x9207 = new JT808_0x9207(); | |||||
jT808_0x9207.MgsNum = reader.ReadUInt16(); | jT808_0x9207.MgsNum = reader.ReadUInt16(); | ||||
jT808_0x9207.UploadControl = reader.ReadByte(); | jT808_0x9207.UploadControl = reader.ReadByte(); | ||||
return jT808_0x9207; | return jT808_0x9207; | ||||
@@ -59,5 +58,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteUInt16(value.MgsNum); | writer.WriteUInt16(value.MgsNum); | ||||
writer.WriteByte(value.UploadControl); | writer.WriteByte(value.UploadControl); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,91 +13,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9301 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9301>, IJT808Analyze | public class JT808_0x9301 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9301>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "云台旋转"; | public override string Description => "云台旋转"; | ||||
public override ushort MsgId => 0x9301; | public override ushort MsgId => 0x9301; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 方向 | /// 方向 | ||||
/// 0:停止 | |||||
/// 1:上 | |||||
/// 2:下 | |||||
/// 3:左 | |||||
/// 4:右 | |||||
/// </summary> | /// </summary> | ||||
public byte Direction { get; set; } | public byte Direction { get; set; } | ||||
/// <summary> | /// <summary> | ||||
/// 速度 | /// 速度 | ||||
/// 0-255 | |||||
/// </summary> | /// </summary> | ||||
public byte Speed { get; set; } | public byte Speed { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9301 value = new JT808_0x9301(); | JT808_0x9301 value = new JT808_0x9301(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.Direction = reader.ReadByte(); | value.Direction = reader.ReadByte(); | ||||
writer.WriteString($"[{value.Direction.ReadNumber()}]方向", DirectionDisplay(value.Direction)); | writer.WriteString($"[{value.Direction.ReadNumber()}]方向", DirectionDisplay(value.Direction)); | ||||
value.Speed = reader.ReadByte(); | value.Speed = reader.ReadByte(); | ||||
writer.WriteNumber($"[{value.Speed.ReadNumber()}]速度", value.Speed); | writer.WriteNumber($"[{value.Speed.ReadNumber()}]速度", value.Speed); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
string DirectionDisplay(byte Direction) { | |||||
switch (Direction) | |||||
static string DirectionDisplay(byte Direction) { | |||||
return Direction switch | |||||
{ | { | ||||
case 0: | |||||
return "停止"; | |||||
case 1: | |||||
return "上"; | |||||
case 2: | |||||
return "下"; | |||||
case 3: | |||||
return "左"; | |||||
case 4: | |||||
return "右"; | |||||
default: | |||||
return "未知"; | |||||
} | |||||
0 => "停止", | |||||
1 => "上", | |||||
2 => "下", | |||||
3 => "左", | |||||
4 => "右", | |||||
_ => "未知", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9301 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9301 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9301 jT808_0x9301 = new JT808_0x9301(); | |||||
jT808_0x9301.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9301 = new JT808_0x9301(); | |||||
jT808_0x9301.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9301.Direction = reader.ReadByte(); | jT808_0x9301.Direction = reader.ReadByte(); | ||||
jT808_0x9301.Speed = reader.ReadByte(); | jT808_0x9301.Speed = reader.ReadByte(); | ||||
return jT808_0x9301; | return jT808_0x9301; | ||||
@@ -105,9 +91,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9301 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9301 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.Direction); | writer.WriteByte(value.Direction); | ||||
writer.WriteByte(value.Speed); | writer.WriteByte(value.Speed); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,8 +13,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9302 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9302>, IJT808Analyze | public class JT808_0x9302 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9302>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "云台调整焦距控制"; | public override string Description => "云台调整焦距控制"; | ||||
public override ushort MsgId => 0x9302; | public override ushort MsgId => 0x9302; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
@@ -23,59 +26,43 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// 焦距调整方向 | /// 焦距调整方向 | ||||
/// </summary> | /// </summary> | ||||
public byte FocusAdjustmentDirection { get; set; } | public byte FocusAdjustmentDirection { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9302 value = new JT808_0x9302(); | |||||
var value = new JT808_0x9302(); | |||||
value.LogicChannelNo = reader.ReadByte(); | value.LogicChannelNo = reader.ReadByte(); | ||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | ||||
value.FocusAdjustmentDirection = reader.ReadByte(); | value.FocusAdjustmentDirection = reader.ReadByte(); | ||||
writer.WriteString($"[{value.FocusAdjustmentDirection.ReadNumber()}]焦距调整方向", value.FocusAdjustmentDirection==0?"焦距调大":"焦距调小"); | writer.WriteString($"[{value.FocusAdjustmentDirection.ReadNumber()}]焦距调整方向", value.FocusAdjustmentDirection==0?"焦距调大":"焦距调小"); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9302 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9302 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9302 jT808_0x9302 = new JT808_0x9302(); | |||||
var jT808_0x9302 = new JT808_0x9302(); | |||||
jT808_0x9302.LogicChannelNo = reader.ReadByte(); | jT808_0x9302.LogicChannelNo = reader.ReadByte(); | ||||
jT808_0x9302.FocusAdjustmentDirection = reader.ReadByte(); | jT808_0x9302.FocusAdjustmentDirection = reader.ReadByte(); | ||||
return jT808_0x9302; | return jT808_0x9302; | ||||
@@ -86,5 +73,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
writer.WriteByte(value.LogicChannelNo); | writer.WriteByte(value.LogicChannelNo); | ||||
writer.WriteByte(value.FocusAdjustmentDirection); | writer.WriteByte(value.FocusAdjustmentDirection); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,76 +13,64 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9303 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9303>, IJT808Analyze | public class JT808_0x9303 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9303>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "云台调整光圈控制"; | public override string Description => "云台调整光圈控制"; | ||||
public override ushort MsgId => 0x9303; | public override ushort MsgId => 0x9303; | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 光圈调整方式 | /// 光圈调整方式 | ||||
/// </summary> | /// </summary> | ||||
public byte IrisAdjustment { get; set; } | public byte IrisAdjustment { get; set; } | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9303 value = new JT808_0x9303(); | JT808_0x9303 value = new JT808_0x9303(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.IrisAdjustment = reader.ReadByte(); | value.IrisAdjustment = reader.ReadByte(); | ||||
writer.WriteString($"[{value.IrisAdjustment.ReadNumber()}]光圈调整方式", value.IrisAdjustment == 0 ? "调大" : "调小"); | writer.WriteString($"[{value.IrisAdjustment.ReadNumber()}]光圈调整方式", value.IrisAdjustment == 0 ? "调大" : "调小"); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9303 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9303 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9303 jT808_0x9303 = new JT808_0x9303(); | |||||
jT808_0x9303.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9303 = new JT808_0x9303(); | |||||
jT808_0x9303.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9303.IrisAdjustment = reader.ReadByte(); | jT808_0x9303.IrisAdjustment = reader.ReadByte(); | ||||
return jT808_0x9303; | return jT808_0x9303; | ||||
} | } | ||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9303 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9303 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.IrisAdjustment); | writer.WriteByte(value.IrisAdjustment); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9304 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9304>, IJT808Analyze | public class JT808_0x9304 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9304>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "云台雨刷控制"; | public override string Description => "云台雨刷控制"; | ||||
public override ushort MsgId => 0x9304; | public override ushort MsgId => 0x9304; | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 启停标识 | /// 启停标识 | ||||
/// </summary> | /// </summary> | ||||
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9304 value = new JT808_0x9304(); | JT808_0x9304 value = new JT808_0x9304(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.StartOrStop = reader.ReadByte(); | value.StartOrStop = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动"); | writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动"); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9304 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9304 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9304 jT808_0x9304 = new JT808_0x9304(); | |||||
jT808_0x9304.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9304 = new JT808_0x9304(); | |||||
jT808_0x9304.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9304.StartOrStop = reader.ReadByte(); | jT808_0x9304.StartOrStop = reader.ReadByte(); | ||||
return jT808_0x9304; | return jT808_0x9304; | ||||
} | } | ||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9304 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9304 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.StartOrStop); | writer.WriteByte(value.StartOrStop); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9305 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9305>, IJT808Analyze | public class JT808_0x9305 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9305>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "红外补光控制"; | public override string Description => "红外补光控制"; | ||||
public override ushort MsgId => 0x9305; | public override ushort MsgId => 0x9305; | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 启停标识 | /// 启停标识 | ||||
/// </summary> | /// </summary> | ||||
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9305 value = new JT808_0x9305(); | JT808_0x9305 value = new JT808_0x9305(); | ||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.StartOrStop = reader.ReadByte(); | value.StartOrStop = reader.ReadByte(); | ||||
writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动"); | writer.WriteString($"[{value.StartOrStop.ReadNumber()}]启停标识", value.StartOrStop == 0 ? "停止" : "启动"); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9305 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9305 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9305 jT808_0x9305 = new JT808_0x9305(); | |||||
jT808_0x9305.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9305 = new JT808_0x9305(); | |||||
jT808_0x9305.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9305.StartOrStop = reader.ReadByte(); | jT808_0x9305.StartOrStop = reader.ReadByte(); | ||||
return jT808_0x9305; | return jT808_0x9305; | ||||
} | } | ||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9305 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9305 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.StartOrStop); | writer.WriteByte(value.StartOrStop); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |
@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
/// </summary> | /// </summary> | ||||
public class JT808_0x9306 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9306>, IJT808Analyze | public class JT808_0x9306 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9306>, IJT808Analyze | ||||
{ | { | ||||
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
public override string Description => "云台变倍控制"; | public override string Description => "云台变倍控制"; | ||||
public override ushort MsgId => 0x9306; | public override ushort MsgId => 0x9306; | ||||
/// <summary> | /// <summary> | ||||
/// 逻辑通道号 | /// 逻辑通道号 | ||||
/// </summary> | /// </summary> | ||||
public byte LogicChannelNo { get; set; } | |||||
public byte ChannelNo { get; set; } | |||||
/// <summary> | /// <summary> | ||||
/// 变倍控制 | /// 变倍控制 | ||||
/// </summary> | /// </summary> | ||||
@@ -26,63 +28,49 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody | |||||
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9306 value = new JT808_0x9306(); | |||||
value.LogicChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo)); | |||||
var value = new JT808_0x9306(); | |||||
value.ChannelNo = reader.ReadByte(); | |||||
writer.WriteString($"[{value.ChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.ChannelNo)); | |||||
value.ChangeMultipleControl = reader.ReadByte(); | value.ChangeMultipleControl = reader.ReadByte(); | ||||
writer.WriteString($"[{value.ChangeMultipleControl.ReadNumber()}]变倍控制", value.ChangeMultipleControl == 0 ? "调大" : "调小"); | writer.WriteString($"[{value.ChangeMultipleControl.ReadNumber()}]变倍控制", value.ChangeMultipleControl == 0 ? "调大" : "调小"); | ||||
string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
static string LogicalChannelNoDisplay(byte LogicalChannelNo) | |||||
{ | { | ||||
switch (LogicalChannelNo) | |||||
return LogicalChannelNo switch | |||||
{ | { | ||||
case 1: | |||||
return "驾驶员"; | |||||
case 2: | |||||
return "车辆正前方"; | |||||
case 3: | |||||
return "车前门"; | |||||
case 4: | |||||
return "车厢前部"; | |||||
case 5: | |||||
return "车厢后部"; | |||||
case 7: | |||||
return "行李舱"; | |||||
case 8: | |||||
return "车辆左侧"; | |||||
case 9: | |||||
return "车辆右侧"; | |||||
case 10: | |||||
return "车辆正后方"; | |||||
case 11: | |||||
return "车厢中部"; | |||||
case 12: | |||||
return "车中门"; | |||||
case 13: | |||||
return "驾驶席车门"; | |||||
case 33: | |||||
return "驾驶员"; | |||||
case 36: | |||||
return "车厢前部"; | |||||
case 37: | |||||
return "车厢后部"; | |||||
default: | |||||
return "预留"; | |||||
} | |||||
1 => "驾驶员", | |||||
2 => "车辆正前方", | |||||
3 => "车前门", | |||||
4 => "车厢前部", | |||||
5 => "车厢后部", | |||||
7 => "行李舱", | |||||
8 => "车辆左侧", | |||||
9 => "车辆右侧", | |||||
10 => "车辆正后方", | |||||
11 => "车厢中部", | |||||
12 => "车中门", | |||||
13 => "驾驶席车门", | |||||
33 => "驾驶员", | |||||
36 => "车厢前部", | |||||
37 => "车厢后部", | |||||
_ => "预留", | |||||
}; | |||||
} | } | ||||
} | } | ||||
public JT808_0x9306 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | public JT808_0x9306 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) | ||||
{ | { | ||||
JT808_0x9306 jT808_0x9306 = new JT808_0x9306(); | |||||
jT808_0x9306.LogicChannelNo = reader.ReadByte(); | |||||
var jT808_0x9306 = new JT808_0x9306(); | |||||
jT808_0x9306.ChannelNo = reader.ReadByte(); | |||||
jT808_0x9306.ChangeMultipleControl = reader.ReadByte(); | jT808_0x9306.ChangeMultipleControl = reader.ReadByte(); | ||||
return jT808_0x9306; | return jT808_0x9306; | ||||
} | } | ||||
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9306 value, IJT808Config config) | public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9306 value, IJT808Config config) | ||||
{ | { | ||||
writer.WriteByte(value.LogicChannelNo); | |||||
writer.WriteByte(value.ChannelNo); | |||||
writer.WriteByte(value.ChangeMultipleControl); | writer.WriteByte(value.ChangeMultipleControl); | ||||
} | } | ||||
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释 | |||||
} | } | ||||
} | } |