Selaa lähdekoodia

优化一下0702 ,在状态为02时,如果下班时间后面还有字段,就继续解析

tags/v2.6.6
SmallChi(Koike) 11 kuukautta sitten
vanhempi
commit
d2b5f3df73
3 muutettua tiedostoa jossa 41 lisäystä ja 50 poistoa
  1. +1
    -1
      src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs
  2. +13
    -4
      src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs
  3. +27
    -45
      src/JT808.Protocol/MessageBody/JT808_0x0702.cs

+ 1
- 1
src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.GPS51.Test/JT808_0x0200_0x51_Test.cs Näytä tiedosto

@@ -40,7 +40,7 @@ namespace JT808.Protocol.Extensions.GPS51.Test
AttachInfoId = 0x2b,
AttachInfoLength = 4,
Temperatures = new List<short> {
12,-34
12,34
}
});
var hex = JT808Serializer.Serialize(jT808UploadLocationRequest).ToHexString();


+ 13
- 4
src/JT808.Protocol.Test/MessageBody/JT808_0x0702Test.cs Näytä tiedosto

@@ -174,21 +174,21 @@ namespace JT808.Protocol.Test.MessageBody
{
JT808_0x0702 jT808_0X0702 = new JT808_0x0702
{
DriverUserName = "tk",
DriverUserName = "tk1", //不能小于2个字节
DriverIdentityCard="123456789123456789",
QualificationCode = "qwe123456aaa",
LicenseIssuing = "qwertx"
};
var hex = JT808Serializer.Serialize(jT808_0X0702, JT808Version.JTT2011).ToHexString();
Assert.Equal("02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".Replace(" ", ""), hex);
Assert.Equal("03746B3100003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".Replace(" ", ""), hex);
}

[Fact]
public void Test2011_2()
{
byte[] bytes = "02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes();
byte[] bytes = "03746B3100003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes();
JT808_0x0702 jT808_0X0702 = JT808Serializer.Deserialize<JT808_0x0702>(bytes);
Assert.Equal("tk", jT808_0X0702.DriverUserName);
Assert.Equal("tk1", jT808_0X0702.DriverUserName);
Assert.Equal("qwe123456aaa", jT808_0X0702.QualificationCode);
Assert.Equal("qwertx", jT808_0X0702.LicenseIssuing);
Assert.Equal("123456789123456789", jT808_0X0702.DriverIdentityCard);
@@ -200,5 +200,14 @@ namespace JT808.Protocol.Test.MessageBody
byte[] bytes = "02746B00003132333435363738393132333435363738390000000000000000000000000000000000000000000000000000000071776531323334353661616106717765727478".ToHexBytes();
string json = JT808Serializer.Analyze<JT808_0x0702>(bytes, JT808Version.JTT2011);
}
[Fact]
public void Test2013_1()
{
byte[] bytes = "7e0702003a016067308681006d0218061b0f362e000753696d626132326777313233000000000000000000000000000000044341524407e8061be27e".ToHexBytes();
var package = JT808Serializer.Deserialize<JT808Package>(bytes, JT808Version.JTT2013);

JT808_0x0702 jT808_0X0702= package.Bodies as JT808_0x0702;

}
}
}

+ 27
- 45
src/JT808.Protocol/MessageBody/JT808_0x0702.cs Näytä tiedosto

@@ -102,13 +102,13 @@ namespace JT808.Protocol.MessageBody
JT808_0x0702 value = new JT808_0x0702();
var firstByte = reader.ReadVirtualByte();
//因2011第一个字节代表姓名长度 所以该值长度只能为 2,3,4,整个数据长度 62+m+n
if (firstByte == 0x01)
if (firstByte == 0x01 || firstByte == 0x02)
{
value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte();
writer.WriteNumber($"[{((byte)value.IC_Card_Status).ReadNumber()}]状态-{value.IC_Card_Status.ToString()}", (byte)value.IC_Card_Status);
value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss();
writer.WriteString($"[{value.IC_Card_PlugDateTime.ToString("yyMMddHHmmss")}]插拔卡时间", value.IC_Card_PlugDateTime.ToString("yyyy-MM-dd HH:mm:ss"));
if (value.IC_Card_Status == JT808ICCardStatus.ic_card_into)
if (reader.ReadCurrentRemainContentLength() > 0)
{
value.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte();
writer.WriteNumber($"[{((byte)value.IC_Card_ReadResult).ReadNumber()}]IC卡读取结果-{value.IC_Card_ReadResult.ToString()}", (byte)value.IC_Card_ReadResult);
@@ -149,33 +149,22 @@ namespace JT808.Protocol.MessageBody
}
else
{
if (firstByte == 0x02 && reader.ReadCurrentRemainContentLength() == 7)
{
//如果字节是0x02且长度只有7,那么该协议就是2013或者2019
value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte();
writer.WriteNumber($"[{((byte)value.IC_Card_Status).ReadNumber()}]状态-{value.IC_Card_Status.ToString()}", (byte)value.IC_Card_Status);
value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss();
writer.WriteString($"[{value.IC_Card_PlugDateTime.ToString("yyMMddHHmmss")}]插拔卡时间", value.IC_Card_PlugDateTime.ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
value.DriverUserNameLength = reader.ReadByte();
writer.WriteNumber($"[{value.DriverUserNameLength.ReadNumber()}]驾驶员姓名长度", value.DriverUserNameLength);
var driverUserNameBuffer = reader.ReadVirtualArray(value.DriverUserNameLength);
value.DriverUserName = reader.ReadString(value.DriverUserNameLength);
writer.WriteString($"[{driverUserNameBuffer.ToArray().ToHexString()}]驾驶员姓名", value.DriverUserName);
var driverIdentityCardBuffer = reader.ReadVirtualArray(20);
value.DriverIdentityCard = reader.ReadString(20);
writer.WriteString($"[{driverIdentityCardBuffer.ToArray().ToHexString()}]驾驶员身份证号", value.DriverIdentityCard);
var qualificationCodeBuffer = reader.ReadVirtualArray(40);
value.QualificationCode = reader.ReadString(40);
writer.WriteString($"[{qualificationCodeBuffer.ToArray().ToHexString()}]从业资格证编码", value.QualificationCode);
value.LicenseIssuingLength = reader.ReadByte();
writer.WriteNumber($"[{value.LicenseIssuingLength.ReadNumber()}]发证机构名称长度", value.LicenseIssuingLength);
var licenseIssuingBuffer = reader.ReadVirtualArray(value.LicenseIssuingLength);
value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength);
writer.WriteString($"[{licenseIssuingBuffer.ToArray().ToHexString()}]发证机构名称", value.LicenseIssuing);
}
value.DriverUserNameLength = reader.ReadByte();
writer.WriteNumber($"[{value.DriverUserNameLength.ReadNumber()}]驾驶员姓名长度", value.DriverUserNameLength);
var driverUserNameBuffer = reader.ReadVirtualArray(value.DriverUserNameLength);
value.DriverUserName = reader.ReadString(value.DriverUserNameLength);
writer.WriteString($"[{driverUserNameBuffer.ToArray().ToHexString()}]驾驶员姓名", value.DriverUserName);
var driverIdentityCardBuffer = reader.ReadVirtualArray(20);
value.DriverIdentityCard = reader.ReadString(20);
writer.WriteString($"[{driverIdentityCardBuffer.ToArray().ToHexString()}]驾驶员身份证号", value.DriverIdentityCard);
var qualificationCodeBuffer = reader.ReadVirtualArray(40);
value.QualificationCode = reader.ReadString(40);
writer.WriteString($"[{qualificationCodeBuffer.ToArray().ToHexString()}]从业资格证编码", value.QualificationCode);
value.LicenseIssuingLength = reader.ReadByte();
writer.WriteNumber($"[{value.LicenseIssuingLength.ReadNumber()}]发证机构名称长度", value.LicenseIssuingLength);
var licenseIssuingBuffer = reader.ReadVirtualArray(value.LicenseIssuingLength);
value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength);
writer.WriteString($"[{licenseIssuingBuffer.ToArray().ToHexString()}]发证机构名称", value.LicenseIssuing);
}
}
/// <summary>
@@ -189,11 +178,11 @@ namespace JT808.Protocol.MessageBody
JT808_0x0702 value = new JT808_0x0702();
var firstByte = reader.ReadVirtualByte();
//因2011第一个字节代表姓名长度 所以该值长度只能为 2,3,4,整个数据长度 62+m+n
if (firstByte == 0x01)
if (firstByte == 0x01|| firstByte == 0x02)
{
value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte();
value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss();
if (value.IC_Card_Status == JT808ICCardStatus.ic_card_into)
if (reader.ReadCurrentRemainContentLength()>0)
{
value.IC_Card_ReadResult = (JT808ICCardReadResult)reader.ReadByte();
if (value.IC_Card_ReadResult == JT808ICCardReadResult.ic_card_reading_succeeded)
@@ -219,20 +208,13 @@ namespace JT808.Protocol.MessageBody
}
else
{
if (firstByte == 0x02 && reader.ReadCurrentRemainContentLength() == 7)
{
//如果字节是0x02且长度只有7,那么该协议就是2013或者2019
value.IC_Card_Status = (JT808ICCardStatus)reader.ReadByte();
value.IC_Card_PlugDateTime = reader.ReadDateTime_yyMMddHHmmss();
}
else {
value.DriverUserNameLength = reader.ReadByte();
value.DriverUserName = reader.ReadString(value.DriverUserNameLength);
value.DriverIdentityCard = reader.ReadString(20);
value.QualificationCode = reader.ReadString(40);
value.LicenseIssuingLength = reader.ReadByte();
value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength);
}
//默认是2011版本
value.DriverUserNameLength = reader.ReadByte();
value.DriverUserName = reader.ReadString(value.DriverUserNameLength);
value.DriverIdentityCard = reader.ReadString(20);
value.QualificationCode = reader.ReadString(40);
value.LicenseIssuingLength = reader.ReadByte();
value.LicenseIssuing = reader.ReadString(value.LicenseIssuingLength);
}
return value;
}


Ladataan…
Peruuta
Tallenna