Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

75 řádky
3.0 KiB

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