using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessagePack;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
///
/// 终端上传音视频资源列表
///
public class JT808_0x1205_AVResouce:IJT808MessagePackFormatter, IJT808Analyze
{
///
/// 逻辑通道号
///
public byte LogicChannelNo { get; set; }
///
/// 开始时间
///
public DateTime BeginTime { get; set; }
///
/// 结束时间
///
public DateTime EndTime { get; set; }
///
/// 报警标志
///
public uint AlarmFlag { get; set; }
///
/// 音视频资源类型
///
public byte AVResourceType { get; set; }
///
/// 码流类型
///
public byte StreamType { get; set; }
///
/// 存储器类型
///
public byte MemoryType { get; set; }
///
/// 文件大小
///
public uint FileSize { get; set; }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x1205_AVResouce value = new JT808_0x1205_AVResouce();
value.LogicChannelNo = reader.ReadByte();
writer.WriteString($"[{value.LogicChannelNo.ReadNumber()}]逻辑通道号", LogicalChannelNoDisplay(value.LogicChannelNo));
value.BeginTime = reader.ReadDateTime6();
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]开始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.BeginTime = reader.ReadDateTime6();
writer.WriteString($"[{value.BeginTime.ToString("yyMMddHHmmss")}]开始时间", value.BeginTime.ToString("yyyy-MM-dd HH:mm:ss"));
value.AlarmFlag = reader.ReadUInt32();
writer.WriteNumber($"[{value.AlarmFlag.ReadNumber()}]报警标志", value.AlarmFlag);//此处的报警标志不是很明白
value.AVResourceType = reader.ReadByte();
writer.WriteString($"[{value.AVResourceType.ReadNumber()}]音视频资源类型", AVResourceTypeDisplay(value.AVResourceType));
value.StreamType = reader.ReadByte();
writer.WriteString($"[{value.StreamType.ReadNumber()}]码流类型", StreamTypeDisplay(value.StreamType));
value.MemoryType = reader.ReadByte();
writer.WriteString($"[{value.MemoryType.ReadNumber()}]存储器类型", MemoryTypeDisplay(value.MemoryType));
value.FileSize = reader.ReadUInt32();
writer.WriteNumber($"[{value.FileSize.ReadNumber()}]文件大小(B)", value.FileSize);
string LogicalChannelNoDisplay(byte LogicalChannelNo)
{
switch (LogicalChannelNo)
{
case 1:
return "驾驶员";
case 2:
return "车辆正前方";
case 3:
return "车前门";
case 4:
return "车厢前部";
case 5:
return "车厢后部";
case 7:
return "行李舱";
case 8:
return "车辆左侧";
case 9:
return "车辆右侧";
case 10:
return "车辆正后方";
case 11:
return "车厢中部";
case 12:
return "车中门";
case 13:
return "驾驶席车门";
case 33:
return "驾驶员";
case 36:
return "车厢前部";
case 37:
return "车厢后部";
default:
return "预留";
}
}
string AVResourceTypeDisplay(byte AVResourceType) {
switch (AVResourceType)
{
case 0:
return "音视频";
case 1:
return "音频";
case 2:
return "视频";
default:
break;
}
return "未知";
}
string StreamTypeDisplay(byte StreamType) {
switch (StreamType)
{
case 1:
return "主码流";
case 2:
return "子码流";
default:
return "未知";
}
}
string MemoryTypeDisplay(byte MemoryType)
{
switch (MemoryType)
{
case 1:
return "主存储器";
case 2:
return "灾备存储器";
default:
return "未知";
}
}
}
public JT808_0x1205_AVResouce Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x1205_AVResouce jT808_0x1205_AVResouce = new JT808_0x1205_AVResouce();
jT808_0x1205_AVResouce.LogicChannelNo = reader.ReadByte();
jT808_0x1205_AVResouce.BeginTime = reader.ReadDateTime6();
jT808_0x1205_AVResouce.EndTime = reader.ReadDateTime6();
jT808_0x1205_AVResouce.AlarmFlag = reader.ReadUInt32();
jT808_0x1205_AVResouce.AVResourceType = reader.ReadByte();
jT808_0x1205_AVResouce.StreamType = reader.ReadByte();
jT808_0x1205_AVResouce.MemoryType = reader.ReadByte();
jT808_0x1205_AVResouce.FileSize = reader.ReadUInt32();
return jT808_0x1205_AVResouce;
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x1205_AVResouce value, IJT808Config config)
{
writer.WriteByte(value.LogicChannelNo);
writer.WriteDateTime6(value.BeginTime);
writer.WriteDateTime6(value.EndTime);
writer.WriteUInt32(value.AlarmFlag);
writer.WriteByte(value.AVResourceType);
writer.WriteByte(value.StreamType);
writer.WriteByte(value.MemoryType);
writer.WriteUInt32(value.FileSize);
}
}
}