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.

167 line
8.1 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Formatters;
  3. using JT809.Protocol.MessagePack;
  4. using JT809.Protocol.Extensions;
  5. using System;
  6. using JT809.Protocol.Interfaces;
  7. using System.Text.Json;
  8. namespace JT809.Protocol.SubMessageBody
  9. {
  10. /// <summary>
  11. /// 上报车辆行驶记录请求消息
  12. /// <para>子业务类型标识:DOVJN_CTRL_MSG_TAKE_TRAVEL_REQ</para>
  13. /// <para>描述:上级平台向下级平台下发上报车辆行驶记录请求消息</para>
  14. /// </summary>
  15. public class JT809_0x9500_0x9504:JT809SubBodies, IJT809MessagePackFormatter<JT809_0x9500_0x9504>, IJT809Analyze, IJT809_2019_Version
  16. {
  17. public override ushort SubMsgId => JT809SubBusinessType.上报车辆行驶记录请求消息.ToUInt16Value();
  18. public override string Description => "上报车辆行驶记录请求消息";
  19. /// <summary>
  20. /// 开始时间
  21. /// </summary>
  22. public DateTime StartTime { get; set; }
  23. /// <summary>
  24. /// 开始时间
  25. /// </summary>
  26. public DateTime EndTime { get; set; }
  27. /// <summary>
  28. /// 命令字ID
  29. /// </summary>
  30. public JT809CommandType Command { get; set; }
  31. /// <summary>
  32. /// 最大数据数
  33. /// </summary>
  34. public ushort Max { get; set; }
  35. public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
  36. {
  37. var value = new JT809_0x9500_0x9504();
  38. if (config.Version == JT809Version.JTT2019)
  39. {
  40. var hex = reader.ReadVirtualArray(8);
  41. value.StartTime = reader.ReadUTCDateTime();
  42. writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", value.StartTime);
  43. hex = reader.ReadVirtualArray(8);
  44. value.EndTime = reader.ReadUTCDateTime();
  45. writer.WriteString($"[{hex.ToArray().ToHexString()}]结束时间", value.EndTime);
  46. value.Command = (JT809CommandType)reader.ReadByte();
  47. writer.WriteString($"[{value.Command.ToByteValue()}]命令字ID", value.Command.ToString());
  48. }
  49. else
  50. {
  51. value.Command = (JT809CommandType)reader.ReadByte();
  52. writer.WriteString($"[{value.Command.ToByteValue()}]命令字ID", value.Command.ToString());
  53. switch (value.Command)
  54. {
  55. case JT809CommandType.记录仪标准版本:
  56. case JT809CommandType.当前驾驶人信息:
  57. case JT809CommandType.记录仪时间:
  58. case JT809CommandType.记录仪累计行驶里程:
  59. case JT809CommandType.记录仪脉冲系数:
  60. case JT809CommandType.车辆信息:
  61. case JT809CommandType.记录仪状态信号配置信息:
  62. case JT809CommandType.记录仪唯一性编号:
  63. break;
  64. case JT809CommandType.采集记录仪行驶记录:
  65. case JT809CommandType.采集记录仪位置信息记录:
  66. case JT809CommandType.采集记录仪事故疑点记录:
  67. case JT809CommandType.采集记录仪超时驾驶记录:
  68. case JT809CommandType.采集记录仪驾驶人身份记录:
  69. case JT809CommandType.采集记录仪外部供电记录:
  70. case JT809CommandType.采集记录仪参数修改记录:
  71. case JT809CommandType.采集记录仪速度状态日志:
  72. var hex = reader.ReadVirtualArray(6);
  73. value.StartTime = reader.ReadDateTime6();
  74. writer.WriteString($"[{hex.ToArray().ToHexString()}]开始时间", value.StartTime);
  75. hex = reader.ReadVirtualArray(6);
  76. value.EndTime = reader.ReadDateTime6();
  77. writer.WriteString($"[{hex.ToArray().ToHexString()}]结束时间", value.EndTime);
  78. value.Max = reader.ReadUInt16();
  79. writer.WriteNumber($"[{value.Max.ReadNumber()}]最大数据数", value.Max);
  80. break;
  81. }
  82. }
  83. }
  84. public JT809_0x9500_0x9504 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  85. {
  86. var value = new JT809_0x9500_0x9504();
  87. if(config.Version == JT809Version.JTT2019)
  88. {
  89. value.StartTime = reader.ReadUTCDateTime();
  90. value.EndTime = reader.ReadUTCDateTime();
  91. value.Command = (JT809CommandType)reader.ReadByte();
  92. }
  93. else
  94. {
  95. value.Command = (JT809CommandType)reader.ReadByte();
  96. switch (value.Command)
  97. {
  98. case JT809CommandType.记录仪标准版本:
  99. case JT809CommandType.当前驾驶人信息:
  100. case JT809CommandType.记录仪时间:
  101. case JT809CommandType.记录仪累计行驶里程:
  102. case JT809CommandType.记录仪脉冲系数:
  103. case JT809CommandType.车辆信息:
  104. case JT809CommandType.记录仪状态信号配置信息:
  105. case JT809CommandType.记录仪唯一性编号:
  106. break;
  107. case JT809CommandType.采集记录仪行驶记录:
  108. case JT809CommandType.采集记录仪位置信息记录:
  109. case JT809CommandType.采集记录仪事故疑点记录:
  110. case JT809CommandType.采集记录仪超时驾驶记录:
  111. case JT809CommandType.采集记录仪驾驶人身份记录:
  112. case JT809CommandType.采集记录仪外部供电记录:
  113. case JT809CommandType.采集记录仪参数修改记录:
  114. case JT809CommandType.采集记录仪速度状态日志:
  115. value.StartTime = reader.ReadDateTime6();
  116. value.EndTime = reader.ReadDateTime6();
  117. value.Max = reader.ReadUInt16();
  118. break;
  119. }
  120. }
  121. return value;
  122. }
  123. public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9500_0x9504 value, IJT809Config config)
  124. {
  125. if (config.Version == JT809Version.JTT2019)
  126. {
  127. writer.WriteUTCDateTime(value.StartTime);
  128. writer.WriteUTCDateTime(value.EndTime);
  129. writer.WriteByte((byte)value.Command);
  130. }
  131. else
  132. {
  133. writer.WriteByte((byte)value.Command);
  134. switch (value.Command)
  135. {
  136. case JT809CommandType.记录仪标准版本:
  137. case JT809CommandType.当前驾驶人信息:
  138. case JT809CommandType.记录仪时间:
  139. case JT809CommandType.记录仪累计行驶里程:
  140. case JT809CommandType.记录仪脉冲系数:
  141. case JT809CommandType.车辆信息:
  142. case JT809CommandType.记录仪状态信号配置信息:
  143. case JT809CommandType.记录仪唯一性编号:
  144. break;
  145. case JT809CommandType.采集记录仪行驶记录:
  146. case JT809CommandType.采集记录仪位置信息记录:
  147. case JT809CommandType.采集记录仪事故疑点记录:
  148. case JT809CommandType.采集记录仪超时驾驶记录:
  149. case JT809CommandType.采集记录仪驾驶人身份记录:
  150. case JT809CommandType.采集记录仪外部供电记录:
  151. case JT809CommandType.采集记录仪参数修改记录:
  152. case JT809CommandType.采集记录仪速度状态日志:
  153. writer.WriteDateTime6(value.StartTime);
  154. writer.WriteDateTime6(value.EndTime);
  155. writer.WriteUInt16(value.Max);
  156. break;
  157. }
  158. }
  159. }
  160. }
  161. }