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);
}
}
}