Просмотр исходного кода

将扩展初始化移入全局配置中进行

tags/v1.3.0
SmallChi 6 лет назад
Родитель
Сommit
65502fed0e
6 измененных файлов: 41 добавлений и 48 удалений
  1. +1
    -1
      src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs
  2. +1
    -1
      src/JT809.Protocol/JT809Extensions/JT809BinaryExtensions.cs
  3. +2
    -2
      src/JT809.Protocol/JT809Extensions/JT809CRCExtensions.cs
  4. +0
    -38
      src/JT809.Protocol/JT809Extensions/JT809InitBinaryExtensions.cs
  5. +6
    -6
      src/JT809.Protocol/JT809Extensions/JT809StringExtensions.cs
  6. +31
    -0
      src/JT809.Protocol/JT809GlobalConfig.cs

+ 1
- 1
src/JT809.Protocol.Test/JT809Extensions/JT809BinaryExtensionsTest.cs Просмотреть файл

@@ -13,7 +13,7 @@ namespace JT809.Protocol.Test.JT809Extensions
public void Test1()
{
string vno = "粤A12345";
byte[] bytes = JT809BinaryExtensions.encoding.GetBytes(vno);
byte[] bytes = JT809GlobalConfig.Instance.Encoding.GetBytes(vno);
Assert.Equal(7,vno.Length);
Assert.Equal(8, bytes.Length);
}


+ 1
- 1
src/JT809.Protocol/JT809Extensions/JT809BinaryExtensions.cs Просмотреть файл

@@ -199,7 +199,7 @@ namespace JT809.Protocol.JT809Extensions

public static IEnumerable<byte> ToBytes(this string data)
{
return ToBytes(data, encoding);
return ToBytes(data, JT809GlobalConfig.Instance.Encoding);
}

public static IEnumerable<byte> ToBytes(this int data, int len)


+ 2
- 2
src/JT809.Protocol/JT809Extensions/JT809CRCExtensions.cs Просмотреть файл

@@ -18,7 +18,7 @@ namespace JT809.Protocol.JT809Extensions
ushort checkCode = 0xFFFF;
for (int j = offset; j < iLen; ++j)
{
checkCode = (ushort)((checkCode << 8) ^ (ushort)CRC[(checkCode >> 8) ^ ucbuf[j]]);
checkCode = (ushort)((checkCode << 8) ^ (ushort)JT809GlobalConfig.Instance.CRC[(checkCode >> 8) ^ ucbuf[j]]);
}
return checkCode;
}
@@ -35,7 +35,7 @@ namespace JT809.Protocol.JT809Extensions
ushort checkCode = 0xFFFF;
for (int j = offset; j < iLen; ++j)
{
checkCode = (ushort)((checkCode << 8) ^ (ushort)CRC[(checkCode >> 8) ^ ucbuf[j]]);
checkCode = (ushort)((checkCode << 8) ^ (ushort)JT809GlobalConfig.Instance.CRC[(checkCode >> 8) ^ ucbuf[j]]);
}
return checkCode;
}


+ 0
- 38
src/JT809.Protocol/JT809Extensions/JT809InitBinaryExtensions.cs Просмотреть файл

@@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace JT809.Protocol.JT809Extensions
{
public static partial class JT809BinaryExtensions
{
public static Encoding encoding;

private const ushort cnCRC_CCITT = 0x1021; //CRC校验多项式

private static ulong[] CRC = new ulong[256]; //建立CRC16表

static JT809BinaryExtensions()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
encoding = Encoding.GetEncoding("GBK");
ushort i, j;
ushort nData;
ushort nAccum;
for (i = 0; i < 256; i++)
{
nData = (ushort)(i << 8);
nAccum = 0;
for (j = 0; j < 8; j++)
{
if (((nData ^ nAccum) & 0x8000) > 0)
nAccum = (ushort)((nAccum << 1) ^ cnCRC_CCITT);
else
nAccum <<= 1;
nData <<= 1;
}
CRC[i] = (ulong)nAccum;
}
}
}
}

+ 6
- 6
src/JT809.Protocol/JT809Extensions/JT809StringExtensions.cs Просмотреть файл

@@ -11,21 +11,21 @@ namespace JT809.Protocol.JT809Extensions
{
public static string ReadStringLittle(ReadOnlySpan<byte> read, ref int offset, int len)
{
string value = encoding.GetString(read.Slice(offset, len).ToArray());
string value = JT809GlobalConfig.Instance.Encoding.GetString(read.Slice(offset, len).ToArray());
offset += len;
return value.Trim('\0');
}

public static string ReadStringLittle(ReadOnlySpan<byte> read, ref int offset)
{
string value = encoding.GetString(read.Slice(offset).ToArray());
string value = JT809GlobalConfig.Instance.Encoding.GetString(read.Slice(offset).ToArray());
offset += value.Length;
return value.Trim('\0');
}

public static int WriteStringLittle(byte[] bytes, int offset, string data)
{
byte[] codeBytes = encoding.GetBytes(data);
byte[] codeBytes = JT809GlobalConfig.Instance.Encoding.GetBytes(data);
Array.Copy(codeBytes, 0, bytes, offset, codeBytes.Length);
return codeBytes.Length;
}
@@ -39,7 +39,7 @@ namespace JT809.Protocol.JT809Extensions
}
else
{
tempBytes = encoding.GetBytes(data);
tempBytes = JT809GlobalConfig.Instance.Encoding.GetBytes(data);
}
byte[] rBytes = new byte[len];
for (int i = 0; i < tempBytes.Length; i++)
@@ -54,7 +54,7 @@ namespace JT809.Protocol.JT809Extensions
public static int WriteStringPadLeftLittle(byte[] bytes, int offset, string data, int len)
{
data = data.PadLeft(len, '\0');
byte[] codeBytes = encoding.GetBytes(data);
byte[] codeBytes = JT809GlobalConfig.Instance.Encoding.GetBytes(data);
Array.Copy(codeBytes, 0, bytes, offset, codeBytes.Length);
return codeBytes.Length;
}
@@ -62,7 +62,7 @@ namespace JT809.Protocol.JT809Extensions
public static int WriteStringPadRightLittle(byte[] bytes, int offset, string data, int len)
{
data = data.PadRight(len, '\0');
byte[] codeBytes = encoding.GetBytes(data);
byte[] codeBytes = JT809GlobalConfig.Instance.Encoding.GetBytes(data);
Array.Copy(codeBytes, 0, bytes, offset, codeBytes.Length);
return codeBytes.Length;
}


+ 31
- 0
src/JT809.Protocol/JT809GlobalConfig.cs Просмотреть файл

@@ -13,11 +13,16 @@ namespace JT809.Protocol

private JT809GlobalConfig()
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding = Encoding.GetEncoding("GBK");
MsgSNDistributed = new DefaultMsgSNDistributedImpl();
HeaderOptions = new JT809HeaderOptions();
SkipCRCCode = false;
initCrcTable();
}

public Encoding Encoding;

public static JT809GlobalConfig Instance
{
get
@@ -92,5 +97,31 @@ namespace JT809.Protocol
instance.Value.SkipCRCCode = skipCRCCode;
return instance.Value;
}

private const ushort cnCRC_CCITT = 0x1021; //CRC校验多项式

public ulong[] CRC; //建立CRC16表

private void initCrcTable()
{
CRC = new ulong[256];
ushort i, j;
ushort nData;
ushort nAccum;
for (i = 0; i < 256; i++)
{
nData = (ushort)(i << 8);
nAccum = 0;
for (j = 0; j < 8; j++)
{
if (((nData ^ nAccum) & 0x8000) > 0)
nAccum = (ushort)((nAccum << 1) ^ cnCRC_CCITT);
else
nAccum <<= 1;
nData <<= 1;
}
CRC[i] = (ulong)nAccum;
}
}
}
}

Загрузка…
Отмена
Сохранить