using JT808.Protocol.Formatters;
using JT808.Protocol.Interfaces;
using JT808.Protocol.MessageBody;
using JT808.Protocol.MessagePack;
using System.Collections.Generic;
using System.Text.Json;
namespace JT808.Protocol.Extensions.JT1078.MessageBody
{
///
///终端休眠模式唤醒设置
/// 0x8103_0x007C
///
public class JT808_0x8103_0x007C_TimerWakeDayParamter:IJT808MessagePackFormatter, IJT808Analyze
{
///
/// 定时唤醒启用标志
///
public byte TimerWakeEnableFlag { get; set; }
///
/// 时间段1唤醒时间
/// 2
///
public string TimePeriod1WakeTime { get; set; }
///
/// 时间段1关闭时间
/// 2
///
public string TimePeriod1CloseTime { get; set; }
///
/// 时间段2唤醒时间
/// 2
///
public string TimePeriod2WakeTime { get; set; }
///
/// 时间段2关闭时间
/// 2
///
public string TimePeriod2CloseTime { get; set; }
///
/// 时间段3唤醒时间
/// 2
///
public string TimePeriod3WakeTime { get; set; }
///
/// 时间段3关闭时间
/// 2
///
public string TimePeriod3CloseTime { get; set; }
///
/// 时间段4唤醒时间
/// 2
///
public string TimePeriod4WakeTime { get; set; }
///
/// 时间段4关闭时间
/// 2
///
public string TimePeriod4CloseTime { get; set; }
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
{
JT808_0x8103_0x007C_TimerWakeDayParamter value = new JT808_0x8103_0x007C_TimerWakeDayParamter();
value.TimerWakeEnableFlag = reader.ReadByte();
writer.WriteString($"[{value.TimerWakeEnableFlag.ReadNumber()}]定时唤醒启用标志", TimerWakeEnableFlagDisplay(value.TimerWakeEnableFlag));
value.TimePeriod1WakeTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod1WakeTime}]时间段1唤醒时间", value.TimePeriod1WakeTime);
value.TimePeriod1CloseTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod1CloseTime}]时间段1关闭时间", value.TimePeriod1CloseTime);
value.TimePeriod2WakeTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod2WakeTime}]时间段2唤醒时间", value.TimePeriod2WakeTime);
value.TimePeriod2CloseTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod2CloseTime}]时间段2关闭时间", value.TimePeriod2CloseTime);
value.TimePeriod3WakeTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod3WakeTime}]时间段3唤醒时间", value.TimePeriod3WakeTime);
value.TimePeriod3CloseTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod3CloseTime}]时间段3关闭时间", value.TimePeriod3CloseTime);
value.TimePeriod4WakeTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod4WakeTime}]时间段4唤醒时间", value.TimePeriod4WakeTime);
value.TimePeriod4CloseTime = reader.ReadBCD(4);
writer.WriteString($"[{value.TimePeriod4CloseTime}]时间段4关闭时间", value.TimePeriod4CloseTime);
string TimerWakeEnableFlagDisplay(byte TimerWakeEnableFlag) {
string timerWakeEnableFlagDisplay = string.Empty;
timerWakeEnableFlagDisplay += (TimerWakeEnableFlag & 0x01) == 1 ? ",时间段1唤醒时间启用" : "";
timerWakeEnableFlagDisplay += (TimerWakeEnableFlag & 0x01) == 1 ? ",时间段2唤醒时间启用" : "";
timerWakeEnableFlagDisplay += (TimerWakeEnableFlag & 0x01) == 1 ? ",时间段3唤醒时间启用" : "";
timerWakeEnableFlagDisplay += (TimerWakeEnableFlag & 0x01) == 1 ? ",时间段4唤醒时间启用" : "";
return timerWakeEnableFlagDisplay.Length > 0 ? timerWakeEnableFlagDisplay.Substring(1) : "";
}
}
public JT808_0x8103_0x007C_TimerWakeDayParamter Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
{
JT808_0x8103_0x007C_TimerWakeDayParamter jT808_0x8103_0x007C_TimerWakeDayParamter = new JT808_0x8103_0x007C_TimerWakeDayParamter();
jT808_0x8103_0x007C_TimerWakeDayParamter.TimerWakeEnableFlag = reader.ReadByte();
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod1WakeTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod1CloseTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod2WakeTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod2CloseTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod3WakeTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod3CloseTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod4WakeTime = reader.ReadBCD(4);
jT808_0x8103_0x007C_TimerWakeDayParamter.TimePeriod4CloseTime = reader.ReadBCD(4);
return jT808_0x8103_0x007C_TimerWakeDayParamter;
}
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0x007C_TimerWakeDayParamter value, IJT808Config config)
{
writer.WriteByte(value.TimerWakeEnableFlag);
writer.WriteBCD(value.TimePeriod1WakeTime, 4);
writer.WriteBCD(value.TimePeriod1CloseTime, 4);
writer.WriteBCD(value.TimePeriod2WakeTime, 4);
writer.WriteBCD(value.TimePeriod2CloseTime, 4);
writer.WriteBCD(value.TimePeriod3WakeTime, 4);
writer.WriteBCD(value.TimePeriod3CloseTime, 4);
writer.WriteBCD(value.TimePeriod4WakeTime, 4);
writer.WriteBCD(value.TimePeriod4CloseTime, 4);
}
}
}