You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
3.8 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Extensions;
  3. using JT809.Protocol.Formatters;
  4. using JT809.Protocol.MessagePack;
  5. using JT809.Protocol.Interfaces;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Text;
  9. using System.Text.Json;
  10. namespace JT809.Protocol.MessageBody
  11. {
  12. /// <summary>
  13. /// 平台链路连接情况与车辆定位消息传输情况上报请求消息
  14. /// <para>链路类型:从链路</para>
  15. /// <para>消息方向:上级平台往下级平台</para>
  16. /// <para>业务类型标识:DOWN_MANAGE_MSG_REQ</para>
  17. /// <para>描述:上级平台向下级平台发送上报指定下级监控平台一段时间内链路连接情况与车辆定位消息传输情况请求</para>
  18. /// </summary>
  19. public class JT809_0x9102 : JT809ExchangeMessageBodies, IJT809MessagePackFormatter<JT809_0x9102>, IJT809Analyze, IJT809_2019_Version
  20. {
  21. public override ushort MsgId => JT809BusinessType.平台链路连接情况与车辆定位消息传输情况上报请求消息_2019.ToUInt16Value();
  22. public override string Description => "平台链路连接情况与车辆定位消息传输情况上报请求消息";
  23. public override JT809_LinkType LinkType => JT809_LinkType.subordinate;
  24. public override JT809Version Version => JT809Version.JTT2019;
  25. /// <summary>
  26. /// 平台唯一编码
  27. /// </summary>
  28. public string PlateformId { get; set; }
  29. /// <summary>
  30. /// 开始时间,用 UTC 时间表示
  31. /// 注:采用 UTC 时间表示,如 2010-1-10 9:7:54 的 UTC 值为 1263085674,其在协议中表示为0x000000004B49286A.
  32. /// </summary>
  33. public DateTime StartTime { get; set; }
  34. /// <summary>
  35. /// 结束时间,用 UTC 时间表示
  36. /// 注:采用 UTC 时间表示,如 2010-1-10 9:7:54 的 UTC 值为 1263085674,其在协议中表示为0x000000004B49286A.
  37. /// </summary>
  38. public DateTime EndTime { get; set; }
  39. public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
  40. {
  41. JT809_0x9102 value = new JT809_0x9102();
  42. var virtualHex = reader.ReadVirtualArray(11);
  43. value.PlateformId = reader.ReadString(11);
  44. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]平台唯一编码", value.PlateformId);
  45. virtualHex = reader.ReadVirtualArray(8);
  46. value.StartTime = reader.ReadUTCDateTime();
  47. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]开始时间", value.StartTime);
  48. virtualHex = reader.ReadVirtualArray(8);
  49. value.EndTime = reader.ReadUTCDateTime();
  50. writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]结束时间", value.EndTime);
  51. }
  52. public JT809_0x9102 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  53. {
  54. JT809_0x9102 value = new JT809_0x9102();
  55. value.SubBusinessType = reader.ReadUInt16();
  56. value.DataLength = reader.ReadUInt32();
  57. value.PlateformId = reader.ReadString(11);
  58. value.StartTime = reader.ReadUTCDateTime();
  59. value.EndTime = reader.ReadUTCDateTime();
  60. return value;
  61. }
  62. public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9102 value, IJT809Config config)
  63. {
  64. writer.WriteUInt16(value.SubBusinessType);
  65. writer.Skip(4, out int subContentLengthPosition);
  66. writer.WriteStringPadRight(value.PlateformId, 11);
  67. writer.WriteUTCDateTime(value.StartTime);
  68. writer.WriteUTCDateTime(value.EndTime);
  69. writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
  70. }
  71. }
  72. }