|
|
@@ -70,6 +70,11 @@ namespace GBNewEnergy.Protocol |
|
|
|
/// 数据体 |
|
|
|
/// </summary> |
|
|
|
public NEBodies Bodies { get; protected set; } |
|
|
|
/// <summary> |
|
|
|
/// 数据单元加密 |
|
|
|
/// 当数据单元存在加密时,应先加密后校验,先校验后解密 |
|
|
|
/// </summary> |
|
|
|
private INEEncrypt Encrypt; |
|
|
|
|
|
|
|
protected override void ToBuffer() |
|
|
|
{ |
|
|
@@ -83,7 +88,14 @@ namespace GBNewEnergy.Protocol |
|
|
|
Buffer.WriteLittle(VIN, 4); |
|
|
|
Buffer[21] = (byte)EncryptMethod; |
|
|
|
Buffer.WriteLittle(DataUnitLength, 22, 2); |
|
|
|
Buffer.WriteLittle(Bodies.Buffer, 24, DataUnitLength); |
|
|
|
if (Encrypt != null) |
|
|
|
{ |
|
|
|
Buffer.WriteLittle(Encrypt.Encrypt(Bodies.Buffer), 24, DataUnitLength); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Buffer.WriteLittle(Bodies.Buffer, 24, DataUnitLength); |
|
|
|
} |
|
|
|
BCCCode = Buffer.ToXor(2, (HeaderFixedByteLength + DataUnitLength - 1)); |
|
|
|
Buffer[HeaderFixedByteLength + DataUnitLength] = BCCCode; |
|
|
|
Header = new byte[HeaderFixedByteLength]; |
|
|
@@ -98,6 +110,7 @@ namespace GBNewEnergy.Protocol |
|
|
|
AskId = nEPackageProperty.AskId; |
|
|
|
Bodies = nEPackageProperty.Bodies; |
|
|
|
EncryptMethod = nEPackageProperty.EncryptMethod; |
|
|
|
Encrypt = NEEncryptFactory.GetNEEncrypt(EncryptMethod); |
|
|
|
} |
|
|
|
|
|
|
|
protected override void InitializePropertiesFromBuffer() |
|
|
@@ -107,6 +120,7 @@ namespace GBNewEnergy.Protocol |
|
|
|
AskId = (NEAskId)Buffer[3]; |
|
|
|
VIN = Buffer.ReadStringLittle(4, 17); |
|
|
|
EncryptMethod = (NEEncryptMethod)Buffer[21]; |
|
|
|
Encrypt = NEEncryptFactory.GetNEEncrypt(EncryptMethod); |
|
|
|
DataUnitLength = Buffer.ReadUShortH2LLittle(22, 2); |
|
|
|
// 进行BCC校验码 |
|
|
|
// 校验位 = 报文长度 - 最后一位(校验位) - 偏移量(2) |
|
|
@@ -120,7 +134,14 @@ namespace GBNewEnergy.Protocol |
|
|
|
BCCCode = bCCCode2; |
|
|
|
byte[] bodiesBytes = new byte[DataUnitLength + CheckBit]; |
|
|
|
Array.Copy(Buffer, HeaderFixedByteLength, bodiesBytes, 0, bodiesBytes.Length); |
|
|
|
Bodies = NEBodiesFactory.GetNEBodiesByMsgId(MsgId, bodiesBytes); |
|
|
|
if (Encrypt != null) |
|
|
|
{ |
|
|
|
Bodies = NEBodiesFactory.GetNEBodiesByMsgId(MsgId, Encrypt.Eecrypt(bodiesBytes)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
Bodies = NEBodiesFactory.GetNEBodiesByMsgId(MsgId, bodiesBytes); |
|
|
|
} |
|
|
|
Header = new byte[HeaderFixedByteLength]; |
|
|
|
Array.Copy(Buffer, 0, Header, 0, HeaderFixedByteLength); |
|
|
|
} |
|
|
|