Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

109 rader
4.4 KiB

  1. using JT808.Protocol.Enums;
  2. using JT808.Protocol.Extensions;
  3. using JT808.Protocol.Formatters;
  4. using JT808.Protocol.Interfaces;
  5. using JT808.Protocol.MessagePack;
  6. using System.Text.Json;
  7. namespace JT808.Protocol.MessageBody
  8. {
  9. /// <summary>
  10. /// 录音开始命令
  11. /// </summary>
  12. public class JT808_0x8804 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x8804>, IJT808Analyze
  13. {
  14. /// <summary>
  15. /// 0x8804
  16. /// </summary>
  17. public override ushort MsgId { get; } = 0x8804;
  18. /// <summary>
  19. /// 录音开始命令
  20. /// </summary>
  21. public override string Description => "录音开始命令";
  22. /// <summary>
  23. /// 录音命令
  24. /// 0:停止录音;0x01:开始录音;
  25. /// </summary>
  26. public JT808RecordCmd RecordCmd { get; set; }
  27. /// <summary>
  28. /// 单位为秒(s),0 表示一直录音
  29. /// </summary>
  30. public ushort RecordTime { get; set; }
  31. /// <summary>
  32. /// 保存标志
  33. /// 0:实时上传;1:保存
  34. /// </summary>
  35. public JT808RecordSave RecordSave { get; set; }
  36. /// <summary>
  37. /// 音频采样率
  38. /// 0:8K;1:11K;2:23K;3:32K;其他保留
  39. /// </summary>
  40. public byte AudioSampleRate { get; set; }
  41. /// <summary>
  42. ///
  43. /// </summary>
  44. /// <param name="reader"></param>
  45. /// <param name="config"></param>
  46. /// <returns></returns>
  47. public JT808_0x8804 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  48. {
  49. JT808_0x8804 jT808_0X8804 = new JT808_0x8804();
  50. jT808_0X8804.RecordCmd = (JT808RecordCmd)reader.ReadByte();
  51. jT808_0X8804.RecordTime = reader.ReadUInt16();
  52. jT808_0X8804.RecordSave = (JT808RecordSave)reader.ReadByte();
  53. jT808_0X8804.AudioSampleRate = reader.ReadByte();
  54. return jT808_0X8804;
  55. }
  56. /// <summary>
  57. ///
  58. /// </summary>
  59. /// <param name="writer"></param>
  60. /// <param name="value"></param>
  61. /// <param name="config"></param>
  62. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8804 value, IJT808Config config)
  63. {
  64. writer.WriteByte((byte)value.RecordCmd);
  65. writer.WriteUInt16(value.RecordTime);
  66. writer.WriteByte((byte)value.RecordSave);
  67. writer.WriteByte(value.AudioSampleRate);
  68. }
  69. /// <summary>
  70. ///
  71. /// </summary>
  72. /// <param name="reader"></param>
  73. /// <param name="writer"></param>
  74. /// <param name="config"></param>
  75. public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
  76. {
  77. JT808_0x8804 value = new JT808_0x8804();
  78. value.RecordCmd = (JT808RecordCmd)reader.ReadByte();
  79. value.RecordTime = reader.ReadUInt16();
  80. value.RecordSave = (JT808RecordSave)reader.ReadByte();
  81. value.AudioSampleRate = reader.ReadByte();
  82. writer.WriteNumber($"[{ ((byte)(value.RecordCmd)).ReadNumber()}]录音命令-{value.RecordCmd.ToString()}", (byte)value.RecordCmd);
  83. writer.WriteNumber($"[{value.RecordTime.ReadNumber()}]单位为秒(s)", value.RecordTime);
  84. writer.WriteNumber($"[{((byte)value.RecordSave).ReadNumber()}]保存标志-{value.RecordSave.ToString()}", (byte)value.RecordSave);
  85. switch (value.AudioSampleRate)
  86. {
  87. case 0:
  88. writer.WriteNumber($"[{value.AudioSampleRate.ReadNumber()}]音频采样率-8K", value.AudioSampleRate);
  89. break;
  90. case 1:
  91. writer.WriteNumber($"[{value.AudioSampleRate.ReadNumber()}]音频采样率-11K", value.AudioSampleRate);
  92. break;
  93. case 2:
  94. writer.WriteNumber($"[{value.AudioSampleRate.ReadNumber()}]音频采样率-23K", value.AudioSampleRate);
  95. break;
  96. case 3:
  97. writer.WriteNumber($"[{value.AudioSampleRate.ReadNumber()}]音频采样率-32K", value.AudioSampleRate);
  98. break;
  99. default:
  100. writer.WriteNumber($"[{value.AudioSampleRate.ReadNumber()}]音频采样率-保留", value.AudioSampleRate);
  101. break;
  102. }
  103. }
  104. }
  105. }