25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.6 KiB

  1. using JT809.Protocol.Enums;
  2. using JT809.Protocol.Extensions;
  3. using JT809.Protocol.Interfaces;
  4. using JT809.Protocol.MessagePack;
  5. using System;
  6. using System.Buffers;
  7. using System.Collections.Generic;
  8. using System.Text;
  9. namespace JT809.Protocol.Formatters
  10. {
  11. public class JT809HeaderFormatter : IJT809MessagePackFormatter<JT809Header>
  12. {
  13. public readonly static JT809HeaderFormatter Instance = new JT809HeaderFormatter();
  14. public JT809Header Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
  15. {
  16. JT809Header jT809Header = new JT809Header();
  17. jT809Header.MsgLength = reader.ReadUInt32();
  18. jT809Header.MsgSN = reader.ReadUInt32();
  19. jT809Header.BusinessType = reader.ReadUInt16();
  20. jT809Header.MsgGNSSCENTERID = reader.ReadUInt32();
  21. jT809Header.Version = new JT809Header_Version(reader.ReadArray(JT809Header_Version.FixedByteLength));
  22. jT809Header.EncryptFlag = (JT809Header_Encrypt)reader.ReadByte();
  23. jT809Header.EncryptKey = reader.ReadUInt32();
  24. return jT809Header;
  25. }
  26. public void Serialize(ref JT809MessagePackWriter writer, JT809Header value, IJT809Config config)
  27. {
  28. writer.WriteUInt32(value.MsgLength);
  29. writer.WriteUInt32( value.MsgSN);
  30. writer.WriteUInt16(value.BusinessType);
  31. writer.WriteUInt32(value.MsgGNSSCENTERID);
  32. writer.WriteArray(value.Version.Buffer);
  33. writer.WriteByte((byte)value.EncryptFlag);
  34. writer.WriteUInt32(value.EncryptKey);
  35. }
  36. }
  37. }