Merge
Common\Hardware\WaterMeter\Genesis\GenesisFile\MeterFile.cs
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
@@ -98,6 +98,7 @@ StyleCopReport.xml
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
*.cache
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
@@ -14,5 +14,5 @@ using System.Reflection;
|
||||
//[assembly: AssemblyVersion("1.2.*.0")]
|
||||
|
||||
|
||||
[assembly: AssemblyVersion("2.1.4.*")]
|
||||
[assembly: AssemblyFileVersion("2.1.4.04")]
|
||||
[assembly: AssemblyVersion("2.2.0.*")]
|
||||
[assembly: AssemblyFileVersion("1.3.0.10")]
|
||||
@@ -155,7 +155,7 @@
|
||||
</site>
|
||||
<site name="MeterProcessState" id="2">
|
||||
<application path="/" applicationPool="Clr4IntegratedAppPool">
|
||||
<virtualDirectory path="/" physicalPath="C:\Users\drabesch_ro\Repo\lab\la_operations\laa_production\Common\Service\MeterProcessState" />
|
||||
<virtualDirectory path="/" physicalPath="D:\Projekte\SENSUS_GitLab\laa_production\Common\Service\MeterProcessState" />
|
||||
</application>
|
||||
<bindings>
|
||||
<binding protocol="http" bindingInformation="*:56011:localhost" />
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=binfile/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=BUGFIX/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Calib/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=catalogue/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=CCITT/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=CONFIGEXCHANGE/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Consts/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
<Assembly Path="D:\Projekte\SENSUS_tfs_workspaces\WorkBenchV2\Main\Common\Ui\IrdaFunctionalTestApp\bin\Debug\Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.dll" />
|
||||
</AssemblyExplorer></s:String>
|
||||
<s:Boolean x:Key="/Default/Environment/Hierarchy/EntityFrameworkOptions/IsAlreadyNotifiedAboutEntityFramework/@EntryValue">True</s:Boolean>
|
||||
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=a44a776d_002Dd671_002D4675_002Dac7b_002Db6775ec7f289/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
||||
<Solution />
|
||||
</SessionState></s:String>
|
||||
<s:String x:Key="/Default/Profiling/Configurations/=0/@EntryIndexedValue"><data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName>D:\Workspace\WorkBenchV2\Main\ZeroFlowTool\bin\Debug\GenesisDisplayTool.exe</FileName><WorkingDirectory>D:\Workspace\WorkBenchV2\Main\ZeroFlowTool\bin\Debug</WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="PerformanceInfo"><MeasureType>Sampling</MeasureType><MeterKind>Rdtsc</MeterKind><InjectInfo><SymbolSearch><SearchPaths /></SymbolSearch><Scope><PatternFilters /><DenyAttributeFilters /></Scope></InjectInfo></Info><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath></HostOptions></data></s:String>
|
||||
<s:String x:Key="/Default/Profiling/Configurations/=1/@EntryIndexedValue"><data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName IsNull="False"></FileName><WorkingDirectory IsNull="False"></WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="PerformanceInfo"><MeasureType>TracingInject</MeasureType><MeterKind>Rdtsc</MeterKind><InjectInfo><SymbolSearch><SearchPaths /></SymbolSearch><Scope><PatternFilters><Item /></PatternFilters><DenyAttributeFilters /></Scope></InjectInfo></Info><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath></HostOptions></data></s:String>
|
||||
<s:String x:Key="/Default/Profiling/Configurations/=2/@EntryIndexedValue"><data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName IsNull="False"></FileName><WorkingDirectory IsNull="False"></WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="TimelineInfo" /><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath><ReprofileDisableReason>LaunchedByReSharperUnitTestRunner</ReprofileDisableReason></HostOptions></data></s:String>
|
||||
|
||||
@@ -21,6 +21,12 @@ namespace Xylem.Common.CommonCore.Configuration
|
||||
private const String DefaultListAllFwPackagesServiceUrl =
|
||||
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=1";
|
||||
|
||||
private const String DefaultListAllSwPackagesServiceUrl =
|
||||
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=5";
|
||||
|
||||
private const String DefaultListAllConfigFilePackagesServiceUrl =
|
||||
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=6";
|
||||
|
||||
private const String DefaultListAllFwUpdateSafesServiceUrl =
|
||||
"http://10.49.40.25/MeterProcessState/api/FileUpToDate/GetFwFiles?FileIsForDeveloperOnly=false&FileCategoryID=4";
|
||||
|
||||
@@ -259,6 +265,26 @@ namespace Xylem.Common.CommonCore.Configuration
|
||||
DefaultListAllFwPackagesServiceUrl;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all Cordonel FW update SW package description files.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static String ListAllSwPackages()
|
||||
{
|
||||
return ConfigurationManager.AppSettings["ListAllSwPackagesServiceUrl"] ??
|
||||
DefaultListAllSwPackagesServiceUrl;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all Cordonel FW update SW package description files.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static String ListAllConfigurationFilePackages()
|
||||
{
|
||||
return ConfigurationManager.AppSettings["ListAllConfigFilePackagesServiceUrl"] ??
|
||||
DefaultListAllConfigFilePackagesServiceUrl;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set all applications versions installed to a specific Cordonel.
|
||||
/// </summary>
|
||||
|
||||
@@ -630,6 +630,11 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
|
||||
/// <remarks date="2018-Oct-23" author="T.Wiedebusch">
|
||||
/// - Doubling of sync byte in protocol behind sync byte itself implemented
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Feb-25" author="T.Wiedebusch, R.Drabesch">
|
||||
/// - Flush buffer as MOXA sometimes takes two messages and combines these two one!
|
||||
/// As the Genesis needs a separated wake-up message with a following delay before the
|
||||
/// real payload message, this causes a lot of trouble.
|
||||
/// </remarks>
|
||||
protected void PhysicalWrite(Byte[] txBuffer)
|
||||
{
|
||||
try
|
||||
@@ -649,18 +654,20 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_serialPort.Write(txByteList.ToArray(), 0, txByteList.Count);
|
||||
|
||||
// flush the buffer for MOXA, to avoid two subsequent communications assembled to one communication!
|
||||
_serialPort.BaseStream.Flush();
|
||||
|
||||
OnRawRecordSendOut?.Invoke(this, new ListBytePortDataEventArgs(txByteList, DateTimeOffset.UtcNow));
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_byteDataLogger.Error($"{Ident} {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
#region Prop
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -24,16 +24,16 @@ namespace Xylem.Common.Hardware.Interfaces.Ports.SerialPorts
|
||||
/// </remarks>
|
||||
protected override void SpecificPortWrite(Byte[] tx)
|
||||
{
|
||||
//send wake up burst with two 0xF0 byte
|
||||
//var wakeUpBurst = new Byte[] { 0xF0, 0xF0 };
|
||||
var wakeUpBurst = new Byte[] { 0x01, 0x01, 0x01, 0x01, };
|
||||
var delayPattern = new Byte[] { 0x0F, 0x0F, 0x0F, 0x0F , 0x0F, 0x0F, 0x0F, 0x0F };
|
||||
//send wake up burst
|
||||
var wakeUpBurst = new Byte[] { 0x01, 0x01, 0x01, 0x01 };
|
||||
PhysicalWrite(wakeUpBurst);
|
||||
Thread.Sleep(1);
|
||||
//delay at least 500 µs with 0f *8
|
||||
//PhysicalWrite(delayPattern);
|
||||
//Thread.Sleep(1);
|
||||
|
||||
//delay at least 500 µs
|
||||
Thread.Sleep(1);
|
||||
|
||||
//send the IrDA record
|
||||
PhysicalWrite(tx);
|
||||
|
||||
@@ -1141,6 +1141,21 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// </summary>
|
||||
public String CoreRevision;
|
||||
|
||||
/// <summary>
|
||||
/// This is the FLEXNET version which describes the entire packet.
|
||||
/// </summary>
|
||||
public String FwVersion;
|
||||
|
||||
/// <summary>
|
||||
/// This is the Metrology Lookup Table CRC.
|
||||
/// </summary>
|
||||
public String LutCrc;
|
||||
|
||||
/// <summary>
|
||||
/// This is the meter size.
|
||||
/// </summary>
|
||||
public String MeterSize;
|
||||
|
||||
/// <summary>
|
||||
/// Region (EMEA or NA) and Radio frequency (433 or 868 or null).
|
||||
/// </summary>
|
||||
@@ -1165,11 +1180,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
/// </remarks>
|
||||
private void ReadMeterFirmwareAndAssignRegisters()
|
||||
{
|
||||
//if (true)
|
||||
//{
|
||||
|
||||
// return;
|
||||
//}
|
||||
//avoid overwriting of list if this already exits
|
||||
if (MeterAppListVersion.Any())
|
||||
{
|
||||
@@ -1206,6 +1216,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
//build the version string, because e.g. FLEXNETVERSION is one application which does not
|
||||
//follow the same rule. After the upper conversion, the hexadecimal outline will be lost
|
||||
versionString = BuildFwVersionString(readFwVersionBytes[1], readFwVersionBytes[0]);
|
||||
if (appVersionToRead.AppName == "FLEXNETVERSION") FwVersion = versionString;
|
||||
|
||||
if (readFwVersion != 0)
|
||||
{
|
||||
@@ -1220,7 +1231,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
}
|
||||
}
|
||||
}
|
||||
Thread.Sleep(250);
|
||||
}
|
||||
|
||||
//add application always, even if this is not installed. This will be used for FW updates
|
||||
@@ -1240,6 +1250,15 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
MetrologyUpgradePermission = RegisterConverter.ConvertTo<Byte>(
|
||||
ReadRegister(Register.System.MetrologyUpgradePermission));
|
||||
|
||||
//read metrology lookup table CRC
|
||||
var lutCrc = RegisterConverter.ConvertTo<UInt32>(ReadRegister(Register.Genesisflow.LookupFileCrc));
|
||||
LutCrc = $@"0x{lutCrc:X4}";
|
||||
|
||||
|
||||
//read meter size
|
||||
MeterSize = MeterSizeConverter.ConvertMeterSizeEnumToSizeName((MeterSize)RegisterConverter.ConvertTo<Byte>(
|
||||
ReadRegister(Register.Genesisflow.MeterSize)));
|
||||
|
||||
//read core revision
|
||||
var coreRegisterRead = RegisterConverter.ConvertTo<String>(ReadRegister(Register.System.CoreRevision, 16));
|
||||
var coreRevision = coreRegisterRead?.Split('\0');
|
||||
@@ -1288,10 +1307,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore
|
||||
}
|
||||
}
|
||||
|
||||
//read radio frequency
|
||||
|
||||
_logger.Info("Region and radio frequency[Mhz]: " + RegionRadio);
|
||||
//safe temporary registers from file to compare first and last version with application version read from meter and
|
||||
_logger.Info($"Meter size: {MeterSize}");
|
||||
//remove unused registers with invalid version
|
||||
var tempConfigRegisters = _configRegister.MeterRegisterDic.ToList();
|
||||
//tempConfigRegisters.ToList()
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
|
||||
{
|
||||
/// <summary>
|
||||
/// Genesis meter lookup table update states
|
||||
/// </summary>
|
||||
public enum LutUpdateState
|
||||
{
|
||||
/// <summary>
|
||||
/// Metrology lookup table update state Idle
|
||||
/// </summary>
|
||||
Idle,
|
||||
/// <summary>
|
||||
/// Single step failed
|
||||
/// </summary>
|
||||
StepFailed,
|
||||
/// <summary>
|
||||
/// Entire process failed
|
||||
/// </summary>
|
||||
UpdateFailed,
|
||||
/// <summary>
|
||||
/// Start initial FW update
|
||||
/// </summary>
|
||||
StartInitial,
|
||||
/// <summary>
|
||||
/// Repeat update
|
||||
/// </summary>
|
||||
RepeatLutUpdate,
|
||||
/// <summary>
|
||||
/// Upload lookup table file
|
||||
/// </summary>
|
||||
UploadLutFile,
|
||||
/// <summary>
|
||||
/// Download lookup table file
|
||||
/// </summary>
|
||||
DownloadLutFile,
|
||||
/// <summary>
|
||||
/// Compare lookup table file
|
||||
/// </summary>
|
||||
CompareLutFile,
|
||||
/// <summary>
|
||||
/// Download the CRC, the meter size and store calibration as preparation for the lookup table
|
||||
/// </summary>
|
||||
FinalizeLutDownload,
|
||||
/// <summary>
|
||||
/// Erase lookup table file
|
||||
/// </summary>
|
||||
EraseLutFile,
|
||||
/// <summary>
|
||||
/// Delimiter for list
|
||||
/// </summary>
|
||||
LutUpdateStateListDelimiter
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Properties;
|
||||
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
|
||||
{
|
||||
/// <summary>
|
||||
/// Concatenation of state and string
|
||||
/// </summary>
|
||||
public static class LutUpdateStateInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Build state information
|
||||
/// </summary>
|
||||
private static readonly LutUpdateStateText[] StateInfos;
|
||||
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
static LutUpdateStateInfo()
|
||||
{
|
||||
StateInfos = new LutUpdateStateText[(Int32)LutUpdateState.LutUpdateStateListDelimiter];
|
||||
StateInfos[0].State = LutUpdateState.Idle;
|
||||
StateInfos[0].Message = "";
|
||||
|
||||
StateInfos[1].State = LutUpdateState.StepFailed;
|
||||
StateInfos[1].Message = "Processing Step Failed";
|
||||
|
||||
StateInfos[2].State = LutUpdateState.UpdateFailed;
|
||||
StateInfos[2].Message = "LUT Update Failed";
|
||||
|
||||
StateInfos[3].State = LutUpdateState.StartInitial;
|
||||
StateInfos[3].Message = "Initial start";
|
||||
|
||||
StateInfos[4].State = LutUpdateState.RepeatLutUpdate;
|
||||
StateInfos[4].Message = "Repeat update";
|
||||
|
||||
StateInfos[5].State = LutUpdateState.UploadLutFile;
|
||||
StateInfos[5].Message = "Upload LUT file from meter";
|
||||
|
||||
StateInfos[6].State = LutUpdateState.DownloadLutFile;
|
||||
StateInfos[6].Message = "Download LUT file to meter";
|
||||
|
||||
StateInfos[7].State = LutUpdateState.CompareLutFile;
|
||||
StateInfos[7].Message = "Compare LUT file";
|
||||
|
||||
StateInfos[8].State = LutUpdateState.FinalizeLutDownload;
|
||||
StateInfos[8].Message = "Finalize LUT file installation";
|
||||
|
||||
StateInfos[9].State = LutUpdateState.EraseLutFile;
|
||||
StateInfos[9].Message = "Erase LUT file in meter";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the current information
|
||||
/// </summary>
|
||||
/// <param name="state">state to search for information text</param>
|
||||
public static String GetTextFromState(LutUpdateState state)
|
||||
{
|
||||
return (from stateInfo in StateInfos
|
||||
where stateInfo.State == state select stateInfo.Message).FirstOrDefault();
|
||||
}
|
||||
/// <summary>
|
||||
/// Get the state of the text
|
||||
/// </summary>
|
||||
/// <param name="text">information text to search if state is assigned</param>
|
||||
public static LutUpdateState GetStateFromText(String text)
|
||||
{
|
||||
return (from stateInfo in StateInfos
|
||||
where stateInfo.Message == text select stateInfo.State).FirstOrDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts
|
||||
{
|
||||
/// <summary>
|
||||
/// Concatenation between lokup table update state and text
|
||||
/// </summary>
|
||||
public struct LutUpdateStateText
|
||||
{
|
||||
/// <summary>
|
||||
/// The state of the firmware update
|
||||
/// </summary>
|
||||
public LutUpdateState State;
|
||||
/// <summary>
|
||||
/// The message text of the lookup table update state
|
||||
/// </summary>
|
||||
public String Message;
|
||||
}
|
||||
}
|
||||
@@ -96,11 +96,16 @@
|
||||
<Compile Include="..\..\..\..\.shared\SharedAssemblyInfo.cs">
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Consts\LutUpdateStateText.cs" />
|
||||
<Compile Include="Consts\LutUpdateStateInfo.cs" />
|
||||
<Compile Include="Consts\LutUpdateState.cs" />
|
||||
<Compile Include="Consts\FwUpdateState.cs" />
|
||||
<Compile Include="Consts\FwUpdateStateInfo.cs" />
|
||||
<Compile Include="Consts\FwUpdateStateText.cs" />
|
||||
<Compile Include="MeterLutFile.cs" />
|
||||
<Compile Include="MeterFileRestore.cs" />
|
||||
<Compile Include="MeterFilesEraseRestore.cs" />
|
||||
<Compile Include="MeterLutUpdate.cs" />
|
||||
<Compile Include="MeterFwUpdate.cs" />
|
||||
<Compile Include="MeterFwUpdateCapability.cs" />
|
||||
<Compile Include="MeterFwUpdateRuler.cs" />
|
||||
@@ -119,6 +124,14 @@
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\..\Logic.PrdoctionToProductMapper\Logic.ProductionToProductMapper.csproj">
|
||||
<Project>{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}</Project>
|
||||
<Name>Logic.ProductionToProductMapper</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\..\Utils\Crc16Ccitt\Crc16Ccitt.csproj">
|
||||
<Project>{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}</Project>
|
||||
<Name>Crc16Ccitt</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\..\Utils\Logging\Logging.csproj">
|
||||
<Project>{4B88B0D3-E791-4774-9521-EABEACDC420E}</Project>
|
||||
<Name>Logging</Name>
|
||||
|
||||
@@ -29,9 +29,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
private Int32 _fileWriteTimeOutMs = ExtendedFileIoTimeoutMs;
|
||||
|
||||
private readonly GenesisMeter _currentGenesis;
|
||||
private Int32 _filePointer;
|
||||
//TODO THW test only private const String StrNewFileReadWriteMode = "wb+";
|
||||
//wb open file for writing in binary mode, if file exists its contents will be overwritten,
|
||||
//if file does not exist it will be created
|
||||
private const String StrNewFileReadWriteMode = "wb";
|
||||
//Open for reading in binary mode. If the file does not exist, fopen( ) returns NULL
|
||||
public Int32 _filePointer;
|
||||
private const String StrNewFileReadWriteMode = "wb+";
|
||||
private const String StrOpenFileReadOnlyMode = "rb";
|
||||
//Open for both reading and writing in binary mode. If the file does not exist, fopen( ) returns NULL
|
||||
private const String StrOpenFileReadWriteMode = "rb+";
|
||||
private String _fileName;
|
||||
private Int32 _overallBytesCtr;
|
||||
@@ -171,6 +178,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2020-Dec-19" author="Thomas Wiedebusch">
|
||||
/// - Dynamic timeout load from extended to extreme timeout on retries.
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean WriteMeterFile(String fileName, Byte[] dataBytes, Int32 fileOffset = 0)
|
||||
{
|
||||
var returnValue = false;
|
||||
@@ -181,8 +191,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs("", 0));
|
||||
_overallBytesCtr = dataBytes.Length;
|
||||
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
//check if file is unlocked for write
|
||||
if (_fileName != fileName) return false;
|
||||
if (_fileName != fileName)
|
||||
return false;
|
||||
|
||||
if (fileOffset == 0 && OpenMeterFile(fileName, StrNewFileReadWriteMode)
|
||||
|| fileOffset > 0 && OpenMeterFile(fileName, StrOpenFileReadWriteMode))
|
||||
@@ -319,18 +332,20 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2020-Dec-10" author="Thomas Wiedebusch">
|
||||
/// - Event on changed process counter.
|
||||
/// </remarks>
|
||||
public Boolean ReadMeterFile(String fileName, out List<Byte> readBackData, Int32? readBackCount = null, string OpenFileReadOnlyModeOver = null)
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean ReadMeterFile(String fileName, out List<Byte> readBackData, Int32 readBackCount)
|
||||
{
|
||||
if (String.IsNullOrEmpty(OpenFileReadOnlyModeOver))
|
||||
{
|
||||
OpenFileReadOnlyModeOver = StrOpenFileReadOnlyMode;
|
||||
}
|
||||
//set processing counter
|
||||
ProcessedBytesCtr = 0;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs("", 0));
|
||||
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
|
||||
readBackData = new List<Byte>();
|
||||
var returnValue = OpenMeterFile(fileName, OpenFileReadOnlyModeOver);
|
||||
var returnValue = OpenMeterFile(fileName, StrOpenFileReadOnlyMode);
|
||||
|
||||
if (returnValue)
|
||||
{
|
||||
@@ -343,29 +358,29 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
CommunicationConfig.RequestRetries = 0;
|
||||
_currentGenesis.TransmitProtocol.SetResponseTimeout(ExtendedFileIoTimeoutMs);
|
||||
|
||||
int fixedReadBackCount;
|
||||
//int fixedReadBackCount;
|
||||
|
||||
if (readBackCount.HasValue)
|
||||
{
|
||||
fixedReadBackCount = readBackCount.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", _filePointer, false);
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 2, false);
|
||||
//if (readBackCount.HasValue)
|
||||
//{
|
||||
// fixedReadBackCount = readBackCount.Value;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", _filePointer, false);
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 2, false);
|
||||
|
||||
|
||||
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FTell", _filePointer, false);
|
||||
fixedReadBackCount = RegisterConverter.ConvertTo<Int32>(_currentGenesis.ReadRegister("CONFIGEXCHANGE_FTell")) + 1;
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FTell", _filePointer, false);
|
||||
// fixedReadBackCount = RegisterConverter.ConvertTo<Int32>(_currentGenesis.ReadRegister("CONFIGEXCHANGE_FTell")) + 1;
|
||||
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", _filePointer, false);
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
_currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", _filePointer, false);
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
// _currentGenesis.WriteRegister("CONFIGEXCHANGE_FSeek", 0, false);
|
||||
|
||||
|
||||
}
|
||||
//}
|
||||
//write size to 1
|
||||
_currentGenesis.WriteRegister(Register.Configexchange.FileRead, 1, false);
|
||||
//write counts to expected length
|
||||
@@ -374,10 +389,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
_currentGenesis.WriteRegister(Register.Configexchange.FileRead, _filePointer);
|
||||
|
||||
//the preceding routine needs to wait for response, else this is always true!
|
||||
while (fixedReadBackCount > 0 && returnValue)
|
||||
while (readBackCount > 0 && !_stopProcess) // while (fixedReadBackCount > 0 && returnValue)
|
||||
{
|
||||
returnValue = _stopProcess;
|
||||
|
||||
var remainingData = RegisterConverter.ConvertTo<Int32>(
|
||||
_currentGenesis.ReadRegister(Register.Configexchange.FileRead));
|
||||
|
||||
@@ -465,7 +478,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
_currentGenesis.ReadRegister(Register.Configexchange.Catalogue));
|
||||
}
|
||||
|
||||
if (key == lastKey) break;
|
||||
if (key == lastKey)
|
||||
break;
|
||||
// remove the "\0"
|
||||
var strMeterFile = readData.Split(StringDelimiter);
|
||||
// avoid identical files repetition
|
||||
@@ -485,12 +499,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2021-Jun-20" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean CreateEmptyMeterFile(String fileName, Int32 fileSize = 0)
|
||||
{
|
||||
var returnValue = false;
|
||||
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
|
||||
//check if file is unlocked for write
|
||||
if (_fileName != fileName) return false;
|
||||
if (_fileName != fileName)
|
||||
return false;
|
||||
|
||||
if (OpenMeterFile(fileName, StrNewFileReadWriteMode))
|
||||
{
|
||||
@@ -543,7 +564,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
_currentGenesis.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
CommunicationConfig.RequestRetries = CommunicationConfig.DefaultRequestRetries;
|
||||
|
||||
if (returnedFileOffset != fileSize) returnValue = false;
|
||||
if (returnedFileOffset != fileSize)
|
||||
returnValue = false;
|
||||
}
|
||||
}//file open
|
||||
|
||||
@@ -560,9 +582,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2019-Jun-20" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean VerifyMeterFile(String fileName, Byte[] dataBytes)
|
||||
{
|
||||
if (!OpenMeterFile(fileName, StrOpenFileReadOnlyMode)) return false;
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
|
||||
if (!OpenMeterFile(fileName, StrOpenFileReadOnlyMode))
|
||||
return false;
|
||||
//TODO THW implement
|
||||
//read raw data from meter
|
||||
return true;
|
||||
@@ -582,17 +611,25 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2021-May-18" author="Thomas Wiedebusch">
|
||||
/// - Removed retries to speed up erasure as it returns error code 0x040B.
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean EraseMeterFile(String fileName)
|
||||
{
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
//check if file is unlocked for erase
|
||||
if (_fileName != fileName) return false;
|
||||
if (_fileName != fileName)
|
||||
return false;
|
||||
//check if logged on to meter and access level is as expected
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn) return false;
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn)
|
||||
return false;
|
||||
|
||||
//set extended timeout for file operations
|
||||
_currentGenesis.TransmitProtocol.SetResponseTimeout(ExtendedFileIoTimeoutMs);
|
||||
CommunicationConfig.RequestRetries = 0;
|
||||
//write "remove-command" to meter, wait for result and read back (read back returns false because of unreadable content)
|
||||
//write "remove-command" to meter, wait for result and read back
|
||||
//ATTENTION: read back returns FALSE because of unreadable content
|
||||
_currentGenesis.WriteRegister(Register.Configexchange.FileRemove, fileName, true, true);
|
||||
//set timeout back to default value
|
||||
_currentGenesis.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
@@ -609,10 +646,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2019-Jun-20" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Add a NULL at the end of the file name.
|
||||
/// </remarks>
|
||||
public Boolean UnlockEraseWriteMeterFile(String fileName)
|
||||
{
|
||||
//add file name delimiter
|
||||
fileName += StringDelimiter;
|
||||
//check if logged on to meter and access level is as expected
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn) return false;
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn)
|
||||
return false;
|
||||
//remind file name being unlocked
|
||||
_fileName = fileName;
|
||||
return true;
|
||||
@@ -746,7 +789,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
public Boolean OpenMeterFile(String fileName, String accessMode)
|
||||
{
|
||||
//check if logged on to meter and access level is as expected
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn) return false;
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn)
|
||||
return false;
|
||||
Boolean returnValue;
|
||||
var retryCtr = 0;
|
||||
|
||||
@@ -806,25 +850,23 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2020-Jan-22" author="Thomas Wiedebusch">
|
||||
/// - Wait after writing for response before reading!
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Ignore file close write return!
|
||||
/// </remarks>
|
||||
private Boolean CloseMeterFile()
|
||||
{
|
||||
//avoid file close if file pointer assignment failed
|
||||
if (_filePointer <= 0) return false;
|
||||
if (_filePointer <= 0)
|
||||
return false;
|
||||
|
||||
//set extended timeout for file operations
|
||||
_currentGenesis.TransmitProtocol.SetResponseTimeout(ExtendedFileIoTimeoutMs);
|
||||
CommunicationConfig.RequestRetries = 0;
|
||||
_currentGenesis.WriteRegister(Register.Configexchange.FileClose, _filePointer);
|
||||
|
||||
var returnValue = _currentGenesis.WriteRegister(Register.Configexchange.FileClose,
|
||||
_filePointer);
|
||||
|
||||
//the preceding routine needs to wait for response, else this is always true!
|
||||
if (returnValue)
|
||||
{
|
||||
//function call returns 0 if FClose successfully executed
|
||||
returnValue &= 0 == RegisterConverter.ConvertTo<Int32>(
|
||||
var returnValue = 0 == RegisterConverter.ConvertTo<Int32>(
|
||||
_currentGenesis.ReadRegister(Register.Configexchange.FileClose));
|
||||
}
|
||||
//set timeout back to default value
|
||||
_currentGenesis.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
CommunicationConfig.RequestRetries = CommunicationConfig.DefaultRequestRetries;
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Applications;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Applications.Const;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
@@ -139,6 +140,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
// Text for caller to inform about actual process being carried out
|
||||
private String _actualOperation;
|
||||
private FwUpdateState _fwUpdateState;
|
||||
private FwUpdateState _fwBackupUpdateState;
|
||||
|
||||
// Process counter for caller to monitor actual progress
|
||||
private Int32 _processedBytesCtr;
|
||||
@@ -150,6 +152,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
//the package file describes all files needed for a specific release
|
||||
private String _packageDescriptionFile;
|
||||
|
||||
// manual stop of update process
|
||||
private Boolean _stopUpdateProcess;
|
||||
private Int32 _actualUpdateFileCtr;
|
||||
|
||||
/// <summary>
|
||||
/// Enable partial file writes of single parts with gaps in between
|
||||
/// </summary>
|
||||
@@ -624,7 +630,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
return _actualOperation;
|
||||
}
|
||||
|
||||
private Int32 _actualUpdateFileCtr;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the FW Update state
|
||||
@@ -677,8 +682,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
_genesisMeter?.ReLogin();
|
||||
}
|
||||
|
||||
private Boolean _stopUpdateProcess;
|
||||
|
||||
/// <summary>
|
||||
/// Stop the update process
|
||||
/// </summary>
|
||||
@@ -724,6 +727,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// <remarks date="2019-Jun-29" author="Thomas Wiedebusch">
|
||||
/// - Exit preparation added
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Introduced lock for repeated execution of state machine
|
||||
/// </remarks>
|
||||
public Boolean UpdateMeterFw()
|
||||
{
|
||||
if (!UpdatePreparation())
|
||||
@@ -732,6 +738,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
}
|
||||
|
||||
_fwUpdateState = FwUpdateState.StartInitial;
|
||||
_fwBackupUpdateState = FwUpdateState.Idle;
|
||||
while (_fwUpdateState != FwUpdateState.Idle && !StopUpdateProcess)
|
||||
{
|
||||
FwUpdateStateMachine();
|
||||
@@ -897,6 +904,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
|
||||
//set state machine for automatic FW update
|
||||
_fwUpdateState = FwUpdateState.Idle;
|
||||
_fwBackupUpdateState = FwUpdateState.Idle;
|
||||
_actualOperation = "";
|
||||
|
||||
//update file information
|
||||
@@ -979,7 +987,6 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
var writeBackValue = _genesisMeter.ReadRegister(item.Key);
|
||||
_registersAfterUpdate.Add(item.Key, writeBackValue);
|
||||
_genesisMeter.WriteRegister(item.Key, item.Value);
|
||||
|
||||
}
|
||||
|
||||
//remove the update stop action
|
||||
@@ -1059,8 +1066,19 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
/// useful as on increased size and number of applications needed to install in one run, the
|
||||
/// file system is slowing down for write accesses.
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Introduced lock for repeated execution of state machine
|
||||
/// </remarks>
|
||||
private void FwUpdateStateMachine()
|
||||
{
|
||||
if (_fwBackupUpdateState == _fwUpdateState)
|
||||
{
|
||||
Thread.Sleep(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// remind backup state to avoid repeated execution and side effects
|
||||
_fwBackupUpdateState = _fwUpdateState;
|
||||
switch (_fwUpdateState)
|
||||
{
|
||||
case FwUpdateState.Idle:
|
||||
@@ -1127,6 +1145,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
{
|
||||
_meterFile?.SetExtremeFileWriteTimeout();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case FwUpdateState.UpdateFailed:
|
||||
@@ -1150,6 +1169,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
break;
|
||||
|
||||
}
|
||||
}// lock repeated execution of identical state
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Logic.ProductionToProductMapper.Cordonel;
|
||||
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
{
|
||||
/// <summary>
|
||||
/// File for metrology look up table
|
||||
/// </summary>
|
||||
public class MeterLutFile
|
||||
{
|
||||
/// <summary>
|
||||
/// File name of the file on PC
|
||||
/// </summary>
|
||||
public String LutPcFileName;
|
||||
|
||||
/// <summary>
|
||||
/// Ctor file applications
|
||||
/// </summary>
|
||||
/// <param name="lutPcFileName"></param>
|
||||
public MeterLutFile(String lutPcFileName)
|
||||
{
|
||||
LutPcFileName = lutPcFileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File ID for LUT file
|
||||
/// </summary>
|
||||
public String StrLutFileId;
|
||||
|
||||
/// <summary>
|
||||
/// Data length
|
||||
/// </summary>
|
||||
public UInt32 DataLength;
|
||||
|
||||
/// <summary>
|
||||
/// Version of LUT file
|
||||
/// </summary>
|
||||
public UInt16 Version;
|
||||
|
||||
/// <summary>
|
||||
/// Check of LUT file for verification and register write, read from file
|
||||
/// </summary>
|
||||
public UInt16 FileCrc;
|
||||
|
||||
/// <summary>
|
||||
/// Calculated during file processing for verification
|
||||
/// </summary>
|
||||
public UInt16 CalculatedCrc;
|
||||
|
||||
/// <summary>
|
||||
/// Validation of LUT file
|
||||
/// </summary>
|
||||
public Boolean IsValid;
|
||||
|
||||
/// <summary>
|
||||
/// Binary file content
|
||||
/// </summary>
|
||||
public List<Byte> BinData = new List<Byte>();
|
||||
|
||||
/// <summary>
|
||||
/// Meter size
|
||||
/// </summary>
|
||||
public MeterSize MeterSize;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,980 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using Logic.ProductionToProductMapper.Cordonel;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.Consts;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile.Consts;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
|
||||
using Xylem.Common.Utils.Crc16Ccitt;
|
||||
using Xylem.Common.Utils.ProcessExec;
|
||||
using Xylem.Common.Utils.ProcessExec.EventArguments;
|
||||
|
||||
namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
|
||||
{
|
||||
/// <summary>
|
||||
/// Meter lookup table for metrology update procedure
|
||||
/// </summary>
|
||||
public class MeterLutUpdate : IProcessState
|
||||
{
|
||||
#region Variables
|
||||
|
||||
/// <summary>
|
||||
/// Port scan result event for message dispatcher to caller
|
||||
/// </summary>
|
||||
public event EventHandler<ProcessExecEventArgs> OnProcessUpdate;
|
||||
|
||||
//error mask for unsuccessfully written LUT CRC
|
||||
private const UInt32 LutCrcErrorMask = 0x8000000;
|
||||
|
||||
//disk and name of lookup file
|
||||
private const String StrLutMeterFileName = "1\\mettbl";
|
||||
|
||||
//disk and name of lookup file
|
||||
private const String StrLutBackupMeterFileName = "1\\mettbl_b";
|
||||
|
||||
// identifier for Genesis lookup table
|
||||
private const String StrLutFileId = "GEN_LUT\0";
|
||||
private const Int32 IndexLutFileId = 0;
|
||||
private const Int32 LengthLutFileId = 8;
|
||||
|
||||
// data length, calculated from version field to the end of the data section
|
||||
private const Int32 IndexDataLength = 8;
|
||||
private const Int32 LengthDataLength = 4;
|
||||
|
||||
// CCITT-CRC-16 , calculated from version field to the end of the data section
|
||||
private const Int32 IndexCrc = 12;
|
||||
private const Int32 LengthCrc = 2;
|
||||
|
||||
// version
|
||||
private const Int32 IndexVersion = 14;
|
||||
private const Int32 LengthVersion = 2;
|
||||
|
||||
// meter size as enumeration
|
||||
private const Int32 IndexMeterSize = 16;
|
||||
|
||||
// header size of file
|
||||
private const Int32 LutFileHeaderLength = LengthLutFileId + LengthDataLength + LengthCrc + LengthVersion;
|
||||
|
||||
// data size of file
|
||||
private const Int32 LutFileDataLength = 730;
|
||||
|
||||
// LUT file entire file size
|
||||
private const Int32 SizeLutFile = LutFileHeaderLength + LutFileDataLength;
|
||||
|
||||
//trigger update retries
|
||||
private const Int32 RegisterWriteRetries = 0;
|
||||
|
||||
//update reties for files
|
||||
private const Int32 FileWriteRetries = 1;
|
||||
|
||||
//retry of entire update procedure
|
||||
private const Int32 UpdateProcedureRetries = 1;
|
||||
|
||||
//threshold to increase the file write timing
|
||||
private const Int32 IncreaseTimeoutUpdateProcedureRetries = 4;
|
||||
|
||||
private Int32 _updateProcedureRetryCtr;
|
||||
|
||||
private GenesisMeter _genesisMeter;
|
||||
private MeterFile _meterFile;
|
||||
|
||||
// Text for caller to inform about actual process being carried out
|
||||
private String _actualOperation;
|
||||
private LutUpdateState _lutUpdateState;
|
||||
private LutUpdateState _lutBackupUpdateState;
|
||||
|
||||
// Look up table file
|
||||
public MeterLutFile LutFile;
|
||||
|
||||
// list of names of installed meter files on drive 1
|
||||
private List<String> _meterFilesDrive1;
|
||||
|
||||
// number of operations for over all access
|
||||
private const Int32 NumberOfOperations = 11;
|
||||
private Int32 _operationCtr;
|
||||
|
||||
|
||||
// error message for display of error reason
|
||||
public String ErrorMessage;
|
||||
|
||||
// manual stop of update process
|
||||
private Boolean _stopUpdateProcess;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Register subset needed to adjust for update performance content before update
|
||||
/// </summary>
|
||||
private readonly Dictionary<String, Byte[]> _registersBeforeUpdate = new Dictionary<String, Byte[]>();
|
||||
|
||||
/// <summary>
|
||||
/// Register to restore after update
|
||||
/// </summary>
|
||||
private Dictionary<String, Byte[]> _registersAfterUpdate = new Dictionary<String, Byte[]>();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Process update event
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <remarks date="2020-Dec-10" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public virtual void ProcessUpdate_Event(Object sender, ProcessExecEventArgs e)
|
||||
{
|
||||
//// copy text from overall messages to actual, because this is from sub-routine
|
||||
//OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(_overallOperation,
|
||||
// OverallProcessCtrPercent, _actualOperation, e.OverallProcessPercent));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Information
|
||||
|
||||
/// <summary>
|
||||
/// Process counter in percent
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Mar-03" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Double OverallProcessCtrPercent => 100.0 * _operationCtr / NumberOfOperations;
|
||||
|
||||
/// <summary>
|
||||
/// Single file process counter in percent
|
||||
/// </summary>
|
||||
/// <remarks date="2019-Jun-24" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Double SingleFileProcessCtrPercent => _meterFile?.ProcessCtrPercent ?? 0;
|
||||
|
||||
#endregion
|
||||
|
||||
#region CtorAssignment
|
||||
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
/// <param name="genesisMeter"></param>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public MeterLutUpdate(GenesisMeter genesisMeter)
|
||||
{
|
||||
if (genesisMeter == null)
|
||||
return;
|
||||
AssignGenesis(genesisMeter);
|
||||
|
||||
if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "GENESISFLOW" && f.IsInstalled))
|
||||
{
|
||||
_registersBeforeUpdate.Add(Register.Genesisflow.LedMode, new[] { (Byte)LedMode.Off });
|
||||
_registersBeforeUpdate.Add(Register.Genesisflow.SampleRate, new Byte[] { 1 });
|
||||
}
|
||||
if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "METROLOGYASST" && f.IsInstalled))
|
||||
_registersBeforeUpdate.Add(Register.Mertrologyasst.PulseMode, new Byte[] { 0 });
|
||||
//deny access if NA product, because this does not have the radio app installed
|
||||
if (genesisMeter.MeterAppListVersion.Any(f => f.AppName == "SENSUSRADIO" && f.IsInstalled))
|
||||
_registersBeforeUpdate.Add(Register.Sensusradio.WakeupInterval, new Byte[] { 6 });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Assign new genesis
|
||||
/// </summary>
|
||||
/// <param name="genesisMeter"></param>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public void AssignGenesis(GenesisMeter genesisMeter)
|
||||
{
|
||||
_genesisMeter = genesisMeter;
|
||||
_actualOperation = "";
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispose
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
if (_meterFile == null)
|
||||
return;
|
||||
_meterFile.OnProcessUpdate -= ProcessUpdate_Event;
|
||||
_meterFile = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ProcessInformation
|
||||
|
||||
/// <summary>
|
||||
/// Returns the actual file in process for update
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2019-Jun-20" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public String GetActualOperation()
|
||||
{
|
||||
return _actualOperation;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the LUT Update state
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-25" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public String GetLutUpdateStateOperation()
|
||||
{
|
||||
// search text assigned to current state
|
||||
var text = LutUpdateStateInfo.GetTextFromState(_lutUpdateState);
|
||||
if (_lutUpdateState == LutUpdateState.Idle)
|
||||
{
|
||||
return text;
|
||||
}
|
||||
|
||||
text += _updateProcedureRetryCtr > 0 ? $"Retry {_updateProcedureRetryCtr}" : "";
|
||||
return text;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Actions
|
||||
|
||||
/// <summary>
|
||||
/// Try to re-establish the file system, therefor logout to close all open files
|
||||
/// and login again.
|
||||
/// </summary>
|
||||
/// <remarks date="2019-Jun-21" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2019-Jun-28" author="Thomas Wiedebusch">
|
||||
/// - Enable auto-logon added
|
||||
/// </remarks>
|
||||
/// <remarks date="2019-Jul-03" author="Thomas Wiedebusch">
|
||||
/// - Removed auto-logon
|
||||
/// </remarks>
|
||||
public void ReestablishMeterFileSystem()
|
||||
{
|
||||
_genesisMeter?.Logout();
|
||||
_genesisMeter?.ReLogin();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Stop the update process
|
||||
/// </summary>
|
||||
public Boolean StopUpdateProcess
|
||||
{
|
||||
get => _stopUpdateProcess;
|
||||
set
|
||||
{
|
||||
_stopUpdateProcess = value;
|
||||
if (_meterFile != null)
|
||||
{
|
||||
_meterFile.StopProcess = value;
|
||||
}
|
||||
|
||||
_lutUpdateState = LutUpdateState.UpdateFailed;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update meter lookup table
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean UpdateMeterLut()
|
||||
{
|
||||
if (!UpdatePreparation())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
_operationCtr = 0;
|
||||
_actualOperation = "";
|
||||
ErrorMessage = "";
|
||||
_lutUpdateState = LutUpdateState.StartInitial;
|
||||
_lutBackupUpdateState = LutUpdateState.Idle;
|
||||
while (_lutUpdateState != LutUpdateState.Idle && !StopUpdateProcess)
|
||||
{
|
||||
LutUpdateStateMachine();
|
||||
}
|
||||
|
||||
return ExitPreparation(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Upload lookup table file and compare with the loaded from file system
|
||||
/// </summary>
|
||||
/// <remarks date="2019-Jun-29" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean VerifyLutFile()
|
||||
{
|
||||
if (!UpdatePreparation())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return ExitPreparation(true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reset lookup table update process and all lists and counters
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public void ResetAll()
|
||||
{
|
||||
LutFile = null;
|
||||
//remove the update stop action
|
||||
StopUpdateProcess = false;
|
||||
|
||||
//reset all counters
|
||||
_updateProcedureRetryCtr = 0;
|
||||
|
||||
//set state machine for automatic FW update
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
_lutBackupUpdateState = LutUpdateState.Idle;
|
||||
_actualOperation = "";
|
||||
_operationCtr = 0;
|
||||
|
||||
//logout/login/auto-login
|
||||
ReestablishMeterFileSystem();
|
||||
_genesisMeter?.Logout();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Common update preparation and check
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean UpdatePreparation()
|
||||
{
|
||||
_actualOperation = "Update preparation";
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
|
||||
_meterFile = new MeterFile(_genesisMeter);
|
||||
if (_meterFile != null)
|
||||
_meterFile.OnProcessUpdate += ProcessUpdate_Event;
|
||||
_genesisMeter?.ReLogin();
|
||||
_genesisMeter?.SetProcessState(DisplayCodes.FwUpdateActive, false);
|
||||
|
||||
if (_genesisMeter == null || !_genesisMeter.IsLoggedOn)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//set default timeout for file write operation
|
||||
_meterFile.SetDefaultFileWriteTimeout();
|
||||
|
||||
//switch LED off set sample rate to 1 -> 1Hz to slow down CPU load
|
||||
_registersAfterUpdate = new Dictionary<String, Byte[]>();
|
||||
foreach (var item in _registersBeforeUpdate)
|
||||
{
|
||||
var writeBackValue = _genesisMeter.ReadRegister(item.Key);
|
||||
_registersAfterUpdate.Add(item.Key, writeBackValue);
|
||||
_genesisMeter.WriteRegister(item.Key, item.Value);
|
||||
|
||||
}
|
||||
//remove the update stop action
|
||||
StopUpdateProcess = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Common exit routine
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean ExitPreparation(Boolean returnValue)
|
||||
{
|
||||
if (_meterFile != null)
|
||||
_meterFile.OnProcessUpdate -= ProcessUpdate_Event;
|
||||
_meterFile = null;
|
||||
ReestablishMeterFileSystem();
|
||||
|
||||
foreach (var item in _registersAfterUpdate)
|
||||
{
|
||||
_genesisMeter.WriteRegister(item.Key, item.Value);
|
||||
}
|
||||
|
||||
_genesisMeter?.Logout();
|
||||
if (!StopUpdateProcess)
|
||||
{
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
_actualOperation = "";
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region StateMachine
|
||||
|
||||
/// <summary>
|
||||
/// State machine for metrology lookup table update process
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Introduced lock for repeated execution of state machine
|
||||
/// </remarks>
|
||||
private void LutUpdateStateMachine()
|
||||
{
|
||||
if (_lutBackupUpdateState == _lutUpdateState)
|
||||
{
|
||||
Thread.Sleep(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// remind backup state to avoid repeated execution and side effects
|
||||
_lutBackupUpdateState = _lutUpdateState;
|
||||
switch (_lutUpdateState)
|
||||
{
|
||||
case LutUpdateState.Idle:
|
||||
break;
|
||||
|
||||
case LutUpdateState.StartInitial:
|
||||
_updateProcedureRetryCtr = 0;
|
||||
_lutUpdateState = LutUpdateState.EraseLutFile;
|
||||
break;
|
||||
|
||||
case LutUpdateState.EraseLutFile:
|
||||
_lutUpdateState = EraseLutFiles() ? LutUpdateState.DownloadLutFile : LutUpdateState.StepFailed;
|
||||
break;
|
||||
|
||||
case LutUpdateState.DownloadLutFile:
|
||||
_lutUpdateState = DownloadLutFiles() ? LutUpdateState.UploadLutFile : LutUpdateState.StepFailed;
|
||||
break;
|
||||
|
||||
case LutUpdateState.UploadLutFile:
|
||||
_lutUpdateState = UploadAndCompareLutFiles() ? LutUpdateState.FinalizeLutDownload : LutUpdateState.StepFailed;
|
||||
break;
|
||||
|
||||
case LutUpdateState.FinalizeLutDownload:
|
||||
_lutUpdateState =
|
||||
FinalizeLutDownload() ? LutUpdateState.Idle : LutUpdateState.StepFailed;
|
||||
break;
|
||||
|
||||
case LutUpdateState.CompareLutFile:
|
||||
break;
|
||||
|
||||
case LutUpdateState.StepFailed:
|
||||
_lutUpdateState = _updateProcedureRetryCtr++ < UpdateProcedureRetries
|
||||
? LutUpdateState.RepeatLutUpdate
|
||||
: LutUpdateState.UpdateFailed;
|
||||
break;
|
||||
|
||||
case LutUpdateState.RepeatLutUpdate:
|
||||
_lutUpdateState = LutUpdateState.DownloadLutFile;
|
||||
if (_updateProcedureRetryCtr >= IncreaseTimeoutUpdateProcedureRetries)
|
||||
{
|
||||
_meterFile?.SetExtremeFileWriteTimeout();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LutUpdateState.UpdateFailed:
|
||||
StopUpdateProcess = true;
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
break;
|
||||
|
||||
case LutUpdateState.LutUpdateStateListDelimiter:
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
break;
|
||||
|
||||
default:
|
||||
_lutUpdateState = LutUpdateState.Idle;
|
||||
break;
|
||||
}
|
||||
}// lock for identical state
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region LutFile
|
||||
/// <summary>
|
||||
/// Check the content of the metrology lookup table file
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-25" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean ValidateLutFile()
|
||||
{
|
||||
// check if LUT file contains data
|
||||
if (LutFile?.BinData == null || LutFile.BinData.Count < SizeLutFile)
|
||||
{
|
||||
ErrorMessage = "File size mismatch!";
|
||||
return false;
|
||||
}
|
||||
|
||||
LutFile.IsValid = false;
|
||||
// extract the identifier and check, if this is a LUT file
|
||||
LutFile.StrLutFileId =
|
||||
Encoding.UTF8.GetString(LutFile.BinData.ToArray(), IndexLutFileId, IndexDataLength);
|
||||
if (LutFile.StrLutFileId != StrLutFileId)
|
||||
return false;
|
||||
|
||||
LutFile.MeterSize = (MeterSize)LutFile.BinData[IndexMeterSize];
|
||||
LutFile.FileCrc = (UInt16)(LutFile.BinData[IndexCrc] + (LutFile.BinData[IndexCrc + 1] << 8));
|
||||
LutFile.Version = (UInt16)(LutFile.BinData[IndexVersion] + (LutFile.BinData[IndexVersion + 1] << 8));
|
||||
LutFile.DataLength = (UInt32)(LutFile.BinData[IndexDataLength]
|
||||
+ (LutFile.BinData[IndexDataLength + 1] << 8)
|
||||
+ (LutFile.BinData[IndexDataLength + 2] << 16)
|
||||
+ (LutFile.BinData[IndexDataLength + 3] << 24));
|
||||
// calculate CRC and compare this with the file CRC
|
||||
var entireFile = new List<Byte>();
|
||||
entireFile.AddRange(LutFile.BinData);
|
||||
var payload = new List<Byte>();
|
||||
payload.AddRange(entireFile.GetRange(IndexVersion, LutFileDataLength + LengthVersion));
|
||||
var calculatedCrc = Crc16Ccitt.CalculateMsb1021(payload.ToArray());
|
||||
if (calculatedCrc != LutFile.FileCrc)
|
||||
{
|
||||
ErrorMessage = "CRC mismatch!";
|
||||
return false;
|
||||
}
|
||||
|
||||
LutFile.CalculatedCrc = calculatedCrc;
|
||||
LutFile.IsValid = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Download the CRC, the meter size and store calibration as preparation for the lookup table
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean FinalizeLutDownload()
|
||||
{
|
||||
var returnValue = true;
|
||||
|
||||
var retryCtr = 0;
|
||||
if (LutFile == null || _genesisMeter == null || _meterFile == null)
|
||||
return false;
|
||||
// set extended timeout for trigger upgrade response delay
|
||||
_genesisMeter.TransmitProtocol.SetResponseTimeout(5000);
|
||||
do
|
||||
{
|
||||
// for repeated entry
|
||||
if (!returnValue)
|
||||
{
|
||||
ReestablishMeterFileSystem();
|
||||
}
|
||||
|
||||
_actualOperation = "Write Lut CRC to meter";
|
||||
_operationCtr++;
|
||||
returnValue = _genesisMeter.WriteRegister<UInt32>(Register.Genesisflow.LookupFileCrc, LutFile.FileCrc);
|
||||
if (!returnValue)
|
||||
{
|
||||
const String txt = "Meter LUT CRC could not be set!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
_operationCtr--;
|
||||
continue;
|
||||
}
|
||||
|
||||
_operationCtr++;
|
||||
_actualOperation = "Write meter size";
|
||||
returnValue =
|
||||
_genesisMeter.WriteRegister(Register.Genesisflow.MeterSize, new[] { (Byte)LutFile.MeterSize });
|
||||
if (!returnValue)
|
||||
{
|
||||
const String txt = "Meter size could not be set!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
_operationCtr--;
|
||||
continue;
|
||||
}
|
||||
|
||||
_operationCtr++;
|
||||
_actualOperation = "Store calibration to meter";
|
||||
returnValue = _genesisMeter.WriteRegister(Register.Genesisflow.StoreCalibration, 1);
|
||||
if (!returnValue)
|
||||
{
|
||||
const String txt = "Meter store calibration failed!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
_operationCtr--;
|
||||
continue;
|
||||
}
|
||||
|
||||
_operationCtr++;
|
||||
_actualOperation = "Read back LUT CRC from meter";
|
||||
var lutCrc = RegisterConverter.ConvertTo<UInt32>(
|
||||
_genesisMeter.ReadRegister(Register.Genesisflow.LookupFileCrc));
|
||||
|
||||
if ((lutCrc & LutCrcErrorMask) != 0)
|
||||
{
|
||||
const String txt = "Meter LUT CRC could not be set!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
_operationCtr--;
|
||||
returnValue = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
OnProcessUpdate?.Invoke(this,
|
||||
new ProcessExecEventArgs($"Read back and validated LUT CRC 0x{lutCrc:X4}"));
|
||||
|
||||
_operationCtr++;
|
||||
_actualOperation = "Read back meter size from meter";
|
||||
var meterSize = (MeterSize)RegisterConverter.ConvertTo<Byte>(
|
||||
_genesisMeter.ReadRegister(Register.Genesisflow.MeterSize));
|
||||
|
||||
if (meterSize != LutFile.MeterSize)
|
||||
{
|
||||
const String txt = "Meter size could not be set!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
_operationCtr--;
|
||||
returnValue = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
ErrorMessage = "";
|
||||
OnProcessUpdate?.Invoke(this,
|
||||
new ProcessExecEventArgs("Read back and validated meter size " +
|
||||
$"{MeterSizeConverter.ConvertMeterSizeEnumToSizeName(meterSize)}"));
|
||||
|
||||
} while (!returnValue && retryCtr++ < RegisterWriteRetries && !StopUpdateProcess);
|
||||
|
||||
// set timeout back to default value
|
||||
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
|
||||
return returnValue && !StopUpdateProcess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read meter files of drive 1
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean ListMeterFilesDrive1()
|
||||
{
|
||||
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
|
||||
ReestablishMeterFileSystem();
|
||||
|
||||
if (_meterFilesDrive1 == null)
|
||||
{
|
||||
_meterFilesDrive1 = new List<String>();
|
||||
}
|
||||
_meterFilesDrive1.Clear();
|
||||
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs("List meter files drive 1"));
|
||||
if (!_meterFile.ReadMeterFileCatalog(out var meterFilesDrive1, MeterFile.StrMeterDrive1,
|
||||
MeterFile.WildcardAll.ToString()))
|
||||
return false;
|
||||
|
||||
_meterFilesDrive1.AddRange(meterFilesDrive1);
|
||||
|
||||
// inform overlay system of found files
|
||||
foreach (var meterFile in _meterFilesDrive1)
|
||||
{
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(meterFile));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Erase file and check if done!
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean EraseFile(String fileDriveName)
|
||||
{
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($"Erasing {fileDriveName}"));
|
||||
var returnValue = _meterFile.UnlockEraseWriteMeterFile(fileDriveName);
|
||||
// erase returns always TRUE, even if the erasure failed! Check with catalogue
|
||||
_meterFile.EraseMeterFile(fileDriveName);
|
||||
|
||||
//if (ListMeterFilesDrive1())
|
||||
//{
|
||||
// if (_meterFilesDrive1.Contains(fileDriveName))
|
||||
// {
|
||||
// returnValue = false;
|
||||
// var txt = $"Failed to erase {fileDriveName}!";
|
||||
// ErrorMessage = txt;
|
||||
// OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// ErrorMessage = "";
|
||||
// OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs($"Successfully erased {fileDriveName}"));
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// returnValue = false;
|
||||
// const String txt = "Meter files read error!";
|
||||
// ErrorMessage = txt;
|
||||
// OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
//}
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Erase old LUT files from meter
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean EraseLutFiles()
|
||||
{
|
||||
//counters for actual process information
|
||||
var retryCtr = 0;
|
||||
if (LutFile == null)
|
||||
return false;
|
||||
|
||||
//set extended timeout for trigger upgrade response delay
|
||||
_genesisMeter.TransmitProtocol.SetResponseTimeout(10000);
|
||||
var returnValue = true;
|
||||
|
||||
//erase loop and retry if not successful
|
||||
do
|
||||
{
|
||||
var filesToErase = new[] { StrLutMeterFileName, StrLutBackupMeterFileName };
|
||||
|
||||
// read all files which are already installed
|
||||
_actualOperation = "Catalogue installed meter files drive 1";
|
||||
_operationCtr++;
|
||||
|
||||
// read files on drive 1 to verify the LUT installation
|
||||
if (ListMeterFilesDrive1())
|
||||
{
|
||||
foreach (var fileToErase in filesToErase)
|
||||
{
|
||||
if (!_meterFilesDrive1.Contains(fileToErase))
|
||||
continue;
|
||||
|
||||
_operationCtr++;
|
||||
_actualOperation = $"Erase {fileToErase}";
|
||||
if (EraseFile(fileToErase))
|
||||
{
|
||||
ErrorMessage = "";
|
||||
continue;
|
||||
}
|
||||
|
||||
ErrorMessage = $"LUT file {fileToErase} not erased!";
|
||||
returnValue = false;
|
||||
_operationCtr--;
|
||||
}
|
||||
}
|
||||
|
||||
if (!returnValue)
|
||||
{
|
||||
ReestablishMeterFileSystem();
|
||||
}
|
||||
} while (!returnValue && retryCtr++ < FileWriteRetries && !StopUpdateProcess);
|
||||
|
||||
//set timeout back to default value
|
||||
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
|
||||
return !StopUpdateProcess && returnValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Download the metrology lookup table files and read the catalog of drive 1
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-16" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean DownloadLutFiles()
|
||||
{
|
||||
//counters for actual process information
|
||||
var retryCtr = 0;
|
||||
if (LutFile == null)
|
||||
return false;
|
||||
|
||||
//set extended timeout for trigger upgrade response delay
|
||||
_genesisMeter.TransmitProtocol.SetResponseTimeout(1000);
|
||||
var returnValue = true;
|
||||
|
||||
//write LUT files and retry if not successful
|
||||
do
|
||||
{
|
||||
var filesToDownload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName };
|
||||
|
||||
foreach (var fileToDownload in filesToDownload)
|
||||
{
|
||||
_operationCtr++;
|
||||
_actualOperation = $"Write {fileToDownload}";
|
||||
|
||||
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
|
||||
ReestablishMeterFileSystem();
|
||||
|
||||
_meterFile.UnlockEraseWriteMeterFile(fileToDownload);
|
||||
var txt = $"{fileToDownload} successfully written";
|
||||
if (_meterFile.WriteMeterFile(fileToDownload, LutFile.BinData.ToArray()))
|
||||
{
|
||||
ErrorMessage = "";
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
continue;
|
||||
}
|
||||
|
||||
txt = $"Writing of {fileToDownload} failed!";
|
||||
ErrorMessage = txt;
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
returnValue = false;
|
||||
_operationCtr--;
|
||||
}
|
||||
|
||||
// read all files on drive 1
|
||||
_operationCtr++;
|
||||
|
||||
if (ListMeterFilesDrive1())
|
||||
{
|
||||
foreach (var checkInstalledFile in filesToDownload)
|
||||
{
|
||||
if (_meterFilesDrive1.Contains(checkInstalledFile))
|
||||
{
|
||||
ErrorMessage = "";
|
||||
var txt = $"{checkInstalledFile} found in meter";
|
||||
OnProcessUpdate?.Invoke(this, new ProcessExecEventArgs(txt));
|
||||
continue;
|
||||
}
|
||||
|
||||
ErrorMessage = $"LUT file {StrLutMeterFileName} not installed!\n";
|
||||
returnValue = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = false;
|
||||
}
|
||||
|
||||
if (!returnValue)
|
||||
{
|
||||
ReestablishMeterFileSystem();
|
||||
}
|
||||
} while (!returnValue && retryCtr++ < FileWriteRetries && !StopUpdateProcess);
|
||||
|
||||
//set timeout back to default value
|
||||
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
|
||||
return !StopUpdateProcess && returnValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Upload the metrology lookup table files and read the catalog of drive 1
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Mar-04" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
/// <remarks date="2022-Apr-01" author="Thomas Wiedebusch">
|
||||
/// - Take the different size of original and receive buffer, which is an integer division by 4, into account.
|
||||
/// </remarks>
|
||||
private Boolean UploadAndCompareLutFiles()
|
||||
{
|
||||
//counters for actual process information
|
||||
var retryCtr = 0;
|
||||
if (LutFile == null)
|
||||
return false;
|
||||
|
||||
//set extended timeout for trigger upgrade response delay
|
||||
_genesisMeter.TransmitProtocol.SetResponseTimeout(1000);
|
||||
var returnValue = true;
|
||||
|
||||
//write LUT files and retry if not successful
|
||||
do
|
||||
{
|
||||
var filesToUpload = new[] { StrLutMeterFileName, StrLutBackupMeterFileName };
|
||||
|
||||
foreach (var fileToUpload in filesToUpload)
|
||||
{
|
||||
_operationCtr++;
|
||||
_actualOperation = $"Read {fileToUpload}";
|
||||
|
||||
// logout and re-login to clear all ongoing processes and clear the Genesis buffers
|
||||
ReestablishMeterFileSystem();
|
||||
|
||||
if (_meterFile.ReadMeterFile(fileToUpload, out var binData, SizeLutFile))
|
||||
{
|
||||
// compare the entire buffer which also includes the header of the file, remind the original
|
||||
// buffer may be smaller due to the chunk size of the communication (always dividable by 4),
|
||||
// meaning the receive buffer is always and integer of this chunk size!
|
||||
if (LutFile.BinData.Where((t, ctr) => t != binData[ctr]).Any())
|
||||
{
|
||||
ErrorMessage = $"Meter LUT file is unequal to downloaded {fileToUpload}!";
|
||||
returnValue = false;
|
||||
_operationCtr--;
|
||||
}
|
||||
|
||||
if (returnValue)
|
||||
{
|
||||
OnProcessUpdate?.Invoke(this,
|
||||
new ProcessExecEventArgs($"LUT file {fileToUpload} of meter successfully compared!"));
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
ErrorMessage += $"Reading of {fileToUpload} failed!";
|
||||
returnValue = false;
|
||||
_operationCtr--;
|
||||
}
|
||||
}
|
||||
|
||||
if (!returnValue)
|
||||
{
|
||||
ReestablishMeterFileSystem();
|
||||
}
|
||||
} while (!returnValue && retryCtr++ < FileWriteRetries && !StopUpdateProcess);
|
||||
|
||||
//set timeout back to default value
|
||||
_genesisMeter.TransmitProtocol.SetDefaultResponseTimeout();
|
||||
|
||||
return !StopUpdateProcess && returnValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load file from memory
|
||||
/// </summary>
|
||||
/// <param name="filePathName">to binary files</param>
|
||||
/// <returns></returns>
|
||||
/// <remarks date="2022-Feb-15" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public Boolean LoadLutFile(String filePathName)
|
||||
{
|
||||
if (!File.Exists(filePathName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LutFile = null;
|
||||
LutFile = new MeterLutFile(filePathName)
|
||||
{
|
||||
BinData = new List<Byte>(File.ReadAllBytes(filePathName))
|
||||
};
|
||||
|
||||
// validate the file
|
||||
return ValidateLutFile();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -81,7 +81,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
|
||||
public static readonly String StartHit = "GENESISFLOW_StartHit";
|
||||
|
||||
public static readonly String NumFirePulses = "GENESISFLOW_NumFirePulses";
|
||||
|
||||
public static readonly String LookupFileCrc = "GENESISFLOW_LookupFileCrc";
|
||||
|
||||
};
|
||||
|
||||
@@ -121,6 +121,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
|
||||
Configexchange.FileClose,
|
||||
Configexchange.FileWrite,
|
||||
Configexchange.FileRead,
|
||||
Configexchange.Catalogue,
|
||||
Configexchange.GetFilePointerOffset,
|
||||
Configexchange.SetFilePointerOffset,
|
||||
Configexchange.FileRemove,
|
||||
@@ -135,6 +136,9 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.Registers
|
||||
Genesisflow.TriggerIdle,
|
||||
Genesisflow.LedMode,
|
||||
Genesisflow.SampleRate,
|
||||
Genesisflow.MeterSize,
|
||||
Genesisflow.LookupFileCrc,
|
||||
Genesisflow.StoreCalibration,
|
||||
|
||||
Sensusradio.WakeupInterval,
|
||||
Sensusradio.FrequencyIndicator
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
46bd00889699f5a20a4981a22f62b66368323855
|
||||
7ac73abb7afd9e6ddc0520a1568581c7ed0afd36
|
||||
|
||||
@@ -7,6 +7,59 @@ namespace Logic.ProductionToProductMapper.Cordonel
|
||||
/// </summary>
|
||||
public static class MeterSizeConverter
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert Meter size enumeration to name .
|
||||
/// </summary>
|
||||
public static String ConvertMeterSizeEnumToSizeName(MeterSize meterSizeId)
|
||||
{
|
||||
switch (meterSizeId)
|
||||
{
|
||||
case MeterSize.DN40:
|
||||
return "DN40";
|
||||
case MeterSize.DN50 :
|
||||
return "DN50";
|
||||
case MeterSize.DN65:
|
||||
return "DN65";
|
||||
case MeterSize.DN80:
|
||||
return "DN80";
|
||||
case MeterSize.DN100:
|
||||
return "DN100";
|
||||
case MeterSize.DN125:
|
||||
return "DN125";
|
||||
case MeterSize.DN150:
|
||||
return "DN150";
|
||||
case MeterSize.DN200:
|
||||
return "DN200";
|
||||
case MeterSize.DN250:
|
||||
return "DN250";
|
||||
case MeterSize.DN300:
|
||||
return "DN300";
|
||||
|
||||
case MeterSize.US1_5:
|
||||
return "US1_5";
|
||||
case MeterSize.US2:
|
||||
return "US2";
|
||||
case MeterSize.US3:
|
||||
return "US3";
|
||||
case MeterSize.US4:
|
||||
return "US4";
|
||||
case MeterSize.US6:
|
||||
return "US6";
|
||||
case MeterSize.US8:
|
||||
return "US8";
|
||||
case MeterSize.US10:
|
||||
return "US10";
|
||||
case MeterSize.US12:
|
||||
return "US12";
|
||||
|
||||
case MeterSize.DNMAX:
|
||||
return "*";
|
||||
default:
|
||||
return "*";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Convert from order meter size of production order to name .
|
||||
/// </summary>
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
<HintPath>..\Hardware\WaterMeter\Genesis\GenesisConfig\bin\Debug\NLog.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SIRTCOM">
|
||||
<HintPath>..\..\packages\Sirt\SIRTCOM.dll</HintPath>
|
||||
<HintPath>.\SIRTCOM.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Configuration" />
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -1 +1 @@
|
||||
0d85a5b3a7561b41163c20e5dc7713bcd0d65555
|
||||
f64d563def603c89cafafa61a3219ba97e1e344c
|
||||
|
||||
+1
-1
@@ -259,7 +259,7 @@
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(116, 25);
|
||||
this.button1.TabIndex = 0;
|
||||
this.button1.Text = "Set Trigger Active";
|
||||
this.button1.Text = "Clear Display";
|
||||
this.button1.UseVisualStyleBackColor = true;
|
||||
this.button1.Click += new System.EventHandler(this.button1_Click);
|
||||
//
|
||||
|
||||
@@ -18,7 +18,6 @@ using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
|
||||
using Xylem.Common.Logic.ProductionOrderCore.FW;
|
||||
using Xylem.Common.Logic.SoftwareAccessHelper;
|
||||
using Xylem.Common.Ui.GenesisToolBox.Properties;
|
||||
@@ -120,13 +119,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
"This is a stepwise update, proceed until update is completed!\n";
|
||||
private const String StrUpdateErrorMessage =
|
||||
"FW UPDATE FAILED!\n\n";
|
||||
private FwSource fwSource = FwSource.File;
|
||||
private FwSource _fwSource = FwSource.File;
|
||||
private enum FwSource
|
||||
{
|
||||
File,
|
||||
Production,
|
||||
Db,
|
||||
|
||||
// Production,
|
||||
Db
|
||||
}
|
||||
#endregion
|
||||
#region FormControls
|
||||
@@ -670,6 +668,9 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
return;
|
||||
}
|
||||
|
||||
lblOverall.Text = @"Establish data base connection..";
|
||||
lblOverall.Visible = true;
|
||||
Update();
|
||||
_currentGenesis?.DisposeMeter();
|
||||
//dispose old meter
|
||||
_meterBatch.RemoveAllMeters();
|
||||
@@ -1030,7 +1031,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
_packageFileToFileAppsValidated = _meterFwUpdate.ValidateFileAppsWithPackageFile();
|
||||
}
|
||||
catch (Exception e)
|
||||
catch (Exception)
|
||||
{
|
||||
if (_meterFwUpdate.CoreRevisionMaximum == null)
|
||||
MessageBoxShow(@"Core Revision missing in ADF!", @"FAILED",
|
||||
@@ -1174,9 +1175,10 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
|
||||
private void btnOpenPackageControlFile_Click(Object sender, EventArgs e)
|
||||
{
|
||||
////reload last path
|
||||
//reload last path
|
||||
dlgOpenPackageFile.InitialDirectory = DefaultPackageFile;
|
||||
|
||||
dlgOpenPackageFile.DefaultExt = ".txt";
|
||||
if (dlgOpenPackageFile.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
@@ -1657,11 +1659,11 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
|
||||
private void checkSelectionChanged(FwSource newMode)
|
||||
{
|
||||
if (newMode == fwSource)
|
||||
if (newMode == _fwSource)
|
||||
{
|
||||
return;
|
||||
}
|
||||
fwSource = newMode;
|
||||
_fwSource = newMode;
|
||||
}
|
||||
|
||||
private void PushFwFile(MeterFwUpdate meterFwUpdate)
|
||||
@@ -1778,14 +1780,14 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
|
||||
private void button1_Click(Object sender, EventArgs e)
|
||||
{
|
||||
if (_currentGenesis == null || !_currentGenesis.IsLoggedOn)
|
||||
if (_currentGenesis == null ) return;
|
||||
if (!_currentGenesis.IsLoggedOn)
|
||||
{
|
||||
return;
|
||||
_currentGenesis.Login();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
_currentGenesis.SetLcdText(true, new Byte[] { 0x00, 0x00, 0x00, 0x00 });
|
||||
}
|
||||
_currentGenesis.Logout();
|
||||
}
|
||||
|
||||
private void btnFixBat_Click(Object sender, EventArgs e)
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
partial class FrmHistory
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.rtbHistory = new System.Windows.Forms.RichTextBox();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// rtbHistory
|
||||
//
|
||||
this.rtbHistory.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rtbHistory.Location = new System.Drawing.Point(3, 53);
|
||||
this.rtbHistory.Name = "rtbHistory";
|
||||
this.rtbHistory.Size = new System.Drawing.Size(378, 673);
|
||||
this.rtbHistory.TabIndex = 31;
|
||||
this.rtbHistory.Text = "";
|
||||
this.rtbHistory.TextChanged += new System.EventHandler(this.rtbHistory_TextChanged);
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 1;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.rtbHistory, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 2;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 111F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(384, 729);
|
||||
this.tableLayoutPanel1.TabIndex = 38;
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
this.tableLayoutPanel2.ColumnCount = 2;
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
this.tableLayoutPanel2.RowCount = 1;
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(378, 44);
|
||||
this.tableLayoutPanel2.TabIndex = 36;
|
||||
//
|
||||
// FrmHistory
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.ClientSize = new System.Drawing.Size(384, 729);
|
||||
this.ControlBox = false;
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(400, 768);
|
||||
this.MinimizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(400, 768);
|
||||
this.Name = "FrmHistory";
|
||||
this.ShowIcon = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "FW-Update Process History";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmHistory_FormClosing);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||
public System.Windows.Forms.RichTextBox rtbHistory;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
/// <summary>
|
||||
/// History display of update process
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public partial class FrmHistory : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
public FrmHistory()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void FrmHistory_FormClosing(Object sender, FormClosingEventArgs e)
|
||||
{
|
||||
//avoid destroying of object
|
||||
e.Cancel = true;
|
||||
//instead just hide it
|
||||
Hide();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Select always the last line for the display.
|
||||
/// </summary>
|
||||
private void rtbHistory_TextChanged(Object sender, EventArgs e)
|
||||
{
|
||||
//rtbHistory.SelectionStart = rtbHistory.Text.Length;
|
||||
//rtbHistory.ScrollToCaret();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
+522
@@ -0,0 +1,522 @@
|
||||
namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
partial class FrmLutUpdate
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.grpSetup = new System.Windows.Forms.GroupBox();
|
||||
this.tbxRegionRadio = new System.Windows.Forms.TextBox();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.tbxPcbId = new System.Windows.Forms.TextBox();
|
||||
this.tbxMeterFw = new System.Windows.Forms.TextBox();
|
||||
this.tbxMeterMeterSize = new System.Windows.Forms.TextBox();
|
||||
this.tbxMeterLutCrc = new System.Windows.Forms.TextBox();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.lblFwVersion = new System.Windows.Forms.Label();
|
||||
this.btnConnect = new System.Windows.Forms.Button();
|
||||
this.lblConnectPcb = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.cbComSlot = new System.Windows.Forms.ComboBox();
|
||||
this.lblWaitingForMeterResponse = new System.Windows.Forms.Label();
|
||||
this.btnStopFwUpdate = new System.Windows.Forms.Button();
|
||||
this.btnDownloadLutFile = new System.Windows.Forms.Button();
|
||||
this.lblOverall = new System.Windows.Forms.Label();
|
||||
this.barSingleProgressUpdate = new System.Windows.Forms.ProgressBar();
|
||||
this.lblActualProcess = new System.Windows.Forms.Label();
|
||||
this.barOverallProgressUpdate = new System.Windows.Forms.ProgressBar();
|
||||
this.tmrProgressUpdate = new System.Windows.Forms.Timer(this.components);
|
||||
this.dlgOpenLuFile = new System.Windows.Forms.OpenFileDialog();
|
||||
this.lblFwUpdateInfo = new System.Windows.Forms.Label();
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.tbxFileMeterSize = new System.Windows.Forms.TextBox();
|
||||
this.tbxFileCrc = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.lblLutFileLoadedInfo = new System.Windows.Forms.Label();
|
||||
this.tbxLutFilePathName = new System.Windows.Forms.TextBox();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.btnOpenLutFile = new System.Windows.Forms.Button();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.lblUpdateTime = new System.Windows.Forms.Label();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.grpSetup.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// grpSetup
|
||||
//
|
||||
this.grpSetup.Controls.Add(this.tbxRegionRadio);
|
||||
this.grpSetup.Controls.Add(this.label8);
|
||||
this.grpSetup.Controls.Add(this.tbxPcbId);
|
||||
this.grpSetup.Controls.Add(this.tbxMeterFw);
|
||||
this.grpSetup.Controls.Add(this.tbxMeterMeterSize);
|
||||
this.grpSetup.Controls.Add(this.tbxMeterLutCrc);
|
||||
this.grpSetup.Controls.Add(this.label5);
|
||||
this.grpSetup.Controls.Add(this.label6);
|
||||
this.grpSetup.Controls.Add(this.lblFwVersion);
|
||||
this.grpSetup.Controls.Add(this.btnConnect);
|
||||
this.grpSetup.Controls.Add(this.lblConnectPcb);
|
||||
this.grpSetup.Controls.Add(this.label2);
|
||||
this.grpSetup.Controls.Add(this.cbComSlot);
|
||||
this.grpSetup.Location = new System.Drawing.Point(12, 56);
|
||||
this.grpSetup.Name = "grpSetup";
|
||||
this.grpSetup.Size = new System.Drawing.Size(248, 212);
|
||||
this.grpSetup.TabIndex = 24;
|
||||
this.grpSetup.TabStop = false;
|
||||
this.grpSetup.Text = "Cordonel";
|
||||
//
|
||||
// tbxRegionRadio
|
||||
//
|
||||
this.tbxRegionRadio.Location = new System.Drawing.Point(124, 178);
|
||||
this.tbxRegionRadio.Name = "tbxRegionRadio";
|
||||
this.tbxRegionRadio.ReadOnly = true;
|
||||
this.tbxRegionRadio.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxRegionRadio.TabIndex = 34;
|
||||
//
|
||||
// label8
|
||||
//
|
||||
this.label8.AutoSize = true;
|
||||
this.label8.Location = new System.Drawing.Point(10, 182);
|
||||
this.label8.Name = "label8";
|
||||
this.label8.Size = new System.Drawing.Size(105, 13);
|
||||
this.label8.TabIndex = 33;
|
||||
this.label8.Text = "Region/Radio[MHz]:";
|
||||
//
|
||||
// tbxPcbId
|
||||
//
|
||||
this.tbxPcbId.Location = new System.Drawing.Point(124, 59);
|
||||
this.tbxPcbId.Name = "tbxPcbId";
|
||||
this.tbxPcbId.ReadOnly = true;
|
||||
this.tbxPcbId.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxPcbId.TabIndex = 32;
|
||||
//
|
||||
// tbxMeterFw
|
||||
//
|
||||
this.tbxMeterFw.Location = new System.Drawing.Point(124, 88);
|
||||
this.tbxMeterFw.Name = "tbxMeterFw";
|
||||
this.tbxMeterFw.ReadOnly = true;
|
||||
this.tbxMeterFw.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxMeterFw.TabIndex = 31;
|
||||
//
|
||||
// tbxMeterMeterSize
|
||||
//
|
||||
this.tbxMeterMeterSize.Location = new System.Drawing.Point(124, 148);
|
||||
this.tbxMeterMeterSize.Name = "tbxMeterMeterSize";
|
||||
this.tbxMeterMeterSize.ReadOnly = true;
|
||||
this.tbxMeterMeterSize.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxMeterMeterSize.TabIndex = 30;
|
||||
//
|
||||
// tbxMeterLutCrc
|
||||
//
|
||||
this.tbxMeterLutCrc.Location = new System.Drawing.Point(124, 118);
|
||||
this.tbxMeterLutCrc.Name = "tbxMeterLutCrc";
|
||||
this.tbxMeterLutCrc.ReadOnly = true;
|
||||
this.tbxMeterLutCrc.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxMeterLutCrc.TabIndex = 29;
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(10, 152);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(60, 13);
|
||||
this.label5.TabIndex = 28;
|
||||
this.label5.Text = "Meter Size:";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(10, 122);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(86, 13);
|
||||
this.label6.TabIndex = 27;
|
||||
this.label6.Text = "Meter LUT CRC:";
|
||||
//
|
||||
// lblFwVersion
|
||||
//
|
||||
this.lblFwVersion.AutoSize = true;
|
||||
this.lblFwVersion.Location = new System.Drawing.Point(10, 92);
|
||||
this.lblFwVersion.Name = "lblFwVersion";
|
||||
this.lblFwVersion.Size = new System.Drawing.Size(57, 13);
|
||||
this.lblFwVersion.TabIndex = 25;
|
||||
this.lblFwVersion.Text = "Meter FW:";
|
||||
//
|
||||
// btnConnect
|
||||
//
|
||||
this.btnConnect.Location = new System.Drawing.Point(123, 24);
|
||||
this.btnConnect.Name = "btnConnect";
|
||||
this.btnConnect.Size = new System.Drawing.Size(116, 25);
|
||||
this.btnConnect.TabIndex = 24;
|
||||
this.btnConnect.Text = "Connect";
|
||||
this.btnConnect.UseVisualStyleBackColor = true;
|
||||
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
|
||||
//
|
||||
// lblConnectPcb
|
||||
//
|
||||
this.lblConnectPcb.AutoSize = true;
|
||||
this.lblConnectPcb.Location = new System.Drawing.Point(10, 62);
|
||||
this.lblConnectPcb.Name = "lblConnectPcb";
|
||||
this.lblConnectPcb.Size = new System.Drawing.Size(33, 13);
|
||||
this.lblConnectPcb.TabIndex = 23;
|
||||
this.lblConnectPcb.Text = "NOT ";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(10, 30);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(28, 13);
|
||||
this.label2.TabIndex = 20;
|
||||
this.label2.Text = "Slot:";
|
||||
//
|
||||
// cbComSlot
|
||||
//
|
||||
this.cbComSlot.FormattingEnabled = true;
|
||||
this.cbComSlot.Items.AddRange(new object[] {
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"10",
|
||||
"11",
|
||||
"12",
|
||||
"13",
|
||||
"14",
|
||||
"15",
|
||||
"16",
|
||||
"17",
|
||||
"18",
|
||||
"19",
|
||||
"20"});
|
||||
this.cbComSlot.Location = new System.Drawing.Point(44, 27);
|
||||
this.cbComSlot.Name = "cbComSlot";
|
||||
this.cbComSlot.Size = new System.Drawing.Size(37, 21);
|
||||
this.cbComSlot.TabIndex = 5;
|
||||
this.cbComSlot.Text = "1";
|
||||
this.cbComSlot.SelectedIndexChanged += new System.EventHandler(this.cbComSlot_SelectedIndexChanged);
|
||||
//
|
||||
// lblWaitingForMeterResponse
|
||||
//
|
||||
this.lblWaitingForMeterResponse.AutoSize = true;
|
||||
this.lblWaitingForMeterResponse.ForeColor = System.Drawing.Color.Red;
|
||||
this.lblWaitingForMeterResponse.Location = new System.Drawing.Point(532, 280);
|
||||
this.lblWaitingForMeterResponse.Name = "lblWaitingForMeterResponse";
|
||||
this.lblWaitingForMeterResponse.Size = new System.Drawing.Size(182, 13);
|
||||
this.lblWaitingForMeterResponse.TabIndex = 18;
|
||||
this.lblWaitingForMeterResponse.Text = "WAITING FOR METER RESPONSE";
|
||||
//
|
||||
// btnStopFwUpdate
|
||||
//
|
||||
this.btnStopFwUpdate.Location = new System.Drawing.Point(310, 181);
|
||||
this.btnStopFwUpdate.Name = "btnStopFwUpdate";
|
||||
this.btnStopFwUpdate.Size = new System.Drawing.Size(116, 25);
|
||||
this.btnStopFwUpdate.TabIndex = 8;
|
||||
this.btnStopFwUpdate.Text = "STOP";
|
||||
this.btnStopFwUpdate.UseVisualStyleBackColor = true;
|
||||
this.btnStopFwUpdate.Click += new System.EventHandler(this.btnStopFwUpdate_Click);
|
||||
//
|
||||
// btnDownloadLutFile
|
||||
//
|
||||
this.btnDownloadLutFile.Location = new System.Drawing.Point(310, 147);
|
||||
this.btnDownloadLutFile.Name = "btnDownloadLutFile";
|
||||
this.btnDownloadLutFile.Size = new System.Drawing.Size(116, 25);
|
||||
this.btnDownloadLutFile.TabIndex = 0;
|
||||
this.btnDownloadLutFile.Text = "Download";
|
||||
this.btnDownloadLutFile.UseVisualStyleBackColor = true;
|
||||
this.btnDownloadLutFile.Click += new System.EventHandler(this.btnDownloadLutFile_Click);
|
||||
//
|
||||
// lblOverall
|
||||
//
|
||||
this.lblOverall.AutoSize = true;
|
||||
this.lblOverall.Location = new System.Drawing.Point(21, 317);
|
||||
this.lblOverall.Name = "lblOverall";
|
||||
this.lblOverall.Size = new System.Drawing.Size(80, 13);
|
||||
this.lblOverall.TabIndex = 7;
|
||||
this.lblOverall.Text = "Overall process";
|
||||
//
|
||||
// barSingleProgressUpdate
|
||||
//
|
||||
this.barSingleProgressUpdate.Location = new System.Drawing.Point(12, 296);
|
||||
this.barSingleProgressUpdate.Name = "barSingleProgressUpdate";
|
||||
this.barSingleProgressUpdate.Size = new System.Drawing.Size(702, 18);
|
||||
this.barSingleProgressUpdate.TabIndex = 6;
|
||||
this.barSingleProgressUpdate.Visible = false;
|
||||
//
|
||||
// lblActualProcess
|
||||
//
|
||||
this.lblActualProcess.AutoSize = true;
|
||||
this.lblActualProcess.Location = new System.Drawing.Point(21, 280);
|
||||
this.lblActualProcess.Name = "lblActualProcess";
|
||||
this.lblActualProcess.Size = new System.Drawing.Size(76, 13);
|
||||
this.lblActualProcess.TabIndex = 4;
|
||||
this.lblActualProcess.Text = "Process status";
|
||||
//
|
||||
// barOverallProgressUpdate
|
||||
//
|
||||
this.barOverallProgressUpdate.Location = new System.Drawing.Point(12, 333);
|
||||
this.barOverallProgressUpdate.Name = "barOverallProgressUpdate";
|
||||
this.barOverallProgressUpdate.Size = new System.Drawing.Size(702, 18);
|
||||
this.barOverallProgressUpdate.TabIndex = 3;
|
||||
this.barOverallProgressUpdate.Visible = false;
|
||||
//
|
||||
// tmrProgressUpdate
|
||||
//
|
||||
this.tmrProgressUpdate.Interval = 200;
|
||||
this.tmrProgressUpdate.Tick += new System.EventHandler(this.tmrProgressUpdate_Tick);
|
||||
//
|
||||
// dlgOpenLuFile
|
||||
//
|
||||
this.dlgOpenLuFile.Filter = "metrology lookup tables (*.lut)|*.lut";
|
||||
//
|
||||
// lblFwUpdateInfo
|
||||
//
|
||||
this.lblFwUpdateInfo.AutoSize = true;
|
||||
this.lblFwUpdateInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.lblFwUpdateInfo.Location = new System.Drawing.Point(18, 32);
|
||||
this.lblFwUpdateInfo.Name = "lblFwUpdateInfo";
|
||||
this.lblFwUpdateInfo.Size = new System.Drawing.Size(72, 13);
|
||||
this.lblFwUpdateInfo.TabIndex = 27;
|
||||
this.lblFwUpdateInfo.Text = "Version: 0.0.0";
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.Image = global::Xylem.Common.Ui.GenesisToolBox.Properties.Resources.SensusLogoXylem;
|
||||
this.pictureBox1.Location = new System.Drawing.Point(611, 3);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(102, 54);
|
||||
this.pictureBox1.TabIndex = 29;
|
||||
this.pictureBox1.TabStop = false;
|
||||
//
|
||||
// openFileDialog1
|
||||
//
|
||||
this.openFileDialog1.FileName = "openFileDialog1";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.tbxFileMeterSize);
|
||||
this.groupBox1.Controls.Add(this.tbxFileCrc);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.lblLutFileLoadedInfo);
|
||||
this.groupBox1.Controls.Add(this.btnDownloadLutFile);
|
||||
this.groupBox1.Controls.Add(this.tbxLutFilePathName);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.btnStopFwUpdate);
|
||||
this.groupBox1.Controls.Add(this.btnOpenLutFile);
|
||||
this.groupBox1.Location = new System.Drawing.Point(278, 56);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(436, 212);
|
||||
this.groupBox1.TabIndex = 28;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Lookup Table File";
|
||||
//
|
||||
// tbxFileMeterSize
|
||||
//
|
||||
this.tbxFileMeterSize.Location = new System.Drawing.Point(104, 148);
|
||||
this.tbxFileMeterSize.Name = "tbxFileMeterSize";
|
||||
this.tbxFileMeterSize.ReadOnly = true;
|
||||
this.tbxFileMeterSize.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxFileMeterSize.TabIndex = 13;
|
||||
//
|
||||
// tbxFileCrc
|
||||
//
|
||||
this.tbxFileCrc.Location = new System.Drawing.Point(104, 118);
|
||||
this.tbxFileCrc.Name = "tbxFileCrc";
|
||||
this.tbxFileCrc.ReadOnly = true;
|
||||
this.tbxFileCrc.Size = new System.Drawing.Size(68, 20);
|
||||
this.tbxFileCrc.TabIndex = 12;
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(10, 152);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(79, 13);
|
||||
this.label3.TabIndex = 11;
|
||||
this.label3.Text = "File Meter Size:";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(10, 122);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(75, 13);
|
||||
this.label1.TabIndex = 10;
|
||||
this.label1.Text = "File LUT CRC:";
|
||||
//
|
||||
// lblLutFileLoadedInfo
|
||||
//
|
||||
this.lblLutFileLoadedInfo.AutoSize = true;
|
||||
this.lblLutFileLoadedInfo.Location = new System.Drawing.Point(10, 60);
|
||||
this.lblLutFileLoadedInfo.Name = "lblLutFileLoadedInfo";
|
||||
this.lblLutFileLoadedInfo.Size = new System.Drawing.Size(97, 13);
|
||||
this.lblLutFileLoadedInfo.TabIndex = 9;
|
||||
this.lblLutFileLoadedInfo.Text = "LUT file not loaded";
|
||||
//
|
||||
// tbxLutFilePathName
|
||||
//
|
||||
this.tbxLutFilePathName.Location = new System.Drawing.Point(104, 27);
|
||||
this.tbxLutFilePathName.Name = "tbxLutFilePathName";
|
||||
this.tbxLutFilePathName.ReadOnly = true;
|
||||
this.tbxLutFilePathName.Size = new System.Drawing.Size(322, 20);
|
||||
this.tbxLutFilePathName.TabIndex = 2;
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(10, 30);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(63, 13);
|
||||
this.label4.TabIndex = 1;
|
||||
this.label4.Text = "Path Name:";
|
||||
//
|
||||
// btnOpenLutFile
|
||||
//
|
||||
this.btnOpenLutFile.Location = new System.Drawing.Point(310, 112);
|
||||
this.btnOpenLutFile.Name = "btnOpenLutFile";
|
||||
this.btnOpenLutFile.Size = new System.Drawing.Size(116, 26);
|
||||
this.btnOpenLutFile.TabIndex = 0;
|
||||
this.btnOpenLutFile.Text = "Open";
|
||||
this.btnOpenLutFile.UseVisualStyleBackColor = true;
|
||||
this.btnOpenLutFile.Click += new System.EventHandler(this.btnOpenLutFile_Click);
|
||||
//
|
||||
// label9
|
||||
//
|
||||
this.label9.AutoSize = true;
|
||||
this.label9.Location = new System.Drawing.Point(250, 280);
|
||||
this.label9.Name = "label9";
|
||||
this.label9.Size = new System.Drawing.Size(101, 13);
|
||||
this.label9.TabIndex = 30;
|
||||
this.label9.Text = "UpdateTime [min:s]:";
|
||||
//
|
||||
// lblUpdateTime
|
||||
//
|
||||
this.lblUpdateTime.AutoSize = true;
|
||||
this.lblUpdateTime.Location = new System.Drawing.Point(357, 280);
|
||||
this.lblUpdateTime.Name = "lblUpdateTime";
|
||||
this.lblUpdateTime.Size = new System.Drawing.Size(28, 13);
|
||||
this.lblUpdateTime.TabIndex = 31;
|
||||
this.lblUpdateTime.Text = "0:00";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label7.Location = new System.Drawing.Point(16, 9);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(159, 16);
|
||||
this.label7.TabIndex = 32;
|
||||
this.label7.Text = "Cordonel LUT Update";
|
||||
//
|
||||
// FrmLutUpdate
|
||||
//
|
||||
this.AccessibleRole = System.Windows.Forms.AccessibleRole.Sound;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(723, 366);
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.lblUpdateTime);
|
||||
this.Controls.Add(this.label9);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.lblWaitingForMeterResponse);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.lblOverall);
|
||||
this.Controls.Add(this.lblFwUpdateInfo);
|
||||
this.Controls.Add(this.barSingleProgressUpdate);
|
||||
this.Controls.Add(this.lblActualProcess);
|
||||
this.Controls.Add(this.grpSetup);
|
||||
this.Controls.Add(this.barOverallProgressUpdate);
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(739, 405);
|
||||
this.MinimizeBox = false;
|
||||
this.MinimumSize = new System.Drawing.Size(739, 405);
|
||||
this.Name = "FrmLutUpdate";
|
||||
this.Text = "Metrology Lookup Table Update";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmLutUpdate_FormClosing);
|
||||
this.Load += new System.EventHandler(this.FrmLutUpdate_Load);
|
||||
this.grpSetup.ResumeLayout(false);
|
||||
this.grpSetup.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox grpSetup;
|
||||
private System.Windows.Forms.Button btnConnect;
|
||||
private System.Windows.Forms.Label lblConnectPcb;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ComboBox cbComSlot;
|
||||
private System.Windows.Forms.Button btnDownloadLutFile;
|
||||
private System.Windows.Forms.ProgressBar barOverallProgressUpdate;
|
||||
private System.Windows.Forms.Timer tmrProgressUpdate;
|
||||
private System.Windows.Forms.Label lblActualProcess;
|
||||
private System.Windows.Forms.Label lblOverall;
|
||||
private System.Windows.Forms.ProgressBar barSingleProgressUpdate;
|
||||
private System.Windows.Forms.OpenFileDialog dlgOpenLuFile;
|
||||
private System.Windows.Forms.Label lblFwUpdateInfo;
|
||||
private System.Windows.Forms.Button btnStopFwUpdate;
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.OpenFileDialog openFileDialog1;
|
||||
private System.Windows.Forms.Label lblWaitingForMeterResponse;
|
||||
private System.Windows.Forms.Label lblFwVersion;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox tbxLutFilePathName;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Button btnOpenLutFile;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.Label lblUpdateTime;
|
||||
private System.Windows.Forms.Label lblLutFileLoadedInfo;
|
||||
private System.Windows.Forms.TextBox tbxFileMeterSize;
|
||||
private System.Windows.Forms.TextBox tbxFileCrc;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.TextBox tbxMeterMeterSize;
|
||||
private System.Windows.Forms.TextBox tbxMeterLutCrc;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.TextBox tbxMeterFw;
|
||||
private System.Windows.Forms.TextBox tbxPcbId;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.TextBox tbxRegionRadio;
|
||||
private System.Windows.Forms.Label label8;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,687 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Logic.ProductionToProductMapper.Cordonel;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Utils.ProcessExec.EventArguments;
|
||||
|
||||
|
||||
namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
/// <summary>
|
||||
/// FW update form
|
||||
/// </summary>
|
||||
public partial class FrmLutUpdate : Form
|
||||
{
|
||||
#region Variables
|
||||
private readonly MeterBatch _meterBatch = new MeterBatch();
|
||||
private GenesisMeter _currentGenesis;
|
||||
private const String StrConnecting = "Connecting to PCB";
|
||||
private const String StrNotConnected = "NOT CONNECTED";
|
||||
private const String StrPartPcbConnected = "PCB ID: ";
|
||||
private const String StrOverallProcess = "Overall Process";
|
||||
|
||||
private MeterLutUpdate _meterLutUpdate;
|
||||
|
||||
private String _lastFwUpdateState;
|
||||
private Int32 _lastSingleProgress;
|
||||
private DateTimeOffset _startTime;
|
||||
private Boolean _resetTimeMeasurement;
|
||||
private readonly Boolean _updateGui = true;
|
||||
private Boolean _lutFileValid;
|
||||
|
||||
private Boolean _tryConnectPcb;
|
||||
private Boolean _lutFileSuccessfulWritten;
|
||||
private const String StrUpdateErrorMessage = "METROLOGY LOOKUP TABLE UPDATE FAILED!";
|
||||
private const String StrUpdateSuccessMessage = "Metrology lookup table successfulley written!";
|
||||
private const String StrLutFileInvalid = "LUT FILE INVALID";
|
||||
private const String StrLutFileValid = "LUT file loaded";
|
||||
|
||||
// external update remarks form
|
||||
private readonly FrmHistory _frmHistory = new FrmHistory();
|
||||
|
||||
private readonly Version _version;
|
||||
|
||||
// status information
|
||||
private static readonly Color ColorDefault = Color.Black;
|
||||
private static readonly Color ColorSuccess = Color.Green;
|
||||
private static readonly Color ColorProcessFailed = Color.Red;
|
||||
//private static readonly Color ColorOngoingProcess = Color.Blue;
|
||||
//private static readonly Color ColorUnknownStatus = Color.Gray;
|
||||
//private const String SuccessSign = @"✔";
|
||||
//private const String FailedSign = @"✘";
|
||||
|
||||
private const String StrSeparator = "-----------------------------------------------------" +
|
||||
"-----------------------------------------------------";
|
||||
#endregion
|
||||
|
||||
#region FormControls
|
||||
/// <summary>
|
||||
/// Ctor FW update
|
||||
/// </summary>
|
||||
public FrmLutUpdate()
|
||||
{
|
||||
InitializeComponent();
|
||||
var cultureInfo = new CultureInfo("en-GB");
|
||||
Thread.CurrentThread.CurrentUICulture = cultureInfo;
|
||||
Thread.CurrentThread.CurrentCulture = cultureInfo;
|
||||
_version = Assembly.GetExecutingAssembly().GetName().Version;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear data table and set genesis to not connected
|
||||
/// </summary>
|
||||
private void Init()
|
||||
{
|
||||
ProcessViewControl(false);
|
||||
lblConnectPcb.Text = StrNotConnected;
|
||||
lblConnectPcb.ForeColor = Color.Red;
|
||||
lblWaitingForMeterResponse.Visible = false;
|
||||
btnConnect.Enabled = true;
|
||||
btnDownloadLutFile.ForeColor = Color.DarkGreen;
|
||||
btnStopFwUpdate.ForeColor = Color.Red;
|
||||
SetControlDownloadsLocked();
|
||||
btnStopFwUpdate.Enabled = false;
|
||||
btnOpenLutFile.Enabled = true;
|
||||
tbxPcbId.Visible = false;
|
||||
}
|
||||
|
||||
private void FrmLutUpdate_Load(Object sender, EventArgs e)
|
||||
{
|
||||
var version = Assembly.GetExecutingAssembly().GetName().Version;
|
||||
lblFwUpdateInfo.Text = $@"Version: {version.Major}.{version.Minor}.{version.Build}";
|
||||
_resetTimeMeasurement = true;
|
||||
Init();
|
||||
}
|
||||
|
||||
private void FrmLutUpdate_FormClosing(Object sender, FormClosingEventArgs e)
|
||||
{
|
||||
_frmHistory?.Close();
|
||||
_currentGenesis?.Logout();
|
||||
_meterBatch?.RemoveAllMeters();
|
||||
_meterBatch?.Dispose();
|
||||
if (_meterLutUpdate != null)
|
||||
{
|
||||
_meterLutUpdate.OnProcessUpdate -= ProcessUpdate_Event;
|
||||
_meterLutUpdate.Dispose();
|
||||
_meterLutUpdate = null;
|
||||
}
|
||||
|
||||
Dispose();
|
||||
}
|
||||
|
||||
private void cbComSlot_SelectedIndexChanged(Object sender, EventArgs e)
|
||||
{
|
||||
_resetTimeMeasurement = true;
|
||||
Init();
|
||||
}
|
||||
#endregion
|
||||
#region ActivationControls
|
||||
|
||||
private void SetControlDownloadsLocked()
|
||||
{
|
||||
btnDownloadLutFile.Enabled = false;
|
||||
btnStopFwUpdate.Enabled = false;
|
||||
btnConnect.Enabled = true;
|
||||
}
|
||||
|
||||
private void SetControlsDownloadIsOngoing()
|
||||
{
|
||||
btnConnect.Enabled = false;
|
||||
btnOpenLutFile.Enabled = false;
|
||||
|
||||
btnDownloadLutFile.Enabled = false;
|
||||
btnStopFwUpdate.Enabled = true;
|
||||
}
|
||||
|
||||
private void SetControlsDownloadIsFinished()
|
||||
{
|
||||
_currentGenesis.RequestProtocol.AdditionalRetryTimeoutMs = 0;
|
||||
btnConnect.Enabled = true;
|
||||
btnOpenLutFile.Enabled = true;
|
||||
|
||||
btnDownloadLutFile.Enabled = true;
|
||||
btnStopFwUpdate.Enabled = false;
|
||||
}
|
||||
private void SetControlsDownloadEnabled()
|
||||
{
|
||||
btnConnect.Enabled = true;
|
||||
btnOpenLutFile.Enabled = true;
|
||||
|
||||
btnDownloadLutFile.Enabled = true;
|
||||
btnStopFwUpdate.Enabled = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region BoardControls
|
||||
private void Connect()
|
||||
{
|
||||
try
|
||||
{
|
||||
Init();
|
||||
Int32 slotNr;
|
||||
|
||||
if (string.IsNullOrEmpty(cbComSlot.SelectedItem.ToString()) ||
|
||||
!int.TryParse(cbComSlot.SelectedItem.ToString(), out slotNr))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lblOverall.Text = @"Establish data base connection..";
|
||||
lblOverall.Visible = true;
|
||||
Update();
|
||||
_currentGenesis?.DisposeMeter();
|
||||
//dispose old meter
|
||||
_meterBatch.RemoveAllMeters();
|
||||
_currentGenesis = null;
|
||||
Thread.Sleep(200);
|
||||
|
||||
//assign new meter and assign meter to FW update file if this exists
|
||||
_currentGenesis = new GenesisMeter();
|
||||
|
||||
_currentGenesis.SetupFromConfigFile(slotNr);
|
||||
_meterBatch.AddMeter(_currentGenesis);
|
||||
|
||||
_currentGenesis._configuration.UseRegisterWatchService = false;
|
||||
_currentGenesis._configuration.UseMinMaxCheck = false;
|
||||
|
||||
var xPosition = Location.X + Size.Width;
|
||||
var yPosition = Location.Y;
|
||||
if (_frmHistory != null)
|
||||
{
|
||||
_frmHistory.SetDesktopLocation(xPosition, yPosition);
|
||||
_frmHistory.Show();
|
||||
}
|
||||
|
||||
ClearHistoryWindow();
|
||||
LogText(StrSeparator);
|
||||
LogText($"GenesisToolBox: {_version.Major}.{_version.Minor}.{_version.Build}");
|
||||
LogText($"Date: {DateTime.Now.ToShortDateString()}");
|
||||
LogText(StrSeparator);
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
ViewProgressPcb(true);
|
||||
|
||||
_meterBatch.MetersLogin();
|
||||
|
||||
if (!_currentGenesis.IsLoggedOn)
|
||||
{
|
||||
Thread.Sleep(2000);
|
||||
_meterBatch.MetersLogin();
|
||||
}
|
||||
|
||||
if (!_currentGenesis.IsLoggedOn)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_meterLutUpdate?.AssignGenesis(_currentGenesis);
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
lblConnectPcb.Text = StrPartPcbConnected;
|
||||
tbxPcbId.Text = _currentGenesis.PcbId;
|
||||
tbxPcbId.Visible = true;
|
||||
tbxMeterFw.Text = _currentGenesis.FwVersion;
|
||||
tbxMeterMeterSize.Text = _currentGenesis.MeterSize;
|
||||
tbxMeterLutCrc.Text = _currentGenesis.LutCrc;
|
||||
tbxRegionRadio.Text = _currentGenesis.RegionRadio;
|
||||
LogText("Meter FW Version: " + _currentGenesis.FwVersion);
|
||||
LogText("Meter LUT CRC: " + _currentGenesis.LutCrc);
|
||||
LogText("Meter Size: " + _currentGenesis.MeterSize);
|
||||
LogText("Meter Region/Radio[MHz]: " + _currentGenesis.RegionRadio);
|
||||
lblConnectPcb.ForeColor = Color.Green;
|
||||
CheckUpdateEnabled();
|
||||
_currentGenesis.Logout();
|
||||
LogInstalledMeterFw();
|
||||
}));
|
||||
}).ContinueWith(delegate
|
||||
{
|
||||
ViewProgressPcb(false);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message);
|
||||
LogErrorText(ex.Message);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ProcessControls
|
||||
private void ViewProgressPcb(Boolean isActive)
|
||||
{
|
||||
if (_updateGui)
|
||||
{
|
||||
if (isActive)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
_tryConnectPcb = true;
|
||||
ProcessViewControl(true);
|
||||
lblActualProcess.Text = StrConnecting;
|
||||
lblOverall.Text = StrOverallProcess;
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
_tryConnectPcb = false;
|
||||
ProcessViewControl(false);
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// View all process bars and labels
|
||||
/// </summary>
|
||||
private void ProcessViewControl(Boolean view)
|
||||
{
|
||||
if (view)
|
||||
{
|
||||
lblActualProcess.Visible = true;
|
||||
lblOverall.Visible = true;
|
||||
barOverallProgressUpdate.Visible = true;
|
||||
barSingleProgressUpdate.Visible = true;
|
||||
_lastFwUpdateState = "";
|
||||
tmrProgressUpdate.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lblActualProcess.Visible = false;
|
||||
lblOverall.Visible = false;
|
||||
barOverallProgressUpdate.Visible = false;
|
||||
barSingleProgressUpdate.Visible = false;
|
||||
tmrProgressUpdate.Enabled = false;
|
||||
_lastFwUpdateState = "";
|
||||
lblWaitingForMeterResponse.Visible = false;
|
||||
lblActualProcess.Text = "";
|
||||
lblOverall.Text = "";
|
||||
}
|
||||
|
||||
//common actions and settings
|
||||
lblActualProcess.Update();
|
||||
lblOverall.Update();
|
||||
barOverallProgressUpdate.Value = 0;
|
||||
barOverallProgressUpdate.Update();
|
||||
barSingleProgressUpdate.Value = 0;
|
||||
barSingleProgressUpdate.Update();
|
||||
Update();
|
||||
}
|
||||
|
||||
private void StartStopDownload(Boolean isActive)
|
||||
{
|
||||
if (isActive)
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
_lastFwUpdateState = "";
|
||||
ProcessViewControl(true);
|
||||
tmrProgressUpdate.Enabled = true;
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
ProcessViewControl(false);
|
||||
SetControlsDownloadIsFinished();
|
||||
|
||||
if (!_lutFileSuccessfulWritten)
|
||||
{
|
||||
lblLutFileLoadedInfo.ForeColor = Color.Red;
|
||||
lblLutFileLoadedInfo.Text = StrUpdateErrorMessage;
|
||||
var txt = StrUpdateErrorMessage;
|
||||
if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
|
||||
{
|
||||
txt += "\n";
|
||||
txt += _meterLutUpdate?.ErrorMessage;
|
||||
}
|
||||
|
||||
LogErrorText(txt);
|
||||
MessageBoxShow(txt, @"FAILED",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
else
|
||||
{
|
||||
// on successfully execution the meter size and LUT CRC is identical to file content
|
||||
tbxMeterMeterSize.Text = tbxFileMeterSize.Text;
|
||||
tbxMeterLutCrc.Text = tbxFileCrc.Text;
|
||||
LogSuccessText(StrUpdateSuccessMessage);
|
||||
MessageBoxShow(StrUpdateSuccessMessage, @"SUCCESS",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Display installed meter FW.
|
||||
/// </summary>
|
||||
/// <remarks date="2022-Mar-25" author="Thomas Wiedebusch">
|
||||
/// - Init.
|
||||
/// </remarks>
|
||||
private void LogInstalledMeterFw()
|
||||
{
|
||||
if (_currentGenesis == null)
|
||||
return;
|
||||
LogText(StrSeparator);
|
||||
LogText($"PCB ID: {_currentGenesis.PcbId}");
|
||||
LogText($"Core Version: {_currentGenesis.CoreRevision}");
|
||||
LogText("");
|
||||
LogText("Installed Applications:");
|
||||
|
||||
foreach (var app in _currentGenesis.MeterAppListVersion)
|
||||
{
|
||||
var versionString = app.IsInstalled ? $"V: {app.StrVersion} - CRC: 0x{app.Crc:X4}" :
|
||||
"App NOT Installed";
|
||||
LogText($"AppId: 0x{app.AppId:X2} - {versionString} - " + $"AppName: {app.AppName}");
|
||||
|
||||
if (app.IsInstalled)
|
||||
{
|
||||
var appVersion = new CordonelAppVersion(app.AppId, app.StrVersion);
|
||||
|
||||
// Copy metrology update permission
|
||||
if (app.AppName == MeterFwUpdateCapability.MetrologyName &&
|
||||
_currentGenesis.MetrologyUpgradePermission != MeterFwUpdateCapability.MetrologyUpgradePermitted)
|
||||
{
|
||||
appVersion.IsUpdateable = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
LogText(StrSeparator);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear history window.
|
||||
/// </summary>
|
||||
/// <remarks date="2021-Jan-05" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private void ClearHistoryWindow()
|
||||
{
|
||||
if (_frmHistory != null && _frmHistory.rtbHistory.InvokeRequired)
|
||||
{
|
||||
_frmHistory.rtbHistory.Invoke(new Action(() => { _frmHistory.rtbHistory.Clear(); }));
|
||||
}
|
||||
else
|
||||
_frmHistory?.rtbHistory.Clear();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Output exclusively to user update remarks text window.
|
||||
/// </summary>
|
||||
/// <remarks date="2021-Apr-26" author="Thomas Wiedebusch">
|
||||
/// - Color added.
|
||||
/// </remarks>
|
||||
private void LogText(String txtHistory)
|
||||
{
|
||||
InfoWindowColoredText(txtHistory, ColorDefault);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Output exclusively to user update remarks text window.
|
||||
/// </summary>
|
||||
private void LogErrorText(String txtHistory)
|
||||
{
|
||||
InfoWindowColoredText(txtHistory, ColorProcessFailed);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Output exclusively to user update remarks text window.
|
||||
/// </summary>
|
||||
private void LogSuccessText(String txtHistory)
|
||||
{
|
||||
InfoWindowColoredText(txtHistory, ColorSuccess);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Output exclusively to user update remarks text window.
|
||||
/// </summary>
|
||||
private void InfoWindowColoredText(String txtHistory, Color color)
|
||||
{
|
||||
if (_frmHistory?.rtbHistory == null)
|
||||
return;
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
_frmHistory.rtbHistory.SuspendLayout();
|
||||
_frmHistory.rtbHistory.SelectionStart = _frmHistory.rtbHistory.Text.Length;
|
||||
_frmHistory.rtbHistory.SelectionLength = 0;
|
||||
_frmHistory.rtbHistory.SelectionColor = color;
|
||||
_frmHistory.rtbHistory.AppendText($"{txtHistory}{Environment.NewLine}");
|
||||
_frmHistory.rtbHistory.SelectionColor = _frmHistory.rtbHistory.ForeColor;
|
||||
_frmHistory.rtbHistory.ScrollToCaret();
|
||||
_frmHistory.rtbHistory.ResumeLayout();
|
||||
}));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Checks
|
||||
private void CheckUpdateEnabled()
|
||||
{
|
||||
//this check has been placed here to force display update
|
||||
if (_meterLutUpdate != null && _currentGenesis != null && _lutFileValid)
|
||||
{
|
||||
SetControlsDownloadEnabled();
|
||||
return;
|
||||
}
|
||||
SetControlDownloadsLocked();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Process update event for displaying messages in historxy window
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <remarks date="2020-Dec-10" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
public virtual void ProcessUpdate_Event(Object sender, ProcessExecEventArgs e)
|
||||
{
|
||||
LogText(e.OverallProcessMessage);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region TimerControls
|
||||
private void tmrProgressUpdate_Tick(Object sender, EventArgs e)
|
||||
{
|
||||
//cbxManualControl.Visible = true;
|
||||
if (_tryConnectPcb)
|
||||
{
|
||||
barOverallProgressUpdate.Value = barOverallProgressUpdate.Value + 1 > 100 ? 0 :
|
||||
barOverallProgressUpdate.Value + 1;
|
||||
barSingleProgressUpdate.Value = barSingleProgressUpdate.Value + 4 > 100 ? 0 :
|
||||
barSingleProgressUpdate.Value + 4;
|
||||
lblOverall.Text = StrOverallProcess;
|
||||
}
|
||||
else
|
||||
{
|
||||
lblOverall.Text = _meterLutUpdate?.GetLutUpdateStateOperation();
|
||||
lblActualProcess.Text = _meterLutUpdate?.GetActualOperation();
|
||||
|
||||
var overallProgress = (Int32)(_meterLutUpdate?.OverallProcessCtrPercent ?? 0);
|
||||
if (overallProgress < 0)
|
||||
overallProgress = 0;
|
||||
barOverallProgressUpdate.Value = overallProgress > 100 ? 100 : overallProgress;
|
||||
barOverallProgressUpdate.Update();
|
||||
|
||||
var singleProgress = (Int32)(_meterLutUpdate?.SingleFileProcessCtrPercent ?? 0);
|
||||
if (_meterLutUpdate?.GetActualOperation() != _lastFwUpdateState)
|
||||
{
|
||||
_lastFwUpdateState = _meterLutUpdate?.GetActualOperation();
|
||||
lblWaitingForMeterResponse.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//if the communication gets frozen
|
||||
lblWaitingForMeterResponse.Visible = _lastSingleProgress == singleProgress;
|
||||
}
|
||||
|
||||
barSingleProgressUpdate.Value = singleProgress > 100 ? 100 : singleProgress;
|
||||
_lastSingleProgress = singleProgress;
|
||||
barSingleProgressUpdate.Update();
|
||||
}
|
||||
SetTimeDisplay();
|
||||
Update();
|
||||
}
|
||||
|
||||
private void SetTimeDisplay()
|
||||
{
|
||||
var time = DateTimeOffset.UtcNow;
|
||||
var timeSpan = time - _startTime;
|
||||
lblUpdateTime.Text = $@"{(UInt32)timeSpan.TotalMinutes}:{timeSpan.Seconds:00}";
|
||||
}
|
||||
#endregion
|
||||
#region Buttons
|
||||
private void btnConnect_Click(Object sender, EventArgs e)
|
||||
{
|
||||
if (_resetTimeMeasurement)
|
||||
{
|
||||
_startTime = DateTimeOffset.UtcNow;
|
||||
_resetTimeMeasurement = false;
|
||||
}
|
||||
Connect();
|
||||
|
||||
}
|
||||
|
||||
private void btnOpenLutFile_Click(Object sender, EventArgs e)
|
||||
{
|
||||
if (dlgOpenLuFile.ShowDialog() != DialogResult.OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var lutFilePathName = dlgOpenLuFile.FileName;
|
||||
|
||||
lblLutFileLoadedInfo.Text = "";
|
||||
tbxLutFilePathName.Text = lutFilePathName;
|
||||
if (_meterLutUpdate == null)
|
||||
{
|
||||
_meterLutUpdate = new MeterLutUpdate(_currentGenesis);
|
||||
_meterLutUpdate.OnProcessUpdate += ProcessUpdate_Event;
|
||||
}
|
||||
|
||||
if (_meterLutUpdate == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_meterLutUpdate.LoadLutFile(lutFilePathName))
|
||||
{
|
||||
lblLutFileLoadedInfo.ForeColor = Color.Green;
|
||||
lblLutFileLoadedInfo.Text = StrLutFileValid;
|
||||
tbxFileCrc.Text = $@"0x{_meterLutUpdate.LutFile.FileCrc:X4}";
|
||||
tbxFileMeterSize.Text = MeterSizeConverter.ConvertMeterSizeEnumToSizeName(_meterLutUpdate.LutFile.MeterSize);
|
||||
_lutFileValid = true;
|
||||
|
||||
LogText("File Meter Size: " + tbxFileMeterSize.Text);
|
||||
LogText("File LUT CRC: " + tbxFileCrc.Text);
|
||||
LogText(StrSeparator);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var txt = "";
|
||||
if (!string.IsNullOrEmpty(_meterLutUpdate?.ErrorMessage))
|
||||
{
|
||||
txt += _meterLutUpdate?.ErrorMessage;
|
||||
}
|
||||
else
|
||||
{
|
||||
txt = StrLutFileInvalid;
|
||||
}
|
||||
|
||||
LogErrorText(txt);
|
||||
lblLutFileLoadedInfo.ForeColor = Color.Red;
|
||||
lblLutFileLoadedInfo.Text = txt;
|
||||
tbxFileCrc.Text = @" --- ";
|
||||
tbxFileMeterSize.Text = @" --- ";
|
||||
_lutFileValid = false;
|
||||
}
|
||||
|
||||
CheckUpdateEnabled();
|
||||
_resetTimeMeasurement = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Download LUT file
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void btnDownloadLutFile_Click(Object sender, EventArgs e)
|
||||
{
|
||||
if (_currentGenesis == null || _meterLutUpdate?.LutFile == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
lblLutFileLoadedInfo.Text = "";
|
||||
SetControlsDownloadIsOngoing();
|
||||
StartStopDownload(true);
|
||||
|
||||
_startTime = DateTimeOffset.UtcNow;
|
||||
_resetTimeMeasurement = false;
|
||||
|
||||
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
_lutFileSuccessfulWritten = _meterLutUpdate.UpdateMeterLut();
|
||||
Thread.Sleep(1000);
|
||||
}).ContinueWith(delegate
|
||||
{
|
||||
StartStopDownload(false);
|
||||
});
|
||||
}
|
||||
|
||||
private void btnStopFwUpdate_Click(Object sender, EventArgs e)
|
||||
{
|
||||
if (_meterLutUpdate != null)
|
||||
{
|
||||
_meterLutUpdate.StopUpdateProcess = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region ExternalCalls
|
||||
|
||||
public MsgEventArgs LastMsgEvent;
|
||||
public class MsgEventArgs : EventArgs
|
||||
{
|
||||
public String Text;
|
||||
public String Caption;
|
||||
public MessageBoxButtons Buttons;
|
||||
public MessageBoxIcon Icon;
|
||||
}
|
||||
public event EventHandler<MsgEventArgs> OnMsgPopUp;
|
||||
private void MessageBoxShow(String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)
|
||||
{
|
||||
if (_updateGui)
|
||||
{
|
||||
MessageBox.Show(text, caption, buttons, icon);
|
||||
}
|
||||
else
|
||||
{
|
||||
LastMsgEvent = new MsgEventArgs() { Text = text, Caption = caption, Buttons = buttons, Icon = icon };
|
||||
OnMsgPopUp?.Invoke(this, LastMsgEvent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="tmrProgressUpdate.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>274, 17</value>
|
||||
</metadata>
|
||||
<metadata name="dlgOpenLuFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>144, 17</value>
|
||||
</metadata>
|
||||
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>432, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -238,6 +238,18 @@
|
||||
<Compile Include="FrmFrozenMeter.Designer.cs">
|
||||
<DependentUpon>FrmFrozenMeter.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmHistory.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FrmHistory.Designer.cs">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmLutUpdate.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FrmLutUpdate.Designer.cs">
|
||||
<DependentUpon>FrmLutUpdate.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmFwUpdate.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -401,6 +413,13 @@
|
||||
<EmbeddedResource Include="FrmFrozenMeter.resx">
|
||||
<DependentUpon>FrmFrozenMeter.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmHistory.resx">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmLutUpdate.resx">
|
||||
<DependentUpon>FrmLutUpdate.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmFwUpdate.resx">
|
||||
<DependentUpon>FrmFwUpdate.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
@@ -488,7 +507,7 @@
|
||||
<None Include="FrmRegisterStore.Designer.cs.vsspell" />
|
||||
<None Include="GenesisToolBox_TemporaryKey.pfx" />
|
||||
<None Include="meterconfig.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\app.manifest" />
|
||||
@@ -616,6 +635,10 @@
|
||||
<Project>{4b88b0d3-e791-4774-9521-eabeacdc420e}</Project>
|
||||
<Name>Logging</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\Utils\ProcessExec\ProcessExec.csproj">
|
||||
<Project>{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}</Project>
|
||||
<Name>ProcessExec</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LegacyGenesisControl\LegacyGenCtl.csproj">
|
||||
<Project>{60765bf4-6165-4f2f-8756-1c699826265d}</Project>
|
||||
<Name>LegacyGenCtl</Name>
|
||||
|
||||
+21
-8
@@ -29,6 +29,7 @@
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.gpGerneral = new System.Windows.Forms.GroupBox();
|
||||
this.btnLutUpdate = new System.Windows.Forms.Button();
|
||||
this.button1 = new System.Windows.Forms.Button();
|
||||
this.btnPressure = new System.Windows.Forms.Button();
|
||||
this.btnConfiguration = new System.Windows.Forms.Button();
|
||||
@@ -58,6 +59,7 @@
|
||||
//
|
||||
// gpGerneral
|
||||
//
|
||||
this.gpGerneral.Controls.Add(this.btnLutUpdate);
|
||||
this.gpGerneral.Controls.Add(this.button1);
|
||||
this.gpGerneral.Controls.Add(this.btnPressure);
|
||||
this.gpGerneral.Controls.Add(this.btnConfiguration);
|
||||
@@ -71,14 +73,24 @@
|
||||
this.gpGerneral.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.gpGerneral.Location = new System.Drawing.Point(13, 12);
|
||||
this.gpGerneral.Name = "gpGerneral";
|
||||
this.gpGerneral.Size = new System.Drawing.Size(181, 449);
|
||||
this.gpGerneral.Size = new System.Drawing.Size(181, 503);
|
||||
this.gpGerneral.TabIndex = 19;
|
||||
this.gpGerneral.TabStop = false;
|
||||
this.gpGerneral.Text = "General";
|
||||
//
|
||||
// btnLutUpdate
|
||||
//
|
||||
this.btnLutUpdate.Location = new System.Drawing.Point(7, 279);
|
||||
this.btnLutUpdate.Name = "btnLutUpdate";
|
||||
this.btnLutUpdate.Size = new System.Drawing.Size(151, 39);
|
||||
this.btnLutUpdate.TabIndex = 17;
|
||||
this.btnLutUpdate.Text = "Metrology LUT";
|
||||
this.btnLutUpdate.UseVisualStyleBackColor = true;
|
||||
this.btnLutUpdate.Click += new System.EventHandler(this.btnLutUpdate_Click);
|
||||
//
|
||||
// button1
|
||||
//
|
||||
this.button1.Location = new System.Drawing.Point(5, 411);
|
||||
this.button1.Location = new System.Drawing.Point(4, 455);
|
||||
this.button1.Name = "button1";
|
||||
this.button1.Size = new System.Drawing.Size(152, 40);
|
||||
this.button1.TabIndex = 16;
|
||||
@@ -98,7 +110,7 @@
|
||||
//
|
||||
// btnConfiguration
|
||||
//
|
||||
this.btnConfiguration.Location = new System.Drawing.Point(6, 321);
|
||||
this.btnConfiguration.Location = new System.Drawing.Point(5, 365);
|
||||
this.btnConfiguration.Name = "btnConfiguration";
|
||||
this.btnConfiguration.Size = new System.Drawing.Size(152, 40);
|
||||
this.btnConfiguration.TabIndex = 14;
|
||||
@@ -109,7 +121,7 @@
|
||||
// btnCalender
|
||||
//
|
||||
this.btnCalender.Enabled = false;
|
||||
this.btnCalender.Location = new System.Drawing.Point(6, 278);
|
||||
this.btnCalender.Location = new System.Drawing.Point(5, 322);
|
||||
this.btnCalender.Name = "btnCalender";
|
||||
this.btnCalender.Size = new System.Drawing.Size(151, 39);
|
||||
this.btnCalender.TabIndex = 13;
|
||||
@@ -169,7 +181,7 @@
|
||||
//
|
||||
// btnSetup
|
||||
//
|
||||
this.btnSetup.Location = new System.Drawing.Point(5, 15);
|
||||
this.btnSetup.Location = new System.Drawing.Point(6, 15);
|
||||
this.btnSetup.Name = "btnSetup";
|
||||
this.btnSetup.Size = new System.Drawing.Size(152, 40);
|
||||
this.btnSetup.TabIndex = 1;
|
||||
@@ -316,14 +328,14 @@
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(390, 457);
|
||||
this.ClientSize = new System.Drawing.Size(390, 517);
|
||||
this.Controls.Add(this.gbDeveloper);
|
||||
this.Controls.Add(this.gpLAA);
|
||||
this.Controls.Add(this.gpGerneral);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(410, 500);
|
||||
this.MinimumSize = new System.Drawing.Size(410, 500);
|
||||
this.MaximumSize = new System.Drawing.Size(410, 560);
|
||||
this.MinimumSize = new System.Drawing.Size(410, 560);
|
||||
this.Name = "FrmMainForm";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Genesis ToolBox";
|
||||
@@ -358,6 +370,7 @@
|
||||
private System.Windows.Forms.Button btnLegacyTestApp;
|
||||
private System.Windows.Forms.Button btnPressure;
|
||||
private System.Windows.Forms.Button button1;
|
||||
private System.Windows.Forms.Button btnLutUpdate;
|
||||
private System.Windows.Forms.Button button2;
|
||||
private System.Windows.Forms.Button button3;
|
||||
}
|
||||
|
||||
@@ -362,55 +362,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
Hide();
|
||||
}
|
||||
|
||||
private void button3_Click(object sender, EventArgs e)
|
||||
private void btnLutUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
var mb = new MeterBatch();
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var a = new GenesisMeter();
|
||||
mb.AddMeter(a);
|
||||
a.SetupFromConfigFile(i);
|
||||
a.Login();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var taskList = new List<Task>();
|
||||
foreach (var item in mb.ListOfMeters)
|
||||
{
|
||||
|
||||
if (item is GenesisMeter gm)
|
||||
{
|
||||
var completTasks = new Task(() =>
|
||||
{
|
||||
for (int i = 0; i < 50; i++)
|
||||
{
|
||||
gm.WriteRegister(Register.Genesisflow.LedMode, 0, false);
|
||||
gm.WriteRegister(Register.Genesisflow.LedMode, 6, false);
|
||||
gm.ReadRegister(Register.Genesisflow.LedMode);
|
||||
gm.WriteRegister(Register.Genesisflow.LedMode, 0, false);
|
||||
gm.WriteRegister(Register.Genesisflow.LedMode, 6, true, true);
|
||||
gm.ReadRegister(Register.Genesisflow.LedMode);
|
||||
gm.ReadRegister(Register.Genesisflow.CalFactor1);
|
||||
gm.ReadRegister(Register.Genesisflow.CalFactor2);
|
||||
gm.ReadRegister(Register.Genesisflow.AmplitudePeakDetectEnd);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
completTasks.Start();
|
||||
|
||||
var form = new FrmLutUpdate();
|
||||
form.Show();
|
||||
form.Closed += Form_Closed;
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
|
||||
namespace Xylem.Common.Utils.DateTimeServer
|
||||
{
|
||||
|
||||
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
@@ -14,6 +14,16 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateConfig.Consts
|
||||
/// </summary>
|
||||
public const UInt32 ValidDays = 21;
|
||||
|
||||
/// <summary>
|
||||
/// Search strings for "Firmware up to date!" messages in report file, copied from Resources.resx of all
|
||||
/// language packages from "ServiceFwUpdateSw"
|
||||
/// </summary>
|
||||
public static readonly String[] FirmwareUpToDateSearchStrings = new String[]
|
||||
{
|
||||
"Firmware is up to date!",
|
||||
"Firmware ist aktuell!"
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Name of the file which contains the meter file names that can be erased before the FW-Update
|
||||
/// to free disk space and have to be restored after the FW-Update
|
||||
@@ -80,11 +90,27 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateConfig.Consts
|
||||
/// </summary>
|
||||
public const String FwUpdateFileExtension = ".safe";
|
||||
|
||||
/// <summary>
|
||||
/// Library-subfolder: For releases the files are sorted to subfolders to avoid confusion of the user.
|
||||
/// </summary>
|
||||
public const String LibrarySubFolderName = "Library";
|
||||
|
||||
/// <summary>
|
||||
/// Library-subfolder: For releases the files are sorted to subfolders to avoid confusion of the user.
|
||||
/// </summary>
|
||||
public const String ConfigSubFolderName = "Config";
|
||||
|
||||
/// <summary>
|
||||
/// Separator in file name between PcbId CustomerName and OrderNumber for the FW-Update Safe and all report
|
||||
/// files.
|
||||
/// </summary>
|
||||
public const Char FwUpdateFileFieldSeparator = '_';
|
||||
|
||||
/// <summary>
|
||||
/// Separator in file name between OrderNumber and position for the FW-Update Safe and all report
|
||||
/// files.
|
||||
/// </summary>
|
||||
public const Char FwUpdateFileOrderPosSeparator = '-';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
@@ -37,6 +36,16 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
/// </summary>
|
||||
public List<UserInformation> DbAllUpdateOperators { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Cordonel SW package.
|
||||
/// </summary>
|
||||
public List<FilePart> DbFwUpdateSwPackage { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Cordonel configuration files.
|
||||
/// </summary>
|
||||
public List<FilePart> DbFwUpdateConfigFiles { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Cordonel FW packages.
|
||||
/// </summary>
|
||||
@@ -323,7 +332,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateBuilderOperatorsServiceUrl();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -374,6 +383,126 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load the latest FW update SW package from DB.
|
||||
/// </summary>
|
||||
/// <returns>true if successful</returns>
|
||||
/// <remarks date="2021-Oct-26" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
public Boolean DownloadFwUpdateSwContainerFromDb()
|
||||
{
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllSwPackages();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
|
||||
// get a list of all stored FW update SW packages
|
||||
var dbCordonelSwPackages = JsonConvert.DeserializeObject<List<ClusteredFile>>(requestResponse);
|
||||
if (dbCordonelSwPackages == null || dbCordonelSwPackages.Count == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// get latest version
|
||||
var fileId = dbCordonelSwPackages.Select(package => package.FileId).Prepend(0).Max();
|
||||
if (fileId == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DbFwUpdateSwPackage == null) DbFwUpdateSwPackage = new List<FilePart>();
|
||||
DbFwUpdateSwPackage.Clear();
|
||||
|
||||
// download content
|
||||
url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent=true";
|
||||
requestResponse = LocalWebRequest.GetRequest(url, 15000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
DbFwUpdateSwPackage = JsonConvert.DeserializeObject<List<FilePart>>(requestResponse);
|
||||
return DbFwUpdateSwPackage != null && DbFwUpdateSwPackage.Count > 0;
|
||||
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load the latest FW update configuration files from DB.
|
||||
/// </summary>
|
||||
/// <returns>true if successful</returns>
|
||||
/// <remarks date="2021-Oct-26" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
public Boolean DownloadFwUpdateConfigurationFilesFromDb()
|
||||
{
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllConfigurationFilePackages();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
|
||||
// get a list of all stored FW update config file packages
|
||||
var dbConfigFilePackages = JsonConvert.DeserializeObject<List<ClusteredFile>>(requestResponse);
|
||||
if (dbConfigFilePackages == null || dbConfigFilePackages.Count == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// get latest version
|
||||
var fileId = dbConfigFilePackages.Select(package => package.FileId).Prepend(0).Max();
|
||||
if (fileId == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (DbFwUpdateConfigFiles == null) DbFwUpdateConfigFiles = new List<FilePart>();
|
||||
DbFwUpdateConfigFiles.Clear();
|
||||
|
||||
// download content
|
||||
url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent=true";
|
||||
requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
DbFwUpdateConfigFiles = JsonConvert.DeserializeObject<List<FilePart>>(requestResponse);
|
||||
return DbFwUpdateConfigFiles != null && DbFwUpdateConfigFiles.Count > 0;
|
||||
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all Cordonel safe info files from DB.
|
||||
/// </summary>
|
||||
@@ -389,7 +518,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateSafes();
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -430,7 +559,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllFwUpdateSafesForUserServiceUrl();
|
||||
url += $"{userId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 3000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -468,7 +597,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent={readContent}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -506,7 +635,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.DownloadFileParts();
|
||||
url += $"{fileId}&readContent={readContent}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 5000);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -546,7 +675,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
var url = ServiceUrls.ListAllCordonelCustomersWithFilterServiceUrl();
|
||||
url += searchPattern;
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 1200);
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -1164,6 +1293,40 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Download all pcbIds contained in a special FW update safe for information referenced by container id
|
||||
/// </summary>
|
||||
/// <param name="containerId"></param>
|
||||
/// <returns>true if file content exists</returns>
|
||||
/// <remarks date="2021-Oct-29" author="Roland Drabesch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
public List<String> GetFwUpdateSafePcbIdsFromDb(Int32 containerId)
|
||||
{
|
||||
var fwUpdateSafesPcbIds = new List<String>();
|
||||
try
|
||||
{
|
||||
var url = ServiceUrls.ListAllPcbIdsFromSafe();
|
||||
url += $"{containerId}";
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return fwUpdateSafesPcbIds;
|
||||
}
|
||||
|
||||
DbIsConnected = true;
|
||||
fwUpdateSafesPcbIds = JsonConvert.DeserializeObject<List<String>>(requestResponse);
|
||||
|
||||
return fwUpdateSafesPcbIds;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DbIsConnected = false;
|
||||
return fwUpdateSafesPcbIds;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Getting file contents referenced by file part id.
|
||||
/// -http://localhost:56011/GetFileContent?FileId=3831
|
||||
@@ -1204,20 +1367,25 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
/// Get reports from DB.
|
||||
/// It can be searched for:
|
||||
/// PCB ID,
|
||||
/// User ID or
|
||||
/// Order Number.
|
||||
/// User ID,
|
||||
/// Order Number,
|
||||
/// Read content ( if false, a preview is available only).
|
||||
/// Leaving all empty will search all reports.
|
||||
/// </summary>
|
||||
/// <param name="fwUpdRpt">list of reports</param>
|
||||
/// <param name="pcbId">optional pcbId</param>
|
||||
/// <param name="userId">optional userId</param>
|
||||
/// <param name="orderNr">optional order number</param>
|
||||
/// <returns>true if app list could be loaded</returns>
|
||||
/// <param name="readContent">if false a preview of the reports will be loaded</param>
|
||||
/// <returns>true reports could be loaded</returns>
|
||||
/// <remarks date="2021-Apr-30" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
/// <remarks date="2021-Oct-29" author="Thomas Wiedebusch">
|
||||
/// - Read content.
|
||||
/// </remarks>
|
||||
public Boolean DownloadFwUpdateReportsFromDb(out List<FwUpdateReportDb> fwUpdRpt, Int64 pcbId = 0,
|
||||
Int32 userId = 0, Int64 orderNr = 0)
|
||||
Int32 userId = 0, Int64 orderNr = 0, Boolean readContent = false)
|
||||
{
|
||||
fwUpdRpt = new List<FwUpdateReportDb>();
|
||||
try
|
||||
@@ -1239,7 +1407,9 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
url += $"OrderNr={orderNr}";
|
||||
}
|
||||
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 10000);
|
||||
url += $"&readContent={readContent}";
|
||||
|
||||
var requestResponse = LocalWebRequest.GetRequest(url, 20000);
|
||||
if (string.IsNullOrEmpty(requestResponse))
|
||||
{
|
||||
DbIsConnected = false;
|
||||
@@ -1325,7 +1495,7 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
|
||||
url = ServiceUrls.AddPcbIdsToSafeServiceUrl();
|
||||
url += containerId;
|
||||
if (LocalWebRequest.PostRequestAsync(url, 1200, pcbIds))
|
||||
if (LocalWebRequest.PostRequestAsync(url, 10000, pcbIds))
|
||||
{
|
||||
DbIsConnected = true;
|
||||
return true;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
{
|
||||
@@ -39,6 +40,11 @@ namespace Xylem.ServiceFwUpdate.Common.FwUpdateDb
|
||||
/// </summary>
|
||||
public Int32 FilePartId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of PcbIds
|
||||
/// </summary>
|
||||
public List<String> PcbIds { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// automatic (DB-job) delete all FwUpdateSafeContainer with invalid date
|
||||
/// </summary>
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -58,6 +58,20 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Const
|
||||
/// </summary>
|
||||
GetCordonelProductionOrdersFromDb,
|
||||
|
||||
/// <summary>
|
||||
/// Load all Cordonel FW update safes from DB
|
||||
/// </summary>
|
||||
GetFwUpdateSafesInfosFromDb,
|
||||
|
||||
/// <summary>
|
||||
/// Load all Cordonel FW update report files from DB
|
||||
/// </summary>
|
||||
GetReportsFromDb,
|
||||
|
||||
/// <summary>
|
||||
/// Load selected Cordonel FW update report file from DB and display it
|
||||
/// </summary>
|
||||
GetAndDisplaySingleReportFromDb,
|
||||
/// <summary>
|
||||
/// Load all Cordonel serial numbers off a specific order from DB
|
||||
/// </summary>
|
||||
|
||||
@@ -91,7 +91,13 @@
|
||||
this.tabPageSafeBuildReport = new System.Windows.Forms.TabPage();
|
||||
this.rtbReport = new System.Windows.Forms.RichTextBox();
|
||||
this.tabPageFwUpdateSafes = new System.Windows.Forms.TabPage();
|
||||
this.tblFwUpdateSafeSelection = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tblPanelFwUpdateSafeSearch = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.gridViewFwUpdateSafeSelection = new System.Windows.Forms.DataGridView();
|
||||
this.tabPageReports = new System.Windows.Forms.TabPage();
|
||||
this.tblPanelFwUpdateReports = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tblPanelFwUpdateReportsSearch = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.gridViewFwUpdateReportSelection = new System.Windows.Forms.DataGridView();
|
||||
this.tblPanelLayer1Top = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tblPanelSafeInfo = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblCustomerNameText = new System.Windows.Forms.Label();
|
||||
@@ -154,6 +160,12 @@
|
||||
this.tabPagePreBuildSummary.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewPreBuildSummary)).BeginInit();
|
||||
this.tabPageSafeBuildReport.SuspendLayout();
|
||||
this.tabPageFwUpdateSafes.SuspendLayout();
|
||||
this.tblFwUpdateSafeSelection.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateSafeSelection)).BeginInit();
|
||||
this.tabPageReports.SuspendLayout();
|
||||
this.tblPanelFwUpdateReports.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateReportSelection)).BeginInit();
|
||||
this.tblPanelLayer1Top.SuspendLayout();
|
||||
this.tblPanelSafeInfo.SuspendLayout();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
@@ -194,9 +206,7 @@
|
||||
// radioBtnEnglishLanguage
|
||||
//
|
||||
resources.ApplyResources(this.radioBtnEnglishLanguage, "radioBtnEnglishLanguage");
|
||||
this.radioBtnEnglishLanguage.Checked = true;
|
||||
this.radioBtnEnglishLanguage.Name = "radioBtnEnglishLanguage";
|
||||
this.radioBtnEnglishLanguage.TabStop = true;
|
||||
this.radioBtnEnglishLanguage.UseVisualStyleBackColor = true;
|
||||
this.radioBtnEnglishLanguage.Click += new System.EventHandler(this.RadioBtnEnglishLanguage_Click);
|
||||
//
|
||||
@@ -645,16 +655,71 @@
|
||||
//
|
||||
this.tabPageFwUpdateSafes.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.tabPageFwUpdateSafes.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.tabPageFwUpdateSafes.Controls.Add(this.tblFwUpdateSafeSelection);
|
||||
resources.ApplyResources(this.tabPageFwUpdateSafes, "tabPageFwUpdateSafes");
|
||||
this.tabPageFwUpdateSafes.Name = "tabPageFwUpdateSafes";
|
||||
//
|
||||
// tblFwUpdateSafeSelection
|
||||
//
|
||||
resources.ApplyResources(this.tblFwUpdateSafeSelection, "tblFwUpdateSafeSelection");
|
||||
this.tblFwUpdateSafeSelection.Controls.Add(this.tblPanelFwUpdateSafeSearch, 0, 0);
|
||||
this.tblFwUpdateSafeSelection.Controls.Add(this.gridViewFwUpdateSafeSelection, 0, 1);
|
||||
this.tblFwUpdateSafeSelection.Name = "tblFwUpdateSafeSelection";
|
||||
//
|
||||
// tblPanelFwUpdateSafeSearch
|
||||
//
|
||||
resources.ApplyResources(this.tblPanelFwUpdateSafeSearch, "tblPanelFwUpdateSafeSearch");
|
||||
this.tblPanelFwUpdateSafeSearch.Name = "tblPanelFwUpdateSafeSearch";
|
||||
//
|
||||
// gridViewFwUpdateSafeSelection
|
||||
//
|
||||
this.gridViewFwUpdateSafeSelection.AllowUserToAddRows = false;
|
||||
this.gridViewFwUpdateSafeSelection.AllowUserToDeleteRows = false;
|
||||
this.gridViewFwUpdateSafeSelection.AllowUserToResizeColumns = false;
|
||||
this.gridViewFwUpdateSafeSelection.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
|
||||
this.gridViewFwUpdateSafeSelection.BackgroundColor = System.Drawing.SystemColors.Control;
|
||||
this.gridViewFwUpdateSafeSelection.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
resources.ApplyResources(this.gridViewFwUpdateSafeSelection, "gridViewFwUpdateSafeSelection");
|
||||
this.gridViewFwUpdateSafeSelection.EnableHeadersVisualStyles = false;
|
||||
this.gridViewFwUpdateSafeSelection.GridColor = System.Drawing.SystemColors.ControlLight;
|
||||
this.gridViewFwUpdateSafeSelection.Name = "gridViewFwUpdateSafeSelection";
|
||||
this.gridViewFwUpdateSafeSelection.ReadOnly = true;
|
||||
//
|
||||
// tabPageReports
|
||||
//
|
||||
this.tabPageReports.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.tabPageReports.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.tabPageReports.Controls.Add(this.tblPanelFwUpdateReports);
|
||||
resources.ApplyResources(this.tabPageReports, "tabPageReports");
|
||||
this.tabPageReports.Name = "tabPageReports";
|
||||
//
|
||||
// tblPanelFwUpdateReports
|
||||
//
|
||||
resources.ApplyResources(this.tblPanelFwUpdateReports, "tblPanelFwUpdateReports");
|
||||
this.tblPanelFwUpdateReports.Controls.Add(this.tblPanelFwUpdateReportsSearch, 0, 0);
|
||||
this.tblPanelFwUpdateReports.Controls.Add(this.gridViewFwUpdateReportSelection, 0, 1);
|
||||
this.tblPanelFwUpdateReports.Name = "tblPanelFwUpdateReports";
|
||||
//
|
||||
// tblPanelFwUpdateReportsSearch
|
||||
//
|
||||
resources.ApplyResources(this.tblPanelFwUpdateReportsSearch, "tblPanelFwUpdateReportsSearch");
|
||||
this.tblPanelFwUpdateReportsSearch.Name = "tblPanelFwUpdateReportsSearch";
|
||||
//
|
||||
// gridViewFwUpdateReportSelection
|
||||
//
|
||||
this.gridViewFwUpdateReportSelection.AllowUserToAddRows = false;
|
||||
this.gridViewFwUpdateReportSelection.AllowUserToDeleteRows = false;
|
||||
this.gridViewFwUpdateReportSelection.AllowUserToResizeRows = false;
|
||||
this.gridViewFwUpdateReportSelection.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
|
||||
this.gridViewFwUpdateReportSelection.BackgroundColor = System.Drawing.SystemColors.Control;
|
||||
this.gridViewFwUpdateReportSelection.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
resources.ApplyResources(this.gridViewFwUpdateReportSelection, "gridViewFwUpdateReportSelection");
|
||||
this.gridViewFwUpdateReportSelection.EnableHeadersVisualStyles = false;
|
||||
this.gridViewFwUpdateReportSelection.GridColor = System.Drawing.SystemColors.ControlLight;
|
||||
this.gridViewFwUpdateReportSelection.Name = "gridViewFwUpdateReportSelection";
|
||||
this.gridViewFwUpdateReportSelection.ReadOnly = true;
|
||||
this.gridViewFwUpdateReportSelection.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridViewFwUpdateReportSelection_CellClick);
|
||||
//
|
||||
// tblPanelLayer1Top
|
||||
//
|
||||
resources.ApplyResources(this.tblPanelLayer1Top, "tblPanelLayer1Top");
|
||||
@@ -933,6 +998,12 @@
|
||||
this.tabPagePreBuildSummary.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewPreBuildSummary)).EndInit();
|
||||
this.tabPageSafeBuildReport.ResumeLayout(false);
|
||||
this.tabPageFwUpdateSafes.ResumeLayout(false);
|
||||
this.tblFwUpdateSafeSelection.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateSafeSelection)).EndInit();
|
||||
this.tabPageReports.ResumeLayout(false);
|
||||
this.tblPanelFwUpdateReports.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.gridViewFwUpdateReportSelection)).EndInit();
|
||||
this.tblPanelLayer1Top.ResumeLayout(false);
|
||||
this.tblPanelSafeInfo.ResumeLayout(false);
|
||||
this.tblPanelSafeInfo.PerformLayout();
|
||||
@@ -1047,6 +1118,12 @@
|
||||
private System.Windows.Forms.Label lblCordonelSelectedCountText;
|
||||
private System.Windows.Forms.Label lblCordonelsSelectedCount;
|
||||
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
|
||||
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateReports;
|
||||
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateReportsSearch;
|
||||
private System.Windows.Forms.DataGridView gridViewFwUpdateReportSelection;
|
||||
private System.Windows.Forms.TableLayoutPanel tblFwUpdateSafeSelection;
|
||||
private System.Windows.Forms.TableLayoutPanel tblPanelFwUpdateSafeSearch;
|
||||
private System.Windows.Forms.DataGridView gridViewFwUpdateSafeSelection;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1684,6 +1684,105 @@
|
||||
<data name=">>tabPageSafeBuildReport.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 31</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateSafeSearch.Name" xml:space="preserve">
|
||||
<value>tblPanelFwUpdateSafeSearch</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateSafeSearch.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateSafeSearch.Parent" xml:space="preserve">
|
||||
<value>tblFwUpdateSafeSelection</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateSafeSearch.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateSafeSearch.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls /><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,50" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateSafeSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateSafeSelection.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 31</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateSafeSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateSafeSelection.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 390</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateSafeSelection.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateSafeSelection.Name" xml:space="preserve">
|
||||
<value>gridViewFwUpdateSafeSelection</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateSafeSelection.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateSafeSelection.Parent" xml:space="preserve">
|
||||
<value>tblFwUpdateSafeSelection</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateSafeSelection.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.RowCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 421</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tblFwUpdateSafeSelection.Name" xml:space="preserve">
|
||||
<value>tblFwUpdateSafeSelection</value>
|
||||
</data>
|
||||
<data name=">>tblFwUpdateSafeSelection.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tblFwUpdateSafeSelection.Parent" xml:space="preserve">
|
||||
<value>tabPageFwUpdateSafes</value>
|
||||
</data>
|
||||
<data name=">>tblFwUpdateSafeSelection.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tblFwUpdateSafeSelection.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tblPanelFwUpdateSafeSearch" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="gridViewFwUpdateSafeSelection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,31,Percent,100" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="tabPageFwUpdateSafes.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 22</value>
|
||||
</data>
|
||||
@@ -1711,6 +1810,105 @@
|
||||
<data name=">>tabPageFwUpdateSafes.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 31</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReportsSearch.Name" xml:space="preserve">
|
||||
<value>tblPanelFwUpdateReportsSearch</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReportsSearch.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReportsSearch.Parent" xml:space="preserve">
|
||||
<value>tblPanelFwUpdateReports</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReportsSearch.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReportsSearch.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls /><Columns Styles="Percent,50,Percent,50" /><Rows Styles="Percent,50" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateReportSelection.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateReportSelection.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 31</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateReportSelection.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateReportSelection.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 390</value>
|
||||
</data>
|
||||
<data name="gridViewFwUpdateReportSelection.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateReportSelection.Name" xml:space="preserve">
|
||||
<value>gridViewFwUpdateReportSelection</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateReportSelection.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateReportSelection.Parent" xml:space="preserve">
|
||||
<value>tblPanelFwUpdateReports</value>
|
||||
</data>
|
||||
<data name=">>gridViewFwUpdateReportSelection.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.RowCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>986, 421</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReports.Name" xml:space="preserve">
|
||||
<value>tblPanelFwUpdateReports</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReports.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReports.Parent" xml:space="preserve">
|
||||
<value>tabPageReports</value>
|
||||
</data>
|
||||
<data name=">>tblPanelFwUpdateReports.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tblPanelFwUpdateReports.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="tblPanelFwUpdateReportsSearch" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="gridViewFwUpdateReportSelection" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Absolute,31,Percent,100" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="tabPageReports.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>4, 22</value>
|
||||
</data>
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
|
||||
{
|
||||
partial class FrmHistory
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmHistory));
|
||||
this.rtbHistory = new System.Windows.Forms.RichTextBox();
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.picBoxLogo = new System.Windows.Forms.PictureBox();
|
||||
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblPcbIdLabel = new System.Windows.Forms.Label();
|
||||
this.lblDateLabel = new System.Windows.Forms.Label();
|
||||
this.lblOperatorIdLabel = new System.Windows.Forms.Label();
|
||||
this.lblPcbId = new System.Windows.Forms.Label();
|
||||
this.lblDate = new System.Windows.Forms.Label();
|
||||
this.lblOperatorId = new System.Windows.Forms.Label();
|
||||
this.lblOrder = new System.Windows.Forms.Label();
|
||||
this.lblCustomerName = new System.Windows.Forms.Label();
|
||||
this.lblCustomerLabel = new System.Windows.Forms.Label();
|
||||
this.lblOrderLabel = new System.Windows.Forms.Label();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.tableLayoutPanel2.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBoxLogo)).BeginInit();
|
||||
this.tableLayoutPanel3.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// rtbHistory
|
||||
//
|
||||
resources.ApplyResources(this.rtbHistory, "rtbHistory");
|
||||
this.rtbHistory.Name = "rtbHistory";
|
||||
this.rtbHistory.TextChanged += new System.EventHandler(this.rtbHistory_TextChanged);
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
|
||||
this.tableLayoutPanel1.Controls.Add(this.rtbHistory, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
//
|
||||
// tableLayoutPanel2
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
|
||||
this.tableLayoutPanel2.Controls.Add(this.picBoxLogo, 1, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 0);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
//
|
||||
// picBoxLogo
|
||||
//
|
||||
resources.ApplyResources(this.picBoxLogo, "picBoxLogo");
|
||||
this.picBoxLogo.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.picBoxLogo.Name = "picBoxLogo";
|
||||
this.picBoxLogo.TabStop = false;
|
||||
//
|
||||
// tableLayoutPanel3
|
||||
//
|
||||
resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3");
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblPcbIdLabel, 0, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblDateLabel, 0, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblOperatorIdLabel, 0, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblPcbId, 1, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblDate, 1, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblOperatorId, 1, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblOrder, 4, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblCustomerName, 4, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblCustomerLabel, 3, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lblOrderLabel, 3, 0);
|
||||
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
|
||||
//
|
||||
// lblPcbIdLabel
|
||||
//
|
||||
resources.ApplyResources(this.lblPcbIdLabel, "lblPcbIdLabel");
|
||||
this.lblPcbIdLabel.Name = "lblPcbIdLabel";
|
||||
//
|
||||
// lblDateLabel
|
||||
//
|
||||
resources.ApplyResources(this.lblDateLabel, "lblDateLabel");
|
||||
this.lblDateLabel.Name = "lblDateLabel";
|
||||
//
|
||||
// lblOperatorIdLabel
|
||||
//
|
||||
resources.ApplyResources(this.lblOperatorIdLabel, "lblOperatorIdLabel");
|
||||
this.lblOperatorIdLabel.Name = "lblOperatorIdLabel";
|
||||
//
|
||||
// lblPcbId
|
||||
//
|
||||
resources.ApplyResources(this.lblPcbId, "lblPcbId");
|
||||
this.lblPcbId.Name = "lblPcbId";
|
||||
//
|
||||
// lblDate
|
||||
//
|
||||
resources.ApplyResources(this.lblDate, "lblDate");
|
||||
this.lblDate.Name = "lblDate";
|
||||
//
|
||||
// lblOperatorId
|
||||
//
|
||||
resources.ApplyResources(this.lblOperatorId, "lblOperatorId");
|
||||
this.lblOperatorId.Name = "lblOperatorId";
|
||||
//
|
||||
// lblOrder
|
||||
//
|
||||
resources.ApplyResources(this.lblOrder, "lblOrder");
|
||||
this.lblOrder.Name = "lblOrder";
|
||||
//
|
||||
// lblCustomerName
|
||||
//
|
||||
resources.ApplyResources(this.lblCustomerName, "lblCustomerName");
|
||||
this.lblCustomerName.Name = "lblCustomerName";
|
||||
//
|
||||
// lblCustomerLabel
|
||||
//
|
||||
resources.ApplyResources(this.lblCustomerLabel, "lblCustomerLabel");
|
||||
this.lblCustomerLabel.Name = "lblCustomerLabel";
|
||||
//
|
||||
// lblOrderLabel
|
||||
//
|
||||
resources.ApplyResources(this.lblOrderLabel, "lblOrderLabel");
|
||||
this.lblOrderLabel.Name = "lblOrderLabel";
|
||||
//
|
||||
// FrmHistory
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "FrmHistory";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmHistory_FormClosing);
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBoxLogo)).EndInit();
|
||||
this.tableLayoutPanel3.ResumeLayout(false);
|
||||
this.tableLayoutPanel3.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.PictureBox picBoxLogo;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||
public System.Windows.Forms.RichTextBox rtbHistory;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
|
||||
private System.Windows.Forms.Label lblPcbIdLabel;
|
||||
private System.Windows.Forms.Label lblDateLabel;
|
||||
private System.Windows.Forms.Label lblOperatorIdLabel;
|
||||
private System.Windows.Forms.Label lblPcbId;
|
||||
private System.Windows.Forms.Label lblDate;
|
||||
private System.Windows.Forms.Label lblOperatorId;
|
||||
private System.Windows.Forms.Label lblOrderLabel;
|
||||
private System.Windows.Forms.Label lblCustomerLabel;
|
||||
private System.Windows.Forms.Label lblOrder;
|
||||
private System.Windows.Forms.Label lblCustomerName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
using Xylem.Common.Utils.DateTimeServer;
|
||||
using Xylem.ServiceFwUpdate.Common.FwUpdateConfig.Consts;
|
||||
using Xylem.ServiceFwUpdate.Common.FwUpdateDb;
|
||||
|
||||
namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// History display of update process
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public partial class FrmHistory : Form
|
||||
{
|
||||
/// <summary>
|
||||
/// Ctor
|
||||
/// </summary>
|
||||
public FrmHistory()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void FrmHistory_FormClosing(Object sender, FormClosingEventArgs e)
|
||||
{
|
||||
//avoid destroying of object
|
||||
e.Cancel = true;
|
||||
//instead just hide it
|
||||
Hide();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Apply labels
|
||||
/// </summary>
|
||||
public void ApplyLabels(FwUpdateReportDb report, CultureInfo currentCulture)
|
||||
{
|
||||
if (report == null) return;
|
||||
if (report.FileName != null)
|
||||
{
|
||||
var splitName = report.FileName.Split(FwUpdateConfig.FwUpdateFileFieldSeparator);
|
||||
lblCustomerName.Text = splitName[1];
|
||||
}
|
||||
|
||||
lblDate.Text = DateTimeServer.GetDateStringFromDateTimeOffset(report.Date, currentCulture);
|
||||
lblOperatorId.Text = report.UserId.ToString();
|
||||
lblOrder.Text = $@"{report.OrderNr}-{report.OrderPos}";
|
||||
lblPcbId.Text = report.PcbId.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// Select always the last line for the display.
|
||||
/// </summary>
|
||||
private void rtbHistory_TextChanged(Object sender, EventArgs e)
|
||||
{
|
||||
//rtbHistory.SelectionStart = rtbHistory.Text.Length;
|
||||
//rtbHistory.ScrollToCaret();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="rtbHistory.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>528, 626</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>534, 729</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>528, 91</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH
|
||||
AAAAPodpAAQAAAABAAAARpydAAEAAAAOAAAApgAAAABUaG9tYXMAAAAEkAMAAgAAABQAAAB8kAQAAgAA
|
||||
ABQAAACQkpEAAgAAAAM1MwAAkpIAAgAAAAM1MwAAAAAAADIwMjE6MDQ6MDEgMTQ6NTk6MjkAMjAyMTow
|
||||
NDowMSAxNDo1OToyOQAAAFQAaABvAG0AYQBzAAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQD
|
||||
BQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAIwBkAwEi
|
||||
AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB
|
||||
fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE
|
||||
RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1
|
||||
tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEA
|
||||
AAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRC
|
||||
kaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
|
||||
dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ
|
||||
2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fi5vYbML50scW7gb2C5p28Yrzr9qv8AZm0H
|
||||
9rX4Map4O8QK0cV0vm2d5GP32nXKg+XOnuMkEfxKWXoa/M7wp8XfjF8ZtT0j9j288SafptxpGsz6Xqvi
|
||||
SC/3TXWm24LfZlOQX2qrYUHewCIwUK+foMpyOOPpSnCqouDvNNbQt8S11ts1o9j4viTi6eT4mFGrQc1V
|
||||
Vqbi/iqXSVNpr3b3upXatfS61/XDTdYtNYjZ7O6t7pEbazQyCQKfQkGpZ7iO2TdI6xr6scCvzR8e/BeD
|
||||
/gkF+2N8M/EnhPVNbPwx8cOND1+G+ufOVJMhWkcgKvAdZV4yDHIB8pxXoP8AwWD12++NPxH+EPwF0W4e
|
||||
O78aaumo6kY/vQ26Exo5/wBkAzuf+uINbx4djUxFKNGrelUTlztWso35rq+6t36o4ZccVKOCxM8Vh+XE
|
||||
UJRg6alfmc7ez5Zcq0lf+W6s9NDU8P8AjTVpv+C4mtaP/a+pPoi+EFnSx+1ubQN5EB3iPOzPJOcdz619
|
||||
rX+pW+lW7TXU8NtCvWSVwij8TxXwZ8PPD9p4V/4Ll32lWEIt7HTfAkNpbRDpFEltbKq/gABXzx8Uv2g/
|
||||
AP7UH7afju5+PHiTxZb+B/B9/Jpnh7w9pEE8kMvlyvGXkMYO0nZuY8MxkADBUxXq18jePqUuRtRhRpt2
|
||||
jeTvokordv1surPncLxcsnoYj2iUqlXFVoxUp8sFazblNp2iulk220kj9fLS9h1C3Wa3ljmhkGVeNgys
|
||||
PYjg1FqWs2ejRq15dW9qrnarTSCMMfQZNfll+w9+0B4Z+B/7f+ieEfhL4h8Va18JfH0fkXGm6xbyxnSr
|
||||
0rIVMe8DOGRPnAGVkKtkoGrpPA37Pen/APBTL/goB8cIviVrGvT6P8PLs6To+n2V15MdsnnSwqRkEDAh
|
||||
LEAfM8hJz0PFW4WVCrJ4io40owU78vvWb5UuW+jvvrbqevhfESWLoU44Ogp151JUuX2i5LxjzuSqKLvH
|
||||
l1Xu3vpbQ/Si/wBbs9Kije6u7a2SU4RpZVQOfbJ5q0GzX5I/sI/sD6L+138T/ip4Z8feKPFuraX8Kbk+
|
||||
HtDRL8r5Cme5XzAG3BQPJyEUBcuc54r6W/4Id/ErXPFPwA8WeG9Z1G51aLwT4gk07T57hy8iQFFYR5JJ
|
||||
2qwYgZ4DY6AVlmnDlLC0qk6VbnlT5eZctlaesWnd36XVjp4d44xGY4ihTxGF9lCuqnI+dSd6TtNSXKrK
|
||||
97O7vbbU+2KKKK+VP0QKKKKAPF/23o/jJqHwyt9O+C8eix65qk7Wt9e6hMIm063ZGHnQknHmBsc7Wx1A
|
||||
zXzH4p/4IxN4U/ZZ0RvCGqhfjj4bvf7dXX0nMX9oXZIZoPMblUXapjZv4lJOPMav0ExmivawOfYrCU40
|
||||
8PaKTu9NZeUu6s2rbanyubcH5fmdedfHc03KPKk3pDZuUF9mTaT5tXp20PmD45fs1+Mv24f2Dm8J/EDT
|
||||
NN8N/EiFUuInjuUntBfQZCzK0edscyllK4ynmNwcDPzp/wAEkPD3ij9o39q7xP8AFDx1dW+qXnw70mDw
|
||||
jYXUDb4ZZlUxGRHyQxESOWYcMbndxnFfY/7Z/wAGPiL8c/h5a6H8PPHUXgKa4mePVLprbznubV4ypjQg
|
||||
blbJzlSp9xWj+x1+ynof7G3wQsPBmiTS33kyNdX19KgSS/uXxvlKjIUYVVC5OFVRknJPpUc4jSyurSUo
|
||||
81Rvlik/cTfv6vZSSSSTfc+fxPC88TxDhsQ4S9nQinOcpL97KK/d6LeUHKTcmlrojwP9oj9k74weG/8A
|
||||
goHpvxo+Fo8N6pb6lYQaVqtnqcvltbRDakpUEqGBjVWUhtwYEEEdcz4i/safGL9mb9p7xN8SPgK/hnXN
|
||||
L8dyfaNb8M623lIJyxdnRiVBXczspDqy+Yy4YV9C+If2k1+HVz8UtQ16EyaL4EurG3tks4d1zcG4trdw
|
||||
hy20s00wUH5QARnoTXJ3X7Y3iPxnfX2neG/A2qWdxZ6LNq0s+oqskkZt7wQ3EUdujb7gmMMYmQ7ZHZFy
|
||||
o3EVh8wzFxguSDioqDutJRspJS11cbppqzRONyfI1UqN1akakqkqi5W+aE7yhJw912U2mmpXi7bKxnfs
|
||||
peGP2kNa+L114o+LGoeDdB8Mmza2g8K6TbrORJnKzCUMSjDufMfcONq8EZn7DP7K3jP4G/tXfHjxX4is
|
||||
bS20Xx5q/wBs0eWK7SZ5o/tFw+WVTlDtkQ4PrXceJP2i/EnxE/Z+0vxV4B0me3urrUzaajbyW8OqX+lw
|
||||
R+YJitrHcIJZ1ZEBh8wSKGY7Cy7Dy3jz9vqDTvgzq2o6LDdajJDpr2tn4pWzSLS59Y/sr+0Ui+yvKbhE
|
||||
MWGyylVJ2Fsgms+bHVVVpwpwj7S0GkrcvLJPp1uurbaubKGUYaVCtWrVJujepGU3dzc4OL3V7JPooxi2
|
||||
rtN2Mz/gnZ+yn40/Z4+NHxw1rxRY2lpp/jjXxqGkvDdpO00Xn3T5YLyh2yocHnn2rF/YA/ZM+K/7G/x+
|
||||
8b6LdR+HNS+FviW8n1WHU45v9OE2QIVKEgrlCQ4KsMrw3PPpOp/8FBfD2kTW+nroPiC+15pzp89jEsKt
|
||||
bXgluUEEjGTarPHZ3M65ODEin+NQaXxu/a18S+G7fw7J4X0u1874keH1bwnaazayW9wusG4gXyLld2VU
|
||||
Q3PmlRggWsxyRitKlbMq1SpCrCK9sknfb3Fo1rdWSvfbdmVHC5DhaNCpQqzf1WUpJxd3+8d5RlpZptqN
|
||||
lqm0tGz6Oor5d8A/8FFLfX9XgurjSZrzRdaurOx04ae0RuLSV0top2nV5A+wX10LbKptVoJMkkYrT+H/
|
||||
APwUSsfEuieHZNT8G+IrO+1TS7bU9RSz8q8h0pLkzeQWZW3MriB2LBcRggvjnHjzyTGR1cPxX9abPz06
|
||||
o+npcXZVUaSq73to+jSve1rO913V3snb6PornfhP49k+KPw70nxC+kX+hrrEC3UNpevE06RON0bP5Tuo
|
||||
LKQ2AxIzg4IIory6kHCThLdH0FGrGpBVIbNXXTR+T1OioooqTQKKKKAON8Rfs8eBfF3iy617VPCeg6hr
|
||||
F9Aba4u7izSSW4iMZj2OSPmGwlee1OsP2fvA+l2tnDb+E9Bjj0+0ubCBRZp+7t7k5uIunKSHlwchjyc0
|
||||
UVt9Yq25eZ29Wcv1HDczn7ON3u7K71v27pP1RDcfs3eAbv4fW/hSTwf4fbw5a3BuodPNmnkxzEsTIBjh
|
||||
zubLdTuOTyaW6/Zv+H97qzX0vgvwy921h/ZZk/s6LP2XyvJ8np93yv3eP7ny/d4oop/Wq387+99d/vJ/
|
||||
s/CO16UdLfZXTbp06dizr/wJ8F+KbTVINQ8L6Hdx63cRXl+JLNM3c0SLHHK5xkuqKqhuoUY6VqP8PtCk
|
||||
TRFbR9NK+GnEmkg26401hE0IMPH7vEbsny4+ViKKKj21Rqzk/v8AK35aehosLQTclBXfku9/z19dTDuf
|
||||
2c/AV3f6bdSeD/DrXGjzSXFlJ9gj3W0kk/2h2U44Jn/eZ/v/ADdeajt/2afh9aX9ndReC/Dcdxp5mNs6
|
||||
WEamHzWd5Mcd2kkb2LsRjJooq/rVbbnf3sz/ALPwt7+yj/4CulrdPJfcux2Omabb6Np1vZ2kMdva2saw
|
||||
wxRrtSJFACqo7AAAAUUUVhvqzsSSVkf/2Q==
|
||||
</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>422, 3</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>103, 41</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>419, 91</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>41, 31</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Text" xml:space="preserve">
|
||||
<value>Datum:</value>
|
||||
</data>
|
||||
<data name="lblOrder.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>270, 0</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>270, 62</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>41, 29</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Text" xml:space="preserve">
|
||||
<value>Kunde:</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 31</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Text" xml:space="preserve">
|
||||
<value>Auftrag-Pos:</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>534, 729</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
|
||||
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
|
||||
AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA
|
||||
B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw
|
||||
AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3
|
||||
ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI
|
||||
/wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA
|
||||
AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA
|
||||
AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH
|
||||
AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y
|
||||
Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA
|
||||
AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w==
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,150 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="rtbHistory.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>428, 673</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>434, 729</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>434, 729</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
|
||||
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
|
||||
AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA
|
||||
B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw
|
||||
AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3
|
||||
ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI
|
||||
/wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA
|
||||
AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA
|
||||
AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH
|
||||
AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y
|
||||
Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA
|
||||
AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w==
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>FW-Update Info</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,723 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="rtbHistory.Text" xml:space="preserve">
|
||||
<value />
|
||||
</data>
|
||||
<data name=">>lblOrder.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="lblOperatorIdLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>65, 29</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
|
||||
<value>GrowAndShrink</value>
|
||||
</data>
|
||||
<data name=">>lblOrderLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name=">>lblOrderLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>lblDate.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>picBoxLogo.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Text" xml:space="preserve">
|
||||
<value>Order-Pos:</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="lblPcbIdLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>lblPcbId.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblDate.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>74, 31</value>
|
||||
</data>
|
||||
<data name="lblOrder.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>255, 0</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerName.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name="rtbHistory.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>31</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Text" xml:space="preserve">
|
||||
<value>Customer:</value>
|
||||
</data>
|
||||
<data name=">>lblPcbIdLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="lblPcbId.Text" xml:space="preserve">
|
||||
<value>00000000</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>35</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="picBoxLogo" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="tableLayoutPanel3" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,79,54546,Percent,20,45455" /><Rows Styles="Percent,100,Absolute,20" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>FW-Update Report</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>105, 39</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="lblPcbIdLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblDateLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblOperatorIdLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblPcbId" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblDate" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblOperatorId" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="lblOrder" Row="0" RowSpan="1" Column="4" ColumnSpan="1" /><Control Name="lblCustomerName" Row="2" RowSpan="1" Column="4" ColumnSpan="1" /><Control Name="lblCustomerLabel" Row="2" RowSpan="1" Column="3" ColumnSpan="1" /><Control Name="lblOrderLabel" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /></Controls><Columns Styles="Absolute,71,Absolute,89,Absolute,28,Absolute,79,Absolute,242" /><Rows Styles="Absolute,31,Absolute,31,Absolute,20" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="lblPcbId.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblOrder.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name=">>lblPcbIdLabel.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerName.Name" xml:space="preserve">
|
||||
<value>lblCustomerName</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel3.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name=">>lblDateLabel.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorIdLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>33, 31</value>
|
||||
</data>
|
||||
<data name=">>lblPcbId.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorId.Name" xml:space="preserve">
|
||||
<value>lblOperatorId</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorId.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>lblDateLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>0, 0, 0, 0</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>40, 31</value>
|
||||
</data>
|
||||
<data name=">>lblDate.Name" xml:space="preserve">
|
||||
<value>lblDate</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 0</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>54, 29</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>13, 29</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>430, 3</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.Text" xml:space="preserve">
|
||||
<value>Operator ID:</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>538, 91</value>
|
||||
</data>
|
||||
<data name=">>rtbHistory.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="rtbHistory.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.ErrorImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name=">>lblOrder.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>FrmHistory</value>
|
||||
</data>
|
||||
<data name="lblDate.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.RowCount" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel3.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>rtbHistory.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="lblDate.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>57, 31</value>
|
||||
</data>
|
||||
<data name="lblOrder.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>82, 31</value>
|
||||
</data>
|
||||
<data name=">>rtbHistory.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel1</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>rtbHistory.Name" xml:space="preserve">
|
||||
<value>rtbHistory</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>Manual</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Text" xml:space="preserve">
|
||||
<value>Date:</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>82, 29</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
|
||||
<value><?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="rtbHistory" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,20" /><Rows Styles="Absolute,97,Percent,100,Absolute,111" /></TableLayoutSettings></value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel3.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>191, 0</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="lblDate.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>54, 31</value>
|
||||
</data>
|
||||
<data name="lblPcbId.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>55, 31</value>
|
||||
</data>
|
||||
<data name=">>lblPcbId.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.Text" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Top</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>427, 91</value>
|
||||
</data>
|
||||
<data name=">>lblDateLabel.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerLabel.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="lblOrder.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorIdLabel.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.InitialImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
</data>
|
||||
<data name=">>lblOrder.Name" xml:space="preserve">
|
||||
<value>lblOrder</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.Name" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.Text" xml:space="preserve">
|
||||
<value>PcbID:</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.ColumnCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.RowCount" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>picBoxLogo.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel2</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>74, 62</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>255, 62</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.Text" xml:space="preserve">
|
||||
<value>Customer Name</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblPcbId.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>lblOrderLabel.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorIdLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="lblPcbId.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>lblPcbIdLabel.Name" xml:space="preserve">
|
||||
<value>lblPcbIdLabel</value>
|
||||
</data>
|
||||
<data name="lblOrder.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 62</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="lblOrder.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblPcbIdLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="lblOperatorId.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorIdLabel.Name" xml:space="preserve">
|
||||
<value>lblOperatorIdLabel</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>544, 729</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>38</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 31</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerLabel.Name" xml:space="preserve">
|
||||
<value>lblCustomerLabel</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
|
||||
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
|
||||
AAAABwAAAAAAAAAAAAAAAAB3cAcAAAAAAAAAAAAHcHAAd3AHAABwAAAAAAAAdwAHAHhwAAAABwAAAAAA
|
||||
B3CAAAd4dwAAcABwAAAAAAcIiAd3d3d3B3cABwAAAAAAj4iHf///B3iHcAcAAAAAAAiIiPiIiP8IhwBw
|
||||
AAAAAAAAiAiIh3d48HAAcAAAAAd3CIiIiAAHd493AHd3cABwAAjwiAB3dwd/BwAAAHAHAACPCIgIAAd3
|
||||
ePdwAABwBwiIjwiA8I+AcHj3d3cAcAcI+I8HgPBw8HB494h3AHAHCIiPB4Dwd4BwiPd3dwBwBwAAjweI
|
||||
/wAICIj3cAAAcAAAAAjweA//8AiPdwBwAAAAAAAI8HeIAAiIiHcAcAAAAAAAAI8HeIiIiAhwAHAAAAAA
|
||||
AAiP8Ad3iAiIhwAHAAAAAACPiI/wAAD4eIdwBwAAAAAHCPgIj///iAeHAHAAAAAAB3CAAAiIiAAAcAcA
|
||||
AAAAAAB3AHAAiIAHAABwAAAAAAAAB3cAAI+ABwAHAAAAAAAAAAAAAACIgAcAAAAAAAAAAAAAAAAAAAAH
|
||||
AAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////wP///8D///+A////gP//4Y
|
||||
Dn/8AAQ/+AAAH/gAAA/4AAAP/AAAH/4AAB/gAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB/AAAH/wA
|
||||
AB/+AAAf/AAAD/gAAA/4AAAf+AAAP/wYDH/+OA7///gP///4D///+A///////w==
|
||||
</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerName.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>picBoxLogo.Name" xml:space="preserve">
|
||||
<value>picBoxLogo</value>
|
||||
</data>
|
||||
<data name="lblDateLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>lblOrderLabel.Name" xml:space="preserve">
|
||||
<value>lblOrderLabel</value>
|
||||
</data>
|
||||
<data name=">>lblDate.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="picBoxLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
/9j/4AAQSkZJRgABAQEAYABgAAD/4QC8RXhpZgAATU0AKgAAAAgABAESAAMAAAABAAEAAAE7AAIAAAAH
|
||||
AAAAPodpAAQAAAABAAAARpydAAEAAAAOAAAApgAAAABUaG9tYXMAAAAEkAMAAgAAABQAAAB8kAQAAgAA
|
||||
ABQAAACQkpEAAgAAAAM1MwAAkpIAAgAAAAM1MwAAAAAAADIwMjE6MDQ6MDEgMTQ6NTk6MjkAMjAyMTow
|
||||
NDowMSAxNDo1OToyOQAAAFQAaABvAG0AYQBzAAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQD
|
||||
BQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwM
|
||||
DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAIwBkAwEi
|
||||
AAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB
|
||||
fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE
|
||||
RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1
|
||||
tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEA
|
||||
AAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRC
|
||||
kaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
|
||||
dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ
|
||||
2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fi5vYbML50scW7gb2C5p28Yrzr9qv8AZm0H
|
||||
9rX4Map4O8QK0cV0vm2d5GP32nXKg+XOnuMkEfxKWXoa/M7wp8XfjF8ZtT0j9j288SafptxpGsz6Xqvi
|
||||
SC/3TXWm24LfZlOQX2qrYUHewCIwUK+foMpyOOPpSnCqouDvNNbQt8S11ts1o9j4viTi6eT4mFGrQc1V
|
||||
Vqbi/iqXSVNpr3b3upXatfS61/XDTdYtNYjZ7O6t7pEbazQyCQKfQkGpZ7iO2TdI6xr6scCvzR8e/BeD
|
||||
/gkF+2N8M/EnhPVNbPwx8cOND1+G+ufOVJMhWkcgKvAdZV4yDHIB8pxXoP8AwWD12++NPxH+EPwF0W4e
|
||||
O78aaumo6kY/vQ26Exo5/wBkAzuf+uINbx4djUxFKNGrelUTlztWso35rq+6t36o4ZccVKOCxM8Vh+XE
|
||||
UJRg6alfmc7ez5Zcq0lf+W6s9NDU8P8AjTVpv+C4mtaP/a+pPoi+EFnSx+1ubQN5EB3iPOzPJOcdz619
|
||||
rX+pW+lW7TXU8NtCvWSVwij8TxXwZ8PPD9p4V/4Ll32lWEIt7HTfAkNpbRDpFEltbKq/gABXzx8Uv2g/
|
||||
AP7UH7afju5+PHiTxZb+B/B9/Jpnh7w9pEE8kMvlyvGXkMYO0nZuY8MxkADBUxXq18jePqUuRtRhRpt2
|
||||
jeTvokordv1surPncLxcsnoYj2iUqlXFVoxUp8sFazblNp2iulk220kj9fLS9h1C3Wa3ljmhkGVeNgys
|
||||
PYjg1FqWs2ejRq15dW9qrnarTSCMMfQZNfll+w9+0B4Z+B/7f+ieEfhL4h8Va18JfH0fkXGm6xbyxnSr
|
||||
0rIVMe8DOGRPnAGVkKtkoGrpPA37Pen/APBTL/goB8cIviVrGvT6P8PLs6To+n2V15MdsnnSwqRkEDAh
|
||||
LEAfM8hJz0PFW4WVCrJ4io40owU78vvWb5UuW+jvvrbqevhfESWLoU44Ogp151JUuX2i5LxjzuSqKLvH
|
||||
l1Xu3vpbQ/Si/wBbs9Kije6u7a2SU4RpZVQOfbJ5q0GzX5I/sI/sD6L+138T/ip4Z8feKPFuraX8Kbk+
|
||||
HtDRL8r5Cme5XzAG3BQPJyEUBcuc54r6W/4Id/ErXPFPwA8WeG9Z1G51aLwT4gk07T57hy8iQFFYR5JJ
|
||||
2qwYgZ4DY6AVlmnDlLC0qk6VbnlT5eZctlaesWnd36XVjp4d44xGY4ihTxGF9lCuqnI+dSd6TtNSXKrK
|
||||
97O7vbbU+2KKKK+VP0QKKKKAPF/23o/jJqHwyt9O+C8eix65qk7Wt9e6hMIm063ZGHnQknHmBsc7Wx1A
|
||||
zXzH4p/4IxN4U/ZZ0RvCGqhfjj4bvf7dXX0nMX9oXZIZoPMblUXapjZv4lJOPMav0ExmivawOfYrCU40
|
||||
8PaKTu9NZeUu6s2rbanyubcH5fmdedfHc03KPKk3pDZuUF9mTaT5tXp20PmD45fs1+Mv24f2Dm8J/EDT
|
||||
NN8N/EiFUuInjuUntBfQZCzK0edscyllK4ynmNwcDPzp/wAEkPD3ij9o39q7xP8AFDx1dW+qXnw70mDw
|
||||
jYXUDb4ZZlUxGRHyQxESOWYcMbndxnFfY/7Z/wAGPiL8c/h5a6H8PPHUXgKa4mePVLprbznubV4ypjQg
|
||||
blbJzlSp9xWj+x1+ynof7G3wQsPBmiTS33kyNdX19KgSS/uXxvlKjIUYVVC5OFVRknJPpUc4jSyurSUo
|
||||
81Rvlik/cTfv6vZSSSSTfc+fxPC88TxDhsQ4S9nQinOcpL97KK/d6LeUHKTcmlrojwP9oj9k74weG/8A
|
||||
goHpvxo+Fo8N6pb6lYQaVqtnqcvltbRDakpUEqGBjVWUhtwYEEEdcz4i/safGL9mb9p7xN8SPgK/hnXN
|
||||
L8dyfaNb8M623lIJyxdnRiVBXczspDqy+Yy4YV9C+If2k1+HVz8UtQ16EyaL4EurG3tks4d1zcG4trdw
|
||||
hy20s00wUH5QARnoTXJ3X7Y3iPxnfX2neG/A2qWdxZ6LNq0s+oqskkZt7wQ3EUdujb7gmMMYmQ7ZHZFy
|
||||
o3EVh8wzFxguSDioqDutJRspJS11cbppqzRONyfI1UqN1akakqkqi5W+aE7yhJw912U2mmpXi7bKxnfs
|
||||
peGP2kNa+L114o+LGoeDdB8Mmza2g8K6TbrORJnKzCUMSjDufMfcONq8EZn7DP7K3jP4G/tXfHjxX4is
|
||||
bS20Xx5q/wBs0eWK7SZ5o/tFw+WVTlDtkQ4PrXceJP2i/EnxE/Z+0vxV4B0me3urrUzaajbyW8OqX+lw
|
||||
R+YJitrHcIJZ1ZEBh8wSKGY7Cy7Dy3jz9vqDTvgzq2o6LDdajJDpr2tn4pWzSLS59Y/sr+0Ui+yvKbhE
|
||||
MWGyylVJ2Fsgms+bHVVVpwpwj7S0GkrcvLJPp1uurbaubKGUYaVCtWrVJujepGU3dzc4OL3V7JPooxi2
|
||||
rtN2Mz/gnZ+yn40/Z4+NHxw1rxRY2lpp/jjXxqGkvDdpO00Xn3T5YLyh2yocHnn2rF/YA/ZM+K/7G/x+
|
||||
8b6LdR+HNS+FviW8n1WHU45v9OE2QIVKEgrlCQ4KsMrw3PPpOp/8FBfD2kTW+nroPiC+15pzp89jEsKt
|
||||
bXgluUEEjGTarPHZ3M65ODEin+NQaXxu/a18S+G7fw7J4X0u1874keH1bwnaazayW9wusG4gXyLld2VU
|
||||
Q3PmlRggWsxyRitKlbMq1SpCrCK9sknfb3Fo1rdWSvfbdmVHC5DhaNCpQqzf1WUpJxd3+8d5RlpZptqN
|
||||
lqm0tGz6Oor5d8A/8FFLfX9XgurjSZrzRdaurOx04ae0RuLSV0top2nV5A+wX10LbKptVoJMkkYrT+H/
|
||||
APwUSsfEuieHZNT8G+IrO+1TS7bU9RSz8q8h0pLkzeQWZW3MriB2LBcRggvjnHjzyTGR1cPxX9abPz06
|
||||
o+npcXZVUaSq73to+jSve1rO913V3snb6PornfhP49k+KPw70nxC+kX+hrrEC3UNpevE06RON0bP5Tuo
|
||||
LKQ2AxIzg4IIory6kHCThLdH0FGrGpBVIbNXXTR+T1OioooqTQKKKKAON8Rfs8eBfF3iy617VPCeg6hr
|
||||
F9Aba4u7izSSW4iMZj2OSPmGwlee1OsP2fvA+l2tnDb+E9Bjj0+0ubCBRZp+7t7k5uIunKSHlwchjyc0
|
||||
UVt9Yq25eZ29Wcv1HDczn7ON3u7K71v27pP1RDcfs3eAbv4fW/hSTwf4fbw5a3BuodPNmnkxzEsTIBjh
|
||||
zubLdTuOTyaW6/Zv+H97qzX0vgvwy921h/ZZk/s6LP2XyvJ8np93yv3eP7ny/d4oop/Wq387+99d/vJ/
|
||||
s/CO16UdLfZXTbp06dizr/wJ8F+KbTVINQ8L6Hdx63cRXl+JLNM3c0SLHHK5xkuqKqhuoUY6VqP8PtCk
|
||||
TRFbR9NK+GnEmkg26401hE0IMPH7vEbsny4+ViKKKj21Rqzk/v8AK35aehosLQTclBXfku9/z19dTDuf
|
||||
2c/AV3f6bdSeD/DrXGjzSXFlJ9gj3W0kk/2h2U44Jn/eZ/v/ADdeajt/2afh9aX9ndReC/Dcdxp5mNs6
|
||||
WEamHzWd5Mcd2kkb2LsRjJooq/rVbbnf3sz/ALPwt7+yj/4CulrdPJfcux2Omabb6Np1vZ2kMdva2saw
|
||||
wxRrtSJFACqo7AAAAUUUVhvqzsSSVkf/2Q==
|
||||
</value>
|
||||
</data>
|
||||
<data name="lblOrder.Text" xml:space="preserve">
|
||||
<value>1234567890-10</value>
|
||||
</data>
|
||||
<data name=">>lblDateLabel.Name" xml:space="preserve">
|
||||
<value>lblDateLabel</value>
|
||||
</data>
|
||||
<data name=">>lblDate.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>36</value>
|
||||
</data>
|
||||
<data name="lblDate.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="lblPcbId.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>tableLayoutPanel1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorId.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>544, 729</value>
|
||||
</data>
|
||||
<data name="lblPcbId.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>74, 0</value>
|
||||
</data>
|
||||
<data name="lblDate.Text" xml:space="preserve">
|
||||
<value>Date Text</value>
|
||||
</data>
|
||||
<data name=">>lblPcbId.Name" xml:space="preserve">
|
||||
<value>lblPcbId</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="lblCustomerName.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name=">>lblCustomerName.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 3</value>
|
||||
</data>
|
||||
<data name=">>picBoxLogo.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="lblDate.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>191, 62</value>
|
||||
</data>
|
||||
<data name="lblOrderLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Left</value>
|
||||
</data>
|
||||
<data name="rtbHistory.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 100</value>
|
||||
</data>
|
||||
<data name=">>lblOrder.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="lblOperatorIdLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>MiddleCenter</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="rtbHistory.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>538, 626</value>
|
||||
</data>
|
||||
<data name="lblCustomerLabel.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name=">>lblPcbIdLabel.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name=">>lblOperatorId.Parent" xml:space="preserve">
|
||||
<value>tableLayoutPanel3</value>
|
||||
</data>
|
||||
<data name="tableLayoutPanel3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>400, 768</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
</root>
|
||||
@@ -58,10 +58,10 @@
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestCertificateThumbprint>D8B4896173CF7130DF43C53CECCE6E4A7595CA5C</ManifestCertificateThumbprint>
|
||||
<ManifestCertificateThumbprint>3D39BF7375F751B96081DE64F2A442ABD8A73321</ManifestCertificateThumbprint>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestKeyFile>FwUpdateBuilder_TemporaryKey.pfx</ManifestKeyFile>
|
||||
<ManifestKeyFile>FwUpdateBuilder_1_TemporaryKey.pfx</ManifestKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<GenerateManifests>true</GenerateManifests>
|
||||
@@ -101,6 +101,12 @@
|
||||
<Compile Include="FrmFwUpdateBuilder.Designer.cs">
|
||||
<DependentUpon>FrmFwUpdateBuilder.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmHistory.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FrmHistory.Designer.cs">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FrmRegister.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@@ -118,6 +124,16 @@
|
||||
<DependentUpon>FrmFwUpdateBuilder.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmHistory.de-DE.resx">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmHistory.de.resx">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmHistory.resx">
|
||||
<DependentUpon>FrmHistory.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FrmRegister.de.resx">
|
||||
<DependentUpon>FrmRegister.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@@ -145,6 +161,7 @@
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="FwUpdateBuilder_1_TemporaryKey.pfx" />
|
||||
<None Include="FwUpdateBuilder_TemporaryKey.pfx" />
|
||||
<None Include="MeterFwUpdateRuler.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
|
||||
+46
-1
@@ -341,6 +341,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Acquiring FW Update Safes.....
|
||||
/// </summary>
|
||||
internal static string StrReadingFwUpdateSafes {
|
||||
get {
|
||||
return ResourceManager.GetString("StrReadingFwUpdateSafes", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Acquiring Production Orders.....
|
||||
/// </summary>
|
||||
@@ -350,6 +359,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Acquiring Report Files.....
|
||||
/// </summary>
|
||||
internal static string StrReadingReports {
|
||||
get {
|
||||
return ResourceManager.GetString("StrReadingReports", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Acquiring update operators.....
|
||||
/// </summary>
|
||||
@@ -611,6 +629,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to FW-Update Order Number.
|
||||
/// </summary>
|
||||
internal static string StrTableCordonelUpdateOrder {
|
||||
get {
|
||||
return ResourceManager.GetString("StrTableCordonelUpdateOrder", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Customer Location.
|
||||
/// </summary>
|
||||
@@ -638,6 +665,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Date.
|
||||
/// </summary>
|
||||
internal static string StrTableDate {
|
||||
get {
|
||||
return ResourceManager.GetString("StrTableDate", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Core Max.
|
||||
/// </summary>
|
||||
@@ -710,6 +746,15 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Update Operator ID.
|
||||
/// </summary>
|
||||
internal static string StrTableUpdateOperatorId {
|
||||
get {
|
||||
return ResourceManager.GetString("StrTableUpdateOperatorId", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Active.
|
||||
/// </summary>
|
||||
@@ -729,7 +774,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateBuilder.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Full Name.
|
||||
/// Looks up a localized string similar to Update Operator.
|
||||
/// </summary>
|
||||
internal static string StrTableUserFullName {
|
||||
get {
|
||||
|
||||
@@ -153,6 +153,12 @@
|
||||
<data name="StrReadingFwPackages" xml:space="preserve">
|
||||
<value>Ermittelle FW-Pakete....</value>
|
||||
</data>
|
||||
<data name="StrReadingFwUpdateSafes" xml:space="preserve">
|
||||
<value>Ermittelle FW Update Safes....</value>
|
||||
</data>
|
||||
<data name="StrReadingReports" xml:space="preserve">
|
||||
<value>Ermittelle Berichte....</value>
|
||||
</data>
|
||||
<data name="StrReadingCustomers" xml:space="preserve">
|
||||
<value>Ermittelle Kunden....</value>
|
||||
</data>
|
||||
@@ -240,6 +246,9 @@
|
||||
<data name="StrTableSelect" xml:space="preserve">
|
||||
<value>Auswahl</value>
|
||||
</data>
|
||||
<data name="StrTableUpdateOperatorId" xml:space="preserve">
|
||||
<value>Update Operator ID</value>
|
||||
</data>
|
||||
<data name="StrTableApprove" xml:space="preserve">
|
||||
<value>Genehmigt</value>
|
||||
</data>
|
||||
@@ -273,6 +282,9 @@
|
||||
<data name="StrTableCordonelProductionOrder" xml:space="preserve">
|
||||
<value>Produktionsnummer</value>
|
||||
</data>
|
||||
<data name="StrTableCordonelUpdateOrder" xml:space="preserve">
|
||||
<value>FW-Update Auftragsnummer</value>
|
||||
</data>
|
||||
<data name="StrTableCordonelProductionPos" xml:space="preserve">
|
||||
<value>Position</value>
|
||||
</data>
|
||||
@@ -315,6 +327,9 @@
|
||||
<data name="StrTableReleaseDate" xml:space="preserve">
|
||||
<value>Releasedatum</value>
|
||||
</data>
|
||||
<data name="StrTableDate" xml:space="preserve">
|
||||
<value>Datum</value>
|
||||
</data>
|
||||
<data name="StrTableRegion" xml:space="preserve">
|
||||
<value>Region</value>
|
||||
</data>
|
||||
@@ -322,7 +337,7 @@
|
||||
<value>Funkfrequenz [MHz]</value>
|
||||
</data>
|
||||
<data name="StrTableUserFullName" xml:space="preserve">
|
||||
<value>Benutzername</value>
|
||||
<value>Update Operator</value>
|
||||
</data>
|
||||
<data name="StrTableUserDomain" xml:space="preserve">
|
||||
<value>Domain</value>
|
||||
|
||||
@@ -159,6 +159,12 @@
|
||||
<data name="StrReadingFwPackages" xml:space="preserve">
|
||||
<value>Acquiring FW packages....</value>
|
||||
</data>
|
||||
<data name="StrReadingFwUpdateSafes" xml:space="preserve">
|
||||
<value>Acquiring FW Update Safes....</value>
|
||||
</data>
|
||||
<data name="StrReadingReports" xml:space="preserve">
|
||||
<value>Acquiring Report Files....</value>
|
||||
</data>
|
||||
<data name="StrReadingCordonels" xml:space="preserve">
|
||||
<value>Acquiring Cordonels....</value>
|
||||
</data>
|
||||
@@ -243,6 +249,9 @@
|
||||
<data name="StrTableSelect" xml:space="preserve">
|
||||
<value>Select</value>
|
||||
</data>
|
||||
<data name="StrTableUpdateOperatorId" xml:space="preserve">
|
||||
<value>Update Operator ID</value>
|
||||
</data>
|
||||
<data name="StrTableApprove" xml:space="preserve">
|
||||
<value>Approved</value>
|
||||
</data>
|
||||
@@ -276,6 +285,9 @@
|
||||
<data name="StrTableCordonelProductionOrder" xml:space="preserve">
|
||||
<value>Order Number</value>
|
||||
</data>
|
||||
<data name="StrTableCordonelUpdateOrder" xml:space="preserve">
|
||||
<value>FW-Update Order Number</value>
|
||||
</data>
|
||||
<data name="StrTableCordonelProductionPos" xml:space="preserve">
|
||||
<value>Position</value>
|
||||
</data>
|
||||
@@ -318,6 +330,9 @@
|
||||
<data name="StrTableReleaseDate" xml:space="preserve">
|
||||
<value>Release Date</value>
|
||||
</data>
|
||||
<data name="StrTableDate" xml:space="preserve">
|
||||
<value>Date</value>
|
||||
</data>
|
||||
<data name="StrTableRegion" xml:space="preserve">
|
||||
<value>Region</value>
|
||||
</data>
|
||||
@@ -325,7 +340,7 @@
|
||||
<value>Radio Frequency [MHz]</value>
|
||||
</data>
|
||||
<data name="StrTableUserFullName" xml:space="preserve">
|
||||
<value>Full Name</value>
|
||||
<value>Update Operator</value>
|
||||
</data>
|
||||
<data name="StrTableUserDomain" xml:space="preserve">
|
||||
<value>Domain</value>
|
||||
|
||||
@@ -104,6 +104,16 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
/// </summary>
|
||||
private const String FwUpdateProjectName = "ServiceFwUpdateSw";
|
||||
|
||||
///// <summary>
|
||||
///// Search strings for "Firmware up to date!" messages in report file, copied from Resources.resx of all
|
||||
///// language packages from "ServiceFwUpdateSw"
|
||||
///// </summary>
|
||||
//private readonly String[] _firmwareUpToDateSearchStrings =
|
||||
//{
|
||||
// "Firmware is up to date!",
|
||||
// "Firmware ist aktuell!"
|
||||
//};
|
||||
|
||||
/// <summary>
|
||||
/// Name of the file which contains the meter file names that can be erased before the FW-Update
|
||||
/// to free disk space and have to be restored after the FW-Update
|
||||
@@ -499,7 +509,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
public FrmFwUpdateLoader()
|
||||
{
|
||||
var fwUpdateLoaderExePath = AppDomain.CurrentDomain.BaseDirectory;
|
||||
var fwUpdateLoaderConfigPath = Path.Combine(fwUpdateLoaderExePath, "Config");
|
||||
var fwUpdateLoaderConfigPath = Path.Combine(fwUpdateLoaderExePath, FwUpdateConfig.ConfigSubFolderName);
|
||||
|
||||
// Set the FW-Update SW destination folder to the FW-Update Loader exe path
|
||||
_fwUpdateSwDestinationPath = Path.Combine(fwUpdateLoaderExePath, FwUpdateProjectName);
|
||||
@@ -691,13 +701,44 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
|
||||
#region ------------------------------------------ Checks -----------------------------------------------------
|
||||
|
||||
/// <summary>
|
||||
/// Search "Firmware is up to date!" string in file to guarantee the successfully execution of the update
|
||||
/// process. Get success string for all language settings!
|
||||
/// </summary>
|
||||
/// <remarks date="2021-Oct-15" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean IsSuccessStringInFile(String fileNamePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Get search strings from resources StrFwUpToDateMessage from ServiceFwUpdateSw
|
||||
var fileLines = File.ReadAllLines(fileNamePath);
|
||||
var fwIsUpToDate = false;
|
||||
foreach (var searchString in FwUpdateConfig.FirmwareUpToDateSearchStrings)
|
||||
{
|
||||
if (fileLines.Any(line => line.Contains(searchString))) fwIsUpToDate = true;
|
||||
}
|
||||
|
||||
return fwIsUpToDate;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Search for report files
|
||||
/// </summary>
|
||||
/// <remarks date="2021-Apr-28" author="Thomas Wiedebusch">
|
||||
/// - Initial
|
||||
/// </remarks>
|
||||
private Boolean IsPcbIdProcessed(String pcbId)
|
||||
/// <remarks date="2021-Oct-15" author="Thomas Wiedebusch">
|
||||
/// - Check file content for "success" string to mark exclusively the validated updates.
|
||||
/// - Check order number to enable more than one update for a specific pcbId.
|
||||
/// </remarks>
|
||||
private Boolean IsPcbIdProcessed(String pcbId, String orderNo)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -707,7 +748,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
var fileList = new List<String>();
|
||||
SystemControl.GetFilesOfDirectoryAndSubDirectory(FwUpdateConfig.UnreportedPath, fileList,
|
||||
$"*{FwUpdateConfig.ReportFileExtension}");
|
||||
if (fileList.Any(file => file.Contains(pcbId))) return true;
|
||||
if (fileList.Any(file => file.Contains(pcbId) && file.Contains(orderNo)
|
||||
&& IsSuccessStringInFile(file))) return true;
|
||||
}
|
||||
// If this directory is existent and contains files, these files have to be checked
|
||||
if (SystemControl.FilesExistingInPath(FwUpdateConfig.ReportedPath))
|
||||
@@ -715,7 +757,8 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
var fileList = new List<String>();
|
||||
SystemControl.GetFilesOfDirectoryAndSubDirectory(FwUpdateConfig.ReportedPath, fileList,
|
||||
$"*{FwUpdateConfig.ReportFileExtension}");
|
||||
if (fileList.Any(file => file.Contains(pcbId))) return true;
|
||||
if (fileList.Any(file => file.Contains(pcbId) && file.Contains(orderNo)
|
||||
&& IsSuccessStringInFile(file))) return true;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -1721,9 +1764,13 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
/// <remarks date="2021-Apr-28" author="Thomas Wiedebusch">
|
||||
/// - Initial.
|
||||
/// </remarks>
|
||||
/// <remarks date="2021-Oct-15" author="Thomas Wiedebusch">
|
||||
/// - Added order number to search for successfully updated device in linked to this safe.
|
||||
/// </remarks>
|
||||
private void FillDataGridWithPcbIdInfos()
|
||||
{
|
||||
if (_fwUpdateSafe?.Updates?.CordonelDeviceInfos == null) return;
|
||||
|
||||
grpLanguageSelection.Enabled = false;
|
||||
|
||||
_dataTablePcbIds?.Dispose();
|
||||
@@ -1739,7 +1786,7 @@ namespace Xylem.ServiceFwUpdate.Ui.FwUpdateLoader
|
||||
foreach (var cordSearch in _fwUpdateSafe.Updates.CordonelDeviceInfos)
|
||||
{
|
||||
var row = _dataTablePcbIds.NewRow();
|
||||
row[Resources.StrTableUpdated] = IsPcbIdProcessed(cordSearch.PcbId);
|
||||
row[Resources.StrTableUpdated] = IsPcbIdProcessed(cordSearch.PcbId, _customerAndOrderInfo);
|
||||
row[Resources.StrTableCordonelPcbId] = cordSearch.PcbId ?? "?";
|
||||
|
||||
_dataTablePcbIds.Rows.Add(row);
|
||||
|
||||
@@ -58,10 +58,10 @@
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestCertificateThumbprint>550FE4A801FCFB0A36EB3B198C4A6E6A92020511</ManifestCertificateThumbprint>
|
||||
<ManifestCertificateThumbprint>5ED6B0B9BFFE7DD309362274CB9BF34BAE31CEEE</ManifestCertificateThumbprint>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestKeyFile>FwUpdateLoader_TemporaryKey.pfx</ManifestKeyFile>
|
||||
<ManifestKeyFile>FwUpdateLoader_1_TemporaryKey.pfx</ManifestKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<GenerateManifests>true</GenerateManifests>
|
||||
@@ -146,6 +146,7 @@
|
||||
<DependentUpon>Resources.de.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="FwUpdateLoader_1_TemporaryKey.pfx" />
|
||||
<None Include="FwUpdateLoader_TemporaryKey.pfx" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
|
||||
Reference in New Issue
Block a user