Optimize using Span

This commit is contained in:
2020-12-07 18:57:10 +01:00
parent 93e7af380a
commit 6c2a5e3bab
5 changed files with 50 additions and 11 deletions

View File

@@ -55,8 +55,21 @@
<HintPath>..\packages\Unosquare.Swan.Lite.3.0.0\lib\net461\Swan.Lite.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.ServiceProcess" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>

View File

@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="Unosquare.Raspberry.Abstractions" version="0.4.1" targetFramework="net472" />
<package id="Unosquare.Raspberry.IO" version="0.27.1" targetFramework="net472" />

View File

@@ -254,11 +254,12 @@ namespace WaveshareUARTFingerprintSensor
/// <param name="userID"></param>
/// <param name="userPermission"></param>
/// <returns></returns>
public (ResponseType responseType, byte[] eigenvalues) AddFingerprintAndAcquireEigenvalues(ushort userID, UserPermission userPermission)
public ResponseType AddFingerprintAndAcquireEigenvalues(ushort userID, UserPermission userPermission, out Span<byte> eigenvalues)
{
if (userID > MaxUserID)
{
return (ResponseType.Full, null);
eigenvalues = Span<byte>.Empty;
return ResponseType.Full;
}
CommandType[] commands = { CommandType.AddFingerprint1, CommandType.AddFingerprint2 };
@@ -270,12 +271,14 @@ namespace WaveshareUARTFingerprintSensor
{
if (loopResponse.responseType != ResponseType.Success)
{
return (loopResponse.responseType, null);
eigenvalues = Span<byte>.Empty;
return loopResponse.responseType;
}
}
else
{
return (ResponseType.Timeout, null);
eigenvalues = Span<byte>.Empty;
return ResponseType.Timeout;
}
Thread.Sleep(50);
@@ -285,19 +288,21 @@ namespace WaveshareUARTFingerprintSensor
{
if (response.responseType != ResponseType.Success)
{
return (response.responseType, null);
eigenvalues = Span<byte>.Empty;
return response.responseType;
}
ushort length = Utils.Merge(response.first, response.second);
var data = ReadData(length);
var eigenvalues = data.Skip(3).ToArray();
eigenvalues = data.AsSpan(3);
return (ResponseType.Success, eigenvalues);
return ResponseType.Success;
}
else
{
return (ResponseType.Timeout, null);
eigenvalues = Span<byte>.Empty;
return ResponseType.Timeout;
}
}
@@ -447,7 +452,7 @@ namespace WaveshareUARTFingerprintSensor
return false;
}
public bool TryAcquireEigenvalues(out byte[] eigenvalues)
public bool TryAcquireEigenvalues(out Span<byte> eigenvalues)
{
if (TrySendAndReceive(CommandType.AcquireEigenvalues, 0, 0, 0, out var response))
{
@@ -455,13 +460,13 @@ namespace WaveshareUARTFingerprintSensor
{
var length = Utils.Merge(response.first, response.second);
eigenvalues = ReadData(length, skipChecksum: true).Skip(3).ToArray();
eigenvalues = ReadData(length, skipChecksum: true).AsSpan(3);
return true;
}
}
eigenvalues = default;
eigenvalues = Span<byte>.Empty;
return false;
}

View File

@@ -38,8 +38,21 @@
<HintPath>..\packages\Unosquare.Swan.Lite.3.0.0\lib\net461\Swan.Lite.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.ServiceProcess" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>

View File

@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.3" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="Unosquare.Raspberry.Abstractions" version="0.4.1" targetFramework="net472" />
<package id="Unosquare.Raspberry.IO" version="0.27.1" targetFramework="net472" />