Bladeren bron

对808扩展1078相关指令命名字段名进行精简、统一并增加注释说明。

pull/13/head
LDMING 4 jaren geleden
bovenliggende
commit
f80ad70a99
29 gewijzigde bestanden met toevoegingen van 829 en 951 verwijderingen
  1. +17
    -17
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs
  2. +6
    -6
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs
  3. +2
    -2
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs
  4. +10
    -10
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs
  5. +8
    -8
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs
  6. +4
    -4
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs
  7. +4
    -4
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs
  8. +2
    -2
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs
  9. +2
    -2
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs
  10. +2
    -2
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs
  11. +1
    -1
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs
  12. +2
    -2
      src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs
  13. +4
    -5
      src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs
  14. +2
    -2
      src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs
  15. +3
    -0
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs
  16. +83
    -87
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs
  17. +69
    -75
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs
  18. +46
    -42
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs
  19. +137
    -138
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs
  20. +97
    -98
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs
  21. +66
    -82
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs
  22. +62
    -87
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs
  23. +12
    -12
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs
  24. +44
    -57
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs
  25. +28
    -40
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs
  26. +30
    -42
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs
  27. +28
    -41
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs
  28. +28
    -41
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs
  29. +30
    -42
      src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs

+ 17
- 17
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9101Test.cs Bestand weergeven

@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test1()
{
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.StreamType= 1;
var hex = JT808Serializer.Serialize(jT808_0X9101).ToHexString();
@@ -41,11 +41,11 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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.StreamType);
}
@@ -60,10 +60,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
header.TerminalPhoneNo = "12345679810";
jT808Package.Header = header;
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.StreamType = 1;
jT808Package.Bodies = jT808_0X9101;
@@ -88,10 +88,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
header.TerminalPhoneNo = "";
jT808Package.Header = header;
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.StreamType = 1;
jT808Package.Bodies = jT808_0X9101;


+ 6
- 6
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9102Test.cs Bestand weergeven

@@ -27,10 +27,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test1()
{
JT808_0x9102 jT808_0X9102 = new JT808_0x9102();
jT808_0X9102.LogicalChannelNo = 1;
jT808_0X9102.ChannelNo = 1;
jT808_0X9102.ControlCmd = 1;
jT808_0X9102.CloseAVData = 0;
jT808_0X9102.SwitchStreamType = 0;
jT808_0X9102.StreamType = 0;
var hex = JT808Serializer.Serialize(jT808_0X9102).ToHexString();
Assert.Equal("01010000", hex);
}
@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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(0, jT808_0X9102.CloseAVData);
Assert.Equal(0, jT808_0X9102.SwitchStreamType);
Assert.Equal(0, jT808_0X9102.StreamType);
}

[Fact]
@@ -55,10 +55,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
header.TerminalPhoneNo = "12345679810";
jT808Package.Header = header;
JT808_0x9102 jT808_0X9102 = new JT808_0x9102();
jT808_0X9102.LogicalChannelNo = 1;
jT808_0X9102.ChannelNo = 1;
jT808_0X9102.ControlCmd = 1;
jT808_0X9102.CloseAVData = 0;
jT808_0X9102.SwitchStreamType = 0;
jT808_0X9102.StreamType = 0;
jT808Package.Bodies = jT808_0X9102;
var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
//7E910200040123456798100001010100001E7E


+ 2
- 2
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9105Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9105 jT808_0x9105 = new JT808_0x9105()
{
LogicChannelNo=1,
ChannelNo=1,
DropRate=2
};
var hex = JT808Serializer.Serialize(jT808_0x9105).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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);
}
[Fact]


+ 10
- 10
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9201Test.cs Bestand weergeven

@@ -39,13 +39,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9201 jT808_0x9201 = new JT808_0x9201()
{
LogicChannelNo = 1,
AVItemType = 2,
ChannelNo = 1,
MediaType = 2,
BeginTime = 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",
ServerIpLength=9,
StreamType=7,
@@ -60,13 +60,13 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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.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(9, jT808_0x9201.ServerIpLength);
Assert.Equal(7, jT808_0x9201.StreamType);


+ 8
- 8
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9202Test.cs Bestand weergeven

@@ -39,10 +39,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
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();
Assert.Equal("010302190716101010", hex);
@@ -52,10 +52,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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]
public void Test3()


+ 4
- 4
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9205Test.cs Bestand weergeven

@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
JT808_0x9205 jT808_0x9205 = new JT808_0x9205()
{
AlarmFlag=1,
AVResourceType=2,
MediaType=2,
BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"),
EndTime= Convert.ToDateTime("2019-07-16 10:10:11"),
LogicChannelNo=3,
ChannelNo=3,
MemoryType=4,
StreamType =5
};
@@ -56,10 +56,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
var jT808_0x9205 = JT808Serializer.Deserialize<JT808_0x9205>("031907161010101907161010110000000000000001020504".ToHexBytes());
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:11"), jT808_0x9205.EndTime);
Assert.Equal(3, jT808_0x9205.LogicChannelNo);
Assert.Equal(3, jT808_0x9205.ChannelNo);
Assert.Equal(4, jT808_0x9205.MemoryType);
Assert.Equal(5, jT808_0x9205.StreamType);
}


+ 4
- 4
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9206Test.cs Bestand weergeven

@@ -40,10 +40,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
JT808_0x9206 jT808_0x9206 = new JT808_0x9206()
{
AlarmFlag=1,
AVResourceType=2,
MediaType=2,
BeginTime= Convert.ToDateTime("2019-07-16 10:10:10"),
EndTime= Convert.ToDateTime("2019-07-16 10:10:11"),
LogicChannelNo=3,
ChannelNo=3,
StreamType =5,
FileUploadPath ="D://1112",
FileUploadPathLength=8,
@@ -66,10 +66,10 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
var jT808_0x9206 = JT808Serializer.Deserialize<JT808_0x9206>("093132372E302E302E31032802746B0631323334353608443A2F2F31313132031907161010101907161010110000000102050407".ToHexBytes());
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:11"), jT808_0x9206.EndTime);
Assert.Equal(3, jT808_0x9206.LogicChannelNo);
Assert.Equal(3, jT808_0x9206.ChannelNo);
Assert.Equal(5, jT808_0x9206.StreamType);
Assert.Equal("D://1112", jT808_0x9206.FileUploadPath);
Assert.Equal(8, jT808_0x9206.FileUploadPathLength);


+ 2
- 2
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9301Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9301 jT808_0x9301 = new JT808_0x9301()
{
LogicChannelNo=1,
ChannelNo=1,
Speed=2,
Direction=3
};
@@ -51,7 +51,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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(3, jT808_0x9301.Direction);
}


+ 2
- 2
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9303Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9303 jT808_0x9303 = new JT808_0x9303()
{
LogicChannelNo=1,
ChannelNo=1,
IrisAdjustment=2
};
var hex = JT808Serializer.Serialize(jT808_0x9303).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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);
}
[Fact]


+ 2
- 2
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9304Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9304 jT808_0x9304 = new JT808_0x9304()
{
LogicChannelNo=1,
ChannelNo=1,
StartOrStop=2
};
var hex = JT808Serializer.Serialize(jT808_0x9304).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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);
}
[Fact]


+ 1
- 1
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9305Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9305 jT808_0x9305 = new JT808_0x9305()
{
LogicChannelNo=1,
ChannelNo=1,
StartOrStop=2
};
var hex = JT808Serializer.Serialize(jT808_0x9305).ToHexString();


+ 2
- 2
src/JT808.Protocol.Extensions.JT1078.Test/JT808_0x9306Test.cs Bestand weergeven

@@ -39,7 +39,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
{
JT808_0x9306 jT808_0x9306 = new JT808_0x9306()
{
LogicChannelNo=1,
ChannelNo=1,
ChangeMultipleControl=2
};
var hex = JT808Serializer.Serialize(jT808_0x9306).ToHexString();
@@ -50,7 +50,7 @@ namespace JT808.Protocol.Extensions.JT1078.Test
public void Test2()
{
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);
}
[Fact]


+ 4
- 5
src/JT808.Protocol.Extensions.JT1078/Enums/JT808_JT1078_MsgId.cs Bestand weergeven

@@ -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

{
终端上传音视频属性 = 0x1003,
终端上传乘客流量 = 0x1005,
@@ -26,4 +24,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums
红外补光控制 = 0x9305,
云台变倍控制 = 0x9306
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}

+ 2
- 2
src/JT808.Protocol.Extensions.JT1078/Enums/VideoRelateAlarmType.cs Bestand weergeven

@@ -1,10 +1,9 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT808.Protocol.Extensions.JT1078.Enums
{
[Flags]
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public enum VideoRelateAlarmType:uint
{
视频信号丢失报警=0,
@@ -15,4 +14,5 @@ namespace JT808.Protocol.Extensions.JT1078.Enums
异常驾驶行为报警=32,
特殊报警录像达到存储阈值报警=64,
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}

+ 3
- 0
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9003.cs Bestand weergeven

@@ -9,8 +9,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9003:JT808Bodies
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "查询终端音视频属性";

public override ushort MsgId => 0x9003;
public override bool SkipSerialization { get; set; } = true;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 83
- 87
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9101.cs Bestand weergeven

@@ -9,32 +9,35 @@ using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
/// <summary>
/// 实时音视频传输请求
/// 实时音视频传输请求(live、talk、listen、fanout、passThrough直播、对讲、监听、广播、透传请求)
/// </summary>
public class JT808_0x9101: JT808Bodies, IJT808MessagePackFormatter<JT808_0x9101>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "实时音视频传输请求";
public override ushort MsgId => 0x9101;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释

/// <summary>
/// 服务器IP地址长度
/// 视频服务器IP地址长度
/// </summary>
public byte ServerIPAddressLength { get; set; }
public byte ServerIpLength { get;internal set; }
/// <summary>
/// 服务器IP地址
/// 视频服务器IP地址
/// </summary>
public string ServerIPAddress { get; set; }
public string ServerIp { get; set; }
/// <summary>
/// 服务器视频通道监听端口号(TCP)
/// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
/// </summary>
public ushort ServerVideoChannelTcpPort { get; set; }
public ushort TcpPort { get; set; }
/// <summary>
/// 服务器视频通道监听端口号(UDP
/// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准
/// </summary>
public ushort ServerVideoChannelUdpPort { get; set; }
public ushort UdpPort { get; set; }
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicalChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 数据类型
/// 0:音视频
@@ -52,105 +55,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
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)
{
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();
writer.WriteString($"[{value.DataType.ReadNumber()}]数据类型", DataTypeDisplay(value.DataType));
value.StreamType = reader.ReadByte();
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", value.StreamType==0?"主码流":"子码流");
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) {
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)
{
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)
{
writer.Skip(1, out int position);
writer.WriteString(value.ServerIPAddress);
writer.WriteString(value.ServerIp);
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.StreamType);
}


+ 69
- 75
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9102.cs Bestand weergeven

@@ -9,16 +9,18 @@ using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
/// <summary>
/// 音视频实时传输控制
/// 音视频实时传输控制(LiveControl直播控制)
/// </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 ushort MsgId => 0x9102;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicalChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 控制指令
/// 平台可以通过该指令对设备的实时音视频进行控制:
@@ -43,106 +45,98 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 0:主码流
/// 1:子码流
/// </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)
{
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();
writer.WriteString($"[{value.ControlCmd.ReadNumber()}]控制指令", ControlCmdDisplay(value.ControlCmd));
value.CloseAVData = reader.ReadByte();
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)
{
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)
{
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.CloseAVData = reader.ReadByte();
jT808_0X9102.SwitchStreamType = reader.ReadByte();
jT808_0X9102.StreamType = reader.ReadByte();
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)
{
writer.WriteByte(value.LogicalChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.ControlCmd);
writer.WriteByte(value.CloseAVData);
writer.WriteByte(value.SwitchStreamType);
writer.WriteByte(value.StreamType);
}
}
}

+ 46
- 42
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9105.cs Bestand weergeven

@@ -13,75 +13,79 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9105 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9105>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "实时音视频传输状态通知";
public override ushort MsgId => 0x9105;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 丢包率
/// 丢包率
/// 当前传输通道的丢包率,数值乘以100之后取整部分
/// </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)
{
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();
writer.WriteNumber($"[{value.DropRate.ReadNumber()}]丢包率", value.DropRate);
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)
{
JT808_0x9105 jT808_0x9105 = new JT808_0x9105();
jT808_0x9105.LogicChannelNo = reader.ReadByte();
jT808_0x9105.ChannelNo = reader.ReadByte();
jT808_0x9105.DropRate = reader.ReadByte();
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)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.DropRate);
}
}


+ 137
- 138
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9201.cs Bestand weergeven

@@ -9,12 +9,14 @@ using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
/// <summary>
/// 平台下发远程录像回放请求
/// 平台下发远程录像回放请求(vod点播请求)
/// </summary>
public class JT808_0x9201 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9201>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "平台下发远程录像回放请求";
public override ushort MsgId => 0x9201;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 服务器IP地址长度
/// </summary>
@@ -24,49 +26,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public string ServerIp { get; set; }
/// <summary>
/// 服务器音视频通道监听端口号TCP
/// 视频服务器TCP端口号,不使用TCP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
/// </summary>
public ushort TcpPort { get; set; }
/// <summary>
/// 服务器音视频通道监听端口号UDP
/// 视频服务器UDP端口号,不使用UDP协议传输时保持默认值0即可(TCP和UDP二选一,当TCP和UDP均非默认值时一般以TCP为准)
/// </summary>
public ushort UdpPort { get; set; }
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 音视频类型
/// 音视频类型(媒体类型)
/// 0:audio and video
/// 1:audio
/// 2:video
/// 3:audio or video
/// </summary>
public byte AVItemType { get; set; }
public byte MediaType { get; set; }
/// <summary>
/// 码流类型
/// 0:主或子码流
/// 1:主
/// 2:子
/// 如果此通道只传输音频,置为0
/// </summary>
public byte StreamType { get; set; }
/// <summary>
/// 存储器类型
/// 0:主或灾备存储器
/// 1:主存储器
/// 2:灾备存储器
/// </summary>
public byte MemType { get; set; }
public byte MemoryType { get; set; }
/// <summary>
/// 回放方式
/// 0:正常
/// 1:快进
/// 2:关键帧快退回放
/// 3:关键帧播放
/// 4:单帧上传
/// </summary>
public byte PlayBackWay { get; set; }
public byte PlaybackWay { get; set; }
/// <summary>
/// 快进或快退倍数
/// 快进或快退倍数,当<see cref="PlaybackWay"/>为1和2时,此字段有效,否则置0
/// 0:无效
/// 1:1倍
/// 2:2倍
/// 3:4倍
/// 4:8倍
/// 5:16倍
/// </summary>
public byte FastForwardOrFastRewindMultiples { get; set; }
public byte PlaySpeed { get; set; }
/// <summary>
/// 起始时间
/// 开始时间,当<see cref="PlaybackWay"/>为4时,该字段表示单帧上传时间
/// </summary>
public DateTime BeginTime { get; set; }
/// <summary>
/// 结束时间
/// 结束时间,当<see cref="PlaybackWay"/>为4时,该字段无效
/// </summary>
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)
{
JT808_0x9201 value = new JT808_0x9201();
var value = new JT808_0x9201();
value.ServerIpLength = reader.ReadByte();
writer.WriteNumber($"[{value.ServerIpLength.ReadNumber()}]服务器IP地址长度", value.ServerIpLength);
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);
value.UdpPort = reader.ReadUInt16();
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();
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();
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();
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)
{
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.TcpPort = 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.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.EndTime = reader.ReadDateTime6();
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)
{
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.WriteUInt16(value.TcpPort);
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.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.EndTime);
}


+ 97
- 98
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9202.cs Bestand weergeven

@@ -9,137 +9,136 @@ using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
/// <summary>
/// 平台下发远程录像回放控制
/// 平台下发远程录像回放控制(VodControl点播控制)
/// </summary>
public class JT808_0x9202 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9202>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "平台下发远程录像回放控制";
public override ushort MsgId => 0x9202;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 音视频通道号
/// </summary>
public byte AVChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 回放控制
/// 0:开始
/// 1:暂停
/// 2:结束
/// 3:快进
/// 4:关键帧快退播放
/// 5:拖动(到指定位置)
/// 6:关键帧播放
/// </summary>
public byte PlayBackControl { get; set; }
public byte PlayControl { get; set; }
/// <summary>
/// 快进或快退倍数
/// 快进或快退倍数,当<see cref="PlayControl"/>为3和4时,此字段有效,否则置0
/// 0:无效
/// 1:1倍
/// 2:2倍
/// 3:4倍
/// 4:8倍
/// 5:16倍
/// </summary>
public byte FastForwardOrFastRewindMultiples { get; set; }
public byte PlaySpeed { get; set; }
/// <summary>
/// 拖动回放位置
/// 拖动回放位置,当<see cref="PlayControl"/>为5时有效(必须)
/// </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)
{
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)
{
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;
}

/// <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)
{
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);
}
}
}

+ 66
- 82
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9205.cs Bestand weergeven

@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9205 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9205>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "查询资源列表";
public override ushort MsgId => 0x9205;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 开始时间
/// </summary>
@@ -33,127 +35,108 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
public ulong AlarmFlag { get; set; }
/// <summary>
/// 音视频资源类型
/// 0:audio and video
/// 1:audio
/// 2:video
/// 3:audio or video
/// </summary>
public byte AVResourceType { get; set; }
public byte MediaType { get; set; }
/// <summary>
/// 码流类型
/// 0:主或子码流
/// 1:主
/// 2:子
/// </summary>
public byte StreamType { get; set; }
/// <summary>
/// 存储器类型
/// 0:主或灾备存储器
/// 1:主存储器
/// 2:灾备存储器
/// </summary>
public byte MemoryType { get; set; }

#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
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();
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.AlarmFlag = reader.ReadUInt64();
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();
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
value.MemoryType = reader.ReadByte();
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)
{
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.EndTime = reader.ReadDateTime6();
jT808_0x9205.AlarmFlag = reader.ReadUInt64();
jT808_0x9205.AVResourceType = reader.ReadByte();
jT808_0x9205.MediaType = reader.ReadByte();
jT808_0x9205.StreamType = reader.ReadByte();
jT808_0x9205.MemoryType = reader.ReadByte();
return jT808_0x9205;
@@ -161,13 +144,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody

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.EndTime);
writer.WriteUInt64(value.AlarmFlag);
writer.WriteByte(value.AVResourceType);
writer.WriteByte(value.MediaType);
writer.WriteByte(value.StreamType);
writer.WriteByte(value.MemoryType);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 62
- 87
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9206.cs Bestand weergeven

@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9206 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9206>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "文件上传指令";
public override ushort MsgId => 0x9206;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 服务器IP地址服务
/// </summary>
public byte ServerIpLength { get; set; }
public byte ServerIpLength { get;internal set; }
/// <summary>
/// 服务器IP地址
/// </summary>
@@ -30,7 +32,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// <summary>
/// 用户名长度
/// </summary>
public byte UserNameLength { get; set; }
public byte UserNameLength { get; internal set; }
/// <summary>
/// 用户名
/// </summary>
@@ -38,7 +40,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// <summary>
/// 密码长度
/// </summary>
public byte PasswordLength { get; set; }
public byte PasswordLength { get; internal set; }
/// <summary>
/// 密码
/// </summary>
@@ -46,7 +48,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// <summary>
/// 文件上传路径长度
/// </summary>
public byte FileUploadPathLength { get; set; }
public byte FileUploadPathLength { get; internal set; }
/// <summary>
/// 文件上传路径
/// </summary>
@@ -54,7 +56,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 起始时间
/// </summary>
@@ -70,7 +72,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// <summary>
/// 音视频资源类型
/// </summary>
public byte AVResourceType { get; set; }
public byte MediaType { get; set; }
/// <summary>
/// 码流类型
/// </summary>
@@ -84,6 +86,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public byte TaskExcuteCondition { get; set; }

#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x9206 value = new JT808_0x9206();
@@ -110,16 +113,16 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
value.FileUploadPath = reader.ReadString(value.FileUploadPathLength);
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();
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]起始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.EndTime = reader.ReadDateTime6();
writer.WriteString($"[{value.EndTime.ToString("yyMMddHHmmss")}]起始时间", value.EndTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.AlarmFlag = reader.ReadUInt32();
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();
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
value.MemoryPositon = reader.ReadByte();
@@ -127,90 +130,61 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
value.TaskExcuteCondition = reader.ReadByte();
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 ? ",LAN" : "";
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)
{
JT808_0x9206 jT808_0x9206 = new JT808_0x9206();
var jT808_0x9206 = new JT808_0x9206();
jT808_0x9206.ServerIpLength = reader.ReadByte();
jT808_0x9206.ServerIp = reader.ReadString(jT808_0x9206.ServerIpLength);
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.FileUploadPathLength = reader.ReadByte();
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.EndTime = reader.ReadDateTime6();
jT808_0x9206.AlarmFlag = reader.ReadUInt32();
jT808_0x9206.AVResourceType = reader.ReadByte();
jT808_0x9206.MediaType = reader.ReadByte();
jT808_0x9206.StreamType = reader.ReadByte();
jT808_0x9206.MemoryPositon = reader.ReadByte();
jT808_0x9206.TaskExcuteCondition = reader.ReadByte();
@@ -256,14 +230,15 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
writer.Skip(1, out int fileUploadPathLengthLengthposition);
writer.WriteString(value.FileUploadPath);
writer.WriteByteReturn((byte)(writer.GetCurrentPosition() - fileUploadPathLengthLengthposition - 1), fileUploadPathLengthLengthposition);
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteDateTime6(value.BeginTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt32(value.AlarmFlag);
writer.WriteByte(value.AVResourceType);
writer.WriteByte(value.MediaType);
writer.WriteByte(value.StreamType);
writer.WriteByte(value.MemoryPositon);
writer.WriteByte(value.TaskExcuteCondition);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 12
- 12
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9207.cs Bestand weergeven

@@ -13,8 +13,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9207 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9207>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "文件上传控制";
public override ushort MsgId => 0x9207;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 流水号
/// </summary>
@@ -24,6 +26,7 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public byte UploadControl { get; set; }

#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x9207 value = new JT808_0x9207();
@@ -31,24 +34,20 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
writer.WriteNumber($"[{value.MgsNum.ReadNumber()}]流水号", value.MgsNum);
value.UploadControl = reader.ReadByte();
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)
{
JT808_0x9207 jT808_0x9207 = new JT808_0x9207();
var jT808_0x9207 = new JT808_0x9207();
jT808_0x9207.MgsNum = reader.ReadUInt16();
jT808_0x9207.UploadControl = reader.ReadByte();
return jT808_0x9207;
@@ -59,5 +58,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
writer.WriteUInt16(value.MgsNum);
writer.WriteByte(value.UploadControl);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 44
- 57
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9301.cs Bestand weergeven

@@ -13,91 +13,77 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9301 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9301>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "云台旋转";
public override ushort MsgId => 0x9301;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 方向
/// 0:停止
/// 1:上
/// 2:下
/// 3:左
/// 4:右
/// </summary>
public byte Direction { get; set; }
/// <summary>
/// 速度
/// 0-255
/// </summary>
public byte Speed { get; set; }
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
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();
writer.WriteString($"[{value.Direction.ReadNumber()}]方向", DirectionDisplay(value.Direction));
value.Speed = reader.ReadByte();
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)
{
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.Speed = reader.ReadByte();
return jT808_0x9301;
@@ -105,9 +91,10 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody

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.Speed);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 28
- 40
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9302.cs Bestand weergeven

@@ -13,8 +13,11 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9302 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9302>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "云台调整焦距控制";
public override ushort MsgId => 0x9302;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释

/// <summary>
/// 逻辑通道号
/// </summary>
@@ -23,59 +26,43 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// 焦距调整方向
/// </summary>
public byte FocusAdjustmentDirection { get; set; }
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
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();
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
value.FocusAdjustmentDirection = reader.ReadByte();
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)
{
JT808_0x9302 jT808_0x9302 = new JT808_0x9302();
var jT808_0x9302 = new JT808_0x9302();
jT808_0x9302.LogicChannelNo = reader.ReadByte();
jT808_0x9302.FocusAdjustmentDirection = reader.ReadByte();
return jT808_0x9302;
@@ -86,5 +73,6 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.FocusAdjustmentDirection);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 30
- 42
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9303.cs Bestand weergeven

@@ -13,76 +13,64 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9303 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9303>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "云台调整光圈控制";
public override ushort MsgId => 0x9303;
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 光圈调整方式
/// </summary>
public byte IrisAdjustment { get; set; }
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
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();
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)
{
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();
return jT808_0x9303;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9303 value, IJT808Config config)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.IrisAdjustment);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 28
- 41
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9304.cs Bestand weergeven

@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9304 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9304>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "云台雨刷控制";
public override ushort MsgId => 0x9304;
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 启停标识
/// </summary>
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
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();
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)
{
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();
return jT808_0x9304;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9304 value, IJT808Config config)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.StartOrStop);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 28
- 41
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9305.cs Bestand weergeven

@@ -13,12 +13,13 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9305 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9305>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "红外补光控制";
public override ushort MsgId => 0x9305;
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 启停标识
/// </summary>
@@ -27,62 +28,48 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
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();
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)
{
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();
return jT808_0x9305;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9305 value, IJT808Config config)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.StartOrStop);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

+ 30
- 42
src/JT808.Protocol.Extensions.JT1078/MessageBody/JT808_0x9306.cs Bestand weergeven

@@ -13,12 +13,14 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody
/// </summary>
public class JT808_0x9306 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x9306>, IJT808Analyze
{
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
public override string Description => "云台变倍控制";

public override ushort MsgId => 0x9306;
/// <summary>
/// 逻辑通道号
/// </summary>
public byte LogicChannelNo { get; set; }
public byte ChannelNo { get; set; }
/// <summary>
/// 变倍控制
/// </summary>
@@ -26,63 +28,49 @@ namespace JT808.Protocol.Extensions.JT1078.MessageBody

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();
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)
{
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();
return jT808_0x9306;
}

public void Serialize(ref JT808MessagePackWriter writer, JT808_0x9306 value, IJT808Config config)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteByte(value.ChannelNo);
writer.WriteByte(value.ChangeMultipleControl);
}
#pragma warning restore CS1591 // 缺少对公共可见类型或成员的 XML 注释
}
}

Laden…
Annuleren
Opslaan