merege main to dev
This commit is contained in:
commit
ae6432dca2
@ -14,5 +14,5 @@ using System.Reflection;
|
||||
//[assembly: AssemblyVersion("1.2.*.0")]
|
||||
|
||||
|
||||
[assembly: AssemblyVersion("2.6.7.*")]
|
||||
[assembly: AssemblyFileVersion("2.6.7.0")]
|
||||
[assembly: AssemblyVersion("2.6.8.*")]
|
||||
[assembly: AssemblyFileVersion("2.6.8.0")]
|
||||
@ -4,12 +4,21 @@
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Common.Abstraction.csproj
|
||||
<ProjectGuid>{1743B349-E347-4DCF-A106-15AE3F95C3A3}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Common.Abstraction</RootNamespace>
|
||||
<AssemblyName>Common.Abstraction</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
========
|
||||
<ProjectGuid>{197185D3-53B7-41A1-A099-CE9F85D5C8F9}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>LaaProduction.Http</RootNamespace>
|
||||
<AssemblyName>LaaProduction.Http</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/LaaProduction.Http.csproj
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
@ -31,6 +40,9 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
@ -41,10 +53,25 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Common.Abstraction.csproj
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Interfaces\" />
|
||||
========
|
||||
<Compile Include="HttpClient.cs" />
|
||||
<Compile Include="HttpMessage.cs" />
|
||||
<Compile Include="HttpResponse[T].cs" />
|
||||
<Compile Include="Interfaces\IHttpClient.cs" />
|
||||
<Compile Include="Interfaces\IHttpErrorResponse.cs" />
|
||||
<Compile Include="Interfaces\IHttpMessage.cs" />
|
||||
<Compile Include="Interfaces\IHttpResponse[T].cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="README.md" />
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/LaaProduction.Http.csproj
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@ -5,12 +5,21 @@ using System.Runtime.InteropServices;
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Properties/AssemblyInfo.cs
|
||||
[assembly: AssemblyTitle("Common.Abstraction")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Common.Abstraction")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
========
|
||||
[assembly: AssemblyTitle("LaaProduction.Http")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("LaaProduction.Http")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/Properties/AssemblyInfo.cs
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@ -20,7 +29,11 @@ using System.Runtime.InteropServices;
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Properties/AssemblyInfo.cs
|
||||
[assembly: Guid("1743b349-e347-4dcf-a106-15ae3f95c3a3")]
|
||||
========
|
||||
[assembly: Guid("197185d3-53b7-41a1-a099-ce9f85d5c8f9")]
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/Properties/AssemblyInfo.cs
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Newtonsoft.Json;
|
||||
using Xylem.Common.CommonCore.Configuration;
|
||||
using Xylem.Common.CommonCore.Consts;
|
||||
@ -28,45 +29,43 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// <summary>
|
||||
/// PCB ID for pre update read for comparison
|
||||
/// </summary>
|
||||
private String _pcbIdInitialRegisterRead = "X";
|
||||
private String _pcbIdInitialRegisterRead = Constants.StrUnknown;
|
||||
|
||||
/// <summary>
|
||||
/// PCB ID for pre update write for comparison
|
||||
/// </summary>
|
||||
private String _pcbIdRecoveryRegisters = "X";
|
||||
private String _pcbIdRecoveryRegisters = Constants.StrUnknown;
|
||||
|
||||
/// <summary>
|
||||
/// PCB ID for post update for comparison
|
||||
/// </summary>
|
||||
private String _pcbIdFinalRegisterRead = Constants.StrUnknown;
|
||||
|
||||
/// <summary>
|
||||
/// Collection of recovery registers and values
|
||||
/// </summary>
|
||||
public List<RecoveryRegisterItem> RegistersSetup;
|
||||
|
||||
/// <summary>
|
||||
/// Register content on initial connect to keep those during update
|
||||
/// </summary>
|
||||
private readonly MeterRegisters _initialReadRegisters = new MeterRegisters();
|
||||
private MeterRegisters _initialReadRegisters = new MeterRegisters();
|
||||
|
||||
/// <summary>
|
||||
/// Register content after all operation had been performed
|
||||
/// </summary>
|
||||
private readonly MeterRegisters _finalReadRegisters = new MeterRegisters();
|
||||
private MeterRegisters _finalReadRegisters = new MeterRegisters();
|
||||
|
||||
/// <summary>
|
||||
/// Register which shall be restored after change of FW or after register recovery
|
||||
/// </summary>
|
||||
private readonly MeterRegisters _restoreRegisters = new MeterRegisters();
|
||||
private readonly MeterRegisters _recoveryRegisters = new MeterRegisters();
|
||||
|
||||
/// <summary>
|
||||
/// Register access event for message dispatcher to caller
|
||||
/// </summary>
|
||||
public event EventHandler<ProcessExecEventArgs> OnProcessUpdate;
|
||||
|
||||
/// <summary>
|
||||
/// List for parameters which need to be removed from parameter list as they mustn't be accessed
|
||||
/// </summary>
|
||||
private static readonly List<String> _prohibitedParameters = new List<String>
|
||||
{
|
||||
"CUSTOMER_AppArrangement"
|
||||
};
|
||||
/// <summary>
|
||||
/// List for un-reversed parameters, all others need to be swapped byte-wise
|
||||
/// </summary>
|
||||
@ -81,51 +80,70 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// </summary>
|
||||
private static readonly List<String> _excludedFromCompareParameters = new List<String>
|
||||
{
|
||||
"SENSUSRADIO_UpgFWVersion" // After a FW-Update the FW version has changed and the compare will fail
|
||||
"SENSUSRADIO_UpgFWVersion" // After a FW-Update the FW version has changed and the compare will fail
|
||||
};
|
||||
/// <summary>
|
||||
/// Pre programming parameters for all devices defined here, will be filled with radio parameters
|
||||
/// if meter has radio
|
||||
/// </summary>
|
||||
private static readonly List<ProgrammingParameters> _prepareProgramming = new List<ProgrammingParameters>
|
||||
private static readonly List<RecoveryRegisterItem> _prepareProgramming = new List<RecoveryRegisterItem>
|
||||
{
|
||||
// The display needs to be unsealed for change of unit and resolution
|
||||
new ProgrammingParameters("GENESISFLOW_SealDisplay", new Byte[] { 0x00 })
|
||||
new RecoveryRegisterItem("GENESISFLOW_SealDisplay", new Byte[] { 0x00 })
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
// ReSharper disable once CollectionNeverQueried.Local IS FOR DEBUG
|
||||
private readonly List<RecoveryRegisterItem> _failedComparisonRegisters = new List<RecoveryRegisterItem>();
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
// ReSharper disable once CollectionNeverQueried.Local IS FOR DEBUG
|
||||
private List<String> _dbParameterRegisterList = new List<String>();
|
||||
private readonly List<String> _recoveryRegisterList = new List<String>();
|
||||
private List<String> _initialRegisterList = new List<String>();
|
||||
private List<String> _finalRegisterList = new List<String>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Post programming parameters for radio only
|
||||
/// </summary>
|
||||
private static readonly List<ProgrammingParameters> _finalizeProgrammingRadioOnly = new List<ProgrammingParameters>
|
||||
private static readonly List<RecoveryRegisterItem> _finalizeProgrammingRadioOnly = new List<RecoveryRegisterItem>
|
||||
{
|
||||
new ProgrammingParameters("LOGGER_TriggerLogFlush", new Byte[] { 0x01 }),
|
||||
new ProgrammingParameters("PERIODICLOG_ResetCounter", new Byte[] { 0x00 }),
|
||||
new RecoveryRegisterItem("LOGGER_TriggerLogFlush", new Byte[] { 0x01 }),
|
||||
// set counter to 0 as this is a value how often the radio detected a reset
|
||||
new RecoveryRegisterItem("PERIODICLOG_ResetCounter", new Byte[] { 0x00 }),
|
||||
// System state 0xFF will force a storage of all parameters and reset, followed by system state 0x02
|
||||
// for customer mode, the reset needs only a few milliseconds
|
||||
// Attention logout-delay-login required after this step!
|
||||
new ProgrammingParameters("SENSUSRADIO_SystemState", new Byte[] { 0xFF })
|
||||
new RecoveryRegisterItem("SENSUSRADIO_SystemState", new Byte[] { 0xFF })
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Post programming parameters for all devices
|
||||
/// </summary>
|
||||
private static readonly List<ProgrammingParameters> _finalizeProgramming = new List<ProgrammingParameters>
|
||||
private static readonly List<RecoveryRegisterItem> _finalizeProgramming = new List<RecoveryRegisterItem>
|
||||
{
|
||||
new ProgrammingParameters("GENESISFLOW_SealDisplay", new Byte[] { 0x01 }),
|
||||
new ProgrammingParameters("GENESISFLOW_TriggerIdle", new Byte[] { 0x00 }),
|
||||
new RecoveryRegisterItem("GENESISFLOW_SealDisplay", new Byte[] { 0x01 }),
|
||||
// trigger idle 0 releases the display to normal operation
|
||||
new RecoveryRegisterItem("GENESISFLOW_TriggerIdle", new Byte[] { 0x00 }),
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Post programming parameters for EOL (end of line, prepare for shipping workplace)
|
||||
/// </summary>
|
||||
private static readonly List<ProgrammingParameters> _finalizeProgrammingEol = new List<ProgrammingParameters>
|
||||
private static readonly List<RecoveryRegisterItem> _finalizeProgrammingEol = new List<RecoveryRegisterItem>
|
||||
{
|
||||
new ProgrammingParameters("GENESISFLOW_ResetAccumulators", new Byte[] { 0x01 }),
|
||||
new ProgrammingParameters("NFC_EraseRMA", new Byte[] { 0x01 })
|
||||
new RecoveryRegisterItem("GENESISFLOW_ResetAccumulators", new Byte[] { 0x01 }),
|
||||
new RecoveryRegisterItem("NFC_EraseRMA", new Byte[] { 0x01 }),
|
||||
new RecoveryRegisterItem("CUSTOMER_RebootCount", new Byte[] {0x00})
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Actual Port Counter
|
||||
/// Actual register counter
|
||||
/// </summary>
|
||||
public Int32 ActualRegisterCtr;
|
||||
|
||||
@ -179,9 +197,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// <remarks date="2024-01-17" author="Thomas Wiedebusch">
|
||||
/// - Data base access imported to have a common interface for programming parameters for EOL (shipping) and CUST.
|
||||
/// </remarks>
|
||||
public static Boolean DownloadProgrammingParametersFromDb(String pcbId, out List<RecoveryRegisterItem> recoveryRegisters)
|
||||
/// <remarks date="2024-01-29" author="Thomas Wiedebusch">
|
||||
/// - Removed prohibited parameters.
|
||||
/// </remarks>
|
||||
public static Boolean DownloadProgrammingParametersFromDb(String pcbId, List<RecoveryRegisterItem> recoveryRegisters)
|
||||
{
|
||||
recoveryRegisters = new List<RecoveryRegisterItem>();
|
||||
try
|
||||
{
|
||||
var url = $"{ServiceUrls.GenesisFinalCheckServiceUrl()}GetProgrammingParameters?PcbID={pcbId}";
|
||||
@ -207,27 +227,43 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
// reverse byte order for all parameters except those listed below
|
||||
if (!string.IsNullOrEmpty(proPar.RegisterName))
|
||||
{
|
||||
// ATTENTION: These parameters are coming out of the DB and need to be removed from list
|
||||
if (RegisterRestorer._prohibitedParameters.Contains(proPar.RegisterName))
|
||||
{
|
||||
}
|
||||
// ATTENTION: These parameters are coming out of the DB in wrong order
|
||||
if (RegisterRestorer._unRevertedParameters.Contains(proPar.RegisterName))
|
||||
if (_unRevertedParameters.Contains(proPar.RegisterName))
|
||||
{
|
||||
// skip VAKO if equally register is set in CSD or on read only access
|
||||
if (proPar.Source == ProgrammingSource.Vako && sortableProgrammingParameters.Any(a =>
|
||||
a.Source == ProgrammingSource.Csd && proPar.RegisterName.Equals(a.RegisterName)))
|
||||
// Add parameter if it is not in the list
|
||||
if (sortableProgrammingParameters.All(a => !proPar.RegisterName.Equals(a.RegisterName)))
|
||||
{
|
||||
sortableProgrammingParameters.Add(proPar);
|
||||
continue;
|
||||
sortableProgrammingParameters.Add(proPar);
|
||||
}
|
||||
// if parameter from VAKO is in the list and the new is from CSD, replace this with CSD
|
||||
if (proPar.Source == ProgrammingSource.Csd && sortableProgrammingParameters.Any(a =>
|
||||
proPar.RegisterName.Equals(a.RegisterName) && a.Source == ProgrammingSource.Vako))
|
||||
{
|
||||
var removeProPar =
|
||||
sortableProgrammingParameters.Where(a => proPar.RegisterName.Equals(a.RegisterName));
|
||||
sortableProgrammingParameters.Remove(removeProPar.LastOrDefault());
|
||||
sortableProgrammingParameters.Add(proPar);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// skip VAKO if equally register is set in CSD or on read only access
|
||||
if (proPar.Source == ProgrammingSource.Vako && sortableProgrammingParameters.Any(a =>
|
||||
a.Source == ProgrammingSource.Csd && proPar.RegisterName.Equals(a.RegisterName)))
|
||||
// Add parameter if it is not in the list
|
||||
if (sortableProgrammingParameters.All(a => !proPar.RegisterName.Equals(a.RegisterName)))
|
||||
{
|
||||
sortableProgrammingParameters.Add(new ProgrammingParameters(proPar.RegisterName,
|
||||
proPar.RegisterValue.Reverse().ToArray(), proPar.Source));
|
||||
continue;
|
||||
sortableProgrammingParameters.Add(new ProgrammingParameters(proPar.RegisterName,
|
||||
proPar.RegisterValue.Reverse().ToArray(), proPar.Source));
|
||||
}
|
||||
// if parameter from VAKO is in the list and the new is from CSD, replace this with CSD
|
||||
if (proPar.Source == ProgrammingSource.Csd && sortableProgrammingParameters.Any(a =>
|
||||
proPar.RegisterName.Equals(a.RegisterName) && a.Source == ProgrammingSource.Vako))
|
||||
{
|
||||
var removeProPar = sortableProgrammingParameters.Where(a => proPar.RegisterName.Equals(a.RegisterName));
|
||||
sortableProgrammingParameters.Remove(removeProPar.LastOrDefault());
|
||||
sortableProgrammingParameters.Add(new ProgrammingParameters(proPar.RegisterName,
|
||||
proPar.RegisterValue.Reverse().ToArray(), proPar.Source));
|
||||
}
|
||||
}
|
||||
} // register for this FW is defined
|
||||
else
|
||||
@ -245,11 +281,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
{
|
||||
foreach (var proPar in sortableProgrammingParameters)
|
||||
{
|
||||
var recReg = new RecoveryRegisterItem
|
||||
{
|
||||
RegisterIdent = proPar.RegisterName,
|
||||
WriteValue = proPar.RegisterValue
|
||||
};
|
||||
var recReg = new RecoveryRegisterItem(proPar.RegisterName, proPar.RegisterValue);
|
||||
recoveryRegisters.Add(recReg);
|
||||
}
|
||||
}
|
||||
@ -309,7 +341,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// </remarks>
|
||||
public Boolean EolProgrammingRegisters(List<RecoveryRegisterItem> recoveryRegistersDb)
|
||||
{
|
||||
// mark EOL as true to force Accu reset
|
||||
// mark EOL as true to force accu reset
|
||||
return RecoverRegisters(recoveryRegistersDb, true);
|
||||
}
|
||||
|
||||
@ -343,6 +375,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// - Remind pcbId as already recovered before the true return,
|
||||
/// - Exclude lock of repeated execution for EOL.
|
||||
/// </remarks>
|
||||
/// <remarks date="2024-Jan-29" author="Thomas Wiedebusch">
|
||||
/// - Avoid writing of parameters if not writable. The DB delivers parameters which exclusively have to be
|
||||
/// compared to the specified value.
|
||||
/// </remarks>
|
||||
public Boolean RecoverRegisters(List<RecoveryRegisterItem> recoveryRegistersDb, Boolean eolProgramming = false)
|
||||
{
|
||||
if (_currentGenesis == null ||
|
||||
@ -361,6 +397,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
StopRegisterAccess = false;
|
||||
ActualRegisterCtr = 0;
|
||||
|
||||
// Build string list for debug
|
||||
_dbParameterRegisterList.Clear();
|
||||
_dbParameterRegisterList = recoveryRegistersDb.Select(register => register.RegisterIdent).ToList();
|
||||
_dbParameterRegisterList.Sort();
|
||||
|
||||
// write values to Genesis
|
||||
_currentGenesis.ReLogin();
|
||||
if (!_currentGenesis.IsLoggedOn)
|
||||
@ -370,14 +411,17 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
||||
|
||||
// prepare list for finalization depending on SENSUSRADIO installation
|
||||
var finalizeProgrammingAll = new List<ProgrammingParameters>();
|
||||
var finalizeProgrammingAll = new List<RecoveryRegisterItem>();
|
||||
if (recoveryRegistersDb.Any(x => x.RegisterIdent.Contains("SENSUSRADIO")))
|
||||
{
|
||||
finalizeProgrammingAll.AddRange(_finalizeProgrammingRadioOnly);
|
||||
}
|
||||
// add EOL sequence if called
|
||||
// add EOL (shipping reset of accumulators, alarms and setup of manufacturing date)
|
||||
if (eolProgramming)
|
||||
{
|
||||
finalizeProgrammingAll.AddRange(_finalizeProgrammingEol);
|
||||
}
|
||||
|
||||
// standard end of programming sequence
|
||||
finalizeProgrammingAll.AddRange(_finalizeProgramming);
|
||||
|
||||
@ -396,15 +440,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
|
||||
try
|
||||
{
|
||||
_currentGenesis.WriteRegister(prepRecReg.RegisterName, prepRecReg.RegisterValue);
|
||||
_currentGenesis.WriteRegister(prepRecReg.RegisterIdent, prepRecReg.WriteValue);
|
||||
|
||||
// if this call does not throw an exception, the register is present
|
||||
var regDef = meterRegisters.GetRegisterDefinitionByName(prepRecReg.RegisterName);
|
||||
var regDef = meterRegisters.GetRegisterDefinitionByName(prepRecReg.RegisterIdent);
|
||||
|
||||
var strRawAndConvertedValue = "";
|
||||
try
|
||||
{
|
||||
strRawAndConvertedValue = RegisterConverter.GetRegisterContentText(regDef, prepRecReg.RegisterValue);
|
||||
strRawAndConvertedValue = RegisterConverter.GetRegisterContentText(regDef, prepRecReg.WriteValue);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
@ -438,22 +482,26 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
|
||||
try
|
||||
{
|
||||
_currentGenesis.WriteRegister(recReg.RegisterIdent, recReg.WriteValue);
|
||||
|
||||
// if this call does not throw an exception, the register is present
|
||||
var regDef = meterRegisters.GetRegisterDefinitionByName(recReg.RegisterIdent);
|
||||
|
||||
// avoid register write if not allowed
|
||||
if (regDef.RegisterDetail.Privilege.Lvl8 != Access.RW)
|
||||
continue;
|
||||
|
||||
_currentGenesis.WriteRegister(recReg.RegisterIdent, recReg.WriteValue);
|
||||
|
||||
var strRawAndConvertedValue = "";
|
||||
try
|
||||
{
|
||||
strRawAndConvertedValue = RegisterConverter.GetRegisterContentText(regDef, recReg.WriteValue);
|
||||
// replace value in _restoreRegister with the required recovery value
|
||||
_restoreRegisters?.Set(regDef, recReg.WriteValue);
|
||||
_recoveryRegisters?.Set(regDef, recReg.WriteValue);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_currentGenesis.WriteLog("Could not replace register value of " + recReg.RegisterIdent + "; " + ex.Message);
|
||||
// nothing to do
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -483,15 +531,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
|
||||
try
|
||||
{
|
||||
_currentGenesis.WriteRegister(finalRecReg.RegisterName, finalRecReg.RegisterValue);
|
||||
_currentGenesis.WriteRegister(finalRecReg.RegisterIdent, finalRecReg.WriteValue);
|
||||
|
||||
// if this call does not throw an exception, the register is present
|
||||
var regDef = meterRegisters.GetRegisterDefinitionByName(finalRecReg.RegisterName);
|
||||
var regDef = meterRegisters.GetRegisterDefinitionByName(finalRecReg.RegisterIdent);
|
||||
|
||||
var strRawAndConvertedValue = "";
|
||||
try
|
||||
{
|
||||
strRawAndConvertedValue = RegisterConverter.GetRegisterContentText(regDef, finalRecReg.RegisterValue);
|
||||
strRawAndConvertedValue = RegisterConverter.GetRegisterContentText(regDef, finalRecReg.WriteValue);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
@ -519,6 +567,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
_pcbIdRecoveryRegisters = _currentGenesis.PcbId;
|
||||
|
||||
_currentGenesis?.Logout();
|
||||
|
||||
// Wait for completion as storing needs a certain time
|
||||
Thread.Sleep(1000);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -542,19 +594,23 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// <remarks date="2023-Dec-11" author="Thomas Wiedebusch">
|
||||
/// - Avoid message event if message is empty.
|
||||
/// </remarks>
|
||||
/// <remarks date="2024-Jan-23" author="Thomas Wiedebusch">
|
||||
/// - Remind registers which failed the comparison including values.
|
||||
/// </remarks>
|
||||
public Boolean CompareRegisters()
|
||||
{
|
||||
if (_pcbIdFinalRegisterRead != _pcbIdInitialRegisterRead ||
|
||||
_restoreRegisters == null ||
|
||||
_recoveryRegisters == null ||
|
||||
_finalReadRegisters == null)
|
||||
return false;
|
||||
|
||||
StopRegisterAccess = false;
|
||||
ActualRegisterCtr = 0;
|
||||
var retVal = true;
|
||||
_failedComparisonRegisters?.Clear();
|
||||
|
||||
// build a string list of the registers being able to sort those
|
||||
var registerNames = _restoreRegisters.MeterRegisterDic.Select(register => register.Key.GetIdent()).ToList();
|
||||
var registerNames = _recoveryRegisters.MeterRegisterDic.Select(register => register.Key.GetIdent()).ToList();
|
||||
// Remove all excluded registers
|
||||
foreach (var regName in _excludedFromCompareParameters.Where(regName => registerNames.Any(reg => reg == regName)))
|
||||
{
|
||||
@ -570,14 +626,14 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
{
|
||||
ActualRegisterCtr++;
|
||||
|
||||
var regDef = _restoreRegisters.GetRegisterDefinitionByName(regName);
|
||||
var regDef = _recoveryRegisters.GetRegisterDefinitionByName(regName);
|
||||
|
||||
var overallProcessCtrPercent = 100.0 * ActualRegisterCtr / registersCount;
|
||||
|
||||
try
|
||||
{
|
||||
// Get the raw byte array of this register
|
||||
var restorableRawRegister = _restoreRegisters.Get(regName);
|
||||
var restorableRawRegister = _recoveryRegisters.Get(regName);
|
||||
var finalReadRawRegister = _finalReadRegisters.Get(regName);
|
||||
|
||||
// take the size into account as a read value will be filled up to a chunk of 4 bytes
|
||||
@ -661,6 +717,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
|
||||
strRequiredRegisterValue += $" - {Resources.StrMeterValue}: ({strReadBackRegisterValue})" +
|
||||
$" - {Resources.StrRegisterCompareFailed}";
|
||||
_failedComparisonRegisters?.Add(new RecoveryRegisterItem(regName, restorableRawRegister,
|
||||
finalReadRawRegister));
|
||||
retVal = false;
|
||||
}
|
||||
}
|
||||
@ -728,23 +786,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
return false;
|
||||
}
|
||||
|
||||
// get the pre-defined dictionary
|
||||
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
||||
|
||||
// extract all registers which can be read and create two dictionaries for before update to safe program
|
||||
// internally the register content for comparison ability.
|
||||
foreach (var reg in meterRegisters.MeterRegisterDic.Where(r => r.Key.RegisterDetail?.Version.First != null
|
||||
&& r.Key.RegisterDetail.Version.Last != null && r.Key.RestoreCapability.StaticTypeValue != null
|
||||
&& r.Key.DataType != typeof(Rpc) && r.Key.IsAvailable &&
|
||||
(r.Key.RegisterDetail.Privilege.Lvl8 == Access.RW || r.Key.RegisterDetail.Privilege.Lvl8 == Access.RO)))
|
||||
{
|
||||
_finalReadRegisters.MeterRegisterDic.TryAdd(reg.Key, reg.Value);
|
||||
}
|
||||
// create a dictionary for final read being able to compare those with the initial read and restored
|
||||
if (!BuildReadableRegisterDictionary(ref _finalReadRegisters))
|
||||
return false;
|
||||
|
||||
// log to report file the after update register read string
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($@"{Resources.StrReadRegister}", 0,
|
||||
Resources.StrReadRegistersAfterUpdate));
|
||||
|
||||
// Build string list for debug
|
||||
_finalRegisterList.Clear();
|
||||
_finalRegisterList = _finalReadRegisters.MeterRegisterDic.Select(register => register.Key.GetIdent()).ToList();
|
||||
_finalRegisterList.Sort();
|
||||
|
||||
// executes login read logout
|
||||
return ReadRegistersSet(_finalReadRegisters);
|
||||
}
|
||||
@ -785,13 +839,83 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
// deny update of registers if already done
|
||||
if (_pcbIdInitialRegisterRead == _currentGenesis.PcbId &&
|
||||
_initialReadRegisters.MeterRegisterDic.Count > 0 &&
|
||||
_restoreRegisters.MeterRegisterDic.Count > 0)
|
||||
_recoveryRegisters.MeterRegisterDic.Count > 0)
|
||||
return true;
|
||||
|
||||
// remind the PCB ID before update for comparison
|
||||
_pcbIdInitialRegisterRead = _currentGenesis.PcbId;
|
||||
_initialReadRegisters.MeterRegisterDic.Clear();
|
||||
_restoreRegisters.MeterRegisterDic.Clear();
|
||||
|
||||
// create the dictionaries out of the configuration.json
|
||||
if (!BuildInitialDictionaries())
|
||||
return false;
|
||||
|
||||
// log to report file the initial register read string
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($@"{Resources.StrReadRegister}", 0,
|
||||
Resources.StrReadRegistersBeforeUpdate));
|
||||
|
||||
return ReadRegistersSet(_initialReadRegisters, _recoveryRegisters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get DEFINED registers from GenesisMeter class and build a list all registers which are flagged
|
||||
/// with read write (RW) or read only (RO). Build a list of all registers being able to restore flagged
|
||||
/// with <see cref="StaticType"/> equals <see cref="StaticType.RestoreRequired"/>".
|
||||
/// The defined registers are based on the "configuration.json" and the installed application with
|
||||
/// a specific version.
|
||||
/// </summary>
|
||||
/// <returns>true if registers could be read</returns>
|
||||
/// <remarks date="2024-Jan-22" author="Thomas Wiedebusch">
|
||||
/// - Initial from <see cref="InitialReadRegisters"/>.
|
||||
/// </remarks>
|
||||
private Boolean BuildInitialDictionaries()
|
||||
{
|
||||
if (_currentGenesis == null)
|
||||
return false;
|
||||
|
||||
_recoveryRegisters.MeterRegisterDic.Clear();
|
||||
_recoveryRegisterList.Clear();
|
||||
|
||||
// create a dictionary for initial read being able to compare those with the final read and restored
|
||||
if (!BuildReadableRegisterDictionary(ref _initialReadRegisters))
|
||||
return false;
|
||||
|
||||
// take the pre-selected registers for final compare restore capability check even if the registers after
|
||||
// the update may have changed, only registers which are present before the update can be restored!
|
||||
foreach (var reg in _initialReadRegisters.MeterRegisterDic.Where(r =>
|
||||
r.Key.RestoreCapability.CheckRestoreCapability() &&
|
||||
r.Key.RegisterDetail.Privilege.Lvl8 == Access.RW))
|
||||
{
|
||||
_recoveryRegisters.MeterRegisterDic.TryAdd(reg.Key, reg.Value);
|
||||
_recoveryRegisterList.Add(reg.Key.GetIdent());
|
||||
}
|
||||
_recoveryRegisterList.Sort();
|
||||
|
||||
// Build string list for debug
|
||||
_initialRegisterList.Clear();
|
||||
_initialRegisterList = _initialReadRegisters.MeterRegisterDic.Select(register => register.Key.GetIdent()).ToList();
|
||||
_initialRegisterList.Sort();
|
||||
|
||||
return _recoveryRegisters.MeterRegisterDic.Count > 0 && _initialReadRegisters.MeterRegisterDic.Count > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get DEFINED registers from GenesisMeter class and build a list all registers which are flagged
|
||||
/// with read write (RW) or read only (RO).
|
||||
/// The defined registers are based on the "configuration.json" and the installed application with
|
||||
/// a specific version.
|
||||
/// </summary>
|
||||
/// <para name = "registers">all readable registers dictionary creation </para>
|
||||
/// <returns>true if register dictionary is not empty</returns>
|
||||
/// <returns>true if registers could be read</returns>
|
||||
/// <remarks date="2024-Jan-22" author="Thomas Wiedebusch">
|
||||
/// - Initial from <see cref="InitialReadRegisters"/>.
|
||||
/// </remarks>
|
||||
private Boolean BuildReadableRegisterDictionary(ref MeterRegisters registers)
|
||||
{
|
||||
if (_currentGenesis == null || registers?.MeterRegisterDic == null)
|
||||
return false;
|
||||
|
||||
registers.MeterRegisterDic.Clear();
|
||||
|
||||
// get the pre-defined dictionary
|
||||
var meterRegisters = _currentGenesis.GetConfigRegistersDefinitions();
|
||||
@ -803,23 +927,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
&& r.Key.DataType != typeof(Rpc) && r.Key.IsAvailable &&
|
||||
(r.Key.RegisterDetail.Privilege.Lvl8 == Access.RW || r.Key.RegisterDetail.Privilege.Lvl8 == Access.RO)))
|
||||
{
|
||||
_initialReadRegisters.MeterRegisterDic.TryAdd(reg.Key, reg.Value);
|
||||
registers.MeterRegisterDic.TryAdd(reg.Key, reg.Value);
|
||||
}
|
||||
|
||||
// take the pre-selected registers for final compare restore capability check even if the registers after
|
||||
// the update may have changed, only registers which are present before the update can be restored!
|
||||
foreach (var reg in _initialReadRegisters.MeterRegisterDic.Where(r =>
|
||||
r.Key.RestoreCapability.CheckRestoreCapability() &&
|
||||
r.Key.RegisterDetail.Privilege.Lvl8 == Access.RW))
|
||||
{
|
||||
_restoreRegisters.MeterRegisterDic.TryAdd(reg.Key, reg.Value);
|
||||
}
|
||||
|
||||
// log to report file the initial register read string
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($@"{Resources.StrReadRegister}", 0,
|
||||
Resources.StrReadRegistersBeforeUpdate));
|
||||
|
||||
return ReadRegistersSet(_initialReadRegisters, _restoreRegisters);
|
||||
return registers.MeterRegisterDic.Count > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -7,6 +7,24 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
|
||||
/// </summary>
|
||||
public class RecoveryRegisterItem
|
||||
{
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
public RecoveryRegisterItem()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ctor for write access parameter setup
|
||||
/// </summary>
|
||||
public RecoveryRegisterItem(String registerIdent, Byte[] writeValue, Byte[] readBackValue = null)
|
||||
{
|
||||
RegisterIdent = registerIdent;
|
||||
WriteValue = writeValue;
|
||||
ReadBackValue = readBackValue;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Register name, use the latest configuration.json to make sure that the address will be correct
|
||||
/// </summary>
|
||||
|
||||
@ -1 +1 @@
|
||||
c43c40a030005a8f189e6179faf40a6d42bfef5c
|
||||
bf6bb8fceb3db5a9977dadc407cf576684bf7127
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("OmniPlus")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("OmniPlus")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("f8d84b9a-0fcf-4083-b067-8c39b7314152")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@ -1 +1 @@
|
||||
65d75c3322f8a137c69963cfdc0cb6f1ffacf62a
|
||||
247396738e2c5d26ac00f9df05c0cc5c61d7f33a
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
namespace Xylem.Common.Ui.GenesisToolBox.Infrastructure
|
||||
{
|
||||
internal class ADLoginModel
|
||||
internal class LDAPLoginModel
|
||||
{
|
||||
public string Assembly { get; set; }
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
var version = SoftwareVersion.Current;
|
||||
var user = new LDAPUser();
|
||||
|
||||
Login(new ADLoginModel
|
||||
Login(new LDAPLoginModel
|
||||
{
|
||||
Assembly = version.AssemblyName.Name,
|
||||
Email = user.Email,
|
||||
@ -47,8 +47,8 @@
|
||||
/// <summary>
|
||||
/// Sends login request and obtains an bearer authorization token.
|
||||
/// </summary>
|
||||
/// <param name="model"><see cref="ADLoginModel"/> - containing all software and user info required for authentication.</param>
|
||||
public static void Login(ADLoginModel model)
|
||||
/// <param name="model"><see cref="LDAPLoginModel"/> - containing all software and user info required for authentication.</param>
|
||||
public static void Login(LDAPLoginModel model)
|
||||
{
|
||||
var authenticationResponse = LocalWebRequest.PostRequestAndGetResponseAsync(
|
||||
url: $"{ServiceUrls.LaaProductionAPI}/LaaProductionWeb/API/Login/AD",
|
||||
|
||||
@ -10,6 +10,6 @@
|
||||
|
||||
IHttpMessage Post(string url);
|
||||
|
||||
IHttpMessage Put(string route);
|
||||
IHttpMessage Put(string url);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,12 +4,21 @@
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{EB19F145-1E59-47A4-957A-E287497227B9}</ProjectGuid>
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Common.Abstraction.csproj
|
||||
<ProjectGuid>{1743B349-E347-4DCF-A106-15AE3F95C3A3}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Common.Abstraction</RootNamespace>
|
||||
<AssemblyName>Common.Abstraction</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
========
|
||||
<ProjectGuid>{197185D3-53B7-41A1-A099-CE9F85D5C8F9}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>LaaProduction.Http</RootNamespace>
|
||||
<AssemblyName>LaaProduction.Http</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/LaaProduction.Http.csproj
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
@ -44,6 +53,12 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Common.Abstraction.csproj
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Interfaces\" />
|
||||
========
|
||||
<Compile Include="HttpClient.cs" />
|
||||
<Compile Include="HttpMessage.cs" />
|
||||
<Compile Include="HttpResponse[T].cs" />
|
||||
@ -56,6 +71,7 @@
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
<None Include="README.md" />
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/LaaProduction.Http.csproj
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@ -5,12 +5,21 @@ using System.Runtime.InteropServices;
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Properties/AssemblyInfo.cs
|
||||
[assembly: AssemblyTitle("Common.Abstraction")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Common.Abstraction")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2023")]
|
||||
========
|
||||
[assembly: AssemblyTitle("LaaProduction.Http")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("LaaProduction.Http")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/Properties/AssemblyInfo.cs
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@ -20,7 +29,11 @@ using System.Runtime.InteropServices;
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("eb19f145-1e59-47a4-957a-e287497227b9")]
|
||||
<<<<<<<< HEAD:Common/CommonCore/Common.Abstraction/Properties/AssemblyInfo.cs
|
||||
[assembly: Guid("1743b349-e347-4dcf-a106-15ae3f95c3a3")]
|
||||
========
|
||||
[assembly: Guid("197185d3-53b7-41a1-a099-ce9f85d5c8f9")]
|
||||
>>>>>>>> main:LaaProductionWeb/LaaProduction.Http/Properties/AssemblyInfo.cs
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
|
||||
@ -75,7 +75,7 @@
|
||||
return new ClaimsPrincipal(claimsIdentity);
|
||||
}
|
||||
|
||||
public string Login(ADLoginModel model)
|
||||
public string Login(LDAPLoginModel model)
|
||||
{
|
||||
var softwareId = this.GetOrCreateSoftwareId(
|
||||
model.Assembly,
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
{
|
||||
IPrincipal GetClaimsPrincipal(string token);
|
||||
|
||||
string Login(ADLoginModel model);
|
||||
string Login(LDAPLoginModel model);
|
||||
|
||||
string Login(UserLoginModel model);
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
{
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
public class ADLoginModel
|
||||
public class LDAPLoginModel
|
||||
{
|
||||
[Required]
|
||||
public string Assembly { get; set; }
|
||||
@ -13,7 +13,6 @@
|
||||
|
||||
public int BuildV { get; set; }
|
||||
|
||||
[Range(1, int.MaxValue)]
|
||||
public int EmployeeId { get; set; }
|
||||
|
||||
[Required]
|
||||
@ -24,9 +23,11 @@
|
||||
|
||||
[Required]
|
||||
public string Username { get; set; }
|
||||
|
||||
|
||||
[Required]
|
||||
public string Phone { get; set; }
|
||||
|
||||
|
||||
[Required]
|
||||
public string Email { get; set; }
|
||||
}
|
||||
}
|
||||
@ -47,7 +47,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ADLoginModel.cs" />
|
||||
<Compile Include="LDAPLoginModel.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UserLoginModel.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -13,7 +13,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProduction.SharedModels"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb", "LaaProductionWeb\LaaProductionWeb.csproj", "{DBBFBA08-138C-4115-85F6-FE6DA4E190AC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProduction.Http", "LaaProduction.Http\LaaProduction.Http.csproj", "{EB19F145-1E59-47A4-957A-E287497227B9}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProduction.Http", "LaaProduction.Http\LaaProduction.Http.csproj", "{197185D3-53B7-41A1-A099-CE9F85D5C8F9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -41,10 +41,10 @@ Global
|
||||
{DBBFBA08-138C-4115-85F6-FE6DA4E190AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DBBFBA08-138C-4115-85F6-FE6DA4E190AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DBBFBA08-138C-4115-85F6-FE6DA4E190AC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EB19F145-1E59-47A4-957A-E287497227B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EB19F145-1E59-47A4-957A-E287497227B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EB19F145-1E59-47A4-957A-E287497227B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EB19F145-1E59-47A4-957A-E287497227B9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{197185D3-53B7-41A1-A099-CE9F85D5C8F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{197185D3-53B7-41A1-A099-CE9F85D5C8F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{197185D3-53B7-41A1-A099-CE9F85D5C8F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{197185D3-53B7-41A1-A099-CE9F85D5C8F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
internal static class APIExtensions
|
||||
{
|
||||
public static string Content(this ModelStateDictionary modelStateDictionary)
|
||||
public static object Errors(this ModelStateDictionary modelStateDictionary)
|
||||
{
|
||||
var errors = new Dictionary<string, string>();
|
||||
|
||||
@ -32,7 +32,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
return JsonConvert.SerializeObject(errors, Formatting.Indented);
|
||||
return errors;
|
||||
}
|
||||
|
||||
public static string ErrorsJson(this ModelStateDictionary modelStateDictionary)
|
||||
{
|
||||
return JsonConvert.SerializeObject(modelStateDictionary.Errors(), Formatting.Indented);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -27,44 +27,30 @@
|
||||
|
||||
[HttpPost]
|
||||
[Route(nameof(AD))]
|
||||
public IHttpActionResult AD([FromBody] ADLoginModel model)
|
||||
public IHttpActionResult AD([FromBody] LDAPLoginModel model)
|
||||
{
|
||||
if (this.ModelState.IsValid)
|
||||
if (!this.ModelState.IsValid)
|
||||
{
|
||||
var bearer = this.accountManager.Login(model);
|
||||
|
||||
return this.Json(bearer);
|
||||
return this.BadRequest(this.ModelState.ErrorsJson());
|
||||
}
|
||||
|
||||
return this.BadRequest(this.ModelState);
|
||||
var bearer = this.accountManager.Login(model);
|
||||
|
||||
return this.Json(bearer);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Route(nameof(Local))]
|
||||
public IHttpActionResult Local([FromBody] UserLoginModel model)
|
||||
{
|
||||
if (this.ModelState.IsValid)
|
||||
if (!this.ModelState.IsValid)
|
||||
{
|
||||
var bearer = this.accountManager.Login(model);
|
||||
|
||||
return this.Json(bearer);
|
||||
return this.BadRequest(this.ModelState.ErrorsJson());
|
||||
}
|
||||
|
||||
return this.BadRequest(this.ModelState);
|
||||
}
|
||||
var bearer = this.accountManager.Login(model);
|
||||
|
||||
[HttpPost]
|
||||
[Route(nameof(New))]
|
||||
public IHttpActionResult New([FromBody] UserLoginModel model)
|
||||
{
|
||||
if (this.ModelState.IsValid)
|
||||
{
|
||||
var bearer = this.accountManager.Login(model);
|
||||
|
||||
return this.Json(bearer);
|
||||
}
|
||||
|
||||
return this.BadRequest(this.ModelState);
|
||||
return this.Json(bearer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
{
|
||||
return this.ResponseMessage(new HttpResponseMessage
|
||||
{
|
||||
Content = new StringContent(this.ModelState.Content()),
|
||||
Content = new StringContent(this.ModelState.ErrorsJson()),
|
||||
RequestMessage = this.Request,
|
||||
StatusCode = HttpStatusCode.BadRequest,
|
||||
Version = this.Request.Version
|
||||
|
||||
@ -45,9 +45,6 @@
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="ExchangeHub">
|
||||
<HintPath>..\..\Common\ExchangeHub\bin\Debug\ExchangeHub.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="LaaProductionDI, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\LaaProductionDI.1.0.4\lib\netstandard2.0\LaaProductionDI.dll</HintPath>
|
||||
</Reference>
|
||||
@ -94,6 +91,9 @@
|
||||
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SIRTBroadcaster.Abstraction">
|
||||
<HintPath>..\..\Common\SIRTBroadcaster.Abstraction\bin\Debug\SIRTBroadcaster.Abstraction.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Swashbuckle.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1bb07a5ac7c7bc, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath>
|
||||
</Reference>
|
||||
@ -173,8 +173,6 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="API\APIExtensions.cs" />
|
||||
<Compile Include="API\LoginController.cs" />
|
||||
<Compile Include="API\RegisterController.cs" />
|
||||
<Compile Include="API\SendController.cs" />
|
||||
<Compile Include="API\Personalization\EmployeesController.cs" />
|
||||
<Compile Include="API\Personalization\RolesController.cs" />
|
||||
<Compile Include="API\Personalization\SoftwareController.cs" />
|
||||
@ -185,7 +183,6 @@
|
||||
<Compile Include="App_Infrastructure\Appsettings.cs" />
|
||||
<Compile Include="App_Infrastructure\AuthorizationFilter.cs" />
|
||||
<Compile Include="App_Infrastructure\AuthorizeBearerAttribute.cs" />
|
||||
<Compile Include="App_Infrastructure\DebugTraceListener.cs" />
|
||||
<Compile Include="App_Infrastructure\HttpExtensions.cs" />
|
||||
<Compile Include="App_Infrastructure\RouteParameterAttribute.cs" />
|
||||
<Compile Include="App_Start\BundleConfig.cs" />
|
||||
@ -219,11 +216,11 @@
|
||||
<Compile Include="Controllers\ReportController.cs" />
|
||||
<Compile Include="Controllers\SearchController.cs" />
|
||||
<Compile Include="Controllers\ShipmentsController.cs" />
|
||||
<Compile Include="API\ValuesController.cs" />
|
||||
<Compile Include="Controllers\ValuesController.cs" />
|
||||
<Compile Include="Global.asax.cs">
|
||||
<DependentUpon>Global.asax</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Hubs\ExchangeHub.cs" />
|
||||
<Compile Include="Hubs\SIRTBroadcasterHub.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="App_Start\StartupConfig.cs" />
|
||||
</ItemGroup>
|
||||
@ -239,7 +236,6 @@
|
||||
<Content Include="favicon.svg" />
|
||||
<Content Include="Global.asax" />
|
||||
<Content Include="Properties\PublishProfiles\FolderProfile.pubxml.user" />
|
||||
<Content Include="API\SendController.cs.sql" />
|
||||
<Content Include="Web.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
@ -262,7 +258,6 @@
|
||||
<Content Include="Areas\Personalization\Views\Software\Details.cshtml" />
|
||||
<Content Include="Areas\Personalization\Views\Software\Index.cshtml" />
|
||||
<Content Include="Areas\Personalization\Views\Web.config" />
|
||||
<Content Include="App_Content\json\chart.json" />
|
||||
<None Include="packages.config" />
|
||||
<Content Include="Views\Approvals\Add.cshtml" />
|
||||
<Content Include="Views\Protocol\Clients.cshtml" />
|
||||
@ -294,12 +289,10 @@
|
||||
<Content Include="Views\Equipments\Software.cshtml" />
|
||||
<Content Include="Views\Protocol\Files.cshtml" />
|
||||
<Content Include="Views\Protocol\Results.cshtml" />
|
||||
<Content Include="Views\Search\Passwords.cshtml" />
|
||||
<Content Include="Views\Home\Chart.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\LaaProduction.Http\LaaProduction.Http.csproj">
|
||||
<Project>{EB19F145-1E59-47A4-957A-E287497227B9}</Project>
|
||||
<Project>{197185D3-53B7-41A1-A099-CE9F85D5C8F9}</Project>
|
||||
<Name>LaaProduction.Http</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LaaProduction.Personalization\LaaProduction.Personalization.csproj">
|
||||
|
||||
@ -26,6 +26,11 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
[Serializable]
|
||||
public class FwUpdateDb
|
||||
{
|
||||
|
||||
private const Int32 shortTimeoutDbRequest = 2000;
|
||||
private const Int32 moderateTimeoutDbRequest = 10000;
|
||||
private const Int32 hugeTimeoutDbRequest = 30000;
|
||||
|
||||
/// <summary>
|
||||
/// DB connection cannot be established.
|
||||
/// </summary>
|
||||
@ -144,7 +149,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.GetSoftwareLicenseUrl();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url + programName, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url + programName, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -186,7 +191,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
$"&Major={swLicense.Major}" +
|
||||
$"&Minor={swLicense.Minor}" +
|
||||
$"&Build={swLicense.Build}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
var ret = bool.Parse(requestResponse.Trim('"'));
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
@ -229,7 +234,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
url += $"{swLicense.Program}&Major={swLicense.Major}&Minor={swLicense.Minor}" +
|
||||
$"&Build={swLicense.Build}&ValidTo={swLicense.ValidTo:yyyy-MM-ddTHH:mm:ss}" +
|
||||
$"&Description={swLicense.Description ?? "null"}&ProgramNameIsUnique={swLicense.ProgramNameIsUnique}";
|
||||
var requestResponse = LocalWebRequest.PostRequestAsyncAndGetContent(url, 1200);
|
||||
var requestResponse = LocalWebRequest.PostRequestAsyncAndGetContent(url, moderateTimeoutDbRequest);
|
||||
if (requestResponse != null && string.IsNullOrEmpty(requestResponse) &&
|
||||
!JsonConvert.DeserializeObject<Boolean>(requestResponse))
|
||||
{
|
||||
@ -266,9 +271,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
/// <remarks date="2024-01-17" author="Thomas Wiedebusch">
|
||||
/// - Use common interface for programming parameters for EOL (shipping) and CUST from <see cref="RegisterRestorer"/>.
|
||||
/// </remarks>
|
||||
public Boolean DownloadCordonelRecoveryRegistersFromDb(String pcbId, out List<RecoveryRegisterItem> recoveryRegisters)
|
||||
public Boolean DownloadCordonelRecoveryRegistersFromDb(String pcbId, ref List<RecoveryRegisterItem> recoveryRegisters)
|
||||
{
|
||||
if (!RegisterRestorer.DownloadProgrammingParametersFromDb(pcbId, out recoveryRegisters))
|
||||
if (!RegisterRestorer.DownloadProgrammingParametersFromDb(pcbId, recoveryRegisters))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
@ -321,8 +326,13 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
if (meterPwdDb == null )
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
passwordContainer.PcbId = pcbId;
|
||||
passwordContainer.SkeletonKey =
|
||||
Encoding.UTF8.GetString(meterPwdDb.ListOfPasswords[MeterPwdDb.SkeletonKeyIdx]);
|
||||
@ -332,13 +342,15 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
// Use the standard constructor as writing to meter is not necessary
|
||||
var meterPwdFile = new MeterPwdFile();
|
||||
// The BuildPwdFile has an extended validation check
|
||||
var retBol = meterPwdFile.BuildPwdFile(meterPwdDb.ListOfPasswords, 1, passwordContainer.SkeletonKey);
|
||||
var retBol =
|
||||
meterPwdFile.BuildPwdFile(meterPwdDb.ListOfPasswords, 1, passwordContainer.SkeletonKey);
|
||||
|
||||
if (!retBol)
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
passwordContainer.EncryptedPasswordFile = new Byte[MeterPwdDb.PwdFileLength];
|
||||
passwordContainer.EncryptedPasswordFile = meterPwdFile.HashedPasswordFile;
|
||||
|
||||
@ -347,6 +359,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
hashList.AddRange(hash);
|
||||
}
|
||||
|
||||
var pwdControllerPwdFile = hashList.ToArray();
|
||||
//passwordContainer.EncryptedPasswordFile = hashList.ToArray();
|
||||
|
||||
@ -408,7 +421,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateUsersServiceUrl();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -456,7 +469,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateBuilderOperatorsServiceUrl();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -486,7 +499,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllSwPackages();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -516,7 +529,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
// download content
|
||||
url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent=true";
|
||||
requestResponse = LocalWebRequest.GetRequest(url, 15000);
|
||||
requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -547,7 +560,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllConfigurationFilePackages();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -577,7 +590,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
// download content
|
||||
url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent=true";
|
||||
requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -612,7 +625,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateSafes();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -653,7 +666,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateSafesForUserServiceUrl();
|
||||
url += $"{userId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -691,7 +704,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent={readContent}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -729,7 +742,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent={readContent}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -769,7 +782,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllCordonelCustomersWithFilterServiceUrl();
|
||||
url += searchPattern;
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -810,7 +823,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllCordonelCustomerOrdersServiceUrl();
|
||||
url += $@"{customerNumber}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -848,7 +861,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllOrderCordonelsServiceUrl();
|
||||
url += $@"{orderNumber}&CustomerOrderPos={orderPos}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -882,7 +895,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllCordonelFwPackagesUrl();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -916,7 +929,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.GetFwUpdateUserByIdServiceUrl();
|
||||
url += "0";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1025,7 +1038,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
$"&HardwareId={dbNewUser.HardwareId}" +
|
||||
$"&PasswordHash={dbNewUser.PasswordHash} +" +
|
||||
$"&ValidDate={validDateTime:yyyy-MM-ddTHH:mm:ss}&AccountActive=true";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1077,7 +1090,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.RefreshFwUpdateUsersPasswordHashServiceUrl();
|
||||
url += $"{dbUserId}&PasswordHash={dbUserPwdHash}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1124,7 +1137,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
var validDateTime = DateTimeServer.SetValidationDate(FwUpdateConfig.Consts.FwUpdateConfig.ValidDays);
|
||||
var url = ServiceUrls.EditFwUpdateUserValidityServiceUrl();
|
||||
url += $"{dbUserId}&ValidDate={validDateTime:yyyy-MM-ddTHH:mm:ss}&AccountActive=true";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1173,7 +1186,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.RefreshFwUpdateUsersHardwareIdServiceUrl();
|
||||
url += $"{dbUserId}&HardwareId={dbHwId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, moderateTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1421,7 +1434,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFwUpdateSafeServiceUrl();
|
||||
url += $"{containerId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1455,7 +1468,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllPcbIdsFromSafe();
|
||||
url += $"{containerId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1491,7 +1504,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFileContentServiceUrl();
|
||||
url += "{filePartId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1559,7 +1572,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
|
||||
url += $"&readContent={readContent}";
|
||||
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 20000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@ -1596,7 +1609,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.UploadFwUpdateReportServiceUrl();
|
||||
|
||||
if (LocalWebRequest.PostRequestAsync(url, 10000, fwUpdRpt))
|
||||
if (LocalWebRequest.PostRequestAsync(url, hugeTimeoutDbRequest, fwUpdRpt))
|
||||
{
|
||||
DbIsConnected = true;
|
||||
return true;
|
||||
@ -1646,7 +1659,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
|
||||
url = ServiceUrls.AddPcbIdsToSafeServiceUrl();
|
||||
url += containerId;
|
||||
if (LocalWebRequest.PostRequestAsync(url, 10000, pcbIds))
|
||||
if (LocalWebRequest.PostRequestAsync(url, hugeTimeoutDbRequest, pcbIds))
|
||||
{
|
||||
DbIsConnected = true;
|
||||
return true;
|
||||
@ -1689,7 +1702,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
url += $"{pcbId}&ProgressName={Assembly.GetExecutingAssembly().GetName().Name}";
|
||||
url += $"&version={Assembly.GetExecutingAssembly().GetName().Version}";
|
||||
|
||||
if (LocalWebRequest.PostRequestAsync(url, 1200, apps))
|
||||
if (LocalWebRequest.PostRequestAsync(url, moderateTimeoutDbRequest, apps))
|
||||
{
|
||||
DbIsConnected = true;
|
||||
return true;
|
||||
@ -1725,7 +1738,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
var url = ServiceUrls.DownloadCordonelAppVersionServiceUrl();
|
||||
url += $"{pcbId}&returnRadioFRQ=true";
|
||||
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, hugeTimeoutDbRequest);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
|
||||
@ -19,6 +19,7 @@ using Xylem.Common.CommonCore.Consts;
|
||||
using Xylem.Common.CommonCore.ThreadWatcher;
|
||||
using Xylem.Common.Cryptology.Security;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
||||
using Xylem.Common.Logic.ProductionOrderCore.FW;
|
||||
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
|
||||
using Xylem.Common.Utils.DateTimeServer;
|
||||
@ -1344,7 +1345,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
|
||||
//_cordonelUpdateList[0].CustomerSerialNumber = "8 SEN20 1975 6272";
|
||||
//_cordonelUpdateList[0].PcbId = "182100041";
|
||||
//GetPwdFromDb(_cordonelUpdateList[0]);
|
||||
//fwUpdateSafe.License.Build = 5;
|
||||
//fwUpdateSafe.License.Build = 6;
|
||||
//var dateTime = fwUpdateSafe.License.ValidTo.AddDays(-1);
|
||||
//fwUpdateSafe.License.ValidTo = dateTime;
|
||||
//var addDays = fwUpdateSafe.SafeInfo.FwUpdateValidDate.AddDays(-1);
|
||||
@ -5085,8 +5086,9 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
|
||||
var reties = 2;
|
||||
do
|
||||
{
|
||||
cordonel.RecoveryRegisters = new List<RecoveryRegisterItem>();
|
||||
if (_fwUpdateDbAccess == null ||
|
||||
!_fwUpdateDbAccess.DownloadCordonelRecoveryRegistersFromDb(cordonel.PcbId, out cordonel.RecoveryRegisters))
|
||||
!_fwUpdateDbAccess.DownloadCordonelRecoveryRegistersFromDb(cordonel.PcbId, ref cordonel.RecoveryRegisters))
|
||||
continue;
|
||||
|
||||
LogSuccessText(Resources.StrCordonelRecoveryRegistersAdded + " " + cordonel.PcbId + " - " + cordonel.CustomerSerialNumber);
|
||||
|
||||
@ -1937,6 +1937,9 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
|
||||
/// <remarks date="2023-Oct-09" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
/// <remarks date="2024-Feb-08" author="Thomas Wiedebusch">
|
||||
/// - Avoid to setup IRDA_MfgDate as this is the manufacturing date and not the FW-Update date!
|
||||
/// </remarks>
|
||||
private Boolean SetDateTime()
|
||||
{
|
||||
if (_currentGenesis == null)
|
||||
@ -1950,7 +1953,6 @@ namespace Xylem.ServiceFwUpdate.Ui.ServiceFwUpdateSw
|
||||
// build byte array
|
||||
var rawSeconds = RegisterConverter.ConvertFrom(teaTime.SecondsSince2000);
|
||||
retVal = _currentGenesis.WriteRegister("SYSTEM_CalendarSeconds", rawSeconds);
|
||||
_currentGenesis.WriteRegister("IRDA_MfgDate", rawSeconds);
|
||||
LogSuccessText(Resources.StrDateTimeSetupSucceeded + " " + teaTime);
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user