Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions GenICam/GenICam.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0;net10.0</TargetFrameworks>
<Platforms>x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>2.3.1</Version>
<Version>2.3.4-local.1</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3.1: Added support for .net10.0
<PackageReleaseNotes>
2.3.4: Local build
2.3.1: Added support for .net10.0
2.3: Improved XML parsing
2.2: Version Update
2.1.5.1: Updated Docs
2.2: Version Update
2.1.5.1: Updated Docs
</PackageReleaseNotes>
</PropertyGroup>

Expand Down
30 changes: 30 additions & 0 deletions GenICam/GenICam_BACKUP_1879.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0;net10.0</TargetFrameworks>
<Platforms>x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<<<<<<< HEAD
<Version>2.3.1</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3.1: Added support for .net10.0
=======
<Version>2.3.4-local</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3.4: Local build
>>>>>>> a89bb8a (Refactor StreamReceiverParallel for improved frame handling and buffer management)
2.3: Improved XML parsing
2.2: Version Update
2.1.5.1: Updated Docs
</PackageReleaseNotes>
</PropertyGroup>


<ItemGroup>
<PackageReference Include="MathParser.org-mXparser" Version="6.1.0" />
<PackageReference Include="Prism.Core" Version="9.0.537" />

</ItemGroup>
</Project>
25 changes: 25 additions & 0 deletions GenICam/GenICam_BASE_1879.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<Platforms>x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>2.3</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3: Improved XML parsing
2.2: Version Update
2.1.5.1: Updated Docs
</PackageReleaseNotes>
</PropertyGroup>


<ItemGroup>
<PackageReference Include="MathParser.org-mXparser" Version="5.0.7" />
<PackageReference Include="Prism.Core" Version="8.1.97" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
23 changes: 23 additions & 0 deletions GenICam/GenICam_LOCAL_1879.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0;net10.0</TargetFrameworks>
<Platforms>x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>2.3.1</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3.1: Added support for .net10.0
2.3: Improved XML parsing
2.2: Version Update
2.1.5.1: Updated Docs
</PackageReleaseNotes>
</PropertyGroup>


<ItemGroup>
<PackageReference Include="MathParser.org-mXparser" Version="6.1.0" />
<PackageReference Include="Prism.Core" Version="9.0.537" />

</ItemGroup>
</Project>
26 changes: 26 additions & 0 deletions GenICam/GenICam_REMOTE_1879.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net5.0;net6.0;net7.0;net8.0</TargetFrameworks>
<Platforms>x64</Platforms>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>2.3.4-local</Version>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReleaseNotes>
2.3.4: Local build
2.3: Improved XML parsing
2.2: Version Update
2.1.5.1: Updated Docs
</PackageReleaseNotes>
</PropertyGroup>


<ItemGroup>
<PackageReference Include="MathParser.org-mXparser" Version="5.0.7" />
<PackageReference Include="Prism.Core" Version="8.1.97" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
23 changes: 23 additions & 0 deletions GenICam/Interfaces/Helpers/IDoubleValue.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.Threading.Tasks;

namespace GenICam
{
/// <summary>
/// Interface for values that can be represented as doubles.
/// </summary>
public interface IDoubleValue
{
/// <summary>
/// Gets the value as a double.
/// </summary>
/// <returns>The value as a double when available.</returns>
public Task<double?> GetDoubleValueAsync();

/// <summary>
/// Sets the value as a double.
/// </summary>
/// <param name="value">The value to set.</param>
/// <returns>The reply packet from the underlying write path.</returns>
public Task<IReplyPacket> SetDoubleValueAsync(double value);
}
}
59 changes: 39 additions & 20 deletions GenICam/Models/Converter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading.Tasks;

Expand All @@ -8,7 +9,7 @@ namespace GenICam
/// <summary>
/// Converter class.
/// </summary>
public class Converter : IMathematical
public class Converter : IMathematical, IDoubleValue
{
private double value;

Expand Down Expand Up @@ -72,7 +73,8 @@ public double Value
/// <returns>The value as a long.</returns>
public async Task<long?> GetValueAsync()
{
return (long)(await ExecuteFormulaFrom());
var result = await GetDoubleValueAsync().ConfigureAwait(false);
return result is null ? null : (long?)Math.Round(result.Value, MidpointRounding.AwayFromZero);
}

/// <summary>
Expand All @@ -82,79 +84,96 @@ public double Value
/// <returns>A <see cref="Task{TResult}"/> representing the result of the asynchronous operation..</returns>
public async Task<IReplyPacket> SetValueAsync(long value)
{
var toValue = await ExecuteFormulaTo(value);
return await PValue.SetValueAsync(toValue);
return await SetDoubleValueAsync(value).ConfigureAwait(false);
}

/// <inheritdoc/>
public async Task<double?> GetDoubleValueAsync()
{
var result = await ExecuteFormulaFrom().ConfigureAwait(false);
Value = result;
return result;
}

/// <inheritdoc/>
public async Task<IReplyPacket> SetDoubleValueAsync(double value)
{
var toValue = await ExecuteFormulaTo(value).ConfigureAwait(false);
Value = value;
return await PValue.SetValueAsync(toValue).ConfigureAwait(false);
}

private async Task<double> ExecuteFormulaFrom()
{
try
{
foreach (var word in FormulaFrom.Split())
var formula = FormulaFrom;
foreach (var word in formula.Split())
{
if (word.Equals("TO"))
{
long? value = await PValue.GetValueAsync();
long? value = await PValue.GetValueAsync().ConfigureAwait(false);

if (value is null)
{
throw new GenICamException("Failed to read formula register value", new NullReferenceException());
}

FormulaFrom = FormulaFrom.Replace(word, string.Format("0x{0:X8}", value));
formula = formula.Replace(word, value.Value.ToString(CultureInfo.InvariantCulture));
}

if (PVariables.ContainsKey(word))
if (PVariables != null && PVariables.ContainsKey(word))
{
long? value = null;

value = await PVariables[word].GetValueAsync();
value = await PVariables[word].GetValueAsync().ConfigureAwait(false);

if (value is null)
{
throw new GenICamException("Failed to read formula register value", new NullReferenceException());
}

FormulaFrom = FormulaFrom.Replace(word, string.Format("0x{0:X8}", value));
formula = formula.Replace(word, value.Value.ToString(CultureInfo.InvariantCulture));
}
}

FormulaFrom = MathParserHelper.FormatExpression(FormulaFrom);
return MathParserHelper.CalculateExpression(FormulaFrom);
formula = MathParserHelper.FormatExpression(formula);
return MathParserHelper.CalculateExpression(formula);
}
catch (Exception ex)
{
throw new GenICamException(message: $"Failed to calculate the given formula {FormulaFrom}", ex);
}
}

private async Task<long> ExecuteFormulaTo(long value)
private async Task<long> ExecuteFormulaTo(double value)
{
try
{
foreach (var word in FormulaTo.Split())
var formula = FormulaTo;
foreach (var word in formula.Split())
{
if (word.Equals("FROM"))
{
FormulaTo = FormulaTo.Replace(word, string.Format("0x{0:X8}", value));
formula = formula.Replace(word, value.ToString(CultureInfo.InvariantCulture));
}

if (PVariables.ContainsKey(word))
if (PVariables != null && PVariables.ContainsKey(word))
{
long? variableValue = null;
variableValue = await PVariables[word].GetValueAsync();
variableValue = await PVariables[word].GetValueAsync().ConfigureAwait(false);

if (variableValue is null)
{
throw new GenICamException("Failed to read formula register value", new NullReferenceException());
}

FormulaTo = FormulaTo.Replace(word, string.Format("0x{0:X8}", variableValue));
formula = formula.Replace(word, variableValue.Value.ToString(CultureInfo.InvariantCulture));
}
}

FormulaTo = MathParserHelper.FormatExpression(FormulaTo);
return (long)MathParserHelper.CalculateExpression(FormulaTo);
formula = MathParserHelper.FormatExpression(formula);
return (long)Math.Round(MathParserHelper.CalculateExpression(formula), MidpointRounding.AwayFromZero);
}
catch (Exception ex)
{
Expand Down
Loading