Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

85 linhas
3.2 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. public class JT808_0x0200_0x11 : JT808_0x0200_BodyBase, IJT808MessagePackFormatter<JT808_0x0200_0x11>, IJT808Analyze
  10. {
  11. /// <summary>
  12. /// 超速报警附加信息
  13. /// 0:无特定位置;
  14. /// 1:圆形区域;
  15. /// 2:矩形区域;
  16. /// 3:多边形区域;
  17. /// 4:路段
  18. /// </summary>
  19. public JT808PositionType JT808PositionType { get; set; }
  20. /// <summary>
  21. /// 区域或路段 ID
  22. /// 若位置类型为 0,无该字段
  23. /// </summary>
  24. public uint AreaId { get; set; }
  25. public override byte AttachInfoId { get; set; } = JT808Constants.JT808_0x0200_0x11;
  26. public override byte AttachInfoLength
  27. {
  28. get
  29. {
  30. if (JT808PositionType != JT808PositionType.无特定位置)
  31. {
  32. return 5;
  33. }
  34. else
  35. {
  36. return 1;
  37. }
  38. }
  39. set { }
  40. }
  41. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  42. {
  43. JT808_0x0200_0x11 value = new JT808_0x0200_0x11();
  44. value.AttachInfoId = reader.ReadByte();
  45. writer.WriteNumber($"[{value.AttachInfoId.ReadNumber()}]附加信息Id", value.AttachInfoId);
  46. value.AttachInfoLength = reader.ReadByte();
  47. writer.WriteNumber($"[{value.AttachInfoLength.ReadNumber()}]附加信息长度", value.AttachInfoLength);
  48. value.JT808PositionType = (JT808PositionType)reader.ReadByte();
  49. writer.WriteNumber($"[{((byte)value.JT808PositionType).ReadNumber()}]超速报警附加信息-{value.JT808PositionType.ToString()}", (byte)value.JT808PositionType);
  50. if (value.JT808PositionType != JT808PositionType.无特定位置)
  51. {
  52. value.AreaId = reader.ReadUInt32();
  53. writer.WriteNumber($"[{value.AreaId.ReadNumber()}]区域或路段ID", value.AreaId);
  54. }
  55. }
  56. public JT808_0x0200_0x11 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  57. {
  58. JT808_0x0200_0x11 value = new JT808_0x0200_0x11();
  59. value.AttachInfoId = reader.ReadByte();
  60. value.AttachInfoLength = reader.ReadByte();
  61. value.JT808PositionType = (JT808PositionType)reader.ReadByte();
  62. if (value.JT808PositionType != JT808PositionType.无特定位置)
  63. {
  64. value.AreaId = reader.ReadUInt32();
  65. }
  66. return value;
  67. }
  68. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0200_0x11 value, IJT808Config config)
  69. {
  70. writer.WriteByte(value.AttachInfoId);
  71. writer.WriteByte(value.AttachInfoLength);
  72. writer.WriteByte((byte)value.JT808PositionType);
  73. if (value.JT808PositionType != JT808PositionType.无特定位置)
  74. {
  75. writer.WriteUInt32(value.AreaId);
  76. }
  77. }
  78. }
  79. }