Não pode escolher mais do que 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.

104 linhas
5.1 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Formatters;
  3. using JT809.Protocol.MessagePack;
  4. using JT809.Protocol.Metadata;
  5. using JT809.Protocol.Extensions;
  6. using JT809.Protocol.Interfaces;
  7. namespace JT809.Protocol.SubMessageBody
  8. {
  9. /// <summary>
  10. /// 实时上传车辆定位信息消息
  11. /// <para>子业务类型标识:UP_EXG_MSG_REAL_LOCATION</para>
  12. /// <para>车辆的实时定位信息</para>
  13. /// <para>无需应答</para>
  14. /// </summary>
  15. public class JT809_0x1200_0x1202:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x1200_0x1202>,IJT809_2019_Version
  16. {
  17. public override ushort SubMsgId => JT809SubBusinessType.实时上传车辆定位信息.ToUInt16Value();
  18. public override string Description => "实时上传车辆定位信息";
  19. /// <summary>
  20. /// 车辆定位信息
  21. /// </summary>
  22. public JT809VehiclePositionProperties VehiclePosition { get; set; }
  23. public JT809VehiclePositionProperties_2019 GNSSData { get; set; }
  24. public JT809_0x1200_0x1202 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  25. {
  26. JT809_0x1200_0x1202 value = new JT809_0x1200_0x1202();
  27. if (config.Version == JT809Version.JTT2011)
  28. {
  29. value.VehiclePosition = new JT809VehiclePositionProperties();
  30. value.VehiclePosition.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
  31. value.VehiclePosition.Day = reader.ReadByte();
  32. value.VehiclePosition.Month = reader.ReadByte();
  33. value.VehiclePosition.Year = reader.ReadUInt16();
  34. value.VehiclePosition.Hour = reader.ReadByte();
  35. value.VehiclePosition.Minute = reader.ReadByte();
  36. value.VehiclePosition.Second = reader.ReadByte();
  37. value.VehiclePosition.Lon = reader.ReadUInt32();
  38. value.VehiclePosition.Lat = reader.ReadUInt32();
  39. value.VehiclePosition.Vec1 = reader.ReadUInt16();
  40. value.VehiclePosition.Vec2 = reader.ReadUInt16();
  41. value.VehiclePosition.Vec3 = reader.ReadUInt32();
  42. value.VehiclePosition.Direction = reader.ReadUInt16();
  43. value.VehiclePosition.Altitude = reader.ReadUInt16();
  44. value.VehiclePosition.State = reader.ReadUInt32();
  45. value.VehiclePosition.Alarm = reader.ReadUInt32();
  46. }
  47. else
  48. {
  49. value.GNSSData = new JT809VehiclePositionProperties_2019();
  50. value.GNSSData.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
  51. value.GNSSData.DataLength = reader.ReadUInt32();
  52. value.GNSSData.GnssData = reader.ReadArray((int)value.GNSSData.DataLength).ToArray();
  53. value.GNSSData.PlatformId1 = reader.ReadString(11);
  54. value.GNSSData.Alarm1 = reader.ReadUInt32();
  55. value.GNSSData.PlatformId2 = reader.ReadString(11);
  56. value.GNSSData.Alarm2 = reader.ReadUInt32();
  57. value.GNSSData.PlatformId3 = reader.ReadString(11);
  58. value.GNSSData.Alarm3 = reader.ReadUInt32();
  59. }
  60. return value;
  61. }
  62. public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1202 value, IJT809Config config)
  63. {
  64. if (config.Version == JT809Version.JTT2011)
  65. {
  66. writer.WriteByte((byte)value.VehiclePosition.Encrypt);
  67. writer.WriteByte(value.VehiclePosition.Day);
  68. writer.WriteByte(value.VehiclePosition.Month);
  69. writer.WriteUInt16(value.VehiclePosition.Year);
  70. writer.WriteByte(value.VehiclePosition.Hour);
  71. writer.WriteByte(value.VehiclePosition.Minute);
  72. writer.WriteByte(value.VehiclePosition.Second);
  73. writer.WriteUInt32(value.VehiclePosition.Lon);
  74. writer.WriteUInt32(value.VehiclePosition.Lat);
  75. writer.WriteUInt16(value.VehiclePosition.Vec1);
  76. writer.WriteUInt16(value.VehiclePosition.Vec2);
  77. writer.WriteUInt32(value.VehiclePosition.Vec3);
  78. writer.WriteUInt16(value.VehiclePosition.Direction);
  79. writer.WriteUInt16(value.VehiclePosition.Altitude);
  80. writer.WriteUInt32(value.VehiclePosition.State);
  81. writer.WriteUInt32(value.VehiclePosition.Alarm);
  82. }
  83. else
  84. {
  85. writer.WriteByte((byte)value.GNSSData.Encrypt);
  86. writer.Skip(4, out int position);
  87. writer.WriteArray(value.GNSSData.GnssData);
  88. writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position);
  89. writer.WriteStringPadRight(value.GNSSData.PlatformId1,11);
  90. writer.WriteUInt32(value.GNSSData.Alarm1);
  91. writer.WriteStringPadRight(value.GNSSData.PlatformId2,11);
  92. writer.WriteUInt32(value.GNSSData.Alarm2);
  93. writer.WriteStringPadRight(value.GNSSData.PlatformId3,11);
  94. writer.WriteUInt32(value.GNSSData.Alarm3);
  95. }
  96. }
  97. }
  98. }