|
@@ -23,32 +23,49 @@ namespace JT808.Protocol.MessageBody |
|
|
/// <summary> |
|
|
/// <summary> |
|
|
/// 数据 长度 |
|
|
/// 数据 长度 |
|
|
/// </summary> |
|
|
/// </summary> |
|
|
public override byte ParamLength { get; set; } |
|
|
|
|
|
|
|
|
public override byte ParamLength { get; set; } = 8; |
|
|
/// <summary> |
|
|
/// <summary> |
|
|
/// CAN 总线 ID 单独采集设置: |
|
|
|
|
|
/// bit63-bit32 表示此 ID 采集时间间隔(ms),0 表示不采集; |
|
|
/// bit63-bit32 表示此 ID 采集时间间隔(ms),0 表示不采集; |
|
|
|
|
|
/// </summary> |
|
|
|
|
|
public uint CollectTimeInterval { get; set; } |
|
|
|
|
|
/// <summary> |
|
|
/// bit31 表示 CAN 通道号,0:CAN1,1:CAN2; |
|
|
/// bit31 表示 CAN 通道号,0:CAN1,1:CAN2; |
|
|
|
|
|
/// </summary> |
|
|
|
|
|
public byte ChannelNo { get; set; } |
|
|
|
|
|
/// <summary> |
|
|
/// bit30 表示帧类型,0:标准帧,1:扩展帧; |
|
|
/// bit30 表示帧类型,0:标准帧,1:扩展帧; |
|
|
/// bit29 表示数据采集方式,0:原始数据,1:采集区间的计算值; |
|
|
|
|
|
|
|
|
/// </summary> |
|
|
|
|
|
public byte FrameType { get; set; } |
|
|
|
|
|
/// <summary> |
|
|
|
|
|
/// bit29 表示数据采集方式,0:原始数据,1:采集区间的计算值; |
|
|
|
|
|
/// </summary> |
|
|
|
|
|
public byte CollectWay { get; set; } |
|
|
|
|
|
/// <summary> |
|
|
/// bit28-bit0 表示 CAN 总线 ID。 |
|
|
/// bit28-bit0 表示 CAN 总线 ID。 |
|
|
/// </summary> |
|
|
/// </summary> |
|
|
public byte[] ParamValue { get; set; } |
|
|
|
|
|
|
|
|
public long BusId { get; set; } |
|
|
|
|
|
|
|
|
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) |
|
|
public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) |
|
|
{ |
|
|
{ |
|
|
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110(); |
|
|
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110(); |
|
|
jT808_0x8103_0x0110.ParamId = reader.ReadUInt32(); |
|
|
jT808_0x8103_0x0110.ParamId = reader.ReadUInt32(); |
|
|
jT808_0x8103_0x0110.ParamLength = reader.ReadByte(); |
|
|
jT808_0x8103_0x0110.ParamLength = reader.ReadByte(); |
|
|
jT808_0x8103_0x0110.ParamValue = reader.ReadArray(jT808_0x8103_0x0110.ParamLength).ToArray(); |
|
|
|
|
|
writer.WriteNumber($"[ { jT808_0x8103_0x0110.ParamId.ReadNumber()}]参数ID", jT808_0x8103_0x0110.ParamId); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jT808_0x8103_0x0110.CollectTimeInterval = reader.ReadUInt32(); |
|
|
|
|
|
var temp = reader.ReadUInt32(); |
|
|
|
|
|
jT808_0x8103_0x0110.ChannelNo = (byte)((temp >> 31) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.FrameType = (byte)((temp >> 30) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.CollectWay = (byte)((temp >> 29) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.BusId = temp & 0x01FFFFFF; |
|
|
|
|
|
writer.WriteNumber($"[{jT808_0x8103_0x0110.ParamId.ReadNumber()}]参数ID", jT808_0x8103_0x0110.ParamId); |
|
|
writer.WriteNumber($"[{jT808_0x8103_0x0110.ParamLength.ReadNumber()}]参数长度", jT808_0x8103_0x0110.ParamLength); |
|
|
writer.WriteNumber($"[{jT808_0x8103_0x0110.ParamLength.ReadNumber()}]参数长度", jT808_0x8103_0x0110.ParamLength); |
|
|
writer.WriteStartArray($"[{ jT808_0x8103_0x0110.ParamValue.ToHexString()}]参数值[CAN总线ID单独采集设置]"); |
|
|
|
|
|
writer.WriteNumber("此 ID 采集时间间隔(ms)", BinaryPrimitives.ReadUInt32BigEndian( jT808_0x8103_0x0110.ParamValue.AsSpan().Slice(0,4))); |
|
|
|
|
|
writer.WriteString("CAN通道号", (jT808_0x8103_0x0110.ParamValue.AsSpan().Slice(4, 1).ToArray()[0]&0x01)==0? "CAN1" : "CAN2"); |
|
|
|
|
|
writer.WriteString("帧类型", (jT808_0x8103_0x0110.ParamValue.AsSpan().Slice(4, 1).ToArray()[0] & 0x02) == 0 ? "标准帧" : "扩展帧"); |
|
|
|
|
|
writer.WriteString("数据采集方式", (jT808_0x8103_0x0110.ParamValue.AsSpan().Slice(4, 1).ToArray()[0] & 0x04) == 0 ? "原始数据" : "采集区间的计算值"); |
|
|
|
|
|
writer.WriteNumber("CAN 总线 ID", BinaryPrimitives.ReadUInt32BigEndian(jT808_0x8103_0x0110.ParamValue.AsSpan().Slice(4, 4)) & 0x01FFFFFF); |
|
|
|
|
|
writer.WriteEndArray(); |
|
|
|
|
|
|
|
|
writer.WriteStartObject($"CAN总线ID单独采集设置"); |
|
|
|
|
|
writer.WriteNumber($"[{ jT808_0x8103_0x0110.CollectTimeInterval.ReadNumber()}]此 ID 采集时间间隔(ms)", jT808_0x8103_0x0110.CollectTimeInterval) ; |
|
|
|
|
|
writer.WriteString($"[{ jT808_0x8103_0x0110.ChannelNo.ReadBinary()[0]}]CAN通道号", jT808_0x8103_0x0110.ChannelNo == 0? "CAN1" : "CAN2"); |
|
|
|
|
|
writer.WriteString($"[{ jT808_0x8103_0x0110.FrameType.ReadBinary()[0]}]帧类型", jT808_0x8103_0x0110.FrameType == 0 ? "标准帧" : "扩展帧"); |
|
|
|
|
|
writer.WriteString($"[{ jT808_0x8103_0x0110.CollectWay.ReadBinary()[0]}]数据采集方式", jT808_0x8103_0x0110.CollectWay== 0 ? "原始数据" : "采集区间的计算值"); |
|
|
|
|
|
writer.WriteNumber($"[{ jT808_0x8103_0x0110.BusId.ReadNumber()}]CAN 总线 ID", jT808_0x8103_0x0110.BusId); |
|
|
|
|
|
writer.WriteEndObject(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public JT808_0x8103_0x0110 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) |
|
|
public JT808_0x8103_0x0110 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) |
|
@@ -56,15 +73,22 @@ namespace JT808.Protocol.MessageBody |
|
|
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110(); |
|
|
JT808_0x8103_0x0110 jT808_0x8103_0x0110 = new JT808_0x8103_0x0110(); |
|
|
jT808_0x8103_0x0110.ParamId = reader.ReadUInt32(); |
|
|
jT808_0x8103_0x0110.ParamId = reader.ReadUInt32(); |
|
|
jT808_0x8103_0x0110.ParamLength = reader.ReadByte(); |
|
|
jT808_0x8103_0x0110.ParamLength = reader.ReadByte(); |
|
|
jT808_0x8103_0x0110.ParamValue = reader.ReadArray(jT808_0x8103_0x0110.ParamLength).ToArray(); |
|
|
|
|
|
|
|
|
jT808_0x8103_0x0110.CollectTimeInterval= reader.ReadUInt32(); |
|
|
|
|
|
var temp= reader.ReadUInt32(); |
|
|
|
|
|
jT808_0x8103_0x0110.ChannelNo =(byte)( (temp >> 31) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.FrameType = (byte)((temp >> 30) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.CollectWay = (byte)((temp >> 29) & 0x01); |
|
|
|
|
|
jT808_0x8103_0x0110.BusId = temp & 0x01FFFFFF; |
|
|
return jT808_0x8103_0x0110; |
|
|
return jT808_0x8103_0x0110; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0x0110 value, IJT808Config config) |
|
|
public void Serialize(ref JT808MessagePackWriter writer, JT808_0x8103_0x0110 value, IJT808Config config) |
|
|
{ |
|
|
{ |
|
|
writer.WriteUInt32(value.ParamId); |
|
|
writer.WriteUInt32(value.ParamId); |
|
|
writer.WriteByte((byte)value.ParamValue.Length); |
|
|
|
|
|
writer.WriteArray(value.ParamValue); |
|
|
|
|
|
|
|
|
writer.WriteByte((byte)value.ParamLength); |
|
|
|
|
|
writer.WriteUInt32(value.CollectTimeInterval); |
|
|
|
|
|
var temp = (uint)((value.ChannelNo << 31) | (value.FrameType << 30) | (value.CollectWay )<< 29 | (value.BusId& 0x01FFFFFF)); |
|
|
|
|
|
writer.WriteUInt32(temp); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |