using JT808.Protocol.Enums; using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System.Text.Json; namespace JT808.Protocol.MessageBody { /// /// 摄像头立即拍摄命令 /// 0x8801 /// public class JT808_0x8801 : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze, IJT808_2019_Version { /// /// 0x8801 /// public override ushort MsgId { get; } = 0x8801; /// /// 摄像头立即拍摄命令 /// public override string Description => "摄像头立即拍摄命令"; /// /// 通道 ID /// public byte ChannelId { get; set; } /// /// 拍摄命令 /// 0 表示停止拍摄;0xFFFF 表示录像;其它表示拍照张数 /// public ushort ShootingCommand { get; set; } /// /// 拍照间隔/录像时间 /// 秒,0 表示按最小间隔拍照或一直录像 /// public ushort VideoTime { get; set; } /// /// 保存标志 /// 1:保存;0:实时上传 /// public byte SaveFlag { get; set; } /// /// 分辨率 /// /// public byte Resolution { get; set; } /// /// 图像/视频质量 /// 1-10,1 代表质量损失最小,10 表示压缩比最大 /// public byte VideoQuality { get; set; } /// /// 亮度 /// 0-255 /// public byte Lighting { get; set; } /// /// 对比度 /// 0-127 /// public byte Contrast { get; set; } /// /// 饱和度 /// 0-127 /// public byte Saturability { get; set; } /// /// 色度 /// 0-255 /// public byte Chroma { get; set; } /// /// /// /// /// /// public JT808_0x8801 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x8801 jT808_0X8801 = new JT808_0x8801(); jT808_0X8801.ChannelId = reader.ReadByte(); jT808_0X8801.ShootingCommand = reader.ReadUInt16(); jT808_0X8801.VideoTime = reader.ReadUInt16(); jT808_0X8801.SaveFlag = reader.ReadByte(); jT808_0X8801.Resolution = reader.ReadByte(); jT808_0X8801.VideoQuality = reader.ReadByte(); jT808_0X8801.Lighting = reader.ReadByte(); jT808_0X8801.Contrast = reader.ReadByte(); jT808_0X8801.Saturability = reader.ReadByte(); jT808_0X8801.Chroma = reader.ReadByte(); return jT808_0X8801; } /// /// /// /// /// /// public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8801 value, IJT808Config config) { writer.WriteByte(value.ChannelId); writer.WriteUInt16(value.ShootingCommand); writer.WriteUInt16(value.VideoTime); writer.WriteByte(value.SaveFlag); writer.WriteByte(value.Resolution); writer.WriteByte(value.VideoQuality); writer.WriteByte(value.Lighting); writer.WriteByte(value.Contrast); writer.WriteByte(value.Saturability); writer.WriteByte(value.Chroma); } /// /// /// /// /// /// public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x8801 value = new JT808_0x8801(); value.ChannelId = reader.ReadByte(); value.ShootingCommand = reader.ReadUInt16(); value.VideoTime = reader.ReadUInt16(); value.SaveFlag = reader.ReadByte(); value.Resolution = reader.ReadByte(); value.VideoQuality = reader.ReadByte(); value.Lighting = reader.ReadByte(); value.Contrast = reader.ReadByte(); value.Saturability = reader.ReadByte(); value.Chroma = reader.ReadByte(); JT808CameraResolutionType jT808CameraResolutionType = (JT808CameraResolutionType)value.Resolution; writer.WriteNumber($"[{ value.ChannelId.ReadNumber()}]通道ID", value.ChannelId); writer.WriteNumber($"[{ value.ShootingCommand.ReadNumber()}]拍摄命令", value.ShootingCommand); writer.WriteNumber($"[{ value.VideoTime.ReadNumber()}]拍照间隔_录像时间", value.VideoTime); writer.WriteString($"[{ value.SaveFlag.ReadNumber()}]保存标志-{value.SaveFlag}", value.SaveFlag==1? "保存" : "实时上传"); writer.WriteNumber($"[{ value.Resolution.ReadNumber()}]分辨率-{jT808CameraResolutionType.ToString()}", value.Resolution); writer.WriteNumber($"[{ value.VideoQuality.ReadNumber()}]图像_视频质量", value.VideoQuality); writer.WriteNumber($"[{ value.Lighting.ReadNumber()}]亮度", value.Lighting); writer.WriteNumber($"[{ value.Contrast.ReadNumber()}]对比度", value.Contrast); writer.WriteNumber($"[{ value.Saturability.ReadNumber()}]饱和度", value.Saturability); writer.WriteNumber($"[{ value.Chroma.ReadNumber()}]色度", value.Chroma); } } }