Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

74 wiersze
2.9 KiB

  1. using JT808.Protocol.Attributes;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.MessagePack;
  4. namespace JT808.Protocol.MessageBody
  5. {
  6. /// <summary>
  7. /// 多媒体数据上传
  8. /// 0x0801
  9. /// </summary>
  10. public class JT808_0x0801 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0801>
  11. {
  12. public override ushort MsgId { get; } = 0x0801;
  13. /// <summary>
  14. /// 多媒体 ID
  15. /// </summary>
  16. public uint MultimediaId { get; set; }
  17. /// <summary>
  18. /// 多媒体类型
  19. /// <see cref="JT808.Protocol.Enums.JT808MultimediaType"/>
  20. /// </summary>
  21. public byte MultimediaType { get; set; }
  22. /// <summary>
  23. /// 多媒体格式编码
  24. /// 0:JPEG;1:TIF;2:MP3;3:WAV;4:WMV;其他保留
  25. /// <see cref="JT808.Protocol.Enums.JT808MultimediaCodingFormat"/>
  26. /// </summary>
  27. public byte MultimediaCodingFormat { get; set; }
  28. /// <summary>
  29. /// 事件项编码
  30. /// <see cref="JT808.Protocol.Enums.JT808EventItemCoding"/>
  31. /// </summary>
  32. public byte EventItemCoding { get; set; }
  33. /// <summary>
  34. /// 通道 ID
  35. /// </summary>
  36. public byte ChannelId { get; set; }
  37. /// <summary>
  38. /// 位置信息汇报(0x0200)消息体
  39. /// 表示拍摄或录制的起始时刻的位置基本信息数据
  40. /// </summary>
  41. public JT808_0x0200 Position { get; set; }
  42. /// <summary>
  43. /// 多媒体数据包
  44. /// </summary>
  45. public byte[] MultimediaDataPackage { get; set; }
  46. public JT808_0x0801 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  47. {
  48. JT808_0x0801 jT808_0X0801 = new JT808_0x0801();
  49. jT808_0X0801.MultimediaId = reader.ReadUInt32();
  50. jT808_0X0801.MultimediaType = reader.ReadByte();
  51. jT808_0X0801.MultimediaCodingFormat = reader.ReadByte();
  52. jT808_0X0801.EventItemCoding = reader.ReadByte();
  53. jT808_0X0801.ChannelId = reader.ReadByte();
  54. JT808MessagePackReader positionReader = new JT808MessagePackReader(reader.ReadArray(28));
  55. jT808_0X0801.Position = config.GetMessagePackFormatter<JT808_0x0200>().Deserialize(ref positionReader, config);
  56. jT808_0X0801.MultimediaDataPackage = reader.ReadContent().ToArray();
  57. return jT808_0X0801;
  58. }
  59. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0801 value, IJT808Config config)
  60. {
  61. writer.WriteUInt32(value.MultimediaId);
  62. writer.WriteByte(value.MultimediaType);
  63. writer.WriteByte(value.MultimediaCodingFormat);
  64. writer.WriteByte(value.EventItemCoding);
  65. writer.WriteByte(value.ChannelId);
  66. config.GetMessagePackFormatter<JT808_0x0200>().Serialize(ref writer, value.Position, config);
  67. writer.WriteArray(value.MultimediaDataPackage);
  68. }
  69. }
  70. }