diff --git a/.gitignore b/.gitignore
index 323da9f6..e0f815c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -400,3 +400,4 @@ FodyWeavers.xsd
/Common/CommonConsole
/Common/Common.v3.ncrunchsolution
/TBF_V2/Sources/TBF/TBF/BenchControl/TestMethods/GenesisCommunication.zip
+/Common/Hardware/WaterMeter/Genesis/GenesisCore/configuration2013.json
diff --git a/Common/.shared/NlogConfig.xml b/Common/.shared/NlogConfig.xml
index fbf263fd..1735f807 100644
--- a/Common/.shared/NlogConfig.xml
+++ b/Common/.shared/NlogConfig.xml
@@ -3,84 +3,84 @@
-
-
-
-
-
+
+
-
-
+
+
+
+
-
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Common/.shared/SharedAssemblyInfo.cs b/Common/.shared/SharedAssemblyInfo.cs
index c914511d..3dcbf8a7 100644
--- a/Common/.shared/SharedAssemblyInfo.cs
+++ b/Common/.shared/SharedAssemblyInfo.cs
@@ -13,4 +13,4 @@ using System.Reflection;
//
//[assembly: AssemblyVersion("1.2.*.0")]
-[assembly: AssemblyVersion("2.7.6.*")]
+[assembly: AssemblyVersion("2.8.10.*")]
diff --git a/Common/.vs/Common/config/applicationhost.config b/Common/.vs/Common/config/applicationhost.config
index 4b78051e..8f2db308 100644
--- a/Common/.vs/Common/config/applicationhost.config
+++ b/Common/.vs/Common/config/applicationhost.config
@@ -160,6 +160,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Common/.vs/config/applicationhost.config b/Common/.vs/config/applicationhost.config
index a894c3cf..cd69abb2 100644
--- a/Common/.vs/config/applicationhost.config
+++ b/Common/.vs/config/applicationhost.config
@@ -155,7 +155,7 @@
-
+
@@ -168,6 +168,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Common/Common.sln b/Common/Common.sln
index 05500228..be29ee39 100644
--- a/Common/Common.sln
+++ b/Common/Common.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.33423.255
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36310.24
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utils", "Utils", "{7A0EE7B8-6B7E-41E9-B679-319C8CA48CF1}"
EndProject
@@ -101,8 +101,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IrdaDemo", "Ui\IrdaDemo\Ird
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WaterMeterRegisters", "Hardware\WaterMeter\WaterMeterCore\WaterMeterRegisters\WaterMeterRegisters.csproj", "{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductionUiCordonelLegacy", "ProductionUiCordonel\ProductionUiCordonelLegacy.csproj", "{D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonCore.Configuration", "CommonCore.Configuration\CommonCore.Configuration.csproj", "{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProductionOrderCore", "Logic\ProductionOrderCore\ProductionOrderCore.csproj", "{6D2777BB-7A88-466D-A49B-3266F9BF0160}"
@@ -334,20 +332,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debug", "Debug", "{7C77A79B
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TempPE", "TempPE", "{91CA9896-2288-4967-8991-AC49A77B6058}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LaaPackages", "LaaPackages", "{2E31C385-4FFC-473E-9C00-D7DC48140704}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.SqlClient", "LaaPackages\LaaPackages.SqlClient\LaaPackages.SqlClient.csproj", "{F90B940C-9A83-496D-AAE0-11CD02CE0A22}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.HttpClient", "LaaPackages\LaaPackages.HttpClient\LaaPackages.HttpClient.csproj", "{C9816412-7752-4F7A-8BD2-765DB6D58B3C}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stichproben", "Stichproben\Stichproben.csproj", "{F69A79FA-548D-4E21-887E-01FABDAD9E73}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.Features.Cordonel", "LaaPackages\LaaPackages.Features.Cordonel\LaaPackages.Features.Cordonel.csproj", "{8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.Extensions", "LaaPackages\LaaPackages.Extensions\LaaPackages.Extensions.csproj", "{15A06398-ECB6-49C9-ACB4-52A495A886A6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb.Resources", "LaaPackages\LaaProductionWeb.Resources\LaaProductionWeb.Resources.csproj", "{DA65E376-3D35-4D96-913A-7197FCA6DF48}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserAccessCtrl", "Utils\UserAccessCtrl\UserAccessCtrl.csproj", "{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassAccess", "Utils\ClassAccess\ClassAccess.csproj", "{30BF7357-0B6C-498D-8123-5AACC66B3E5F}"
@@ -364,10 +350,21 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MockGenesis", "Hardware\Wat
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonConsole", "CommonConsole\CommonConsole.csproj", "{AFC428F5-0141-4A3F-BEF2-470A89D972F6}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SIRT", "SIRT", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LaaPackages", "LaaPackages", "{7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb.Resources", "LaaPackages\LaaProductionWeb.Resources\LaaProductionWeb.Resources.csproj", "{9E070488-15DE-418A-8606-5B79056C6E9F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.Features.Cordonel", "LaaPackages\LaaPackages.Features.Cordonel\LaaPackages.Features.Cordonel.csproj", "{8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.Extensions", "LaaPackages\LaaPackages.Extensions\LaaPackages.Extensions.csproj", "{15A06398-ECB6-49C9-ACB4-52A495A886A6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.SqlClient", "LaaPackages\LaaPackages.SqlClient\LaaPackages.SqlClient.csproj", "{F90B940C-9A83-496D-AAE0-11CD02CE0A22}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaPackages.HttpClient", "LaaPackages\LaaPackages.HttpClient\LaaPackages.HttpClient.csproj", "{C9816412-7752-4F7A-8BD2-765DB6D58B3C}"
+EndProject
Global
- GlobalSection(SharedMSBuildProjectFiles) = preSolution
- Utils\DateTimeServerShared\DateTimeServerShared.projitems*{4806d89a-fbfb-41bc-aaa7-2242444bf55a}*SharedItemsImports = 4
- EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
_MANUAL_CONTROL|Any CPU = _MANUAL_CONTROL|Any CPU
_MANUAL_CONTROL|Mixed Platforms = _MANUAL_CONTROL|Mixed Platforms
@@ -397,6 +394,10 @@ Global
ReleaseTest|Mixed Platforms = ReleaseTest|Mixed Platforms
ReleaseTest|x64 = ReleaseTest|x64
ReleaseTest|x86 = ReleaseTest|x86
+ VPN_Debug|Any CPU = VPN_Debug|Any CPU
+ VPN_Debug|Mixed Platforms = VPN_Debug|Mixed Platforms
+ VPN_Debug|x64 = VPN_Debug|x64
+ VPN_Debug|x86 = VPN_Debug|x86
XP32bit|Any CPU = XP32bit|Any CPU
XP32bit|Mixed Platforms = XP32bit|Mixed Platforms
XP32bit|x64 = XP32bit|x64
@@ -459,6 +460,14 @@ Global
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.ReleaseTest|x64.Build.0 = Release|x64
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.ReleaseTest|x86.ActiveCfg = Release|x86
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.ReleaseTest|x86.Build.0 = Release|x86
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{91DEF0C0-AA4F-40AE-8F18-CB717FDE7E7F}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -523,6 +532,14 @@ Global
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.ReleaseTest|x64.Build.0 = Release|x64
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.ReleaseTest|x86.ActiveCfg = Release|x86
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.ReleaseTest|x86.Build.0 = Release|x86
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {0E524D43-7B66-45CD-AA74-41D51AFC3D99}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{0E524D43-7B66-45CD-AA74-41D51AFC3D99}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -587,6 +604,14 @@ Global
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.ReleaseTest|x64.Build.0 = Release|x64
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.ReleaseTest|x86.ActiveCfg = Release|x86
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.ReleaseTest|x86.Build.0 = Release|x86
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{86E69395-AE63-46E5-9CF3-BF8B2A4DC76E}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -651,6 +676,14 @@ Global
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.ReleaseTest|x64.Build.0 = Release|Any CPU
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {7543AFCB-F5AF-44AF-83C9-23164474C1E9}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{7543AFCB-F5AF-44AF-83C9-23164474C1E9}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -715,6 +748,14 @@ Global
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.ReleaseTest|x64.Build.0 = Release|Any CPU
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{42E9198C-ED2C-4BC8-B0A1-55D91D8F1E90}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -779,6 +820,14 @@ Global
{494AB06C-10C4-43F8-BC8A-92088EB35867}.ReleaseTest|x64.Build.0 = Release|Any CPU
{494AB06C-10C4-43F8-BC8A-92088EB35867}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{494AB06C-10C4-43F8-BC8A-92088EB35867}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {494AB06C-10C4-43F8-BC8A-92088EB35867}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{494AB06C-10C4-43F8-BC8A-92088EB35867}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{494AB06C-10C4-43F8-BC8A-92088EB35867}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{494AB06C-10C4-43F8-BC8A-92088EB35867}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -843,6 +892,14 @@ Global
{AE928623-E961-44E2-ACD2-A3902167FDA4}.ReleaseTest|x64.Build.0 = Release|Any CPU
{AE928623-E961-44E2-ACD2-A3902167FDA4}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{AE928623-E961-44E2-ACD2-A3902167FDA4}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {AE928623-E961-44E2-ACD2-A3902167FDA4}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{AE928623-E961-44E2-ACD2-A3902167FDA4}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{AE928623-E961-44E2-ACD2-A3902167FDA4}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{AE928623-E961-44E2-ACD2-A3902167FDA4}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -907,6 +964,14 @@ Global
{4B88B0D3-E791-4774-9521-EABEACDC420E}.ReleaseTest|x64.Build.0 = Release|x64
{4B88B0D3-E791-4774-9521-EABEACDC420E}.ReleaseTest|x86.ActiveCfg = Release|x86
{4B88B0D3-E791-4774-9521-EABEACDC420E}.ReleaseTest|x86.Build.0 = Release|x86
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {4B88B0D3-E791-4774-9521-EABEACDC420E}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{4B88B0D3-E791-4774-9521-EABEACDC420E}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{4B88B0D3-E791-4774-9521-EABEACDC420E}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{4B88B0D3-E791-4774-9521-EABEACDC420E}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -968,6 +1033,14 @@ Global
{95A50087-99EE-4349-9A17-C547290DB42F}.ReleaseTest|x64.Build.0 = Release|Any CPU
{95A50087-99EE-4349-9A17-C547290DB42F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{95A50087-99EE-4349-9A17-C547290DB42F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {95A50087-99EE-4349-9A17-C547290DB42F}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{95A50087-99EE-4349-9A17-C547290DB42F}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{95A50087-99EE-4349-9A17-C547290DB42F}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{95A50087-99EE-4349-9A17-C547290DB42F}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -1032,6 +1105,14 @@ Global
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {F581264D-3C20-4E4F-9E74-2606869AAAB7}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F581264D-3C20-4E4F-9E74-2606869AAAB7}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1096,6 +1177,14 @@ Global
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.ReleaseTest|x64.Build.0 = Release|Any CPU
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{1057AD21-BA22-4CAB-B3FE-88C5C9980E6A}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1160,6 +1249,14 @@ Global
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {F7E3DF42-4D35-4A0C-9182-90438F9956E1}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F7E3DF42-4D35-4A0C-9182-90438F9956E1}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1224,6 +1321,14 @@ Global
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.ReleaseTest|x64.Build.0 = ReleaseTest|x64
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.ReleaseTest|x86.ActiveCfg = ReleaseTest|x86
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.ReleaseTest|x86.Build.0 = ReleaseTest|x86
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {8203ABB8-38E5-472E-A742-33F38B7A74A6}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{8203ABB8-38E5-472E-A742-33F38B7A74A6}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1288,6 +1393,14 @@ Global
{04201E95-90A0-4B73-A72F-379739B2A3AE}.ReleaseTest|x64.Build.0 = Release|x64
{04201E95-90A0-4B73-A72F-379739B2A3AE}.ReleaseTest|x86.ActiveCfg = Release|x86
{04201E95-90A0-4B73-A72F-379739B2A3AE}.ReleaseTest|x86.Build.0 = Release|x86
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {04201E95-90A0-4B73-A72F-379739B2A3AE}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{04201E95-90A0-4B73-A72F-379739B2A3AE}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{04201E95-90A0-4B73-A72F-379739B2A3AE}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{04201E95-90A0-4B73-A72F-379739B2A3AE}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1352,6 +1465,14 @@ Global
{D32ED790-7E1E-435B-8619-9F906C992066}.ReleaseTest|x64.Build.0 = Release|x64
{D32ED790-7E1E-435B-8619-9F906C992066}.ReleaseTest|x86.ActiveCfg = Release|x86
{D32ED790-7E1E-435B-8619-9F906C992066}.ReleaseTest|x86.Build.0 = Release|x86
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {D32ED790-7E1E-435B-8619-9F906C992066}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{D32ED790-7E1E-435B-8619-9F906C992066}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{D32ED790-7E1E-435B-8619-9F906C992066}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{D32ED790-7E1E-435B-8619-9F906C992066}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1416,6 +1537,14 @@ Global
{29617814-313E-409E-AA5D-59C78A9D4DF1}.ReleaseTest|x64.Build.0 = Release|x64
{29617814-313E-409E-AA5D-59C78A9D4DF1}.ReleaseTest|x86.ActiveCfg = Release|x86
{29617814-313E-409E-AA5D-59C78A9D4DF1}.ReleaseTest|x86.Build.0 = Release|x86
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {29617814-313E-409E-AA5D-59C78A9D4DF1}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{29617814-313E-409E-AA5D-59C78A9D4DF1}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1480,6 +1609,14 @@ Global
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {2E139F63-B6FE-4EA9-A098-85364FE9B26C}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1544,6 +1681,14 @@ Global
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.ReleaseTest|x64.Build.0 = Release|x64
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.ReleaseTest|x86.ActiveCfg = Release|x86
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.ReleaseTest|x86.Build.0 = Release|x86
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {72037E89-4F63-4B3F-BEFF-4138E578CE99}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{72037E89-4F63-4B3F-BEFF-4138E578CE99}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1608,6 +1753,14 @@ Global
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.ReleaseTest|x64.Build.0 = Release|Any CPU
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.XP32bit|Any CPU.ActiveCfg = PerformTest|Any CPU
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.XP32bit|Any CPU.Build.0 = PerformTest|Any CPU
{63E0AC5E-B7C8-4363-A2FE-BE489E648FF0}.XP32bit|Mixed Platforms.ActiveCfg = PerformTest|Any CPU
@@ -1672,6 +1825,14 @@ Global
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {F4AAF7E6-7333-4284-B735-E32DEB076C64}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F4AAF7E6-7333-4284-B735-E32DEB076C64}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1734,6 +1895,14 @@ Global
{6CCDB656-C676-4360-BABA-C4596AAD175D}.ReleaseTest|x64.Build.0 = Release|x64
{6CCDB656-C676-4360-BABA-C4596AAD175D}.ReleaseTest|x86.ActiveCfg = Release|x86
{6CCDB656-C676-4360-BABA-C4596AAD175D}.ReleaseTest|x86.Build.0 = Release|x86
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {6CCDB656-C676-4360-BABA-C4596AAD175D}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{6CCDB656-C676-4360-BABA-C4596AAD175D}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{6CCDB656-C676-4360-BABA-C4596AAD175D}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{6CCDB656-C676-4360-BABA-C4596AAD175D}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1798,6 +1967,14 @@ Global
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.ReleaseTest|x64.Build.0 = Release|Any CPU
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1862,6 +2039,14 @@ Global
{60765BF4-6165-4F2F-8756-1C699826265D}.ReleaseTest|x64.Build.0 = Release|Any CPU
{60765BF4-6165-4F2F-8756-1C699826265D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{60765BF4-6165-4F2F-8756-1C699826265D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {60765BF4-6165-4F2F-8756-1C699826265D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{60765BF4-6165-4F2F-8756-1C699826265D}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{60765BF4-6165-4F2F-8756-1C699826265D}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{60765BF4-6165-4F2F-8756-1C699826265D}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -1926,6 +2111,14 @@ Global
{3DD94AD1-D153-46DD-8550-645C57EA8326}.ReleaseTest|x64.Build.0 = Release|x64
{3DD94AD1-D153-46DD-8550-645C57EA8326}.ReleaseTest|x86.ActiveCfg = Release|x86
{3DD94AD1-D153-46DD-8550-645C57EA8326}.ReleaseTest|x86.Build.0 = Release|x86
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {3DD94AD1-D153-46DD-8550-645C57EA8326}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{3DD94AD1-D153-46DD-8550-645C57EA8326}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{3DD94AD1-D153-46DD-8550-645C57EA8326}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{3DD94AD1-D153-46DD-8550-645C57EA8326}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -1990,6 +2183,14 @@ Global
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2054,6 +2255,14 @@ Global
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2118,6 +2327,14 @@ Global
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.ReleaseTest|x64.Build.0 = Release|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2126,70 +2343,6 @@ Global
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|x64.Build.0 = Release|x64
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|x86.ActiveCfg = Release|Any CPU
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E}.XP32bit|x86.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|Any CPU.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|Any CPU.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|x64.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|x64.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|x86.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.COM|x86.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|x64.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|x64.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|x86.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Debug|x86.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|x64.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|x64.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|x86.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.PerformTest|x86.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|Any CPU.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|x64.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|x64.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|x86.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.Release|x86.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|Mixed Platforms.Build.0 = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|x64.ActiveCfg = Debug|x64
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|x64.Build.0 = Debug|x64
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|x86.ActiveCfg = Debug|Any CPU
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4}.XP32bit|x86.Build.0 = Debug|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}._MANUAL_CONTROL|Any CPU.ActiveCfg = _MANUAL_CONTROL|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}._MANUAL_CONTROL|Any CPU.Build.0 = _MANUAL_CONTROL|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = _MANUAL_CONTROL|Any CPU
@@ -2246,6 +2399,14 @@ Global
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.ReleaseTest|x64.Build.0 = Release|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2310,6 +2471,14 @@ Global
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.ReleaseTest|x64.Build.0 = Release|Any CPU
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {6D2777BB-7A88-466D-A49B-3266F9BF0160}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{6D2777BB-7A88-466D-A49B-3266F9BF0160}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2374,6 +2543,14 @@ Global
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.ReleaseTest|x64.Build.0 = Release|Any CPU
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2438,6 +2615,14 @@ Global
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.ReleaseTest|x64.Build.0 = Release|Any CPU
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {2C6378C6-6BA1-4CEE-8992-8404D8369A90}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{2C6378C6-6BA1-4CEE-8992-8404D8369A90}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2502,6 +2687,14 @@ Global
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.ReleaseTest|x64.Build.0 = Release|Any CPU
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{A33E3C6D-EAAE-4A20-A0EE-F9E6922FD029}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2566,6 +2759,14 @@ Global
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.ReleaseTest|x64.Build.0 = Release|Any CPU
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {D0C8D887-ED52-40AB-A069-90BCE0E801E2}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
{D0C8D887-ED52-40AB-A069-90BCE0E801E2}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -2630,6 +2831,14 @@ Global
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.ReleaseTest|x64.Build.0 = Release|Any CPU
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
{D0C859D9-D55E-4E85-AC50-0FF31B1CE50D}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -2694,6 +2903,14 @@ Global
{20F137FD-C25E-42B7-A68F-58C746475897}.ReleaseTest|x64.Build.0 = Release|Any CPU
{20F137FD-C25E-42B7-A68F-58C746475897}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{20F137FD-C25E-42B7-A68F-58C746475897}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {20F137FD-C25E-42B7-A68F-58C746475897}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{20F137FD-C25E-42B7-A68F-58C746475897}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{20F137FD-C25E-42B7-A68F-58C746475897}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{20F137FD-C25E-42B7-A68F-58C746475897}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2758,6 +2975,14 @@ Global
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.ReleaseTest|x64.Build.0 = Release|Any CPU
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {8A619CD5-6C8D-420C-A132-7946C6F13E6E}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
{8A619CD5-6C8D-420C-A132-7946C6F13E6E}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -2822,6 +3047,14 @@ Global
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.ReleaseTest|x64.Build.0 = Release|Any CPU
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{94CA71F3-C5D7-4EC6-BA47-FA8EEA3C9406}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2886,6 +3119,14 @@ Global
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.ReleaseTest|x64.Build.0 = Release|Any CPU
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{2FD60CF1-45CD-4060-B8E5-4F39FBA7F1CB}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -2950,6 +3191,14 @@ Global
{A25A96FD-604B-43BE-80CD-A953152C2175}.ReleaseTest|x64.Build.0 = Release|Any CPU
{A25A96FD-604B-43BE-80CD-A953152C2175}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{A25A96FD-604B-43BE-80CD-A953152C2175}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {A25A96FD-604B-43BE-80CD-A953152C2175}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{A25A96FD-604B-43BE-80CD-A953152C2175}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{A25A96FD-604B-43BE-80CD-A953152C2175}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{A25A96FD-604B-43BE-80CD-A953152C2175}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3014,6 +3263,14 @@ Global
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.ReleaseTest|x64.Build.0 = Release|Any CPU
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {AC434B18-4D7B-49BA-9AD5-0527C79E8297}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{AC434B18-4D7B-49BA-9AD5-0527C79E8297}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3078,6 +3335,14 @@ Global
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.ReleaseTest|x64.Build.0 = Release|Any CPU
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{0FFBCA6C-E828-4196-B0A8-988DEA3E077F}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3142,6 +3407,14 @@ Global
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.ReleaseTest|x64.Build.0 = Release|Any CPU
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{70BF5094-0F03-41FC-B0BD-BEFCF51686C9}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3206,6 +3479,14 @@ Global
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.ReleaseTest|x64.Build.0 = Release|Any CPU
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{108FE49B-75E1-43F5-82DD-DA33FE99CBEC}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3270,6 +3551,14 @@ Global
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.ReleaseTest|x64.Build.0 = Release|Any CPU
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{62E5BA37-36AB-4F0A-BC12-554E7A1F1A39}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3334,6 +3623,14 @@ Global
{652ECA13-A411-4789-8814-6823965947CB}.ReleaseTest|x64.Build.0 = Release|Any CPU
{652ECA13-A411-4789-8814-6823965947CB}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{652ECA13-A411-4789-8814-6823965947CB}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {652ECA13-A411-4789-8814-6823965947CB}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{652ECA13-A411-4789-8814-6823965947CB}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{652ECA13-A411-4789-8814-6823965947CB}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{652ECA13-A411-4789-8814-6823965947CB}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3398,6 +3695,14 @@ Global
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.ReleaseTest|x64.Build.0 = Release|Any CPU
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{0F646872-D8DC-4EE5-989F-D4C73F0ACE3F}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3462,6 +3767,14 @@ Global
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.ReleaseTest|x64.Build.0 = Release|Any CPU
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {35726BCF-975C-4B49-BEFA-C00D90394F1D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{35726BCF-975C-4B49-BEFA-C00D90394F1D}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3526,6 +3839,14 @@ Global
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.ReleaseTest|x64.Build.0 = Release|Any CPU
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{A5E7CE52-3101-4E9B-B896-C2C0FADE4812}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3590,6 +3911,14 @@ Global
{70398B99-B134-4BBD-968B-7399B70C3CE2}.ReleaseTest|x64.Build.0 = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {70398B99-B134-4BBD-968B-7399B70C3CE2}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{70398B99-B134-4BBD-968B-7399B70C3CE2}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3654,6 +3983,14 @@ Global
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x64.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {B5DA260C-71CC-45CA-B79E-D1B376AF718C}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{B5DA260C-71CC-45CA-B79E-D1B376AF718C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3718,6 +4055,14 @@ Global
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x64.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {00748F11-4B49-4D8B-93C4-4A11A210CCE2}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{00748F11-4B49-4D8B-93C4-4A11A210CCE2}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3782,6 +4127,14 @@ Global
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x64.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {D6B81C60-2763-4C4D-989F-90822F53B01A}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{D6B81C60-2763-4C4D-989F-90822F53B01A}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -3846,6 +4199,14 @@ Global
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x64.Build.0 = Release|x64
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x86.ActiveCfg = Release|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.ReleaseTest|x86.Build.0 = Release|x86
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {BA17D20E-0CEB-4B27-9772-2392BD750ED5}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{BA17D20E-0CEB-4B27-9772-2392BD750ED5}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -3910,6 +4271,14 @@ Global
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x64.Build.0 = Release|x64
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.ActiveCfg = Release|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.ReleaseTest|x86.Build.0 = Release|x86
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|x86.ActiveCfg = VPN_Debug|x86
+ {8BDD2789-96D4-43EA-AAD7-0F49D0347998}.VPN_Debug|x86.Build.0 = VPN_Debug|x86
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.ActiveCfg = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Any CPU.Build.0 = XP32bit|Any CPU
{8BDD2789-96D4-43EA-AAD7-0F49D0347998}.XP32bit|Mixed Platforms.ActiveCfg = XP32bit|x86
@@ -3974,6 +4343,14 @@ Global
{FD30EB7A-7809-4E62-9374-791D31877D6D}.ReleaseTest|x64.Build.0 = Release|Any CPU
{FD30EB7A-7809-4E62-9374-791D31877D6D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{FD30EB7A-7809-4E62-9374-791D31877D6D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {FD30EB7A-7809-4E62-9374-791D31877D6D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{FD30EB7A-7809-4E62-9374-791D31877D6D}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{FD30EB7A-7809-4E62-9374-791D31877D6D}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{FD30EB7A-7809-4E62-9374-791D31877D6D}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4038,6 +4415,10 @@ Global
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F8D84B9A-0FCF-4083-B067-8C39B7314152}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {F8D84B9A-0FCF-4083-B067-8C39B7314152}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F8D84B9A-0FCF-4083-B067-8C39B7314152}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {F8D84B9A-0FCF-4083-B067-8C39B7314152}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F8D84B9A-0FCF-4083-B067-8C39B7314152}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4102,6 +4483,10 @@ Global
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.ReleaseTest|x64.Build.0 = Release|Any CPU
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {01A28A70-D5E6-4898-8C22-E64400A3B80F}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {01A28A70-D5E6-4898-8C22-E64400A3B80F}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {01A28A70-D5E6-4898-8C22-E64400A3B80F}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {01A28A70-D5E6-4898-8C22-E64400A3B80F}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{01A28A70-D5E6-4898-8C22-E64400A3B80F}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4166,6 +4551,14 @@ Global
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.ReleaseTest|x64.Build.0 = Release|x64
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {4806D89A-FBFB-41BC-AAA7-2242444BF55A}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{4806D89A-FBFB-41BC-AAA7-2242444BF55A}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4230,6 +4623,14 @@ Global
{E9FAAF12-8721-46AC-8181-744001E3314E}.ReleaseTest|x64.Build.0 = Release|x64
{E9FAAF12-8721-46AC-8181-744001E3314E}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{E9FAAF12-8721-46AC-8181-744001E3314E}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {E9FAAF12-8721-46AC-8181-744001E3314E}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{E9FAAF12-8721-46AC-8181-744001E3314E}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{E9FAAF12-8721-46AC-8181-744001E3314E}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{E9FAAF12-8721-46AC-8181-744001E3314E}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4294,6 +4695,14 @@ Global
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.ReleaseTest|x64.Build.0 = Release|x64
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {CBF74D42-327E-4476-A096-63E7EBD9B7A3}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{CBF74D42-327E-4476-A096-63E7EBD9B7A3}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4358,6 +4767,14 @@ Global
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.ReleaseTest|x64.Build.0 = Release|Any CPU
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {A83696BF-D8A2-4809-8424-CFE172AED5B6}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{A83696BF-D8A2-4809-8424-CFE172AED5B6}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4422,6 +4839,14 @@ Global
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.ReleaseTest|x64.Build.0 = Release|Any CPU
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{C2808A8E-C0BA-44EC-B7B1-1C66AD3D8478}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4486,6 +4911,14 @@ Global
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.ReleaseTest|x64.Build.0 = Release|Any CPU
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {B6A19B80-0F0F-434C-A754-A7712FC208B2}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{B6A19B80-0F0F-434C-A754-A7712FC208B2}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4550,6 +4983,14 @@ Global
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.ReleaseTest|x64.Build.0 = Release|Any CPU
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{FD9EAB89-D2E5-4006-8E4F-7EF7A010749D}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4614,6 +5055,10 @@ Global
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.ReleaseTest|x64.Build.0 = Release|Any CPU
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.VPN_Debug|Any CPU.ActiveCfg = Development|Any CPU
+ {8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.VPN_Debug|Mixed Platforms.ActiveCfg = Development|Any CPU
+ {8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.VPN_Debug|x64.ActiveCfg = Development|Any CPU
+ {8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.VPN_Debug|x86.ActiveCfg = Development|Any CPU
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{8E1431E9-9B14-4BC2-8B65-47357C97B1FC}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4678,6 +5123,10 @@ Global
{C6BFAC88-5647-4131-90B1-4D6265E08348}.ReleaseTest|x64.Build.0 = Release|Any CPU
{C6BFAC88-5647-4131-90B1-4D6265E08348}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{C6BFAC88-5647-4131-90B1-4D6265E08348}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {C6BFAC88-5647-4131-90B1-4D6265E08348}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {C6BFAC88-5647-4131-90B1-4D6265E08348}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C6BFAC88-5647-4131-90B1-4D6265E08348}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {C6BFAC88-5647-4131-90B1-4D6265E08348}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
{C6BFAC88-5647-4131-90B1-4D6265E08348}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{C6BFAC88-5647-4131-90B1-4D6265E08348}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{C6BFAC88-5647-4131-90B1-4D6265E08348}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4742,6 +5191,10 @@ Global
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.ReleaseTest|x64.Build.0 = Release|Any CPU
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{41E949AD-FBF6-47A3-AC1D-7E17AB7F1252}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4806,6 +5259,14 @@ Global
{28FD69D1-B2DA-485D-9571-711BF3917350}.ReleaseTest|x64.Build.0 = Release|Any CPU
{28FD69D1-B2DA-485D-9571-711BF3917350}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{28FD69D1-B2DA-485D-9571-711BF3917350}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {28FD69D1-B2DA-485D-9571-711BF3917350}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{28FD69D1-B2DA-485D-9571-711BF3917350}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{28FD69D1-B2DA-485D-9571-711BF3917350}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{28FD69D1-B2DA-485D-9571-711BF3917350}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4870,6 +5331,14 @@ Global
{4E8BB839-D40A-488C-88CE-F21811F1F476}.ReleaseTest|x64.Build.0 = Release|Any CPU
{4E8BB839-D40A-488C-88CE-F21811F1F476}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{4E8BB839-D40A-488C-88CE-F21811F1F476}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {4E8BB839-D40A-488C-88CE-F21811F1F476}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{4E8BB839-D40A-488C-88CE-F21811F1F476}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{4E8BB839-D40A-488C-88CE-F21811F1F476}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{4E8BB839-D40A-488C-88CE-F21811F1F476}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4934,6 +5403,14 @@ Global
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.ReleaseTest|x64.Build.0 = Release|Any CPU
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{8DE8E742-EE0A-4004-AA49-3D08D748E5AC}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -4998,6 +5475,14 @@ Global
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.ReleaseTest|x64.Build.0 = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5006,134 +5491,6 @@ Global
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|x64.Build.0 = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|x86.ActiveCfg = Release|Any CPU
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA}.XP32bit|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x64.ActiveCfg = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x64.Build.0 = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x86.ActiveCfg = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x86.Build.0 = Debug|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Any CPU.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x64.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x64.Build.0 = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x86.ActiveCfg = Release|Any CPU
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x64.Build.0 = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x86.Build.0 = Debug|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x64.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x64.Build.0 = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x86.ActiveCfg = Release|Any CPU
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x86.Build.0 = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5190,6 +5547,14 @@ Global
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.ReleaseTest|x64.Build.0 = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {F69A79FA-548D-4E21-887E-01FABDAD9E73}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5198,198 +5563,6 @@ Global
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|x64.Build.0 = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|x86.ActiveCfg = Release|Any CPU
{F69A79FA-548D-4E21-887E-01FABDAD9E73}.XP32bit|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x64.ActiveCfg = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x64.Build.0 = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x86.ActiveCfg = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x86.Build.0 = Debug|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Any CPU.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x64.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x64.Build.0 = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x86.ActiveCfg = Release|Any CPU
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x64.ActiveCfg = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x64.Build.0 = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x86.ActiveCfg = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x86.Build.0 = Debug|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Any CPU.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x64.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x64.Build.0 = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x86.ActiveCfg = Release|Any CPU
- {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.COM|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|x64.ActiveCfg = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|x64.Build.0 = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|x86.ActiveCfg = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Debug|x86.Build.0 = Debug|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.GenesisDisplayTool_V01|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.PerformTest|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.Release|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.ReleaseTest|x86.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|Any CPU.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|x64.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|x64.Build.0 = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|x86.ActiveCfg = Release|Any CPU
- {DA65E376-3D35-4D96-913A-7197FCA6DF48}.XP32bit|x86.Build.0 = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5446,6 +5619,14 @@ Global
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.ReleaseTest|x64.Build.0 = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5510,6 +5691,14 @@ Global
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.ReleaseTest|x64.Build.0 = Release|Any CPU
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {30BF7357-0B6C-498D-8123-5AACC66B3E5F}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{30BF7357-0B6C-498D-8123-5AACC66B3E5F}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5574,6 +5763,14 @@ Global
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.ReleaseTest|x64.Build.0 = Release|x64
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|x64
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|x64
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|x64.ActiveCfg = VPN_Debug|x64
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|x64.Build.0 = VPN_Debug|x64
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {4928FC37-15EC-4872-8514-EA4ADCC4139D}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{4928FC37-15EC-4872-8514-EA4ADCC4139D}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5638,6 +5835,14 @@ Global
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.ReleaseTest|x64.Build.0 = Release|Any CPU
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {48DA0272-9B14-4CC8-976F-A91E42DE4680}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.XP32bit|Any CPU.ActiveCfg = Debug|Any CPU
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.XP32bit|Any CPU.Build.0 = Debug|Any CPU
{48DA0272-9B14-4CC8-976F-A91E42DE4680}.XP32bit|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -5702,6 +5907,14 @@ Global
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.ReleaseTest|x64.Build.0 = Release|Any CPU
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|Any CPU.ActiveCfg = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|Any CPU.Build.0 = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|Mixed Platforms.ActiveCfg = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|Mixed Platforms.Build.0 = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|x64.ActiveCfg = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|x64.Build.0 = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|x86.ActiveCfg = VPN_Debug|Any CPU
+ {D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.VPN_Debug|x86.Build.0 = VPN_Debug|Any CPU
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5766,6 +5979,10 @@ Global
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.ReleaseTest|x64.Build.0 = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {AFC428F5-0141-4A3F-BEF2-470A89D972F6}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {AFC428F5-0141-4A3F-BEF2-470A89D972F6}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AFC428F5-0141-4A3F-BEF2-470A89D972F6}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {AFC428F5-0141-4A3F-BEF2-470A89D972F6}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|Any CPU.Build.0 = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
@@ -5774,6 +5991,366 @@ Global
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|x64.Build.0 = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|x86.ActiveCfg = Release|Any CPU
{AFC428F5-0141-4A3F-BEF2-470A89D972F6}.XP32bit|x86.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|Any CPU.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|x64.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|x64.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|x86.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.COM|x86.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|x64.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Debug|x86.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|x64.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|x64.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|x86.ActiveCfg = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.PerformTest|x86.Build.0 = Debug|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|x64.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|x64.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|x86.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.Release|x86.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|x64.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|Any CPU.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|Mixed Platforms.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|x64.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.VPN_Debug|x86.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|Any CPU.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|x64.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|x64.Build.0 = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|x86.ActiveCfg = Release|Any CPU
+ {9E070488-15DE-418A-8606-5B79056C6E9F}.XP32bit|x86.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Any CPU.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x64.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x64.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x86.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.COM|x86.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x64.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Debug|x86.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x64.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x64.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x86.ActiveCfg = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.PerformTest|x86.Build.0 = Debug|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x64.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x64.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x86.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.Release|x86.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x64.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|Any CPU.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|x64.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.VPN_Debug|x86.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Any CPU.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x64.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x64.Build.0 = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x86.ActiveCfg = Release|Any CPU
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB}.XP32bit|x86.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Any CPU.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Any CPU.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x64.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x64.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x86.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.COM|x86.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x64.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Debug|x86.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x64.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x64.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x86.ActiveCfg = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.PerformTest|x86.Build.0 = Debug|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x64.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x64.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x86.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.Release|x86.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x64.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|Any CPU.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|Mixed Platforms.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|x64.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.VPN_Debug|x86.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Any CPU.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x64.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x64.Build.0 = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x86.ActiveCfg = Release|Any CPU
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6}.XP32bit|x86.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Any CPU.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Any CPU.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x64.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x64.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x86.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.COM|x86.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x64.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Debug|x86.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x64.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x64.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x86.ActiveCfg = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.PerformTest|x86.Build.0 = Debug|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x64.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x64.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x86.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.Release|x86.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x64.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|Any CPU.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|Mixed Platforms.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|x64.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.VPN_Debug|x86.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Any CPU.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x64.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x64.Build.0 = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x86.ActiveCfg = Release|Any CPU
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22}.XP32bit|x86.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Any CPU.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Any CPU.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|Mixed Platforms.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x64.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x64.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x86.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}._MANUAL_CONTROL|x86.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Any CPU.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x64.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x64.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x86.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.COM|x86.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x64.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Debug|x86.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Any CPU.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x64.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x64.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x86.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.GenesisDisplayTool_V01|x86.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Any CPU.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Any CPU.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|Mixed Platforms.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x64.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x64.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x86.ActiveCfg = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.PerformTest|x86.Build.0 = Debug|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x64.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x64.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x86.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.Release|x86.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Any CPU.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Any CPU.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|Mixed Platforms.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x64.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x64.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x86.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.ReleaseTest|x86.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|Any CPU.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|Mixed Platforms.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|x64.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|x64.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|x86.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.VPN_Debug|x86.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Any CPU.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Any CPU.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|Mixed Platforms.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x64.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x64.Build.0 = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x86.ActiveCfg = Release|Any CPU
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C}.XP32bit|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -5817,7 +6394,6 @@ Global
{F013A56B-7BE6-4852-9CD8-B971CD1ADD0C} = {B5F43F61-4448-4992-85B5-7EDFB82FD643}
{407E05EE-F1DE-4020-83AD-8C18EDE6B32C} = {03D4F23E-7E4A-4091-BC96-036C996D351A}
{26AFCF1E-1287-48B8-A506-32B1E8A0DD0E} = {5563DD3B-2287-4BED-97BF-F0389FF505AF}
- {D72BFC81-AA50-45F2-9FB2-DF4F373F6AD4} = {03D4F23E-7E4A-4091-BC96-036C996D351A}
{9EB1F659-6F73-4F65-BCAB-4114FD94F5FC} = {C17363DF-A043-4F25-8EBA-2B3B078227DC}
{6D2777BB-7A88-466D-A49B-3266F9BF0160} = {57AA2731-BFD9-40A5-820F-E943FBC75D91}
{315E94B8-B82F-4B25-B5BD-297DF3BC1D54} = {B5F43F61-4448-4992-85B5-7EDFB82FD643}
@@ -5865,7 +6441,7 @@ Global
{4E8BB839-D40A-488C-88CE-F21811F1F476} = {43B54F41-6F09-4BCB-9F82-77621275831B}
{56768A27-D0E4-430E-8E75-AFC7319F189A} = {C9393A97-C0BB-4D59-A879-B572BE04CE15}
{E6081C0A-8452-44B4-8EB4-E0CAE9119830} = {56768A27-D0E4-430E-8E75-AFC7319F189A}
- {8DE8E742-EE0A-4004-AA49-3D08D748E5AC} = {99B23EE9-CE50-4924-A055-C39EFA038721}
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{FDE234FD-FF24-479F-B5CA-DFB74B4636DA} = {03D4F23E-7E4A-4091-BC96-036C996D351A}
{3332395B-122F-4DE5-A294-9DDAEA09F10C} = {68323534-4337-4E3A-89BC-11D8BB55343A}
{890AA5E6-C55A-4E35-9841-999FA24B5025} = {3332395B-122F-4DE5-A294-9DDAEA09F10C}
@@ -5909,12 +6485,7 @@ Global
{B2EAC69C-22C9-41D5-987B-5E1F435C0CBC} = {A778164E-C265-4B13-82A1-FF227AC3D668}
{7C77A79B-646C-4CF8-AD1C-930E0B059829} = {B2EAC69C-22C9-41D5-987B-5E1F435C0CBC}
{91CA9896-2288-4967-8991-AC49A77B6058} = {7C77A79B-646C-4CF8-AD1C-930E0B059829}
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22} = {2E31C385-4FFC-473E-9C00-D7DC48140704}
- {C9816412-7752-4F7A-8BD2-765DB6D58B3C} = {2E31C385-4FFC-473E-9C00-D7DC48140704}
{F69A79FA-548D-4E21-887E-01FABDAD9E73} = {696A94BE-7237-4AE2-9E36-6059DE519971}
- {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB} = {2E31C385-4FFC-473E-9C00-D7DC48140704}
- {15A06398-ECB6-49C9-ACB4-52A495A886A6} = {2E31C385-4FFC-473E-9C00-D7DC48140704}
- {DA65E376-3D35-4D96-913A-7197FCA6DF48} = {2E31C385-4FFC-473E-9C00-D7DC48140704}
{2D55BBD1-5373-484C-8781-C6ECEAFC2A90} = {7A0EE7B8-6B7E-41E9-B679-319C8CA48CF1}
{30BF7357-0B6C-498D-8123-5AACC66B3E5F} = {7A0EE7B8-6B7E-41E9-B679-319C8CA48CF1}
{4928FC37-15EC-4872-8514-EA4ADCC4139D} = {AE29BDE3-843C-4B9B-8B02-D3C4814028AC}
@@ -5922,10 +6493,19 @@ Global
{A6B3AB5A-A567-4C77-80FB-1E1E19A00713} = {B5F43F61-4448-4992-85B5-7EDFB82FD643}
{D7A7E1FF-D024-407F-B30D-4C519CFA7BF1} = {A6B3AB5A-A567-4C77-80FB-1E1E19A00713}
{AFC428F5-0141-4A3F-BEF2-470A89D972F6} = {C17363DF-A043-4F25-8EBA-2B3B078227DC}
+ {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {99B23EE9-CE50-4924-A055-C39EFA038721}
+ {9E070488-15DE-418A-8606-5B79056C6E9F} = {7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}
+ {8BEFD3AC-BB21-4B62-8D9A-CF8CBFD439EB} = {7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}
+ {15A06398-ECB6-49C9-ACB4-52A495A886A6} = {7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}
+ {F90B940C-9A83-496D-AAE0-11CD02CE0A22} = {7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}
+ {C9816412-7752-4F7A-8BD2-765DB6D58B3C} = {7B7EC9A1-2091-4CCD-9F01-C579ABD9241D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BCB7B69-696C-436A-86F7-C91EA5588164}
EndGlobalSection
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ Utils\DateTimeServerShared\DateTimeServerShared.projitems*{4806d89a-fbfb-41bc-aaa7-2242444bf55a}*SharedItemsImports = 4
+ EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
diff --git a/Common/Common.sln.DotSettings b/Common/Common.sln.DotSettings
index d76a8661..9421a131 100644
--- a/Common/Common.sln.DotSettings
+++ b/Common/Common.sln.DotSettings
@@ -24,6 +24,7 @@
True
True
True
+ True
True
True
@@ -62,9 +63,11 @@
True
True
True
+ True
True
True
True
+ True
True
True
True
@@ -75,6 +78,7 @@
True
True
True
+ True
True
True
True
diff --git a/Common/CommonConsole/CommonConsole.csproj b/Common/CommonConsole/CommonConsole.csproj
index 7fbef325..d539bb10 100644
--- a/Common/CommonConsole/CommonConsole.csproj
+++ b/Common/CommonConsole/CommonConsole.csproj
@@ -37,22 +37,30 @@
false
-
- ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
-
-
-
- ..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -63,35 +71,6 @@
{4e8bb839-d40a-488c-88ce-f21811f1f476}
Common.Hardware.WaterMeter.eRegister
-
- {f4aaf7e6-7333-4284-b735-e32deb076c64}
- Registers
-
-
- {F90B940C-9A83-496D-AAE0-11CD02CE0A22}
- LaaPackages.SqlClient
-
-
- {F69A79FA-548D-4E21-887E-01FABDAD9E73}
- Stichproben
-
-
-
-
- 8.3.0
-
-
- 16.1.26121.12000
-
-
- 4.3.2
-
-
- 5.0.0
-
-
- 3.9.74
-
\ No newline at end of file
diff --git a/Common/CommonConsole/PAM03.cs b/Common/CommonConsole/PAM03.cs
new file mode 100644
index 00000000..2ae0d76e
--- /dev/null
+++ b/Common/CommonConsole/PAM03.cs
@@ -0,0 +1,201 @@
+namespace CommonConsole
+{
+ using Common.Hardware.SIRT;
+ using Common.Hardware.SIRT.Parameters;
+ using Common.Hardware.SIRT.Tasks;
+ using Common.Hardware.WaterMeter.eRegister;
+ using Common.Hardware.WaterMeter.eRegister.Features;
+
+ using System;
+ using System.IO.Ports;
+ using System.Linq;
+ using System.Text.RegularExpressions;
+ using System.Threading;
+
+ public class PAM03
+ {
+ private string portName;
+ private uint address;
+ private byte[] key;
+
+ public int Run(params string[] args)
+ {
+ ///
+ /// Process.ExitCode:
+ /// 0 - OK
+ /// 1 - Execution Error
+ /// 2 - Connection Error
+ /// 3 - Invalid Arguments
+ ///
+ var exitCode = this.ParseArguments(args);
+
+ if (exitCode == 0)
+ {
+ var processAwaiter = new ManualResetEventSlim();
+ var sirtBroadcaster = new SIRTBroadcaster(this.portName);
+ var pinI = new ProvidePin { AuthLevel = AuthLevel.I };
+
+ void SIRTBroadcaster_Connected(SIRTBroadcaster sirt)
+ {
+ var task = new CordonelTask(sirt.Frequency)
+ {
+ DelPamSemi = true,
+ WakeUpCmd = true,
+ WakeUpModul = true,
+ RequestAddress = address,
+ EncryptionKey = key,
+ IsEncrypted = true
+ };
+
+ task.SetPending();
+ sirt.Start(task);
+ task.Wait();
+
+ void ResetAlarms(byte alarmMask)
+ {
+ if (exitCode != 0)
+ {
+ return;
+ }
+
+ task.WakeUpCmd = false;
+ task.WakeUpModul = false;
+ task.Data = new ResetAlarms(alarmMask).Append(pinI);
+ task.SetPending();
+ sirt.Start(task);
+ task.Wait();
+
+ if (task.State != SIRTTaskState.Completed)
+ {
+ Console.WriteLine($"{nameof(SIRTTaskState)}.{task.State}");
+
+ exitCode = 1;
+ }
+
+ exitCode = 0;
+ }
+
+ task.SetPending();
+ sirt.Start(task);
+ task.Wait();
+
+ if (task.State != SIRTTaskState.Completed)
+ {
+ exitCode = 1;
+ }
+
+ ResetAlarms(new AlarmsMask(0xFF)
+ {
+ MediumAbsent = false
+ });
+ ResetAlarms(0xFE);
+ processAwaiter.Set();
+ }
+
+ void SIRTBroadcaster_Disconnected(SIRTBroadcaster _)
+ => processAwaiter.Set();
+
+ sirtBroadcaster.Connected += SIRTBroadcaster_Connected;
+ sirtBroadcaster.Disconnected += SIRTBroadcaster_Disconnected;
+
+ sirtBroadcaster.Open();
+ processAwaiter.Wait();
+ sirtBroadcaster.Close();
+
+ sirtBroadcaster.Disconnected -= SIRTBroadcaster_Disconnected;
+ sirtBroadcaster.Connected -= SIRTBroadcaster_Connected;
+ }
+
+ return exitCode;
+ }
+
+ public int ParseArguments(string[] args)
+ {
+ if (args.Length != 3)
+ {
+ Console.WriteLine($"Falsche anzahl an parameter: '{string.Join("', '", args)}'");
+ Console.WriteLine($"Expected: [COM..n as string] [Address as uint] [EncryptionKey as string]");
+
+ return 3;
+ }
+
+ this.portName = args[0];
+
+ if (Regex.IsMatch($"{this.portName}", "[Cc][Oo][Mm][0-9]+"))
+ {
+ this.portName = this.portName.ToUpper();
+ }
+ else if (SerialPort.GetPortNames().Any(x => x.Equals(this.portName, StringComparison.CurrentCultureIgnoreCase)))
+ {
+ Console.WriteLine($"COM Port: '{this.portName}' - nicht vorhanden");
+
+ return 3;
+ }
+ else
+ {
+ Console.WriteLine($"Falsche COM PortName: '{this.portName}' - erwartet: [Cc][Oo][Mm][0-9]+");
+
+ return 3;
+ }
+
+ if (!uint.TryParse($"{args[1]}", out this.address))
+ {
+ Console.WriteLine($"Ungültige Funkadresse: '{args[1]}'");
+
+ return 3;
+ }
+
+ this.key = $"{args[2]}".GetBytes();
+
+ if (this.key.Length != 16)
+ {
+ Console.WriteLine($"Ungültige Funkschlüssel: '{BitConverter.ToString(this.key)}'");
+
+ return 3;
+ }
+
+ return 0;
+ }
+
+ public class CordonelTask : EregisterTask
+ {
+ public CordonelTask(int frequency) : base(frequency)
+ {
+ }
+
+ public override Byte[] Start()
+ {
+ Console.WriteLine($"TX|{BitConverter.ToString(this.request)}");
+
+ return base.Start();
+ }
+
+ public override void Push(SIRTMessage response)
+ {
+ base.Push(response);
+
+ Console.WriteLine($"RX|{BitConverter.ToString(response)}");
+
+ try
+ {
+ if (this.SEMIMessage != null)
+ {
+ Console.WriteLine($"=========================================");
+ Console.WriteLine($"AlarmsMask");
+ Console.WriteLine($"-----------------------------------------");
+ Console.WriteLine($"{new AlarmsMask(response.Payload[10])}");
+ Console.WriteLine($"=========================================");
+ Console.WriteLine($"RSSI.PAM {response.P2}");
+ Console.WriteLine($"RSSI.SEMI {response.Payload[12]}");
+ Console.WriteLine($"PAMStatus {new PAMStatus(response.Payload[11])}");
+ Console.WriteLine($"=========================================");
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e.Message);
+ }
+ }
+ }
+ }
+}
diff --git a/Common/CommonConsole/Program.cs b/Common/CommonConsole/Program.cs
index e0c7e973..99c04106 100644
--- a/Common/CommonConsole/Program.cs
+++ b/Common/CommonConsole/Program.cs
@@ -1,250 +1,299 @@
namespace CommonConsole
{
using System;
+ using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams;
public static class Program
{
- public static void Main()
+ static void Main()
{
- var bytes = new byte[] { 0x01, 0x82, 0x14, 0x94, 0x12, 0x10, 0x61, 0x20, 0x01, 0x34, 0xA6, 0x71, 0xB8, 0xFF, 0xE1, 0x09 };
- var bits = string.Empty;
+ // Console.WriteLine(BitConverter.ToInt32(new byte[] { 0xEC, 0xFF, 0xFF, 0xFF }, 0));
- foreach (var _byte in bytes)
- {
- for (int i = 7; i >= 0; i--)
- {
- bits += $"{(_byte >> i) & 1}";
- }
- }
-
- var last = 1;
-
- for (int i = 0; i < bits.Length; i++)
- {
- last *= 2;
- }
-
- var x = "1";
- var r = 0;
-
- for (var i = 0; i < 128; i++)
- {
- var t = string.Empty;
-
- for (var a = x.Length - 1; a >= 0; a--)
- {
- var xs = (byte)(x[a] - '0') * 2;
-
- t = $"{xs % 10 + r}{t}";
- r = xs / 10;
- }
-
- x = t;
-
- if (r > 0)
- {
- x = $"{r}{x}";
- }
- }
-
-
- Console.WriteLine();
+ SIRTServer.StartServer(Console.WriteLine, Console.WriteLine, 6, 8);
+ // SIRTServer.StartProgramming(433, 412013443, "0E9FACC6A0E1EF1C3B27A49BAC216535");
+ // SIRTServer.StartProgramming(433, 412013444, "0E9FACC6A0E1EF1C3B27A49BAC216535");
+ // SIRTServer.StartProgramming(433, 412013356, "80D46C00E1BED73FE0DA85D95CA4BEE3");
+ // SIRTServer.StartProgramming(433, 412013081, "7B5F2F606155C670BD9891231A598EF3");
+ // SIRTServer.StartProgramming(433, 412013082, "A10BB3C32B71894BD8BB17884973E616");
+ // SIRTServer.StartProgramming(433, 412013083, "15EEC94741740FB1EA736CF6468A4790");
+ // SIRTServer.StartProgramming(433, 412013084, "6E742330A56149E8CF94ABD70576573D");
+ // SIRTServer.StartProgramming(433, 412013087, "C4D1DC170D7E219C26FDE76F9B2DC89A");
+ // SIRTServer.StartProgramming(433, 412013078, "4E788CF5F57FF977C85F458049D00387");
+ // SIRTServer.StartProgramming(868, 402001154, "0E9FACC6A0E1EF1C3B27A49BAC216535");
+ // SIRTServer.StartProgramming(433, 412012695, "867DD2A34C382B7D1190DD563E6B52C4");
+ // SIRTServer.StartProgramming(433, 412013356, "80D46C00E1BED73FE0DA85D95CA4BEE3");
}
- //public static void Main()
+ public static void MainRF(params string[] args)
+ {
+ //var pam03 = new PAM03();
+
+ //pam03.Run("COM6", "402010030", "E6C88800DEB868C0D6A84880CE982840");
+ //pam03.Run("COM6", "402010027", "D9C154DC274966AB71AD5D804A322178");
+
+ //return pam03.Run("COM7", "412004190", "0E9FACC6A0E1EF1C3B27A49BAC216535");
+ // 10402010030 E6C88800DEB868C0D6A84880CE982840
+
+ //try
+ //{
+ // return pam03.Run("COM10", "402009768", "3CB64CBCB71F8D0F9F69FF18DF5D24D3");
+ //}
+ //catch (System.Exception e)
+ //{
+ // return -1;
+ //}
+ }
+
+ class FDRMask
+ {
+ public const byte LOG_ALARM_STATE = 0; // 0x00000001, //!< AlarmState (16 bits)
+ public const byte LOG_BILLING_COUNTER = 1; // 0x00000002, //!< BillingCounter
+ public const byte LOG_REVERSE_COUNTER = 2; // 0x00000004, //!< Backward or ReverseCounter
+ public const byte LOG_MAX_FLOW_VAL = 3; // 0x00000008, //!< Value of MaxFlow
+ public const byte LOG_MAX_FLOW_TIME = 4; // 0x00000010, //!< Date/Time of MaxFlow
+ public const byte LOG_PEAK_FLOW_VAL = 5; // 0x00000020, //!< Value of PeakFlow
+ public const byte LOG_PEAK_FLOW_TIME = 6; // 0x00000040, //!< Date/Time of PeakFlow
+ public const byte LOG_CUR_FLOW_VAL = 7; // 0x00000080, //!< Current Flow Value (Average of Period)
+ public const byte LOG_BROKEN_PIPE_FLOW_VAL = 8; // 0x00000100, //!< Value of BrokenPipe
+ public const byte LOG_BROKEN_PIPE_FLOW_TIME = 9; // 0x00000200, //!< Date/Time of BrokenPipe
+ public const byte LOG_MIN_FLOW_VAL = 10; // 0x00000400, //!< Value of FlowMin
+ public const byte LOG_MIN_FLOW_TIME = 11; // 0x00000800, //!< Date/Time of FlowMin
+ public const byte LOG_FORWARD_COUNTER = 12; // 0x00001000, //!< ForwardCounter
+ public const byte LOG_MIN_PRESS_VAL = 13; // 0x00010000, //!< Pressure Minimum
+ public const byte LOG_MIN_PRESS_TIME = 14; // 0x00020000, //!< Pressure Minimum Time
+ public const byte LOG_MAX_PRESS_VAL = 15; // 0x00040000, //!< Pressure Maximum
+ public const byte LOG_MAX_PRESS_TIME = 16; // 0x00080000, //!< Pressure Maximum Time
+ public const byte LOG_MIN_TEMP_VAL = 17; // 0x00100000, //!< Temperature Minimum
+ public const byte LOG_MIN_TEMP_TIME = 18; // 0x00200000, //!< Temperature Minimum
+ public const byte LOG_MAX_TEMP_VAL = 19; // 0x00400000, //!< Temperature Maximum
+ public const byte LOG_MAX_TEMP_TIME = 20; // 0x00800000, //!< Temperature Maximum
+ public const byte LOG_CUR_PRESS_VAL = 21; // 0x01000000, //!< Pressure Current Value
+ public const byte LOG_CUR_TEMP_VAL = 22; // 0x02000000, //!< Temperature Current Value
+ public const byte LOG_EXT_ALARM_STATE = 23; // 0x04000000,   //> AlarmMask.ALARM_REBOOT) % 2} {(x2 >> AlarmMask.ALARM_REBOOT) % 2} ");
+ //Console.WriteLine($"ALARM_LOW_BATTERY: [{(int)AlarmMask.ALARM_LOW_BATTERY,2}] {(x1 >> AlarmMask.ALARM_LOW_BATTERY) % 2} {(x2 >> AlarmMask.ALARM_LOW_BATTERY) % 2} ");
+ //Console.WriteLine($"ALARM_VERY_LOW_BATTERY: [{(int)AlarmMask.ALARM_VERY_LOW_BATTERY,2}] {(x1 >> AlarmMask.ALARM_VERY_LOW_BATTERY) % 2} {(x2 >> AlarmMask.ALARM_VERY_LOW_BATTERY) % 2} ");
+ //Console.WriteLine($"ALARM_CONFIG_ERROR: [{(int)AlarmMask.ALARM_CONFIG_ERROR,2}] {(x1 >> AlarmMask.ALARM_CONFIG_ERROR) % 2} {(x2 >> AlarmMask.ALARM_CONFIG_ERROR) % 2} ");
+ //Console.WriteLine($"ALARM_EMPTY_PIPE: [{(int)AlarmMask.ALARM_EMPTY_PIPE,2}] {(x1 >> AlarmMask.ALARM_EMPTY_PIPE) % 2} {(x2 >> AlarmMask.ALARM_EMPTY_PIPE) % 2} ");
+ //Console.WriteLine($"ALARM_MAGNETIC_TAMPER: [{(int)AlarmMask.ALARM_MAGNETIC_TAMPER,2}] {(x1 >> AlarmMask.ALARM_MAGNETIC_TAMPER) % 2} {(x2 >> AlarmMask.ALARM_MAGNETIC_TAMPER) % 2} ");
+ //Console.WriteLine($"ALARM_REVERSE_FLOW: [{(int)AlarmMask.ALARM_REVERSE_FLOW,2}] {(x1 >> AlarmMask.ALARM_REVERSE_FLOW) % 2} {(x2 >> AlarmMask.ALARM_REVERSE_FLOW) % 2} ");
+ //Console.WriteLine($"ALARM_SUSPECT_LEAK: [{(int)AlarmMask.ALARM_SUSPECT_LEAK,2}] {(x1 >> AlarmMask.ALARM_SUSPECT_LEAK) % 2} {(x2 >> AlarmMask.ALARM_SUSPECT_LEAK) % 2} ");
+ //Console.WriteLine($"ALARM_BROKEN_PIPE: [{(int)AlarmMask.ALARM_BROKEN_PIPE,2}] {(x1 >> AlarmMask.ALARM_BROKEN_PIPE) % 2} {(x2 >> AlarmMask.ALARM_BROKEN_PIPE) % 2} ");
+ //Console.WriteLine($"ALARM_LOW_PRESSURE: [{(int)AlarmMask.ALARM_LOW_PRESSURE,2}] {(x1 >> AlarmMask.ALARM_LOW_PRESSURE) % 2} {(x2 >> AlarmMask.ALARM_LOW_PRESSURE) % 2} ");
+ //Console.WriteLine($"ALARM_HIGH_PRESSURE: [{(int)AlarmMask.ALARM_HIGH_PRESSURE,2}] {(x1 >> AlarmMask.ALARM_HIGH_PRESSURE) % 2} {(x2 >> AlarmMask.ALARM_HIGH_PRESSURE) % 2} ");
+ //Console.WriteLine($"ALARM_LOW_TEMPERATURE: [{(int)AlarmMask.ALARM_LOW_TEMPERATURE,2}] {(x1 >> AlarmMask.ALARM_LOW_TEMPERATURE) % 2} {(x2 >> AlarmMask.ALARM_LOW_TEMPERATURE) % 2} ");
+ //Console.WriteLine($"ALARM_HIGH_TEMPERATURE: [{(int)AlarmMask.ALARM_HIGH_TEMPERATURE,2}] {(x1 >> AlarmMask.ALARM_HIGH_TEMPERATURE) % 2} {(x2 >> AlarmMask.ALARM_HIGH_TEMPERATURE) % 2} ");
+ //Console.WriteLine($"ALARM_RADIO_ERROR: [{(int)AlarmMask.ALARM_RADIO_ERROR,2}] {(x1 >> AlarmMask.ALARM_RADIO_ERROR) % 2} {(x2 >> AlarmMask.ALARM_RADIO_ERROR) % 2} ");
+ //Console.WriteLine($"ALARM_METROLOGY_PARAMS: [{(int)AlarmMask.ALARM_METROLOGY_PARAMS,2}] {(x1 >> AlarmMask.ALARM_METROLOGY_PARAMS) % 2} {(x2 >> AlarmMask.ALARM_METROLOGY_PARAMS) % 2} ");
+ //Console.WriteLine($"ALARM_METROLOGY_MEASURE: [{(int)AlarmMask.ALARM_METROLOGY_MEASURE,2}] {(x1 >> AlarmMask.ALARM_METROLOGY_MEASURE) % 2} {(x2 >> AlarmMask.ALARM_METROLOGY_MEASURE) % 2}");
+ //Console.WriteLine($"ALARM_MAX: [{(int)AlarmMask.ALARM_MAX,2}] {(x1 >> AlarmMask.ALARM_MAX) % 2} {(x2 >> AlarmMask.ALARM_MAX) % 2} ");
+
+
+ //Console.WriteLine(int.MaxValue);
+ //Console.WriteLine(uint.MaxValue);
+ //Console.WriteLine(long.MaxValue);
+
+ }
+
+ //public static void /*MainCSD()*/ Main()
//{
- // ////var x = (625L * 65536) | 0x80_00_00_00;
+ // var alarmEnableMask = 0xD39F0000;
+ // var ix = 0;
- // ////Console.WriteLine((int)x);
-
- // ////var semiBytes25747925 = new byte[] { 0x08, 0x03, 0x12, 0x6B, 0x78, 0x41, 0x00, 0x00, 0x01, 0xF4, 0x00, 0x00, 0x83, 0x0C, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x13, 0x01, 0x88, 0xE1, 0xD5, 0x07, 0x0E, 0x10, 0xEC, 0x56, 0x13, 0xDA, 0x4C, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x1E, 0x00, 0x03, 0x01, 0x2F, 0xBE, 0xCA, 0x47, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xEF, 0xA6 };
- // ////var semi25747925 = new SEMI(semiBytes25747925, 868, 0);
-
- // ////var debugBytes25747925 = new byte[] { 0x0B, 0x10, 0x12, 0x6B, 0x78, 0x41, 0x00, 0x0C, 0x11, 0x0B, 0x11, 0x08, 0x04, 0x02, 0x7C, 0x4C, 0x12, 0x84, 0x15, 0x00, 0x66, 0x00, 0x35, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x8F, 0xD2, 0x02, 0x01, 0x01, 0x16, 0x00, 0x1B, 0x02, 0x71, 0x00, 0x00, 0x82, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xA0, 0xA5 };
- // ////var debug25747925 = new DEBUG(debugBytes25747925, 0);
-
-
- // ////var siteUrl = "https://1xylemeur.sharepoint.com/sites/geckoSrc/customer/Pub_CSD/Forms/AllItems.aspx";
- // ////var userName = "stoyan.zlatev@xylem.com";
- // ////var password = "****************";
-
- // ////var securePassword = new SecureString();
-
- // ////foreach (var c in password)
- // ////{
- // //// securePassword.AppendChar(c);
- // ////}
-
- // ////using (var context = new ClientContext(siteUrl))
- // ////{
- // //// context.Credentials = new SharePointOnlineCredentials(userName, securePassword);
-
- // //// var web = context.Web;
- // //// context.Load(web);
- // //// context.ExecuteQuery();
-
- // //// Console.WriteLine("Site Title: " + web.Title);
- // ////}
- //}
-
-
- //public static void Main()
- //{
- // SIRTLogger.State += Console.WriteLine;
-
- // var sirtHub = new SIRTHub();
-
- // if (sirtHub.TryOpen("COM6", out var sirtId, out var frequency))
+ // foreach (var item in Enum.GetValues(typeof(AlarmMask)).Cast().OrderBy(x => (uint)x).ToArray())
// {
- // SIRTLogger.State -= Console.WriteLine;
- // SIRTLogger.Message += Console.WriteLine;
- // Console.WriteLine($"Listening on: COM6 - {frequency} - {sirtId}");
-
- // var task = new LEDTask(frequency, 319017453)
- // {
- // //WakeUpCmd = true,
- // //WakeUpModul = true,
- // //DelPamSemi = true,
- // Data = new byte[] { 0x1F, 0x01, 0x08, 0x43, 0x03, 0x63, 0x93, 0x73, 0x22 },
- // EncryptionKey = "E6C88800DEB868C0D6A84880CE982840".GetBytes(),
- // IsEncrypted = true,
- // };
-
- // sirtHub.Start(task);
- // task.Wait();
-
- // Console.ReadKey();
- // sirtHub.Close("COM6");
- // }
- //}
-
- //public class LEDTask : EregisterTask
- //{
- // public LEDTask(int frequency, uint address) : base(frequency)
- // {
- // this.RequestAddress = address;
+ // Console.WriteLine($"{item,23} = {item:X} = {(uint)item,5} = {(alarmEnableMask << ix++) & 1}");
// }
- // public byte P811
+ // foreach (var item in Enum.GetValues(typeof(FDRMask)).Cast().OrderBy(x => x).ToArray())
// {
- // get => this.p811;
- // set => this.p811 = value;
+ // Console.WriteLine($"{item} = {item:X} = {(uint)item}");
// }
- //}
- //internal enum AlarmMask
- //{
- // ALARM_REBOOT = 1 << 0, // immer An
- // ALARM_LOW_BATTERY = 1 << 1,
- // ALARM_VERY_LOW_BATTERY = 1 << 2, /* For consistency with st_alarm_bit_t only */
- // ALARM_CONFIG_ERROR = 1 << 3,
- // ALARM_EMPTY_PIPE = 1 << 4,
- // ALARM_MAGNETIC_TAMPER = 1 << 5, /* For consistency with st_alarm_bit_t only */
- // ALARM_REVERSE_FLOW = 1 << 6,
- // ALARM_SUSPECT_LEAK = 1 << 7,
- // ALARM_BROKEN_PIPE = 1 << 8,
- // ALARM_LOW_PRESSURE = 1 << 9,
- // ALARM_HIGH_PRESSURE = 1 << 10,
- // ALARM_LOW_TEMPERATURE = 1 << 11,
- // ALARM_HIGH_TEMPERATURE = 1 << 12,
- // ALARM_RADIO_ERROR = 1 << 13,
- // ALARM_METROLOGY_PARAMS = 1 << 14,
- // ALARM_METROLOGY_MEASURE = 1 << 15,
- // ALARM_MAX = 1 << 16
- //};
+ // ushort value = 3;
- //internal enum FDRMask
- //{
- // LOG_BILLING_COUNTER = 0x00000002, //!< BillingCounter
- // LOG_FORWARD_COUNTER = 0x00001000, //!< ForwardCounter
- // LOG_REVERSE_COUNTER = 0x00000004, //!< Backward or ReverseCounter
- // LOG_MIN_FLOW_TIME = 0x00000800, //!< Date/Time of FlowMin
- // LOG_MIN_FLOW_VAL = 0x00000400, //!< Value of FlowMin
- // LOG_BROKEN_PIPE_FLOW_TIME = 0x00000200, //!< Date/Time of BrokenPipe
- // LOG_BROKEN_PIPE_FLOW_VAL = 0x00000100, //!< Value of BrokenPipe
- // LOG_CUR_FLOW_VAL = 0x00000080, //!< Current Flow Value (Average of Period)
- // LOG_PEAK_FLOW_TIME = 0x00000040, //!< Date/Time of PeakFlow
- // LOG_PEAK_FLOW_VAL = 0x00000020, //!< Value of PeakFlow
- // LOG_MAX_FLOW_TIME = 0x00000010, //!< Date/Time of MaxFlow
- // LOG_MAX_FLOW_VAL = 0x00000008, //!< Value of MaxFlow
- // LOG_CUR_TEMP_VAL = 0x02000000, //!< Temperature Current Value
- // LOG_MAX_TEMP_TIME = 0x00800000, //!< Temperature Maximum
- // LOG_MAX_TEMP_VAL = 0x00400000, //!< Temperature Maximum
- // LOG_MIN_TEMP_TIME = 0x00200000, //!< Temperature Minimum
- // LOG_MIN_TEMP_VAL = 0x00100000, //!< Temperature Minimum
- // LOG_CUR_PRESS_VAL = 0x01000000, //!< Pressure Current Value
- // LOG_MAX_PRESS_TIME = 0x00080000, //!< Pressure Maximum Time
- // LOG_MAX_PRESS_VAL = 0x00040000, //!< Pressure Maximum
- // LOG_MIN_PRESS_TIME = 0x00020000, //!< Pressure Minimum Time
- // LOG_MIN_PRESS_VAL = 0x00010000, //!< Pressure Minimum
- // LOG_ALARM_STATE = 0x00000001, //!< AlarmState (16 bits)
- // LOG_EXT_ALARM_STATE = 0x04000000,   //> 0 & 1}");
+ // Console.WriteLine($"0: {value >> 1 & 1}");
+ // Console.WriteLine($"0: {value >> 2 & 1}");
- //var alarm
- // = FDRMask.LOG_BILLING_COUNTER
- // | FDRMask.LOG_REVERSE_COUNTER
- // | FDRMask.LOG_BROKEN_PIPE_FLOW_TIME
- // | FDRMask.LOG_BROKEN_PIPE_FLOW_VAL
- // | FDRMask.LOG_PEAK_FLOW_TIME
- // | FDRMask.LOG_PEAK_FLOW_VAL
- // | FDRMask.LOG_MAX_FLOW_TIME
- // | FDRMask.LOG_MAX_FLOW_VAL
- // | FDRMask.LOG_MAX_TEMP_TIME
- // | FDRMask.LOG_MAX_TEMP_VAL
- // | FDRMask.LOG_ALARM_STATE
- // | FDRMask.LOG_EXT_ALARM_STATE;
+ // Console.WriteLine("CSD CSD 772161_MW");
+ // Console.WriteLine("=============================================================================");
- //public static void Main()
- //{
// var alarm = AlarmMask.ALARM_REBOOT
// | AlarmMask.ALARM_EMPTY_PIPE
- // | AlarmMask.ALARM_SUSPECT_LEAK
- // | AlarmMask.ALARM_BROKEN_PIPE
// | AlarmMask.ALARM_LOW_BATTERY
- // | AlarmMask.ALARM_REVERSE_FLOW
- // | AlarmMask.ALARM_HIGH_TEMPERATURE;
+ // | AlarmMask.ALARM_REVERSE_FLOW;
- // Console.WriteLine($"Alarm: {alarm}");
- // Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes((int)alarm)));
- // Console.WriteLine();
+ // Console.WriteLine($"CUSTOMER_AlarmVisualMask: {BitConverter.ToString(BitConverter.GetBytes((int)alarm))}");
- // var fdr = FDRMask.LOG_BILLING_COUNTER
- // | FDRMask.LOG_REVERSE_COUNTER
- // | FDRMask.LOG_BROKEN_PIPE_FLOW_TIME
- // | FDRMask.LOG_BROKEN_PIPE_FLOW_VAL
- // | FDRMask.LOG_PEAK_FLOW_TIME
- // | FDRMask.LOG_PEAK_FLOW_VAL
- // | FDRMask.LOG_MAX_FLOW_TIME
- // | FDRMask.LOG_MAX_FLOW_VAL
- // | FDRMask.LOG_MAX_TEMP_TIME
- // | FDRMask.LOG_MAX_TEMP_VAL
+
+ // var dlg = FDRMask.LOG_BILLING_COUNTER
+ // | FDRMask.LOG_MIN_FLOW_VAL
+ // | FDRMask.LOG_CUR_FLOW_VAL // ... AverageFlow !?
// | FDRMask.LOG_ALARM_STATE
// | FDRMask.LOG_EXT_ALARM_STATE;
- // Console.WriteLine($"FDR: {fdr}");
- // Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes((int)fdr)));
- // Console.WriteLine();
+ // Console.WriteLine($"PERIODICLOG_DataLogContents: {BitConverter.ToString(BitConverter.GetBytes((int)dlg))}");
- // Console.WriteLine($"HErrL: {BitConverter.ToString(BitConverter.GetBytes((short)90))}");
- // Console.WriteLine();
+ // var fdr = FDRMask.LOG_BILLING_COUNTER
+ // | FDRMask.LOG_MIN_FLOW_VAL
+ // | FDRMask.LOG_CUR_FLOW_VAL // ... AverageFlow !?
+ // | FDRMask.LOG_ALARM_STATE
+ // | FDRMask.LOG_EXT_ALARM_STATE;
- // Console.WriteLine("LeakageThreshold");
- // Console.WriteLine($"DN 40 100 l/h = 100 * 256 = {BitConverter.ToString(BitConverter.GetBytes(100 * 256))}");
- // Console.WriteLine($"DN 50 100 l/h = 100 * 256 = {BitConverter.ToString(BitConverter.GetBytes(100 * 256))}");
- // Console.WriteLine($"DN 65 125 l/h = 125 * 256 = {BitConverter.ToString(BitConverter.GetBytes(125 * 256))}");
- // Console.WriteLine($"DN 80 125 l/h = 125 * 256 = {BitConverter.ToString(BitConverter.GetBytes(125 * 256))}");
- // Console.WriteLine($"DN 100 125 l/h = 125 * 256 = {BitConverter.ToString(BitConverter.GetBytes(125 * 256))}");
- // Console.WriteLine($"DN 125 500 l/h = 500 * 256 = {BitConverter.ToString(BitConverter.GetBytes(500 * 256))}");
- // Console.WriteLine($"DN 150 375 l/h = 375 * 256 = {BitConverter.ToString(BitConverter.GetBytes(375 * 256))}");
- // Console.WriteLine();
-
-
- // Console.WriteLine("BrokenPipeThreshold");
- // Console.WriteLine($"DN 40 50 m³/h = 50 * 256 * 1000 = {BitConverter.ToString(BitConverter.GetBytes( 50 * 256 * 1000))}");
- // Console.WriteLine($"DN 80 125 m³/h = 125 * 256 * 1000 = {BitConverter.ToString(BitConverter.GetBytes(125 * 256 * 1000))}");
- // Console.WriteLine($"DN 150 250 m³/h = 250 * 256 * 1000 = {BitConverter.ToString(BitConverter.GetBytes(250 * 256 * 1000))}");
- // Console.WriteLine();
+ // Console.WriteLine($"PERIODICLOG_FixedDateReadingContents: {BitConverter.ToString(BitConverter.GetBytes((int)fdr))}");
//}
+
+ ///
+ /// CSD 769400 Arqiva Thames Water
+ ///
+ public static void Main1231231()
+ {
+ Console.WriteLine("CSD 769400 Arqiva Thames Water");
+ Console.WriteLine("=============================================================================");
+ Console.WriteLine("--- DN50 --------------------------------------------------------------------");
+ Console.WriteLine($"CUSTOMER_ExcessFlowVolumeThreshold: {BitConverter.ToString(BitConverter.GetBytes((int)(37.5 * 1000) / 256))}");
+
+ var alarm = 1 << AlarmMask.ALARM_EMPTY_PIPE
+ | 1 << AlarmMask.ALARM_SUSPECT_LEAK
+ | 1 << AlarmMask.ALARM_LOW_BATTERY
+ | 1 << AlarmMask.ALARM_HIGH_TEMPERATURE
+ | 1 << AlarmMask.ALARM_LOW_TEMPERATURE
+ | 1 << AlarmMask.ALARM_HIGH_PRESSURE
+ | 1 << AlarmMask.ALARM_LOW_PRESSURE;
+
+ Console.WriteLine($"CUSTOMER_AlarmVisualMask: {BitConverter.ToString(BitConverter.GetBytes(alarm))}");
+
+
+ var dlg = 1 < this.bytes = new byte[4];
+
+ public Epoch20000101(uint secondsSince, DateTimeKind dateTimeKind = DateTimeKind.Utc) : this(dateTimeKind)
+ => this.SecondsSince = secondsSince;
+
+ public uint SecondsSince
+ {
+ get => BitConverter.ToUInt32(this.bytes, 0);
+ set => BitConverter.GetBytes(value).CopyTo(this.bytes, 0);
+ }
+
+ public DateTime DateTime
+ {
+ get => epoch.AddSeconds(this.SecondsSince);
+ set => this.SecondsSince = (uint)(value - epoch).TotalSeconds;
+ }
+
+ public static uint UTCNow => new Epoch20000101 { DateTime = DateTime.UtcNow }.SecondsSince;
+
+ public static implicit operator DateTime(Epoch20000101 epoch) => epoch.DateTime;
+
+ public static implicit operator uint(Epoch20000101 epoch) => epoch.SecondsSince;
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/Extensions.cs b/Common/CommonConsole/RFTelegrams/Extensions.cs
new file mode 100644
index 00000000..055ad21b
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/Extensions.cs
@@ -0,0 +1,623 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using System;
+ using System.Collections.Generic;
+
+ public static class Extensions
+ {
+ private const int ByteSize = 8;
+ private const int SByteSize = 16;
+ private const int Int16Size = 16;
+ private const int UInt16Size = 16;
+ private const int Int32Size = 32;
+ private const int UInt32Size = 32;
+ private const int Int64Size = 64;
+ private const int UInt64Size = 64;
+
+ public static byte[] GetBitsBE(this byte value)
+ {
+ var bits = new byte[ByteSize];
+
+ for (int i = 7, x = 0; i >= 0; i--, x++)
+ {
+ bits[x] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte[] GetBitsLE(this byte value)
+ {
+ var bits = new byte[ByteSize];
+
+ for (var i = 0; i < ByteSize; i++)
+ {
+ bits[i] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte[] GetBitsLE(this ushort value)
+ {
+ var bits = new byte[UInt16Size];
+
+ for (var i = 0; i < UInt16Size; i++)
+ {
+ bits[i] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte GetByteLE(this byte[] bits)
+ {
+ if (bits is null)
+ {
+ return default(byte);
+ }
+
+ var value = default(byte);
+
+ for (var i = 0; i < ByteSize; i++)
+ {
+ value ^= (byte)(bits[i] << i);
+ }
+
+ return value;
+ }
+
+ public static byte GetByteLE(this byte[] bits, int start = 0, int count = 0)
+ {
+ if (bits is null)
+ {
+ return default(byte);
+ }
+
+ if (count == 0)
+ {
+ count = bits.Length;
+ }
+
+ var length = start + count;
+ var _byte = default(byte);
+
+ for (int i = start, x = 0; i < length; i++, x++)
+ {
+ _byte ^= (byte)(bits[i] << x);
+ }
+
+ return _byte;
+ }
+
+ public static void SetBitsLE(this byte value, byte[] bits, int start = 0, int count = 0)
+ {
+ if (bits is null)
+ {
+ return;
+ }
+
+ if (count == 0 || count > bits.Length)
+ {
+ count = bits.Length;
+ }
+
+ for (int i = start, x = 0; i < count; i++, x++)
+ {
+ bits[i] = (byte)((value >> x) % 2);
+ }
+ }
+
+ public static byte[] GetBytesBE(this sbyte value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this short value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this int value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this long value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 56);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this ushort value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this uint value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this ulong value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 56);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this sbyte value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this short value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this int value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index] = (byte)(value >> 24);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this long value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index] = (byte)(value >> 56);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this ushort value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this uint value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index] = (byte)(value >> 24);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this ulong value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index] = (byte)(value >> 56);
+
+ return bytes;
+ }
+
+ public static sbyte ToSByteBE(this byte[] bytes, int start = 0)
+ {
+ var value = default(sbyte);
+
+ value ^= (sbyte)(bytes[start++] << 8);
+ value ^= (sbyte)bytes[start];
+
+ return value;
+ }
+
+ public static short ToInt16BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(short);
+
+ value ^= (short)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static int ToInt32BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(int);
+
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static long ToInt64BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(long);
+
+ value ^= bytes[start++] << 56;
+ value ^= bytes[start++] << 48;
+ value ^= bytes[start++] << 40;
+ value ^= bytes[start++] << 32;
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static ushort ToUInt16BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ushort);
+
+ value ^= (ushort)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static uint ToUInt32BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(uint);
+
+ value ^= (uint)(bytes[start++] << 24);
+ value ^= (uint)(bytes[start++] << 16);
+ value ^= (uint)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static ulong ToUInt64BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ulong);
+
+ value ^= (ulong)(bytes[start++] << 56);
+ value ^= (ulong)(bytes[start++] << 48);
+ value ^= (ulong)(bytes[start++] << 40);
+ value ^= (ulong)(bytes[start++] << 32);
+ value ^= (ulong)(bytes[start++] << 24);
+ value ^= (ulong)(bytes[start++] << 16);
+ value ^= (ulong)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static sbyte ToSByteLE(this byte[] bytes, int start = 0)
+ {
+ var value = default(sbyte);
+
+ value ^= (sbyte)bytes[start++];
+ value ^= (sbyte)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static short ToInt16LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(short);
+
+ value ^= bytes[start++];
+ value ^= (short)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static int ToInt32LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(int);
+
+ value ^= bytes[start++];
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start] << 24;
+
+ return value;
+ }
+
+ public static long ToInt64LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(long);
+
+ value ^= bytes[start++];
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 32;
+ value ^= bytes[start++] << 40;
+ value ^= bytes[start++] << 48;
+ value ^= bytes[start] << 56;
+
+ return value;
+ }
+
+ public static ushort ToUInt16LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ushort);
+
+ value ^= bytes[start++];
+ value ^= (ushort)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static ushort ToUIint16LEFromBits(this byte[] bits)
+ {
+ if (bits is null)
+ {
+ bits = new byte[UInt16Size];
+ }
+
+ Array.Resize(ref bits, UInt16Size);
+
+ ushort value = 0;
+
+ for (var i = 0; i < UInt16Size; i++)
+ {
+ value ^= (ushort)(bits[i] << i);
+ }
+
+ return value;
+ }
+
+ public static uint ToUInt32LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(uint);
+
+ value ^= bytes[start++];
+ value ^= (uint)(bytes[start++] << 8);
+ value ^= (uint)(bytes[start++] << 16);
+ value ^= (uint)(bytes[start] << 24);
+
+ return value;
+ }
+
+ public static ulong ToUInt64LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ulong);
+
+ value ^= bytes[start++];
+ value ^= (ulong)(bytes[start++] << 8);
+ value ^= (ulong)(bytes[start++] << 16);
+ value ^= (ulong)(bytes[start++] << 24);
+ value ^= (ulong)(bytes[start++] << 32);
+ value ^= (ulong)(bytes[start++] << 40);
+ value ^= (ulong)(bytes[start++] << 48);
+ value ^= (ulong)(bytes[start] << 56);
+
+ return value;
+ }
+
+ public static ushort CRCCCITT(this byte[] bytes, int start = 0, int length = 0)
+ {
+ if (length == 0)
+ {
+ length = bytes.Length;
+ }
+
+ var crc = (ushort)0xFFFF;
+
+ for (var b = start; b < length; b++)
+ {
+ var _byte = bytes[b];
+ var token = (ushort)((_byte << 8) & 0xFF00);
+
+ for (var i = 0; i < 8; i++)
+ {
+ if (0x8000 == ((crc ^ token) & 0x8000))
+ {
+ crc <<= 1;
+ crc ^= 0x1021;
+ }
+ else
+ {
+ crc <<= 1;
+ }
+
+ token <<= 1;
+ }
+ }
+
+ return crc;
+ }
+
+ public static byte[] GetBytes(this string hexString)
+ {
+ var bytes = new List();
+
+ if (!string.IsNullOrWhiteSpace(hexString))
+ {
+ // not needed, only valid hex bytes are processed // hexString = Regex.Replace(hexString, "[^a-fA-F0-9]*", string.Empty);
+
+ var first = true;
+ var x = 0;
+
+ foreach (var hex in hexString)
+ {
+ if ('0' <= hex && hex <= '9')
+ {
+ x += hex - '0';
+ }
+ else if ('A' <= hex && hex <= 'F')
+ {
+ x += hex - 'A' + 10;
+ }
+ else if ('a' <= hex && hex <= 'f')
+ {
+ x = hex - 'a' + 10;
+ }
+ else
+ {
+ continue;
+ }
+
+ if (first)
+ {
+ x *= 16;
+ }
+ else
+ {
+ bytes.Add((byte)x);
+
+ x = 0;
+ }
+
+ first = !first;
+ }
+ }
+
+ return bytes.ToArray();
+ }
+
+ public static byte[] GetEncryptionKey(this string hexString, int requiredLength = 16)
+ {
+ var bytes = hexString.GetBytes();
+
+ if (bytes?.Length != requiredLength)
+ {
+ return default(byte[]);
+ }
+
+ return bytes;
+ }
+
+ public static uint GetAddress(this byte[] bytes, int index)
+ {
+ var value = default(uint);
+ var _index = index;
+
+ value ^= (uint)(bytes[_index++] << 24);
+ value ^= (uint)(bytes[_index++] << 16);
+ value ^= (uint)(bytes[_index++] << 8);
+ value ^= bytes[_index];
+
+ return value;
+ }
+
+ public static ushort GetCrc(this byte[] bytes, int index)
+ {
+ var value = default(ushort);
+ var _index = index;
+
+ value ^= (ushort)(bytes[_index++] << 8);
+ value ^= bytes[_index];
+
+ return value;
+ }
+
+ public static void SetAddress(this byte[] bytes, int index, uint address)
+ {
+ var _index = index;
+
+ bytes[_index++] = (byte)(address >> 24);
+ bytes[_index++] = (byte)(address >> 16);
+ bytes[_index++] = (byte)(address >> 8);
+ bytes[_index] = (byte)address;
+ }
+
+ public static void SetCrc(this byte[] bytes, int index, ushort crc)
+ {
+ var _index = index;
+
+ bytes[_index++] = (byte)(crc >> 8);
+ bytes[_index] = (byte)crc;
+ }
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/LogContent.cs b/Common/CommonConsole/RFTelegrams/LogContent.cs
new file mode 100644
index 00000000..9748bd7d
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/LogContent.cs
@@ -0,0 +1,97 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class LogContent
+ {
+ private readonly byte[] bits = new byte[16];
+
+ public LogContent(ushort value = 0)
+ => this.bits = value.GetBitsLE();
+
+ public bool ForwardCounter
+ {
+ get => this.bits[12] == 1;
+ set => this.bits[12] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfMinimumFlow
+ {
+ get => this.bits[11] == 1;
+ set => this.bits[11] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MinimumFlow
+ {
+ get => this.bits[10] == 1;
+ set => this.bits[10] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfBrokenPipe
+ {
+ get => this.bits[9] == 1;
+ set => this.bits[9] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BrokenPipeFlow
+ {
+ get => this.bits[8] == 1;
+ set => this.bits[8] = (byte)(value ? 1 : 0);
+ }
+
+ public bool CurrentFlow
+ {
+ get => this.bits[7] == 1;
+ set => this.bits[7] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfPeakFlow
+ {
+ get => this.bits[6] == 1;
+ set => this.bits[6] = (byte)(value ? 1 : 0);
+ }
+
+ public bool PeakFlow
+ {
+ get => this.bits[5] == 1;
+ set => this.bits[5] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfMaximumFlow
+ {
+ get => this.bits[4] == 1;
+ set => this.bits[4] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MaximumFlow
+ {
+ get => this.bits[3] == 1;
+ set => this.bits[3] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BackwardVolume
+ {
+ get => this.bits[2] == 1;
+ set => this.bits[2] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Counter
+ {
+ get => this.bits[1] == 1;
+ set => this.bits[1] = (byte)(value ? 1 : 0);
+ }
+
+ public bool AlarmState
+ {
+ get => this.bits[0] == 1;
+ set => this.bits[0] = (byte)(value ? 1 : 0);
+ }
+
+ public override string ToString()
+ => string.Join(string.Empty, this.bits);
+
+ public static implicit operator LogContent(ushort value)
+ => new LogContent(value);
+
+ public static implicit operator ushort(LogContent value)
+ => value.bits.ToUIint16LEFromBits();
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/MeterTypes.cs b/Common/CommonConsole/RFTelegrams/MeterTypes.cs
new file mode 100644
index 00000000..8c4d7484
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/MeterTypes.cs
@@ -0,0 +1,11 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public enum MeterTypes : byte
+ {
+ Residential = 0,
+ CandI = 1,
+ Cordonel = 0x09,
+ Residential__0x0B = 11,
+ CandI__0x0C = 12,
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/PAMStatus.cs b/Common/CommonConsole/RFTelegrams/PAMStatus.cs
new file mode 100644
index 00000000..4f452230
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/PAMStatus.cs
@@ -0,0 +1,62 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class PAMStatus
+ {
+ private readonly byte[] bits;
+
+ public PAMStatus(byte _byte)
+ => this.bits = _byte.GetBitsLE();
+
+ public bool CMD_UNKNOWN => this.bits[0] == 1;
+
+ public bool WRONG_AUTH => this.bits[1] == 1;
+
+ public bool EXPIRED_AUTH => this.bits[2] == 1;
+
+ public bool MIXED_TYPES => this.bits[3] == 1;
+
+ public bool OUT_OF_RANGE => this.bits[4] == 1;
+
+ public override string ToString()
+ {
+ if (this.bits.GetByteLE() == 0)
+ {
+ return nameof(OK);
+ }
+ if (this.OUT_OF_RANGE)
+ {
+ return nameof(this.OUT_OF_RANGE);
+ }
+ else if (this.MIXED_TYPES)
+ {
+ return nameof(this.MIXED_TYPES);
+ }
+ else if (this.CMD_UNKNOWN)
+ {
+ return nameof(this.CMD_UNKNOWN);
+ }
+ else if (this.EXPIRED_AUTH)
+ {
+ return nameof(this.EXPIRED_AUTH);
+ }
+ else if (this.WRONG_AUTH)
+ {
+ return nameof(this.WRONG_AUTH);
+ }
+ else
+ {
+ return string.Join(string.Empty, this.bits);
+ }
+ }
+
+ public static byte OK = 0;
+
+ public static byte EXPIREDAUTH = 4;
+
+ public static implicit operator byte(PAMStatus status)
+ => status?.bits?.GetByteLE() ?? 0xFF;
+
+ public static implicit operator string(PAMStatus status)
+ => status?.ToString();
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs b/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs
new file mode 100644
index 00000000..9e33b84c
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/Pams/DummyPam.cs
@@ -0,0 +1,7 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public class DummyPam
+ {
+ public static implicit operator byte[](DummyPam dummyPam) => new byte[0];
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs b/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs
new file mode 100644
index 00000000..b4d3e53a
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/Pams/ResetAlarms.cs
@@ -0,0 +1,70 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public class ResetAlarms
+ {
+ private readonly byte[] bits;
+
+ public ResetAlarms(byte _byte = 0xFF)
+ => this.bits = _byte.GetBitsLE();
+
+ public bool SpecificError
+ {
+ get => this.bits[0] == 1;
+ set => this.bits[0] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MediumAbsent
+ {
+ get => this.bits[1] == 1;
+ set => this.bits[1] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BrokenPipe
+ {
+ get => this.bits[2] == 1;
+ set => this.bits[2] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Backflow
+ {
+ get => this.bits[3] == 1;
+ set => this.bits[3] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MetrologyUnavailable
+ {
+ get => this.bits[4] == 1;
+ set => this.bits[4] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MagneticTamper
+ {
+ get => this.bits[5] == 1;
+ set => this.bits[5] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Leak
+ {
+ get => this.bits[6] == 1;
+ set => this.bits[6] = (byte)(value ? 1 : 0);
+ }
+
+ public bool LowBattery
+ {
+ get => this.bits[7] == 1;
+ set => this.bits[7] = (byte)(value ? 1 : 0);
+ }
+
+ public static implicit operator byte[] (ResetAlarms resetAlarms) => new byte[]
+ {
+ 0x03,
+ resetAlarms.bits.GetByteLE(),
+ 0x43,
+ 0x01,
+ 0x14,
+ 0x30,
+ 0x68,
+ 0xD0
+ };
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/RFTask.cs b/Common/CommonConsole/RFTelegrams/RFTask.cs
new file mode 100644
index 00000000..5efb53ae
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/RFTask.cs
@@ -0,0 +1,86 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using global::Common.Hardware.SIRT;
+ using global::Common.Hardware.SIRT.Tasks;
+
+ using System;
+ using System.Collections.Generic;
+
+ public class RFTask : WritePamTask
+ {
+ private readonly Stack messages = new Stack();
+
+ public SIRTMessage AKN { get; private set; }
+
+ public SIRTMessage BUP { get; private set; }
+
+ public SIRTMessage LAT { get; private set; }
+
+ public SIRTMessage DEBUG { get; private set; }
+
+ public SIRTMessage SEMI { get; private set; }
+
+ public SIRTMessage LastOrDefault()
+ => this.messages.Count > 0
+ ? this.messages.Peek()
+ : new SIRTMessage();
+
+ public override string ToString()
+ => BitConverter.ToString(this.request.Payload);
+
+ protected override void OnMessageSent(SIRTMessage request)
+ => this.messages.Push(request);
+
+ protected override void OnUnknownReceived(SIRTMessage unknown)
+ => this.messages.Push(unknown);
+
+ protected override void OnAKNReceived(SIRTMessage akn)
+ {
+ this.AKN = akn;
+
+ this.messages.Push(akn);
+ }
+
+ protected override void OnBUPReceived(SIRTMessage bup)
+ {
+ this.BUP = bup;
+
+ this.messages.Push(bup);
+ }
+
+ protected override void OnLATReceived(SIRTMessage lat)
+ {
+ this.LAT = lat;
+
+ this.messages.Push(lat);
+ }
+
+ protected override void OnDEBUGReceived(SIRTMessage debug)
+ {
+ this.DEBUG = debug;
+
+ this.messages.Push(debug);
+ }
+
+ protected override void OnSEMIReceived(SIRTMessage semi)
+ {
+ this.SEMI = semi;
+
+ this.messages.Push(semi);
+
+ if (semi.Payload.Length > 11)
+ {
+ var pamStatus = new PAMStatus(semi.Payload[11]);
+
+ if (pamStatus == PAMStatus.OK)
+ {
+ base.OnSEMIReceived(semi);
+ }
+ else
+ {
+ this.SetError();
+ }
+ }
+ }
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/RSSI.cs b/Common/CommonConsole/RFTelegrams/RSSI.cs
new file mode 100644
index 00000000..e5b337e0
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/RSSI.cs
@@ -0,0 +1,42 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class RSSI
+ {
+ public RSSI(byte value, int mhz)
+ {
+ this.Value = value;
+
+ if (mhz == 433)
+ {
+ this.Dbm = value * 0.5 - 140;
+ this.Percent = value * 0.7333 - 57.6667;
+ }
+ else if (mhz == 868)
+ {
+ this.Dbm = value * 0.5 - 131.3;
+ this.Percent = value * 0.66 - 40.316;
+ }
+
+ if (this.Percent > 100)
+ {
+ this.Percent = 100;
+ }
+ else if (this.Percent < 0)
+ {
+ this.Percent = 0;
+ }
+ }
+
+ public byte Value { get; }
+
+ public double Dbm { get; }
+
+ public double Percent { get; }
+
+ public override string ToString() => $"{this.Dbm}dBm ({this.Percent:0.0}%)";
+
+ public static implicit operator byte(RSSI rssi) => rssi?.Value ?? 0;
+
+ public static implicit operator string(RSSI rssi) => rssi?.ToString();
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/SEMI.cs b/Common/CommonConsole/RFTelegrams/SEMI.cs
new file mode 100644
index 00000000..abf03f0c
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/SEMI.cs
@@ -0,0 +1,176 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using Pams;
+
+ using System;
+ using System.Text;
+
+ ///
+ /// TODO: SEMI from the SirtDLL is not complete,
+ ///
+ public class SEMI
+ {
+ //public const int MIN_LENGTH = 120;
+ public const int MIN_LENGTH = 97;
+
+ public SEMI(byte[] payload, int mhz)
+ {
+ this.AppCode = (AppCode)payload[0];
+ this.Counter = payload[1];
+ this.Address = payload.ToUInt32BE(2);
+ this.Reading = payload.ToInt32BE(6);
+ this.MainAlarmByte = new ResetAlarms(payload[10]);
+ this.PAMStatus = new PAMStatus(payload[11]);
+ this.RSSI = new RSSI(payload[12], mhz);
+ this.MeterType = (MeterTypes)payload[13];
+ this.TransmissionInterval = payload.ToUInt16BE(14);
+ this.LATInterval = payload[16];
+ this.ActualFlow = payload.ToUInt16BE(17);
+ this.BackwardVolume = payload.ToUInt32BE(19);
+ this.Units = (DisplayUnits)payload[23];
+ this.MBusStatus = payload[24];
+ this.MBusTransmissionInterval = payload.ToUInt16BE(25);
+ this.MainAlarmMask = new ResetAlarms(payload[27]);
+ this.LeakageDetectionParameters = payload[28];
+ this.BrokenPipeDetectionParameters = payload[29];
+ this.BatteryRemainingYears = payload.ToUInt16BE(30) / (4D * 365);
+ this.ReminingBatteryCapacity = payload[32];
+ this.MaximumFlow = payload.ToUInt16BE(33);
+ this.TimeSinceMaximumFlow = payload.ToUInt16BE(35);
+ this.TimeSinceLowBattery = payload.ToUInt16BE(37);
+ this.AlarmLeakage = new Epoch20000101(payload.ToUInt32BE(39), DateTimeKind.Local);
+ this.AlarmAirInPipe = new Epoch20000101(payload.ToUInt32BE(43), DateTimeKind.Local);
+ this.AlarmReverseFlow = new Epoch20000101(payload.ToUInt32BE(47), DateTimeKind.Local);
+ this.AlarmBrokenPipe = new Epoch20000101(payload.ToUInt32BE(51), DateTimeKind.Local);
+ this.DataLogContent = payload.ToUInt16BE(55);
+ this.DataLoggingInterval = payload.ToUInt16BE(57);
+ this.FDRContent = payload.ToUInt16BE(59);
+ this.FDRDayOfMonth = payload[61];
+ this.ActualDateTime = new Epoch20000101(payload.ToUInt32BE(62), DateTimeKind.Local);
+ this.HistoricalErrorDays = payload[66];
+ this.CustomerSpecificText = Encoding.ASCII.GetString(payload, 67, 9);
+ this.TimeOfFDRReset = payload.ToUInt16BE(76);
+ this.TimeOfLogReset = payload.ToUInt16BE(78);
+ this.ActualPressure = payload.ToUInt16BE(80);
+ this.ActualTemperature = payload[82];
+ this.PressureParameter = Encoding.ASCII.GetString(payload, 83, 7);
+ this.TemperatureParameter = payload.ToInt32BE(90);
+ this.PulseOutParameter = payload[94];
+ this.AlarmByteExtended = payload[95];
+ this.AlarmMaskExtended = payload[96];
+ //this.AlarmMaxPressureTime = payload.ToUInt32BE(97);
+ //this.AlarmMinPressureTime = payload.ToUInt32BE(101);
+ //this.AlarmMaxTemperatureTime = payload.ToUInt32BE(105);
+ //this.AlarmMinTemperatureTime = payload.ToUInt32BE(109);
+ //this.LogContentPressureTemperature = payload.ToUInt16BE(113);
+ //this.FDRContentPressureTemperature = payload.ToUInt16BE(115);
+ //this.UnitExtraFlags = payload[117];
+ //this.MeterSize = payload[118];
+ //this.PressureCalibrationOffset = payload[119];
+ }
+
+ public AppCode AppCode { get; }
+
+ public byte Counter { get; }
+
+ public uint Address { get; }
+
+ public int Reading { get; }
+
+ public ResetAlarms MainAlarmByte { get; }
+
+ public PAMStatus PAMStatus { get; }
+
+ public RSSI RSSI { get; }
+
+ public MeterTypes MeterType { get; }
+
+ public ushort TransmissionInterval { get; }
+
+ public byte LATInterval { get; }
+
+ public ushort ActualFlow { get; }
+
+ public uint BackwardVolume { get; }
+
+ public DisplayUnits Units { get; }
+
+ public byte MBusStatus { get; }
+
+ public ushort MBusTransmissionInterval { get; }
+
+ public ResetAlarms MainAlarmMask { get; }
+
+ public byte LeakageDetectionParameters { get; }
+
+ public byte BrokenPipeDetectionParameters { get; }
+
+ public double BatteryRemainingYears { get; }
+
+ public byte ReminingBatteryCapacity { get; }
+
+ public ushort MaximumFlow { get; }
+
+ public ushort TimeSinceMaximumFlow { get; }
+
+ public ushort TimeSinceLowBattery { get; }
+
+ public DateTime AlarmLeakage { get; }
+
+ public DateTime AlarmAirInPipe { get; }
+
+ public DateTime AlarmReverseFlow { get; }
+
+ public DateTime AlarmBrokenPipe { get; }
+
+ public LogContent DataLogContent { get; }
+
+ public ushort DataLoggingInterval { get; }
+
+ public LogContent FDRContent { get; }
+
+ public byte FDRDayOfMonth { get; }
+
+ public DateTime ActualDateTime { get; }
+
+ public byte HistoricalErrorDays { get; }
+
+ public string CustomerSpecificText { get; }
+
+ public ushort TimeOfFDRReset { get; }
+
+ public ushort TimeOfLogReset { get; }
+
+ public ushort ActualPressure { get; }
+
+ public byte ActualTemperature { get; }
+
+ public string PressureParameter { get; }
+
+ public int TemperatureParameter { get; }
+
+ public byte PulseOutParameter { get; }
+
+ public byte AlarmByteExtended { get; }
+
+ public byte AlarmMaskExtended { get; }
+
+ //public uint AlarmMaxPressureTime { get; }
+
+ //public uint AlarmMinPressureTime { get; }
+
+ //public uint AlarmMaxTemperatureTime { get; }
+
+ //public uint AlarmMinTemperatureTime { get; }
+
+ //public ushort LogContentPressureTemperature { get; }
+
+ //public ushort FDRContentPressureTemperature { get; }
+
+ //public byte UnitExtraFlags { get; }
+
+ //public byte MeterSize { get; }
+
+ //public byte PressureCalibrationOffset { get; }
+ }
+}
diff --git a/Common/CommonConsole/RFTelegrams/SIRTServer.cs b/Common/CommonConsole/RFTelegrams/SIRTServer.cs
new file mode 100644
index 00000000..d628b78c
--- /dev/null
+++ b/Common/CommonConsole/RFTelegrams/SIRTServer.cs
@@ -0,0 +1,201 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using CommonConsole.RFTelegrams.Pams;
+ using global::Common.Hardware.SIRT;
+ using global::Common.Hardware.SIRT.Tasks;
+
+ using Pams;
+
+ using System;
+
+ internal class SIRTServer
+ {
+ private static Action messageCallback;
+ private static Action errorMessageCallback;
+ private static readonly SIRTHub sirtHub = new SIRTHub();
+
+ ///
+ /// Connects SIRT's globaly for the application
+ ///
+ /// Action that receives info messages
+ /// Action that receives error messages
+ /// The COM-Ports to be connected
+ /// true - if all ports connected otherwise false
+ public static bool StartServer(Action messageHandler, Action errorMessageHandler, params int[] comPorts)
+ {
+ string sirtId;
+ int frequency;
+ bool succeeded = true;
+
+ messageHandler?.Invoke(new string('-', 100));
+
+ foreach (var comport in comPorts)
+ {
+ succeeded = ConnectSIRT(comport, out sirtId, out frequency);
+
+ if (succeeded)
+ {
+ messageHandler?.Invoke($"COM{comport}|{sirtId}|{frequency}MHz - connected");
+ messageHandler?.Invoke(new string('-', 100));
+ }
+ else
+ {
+ errorMessageHandler?.Invoke($"SIRT at COM{comport} not connected!");
+ errorMessageHandler?.Invoke(new string('-', 100));
+
+ break;
+ }
+ }
+
+ if (succeeded)
+ {
+ messageCallback = messageHandler;
+ errorMessageCallback = errorMessageHandler;
+ }
+
+ return succeeded;
+ }
+
+ public static bool StartProgramming(int frequency, uint address, string encryptionKey, int repeatsCount = 3)
+ {
+ var succeeded = true;
+ var encryptionBytes = encryptionKey.GetBytes();
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.WakeUpCmd = true;
+ task.DelPamSemi = true;
+ task.WakeUpModul = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new DummyPam();
+ }
+ , repeatsCount);
+ }
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.DelPamSemi = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new ResetAlarms(0xFF);
+ }
+ , repeatsCount);
+ }
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.DelPamSemi = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new ResetAlarms(0xFE);
+ }
+ , repeatsCount);
+ }
+
+ //if (succeeded)
+ //{
+ // succeeded = SendPAM(task =>
+ // {
+ // task.DelPamSemi = true;
+ // task.IsEncrypted = true;
+ // task.Frequency = frequency;
+ // task.RequestAddress = address;
+ // task.EncryptionKey = encryptionBytes;
+ // task.Data = ChangeWakeUp.GoSleepAutoOn;
+ // }
+ // , repeatsCount);
+ //}
+
+ return succeeded;
+ }
+
+ ///
+ /// Dispose all SIRT's globaly for the application.
+ ///
+ public static void Dispose()
+ {
+ void LogState(object state) => messageCallback?.Invoke(state?.ToString());
+
+ sirtHub.StateLogging += LogState;
+ sirtHub.Stop();
+ sirtHub.StateLogging -= LogState;
+
+ messageCallback = null;
+ errorMessageCallback = null;
+ }
+
+ private static bool ConnectSIRT(int portno, out string sirtId, out int frequency)
+ => sirtHub.TryOpen($"COM{portno}", out sirtId, out frequency);
+
+ private static bool SendPAM(Action taskOptions, int repeatsCount = 3)
+ {
+ void LogMessage(SIRTMessage message) => messageCallback?.Invoke(message.ToString());
+
+ var dashes = new string('-', 100);
+ var cordonelTask = new RFTask();
+ var succeeded = false;
+
+ taskOptions(cordonelTask);
+
+ cordonelTask.MessageSent += LogMessage;
+ cordonelTask.MessageReceived += LogMessage;
+
+ for (var i = 1; i <= repeatsCount && cordonelTask.State != SIRTTaskState.Completed && cordonelTask.State != SIRTTaskState.Cancelled; i++)
+ {
+ if (sirtHub.Start(cordonelTask))
+ {
+ cordonelTask.Wait();
+ }
+ }
+
+ cordonelTask.MessageReceived -= LogMessage;
+ cordonelTask.MessageSent -= LogMessage;
+
+ if (cordonelTask.State == SIRTTaskState.Completed)
+ {
+ succeeded = true;
+
+ messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}");
+ messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}");
+
+ var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]);
+ messageCallback?.Invoke($"{"PAM Status",20}: {pam}");
+
+ var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]);
+ messageCallback?.Invoke(alarm.ToString());
+ messageCallback?.Invoke(dashes);
+
+ var semi = new SEMI(cordonelTask.SEMI.Payload, 868);
+ }
+ else
+ {
+ succeeded = false;
+
+ messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}");
+ messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}");
+
+ var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]);
+ messageCallback?.Invoke($"{"PAM Status",20}: {pam}");
+
+ var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]);
+ messageCallback?.Invoke(alarm.ToString());
+ messageCallback?.Invoke(dashes);
+ }
+
+ return succeeded;
+ }
+ }
+}
diff --git a/Common/CommonCore.Configuration/CommonCore.Configuration.csproj b/Common/CommonCore.Configuration/CommonCore.Configuration.csproj
index c35066ed..fb275dff 100644
--- a/Common/CommonCore.Configuration/CommonCore.Configuration.csproj
+++ b/Common/CommonCore.Configuration/CommonCore.Configuration.csproj
@@ -21,7 +21,7 @@
full
false
bin\Debug\
- DEBUG;TRACE
+ TRACE;DEBUG
prompt
4
7.0
@@ -38,7 +38,7 @@
true
bin\_MANUAL_CONTROL\
- DEBUG;TRACE
+ TRACE;DEBUG
full
AnyCPU
prompt
@@ -81,6 +81,25 @@
bin\x64\Debug-local IIS-CUST\
+
+ true
+ bin\VPN_Debug\
+ TRACE;DEBUG;URI_OLD_DNS
+ full
+ AnyCPU
+ 7.0
+ prompt
+
+
+ true
+ bin\x64\VPN_Debug\
+ DEBUG;TRACE
+ full
+ x64
+ 7.0
+ prompt
+ MinimumRecommendedRules.ruleset
+
..\packages\Newtonsoft.Json.13.0.3\lib\net40\Newtonsoft.Json.dll
@@ -98,12 +117,17 @@
Properties\SharedAssemblyInfo.cs
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
diff --git a/Common/Production/ProductionUiCordonel/App.xaml.cs b/Common/Production/ProductionUiCordonel/App.xaml.cs
index e3aa5d75..403ad1c0 100644
--- a/Common/Production/ProductionUiCordonel/App.xaml.cs
+++ b/Common/Production/ProductionUiCordonel/App.xaml.cs
@@ -11,6 +11,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel
///
public partial class App
{
+ private static readonly String EolProcess = "ShippingUiCordonel";
+ private static readonly String PickingProcess = "AssemblyUiCordonel";
private void Application_Startup(Object sender, StartupEventArgs e)
{
switch (ConfigurationManager.AppSettings["Mode"])
@@ -18,21 +20,21 @@ namespace Xylem.Common.Production.ProductionUiCordonel
case "1":
var ProductionWindow = new ProductionWindow(
ProductionUiCordonel.Properties.Resources.StrEolSoftwareNameVersion,
- "ShippingUiCordonel", new EolProcessStateDef(), false);
+ EolProcess, new EolProcessStateDef(), false);
ProductionWindow.Show();
break;
case "2":
ProductionWindow = new ProductionWindow(
ProductionUiCordonel.Properties.Resources.StrPickingSoftwareNameVersion,
- "PickingUiCordonel", new PickingProcessStateDef(), true);
+ PickingProcess, new PickingProcessStateDef(), true);
ProductionWindow.Show();
break;
default:
ProductionWindow = new ProductionWindow(
ProductionUiCordonel.Properties.Resources.StrEolSoftwareNameVersion,
- "ShippingUiCordonel", new EolProcessStateDef(), false);
+ EolProcess, new EolProcessStateDef(), false);
ProductionWindow.Show();
break;
}
diff --git a/Common/Production/ProductionUiCordonel/ApplicationSettings.cs b/Common/Production/ProductionUiCordonel/ApplicationSettings.cs
deleted file mode 100644
index 34e52c25..00000000
--- a/Common/Production/ProductionUiCordonel/ApplicationSettings.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using Newtonsoft.Json;
-
-namespace Xylem.Common.Production.ProductionUiCordonel
-{
-
- ///
- /// Configuration of ProductionUi
- ///
- public class ApplicationSettings
- {
-
- public class Pos
- {
- public Double Left { get; set; }
- public Double Top { get; set; }
- public Double Height { get; set; }
- public Double Width { get; set; }
- }
- public class MultiFormChilds
- {
- public Type ViewModelType { get; set; }
- public Boolean Visisble { get; set; }
- public String Name { get; set; }
- public Int32 Slot { get; set; }
- public String TextPort { get; set; }
- public Pos StartPos { get; set; }
-
- }
- public Int32 Slot { get; set; }
-
- public Int32? PressureStationId { get; set; }
- public Boolean AutoDetect { get; set; }
-
- public Boolean AccessToPresuretestTab { get; set; }
- public Boolean AccessToMarrieTab { get; set; }
- public Boolean AccessToFinalcheckTab { get; set; }
-
- public Boolean AccessToSettingTab { get; set; }
- public Boolean AccessToStatusTab { get; set; }
- public Boolean AccessToPickingTab { get; set; }
-
-
- public Int32? SirtComport433 { get; set; }
- public Int32? SirtComport866 { get; set; }
- public Int32? SirtBoxNr { get; set; }
-
- public Int32? StationId { get; set; }
-
- public List ChildForms { get; set; }
-
- ///
- /// ctor
- ///
- public ApplicationSettings()
- {
- Slot = 0;
- AutoDetect = false;
- AccessToPresuretestTab = false;
- AccessToMarrieTab = false;
- AccessToFinalcheckTab = false;
- AccessToSettingTab = false;
- AccessToPickingTab = false;
- AccessToStatusTab = false;
- PressureStationId = null;
- SirtComport433 = null;
- SirtComport866 = null;
- SirtBoxNr = null;
- ChildForms = new List();
- StationId = null;
- }
- ///
- public ApplicationSettings(String file)
- {
- //var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- //nameof(Xylem.Common.Hardware.WaterMeter.Genesis), file);
-
- //if (!File.Exists(configFile))
- //{
- var configFile = Path.Combine(file);
- if (!File.Exists(configFile))
- {
- Slot = 0;
- AutoDetect = false;
- AccessToPresuretestTab = false;
- AccessToMarrieTab = false;
- AccessToFinalcheckTab = false;
- AccessToSettingTab = false;
- AccessToPickingTab = false;
- AccessToStatusTab = false;
- PressureStationId = null;
- ChildForms = new List();
- StationId = null;
- return;
- }
- //}
-
- using (var tr = new StreamReader(configFile))
- {
- var meterConfig = JsonConvert.DeserializeObject(tr.ReadToEnd());
- if (meterConfig != null)
- {
- Slot = meterConfig.Slot;
- AutoDetect = meterConfig.AutoDetect;
- AccessToPresuretestTab = meterConfig.AccessToPresuretestTab;
- AccessToMarrieTab = meterConfig.AccessToMarrieTab;
- AccessToFinalcheckTab = meterConfig.AccessToFinalcheckTab;
- AccessToSettingTab = meterConfig.AccessToSettingTab;
- AccessToPickingTab = meterConfig.AccessToPickingTab;
- AccessToStatusTab = meterConfig.AccessToStatusTab;
- PressureStationId = meterConfig.PressureStationId;
-
- ChildForms = meterConfig.ChildForms;
- StationId = meterConfig.StationId;
- }
- }
-
- }
-
- public void Update(String file)
- {
- var configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- nameof(Hardware.WaterMeter.Genesis), file);
-
- if (!File.Exists(configFile))
- {
- configFile = Path.Combine(file);
- }
-
- File.WriteAllText(file, JsonConvert.SerializeObject(this));
- }
-
-
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/BarcodeInput/Listener.cs b/Common/Production/ProductionUiCordonel/BarcodeInput/Listener.cs
deleted file mode 100644
index a5e49ac4..00000000
--- a/Common/Production/ProductionUiCordonel/BarcodeInput/Listener.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-//using System;
-//using System.Collections.Generic;
-//using System.Linq;
-//using System.Text;
-//using System.Threading.Tasks;
-//using System.Windows.Forms;
-
-//namespace ProductionUiCordonel.BarcodeInput
-//{
-// public class Listener : NativeWindow
-// {
-// ///
-// /// Initializes a new instance of the BarcodeScannerListener
-// /// class. The raw input devices that this class will listen to are
-// /// registered with the given window handle.
-// ///
-// /// the form that should listen for
-// /// barcode scans
-// /// if the form is null
-// /// if we are unable to register
-// /// for raw input devices
-// /// if an error occurs
-// /// during configuration
-// public Listener(Form form)
-// {
-// IntPtr hwnd;
-
-// if (form == null)
-// {
-// throw new ArgumentNullException("form");
-// }
-
-// hwnd = form.Handle;
-
-// HookRawInput(hwnd); // We'll take a look at this in a minute
-// this.HookHandleEvents(form);
-
-// this.AssignHandle(hwnd);
-// }
-// ///
-// /// Registers ourselves to listen to raw input from keyboard-like devices.
-// ///
-// /// the handle of the form that will receive the raw
-// /// input messages
-// /// if the call to register with the
-// /// raw input API fails for some reason
-// private static void HookRawInput(IntPtr hwnd)
-// {
-// NativeMethods.RAWINPUTDEVICE[] rid;
-
-// rid = new NativeMethods.RAWINPUTDEVICE[1];
-
-// rid[0].usUsagePage = 0x01; // USB HID Generic Desktop Page
-// rid[0].usUsage = 0x06; // Keyboard Usage ID
-// rid[0].dwFlags = NativeMethods.RawInputDeviceFlags.RIDEV_INPUTSINK;
-// rid[0].hwndTarget = hwnd;
-
-// if (!NativeMethods.RegisterRawInputDevices(rid, (uint)rid.Length, (uint)Marshal.SizeOf(rid[0])))
-// {
-// InvalidOperationException e;
-
-// e = new InvalidOperationException(
-// "The barcode scanner listener could not register for raw input devices.",
-// new Win32Exception());
-// throw e;
-// }
-// }
-
-// ///
-// /// Hooks into the form's HandleCreated and HandleDestoryed events
-// /// to ensure that we start and stop listening at appropriate times.
-// ///
-// /// the form to listen to
-// private void HookHandleEvents(Form form)
-// {
-// form.HandleCreated += this.OnHandleCreated;
-// form.HandleDestroyed += this.OnHandleDestroyed;
-// }
-
-// ///
-// /// When the form's handle is created, let's hook into it so we can see
-// /// the WM_INPUT event.
-// ///
-// /// the form whose handle was created
-// /// the event arguments
-// private void OnHandleCreated(object sender, EventArgs e)
-// {
-// this.AssignHandle(((Form)sender).Handle);
-// }
-
-// ///
-// /// When the form's handle is destroyed, let's unhook from it so we stop
-// /// listening and allow the OS to free up its resources.
-// ///
-// /// the form whose handle was destroyed
-// /// the event arguments
-// private void OnHandleDestroyed(object sender, EventArgs e)
-// {
-// this.ReleaseHandle();
-// }
-// }
-//}
diff --git a/Common/Production/ProductionUiCordonel/Data/FinalTestState.cs b/Common/Production/ProductionUiCordonel/Data/FinalTestState.cs
deleted file mode 100644
index 1981f6d7..00000000
--- a/Common/Production/ProductionUiCordonel/Data/FinalTestState.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-namespace ProductionUiCordonel.Data
-{
- ///
- /// Genesis meter final test states
- ///
- public enum FinalTestState
- {
- ///
- /// Idle (nothing to do)
- ///
- Idle,
- ///
- /// Start the initial execution
- ///
- StartInitial,
- ///
- /// Error handling
- ///
- Error,
- ///
- /// Single processing step failed
- ///
- StepFailed,
- ///
- /// Repeat last step
- ///
- RepeatStep,
- ///
- /// Repeat the entire final test
- ///
- RepeatFinalTest,
- ///
- /// Final test failed
- ///
- FinalTestFailed,
- ///
- /// Check the actual shipping state
- ///
- CheckShippingState,
- ///
- /// Check the attachments
- ///
- CheckAttachments,
- ///
- /// Check the order number
- ///
- CheckOrderNumber,
- ///
- /// Check the serial number
- ///
- CheckSerialNumber,
- ///
- /// Connect to Cordonel
- ///
- ConnectCordonel,
- ///
- /// Store all configurations to FLASH memory
- ///
- StoreAllConfigurations,
- ///
- /// Reboot the Cordonel to check all parameters being stored to FLASH memory
- ///
- RebootCordonel,
- ///
- /// Finalize process
- ///
- FinalizeProcess,
- ///
- /// Final parametrization fixed values
- ///
- FinalParametrizationFix,
- ///
- /// Final parametrization with VAKO and CSD
- ///
- FinalParametrizationVakoCsd,
- ///
- /// Read out all parametrization values
- ///
- FullReadOutParametrization,
- ///
- /// Check all settings for against required values
- ///
- ConfigurationCheck,
- ///
- /// Acquire, process set the password file
- ///
- ProcessPasswordFile,
- ///
- /// Process special configuration
- ///
- ProcessSpecialConfig,
- ///
- /// Prepare shipping mode
- ///
- PrepareShippingMode,
- ///
- /// Delimiter for list
- ///
- StateListDelimiter
- }
-}
\ No newline at end of file
diff --git a/Common/Production/ProductionUiCordonel/Data/FinalTestStateInfo.cs b/Common/Production/ProductionUiCordonel/Data/FinalTestStateInfo.cs
deleted file mode 100644
index bfcbca55..00000000
--- a/Common/Production/ProductionUiCordonel/Data/FinalTestStateInfo.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.Linq;
-using ProductionUiCordonel.Properties;
-
-namespace ProductionUiCordonel.Data
-{
- ///
- /// Concatenation of state and string
- ///
- public static class FinalTestStateInfo
- {
- ///
- /// Build state information
- ///
- private static readonly FinalTestStateText[] StateInfos;
-
- ///
- /// Ctor
- ///
- static FinalTestStateInfo()
- {
- StateInfos = new FinalTestStateText[(Int32)FinalTestState.StateListDelimiter];
- StateInfos[(Int32)FinalTestState.Idle].State = FinalTestState.Idle;
- StateInfos[(Int32)FinalTestState.Idle].Message = Resources.StrStateIdle;
-
- StateInfos[(Int32)FinalTestState.StartInitial].State = FinalTestState.StartInitial;
- StateInfos[(Int32)FinalTestState.StartInitial].Message = Resources.StrStateStartInitial;
-
- }
-
- ///
- /// Get the current information
- ///
- /// state to search for information text
- public static String GetTextFromState(FinalTestState state)
- {
- return (from stateInfo in StateInfos
- where stateInfo.State == state
- select stateInfo.Message).FirstOrDefault();
- }
- ///
- /// Get the state of the text
- ///
- /// information text to search if state is assigned
- public static FinalTestState GetStateFromText(String text)
- {
- return (from stateInfo in StateInfos
- where stateInfo.Message == text
- select stateInfo.State).FirstOrDefault();
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Data/FinalTestStateText.cs b/Common/Production/ProductionUiCordonel/Data/FinalTestStateText.cs
deleted file mode 100644
index 4bfd80cf..00000000
--- a/Common/Production/ProductionUiCordonel/Data/FinalTestStateText.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace ProductionUiCordonel.Data
-{
- ///
- /// Concatenation between final test state and text
- ///
- public struct FinalTestStateText
- {
- ///
- /// The state of the final test
- ///
- public FinalTestState State;
- ///
- /// The message text of the final test state
- ///
- public String Message;
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Data/PickingResultData.cs b/Common/Production/ProductionUiCordonel/Data/PickingResultData.cs
deleted file mode 100644
index da089f8e..00000000
--- a/Common/Production/ProductionUiCordonel/Data/PickingResultData.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-using System;
-using System.Windows.Media;
-using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
-using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Data
-{
- public class PickingItemCheckReturn
- {
- public Boolean? Result;
- public String Msg;
- }
-
-public abstract class PickingResultBaseData : IPickingResultData
- {
- public String Ident { get; set; }
-
- public Int32 Index { get; set; }
-
- public String CheckText { get; set; }
-
- public String CurrentValueText { get; set; }
-
- public Boolean? Result { get; set; }
-
- public Boolean HasError { get; set; }
-
- public Brush ResultColor => getColorFromResult();
- public abstract Func Action { get; }
-
- private Brush getColorFromResult()
- {
- var converter = new BrushConverter();
- var brush = (Brush)converter.ConvertFromString("#000000");
-
- if (Result.HasValue) // && a.Result.Value ))
- {
- if (!Result.Value)
- {
- brush = (Brush)converter.ConvertFromString("#FF8000");
- }
- else
- {
- brush = (Brush)converter.ConvertFromString("#419C14");
- }
-
- }
- return brush;
- }
-
- }
- public interface IPickingResultData
- {
- String Ident { get; set; }
-
- Int32 Index { get; set; }
- String CheckText { get; set; }
-
- String CurrentValueText { get; set; }
-
- Boolean? Result { get; set; }
-
- Boolean HasError { get; set; }
-
- Brush ResultColor { get; }
-
- Func Action { get; }
- }
- public class PickingResultRegisterData : PickingResultBaseData
- {
- public String RegisterIdent { get; set; }
-
- public GenesisMeter ReadMeter { get; set; }
-
- public Object CompareObject { get; set; }
-
- public override Func Action => staticReadAndCompareAction();
-
- public Func staticReadAndCompareAction()
- {
- return delegate
- {
- var retComp = new PickingItemCheckReturn();
- retComp.Result = null;
- retComp.Msg = "-";
- if (ReadMeter != null && ReadMeter.IsLoggedOn)
- {
- var r = ReadMeter.ReadRegister(RegisterIdent);
-
- if (CompareObject is UInt32 intNumber)
- {
- retComp.Result = intNumber.Equals(RegisterConverter.ByteArrayToValue(r));
- retComp.Msg = intNumber.ToString();
- }
- else if (CompareObject is Boolean boolCompare)
- {
- retComp.Result = boolCompare.Equals(RegisterConverter.ByteArrayToValue(r));
- retComp.Msg = boolCompare.ToString();
- }
-
- }
-
- return retComp;
- };
- }
- }
-
- public class PickingResultCustomCheckData : PickingResultBaseData
- {
-
- public PickingResultCustomCheckData(Func action)
- {
- _action = action;
- }
-
- public readonly Func _action;
- public override Func Action => _action;
- }
-
-}
diff --git a/Common/Production/ProductionUiCordonel/Data/PressureResultDataNotifyable.cs b/Common/Production/ProductionUiCordonel/Data/PressureResultDataNotifyable.cs
deleted file mode 100644
index d5468de5..00000000
--- a/Common/Production/ProductionUiCordonel/Data/PressureResultDataNotifyable.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-using System;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using Xylem.Common.Logic.ProductionOrderCore.TestResults;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Data
-{
- public class PressureResultDataNotifyable : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
-
-
- protected virtual void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
- public PressureResultDataNotifyable(PressureResultData baseData)
- {
- LeakRate = baseData.LeakRate;
- Passed = baseData.Passed;
- PcbId = baseData.PcbId;
- Remark = baseData.Remark;
- Rev = baseData.Rev;
- TesterName = baseData.TesterName;
- Testpoints = new ObservableCollection();
- baseData.TestPoints.ForEach(o => Testpoints.Add(o));
- TestPressure = baseData.TestPressure;
- }
- public PressureResultDataNotifyable()
- {
-
- }
- public void InternalPropertyChanged(String propertyName = "")
- {
- NotifyPropertyChanged(propertyName);
- }
-
-
- public String PcbId;
-
-
- private Int32 rev;
-
- public Int32 Rev
- {
- get => rev;
- set
- {
- rev = value;
- InternalPropertyChanged(nameof(Rev));
- }
- }
- private Boolean? passed = false;
- public Boolean? Passed
- {
- get => passed;
- set
- {
- passed = value;
- InternalPropertyChanged(nameof(Passed));
- }
- }
-
-
-
- private String testerName = "C. Röhl";
- public String TesterName
- {
- get => testerName;
- set
- {
- testerName = value;
- InternalPropertyChanged(nameof(TesterName));
- }
- }
-
- private String testPressure = "6";
- public String TestPressure
- {
- get => testPressure;
- set
- {
- testPressure = value;
- InternalPropertyChanged(nameof(TestPressure));
- }
- }
-
-
- private String leakRate = " 0,00001";
- public String LeakRate
- {
- get => leakRate;
- set
- {
- leakRate = value;
- InternalPropertyChanged(nameof(LeakRate));
- }
- }
-
- private String remark = "";
- public String Remark
- {
- get => remark;
- set
- {
- remark = value;
- InternalPropertyChanged(nameof(Remark));
- }
- }
-
-
- private ObservableCollection testpoints = new ObservableCollection
- {
- new PressureTestPoints { Ident = 1, Input = "2E-07" },
- new PressureTestPoints { Ident = 2, Input = "2E-07" },
- new PressureTestPoints { Ident = 3, Input = "2E-07" },
- new PressureTestPoints { Ident = 4, Input = "2E-07" },
- new PressureTestPoints { Ident = 5, Input = "2E-07" },
- new PressureTestPoints { Ident = 6, Input = "2E-07" },
- new PressureTestPoints { Ident = 7, Input = "2E-07" },
- new PressureTestPoints { Ident = 8, Input = "2E-07" },
- new PressureTestPoints { Ident = 9, Input = "2E-07" },
- new PressureTestPoints { Ident = 10, Input = "2E-07" }
- };
- public ObservableCollection Testpoints
- {
- get => testpoints;
- set
- {
- testpoints = value;
- InternalPropertyChanged(nameof(Testpoints));
- }
- }
-
- internal void SetAllTestPoints(String input)
- {
- foreach (var item in Testpoints)
- {
- item.Input = input;
- }
- InternalPropertyChanged(nameof(Testpoints));
- }
- public PressureResultData ToBase()
- {
- var baseData = new PressureResultData();
- baseData.LeakRate = LeakRate;
- baseData.Passed = Passed;
- baseData.PcbId = PcbId;
- baseData.Remark = Remark;
- baseData.Rev = Rev;
- baseData.TesterName = TesterName;
- baseData.TestPoints = Testpoints.ToList();
- baseData.TestPressure = TestPressure;
- return baseData;
- }
-
- }
-}
-
diff --git a/Common/Production/ProductionUiCordonel/Docu/EolRelease.txt b/Common/Production/ProductionUiCordonel/Docu/EolRelease.txt
index 433f7316..8c39127e 100644
--- a/Common/Production/ProductionUiCordonel/Docu/EolRelease.txt
+++ b/Common/Production/ProductionUiCordonel/Docu/EolRelease.txt
@@ -12,10 +12,12 @@ RESTRICTIONS:
- None.
LATEST:
-2.7.6 - 2025-Aug-12
-- Signal comparison error on failed communication for previuosly written configurations.
+2.7.7 - 2025-Aug-14
+- New database.
CHANGELOG:
+2.7.6 - 2025-Aug-13
+- Signal comparison error on failed communication for previuosly written configurations.
2.7.5 - 2025-Aug-12
- Check powermon remaining seconds for shipping threshold,
- Restructured production process sequence.
diff --git a/Common/Production/ProductionUiCordonel/Docu/ProductionUiCordonel.qea b/Common/Production/ProductionUiCordonel/Docu/ProductionUiCordonel.qea
index 4ecc35b0..bbb7f9eb 100644
Binary files a/Common/Production/ProductionUiCordonel/Docu/ProductionUiCordonel.qea and b/Common/Production/ProductionUiCordonel/Docu/ProductionUiCordonel.qea differ
diff --git a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASMBLY_SRSe.docx b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASBL_SRSe.docx
similarity index 88%
rename from Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASMBLY_SRSe.docx
rename to Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASBL_SRSe.docx
index 5c7e2ce1..96b8e1f8 100644
Binary files a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASMBLY_SRSe.docx and b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_ASBL_SRSe.docx differ
diff --git a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SDDe.doc b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SDDe.doc
index 35e01172..cc6f4ed8 100644
Binary files a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SDDe.doc and b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SDDe.doc differ
diff --git a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SRSe.docx b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SRSe.docx
index e72f8c31..86575832 100644
Binary files a/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SRSe.docx and b/Common/Production/ProductionUiCordonel/Docu/TBF_COM_EOL_SRSe.docx differ
diff --git a/Common/Production/ProductionUiCordonel/Event/StringArgs.cs b/Common/Production/ProductionUiCordonel/Event/StringArgs.cs
deleted file mode 100644
index 06808c93..00000000
--- a/Common/Production/ProductionUiCordonel/Event/StringArgs.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Event
-{
- public class StringArgs : EventArgs
- {
- public readonly String Content;
- public StringArgs(String content)
- {
- Content = content;
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/IMultiModeChildViewModel.cs b/Common/Production/ProductionUiCordonel/Model/IMultiModeChildViewModel.cs
deleted file mode 100644
index dbd07012..00000000
--- a/Common/Production/ProductionUiCordonel/Model/IMultiModeChildViewModel.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public interface IMultiModeChildViewModel : INotifyPropertyChanged, IDisposable
- {
- String GetChildIdent();
-
- void InputText(String text);
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/MarriageMultiModeViewModel.cs b/Common/Production/ProductionUiCordonel/Model/MarriageMultiModeViewModel.cs
deleted file mode 100644
index 2048f0d5..00000000
--- a/Common/Production/ProductionUiCordonel/Model/MarriageMultiModeViewModel.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Threading.Tasks;
-using System.Windows;
-using Xylem.Common.CommonCore.Configuration;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
-using Xylem.Common.Logic.SoftwareAccessHelper;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public class MarriageMultiModeViewModel : BaseMultiModeChildViewModel
- {
- private Boolean canMarry;
- public Boolean CanMarry
- {
- get => canMarry;
- set
- {
- canMarry = value;
- NotifyPropertyChanged();
- }
- }
-
-
- private Int32 serialNr;
- public Int32 SerialNr
- {
- get => serialNr;
- set
- {
- serialNr = value;
- NotifyPropertyChanged();
- }
- }
-
-
- private Boolean locked = false;
- public MarriageMultiModeViewModel(String ctrName, Int32 slotNR, List barcodeTrigger, Int32? stationID = null) :
- base(ctrName, slotNR, barcodeTrigger, stationID)
- {
- VisibilityMarriage = Visibility.Visible;
- MeterDetectedHandler += PickingMultiModeViewModel_MeterDetectedHandler;
- }
-
- internal async Task Store()
- {
- var url = $"{ServiceUrls.MarriageServiceUrl()}SetPcbToSerial?PcbId={CurrentPcbID}&SerialNumber={SerialNr}&returnMetroData=0";
-
- return await Task.Run(() =>
- {
- try
- {
-
- //url = "http://10.49.40.25/MeterProcessState/api/Marriage/SetPcbToSerial?PcbId=201420242&SerialNumber=20728820&returnMetroData=1";
- var resp = LocalWebRequest.GetRequest(url);
-
- if (!string.IsNullOrEmpty(resp))
- {
- if (CurrentMeter != null)
- {
- CurrentMeter.Login();
- //if (resp.Trim() != "store")
- //{
-
-
- // var myJsonResponse = JsonConvert.DeserializeObject>(resp);
- // foreach (var item in myJsonResponse)
- // {
- // CurrentMeter.WriteRegister(item.RegisterName, item.RegisterValue);
- // }
- //}
- CurrentMeter.SetProcessState(DisplayCodes.Mounted);
- CurrentMeter.GetLastProcessState();
- }
-
- return true;
- }
-
- Log($"No result for {url} on Store");
- return false;
-
-
- }
- catch (Exception ex)
- {
- if (ex is WebException)
- {
- Log($"Error on Store {url}: {Environment.NewLine} {((WebException)ex).Message}");
- }
- else
- {
- Log(ex.Message);
- }
-
-
- }
- return false;
-
- });
- }
-
- private void PickingMultiModeViewModel_MeterDetectedHandler(Object sender, EventArgs e)
- {
- CheckBtnEnable();
- }
-
- private void CheckBtnEnable()
- {
- if (SerialNr > 0 && !string.IsNullOrEmpty(CurrentPcbID))
- {
- CanMarry = true;
- }
- else
- {
- CanMarry = false;
- }
-
- }
-
-
-
- public override void InputText(String text)
- {
- try
- {
- SerialNr = 0;
- text = text.Replace(" ", "");
- var preFix = "8SEN20";
- if (text.Contains(preFix) && text.Contains(","))
- {
- var tmpSerialNr = 0;
- var srText = text.Substring(text.IndexOf(preFix) + preFix.Length, text.IndexOf(",") - preFix.Length);
- if (int.TryParse(srText, out tmpSerialNr))
- {
- SerialNr = tmpSerialNr;
- }
- }
- CheckBtnEnable();
- }
- catch (Exception ex)
- {
- Log(ex.Message);
- }
- finally
- {
- CheckBtnEnable();
- }
-
-
- }
-
- public override Boolean SlotIsLocked()
- {
- return locked;
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/MultiModeChildViewModel.cs b/Common/Production/ProductionUiCordonel/Model/MultiModeChildViewModel.cs
deleted file mode 100644
index a401b1d7..00000000
--- a/Common/Production/ProductionUiCordonel/Model/MultiModeChildViewModel.cs
+++ /dev/null
@@ -1,332 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-using System.Timers;
-using System.Windows;
-using NLog;
-using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
-using Xylem.Common.Utils.Logging;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public abstract class BaseMultiModeChildViewModel : IMultiModeChildViewModel
- {
-
- private readonly ILogger _logger;
-
- private Timer tmrAutoDetect;
-
- public EventHandler OnPcbIdDetect;
- public List BarcodeTrigger = new List();
-
- private Int32 intervalWithoutDetect = 1000;
- private Int32 intervalWithDetect = 10000;
- private String _currentPcbID;
- private MeterBatch Batch = new MeterBatch();
- private Visibility visibilityMarriage = Visibility.Collapsed;
- public Visibility VisibilityMarriage
- {
- get => visibilityMarriage;
- set
- {
- visibilityMarriage = value;
-
- NotifyPropertyChanged();
- }
- }
-
- private Visibility visibilityPicking = Visibility.Collapsed;
- public Visibility VisibilityPicking
- {
- get => visibilityPicking;
- set
- {
- visibilityPicking = value;
-
- NotifyPropertyChanged();
- }
- }
-
- private Visibility visibilityPressure = Visibility.Collapsed;
- public Visibility VisibilityPressure
- {
- get => visibilityPressure;
- set
- {
- visibilityPressure = value;
-
- NotifyPropertyChanged();
- }
- }
-
-
- public String currentSlotStateText = "none";
- public String CurrentSlotStateText
- {
- get => currentSlotStateText;
- set
- {
- currentSlotStateText = value;
-
- NotifyPropertyChanged();
- }
- }
-
-
-
-
- private SlotState currentSlotState = SlotState.None;
- public SlotState CurrentSlotState
- {
- get => currentSlotState;
- set
- {
- currentSlotState = value;
- switch (currentSlotState)
- {
- case SlotState.None:
- CurrentSlotStateText = "Keiner";
- break;
- case SlotState.IsDetecting:
- CurrentSlotStateText = "Warte auf Zähler Kontakt";
- break;
- case SlotState.Detected:
- CurrentSlotStateText = "Zähler detektiert";
- break;
- case SlotState.InProgress:
- CurrentSlotStateText = "Zähler wird bearbeitet";
- break;
- case SlotState.Done:
- CurrentSlotStateText = "Zähler wurde bearbeitet";
- break;
- case SlotState.ConnectionLost:
- CurrentSlotStateText = "Verbindung getrennt";
- break;
- case SlotState.Error:
- CurrentSlotStateText = "Fehler beim bearbeitet";
- break;
- case SlotState.Fatal:
- CurrentSlotStateText = "Schwerwiegender Fehler";
- break;
- }
- NotifyPropertyChanged();
- }
- }
-
-
- private String slotInfo = "-";
- public String SlotInfo
- {
- get => slotInfo;
- set
- {
- slotInfo = value;
- NotifyPropertyChanged();
- }
- }
-
-
- public enum SlotState
- {
- None,
- IsDetecting,
- Detected,
- InProgress,
- Done,
- ConnectionLost,
- Error,
- Fatal
- }
- private String childName = "asd";
- public String ChildName
- {
- get => childName;
- set
- {
- childName = value;
- NotifyPropertyChanged();
- }
- }
-
- private String order;
- public String Order
- {
- get => order;
- set
- {
- order = value;
- NotifyPropertyChanged();
- }
- }
-
-
- public String CurrentPcbID
- {
- get => _currentPcbID;
- set
- {
- _currentPcbID = value;
-
- NotifyPropertyChanged();
- }
- }
-
-
- public GenesisMeter CurrentMeter { get; private set; }
-
- public event PropertyChangedEventHandler PropertyChanged;
-
- protected virtual void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
- public String GetChildIdent()
- {
- return ChildName;
- }
-
-
- public Int32 SlotNr;
- public BaseMultiModeChildViewModel(String ctrName, Int32 slotNR,List barcodeTrigger, Int32? StationId = null, Boolean useTimer = true)
- {
- _logger = NLogHelper.CreateOrGetLogger("ProductionUI");
- ChildName = ctrName;
- SlotNr = slotNR;
- SlotInfo = SlotNr.ToString();
- if (useTimer)
- {
- tmrAutoDetect = new Timer(intervalWithoutDetect);
- tmrAutoDetect.Elapsed += TmrAutoDetect_Elapsed;
- tmrAutoDetect.Enabled = true;
- }
-
- BarcodeTrigger = barcodeTrigger;
-
- }
- public void TmrAutoDetect_Elapsed(Object sender, EventArgs e)
- {
- CurrentSlotState = SlotState.IsDetecting;
- tmrAutoDetect.Enabled = false;
- var hasDetect = Detect(SlotNr);
- if (hasDetect)
- {
- CurrentSlotState = SlotState.Detected;
- tmrAutoDetect.Interval = intervalWithDetect;
-
- }
- else
- {
- tmrAutoDetect.Interval = intervalWithoutDetect;
- }
- tmrAutoDetect.Enabled = true;
- }
-
- public void TextForceUpdate()
- {
- var hasDetect = Detect(SlotNr);
- if (hasDetect)
- {
- CurrentSlotState = SlotState.Detected;
-
- }
- }
-
- public virtual void InputText(String text)
- {
- Order = text;
- }
-
- public void Log(String txt)
- {
- _logger?.Info(txt);
- }
- public abstract Boolean SlotIsLocked();
-
- public event EventHandler MeterDetectedHandler;
- private Boolean Detect(Int32 slot)
- {
- if (!SlotIsLocked())
- {
- Log("Start Detect");
- Boolean hasDetect = false;
- if (string.IsNullOrEmpty(CurrentPcbID) || CurrentMeter == null)
- {
- Batch = new MeterBatch();
- var tryMeter = new GenesisMeter();
- try
- {
- tryMeter.SetupFromConfigFile(slot);
- Batch.AddMeter(tryMeter);
- tryMeter.Logout();
- Log("Try to get PcbID");
- CurrentPcbID = tryMeter.GetPcbId();
-
- hasDetect = !string.IsNullOrEmpty(CurrentPcbID);
- CurrentMeter = tryMeter;
- if (hasDetect)
- {
- Log($"New PcbID detected {CurrentPcbID}");
- MeterDetectedHandler?.Invoke(CurrentMeter, EventArgs.Empty);
- }
- else
- {
- Log("No Meter found");
- DisposeAllConnections();
- }
-
- }
- catch (Exception e)
- {
- Log($"Error occur.{ Environment.NewLine} {e.Message}");
- }
-
- }
- else
- {
- Log("Check if Meter is still connected");
- var ret = CurrentMeter.GetPcbId();
- if (string.IsNullOrEmpty(ret) || ret != CurrentPcbID)
- {
- Log("Meter connection lost");
- hasDetect = false;
- DisposeAllConnections();
-
- CurrentPcbID = "";
- }
- else
- {
- Log("Meter is still connected");
- hasDetect = true;
- }
- }
- return hasDetect;
- }
-
- Log("Meter is still connected (locked)");
- return true;
- }
-
- private void DisposeAllConnections()
- {
- MeterDetectedHandler?.Invoke(null, EventArgs.Empty);
- if (Batch != null)
- {
- Batch.RemoveAllMeters();
- if (CurrentMeter != null)
- {
- CurrentMeter.Dispose();
- }
- Batch.Dispose();
- }
-
- }
-
- public void Dispose()
- {
- DisposeAllConnections();
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/MultiModeMasterViewModel.cs b/Common/Production/ProductionUiCordonel/Model/MultiModeMasterViewModel.cs
deleted file mode 100644
index 928fa233..00000000
--- a/Common/Production/ProductionUiCordonel/Model/MultiModeMasterViewModel.cs
+++ /dev/null
@@ -1,516 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.IO.Ports;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Media;
-using Logic.ProductionToProductMapper.Cordonel;
-using Newtonsoft.Json;
-using Xylem.Common.CommonCore.Configuration;
-using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
-using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
-using Xylem.Common.Logic.SoftwareAccessHelper;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- internal class MultiModeMasterViewModel : INotifyPropertyChanged
- {
- private String pickingState = "Warte auf Scanner";
- private String pickingScanner = "keine Verbindung";
- private String pickingSlot = "-";
- private String pickingResult = "-";
-
- private Brush pickingResultColor;
- public Brush PickingResultColor
- {
- get => pickingResultColor;
- set
- {
- pickingResultColor = value;
- NotifyPropertyChanged();
- }
- }
- public String PickingState
- {
- get => pickingState;
- set
- {
- pickingState = value;
- NotifyPropertyChanged();
- }
- }
- public String PickingScanner
- {
- get => pickingScanner;
- set
- {
- pickingScanner = value;
- NotifyPropertyChanged();
- }
- }
- public String PickingSlot
- {
- get => pickingSlot;
- set
- {
- pickingSlot = value;
- NotifyPropertyChanged();
- }
- }
- public String PickingResult
- {
- get => pickingResult;
- set
- {
- pickingResult = value;
- NotifyPropertyChanged();
- }
- }
- public event PropertyChangedEventHandler PropertyChanged;
- protected virtual void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
- {
-
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
-
-
-
- public void StartPicking(CancellationTokenSource cancle)
- {
- var s = new Task(() => { PickingLoop(cancle.Token); }, cancle.Token);
- s.Start();
- }
- public enum PickingStateMachine
- {
- Init,
- WaitForScanning,
- ScanningDone,
- WaitForDetect,
- GetOrderDetails,
- Compare,
- MeterDone,
- MeterError,
- StartCom,
- WaitForBuildingMeterReady,
- WaitForBuildingPressureReady,
- }
- private PickingStateMachine sm = PickingStateMachine.Init;
-
- private class BarScanner : IDisposable
- {
- private Boolean isRuning;
- public String Input = "";
- private String Port;
- private CancellationToken Cancellation;
- private Task WaitForScannerTask;
- public BarScanner(String port, CancellationToken cancellation)
- {
- Port = port;
- Cancellation = cancellation;
- }
- public void Start()
- {
- if (!isRuning)
- {
- if (Port == null)
- {
- return;
- }
- WaitForScannerTask = new Task(() =>
- {
- using (var a = new SerialPort(Port))
- {
- a.Open();
- a.NewLine = "\r";
- while (true)
- {
- if (Cancellation.IsCancellationRequested)
- {
- isRuning = false;
- break;
- }
-
- Input = a.ReadLine();
- a.Close();
- isRuning = false;
- break;
- }
- }
-
-
- }, Cancellation);
- WaitForScannerTask.Start();
- }
- }
-
- public void Dispose()
- {
- if (WaitForScannerTask.Status != TaskStatus.Faulted && WaitForScannerTask.Status != TaskStatus.RanToCompletion && WaitForScannerTask.Status != TaskStatus.Canceled)
- {
- WaitForScannerTask.Dispose();
- }
-
- }
- }
-
-
- public Boolean Compare(Dictionary checkAppsIdVersion, UInt32 Frequency, UInt32 MeterSize, Boolean PressurePresent)
- {
- using (var Batch = new MeterBatch())
- {
-
- using (var meter = new GenesisMeter())
- {
-
- meter.SetupFromConfigFile(PickingSlotNr);
- Batch.AddMeter(meter);
- PickingState = "Am Zähler anmelden";
- if (meter.Login())
- {
- meter.SetProcessState(DisplayCodes.PickingStarted);
- var ret = RunCheck(checkAppsIdVersion, Frequency, MeterSize, PressurePresent, meter);
-
- if (ret)
- {
- meter.SetProcessState(DisplayCodes.PickingTested);
- var url = $"{ServiceUrls.MeterProcessStateUrl()}SetPickingState?PcbID={meter.PcbId}&FertigungsauftragsNr={PickingOrder}";
- var RetString = LocalWebRequest.PostRequestAsyncAndGetContent(url);
-
- var result = false;
- if (bool.TryParse(RetString, out result))
- {
- return result;
-
- }
- }
- else
- {
- meter.SetProcessState(DisplayCodes.PickingFailed);
- }
- }
- }
- }
- return false;
- }
-
- private Boolean RunCheck(Dictionary checkAppsIdVersion, UInt32 Frequency, UInt32 MeterSize, Boolean PressurePresent, GenesisMeter meter)
- {
- PickingState = "Üperprüfe Parameter";
- var FrequencyReadOut = RegisterConverter.ByteArrayToValue(meter.ReadRegister("SENSUSRADIO_FrequencyIndicator"));
- if (FrequencyReadOut != Frequency)
- {
- PickingState = $"Falsche Frequenz! soll {Frequency}MHz ist {FrequencyReadOut}MHz";
- return false;
- }
-
- var MeterSizeReadOut = RegisterConverter.ByteArrayToValue(meter.ReadRegister("GENESISFLOW_MeterSize"));
- if (MeterSizeReadOut != MeterSize)
- {
- PickingState = $"Meter Dn falsch! soll {MeterSize}DN ist {MeterSizeReadOut}DN";
- return false;
- }
-
-
- var PressureReadOut = RegisterConverter.ByteArrayToValue(meter.ReadRegister("METROLOGYASST_PressurePresent"));
- if (PressureReadOut != PressurePresent)
- {
- if (PressurePresent)
- {
- PickingState = "Pcb mit Drucksensor. Laut Auftrag keine verbaut";
- }
- else
- {
- PickingState = "Pcb ohne Drucksensor. Laut Auftrag soll eine verbaut werden";
- }
- //todo raus
- return false;
- }
-
- foreach (var item in checkAppsIdVersion)
- {
-
- try
- {
- var MeterFWApp = meter.MeterAppListVersion.First(a => item.Key == a.AppId);
- if (MeterFWApp == null || MeterFWApp.Version != item.Value)
- {
- PickingState = "Falsche FW, bitte Updaten";
- return false;
- }
-
- }
- catch (Exception)
- {
- PickingState = "Fehler beim auslesen der FW";
- return false;
- }
-
-
- }
-
-
- try
- {
- meter.WriteRegister("METROLOGYASST_StoreConfiguration", 1);
- Thread.Sleep(100);
- var storeRet = meter.ReadRegister("METROLOGYASST_StoreConfiguration");
- if (!storeRet.All(a => a.Equals(0)))
- {
- PickingState = "Filesystem corrupt";
- return false;
- }
-
- }
- catch (Exception)
- {
- PickingState = "Fehler beim überprüfen des Filesystems";
- return false;
- }
-
- return true;
- }
-
- private PickingCompareItem PickingOrderDetails;
- private BarScanner PickingBarScanner;
- private String PickingOrder;
- private String PickingPcbId;
-
-
- private String PickingScannerPort = "COM6";
- private Int32 PickingSlotNr = 1;
- //PickingState,PickingScanner,PickingSlot,PickingResult
- private void PickingLoop(CancellationToken token)
- {
- while (!token.IsCancellationRequested)
- {
- switch (sm)
- {
- case PickingStateMachine.Init:
- PickingState = "Initialisierung";
- PickingSlot = $"Inaktiv EP {PickingSlotNr}";
- PickingScanner = $"Geschlossen {PickingScannerPort}";
- //CheckAllPorts?
-
- sm = PickingStateMachine.StartCom;
-
- break;
- case PickingStateMachine.StartCom:
- PickingOrderDetails = null;
- PickingScanner = $"Öfffne {PickingScannerPort}";
- //CheckAllPorts?
- PickingBarScanner = new BarScanner(PickingScannerPort, token);
- PickingBarScanner.Start();
-
- sm = PickingStateMachine.WaitForScanning;
-
- break;
- case PickingStateMachine.WaitForScanning:
- PickingScanner = $"Offen {PickingScannerPort}";
- PickingState = $"Warte auf Scannereingabe({PickingScannerPort})";
- if (PickingBarScanner != null && !string.IsNullOrEmpty(PickingBarScanner.Input))
- {
- PickingOrder = PickingBarScanner.Input;
- PickingScanner = $"Geschlossen {PickingScannerPort}";
- PickingBarScanner = null;
-
-
- sm = PickingStateMachine.WaitForDetect;
-
- }
-
- break;
- case PickingStateMachine.WaitForDetect:
- using (var Batch = new MeterBatch())
- {
-
- using (var tryMeter = new GenesisMeter())
- {
- try
- {
- PickingState = "Warte auf Pcb";
- PickingSlot = $"Öffne EP {PickingSlotNr}";
- tryMeter.SetupFromConfigFile(PickingSlotNr);
- Batch.AddMeter(tryMeter);
- tryMeter.Logout();
- Log("Try to get PcbID");
- PickingPcbId = tryMeter.GetPcbId();
-
- var hasDetect = !string.IsNullOrEmpty(PickingPcbId);
-
- if (hasDetect)
- {
-
- PickingState = $"Pcb gefunden {PickingPcbId}";
- Log($"New PcbID detected {PickingPcbId}");
- sm = PickingStateMachine.GetOrderDetails;
- }
- else
- {
- PickingSlot = $"Keine Konnektivität EP {PickingSlotNr}";
- Log("No Meter found");
-
- }
-
- }
- catch (Exception e)
- {
- Log($"Error occur.{ Environment.NewLine} {e.Message}");
- }
- }
- }
-
- break;
- case PickingStateMachine.GetOrderDetails:
-
- PickingState = $"Lade Auftragsdaten {PickingOrder}";
- var retCode = 0;
- var str = LocalWebRequest.GetRequestWithError($"{ServiceUrls.GenesisFinalCheckServiceUrl()}GetOrderOverview?ProductionOrderNumber={PickingOrder}&CheckPcbId={PickingPcbId}", out retCode, 15000);
- if (retCode == 417)
- {
- sm = PickingStateMachine.MeterError;
- PickingResult = "Keine Radio Parameter";
- }
- else
- {
- var retStr = JsonConvert.DeserializeObject(str);
- PickingOrderDetails = retStr.PickingCompareItem;
-
- if (retStr.OrderOverViewCordonel.Count == retStr.OrderOverViewCordonel.AssignedPicking)
- {
- PickingResult = "Auftrag schon komplett";
- sm = PickingStateMachine.MeterError;
- }
- else
- {
- PickingState = $"Auftragsdaten geladen {PickingOrder}";
- sm = PickingStateMachine.Compare;
- }
- }
-
- break;
- case PickingStateMachine.Compare:
- //Compare
- PickingState = $"Vergleiche Auftragsdaten {PickingOrder} mit Pcb Eigenschaften";
-
-
- var converter = new BrushConverter();
- if (Compare(PickingOrderDetails.CheckAppsIdVersion, PickingOrderDetails.FrequencyIndicator, PickingOrderDetails.MeterSize, PickingOrderDetails.PressurePresent))
- {
- //erfolg anzeigen und weiter
- var b = (Brush)converter.ConvertFromString("#419C14");
- b.Freeze();
- PickingResultColor = b;
- sm = PickingStateMachine.MeterDone;
- }
- else
- {
- sm = PickingStateMachine.MeterError;
-
- var b = (Brush)converter.ConvertFromString("#FF8000");
- b.Freeze();
- PickingResultColor = b;
- }
- break;
- case PickingStateMachine.MeterError:
- PickingOrderDetails = null;
- PickingState = "Vergleich abgeschlossen";
- PickingResult = "Vergleich fertig fehlgeschlagen";
- Thread.Sleep(10000);
- sm = PickingStateMachine.StartCom;
-
- break;
- case PickingStateMachine.MeterDone:
-
-
- PickingState = "Vergleich abgeschlossen warten auf Montage Rückmeldung";
- PickingResult = $"Pcb {PickingPcbId} wurde dem Auftrag {PickingOrder} hinzugefügt";
- Thread.Sleep(10000);
- PickingScanner = $"Öfffne {PickingScannerPort}";
- PickingBarScanner = new BarScanner(PickingScannerPort, token);
-
- PickingBarScanner.Start();
- sm = PickingStateMachine.WaitForBuildingMeterReady;
-
- //CheckAllPorts?
-
-
-
- break;
- case PickingStateMachine.WaitForBuildingMeterReady:
-
- if (PickingBarScanner != null && !string.IsNullOrEmpty(PickingBarScanner.Input))
- {
-
- if (PickingBarScanner.Input == "%Cordonel_SAP_100%")
- {
-
- var url = ServiceUrls.MeterProcessStateUrl();
- url = url + $"setSapState?PcbID={PickingPcbId}&code=100&version=1";
- try
- {
- LocalWebRequest.PostRequestAsync(url);
- }
- catch (Exception ex)
- {
- }
-
- if (PickingOrderDetails.PressurePresent)
- {
- PickingBarScanner = new BarScanner(PickingScannerPort, token);
-
- PickingBarScanner.Start();
- PickingState = "Montage Rückmeldung erhalten, Montage des Drucksensors bestätigen";
- sm = PickingStateMachine.WaitForBuildingPressureReady;
- }
- else
- {
- PickingState = "Montage Rückmeldung erhalten, auftrag Scannen";
- sm = PickingStateMachine.StartCom;
- }
- }
- }
- break;
- case PickingStateMachine.WaitForBuildingPressureReady:
-
- if (PickingBarScanner != null && !string.IsNullOrEmpty(PickingBarScanner.Input))
- {
-
- if (PickingBarScanner.Input == "%Cordonel_SAP_101%")
- {
- var url = ServiceUrls.MeterProcessStateUrl();
- url = url + $"setSapState?PcbID={PickingPcbId}&code=101&version=1";
- try
- {
- LocalWebRequest.PostRequestAsync(url);
- }
- catch (Exception ex)
- {
- }
-
- PickingState = "Montage Rückmeldung erhalten, auftrag Scannen";
- sm = PickingStateMachine.StartCom;
- }
- }
- break;
- }
- Thread.Sleep(1000);
-
- }
-
- }
-
- private void Log(String v)
- {
- //throw new NotImplementedException();
- }
- }
-
-
-
-}
-
diff --git a/Common/Production/ProductionUiCordonel/Model/PickingMultiModeViewModel.cs b/Common/Production/ProductionUiCordonel/Model/PickingMultiModeViewModel.cs
deleted file mode 100644
index bba74360..00000000
--- a/Common/Production/ProductionUiCordonel/Model/PickingMultiModeViewModel.cs
+++ /dev/null
@@ -1,440 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Media;
-using Logic.ProductionToProductMapper.Cordonel;
-using Newtonsoft.Json;
-using Xylem.Common.CommonCore.Configuration;
-using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
-using Xylem.Common.Logic.ProductionOrderCore.OrderData;
-using Xylem.Common.Logic.SoftwareAccessHelper;
-using Xylem.Common.Production.ProductionUiCordonel.Data;
-using MessageBox = System.Windows.Forms.MessageBox;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public class PickingMultiModeViewModel : BaseMultiModeChildViewModel
- {
-
- private Boolean inputIsEnabled;
- public Boolean InputIsEnabled
- {
- get => inputIsEnabled;
- set
- {
- inputIsEnabled = value;
- NotifyPropertyChanged();
- }
- }
-
-
- private Boolean locked;
- public PickingMultiModeViewModel(String ctrName, Int32 slotNR, List barcodeTrigger, Int32? stationID = null) : base(ctrName, slotNR, barcodeTrigger, stationID, false)
- {
- VisibilityPicking = Visibility.Visible;
- MeterDetectedHandler += PickingMultiModeViewModel_MeterDetectedHandler;
- }
-
- private void PickingMultiModeViewModel_MeterDetectedHandler(Object sender, EventArgs e)
- {
-
- }
-
-
-
- public override Boolean SlotIsLocked()
- {
- return locked;
- }
- public override void InputText(String text)
- {
- Order = text;
- ReloadData();
- TextForceUpdate();
- }
- internal void ReloadData()
- {
-
- Task.Run(() =>
- {
- try
- {
- if (!locked && !string.IsNullOrEmpty(Order) && Order.Length > 6 && int.TryParse(Order, out var orderNR))
- {
-
- var str = LocalWebRequest.GetRequest($"{ServiceUrls.GenesisFinalCheckServiceUrl()}GetOrderOverview?ProductionOrderNumber={orderNR}");
- var OrderOverView = JsonConvert.DeserializeObject(str);
- var doneCount = OrderOverView.AssignedPicking;
- if (OrderOverView.Count == OrderOverView.AssignedPicking)
- {
-
- UpdatePickingUi("Order is already completed", StatusColor, "Input a new order number", 0, 0);
- locked = false;
- return;
- }
-
- str = LocalWebRequest.GetRequestWithError($"{ServiceUrls.GenesisFinalCheckServiceUrl()}GetOrderDetails?ProductionOrderNumber={orderNR}&CheckPcbId={CurrentMeter.PcbId}", out var retCode, 15000);
-
- if (retCode == 417)
- {
- MessageBox.Show(@"NO radio parameter found");
- }
-
- if (OrderOverView.Count == OrderOverView.AssignedPicking)
- {
-
- UpdatePickingUi("Order is already completed", StatusColor, "Input a new order number", 0, 0);
- locked = false;
- return;
- }
-
- var OrderDteails = JsonConvert.DeserializeObject(str);
-
-
- if (CurrentMeter != null)
- {
- try
- {
-
-
- locked = true;
- //Init(CurrentMeter, new Dictionary(), OrderDteails.FrequencyIndicator, OrderDteails.MeterSize, OrderDteails.PressurePresent);
-
-
- var a = new Dictionary();
- a.Add(0, 486);
- a.Add(15, 287);
- if (OrderDteails.FrequencyIndicator == 868)
- {
- a.Add(24, 1067);
- }
- else
- {
- a.Add(24, 1066);
- }
-
- Init(CurrentMeter, a, OrderDteails.FrequencyIndicator, OrderDteails.MeterSize, OrderDteails.PressurePresent);
-
-
- var r = Run(CurrentMeter.PcbId, orderNR.ToString());
-
- if (r)
- {
- doneCount = doneCount + 1;
- }
- locked = false;
- UpdatePickingUi("Start checking meter", StatusColor, orderNR.ToString(), OrderOverView.Count, doneCount);
- }
- catch (Exception ex)
- {
- Log(ex.Message);
- }
- finally
- {
- locked = false;
- }
- }
- }
- else
- {
- UpdatePickingUi("Please input a valid order number", StatusColor, "no valid order!", 0, 0);
-
- }
- }
- catch (Exception ex)
- {
- Log(ex.Message);
- }
- });
- }
-
- private void UpdatePickingUi(String state, Brush StateColor, String order, Int32 toDo, Int32 done)
- {
- Message = state;
- Order = order;
- ToDo = toDo;
- Done = done;
- OnUpdateUi?.Invoke(null, EventArgs.Empty);
- //if (true)
- //{
-
- //}
- // lblStatus.Content = state;
- // lblStatus.Background = StateColor;
- // lblPickingOrder.Content = $"{Order}({Done}/{toDo}";
- // txtHiddenInput.Focus();
- // if (Done > 0 && Done >= toDo)
- // {
- // MessageBox.Show("Order is Finish");
- // txtOrderNr.Text = "";
- // lblStatus.Content = "Please input a new order number";
- // }
-
- //}));
-
- }
- //private void RefreshPicking()
- //{
-
- // tbarOrder.Visibility = Visibility.Visible;
- // if (!string.IsNullOrEmpty(txtOrderNr.Text))
- // {
- // lblPickingOrder.Content = orderString;
-
-
- // }
- // else
- // {
- // UpdatePickingUi("Please input a valid order number", PickingData.StatusColor, "no valid order!", 0, 0);
- // }
- //}
-
- public event EventHandler OnDataChanged;
- public event EventHandler OnUpdateUi;
- public new event PropertyChangedEventHandler PropertyChanged;
-
- private GenesisMeter currentMeter;
-
- public ObservableCollection Data
- {
- get; set;
- }
-
- private OverallStatus status = OverallStatus.NoDetect;
- private OverallStatus Status
- {
- get => status;
- set
- {
- status = value;
- OnDataChanged?.Invoke(value.GetHashCode(), EventArgs.Empty);
-
- }
- }
- public String Message
- {
- get; set;
- }
- private enum OverallStatus
- {
- NoDetect,
- CheckingIsRunning,
- CheckingIsDone,
- CheckingIsNoMatch,
- CheckingIsHasError,
- }
- public String StatusText
- {
- get
- {
- switch (Status)
- {
- case OverallStatus.NoDetect:
- return "Wait for meter";
- case OverallStatus.CheckingIsRunning:
- return "Is checking, please wait";
- case OverallStatus.CheckingIsDone:
- return "Succsesfull check next Pcb";
- case OverallStatus.CheckingIsNoMatch:
- return "Check has mismatch, this PCB cannot be used!";
- default:
- return "Check has errors, this PCB cannot be used!";
- }
-
- }
- }
-
- public Brush StatusColor
- {
- get
- {
- switch (Status)
- {
- case OverallStatus.NoDetect:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("White");
- case OverallStatus.CheckingIsRunning:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Yellow");
- case OverallStatus.CheckingIsDone:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Green");
- case OverallStatus.CheckingIsNoMatch:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Red");
- default:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("DarkRed");
- }
- }
- }
-
- public Int32 ToDo
- {
- get; private set;
- }
- public Int32 Done
- {
- get; private set;
- }
-
- public void Init(GenesisMeter meter, Dictionary checkAppsIdVersion, UInt32 Frequency, UInt32 MeterSize, Boolean PressurePresent)
- {
-
-
- currentMeter = meter;
- var data = new List();
-
- data.Add(new PickingResultCustomCheckData(delegate
- {
-
- meter.Login();
- meter.SetProcessState(DisplayCodes.PickingStarted);
- return new PickingItemCheckReturn { Result = true, Msg = "done" };
-
- })
- {
- Index = data.Count, Ident = "Login", CheckText = "Try to access Meter", HasError = false, Result = null,
- CurrentValueText = "-"
- });
-
- data.Add(new PickingResultRegisterData
- {
- ReadMeter = meter, Index = data.Count, Ident = "Check Radio", CheckText = $"{Frequency}MHz",
- CompareObject = Frequency, CurrentValueText = "none", HasError = false, Result = null,
- RegisterIdent = "SENSUSRADIO_FrequencyIndicator"
- });
-
-
- data.Add(new PickingResultRegisterData
- {
- ReadMeter = meter, Index = data.Count, Ident = "MeterSize",
- CheckText = "DN40-50", CompareObject = MeterSize, CurrentValueText = "none", HasError = false,
- Result = null, RegisterIdent = "GENESISFLOW_MeterSize"
- });
-
- data.Add(new PickingResultRegisterData
- {
- ReadMeter = meter, Index = data.Count, Ident = "Pressure",
- CheckText = "Pressure Sensor", CompareObject = PressurePresent, CurrentValueText = "-", HasError = false,
- Result = null, RegisterIdent = "METROLOGYASST_PressurePresent"
- });
-
-
- foreach (var item in checkAppsIdVersion)
- {
- data.Add(new PickingResultCustomCheckData(delegate
- {
- try
- {
- var MeterFWApp = meter.MeterAppListVersion.First(a => item.Key == a.AppId);
- if (MeterFWApp.Version != item.Value)
- {
- return new PickingItemCheckReturn { Result = false, Msg = MeterFWApp.StrVersion };
- }
- return new PickingItemCheckReturn { Result = true, Msg = MeterFWApp.StrVersion };
- }
- catch (Exception)
- {
- return new PickingItemCheckReturn { Result = false, Msg = "error" };
- }
-
- })
- {
- Index = data.Count, Ident = $"Check AppId {item.Key}", CheckText = $"Version {item.Value}",
- HasError = false, Result = null, CurrentValueText = "-"
- });
-
- }
-
- data.Add(new PickingResultCustomCheckData(delegate
- {
- try
- {
- meter.WriteRegister("METROLOGYASST_StoreConfiguration", 1);
- Thread.Sleep(100);
- var storeRet = meter.ReadRegister("METROLOGYASST_StoreConfiguration");
- if (storeRet.All(a => a.Equals(0)))
- {
- return new PickingItemCheckReturn { Result = true, Msg = "Filesystem OK" };
- }
-
- return new PickingItemCheckReturn { Result = false, Msg = "Filesystem corrupt" };
-
- }
- catch (Exception)
- {
- return new PickingItemCheckReturn { Result = false, Msg = "error" };
- }
-
- })
- {
- Index = data.Count, Ident = "Check Filesystem", CheckText = "Check Filesystem", HasError = false,
- Result = null, CurrentValueText = "checking"
- });
-
- Status = OverallStatus.CheckingIsRunning;
- ChangeDataData(data);
- }
- private void ChangeDataData(List data)
- {
- Data = new ObservableCollection(data);
- OnDataChanged?.Invoke(Data, EventArgs.Empty);
- }
-
- public Boolean Run(String pcbID, String OrderNr)
- {
- var tmpData = Data.ToList();
- foreach (var item in tmpData.Where(a => !a.Result.HasValue).OrderBy(a => a.Index))
- {
- var result = item.Action.Invoke();
- item.Result = result.Result;
- item.CurrentValueText = result.Msg;
- ChangeDataData(tmpData);
- }
-
- if (tmpData.All(a => !a.HasError && a.Result.HasValue && a.Result.Value))
- {
- currentMeter.SetProcessState(DisplayCodes.PickingTested);
- var url = $"{ServiceUrls.MeterProcessStateUrl()}SetPickingState?PcbID={pcbID}&FertigungsauftragsNr={OrderNr}";
- var RetString = LocalWebRequest.PostRequestAsyncAndGetContent(url);
-
- if (bool.TryParse(RetString, out var result))
- {
- Status = OverallStatus.CheckingIsDone;
- return result;
-
- }
-
- Status = OverallStatus.CheckingIsHasError;
-
- return false;
-
- }
-
- currentMeter.SetProcessState(DisplayCodes.PickingFailed);
- if (tmpData.All(a => a.HasError))
- {
- Status = OverallStatus.CheckingIsHasError;
- }
- else
- {
- Status = OverallStatus.CheckingIsNoMatch;
- }
-
- return false;
- }
-
- internal void Empty()
- {
- Status = OverallStatus.NoDetect;
- ChangeDataData(new List());
- }
-
- protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
- {
- PropertyChanged?.Invoke(this, e);
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/PickingViewModel.cs b/Common/Production/ProductionUiCordonel/Model/PickingViewModel.cs
deleted file mode 100644
index 66eb4822..00000000
--- a/Common/Production/ProductionUiCordonel/Model/PickingViewModel.cs
+++ /dev/null
@@ -1,221 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Linq;
-using System.Threading;
-using System.Windows.Media;
-using Logic.ProductionToProductMapper.Cordonel;
-using Xylem.Common.CommonCore.Configuration;
-using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
-using Xylem.Common.Logic.SoftwareAccessHelper;
-using Xylem.Common.Production.ProductionUiCordonel.Data;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public class PickingViewModel : INotifyPropertyChanged
- {
- public event EventHandler OnDataChanged;
- public event PropertyChangedEventHandler PropertyChanged;
-
- private GenesisMeter currentMeter;
- private PickingCompareItem baseFile;
-
- public ObservableCollection Data { get; set; }
-
- private OverallStatus status = OverallStatus.NoDetect;
- private OverallStatus Status
- {
- get => status;
- set
- {
- status = value;
- OnDataChanged?.Invoke(value.GetHashCode(), EventArgs.Empty);
-
- }
- }
-
- private enum OverallStatus
- {
- NoDetect,
- CheckingIsRunning,
- CheckingIsDone,
- CheckingIsNoMatch,
- CheckingIsHasError,
- }
- public String StatusText
- {
- get
- {
- switch (Status)
- {
- case OverallStatus.NoDetect:
- return "Wait for meter";
- case OverallStatus.CheckingIsRunning:
- return "Is checking, please wait";
- case OverallStatus.CheckingIsDone:
- return "Succsesfull check next Pcb";
- case OverallStatus.CheckingIsNoMatch:
- return "Check has mismatch, this PCB cannot be used!";
- default:
- return "Check has errors, this PCB cannot be used!";
- }
-
- }
- }
-
- public Brush StatusColor
- {
- get
- {
- switch (Status)
- {
- case OverallStatus.NoDetect:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("White");
- case OverallStatus.CheckingIsRunning:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Yellow");
- case OverallStatus.CheckingIsDone:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Green");
- case OverallStatus.CheckingIsNoMatch:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("Red");
- default:
- return (SolidColorBrush)new BrushConverter().ConvertFromString("DarkRed");
- }
- }
- }
-
-
- public void Init(GenesisMeter meter, Dictionary checkAppsIdVersion, UInt32 Frequency, UInt32 MeterSize, Boolean PressurePresent)
- {
-
-
- currentMeter = meter;
- var data = new List();
-
- data.Add(new PickingResultCustomCheckData(delegate
- {
-
- var r = meter.Login();
- meter.SetProcessState(DisplayCodes.PickingStarted);
- return new PickingItemCheckReturn { Result = true, Msg = "done" };
-
- })
- { Index = data.Count, Ident = "Login", CheckText = "Try to access Meter", HasError = false, Result = null, CurrentValueText = "-" });
- if (Frequency != 0)
- {
- data.Add(new PickingResultRegisterData { ReadMeter = meter, Index = data.Count, Ident = "Check Radio", CheckText = "433", CompareObject = Frequency, CurrentValueText = "none", HasError = false, Result = null, RegisterIdent = "SENSUSRADIO_FrequencyIndicator" }); ;
-
-
- data.Add(new PickingResultRegisterData { ReadMeter = meter, Index = data.Count, Ident = "MeterSize", CheckText = "DN40-50", CompareObject = MeterSize, CurrentValueText = "none", HasError = false, Result = null, RegisterIdent = "GENESISFLOW_MeterSize" });
- }
-
- foreach (var item in checkAppsIdVersion)
- {
- data.Add(new PickingResultCustomCheckData(delegate
- {
- try
- {
- var MeterFWApp = meter.MeterAppListVersion.First(a => item.Key == a.AppId);
- if (MeterFWApp == null || MeterFWApp.Version != item.Value)
- {
- return new PickingItemCheckReturn { Result = false, Msg = MeterFWApp.StrVersion };
- }
- return new PickingItemCheckReturn { Result = true, Msg = MeterFWApp.StrVersion };
- }
- catch (Exception)
- {
- return new PickingItemCheckReturn { Result = false, Msg = "error" };
- }
-
- })
- { Index = data.Count, Ident = $"Check AppId {item.Key}", CheckText = $"Version {item.Value}", HasError = false, Result = null, CurrentValueText = "-" }); ;
-
- }
-
- data.Add(new PickingResultCustomCheckData(delegate
- {
- try
- {
- meter.WriteRegister("METROLOGYASST_StoreConfiguration", 1);
- Thread.Sleep(100);
- var storeRet = meter.ReadRegister("METROLOGYASST_StoreConfiguration");
- if (storeRet.All(a => a.Equals(0)))
- {
- return new PickingItemCheckReturn { Result = true, Msg = "Filesystem OK" };
- }
-
- return new PickingItemCheckReturn { Result = false, Msg = "Filesystem corrupt" };
-
- }
- catch (Exception)
- {
- return new PickingItemCheckReturn { Result = false, Msg = "error" };
- }
-
- })
- { Index = data.Count, Ident = "Check Filesystem", CheckText = "Check Filesystem", HasError = false, Result = null, CurrentValueText = "checking" }); ;
-
- Status = OverallStatus.CheckingIsRunning;
- ChangeDataData(data);
- }
- private void ChangeDataData(List data)
- {
- Data = new ObservableCollection(data);
- OnDataChanged?.Invoke(Data, EventArgs.Empty);
- }
-
- public Boolean Run(String pcbID, String OrderNr)
- {
- var tmpData = Data.ToList();
- foreach (var item in tmpData.Where(a => !a.Result.HasValue).OrderBy(a => a.Index))
- {
- var result = item.Action.Invoke();
- item.Result = result.Result;
- item.CurrentValueText = result.Msg;
- ChangeDataData(tmpData);
- }
-
- if (tmpData.All(a => !a.HasError && a.Result.HasValue && a.Result.Value))
- {
- currentMeter.SetProcessState(DisplayCodes.PickingTested);
- var url = $"{ServiceUrls.MeterProcessStateUrl()}SetPickingState?PcbID={pcbID}&FertigungsauftragsNr={OrderNr}";
- var RetString = LocalWebRequest.PostRequestAsyncAndGetContent(url);
-
- var result = false;
- if (bool.TryParse(RetString, out result))
- {
- Status = OverallStatus.CheckingIsDone;
- return result;
-
- }
-
- Status = OverallStatus.CheckingIsHasError;
-
- return false;
-
- }
-
- currentMeter.SetProcessState(DisplayCodes.PickingFailed);
- if (tmpData.All(a => a.HasError))
- {
- Status = OverallStatus.CheckingIsHasError;
- }
- else
- {
- Status = OverallStatus.CheckingIsNoMatch;
- }
-
- return false;
-
-
-
- }
-
- internal void Empty()
- {
- Status = OverallStatus.NoDetect;
- ChangeDataData(new List());
- }
- }
-}
diff --git a/Common/Production/ProductionUiCordonel/Model/PressureMultiModeViewModel.cs b/Common/Production/ProductionUiCordonel/Model/PressureMultiModeViewModel.cs
deleted file mode 100644
index 3c9e416e..00000000
--- a/Common/Production/ProductionUiCordonel/Model/PressureMultiModeViewModel.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows;
-using Newtonsoft.Json;
-using Xylem.Common.CommonCore.Configuration;
-using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
-using Xylem.Common.Logic.ProductionOrderCore.ProcessState;
-using Xylem.Common.Logic.ProductionOrderCore.TestResults;
-using Xylem.Common.Logic.SoftwareAccessHelper;
-using Xylem.Common.Production.ProductionUiCordonel.Data;
-using Xylem.Common.Production.ProductionUiCordonel.Event;
-
-namespace Xylem.Common.Production.ProductionUiCordonel.Model
-{
- public class PressureMultiModeViewModel : BaseMultiModeChildViewModel
- {
-
-
- public event EventHandler OnStoreDone;
- private PressureResultDataNotifyable result = new PressureResultDataNotifyable();
- public PressureResultDataNotifyable Result
- {
- get => result;
- set
- {
- result = value;
- NotifyPropertyChanged();
- }
- }
-
-
- private Boolean inputIsEnabled;
- public Boolean InputIsEnabled
- {
- get => inputIsEnabled;
- set
- {
- inputIsEnabled = value;
- NotifyPropertyChanged();
- }
- }
-
-
- public Boolean Locked { get; set; } = false;
- public Int32? StationID { get; set; }
-
- public PressureMultiModeViewModel(String ctrName, Int32 slotNR, List barcodeTrigger, Int32? stationID = null) : base(ctrName, slotNR, barcodeTrigger, stationID)
- {
- VisibilityPressure = Visibility.Visible;
- StationID = stationID;
- }
-
- public Boolean isHydraulicStaion()
- {
-
- if (!StationID.HasValue || StationID.Value == 1)
- {
- return false;
- }
- return true;
- }
- public override Boolean SlotIsLocked()
- {
- return false;
- }
-
- internal void ReloadData(Boolean reset)
- {
-
- if (Result != null && Result.PcbId != CurrentPcbID)
- {
- InputIsEnabled = false;
- if (true)
- {
-
- }
- Result = new PressureResultDataNotifyable { Remark = "loading", Testpoints = new ObservableCollection(), PcbId = "" };
- Task.Run(() =>
- {
- try
- {
- var url = ServiceUrls.MeterProcessStateUrl();
- url = url + $"GetPressureStateDetailed?PcbId={CurrentPcbID}&TopCount=1";
-
- var retStr = LocalWebRequest.GetRequest(url);
-
- var pressureResultData = JsonConvert.DeserializeObject>(retStr);
- if (!pressureResultData.Any())
- {
- return new PressureResultDataNotifyable();
- }
- return new PressureResultDataNotifyable(pressureResultData.First());
- }
- catch (Exception ex)
- {
- Log(ex.Message);
- return new PressureResultDataNotifyable();
- }
-
- }).ContinueWith(a =>
- {
- var res = a.Result;
- res.PcbId = CurrentPcbID;
-
- Result = res;
- InputIsEnabled = true;
- }
-
- );
-
- }
- }
-
- internal void StoreData(Boolean successfull)
- {
-
- if (Result != null && Result.PcbId == CurrentPcbID)
- {
- InputIsEnabled = false;
- var isStored = false;
- var status = DisplayCodes.PressureTestedFailed;
-
- Task.Run(() =>
- {
- var url = ServiceUrls.MeterProcessStateUrl();
-
- if (successfull)
- {
- status = DisplayCodes.PressureTested;
- }
- try
- {
- if (StationID == 1)
- {
- var addResult = new PressureTestResult
- {
- FreeText = Result.Remark,
- Passed = successfull,
- StationId = StationID
- };
-
- url = url + $"SetPressureState?PcbId={CurrentPcbID}&FertigungsauftragsNr=0";
-
-
- if (!LocalWebRequest.PostRequestAsync(url, json: addResult))
- {
- throw new ApplicationException("PressureState: NOT successful");
- }
-
- }
- else
- {
- url = url + "SetPressureStateDetailed";
- var mutedResult = Result.ToBase();
- isStored = LocalWebRequest.PostRequestAsync(url, json: mutedResult);
- if (!isStored)
- {
- OnStoreDone?.Invoke(null, new StringArgs("Can not store Result"));
- status = DisplayCodes.PressureTestedFailed;
- }
- }
-
-
- CurrentMeter.Login();
- CurrentMeter.SetProcessState(status);
- }
- catch (Exception ex)
- {
- Log(ex.Message);
- status = DisplayCodes.PressureTestedFailed;
- OnStoreDone?.Invoke(null, new StringArgs("Can not store Result"));
- }
-
-
- if (status == DisplayCodes.PressureTested)
- {
- OnStoreDone?.Invoke(null, new StringArgs("Pressure test stored successfully. Meter can passed"));
- return;
- }
- OnStoreDone?.Invoke(null, new StringArgs("Pressure test stored successfully. But Meter is marked with a leakage. Please inform QS"));
-
- });
-
- }
- }
-
- }
-
-}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs
index 46bf77d6..1491b865 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/BaseProductionProcess.cs
@@ -168,6 +168,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
///
public event EventHandler OnProcessProgressChanged;
+
+ ///
+ public event EventHandler OnGuiMessageDispatcher;
#endregion --------------------------------------- Variables --------------------------------------------------
#region ------------------------------------------ Init -------------------------------------------------------
@@ -290,6 +293,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
OnProcessStateChanged?.Invoke(sender, new SingleProcessStateArgs(state));
}
+ ///
+ /// Fire event for GUI messages
+ ///
+ ///
+ protected void DispatchGuiMessage(GuiMessageArgs args)
+ {
+ OnGuiMessageDispatcher?.Invoke(this, args);
+ }
+
///
public void StartProcess(ProcessState? successExitState, ProcessState errorExitState = ProcessState.Error,
ProcessState breakExitState = ProcessState.AbortTest)
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/GuiItem.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/GuiItem.cs
new file mode 100644
index 00000000..846dd084
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/GuiItem.cs
@@ -0,0 +1,17 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum
+{
+ ///
+ /// Items to dispatch as message to the GUI
+ ///
+ public enum GuiItem
+ {
+ ///
+ /// Order amount of Cordonels
+ ///
+ OrderAmount,
+ ///
+ /// Counter of Cordonels for this order
+ ///
+ OrderCounter
+ }
+}
\ No newline at end of file
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/ProcessState.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/ProcessState.cs
index d26d051b..27017b67 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/ProcessState.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/Enum/ProcessState.cs
@@ -109,6 +109,14 @@
///
/// Completed to release the assembly line
///
+ CheckCordonelMapping,
+ ///
+ /// Install the LUT
+ ///
+ InstallLut,
+ ///
+ /// Completed to release the assembly line
+ ///
AssemblyLineRelease,
///
/// Print return report
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs
index e0a96779..0597f89e 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckFinalParametrization.cs
@@ -70,7 +70,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// Access to meter requires login
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
@@ -95,9 +95,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
if (retValBol)
{
EolProgress.ParametrizationCompareChecked = EOLStatus.OK;
+ Meter?.Logout();
return StatusReturn.Okay;
}
EolProgress.ParametrizationCompareChecked = EOLStatus.FAIL;
+ Meter?.Logout();
return StatusReturn.Failed;
}
catch (Exception ex)
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckOrderNumber.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckOrderNumber.cs
index 97b8bb64..8f5b22af 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckOrderNumber.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckOrderNumber.cs
@@ -1,95 +1,20 @@
using System;
-using Xylem.Common.CommonCore.Consts;
-using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
-using Xylem.Common.Production.ProductionUiCordonel.Properties;
-using Xylem.Common.Production.ProductionUiCordonel.UserControls;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.GenericProcesses;
namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolProcesses
{
- public class CheckOrderNumber : BaseProductionProcess
+ public class CheckOrderNumber : BaseCheckOrderNumber
{
- // string from scanner with string delimiter
- private String _scan = "";
- // marker for scan input received
- private Boolean _scanInputReceived;
- ///
- /// Ctor
- ///
+ ///
public CheckOrderNumber(String name) : base( name)
{
}
///
- protected override void InitUserControl()
+ protected override Boolean ValidateProcessAndPublishDataToGui(OrderOverViewCordonel orderOverview)
{
- UserControl = new UcBarcodeInput
- {
- lblHeadLine = { Content = Resources.StrInstructionScanOrder },
- tbxScan = { Text = "" }
- };
- }
-
- ///
- /// Event handler taking the input from text box which should be scanned but also can be input manually.
- ///
- ///
- ///
- /// - Initial
- ///
- private void UserControlInput_Handler(Object sender, String input)
- {
- _scan = input;
- _scanInputReceived = true;
- }
-
- ///
- /// Scanning of order number from production order sheet and comparing with DB.
- ///
- ///
- ///
- /// - Initial
- ///
- ///
- /// - Removed signals for and as
- /// these will be automatically set based on return value in
- /// .
- ///
- public override StatusReturn ExecuteProcess()
- {
- if (Meter == null)
- {
- return StatusReturn.Failed;
- }
-
- SignalRunningState();
-
- if (UserControl == null)
- {
- ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
- return StatusReturn.Failed;
- }
-
- var ucBarCode = (UcBarcodeInput)UserControl;
- ucBarCode.OnBarcodeInput += UserControlInput_Handler;
-
- // set focus to text input for scanner
- ucBarCode.FocusMe();
- _scanInputReceived = false;
-
- // wait for new line
- while (!_scanInputReceived)
- {
- }
-
- ucBarCode.OnBarcodeInput -= UserControlInput_Handler;
-
- if (_scan.Equals(Meter.OrderNumber.ToString()))
- {
- return StatusReturn.Okay;
- }
-
- ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
- return StatusReturn.Failed;
+ return orderOverview.OrderNumber == Meter.OrderNumber;
}
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs
index 6c85da9d..eeacedd1 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/CheckRadio.cs
@@ -2,7 +2,7 @@
using Newtonsoft.Json.Linq;
using SIRTCOM;
using System;
-using System.Configuration;
+using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading;
@@ -10,14 +10,17 @@ using System.Windows.Threading;
using System.Xml.Linq;
using Xylem.Common.CommonCore.Configuration;
using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Logic.ProductionOrderCore;
using Xylem.Common.Logic.SoftwareAccessHelper;
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams;
using Xylem.Common.Production.ProductionUiCordonel.Properties;
using Xylem.Common.Production.ProductionUiCordonel.UserControls;
using Xylem.Common.Utils.Logging;
using Button = System.Windows.Controls.Button;
+
// ReSharper disable UnusedAutoPropertyAccessor.Local
namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolProcesses
@@ -29,7 +32,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
/// Use the sleep 250 to create x seconds timeout;
///
private const Int32 TimeoutLoop_ms = 250;
- private const Int32 Timeout_s = 10;
+ private const Int32 Timeout_s = 25;
private const Int32 MaxActualProgressSteps = 1000 / TimeoutLoop_ms * Timeout_s;
///
@@ -102,9 +105,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
private Byte _sirtBoxNr;
///
- /// Comport number of SIRT
+ /// Comport number of RSSI-SIRT
///
- private Byte _sirtComport;
+ private Int32 _rssiSirtComport;
///
/// Radio address Cordonel
@@ -127,10 +130,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
{
Retry();
};
- //_checkRadioUserControl.OnDoneRequested += delegate
- //{
- // SaveRssiLevelsToDb();
- //};
}
///
@@ -181,6 +180,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
///
/// - Removed change and read back of MainAlarmMask and ExtendedAlarmMask.
///
+ ///
+ /// - Load settings from SIRT config file instead from AppConfig.
+ ///
+ ///
+ /// - Service SIRT for alarm setup over the air.
+ ///
+ ///
+ /// - Service SIRT verbose output and additional error handling and warning.
+ ///
public override StatusReturn ExecuteProcess()
{
// This will force to reset all values, Sentinel and Prepare shipping will fail based on EOL Progress
@@ -215,7 +223,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
{
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
return SetTestFailed(Resources.StrErrorMsgCordonelLogin);
@@ -233,7 +241,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// Initialize the SIRT
if (!SirtInit())
{
- return SetTestFailed(Resources.StrErrorMsgSirt);
+ return SetTestFailed(Resources.StrErrorMsgRssiSirt);
}
//FrequencyIndicator
@@ -269,24 +277,82 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
SuccessMsgDispatcher(Resources.StrSuccessMsgDbToMeterEncryptionKey);
ActualProcessProgress++;
- _sirtComport = Convert.ToByte(ConfigurationManager.AppSettings[$"SirtComport{freq}"]);
- _sirtBoxNr = Convert.ToByte(ConfigurationManager.AppSettings["SirtBoxNr"]);
+ // Load settings from SIRT config file
+ var sirtConfig = new SirtConfig();
+ sirtConfig.ReadSirtConfig();
+
+ if (freq == 433 && sirtConfig.SirtComport433MHz != null)
+ {
+ int.TryParse(sirtConfig.SirtComport433MHz.Replace("COM", ""), out _rssiSirtComport);
+ }
+
+ if (freq == 868 && sirtConfig.SirtComport433MHz != null)
+ {
+ int.TryParse(sirtConfig.SirtComport868MHz.Replace("COM", ""), out _rssiSirtComport);
+ }
+
+ var ServicePorts = new List();
+ if (sirtConfig.ServiceSirtComport433MHz != null &&
+ int.TryParse(sirtConfig.ServiceSirtComport433MHz.Replace("COM", ""), out var serviceSirtComport))
+ {
+ ServicePorts.Add(serviceSirtComport);
+ }
+ if (sirtConfig.ServiceSirtComport868MHz != null &&
+ int.TryParse(sirtConfig.ServiceSirtComport868MHz.Replace("COM", ""), out serviceSirtComport))
+ {
+ ServicePorts.Add(serviceSirtComport);
+ }
+
+
+ if (sirtConfig.SirtBoxNo != null)
+ _sirtBoxNr = (Byte)sirtConfig.SirtBoxNo;
+
var ucRadio = (UcRadioCheck)UserControl;
ucRadio.SetHeadline($"{Resources.StrStateRadioCheck} BOX: {_sirtBoxNr}");
- LogNewStatusMsg($"{Resources.StrStateRadioCheck} Port: COM{_sirtComport}, BOX: {_sirtBoxNr}, " +
+ LogNewStatusMsg($"{Resources.StrStateRadioCheck} Port: COM{_rssiSirtComport}, BOX: {_sirtBoxNr}, " +
$"f: {freq} MHz");
// Tell the radio that something is in the slot which will impact the radio transmission
WriteRegisterLogAndProcessCtr(new ProgrammingParameters("SENSUSRADIO_IrDAModulePresent",
new Byte[] { 1 }, ProgrammingSource.ProgramInternal));
-
ActualProcessProgress++;
+
+ if (ServicePorts.Any())
+ {
+ LogNewStatusMsg(Resources.StrStateRadioAlarmSetupOverTheAir);
+ try
+ {
+ if (!SIRTServer.StartServer(SuccessMsgDispatcher, ErrorMsgDispatcher, ServicePorts.ToArray()))
+ {
+ SIRTServer.Dispose();
+ return SetTestFailed(Resources.StrErrorMsgServiceSirtServerStart);
+ }
+
+ if (!SIRTServer.StartProgramming(Convert.ToInt32(freq), _radioAddressCordonel,
+ meterEncryptionKey))
+ {
+ SIRTServer.Dispose();
+ return SetTestFailed(Resources.StrErrorMsgServiceSirtProgramming);
+ }
+ SIRTServer.Dispose();
+ }
+ catch (Exception ex)
+ {
+ SIRTServer.Dispose();
+ return SetTestFailed(ex.Message);
+ }
+ }
+ else
+ {
+ WarningMsgDispatcher(Resources.StrWarningMsgServiceSirtSkipped);
+ }
+
// Clear the measurement as on a retry started from main control the old values will be displayed
ClearRssiMeasurement();
// kick off RSSI test
StartRssiMeasurement();
-
+
// Exit if meanwhile cancellation is required
if (CancellationToken.IsCancellationRequested)
CancellationProcedure();
@@ -318,15 +384,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
ActualProcessProgress++;
if (// radio system state 0x02 shipping mode, 0x01 production mode, 0x0C transmission and data logger active
- _finalRadioSystemState != 0x02
+ _finalRadioSystemState != 0x02
// If radio check is enabled the signal level has to be in range and the test has to be finished
|| (!skipRadioCheck && (!_successSignalLevel || !_sirtComOkay || !_testFinished)))
{
- return SetTestFailed(!_sirtComOkay ? Resources.StrErrorMsgSirt : Resources.StrErrorMsgRadioCheck);
+ return SetTestFailed(!_sirtComOkay ? Resources.StrErrorMsgRssiSirt : Resources.StrErrorMsgRadioCheck);
}
SuccessMsgDispatcher(Resources.StrSuccessMsgRadioInCustomerMode);
-
+
// Skip radio check by requirement
if (skipRadioCheck)
{
@@ -399,8 +465,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
EolProgress.RadioCheckId = _radioResultCheckId;
EolProgress.FinalRadioSystemState = _finalRadioSystemState;
- // Essential to logout from meter at any exit
+ // Essential to logout from meter at any exit to give the radio app the chance
+ // to access the parameters and config file
Meter?.Logout();
+ Thread.Sleep(1000);
_stateMachine?.Stop();
_stateMachine = null;
@@ -477,7 +545,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
{
ActualProcessProgress++;
GetRssiMinMaxValuesFromDb(_sirtBoxNr, Meter.OrderNumber);
- SendPamListenSemi((Int32)_radioAddressCordonel, _sirtComport, _radioEncryptionKey);
+ SendPamListenSemi((Int32)_radioAddressCordonel, _rssiSirtComport, _radioEncryptionKey);
UpdateUc();
ActualProcessProgress++;
}
@@ -523,7 +591,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
}
ClearRssiMeasurement();
UpdateUc();
- SendPamListenSemi((Int32)_radioAddressCordonel, _sirtComport, _radioEncryptionKey);
+ SendPamListenSemi((Int32)_radioAddressCordonel, _rssiSirtComport, _radioEncryptionKey);
}
///
@@ -669,7 +737,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
_dataContainer.RadioAdress = radioAddress;
_stateMachine.initialise((Byte)byteComPort);
-
+
try
{
var path = NLogHelper.GetApplicationDataPath();
@@ -696,7 +764,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// Initialize the state machine of the SIRT dll
_stateMachine.Stop();
_stateMachine.ClearPam();
- _stateMachine.Timeout_s = 30;
+ _stateMachine.Timeout_s = 45;
// Dummy PAM 00 with radio encryption key, SIRT dll takes the key for the response and the
// address for the request and response, CommandHex 00 is data size of 0, so it makes no sense
@@ -821,6 +889,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
LogNewStatusMsg(pam.Semi.GetPamErrorMessage());
_sirtComOkay = false;
}
+
+ CheckAlarmStateFromRF(semiBytes);
}
else
{
@@ -839,5 +909,95 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
Meter?.WriteLog(ex.Message);
}
}
+
+ ///
+ /// Check telegram length and alarms.
+ ///
+ ///
+ ///
+ /// - Initial.
+ ///
+ ///
+ /// - Multilingual.
+ ///
+ ///
+ /// - Reworked.
+ ///
+ private void CheckAlarmStateFromRF(params Byte[] telegram)
+ {
+ if (telegram == null) return;
+
+ try
+ {
+ var telegramLength = telegram.Length;
+
+ if (telegramLength <= 8)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorMsgSirtTelegramLength);
+ return;
+ }
+
+ var semiLength = Math.Min(telegram[7], (Byte)RFTelegrams.SEMI.MIN_LENGTH);
+
+ if (telegramLength < semiLength)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorMsgSemiTelegramLength);
+ return;
+ }
+
+ var mhz = RegisterConverter.ByteArrayToValue(Meter.ReadRegister("SENSUSRADIO_FrequencyIndicator"));
+ var semiBytes = new Byte[semiLength];
+ Array.Copy(telegram, 8, semiBytes, 0, semiLength - 8);
+ var semi = new RFTelegrams.SEMI(semiBytes, (Int32)mhz);
+ var alarms = semi.MainAlarmByte;
+
+ if (alarms.Backflow)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.Backflow)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.BrokenPipe)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.BrokenPipe)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.Leak)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.Leak)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.LowBattery)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.LowBattery)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.MagneticTamper)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.MagneticTamper)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.MetrologyUnavailable)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.MetrologyUnavailable)} !");
+ _testFinished = false;
+ }
+
+ if (alarms.SpecificError)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsgAlarmActive}: {nameof(alarms.SpecificError)} !");
+ _testFinished = false;
+ }
+ }
+ catch (Exception _e)
+ {
+ ErrorMsgDispatcher($"{Resources.StrErrorMsg}: {_e.Message} - {Resources.StrMsgSemiTelegram}");
+ _testFinished = false;
+ }
+ }
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs
index 2136da04..75ad3d5e 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/EolProcessStatesDef.cs
@@ -214,16 +214,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
processState: ProcessState.RebootCordonel,
processInfo: Resources.StrStateRebootCordonel,
productionProcessNo: 8,
- nextStateOnSuccess: ProcessState.CheckFinalParametrization),
-
- // Precondition: - The reboot process including the store all configurations has to be
- // completed.
- // Check final configuration has to be executed exclusively with automatic
- new ProcessStateStruct(
- productionProcess: new CheckFinalParametrization(Resources.StrStateCheckParametrization),
- processState: ProcessState.CheckFinalParametrization,
- processInfo: Resources.StrStateCheckParametrization,
- productionProcessNo: 9,
nextStateOnSuccess: ProcessState.CheckRadio),
// Precondition: - The final parametrization, reboot process including the store all
@@ -234,9 +224,19 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
productionProcess: new CheckRadio(Resources.StrStateRadioCheck),
processState: ProcessState.CheckRadio,
processInfo: Resources.StrStateRadioCheck,
+ productionProcessNo: 9,
+ nextStateOnSuccess: ProcessState.CheckFinalParametrization),
+
+ // Precondition: - The reboot process including the store all configurations has to be
+ // completed.
+ // Check final configuration has to be executed exclusively with automatic
+ new ProcessStateStruct(
+ productionProcess: new CheckFinalParametrization(Resources.StrStateCheckParametrization),
+ processState: ProcessState.CheckFinalParametrization,
+ processInfo: Resources.StrStateCheckParametrization,
productionProcessNo: 10,
nextStateOnSuccess: ProcessState.CheckOrderNumber),
-
+
// This scans the order number, it has to be executed exclusively with automatic
new ProcessStateStruct(
productionProcess: new CheckOrderNumber(Resources.StrStateCheckOrderNumber),
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs
index cc882cba..d72ac822 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecFinalParametrization.cs
@@ -2,6 +2,7 @@
using System.Linq;
using LaaPackages.Features.Cordonel.Models;
using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.GenericProcesses;
using Xylem.Common.Production.ProductionUiCordonel.Properties;
@@ -58,6 +59,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
///
/// - EOL progress signaled.
///
+ ///
+ /// - Accumulators read back for debug.
+ ///
public override StatusReturn ExecuteProcess()
{
// Uncheck executed process to leave the result open needed for retries
@@ -72,37 +76,64 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// Check if radio has been set up properly and programming parameters are present
if ((!Meter.RadioFrequencyMhz.HasValue && RegisterRestorer.RecoveryRegisters.Any(a =>
a.RegisterIdent.Contains("RADIO"))) ||
- (Meter.RadioFrequencyMhz.HasValue && !RegisterRestorer.RecoveryRegisters.Any(a =>
+ (Meter.RadioFrequencyMhz.HasValue && !RegisterRestorer.RecoveryRegisters.Any(a =>
a.RegisterIdent.Contains("RADIO"))))
{
ErrorMsgDispatcher(Resources.StrErrorMsgRadioInconsistent);
- EolProgress.ParametrizationDoneChecked = EOLStatus.FAIL;
+ EolProgress.ParametrizationDoneChecked = EOLStatus.FAIL;
return StatusReturn.Failed;
}
// Set the process bar limits including approximately 10 additional steps for preparation and finalization
SignalRunningState(RegisterRestorer.RecoveryRegisterCount + 10);
-
+
try
{
// access to meter requires login
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
- EolProgress.ParametrizationDoneChecked = EOLStatus.FAIL;
+ EolProgress.ParametrizationDoneChecked = EOLStatus.FAIL;
return StatusReturn.Failed;
}
}
+
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ var readBackScaledBilling =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ScaledBilling"));
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ var readBackUnscaledFwd =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledFwd"));
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ var readBackUnscaledRev =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledRev"));
+
+ Meter.ClearAlarm();
+ ActualProcessProgress++;
+
RegisterRestorer.OnProcessUpdate += ProcessUpdate_Handler;
- var retVal = RegisterRestorer.EolProgrammingRegisters(RegisterRestorer.RecoveryRegisters,
+ var retVal = RegisterRestorer.EolProgrammingRegisters(RegisterRestorer.RecoveryRegisters,
CancellationToken);
RegisterRestorer.OnProcessUpdate -= ProcessUpdate_Handler;
-
+
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ // ReSharper disable once RedundantAssignment
+ readBackScaledBilling =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ScaledBilling"));
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ // ReSharper disable once RedundantAssignment
+ readBackUnscaledFwd =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledFwd"));
+ // ReSharper disable once NotAccessedVariable used for DEBUG -> logs it to register history
+ // ReSharper disable once RedundantAssignment
+ readBackUnscaledRev =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledRev"));
+
EolProgress.ParametrizationDoneChecked = retVal == StatusReturn.Okay ? EOLStatus.OK : EOLStatus.FAIL;
return retVal;
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs
index 19c02e65..0a0a3789 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecPasswordFile.cs
@@ -186,7 +186,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
ucPwd.UpdateImage(ucPwd.imgWriteToMeter, ImgState.Active);
if (!Meter.IsLoggedOn)
- Meter.Login();
+ Meter.ReLogin();
// Install and check password file
var retryCtr = 2;
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs
index 5fe1983d..c102fe5a 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecRebootCordonel.cs
@@ -45,6 +45,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
///
/// - Reset alarms in customer app and radio app and check it for success.
///
+ ///
+ /// - Check accumulators being cleared to zero.
+ ///
+ ///
+ /// - Accumulator reset if setting to zero failed as defined by A.F. as workaround for FW bug.
+ ///
public override StatusReturn ExecuteProcess()
{
// Uncheck executed process to leave the result open needed for retries
@@ -63,7 +69,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// access to meter requires login
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
@@ -71,13 +77,14 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
return StatusReturn.Failed;
}
}
-
+ var ale = Meter.ReadRegister("CUSTOMER_AlarmEnableMask");
+ #region ----------------------------------- Reboot ----------------------------------------------------
// reboot the meter and avoid doubled storage of configurations
var _meterResetPsu = new MeterResetPsu(Meter)
{
StoreConfigEnable = false
};
-
+
_meterResetPsu.OnProcessUpdate += ProcessUpdate_Handler;
var rebootSucceeded = _meterResetPsu.MeterResetPsuExecute(CancellationToken);
_meterResetPsu.OnProcessUpdate -= ProcessUpdate_Handler;
@@ -91,7 +98,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// access to meter requires login
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
@@ -100,30 +107,31 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
}
}
ActualProcessProgress++;
-
+ #endregion
+ #region ----------------------------------- Set Time and Reset Counters -------------------------------
// Get the time in UTC to program the time for the Cordonel in seconds since 01. Jan 2000
// to set the new UTC after reboot
var teaTime = new TimeT();
// Build byte array
var rawSeconds = RegisterConverter.ValueToByteArray(teaTime.UtcNowToSecondsSince2000);
- var timerSetup = new ProgrammingParameters("SYSTEM_CalendarSeconds", rawSeconds,
+ var timerSetup = new ProgrammingParameters("SYSTEM_CalendarSeconds", rawSeconds,
ProgrammingSource.ProgramInternal);
var retValBol = WriteRegisterLogAndProcessCtr(timerSetup);
// This is the manufacturing date of the Cordonel
- retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("IRDA_MfgDate", rawSeconds,
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("IRDA_MfgDate", rawSeconds,
ProgrammingSource.ProgramInternal));
ActualProcessProgress++;
// Reset reboot counter
- retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_RebootCount", new Byte[] { 0x00 },
- ProgrammingSource.ProgramInternal));
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_RebootCount",
+ new Byte[] { 0x00 }, ProgrammingSource.ProgramInternal));
// Reset alarms Customer
- retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_TriggerAlarmCancel",
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("CUSTOMER_TriggerAlarmCancel",
new Byte[] { 0xFF, 0xFF, 0xFF, 0xFF }, ProgrammingSource.ProgramInternal));
ActualProcessProgress++;
// Read back CUSTOMER_TriggerAlarmCancel and ignore empty pipe
- var readBackCustomerAlarmCancel =
+ var readBackCustomerAlarmCancel =
RegisterConverter.ByteArrayToValue(Meter.ReadRegister("CUSTOMER_TriggerAlarmCancel"));
if (!retValBol || readBackCustomerAlarmCancel != 0)
@@ -132,33 +140,91 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
EolProgress.RebootDoneChecked = EOLStatus.FAIL;
return StatusReturn.Failed;
}
-
+ #endregion
+ #region ----------------------------------- Check And Reset Radio -------------------------------------
if (Meter.RadioFrequencyMhz != null)
{
// Reset periodic log reset counter
- retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("PERIODICLOG_ResetCounter",
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("PERIODICLOG_ResetCounter",
new Byte[] { 0x00 }, ProgrammingSource.ProgramInternal));
- // System state sensus radio to 0xFF for re-initialize
+ // System state sensus radio to 0xFF for re-initialize
retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("SENSUSRADIO_SystemState",
new Byte[] { 0xFF }, ProgrammingSource.ProgramInternal));
ActualProcessProgress++;
- var finalRadioSystemState =
+ var finalRadioSystemState =
RegisterConverter.ByteArrayToValue(Meter.ReadRegister("SENSUSRADIO_SystemState"));
// Reset sensus radio reset counter
var sensusRadioResetCtr = new ProgrammingParameters("SENSUSRADIO_ResetCounter", new Byte[] { 0x00 },
ProgrammingSource.ProgramInternal);
retValBol &= WriteRegisterLogAndProcessCtr(sensusRadioResetCtr);
-
+
if (!retValBol || finalRadioSystemState != 0x02)
{
- ErrorMsgDispatcher(Resources.StrErrorMsgAlarmReset);
+ ErrorMsgDispatcher(Resources.StrErrorMsgRadioNotInCustomerMode);
EolProgress.RebootDoneChecked = EOLStatus.FAIL;
return StatusReturn.Failed;
}
}
+ #endregion
+ #region ----------------------------------- Check And Reset Accu --------------------------------------
+ // Check the accumulator reset and retry if sequence failed - Workaround for FW bug
+ var retryCtr = 2;
+ // Check all values for 0 after reset and followed reboot which may use the
+ var readBackScaledBilling =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ScaledBilling"));
+ var readBackUnscaledFwd =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledFwd"));
+ var readBackUnscaledRev =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledRev"));
+
+ while (retryCtr-- > 0 &&
+ (readBackScaledBilling != 0 || readBackUnscaledFwd != 0 || readBackUnscaledRev != 0))
+ {
+ // Backup sealing state as for the NA region it may be unsealed
+ var displaySealingState =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_SealDisplay"));
+
+ // Unseal accumulator reset capability
+ retValBol = WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_SealDisplay",
+ new Byte[] { 0x00 }, ProgrammingSource.ProgramInternal));
+
+ // Reset accumulators again
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_ResetAccumulators",
+ new Byte[] { 0x01 }, ProgrammingSource.ProgramInternal));
+ // Backup current setting for forward arrow which is different for EMEA and NA region
+ var forwardArrow =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ForwardArrow"));
+ // Any valid write to forward arrow will trigger a writeback to flash in the next few moments,
+ // it doesn't have to be a change.
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_ForwardArrow",
+ new[] { forwardArrow }, ProgrammingSource.ProgramInternal));
+
+ // Seal accumulator reset capability
+ // ReSharper disable once RedundantAssignment as it is used for DEBUG
+ retValBol &= WriteRegisterLogAndProcessCtr(new ProgrammingParameters("GENESISFLOW_SealDisplay",
+ new[] { displaySealingState }, ProgrammingSource.ProgramInternal));
+
+ WarningMsgDispatcher(Resources.StrWarningMsgRepeatedAccumulatorReset);
+
+ // Check all values for 0 after reset and followed reboot which may use the
+ readBackScaledBilling =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_ScaledBilling"));
+ readBackUnscaledFwd =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledFwd"));
+ readBackUnscaledRev =
+ RegisterConverter.ByteArrayToValue(Meter.ReadRegister("GENESISFLOW_UnscaledRev"));
+ }
+
+ if (readBackScaledBilling != 0 || readBackUnscaledFwd != 0 || readBackUnscaledRev != 0)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorMsgVolumeNotCleared);
+ EolProgress.RebootDoneChecked = EOLStatus.FAIL;
+ return StatusReturn.Failed;
+ }
+#endregion
SuccessMsgDispatcher(Resources.StrSuccessMsgAlarmReset);
EolProgress.RebootDoneChecked = EOLStatus.OK;
return StatusReturn.Okay;
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs
index b8694a26..8123bc65 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/ExecStoreConfiguration.cs
@@ -44,7 +44,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// access to meter requires login
if (!Meter.IsLoggedOn)
{
- Meter.Login();
+ Meter.ReLogin();
if (!Meter.IsLoggedOn)
{
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/PrepareShipping.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/PrepareShipping.cs
index ac8d4208..aaf70e7f 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/PrepareShipping.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EolProcesses/PrepareShipping.cs
@@ -122,8 +122,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
if (feedback != null)
foreach (var feed in feedback)
{
- ErrorMsgDispatcher(Resources.StrErrorMsgSentinelConcerns + " " +
- feed.Key + ": " + feed.Value);
+ // Message filter to reduce those
+ if (!feed.Key.Contains("Source") &&
+ !feed.Key.Contains("Stack") &&
+ !feed.Key.Contains("Succeeded"))
+ {
+ var msg = feed.Key.Contains("Sentinel") ? "" : feed.Key + ": ";
+ ErrorMsgDispatcher(Resources.StrErrorMsgSentinelConcerns + " " +
+ msg + feed.Value);
+ }
}
ErrorMsgDispatcher(Resources.StrErrorMsgSentinelCheckEolProgress);
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/GuiMessageArgs.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/GuiMessageArgs.cs
new file mode 100644
index 00000000..728580c5
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/GuiMessageArgs.cs
@@ -0,0 +1,25 @@
+using System;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
+
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EventArgs
+{
+ ///
+ /// Logging messages with a specific color for output to GUI as user information.
+ ///
+ public class GuiMessageArgs : System.EventArgs
+ {
+ public readonly GuiItem GuiItem;
+ public readonly Object Obj;
+
+ ///
+ /// Message dispatcher event arguments for GUI display
+ ///
+ /// identifier to specify the GUI item
+ ///
+ public GuiMessageArgs(GuiItem guiItem, Object obj)
+ {
+ GuiItem = guiItem;
+ Obj = obj;
+ }
+ }
+ }
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessLogArgs.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessLogArgs.cs
index a6fa781d..fefebe57 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessLogArgs.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessLogArgs.cs
@@ -2,7 +2,11 @@
using System.Windows.Media;
namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EventArgs
-{ public class ProcessLogArgs : System.EventArgs
+{
+ ///
+ /// Logging a text with a specific color for output to GUI as user information.
+ ///
+ public class ProcessLogArgs : System.EventArgs
{
public readonly String Data;
public readonly SolidColorBrush Color;
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessProgressArgs.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessProgressArgs.cs
index 46a18003..c918ab77 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessProgressArgs.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/EventArgs/ProcessProgressArgs.cs
@@ -2,6 +2,9 @@
namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EventArgs
{
+ ///
+ /// Process progress to feed the progress bar.
+ ///
public class ProcessProgressArgs : System.EventArgs
{
public enum ProcessProgressType
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs
index 74ba04a6..0d20767f 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericModules/GenericChecks.cs
@@ -464,7 +464,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
feedbackMsg = isSpecialActive &&
productionRequirements.SpecialId != null &&
productionRequirements.SpecialVersion != null ?
- Resources.StrWarningMsgSpecialRequirementActive +
+ Resources.StrAttentionMsgSpecialRequirementActive +
$" Id.Ver: {productionRequirements.SpecialId}.{productionRequirements.SpecialVersion}" :
Resources.StrSuccessMsgRequirementActive +
$" Id.Ver {productionRequirements.StandardId}.{productionRequirements.StandardVersion}";
@@ -513,7 +513,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
}
var pressureSensorAssembled =
meter.PressureSensorAssembled ? $", {Resources.StrLblPressureSensorAssembledTxt}" : "";
- var meterInfo = $"{Resources.StrLblRadioFrequencyTxt}: {meter.RadioFrequencyMhz} MHz," +
+ var meterInfo = $"{Resources.StrLblRadioFrequencyTxt}: {meter.RadioFrequencyMhz} MHz, " +
$"{Resources.StrLblMeterSizeTxt}: {meter.MeterSize}, " +
$"{Resources.StrLblMeterLengthTxt}: {meter.MeterLength} mm" +
$"{pressureSensorAssembled}";
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/BaseCheckOrderNumber.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/BaseCheckOrderNumber.cs
new file mode 100644
index 00000000..c15a81b3
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/BaseCheckOrderNumber.cs
@@ -0,0 +1,117 @@
+using System;
+using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
+using Xylem.Common.Production.ProductionUiCordonel.Properties;
+using Xylem.Common.Production.ProductionUiCordonel.UserControls;
+
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.GenericProcesses
+{
+ public abstract class BaseCheckOrderNumber : BaseProductionProcess
+ {
+ // string from scanner with string delimiter
+ private String _scan = "";
+ // marker for scan input received
+ private Boolean _scanInputReceived;
+ ///
+ /// Ctor
+ ///
+ protected BaseCheckOrderNumber(String name) : base(name)
+ {
+ }
+
+ ///
+ protected override void InitUserControl()
+ {
+ UserControl = new UcBarcodeInput
+ {
+ lblHeadLine = { Content = Resources.StrInstructionScanOrder },
+ tbxScan = { Text = "" }
+ };
+ }
+
+ ///
+ /// Event handler taking the input from text box which should be scanned but also can be input manually.
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ private void UserControlInput_Handler(Object sender, String input)
+ {
+ _scan = input;
+ _scanInputReceived = true;
+ }
+
+ ///
+ /// Scanning of order number from production order sheet and comparing with DB.
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ ///
+ /// - Removed signals for and as
+ /// these will be automatically set based on return value in
+ /// .
+ ///
+ public override StatusReturn ExecuteProcess()
+ {
+ if (Meter == null)
+ {
+ return StatusReturn.Failed;
+ }
+
+ SignalRunningState();
+
+ if (UserControl == null)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
+ return StatusReturn.Failed;
+ }
+
+ var ucBarCode = (UcBarcodeInput)UserControl;
+ ucBarCode.OnBarcodeInput += UserControlInput_Handler;
+
+ // set focus to text input for scanner
+ ucBarCode.FocusMe();
+ _scanInputReceived = false;
+
+ // wait for new line
+ while (!_scanInputReceived)
+ {
+ }
+
+ ucBarCode.OnBarcodeInput -= UserControlInput_Handler;
+
+ if (!string.IsNullOrEmpty(_scan) && _scan.Length > 6)
+ {
+ if (int.TryParse(_scan, out var prodOrderNo))
+ {
+ // Get order overview
+ if (OrderDetailsDb.GetCordonelOrderOverview(prodOrderNo, out var orderOverview))
+ {
+ if (ValidateProcessAndPublishDataToGui(orderOverview))
+ {
+ ActualProcessProgress++;
+ return StatusReturn.Okay;
+ }
+ return StatusReturn.Failed;
+ }
+
+ ErrorMsgDispatcher(Resources.StrErrorMsgDataBaseAccess);
+ return StatusReturn.Failed;
+ }
+ }
+
+ ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
+ return StatusReturn.Failed;
+ }
+
+ ///
+ /// Application differences in check result
+ ///
+ ///
+ protected abstract Boolean ValidateProcessAndPublishDataToGui(OrderOverViewCordonel orderOverview);
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs
index 0bb0af72..07ad034c 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/ConnectCordonel.cs
@@ -32,6 +32,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
///
/// - Error exit on unsupported FW from the configuration.json.
///
+ ///
+ /// - Early return if login failed.
+ ///
public override StatusReturn ExecuteProcess()
{
Boolean retVal;
@@ -53,24 +56,25 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
retVal = false;
}
+ if (!retVal)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
+ return StatusReturn.Failed;
+ }
+
// If interface is outdated
if (!Meter.InterfaceSupportsFwVersion)
{
ErrorMsgDispatcher($"{Resources.StrErrorMsg}: " +
- $"{Resources.StrMsgInterfaceVersion} {Meter.InterfaceVersion} - " +
- $"{Resources.StrMsgInterfaceSupportedMaxFwVersion} {Meter.InterfaceMaxFwVersion} - " +
+ $"{Resources.StrMsgInterfaceVersion} {Meter.InterfaceInfo.InterfaceVersion} - " +
$"{Resources.StrMsgInstalledFwVersion} {Meter.FwVersion}");
return StatusReturn.Failed;
}
SuccessMsgDispatcher($"{Resources.StrSuccessMsg}: " +
- $"{Resources.StrMsgInterfaceVersion} {Meter.InterfaceVersion} - " +
- $"{Resources.StrMsgInterfaceSupportedMaxFwVersion} {Meter.InterfaceMaxFwVersion} - " +
+ $"{Resources.StrMsgInterfaceVersion} {Meter.InterfaceInfo.InterfaceVersion} - " +
$"{Resources.StrMsgInstalledFwVersion} {Meter.FwVersion}");
- if (retVal) return StatusReturn.Okay;
-
- ErrorMsgDispatcher(Resources.StrErrorMsgCordonelLogin);
- return StatusReturn.Failed;
+ return StatusReturn.Okay;
}
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/DetectCordonel.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/DetectCordonel.cs
index 0c2d9993..18a18bad 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/DetectCordonel.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/DetectCordonel.cs
@@ -43,10 +43,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
// read the PcbId to validate Cordonel is attached
var retVal = !string.IsNullOrEmpty(Meter.GetPcbId());
- if (retVal) return StatusReturn.Okay;
+ if (retVal)
+ return StatusReturn.Okay;
ErrorMsgDispatcher(Resources.StrErrorMsgCordonelDetection);
return StatusReturn.Failed;
}
+
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/GetSerialNumberAndRadioAddress.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/GetSerialNumberAndRadioAddress.cs
index a912e5a7..18a8682c 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/GetSerialNumberAndRadioAddress.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/GenericProcesses/GetSerialNumberAndRadioAddress.cs
@@ -58,7 +58,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
"&withRadioAdress=true";
var responseJson = LocalWebRequest.GetRequest(url, 30000);
- var stringArray = JsonConvert.DeserializeObject(responseJson);
+ var stringArray = JsonConvert.DeserializeObject(responseJson);
if (stringArray != null)
{
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs
index 9bf5a649..62cb3390 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/IProductionProcess.cs
@@ -39,6 +39,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
///
event EventHandler OnProcessProgressChanged;
+ ///
+ /// Send messages to GUI
+ ///
+ event EventHandler OnGuiMessageDispatcher;
+
///
/// State of single production process
///
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckCordonelMapping.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckCordonelMapping.cs
new file mode 100644
index 00000000..e3ef3d14
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckCordonelMapping.cs
@@ -0,0 +1,130 @@
+using System;
+using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
+using Resources = Xylem.Common.Production.ProductionUiCordonel.Properties.Resources;
+
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.PickingProcesses
+{
+ ///
+ /// Check for Cordonel mapping parameters.
+ ///
+ public class CheckCordonelMapping : BaseProductionProcess
+ {
+ ///
+ /// Ctor
+ /// Setup of name and single process state
+ ///
+ public CheckCordonelMapping(String name) : base(name)
+ {
+ }
+
+ ///
+ /// Check Cordonel mapping:
+ /// - Check if PcbId is already mapped to production order
+ /// - Check if order is different from actual scanned order,
+ /// - Check if older box with octopussies is on stock,
+ /// - Preserve picking number for this Cordonel.
+ /// Precondition: - Detection of Cordonel has to be finished,
+ /// - Meter.OrderNumber has to be assigned after scan.
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public override StatusReturn ExecuteProcess()
+ {
+ if (Meter == null || string.IsNullOrEmpty(Meter.PcbId) || Meter.OrderNumber == 0)
+ {
+ return StatusReturn.Failed;
+ }
+
+ SignalRunningState(5);
+ Meter.ReLogin();
+ Meter.SetProcessState(DisplayCodes.PickingStarted);
+ Meter.Logout();
+
+ // Check mapping information
+ if (!OrderDetailsDb.GetCordonelMapping(Meter.PcbId, out var cordonelMapping) ||
+ cordonelMapping == null || cordonelMapping.Count == 0)
+ {
+ return ErrorExit(Resources.StrErrorMsgMissingMappingInformation);
+ }
+ ActualProcessProgress++;
+
+ // Check if this meter is mapped to a different order
+ if (cordonelMapping[0].CordonelAssignedPicking_FertigungsAuftragsNr != null &&
+ cordonelMapping[0].CordonelAssignedPicking_FertigungsAuftragsNr != Meter.OrderNumber)
+ {
+ return ErrorExit(Resources.StrErrorMsgMeterForOtherOrderAssigned +
+ $": {cordonelMapping[0].CordonelAssignedPicking_FertigungsAuftragsNr}");
+ }
+
+ // Check if meter is already married to a serial number on a previous run
+ if (cordonelMapping[0].MapPcbIdToSerialNumber_SerialNumber != null)
+ {
+ WarningMsgDispatcher(Resources.StrWarningMsgCordonelIsAlreadyMarried);
+ Meter.SerialNumber = cordonelMapping[0].MapPcbIdToSerialNumber_SerialNumber.ToString();
+ }
+
+ // Reserve picking for this device to lock other assembly line software to assign another Cordonel to
+ // this order.
+ //TODO THW deactivated until WebAPI is implemented
+ //if (!OrderDetailsDb.SetCordonelPickingStateToDb(Meter.PcbId, Meter.OrderNumber))
+ //{
+ // return ErrorExit(Resources.StrErrorMsgPickingReservationFailed);
+ //}
+ ActualProcessProgress++;
+
+ //TODO THW Read reservation status with GetOrderOverview to update the display
+ ActualProcessProgress++;
+
+ // Get detailed order information to set e.g. the correct meter size needed for LUT installation
+ if (!OrderDetailsDb.GetOrderDetails(Meter.OrderNumber, Meter.PcbId, out var orderDetails))
+ {
+ return ErrorExit(Resources.StrErrorMsgMissingOrderInformation);
+ }
+ ActualProcessProgress++;
+
+ // Meter has to be connected in advance being able to overwrite the meter size. The meterSize will be
+ // read out from Cordonel at Connect. This may be reassigned dependent on the orderDetails.MeterSize.
+ // This meter size is the base for all following process steps e.g. loading of the correct LUT.
+ // The property change allowance for the meter size and pressure assembled has to be set in advance
+ // soon the production process is defined as assembly.
+ Meter.EnablePropertyChangeAbility(true);
+ // During the LUT installation the MeterSize will be written to the Cordonel and stored permanently.
+ if (!Meter.SetMeterSize((MeterSize)orderDetails.MeterSize))
+ {
+ return ErrorExit(Resources.StrErrorMsgChangingMeterSizeFromOrderFailed);
+ }
+ SuccessMsgDispatcher(Resources.StrSuccessMsgChangedMeterSizeFromOrder + $": {Meter.MeterSize}");
+
+ //TODO THW do not change, read only if this is set
+ if (!Meter.SetPressureSensorAssembled(orderDetails.PressurePresent))
+ {
+ return ErrorExit(Resources.StrErrorMsgPressureSensorSetupFromOrderFailed);
+ }
+ var pressurePresent = Meter.PressureSensorAssembled
+ ? Resources.StrMsgPressureSensorApplied
+ : Resources.StrMsgPressureSensorNotApplied;
+ SuccessMsgDispatcher(Resources.StrSuccessMsgPressureSensorSetupFromOrder + $": {pressurePresent}");
+ Meter.EnablePropertyChangeAbility(false);
+
+ return StatusReturn.Okay;
+ }
+
+ ///
+ /// Common error exit method.
+ ///
+ ///
+ ///
+ private StatusReturn ErrorExit(String errorMsg)
+ {
+ Meter.ReLogin();
+ Meter.SetProcessState(DisplayCodes.PickingFailed);
+ Meter.Logout();
+ ErrorMsgDispatcher(errorMsg);
+ return StatusReturn.Failed;
+ }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckOrderNumber.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckOrderNumber.cs
index a4e23818..3f876722 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckOrderNumber.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/CheckOrderNumber.cs
@@ -1,100 +1,37 @@
using System;
-using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
-using Xylem.Common.Production.ProductionUiCordonel.Properties;
-using Xylem.Common.Production.ProductionUiCordonel.UserControls;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EventArgs;
+using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.GenericProcesses;
+using Resources = Xylem.Common.Production.ProductionUiCordonel.Properties.Resources;
namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.PickingProcesses
{
- public class CheckOrderNumber : BaseProductionProcess
+ public class CheckOrderNumber : BaseCheckOrderNumber
{
- // string from scanner with string delimiter
- private String _scan = "";
- // marker for scan input received
- private Boolean _scanInputReceived;
- ///
- /// Ctor
- ///
- public CheckOrderNumber(String name) : base( name)
+ ///
+ public CheckOrderNumber(String name) : base(name)
{
}
///
- protected override void InitUserControl()
+ protected override Boolean ValidateProcessAndPublishDataToGui(OrderOverViewCordonel orderOverview)
{
- UserControl = new UcBarcodeInput
- {
- lblHeadLine = { Content = Resources.StrInstructionScanOrder },
- tbxScan = { Text = "" }
- };
- }
-
- ///
- /// Event handler taking the input from text box which should be scanned but also can be input manually.
- ///
- ///
- ///
- /// - Initial
- ///
- private void UserControlInput_Handler(Object sender, String input)
- {
- _scan = input;
- _scanInputReceived = true;
- }
-
- ///
- /// Scanning of order number from production order sheet and comparing with DB.
- ///
- ///
- ///
- /// - Initial
- ///
- ///
- /// - Removed signals for and as
- /// these will be automatically set based on return value in
- /// .
- ///
- public override StatusReturn ExecuteProcess()
- {
- if (Meter == null)
- {
- return StatusReturn.Failed;
- }
-
- SignalRunningState();
-
- if (UserControl == null)
- {
- ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
- return StatusReturn.Failed;
- }
-
- var ucBarCode = (UcBarcodeInput)UserControl;
- ucBarCode.OnBarcodeInput += UserControlInput_Handler;
+ // ATTENTION: Set order number of Cordonel first to enable display on completed order
+ Meter.OrderNumber = orderOverview.OrderNumber;
- // set focus to text input for scanner
- ucBarCode.FocusMe();
- _scanInputReceived = false;
-
- // wait for new line
- while (!_scanInputReceived)
+ // Display order overview in GUI
+ DispatchGuiMessage(new GuiMessageArgs(GuiItem.OrderAmount, orderOverview.Count));
+ DispatchGuiMessage(new GuiMessageArgs(GuiItem.OrderCounter, orderOverview.AssignedPicking));
+ // Exit if order is completed
+ if (orderOverview.AssignedPicking >= orderOverview.Count)
{
+ // Order is already completed
+ ErrorMsgDispatcher(Resources.StrErrorOrderCompleted);
+ return false;
}
-
- ucBarCode.OnBarcodeInput -= UserControlInput_Handler;
-
- if (!string.IsNullOrEmpty(_scan) && _scan.Length > 6)
- {
- //TODO Roland, Do something with the scanned order
- if (int.TryParse(_scan, out var result))
- {
- Meter.OrderNumber = result;
- return StatusReturn.Okay;
- }
- }
-
- ErrorMsgDispatcher(Resources.StrErrorMsgScanOrderNumber);
- return StatusReturn.Failed;
+
+ return true;
}
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/ExecInstallLut.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/ExecInstallLut.cs
new file mode 100644
index 00000000..7427ddba
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/ExecInstallLut.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Logic.ProductionToProductMapper.Cordonel;
+using Newtonsoft.Json;
+using Xylem.Common.CommonCore.Configuration;
+using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
+using Xylem.Common.Logic.SoftwareAccessHelper;
+using Xylem.Common.Production.ProductionUiCordonel.Properties;
+
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.PickingProcesses
+{
+ ///
+ /// Production process for installation of the metrology-lookup-table LUT.
+ ///
+ public class ExecInstallLut : BaseProductionProcess
+ {
+ ///
+ /// Ctor
+ /// Setup of name and single process state
+ ///
+ public ExecInstallLut(String name) : base(name)
+ {
+ }
+
+ ///
+ /// Install the LUT.
+ /// Precondition: - Connection to Cordonel has to be validated.
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ public override StatusReturn ExecuteProcess()
+ {
+ if (Meter == null)
+ {
+ return StatusReturn.Failed;
+ }
+
+ SignalRunningState(7);
+
+ try
+ {
+ var url = ServiceUrls.GetLutUrl();
+ // ATTENTION: Meter.MeterSize has to be preset from order.MeterSize as this is forced by order.
+ // If not doing so, the wrong LUT will be loaded!
+ url += $"?Metersize={(Int32)MeterSizeConverter.ConvertMeterSizeNameToEnum(Meter.MeterSize)}" +
+ $"&ForProd=true&Region={Meter.Region}";
+ var requestResponse = LocalWebRequest.GetRequest(url, 30000);
+ if (string.IsNullOrEmpty(requestResponse))
+ {
+ ErrorMsgDispatcher(Resources.StrErrorLutNotFound);
+ return StatusReturn.Failed;
+ }
+
+ var lutList = JsonConvert.DeserializeObject>(requestResponse);
+ if (lutList.Count <= 0)
+ {
+ ErrorMsgDispatcher(Resources.StrErrorLutNotFound);
+ return StatusReturn.Failed;
+ }
+
+ var lut = lutList.First();
+ var meterLutUpdate = new MeterLutUpdate(Meter);
+ meterLutUpdate.OnProcessUpdate += ProcessUpdate_Handler;
+ var retVal = meterLutUpdate.LoadLutFromStream(lut.FileName, lut.FileContent.ToList());
+ retVal &= meterLutUpdate.UpdateMeterLut();
+ meterLutUpdate.OnProcessUpdate -= ProcessUpdate_Handler;
+ return !retVal ? StatusReturn.Failed : StatusReturn.Okay;
+ }
+ catch (Exception ex)
+ {
+ Meter?.WriteLog(ex.Message);
+ return StatusReturn.Failed;
+ }
+ }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PickingProcessStatesDef.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PickingProcessStatesDef.cs
index 0e44f138..4de17564 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PickingProcessStatesDef.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PickingProcessStatesDef.cs
@@ -119,19 +119,18 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki
processState: ProcessState.ConnectCordonel,
processInfo: Resources.StrStateConnectCordonel,
productionProcessNo: 2,
- nextStateOnSuccess: ProcessState.GetProgrammingParameters),
+ nextStateOnSuccess: ProcessState.CheckCordonelMapping),
- // Precondition: - The connection process has to be completed as a readout of some register
- // values from the Cordonel are needed to check the update capability:
- // - Wait on completed connection process before starting this process.
+ // Precondition: - The connection process has to be completed
+ // This process is needed to load the radio signal levels for this meter size and length which have to
+ // be compared later in the 'CheckProductionState' process.
new ProcessStateStruct(
productionProcess: new GetFinalParametrization(Resources.StrStateGetProgrammingParameters),
processState: ProcessState.GetProgrammingParameters,
processInfo: Resources.StrStateGetProgrammingParameters,
- productionProcessNo: 3,
- nextStateOnSuccess: ProcessState.CheckProductionState,
- // Wait before starting this process until this process has been successfully completed
- waitForSingleProcess: ProcessState.ConnectCordonel),
+ productionProcessNo: 4,
+ nextStateOnSuccess: ProcessState.InstallLut),
+
#endregion -------------------------------- GENERIC-STATES --------------------------------------------
#region ----------------------------------- PICKING-STATES --------------------------------------------
@@ -143,24 +142,43 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki
productionProcessNo: 0,
nextStateOnSuccess: ProcessState.DetectCordonel),
- // Precondition: - The connection process has to be completed as a readout of some register
- // values from the Cordonel are needed to check the update capability:
- // - Wait on completed connection process before starting this process.
+ // Precondition: - The connection process has to be completed
+ // During the 'ConnectCordonel' process the meter size will be read from the meter and set inside the
+ // 'GenesisMeter' object. Based on the order details this has to be changed afterward and to overwrite
+ // this in the 'GenesisMeter' object. It is needed for the installation of the correct LUT.
+ new ProcessStateStruct(
+ productionProcess: new CheckCordonelMapping(Resources.StrStateCheckCordonelMapping),
+ processState: ProcessState.CheckCordonelMapping,
+ processInfo: Resources.StrStateCheckCordonelMapping,
+ productionProcessNo: 3,
+ nextStateOnSuccess: ProcessState.GetProgrammingParameters),
+
+ // Connection of Cordonel has to be completed so leave to automatic
+ new ProcessStateStruct(
+ productionProcess: new ExecInstallLut(Resources.StrStateInstallLut),
+ processState: ProcessState.InstallLut,
+ processInfo: Resources.StrStateInstallLut,
+ productionProcessNo: 5,
+ nextStateOnSuccess: ProcessState.CheckProductionState),
+
+ // Precondition: - The programming parameters are needed to check if radio signal levels for this
+ // meter size and length are defined,
+ // - The LUT has to be installed in advance,
+ // - The battery fix has to be applied in advance.
new ProcessStateStruct(
productionProcess: new CheckProductionState(Resources.StrStateCheckProductionState),
processState: ProcessState.CheckProductionState,
processInfo: Resources.StrStateCheckProductionState,
- productionProcessNo: 4,
+ productionProcessNo: 6,
nextStateOnSuccess: ProcessState.PrepareAssemblyLineRelease,
- // Wait before starting this process until this process has been successfully completed
- waitForSingleProcess: ProcessState.GetProgrammingParameters),
+ waitForAllProcesses: true),
// Precondition: - All checks have to be executed with positive result
new ProcessStateStruct(
productionProcess: new PrepareAssemblyRelease(Resources.StrStatePrepareAssemblyRelease),
processState: ProcessState.PrepareAssemblyLineRelease,
processInfo: Resources.StrStatePrepareAssemblyRelease,
- productionProcessNo: 5,
+ productionProcessNo: 7,
nextStateOnSuccess: ProcessState.AssemblyLineRelease),
new ProcessStateStruct(
@@ -170,7 +188,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki
productionProcessNo: null,
nextStateOnSuccess: ProcessState.Idle),
- //TODO Roland: implement your states here
#endregion -------------------------------- PICKING-STATES --------------------------------------------
};
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs
index 79c3ac73..453f0489 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/PickingProcesses/PrepareAssemblyRelease.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using Xylem.Common.CommonCore.Consts;
+using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
+using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Enum;
using Xylem.Common.Production.ProductionUiCordonel.Properties;
using Xylem.Common.Production.ProductionUiCordonel.UserControls;
@@ -47,25 +49,37 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki
///
/// - Initial.
///
+ ///
+ /// - Final result message, display and push to database.
+ ///
public override StatusReturn ExecuteProcess()
{
try
{
- _waitOnUserFeedback = true;
SignalRunningState(MaxActualProgressSteps);
- var ucDialog = (UcDialog)UserControl;
-
// Push progress will publish all application versions and the core version
- var retVal = Meter.PushProgress("Assembly", Version.ToString());
- if (retVal == StatusReturn.Failed)
- {
- return retVal;
- }
+ // Set picking for this device as finished successfully.
+ //TODO THW deactivated until WebAPI is implemented
+ //if (StatusReturn.Failed == Meter.PushProgress("Assembly", Version.ToString()) ||
+ // !OrderDetailsDb.SetCordonelPickingStateToDb(Meter.PcbId, Meter.OrderNumber, 1))
+ //{
+ // OrderDetailsDb.SetCordonelPickingStateToDb(Meter.PcbId, Meter.OrderNumber, 0);
+ // Meter.Login();
+ // Meter.SetProcessState(DisplayCodes.PickingFailed);
+ // Meter.Logout();
+ // ErrorMsgDispatcher(Resources.StrErrorMsgPickingFinalizationFailed);
+ // return StatusReturn.Failed;
+ //}
ActualProcessProgress++;
-
+ Meter.ReLogin();
+ Meter.SetProcessState(DisplayCodes.PickingTested);
+ Meter.Logout();
+
// Initialize the ucDialog
+ _waitOnUserFeedback = true;
+ var ucDialog = (UcDialog)UserControl;
ucDialog.SetHeadline(Resources.StrStateAssemblyLineRelease);
ucDialog.SetMessage(Resources.StrInfoMeterBoxing);
var OptionList = new List();
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs
index b0aef037..6fe00b63 100644
--- a/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/ProcessController.cs
@@ -85,6 +85,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
///
public event EventHandler OnProcessProgressChanged;
+ ///
+ /// Dispatch a message to the GUI
+ ///
+ public event EventHandler OnGuiMessageDispatcher;
+
// cancellation token
private CancellationTokenSource _cancellationTokenSource;
private CancellationToken _cancellationToken;
@@ -254,6 +259,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
OnProcessProgressChanged?.Invoke(sender, e);
}
+ private void GuiMessageDispatcher_Handler(Object sender, GuiMessageArgs e)
+ {
+ OnGuiMessageDispatcher?.Invoke(sender, e);
+ }
+
private void ProcessLog_Handler(Object sender, ProcessLogArgs e)
{
OnProcessLogRequest?.Invoke(sender, e);
@@ -325,79 +335,85 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
// Signal state change to logger
OnStateMachineStateChanged?.Invoke(this, new ProcessStateArgs(_stateMachineState));
-
- // Check if state is the first in the list of production processes to reset cancellationToken and
- // calculate the over all process steps to feed the progress bars.
- var startProcessState = _processStateDef.GetStateOfFirstProcess();
- if (startProcessState == _stateMachineState)
+
+ if (_processStateDef != null)
{
- // Kill all processes at start
- KillProcesses();
- // Avoid immediately cancellation for first process of the process chain
- ResetCancellationToken();
- // Set up the counter for maximum overall process progress bar in GUI
- CalcAndPushMaxOverAllProcessSteps();
- }
-
- // Get the processStateStruct of this new required stateMachineState
- var processStateStruct = _processStateDef.GetProcessStateStructOfState(_stateMachineState);
-
- switch (_stateMachineState)
- {
- case ProcessState.Idle:
- break;
-
- case ProcessState.CheckNewMeter:
- // Detection of Cordonel has to be completed before assigning next state. It has to be checked if
- // the meter changed to clear all collected contents of previous run. To UPDATE ALL INFORMATION after
- // new meter assignment the "DetectCordonel" has to be repeated to return here "Old Meter" and then
- // enter the "ConnectCordonel"!
- if (processStateStruct.NextStateOnSuccess != null)
- {
- _stateMachineState = CheckForNewMeter() ? (ProcessState)processStateStruct.NextStateOnSuccess :
- processStateStruct.ErrorExitState;
- }
- else
- {
- _stateMachineState = ProcessState.Error;
- }
- break;
-
- case ProcessState.RepeatFailedTests:
- _stateMachineState = RepeatFailedTests();
- break;
-
- case ProcessState.AbortTest:
- AbortProcesses();
- _stateMachineState = ProcessState.Idle;
- break;
-
- case ProcessState.Stop:
+ // Check if state is the first in the list of production processes to reset cancellationToken and
+ // calculate the over all process steps to feed the progress bars.
+ var startProcessState = _processStateDef.GetStateOfFirstProcess();
+ if (startProcessState == _stateMachineState)
+ {
+ // Kill all processes at start
KillProcesses();
- _stateMachineState = ProcessState.Idle;
- break;
+ // Avoid immediately cancellation for first process of the process chain
+ ResetCancellationToken();
+ // Set up the counter for maximum overall process progress bar in GUI
+ CalcAndPushMaxOverAllProcessSteps();
+ }
- case ProcessState.Error:
- // Common error handling routine
- ProcessErrorHandler(_stateChangeRequestProcess);
- // Start the error handler with its user feedback request. It has to be started
- // always even if the abortion of all processes is required! The error handler
- // will change the exit state based on the user input.
- StartProcess(processStateStruct);
- break;
+ // Get the processStateStruct of this new required stateMachineState
+ var processStateStruct = _processStateDef.GetProcessStateStructOfState(_stateMachineState);
- case ProcessState.StateListDelimiter:
- _stateMachineState = ProcessState.Idle;
- break;
+ switch (_stateMachineState)
+ {
+ case ProcessState.Idle:
+ break;
- default:
- // This is the call to the processes for a specific test
- StartProcess(processStateStruct);
- if (processStateStruct.KickOffParallelState != null)
- {
- _stateMachineState = (ProcessState)processStateStruct.KickOffParallelState;
- }
- break;
+ case ProcessState.CheckNewMeter:
+ // Detection of Cordonel has to be completed before assigning next state. It has to be checked if
+ // the meter changed to clear all collected contents of previous run. To UPDATE ALL INFORMATION after
+ // new meter assignment the "DetectCordonel" has to be repeated to return here "Old Meter" and then
+ // enter the "ConnectCordonel"!
+ if (processStateStruct.NextStateOnSuccess != null)
+ {
+ _stateMachineState = CheckForNewMeter()
+ ? (ProcessState)processStateStruct.NextStateOnSuccess
+ : processStateStruct.ErrorExitState;
+ }
+ else
+ {
+ _stateMachineState = ProcessState.Error;
+ }
+
+ break;
+
+ case ProcessState.RepeatFailedTests:
+ _stateMachineState = RepeatFailedTests();
+ break;
+
+ case ProcessState.AbortTest:
+ AbortProcesses();
+ _stateMachineState = ProcessState.Idle;
+ break;
+
+ case ProcessState.Stop:
+ KillProcesses();
+ _stateMachineState = ProcessState.Idle;
+ break;
+
+ case ProcessState.Error:
+ // Common error handling routine
+ ProcessErrorHandler(_stateChangeRequestProcess);
+ // Start the error handler with its user feedback request. It has to be started
+ // always even if the abortion of all processes is required! The error handler
+ // will change the exit state based on the user input.
+ StartProcess(processStateStruct);
+ break;
+
+ case ProcessState.StateListDelimiter:
+ _stateMachineState = ProcessState.Idle;
+ break;
+
+ default:
+ // This is the call to the processes for a specific test
+ StartProcess(processStateStruct);
+ if (processStateStruct.KickOffParallelState != null)
+ {
+ _stateMachineState = (ProcessState)processStateStruct.KickOffParallelState;
+ }
+
+ break;
+ }
}
}
catch (ThreadAbortException ex)
@@ -441,7 +457,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
}
}
}
-
+
///
/// Returns the currentGenesis information for display
///
@@ -453,7 +469,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
{
return _cordonelRequirements;
}
-
+
///
/// Returns the currentGenesis information for display
///
@@ -465,8 +481,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
{
return _genesisMeter;
}
-
-
+
+
///
/// Clears all collected data on new genesisMeter and reminds the detected for next
/// detection and run of this comparison.
@@ -510,7 +526,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
InitNewMeter();
InitProcesses(ppNo);
ResetCancellationToken();
-
+
// Remind actual genesis for next call
_lastPcbId = _genesisMeter?.PcbId;
@@ -568,7 +584,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
return state;
}
-
+
///
/// Error handler
///
@@ -599,6 +615,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
pp.RetryProcess();
pp = _processStateDef.GetProcessOfState(ProcessState.RebootCordonel);
pp.RetryProcess();
+ pp = _processStateDef.GetProcessOfState(ProcessState.CheckRadio);
+ pp.RetryProcess();
pp = _processStateDef.GetProcessOfState(ProcessState.CheckFinalParametrization);
pp.RetryProcess();
}
@@ -619,7 +637,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
OnProcessProgressChanged?.Invoke(this, new ProcessProgressArgs(_maxOverallProcessesSteps,
ProcessProgressArgs.ProcessProgressType.MaxOverallProcessSteps));
}
-
+
///
/// Calculate all processes which are completed or skipped and signal to GUI.
///
@@ -666,9 +684,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
process.IdleProcess();
// All processes from and behind this process will be killed to kep the preceding as is
- else if ( _processStateDef.GetProductionProcessNoOfProcess(process) >= productionProcessNo)
+ else if (_processStateDef.GetProductionProcessNoOfProcess(process) >= productionProcessNo)
process.IdleProcess();
-
+
// Add process to list to feed the process window in main screen
if (Processes.All(pp => pp.ProcessName != process.ProcessName))
{
@@ -812,6 +830,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
if (process == null)
return;
+ process.OnGuiMessageDispatcher += GuiMessageDispatcher_Handler;
process.OnProcessProgressChanged += ProcessProgress_Handler;
process.OnProcessLogRequest += ProcessLog_Handler;
process.OnProcessStateChanged += ProcessStateChanged_Handler;
@@ -827,6 +846,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
if (process == null)
return;
+ process.OnGuiMessageDispatcher -= GuiMessageDispatcher_Handler;
process.OnProcessProgressChanged -= ProcessProgress_Handler;
process.OnProcessLogRequest -= ProcessLog_Handler;
process.OnProcessStateChanged -= ProcessStateChanged_Handler;
@@ -910,7 +930,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses
if (productionProcessNo == null)
pp.IdleProcess();
// All processes from and behind this process will be killed to kep the preceding as is
- else if ( _processStateDef.GetProductionProcessNoOfProcess(pp) >= productionProcessNo)
+ else if (_processStateDef.GetProductionProcessNoOfProcess(pp) >= productionProcessNo)
pp.IdleProcess();
}
}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AlarmMask.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AlarmMask.cs
new file mode 100644
index 00000000..bc39a99c
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AlarmMask.cs
@@ -0,0 +1,79 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ //using Common.Hardware.SIRT;
+
+ using System.Text;
+
+ public class AlarmMask
+ {
+ protected readonly byte[] bits;
+
+ public AlarmMask(byte value) => this.bits = value.GetBitsLE();
+
+ public bool SpecificError
+ {
+ get => this.bits[0] == 1;
+ set => this.bits[0] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MediumAbsent
+ {
+ get => this.bits[1] == 1;
+ set => this.bits[1] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BrokenPipe
+ {
+ get => this.bits[2] == 1;
+ set => this.bits[2] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Backflow
+ {
+ get => this.bits[3] == 1;
+ set => this.bits[3] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MetrologyUnavailable
+ {
+ get => this.bits[4] == 1;
+ set => this.bits[4] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MagneticTamper
+ {
+ get => this.bits[5] == 1;
+ set => this.bits[5] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Leak
+ {
+ get => this.bits[6] == 1;
+ set => this.bits[6] = (byte)(value ? 1 : 0);
+ }
+
+ public bool LowBattery
+ {
+ get => this.bits[7] == 1;
+ set => this.bits[7] = (byte)(value ? 1 : 0);
+ }
+
+ public override string ToString()
+ {
+ var alarmMaskBuilder = new StringBuilder();
+
+ alarmMaskBuilder.AppendLine($"{nameof(this.SpecificError),20}: {this.SpecificError}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.MediumAbsent),20}: {this.MediumAbsent}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.BrokenPipe),20}: {this.BrokenPipe}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.Backflow),20}: {this.Backflow}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.MetrologyUnavailable),20}: {this.MetrologyUnavailable}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.MagneticTamper),20}: {this.MagneticTamper}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.Leak),20}: {this.Leak}");
+ alarmMaskBuilder.AppendLine($"{nameof(this.LowBattery),20}: {this.LowBattery}");
+
+ return alarmMaskBuilder.ToString();
+ }
+
+ public static implicit operator byte(AlarmMask alarmMask) => alarmMask.bits.GetByteLE();
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AppCode.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AppCode.cs
new file mode 100644
index 00000000..4ce6d158
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/AppCode.cs
@@ -0,0 +1,13 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public enum AppCode
+ {
+ BUP = 0x00,
+ LAT = 0x01,
+ SEMI = 0x08,
+ LoggerTelegram = 0x09,
+ TestTelegram = 0x0A,
+ DEBUG = 0x0B,
+ EncapsulatedFlexNet = 0x10
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/DisplayUnits.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/DisplayUnits.cs
new file mode 100644
index 00000000..8414e6d5
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/DisplayUnits.cs
@@ -0,0 +1,11 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public enum DisplayUnits
+ {
+ NA = 0,
+ m3 = 19,
+ CF = 35,
+ GAL = 24,
+ IGAL = 144,
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Epoch20000101.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Epoch20000101.cs
new file mode 100644
index 00000000..0bdbe9b4
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Epoch20000101.cs
@@ -0,0 +1,35 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using System;
+
+ public class Epoch20000101
+ {
+ private static readonly DateTime epoch = new DateTime(2000, 01, 01, 00, 00, 00, DateTimeKind.Utc);
+
+ private readonly byte[] bytes;
+
+ public Epoch20000101(DateTimeKind dateTimeKind = DateTimeKind.Utc)
+ => this.bytes = new byte[4];
+
+ public Epoch20000101(uint secondsSince, DateTimeKind dateTimeKind = DateTimeKind.Utc) : this(dateTimeKind)
+ => this.SecondsSince = secondsSince;
+
+ public uint SecondsSince
+ {
+ get => BitConverter.ToUInt32(this.bytes, 0);
+ set => BitConverter.GetBytes(value).CopyTo(this.bytes, 0);
+ }
+
+ public DateTime DateTime
+ {
+ get => epoch.AddSeconds(this.SecondsSince);
+ set => this.SecondsSince = (uint)(value - epoch).TotalSeconds;
+ }
+
+ public static uint UTCNow => new Epoch20000101 { DateTime = DateTime.UtcNow }.SecondsSince;
+
+ public static implicit operator DateTime(Epoch20000101 epoch) => epoch.DateTime;
+
+ public static implicit operator uint(Epoch20000101 epoch) => epoch.SecondsSince;
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Extensions.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Extensions.cs
new file mode 100644
index 00000000..055ad21b
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Extensions.cs
@@ -0,0 +1,623 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using System;
+ using System.Collections.Generic;
+
+ public static class Extensions
+ {
+ private const int ByteSize = 8;
+ private const int SByteSize = 16;
+ private const int Int16Size = 16;
+ private const int UInt16Size = 16;
+ private const int Int32Size = 32;
+ private const int UInt32Size = 32;
+ private const int Int64Size = 64;
+ private const int UInt64Size = 64;
+
+ public static byte[] GetBitsBE(this byte value)
+ {
+ var bits = new byte[ByteSize];
+
+ for (int i = 7, x = 0; i >= 0; i--, x++)
+ {
+ bits[x] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte[] GetBitsLE(this byte value)
+ {
+ var bits = new byte[ByteSize];
+
+ for (var i = 0; i < ByteSize; i++)
+ {
+ bits[i] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte[] GetBitsLE(this ushort value)
+ {
+ var bits = new byte[UInt16Size];
+
+ for (var i = 0; i < UInt16Size; i++)
+ {
+ bits[i] = (byte)((value >> i) & 1);
+ }
+
+ return bits;
+ }
+
+ public static byte GetByteLE(this byte[] bits)
+ {
+ if (bits is null)
+ {
+ return default(byte);
+ }
+
+ var value = default(byte);
+
+ for (var i = 0; i < ByteSize; i++)
+ {
+ value ^= (byte)(bits[i] << i);
+ }
+
+ return value;
+ }
+
+ public static byte GetByteLE(this byte[] bits, int start = 0, int count = 0)
+ {
+ if (bits is null)
+ {
+ return default(byte);
+ }
+
+ if (count == 0)
+ {
+ count = bits.Length;
+ }
+
+ var length = start + count;
+ var _byte = default(byte);
+
+ for (int i = start, x = 0; i < length; i++, x++)
+ {
+ _byte ^= (byte)(bits[i] << x);
+ }
+
+ return _byte;
+ }
+
+ public static void SetBitsLE(this byte value, byte[] bits, int start = 0, int count = 0)
+ {
+ if (bits is null)
+ {
+ return;
+ }
+
+ if (count == 0 || count > bits.Length)
+ {
+ count = bits.Length;
+ }
+
+ for (int i = start, x = 0; i < count; i++, x++)
+ {
+ bits[i] = (byte)((value >> x) % 2);
+ }
+ }
+
+ public static byte[] GetBytesBE(this sbyte value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this short value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this int value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this long value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 56);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this ushort value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this uint value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesBE(this ulong value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)(value >> 56);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index] = (byte)value;
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this sbyte value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this short value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this int value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index] = (byte)(value >> 24);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this long value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index] = (byte)(value >> 56);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this ushort value)
+ {
+ var bytes = new byte[2];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index] = (byte)(value >> 8);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this uint value)
+ {
+ var bytes = new byte[4];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index] = (byte)(value >> 24);
+
+ return bytes;
+ }
+
+ public static byte[] GetBytesLE(this ulong value)
+ {
+ var bytes = new byte[8];
+ var index = 0;
+
+ bytes[index++] = (byte)value;
+ bytes[index++] = (byte)(value >> 8);
+ bytes[index++] = (byte)(value >> 16);
+ bytes[index++] = (byte)(value >> 24);
+ bytes[index++] = (byte)(value >> 32);
+ bytes[index++] = (byte)(value >> 40);
+ bytes[index++] = (byte)(value >> 48);
+ bytes[index] = (byte)(value >> 56);
+
+ return bytes;
+ }
+
+ public static sbyte ToSByteBE(this byte[] bytes, int start = 0)
+ {
+ var value = default(sbyte);
+
+ value ^= (sbyte)(bytes[start++] << 8);
+ value ^= (sbyte)bytes[start];
+
+ return value;
+ }
+
+ public static short ToInt16BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(short);
+
+ value ^= (short)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static int ToInt32BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(int);
+
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static long ToInt64BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(long);
+
+ value ^= bytes[start++] << 56;
+ value ^= bytes[start++] << 48;
+ value ^= bytes[start++] << 40;
+ value ^= bytes[start++] << 32;
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static ushort ToUInt16BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ushort);
+
+ value ^= (ushort)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static uint ToUInt32BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(uint);
+
+ value ^= (uint)(bytes[start++] << 24);
+ value ^= (uint)(bytes[start++] << 16);
+ value ^= (uint)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static ulong ToUInt64BE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ulong);
+
+ value ^= (ulong)(bytes[start++] << 56);
+ value ^= (ulong)(bytes[start++] << 48);
+ value ^= (ulong)(bytes[start++] << 40);
+ value ^= (ulong)(bytes[start++] << 32);
+ value ^= (ulong)(bytes[start++] << 24);
+ value ^= (ulong)(bytes[start++] << 16);
+ value ^= (ulong)(bytes[start++] << 8);
+ value ^= bytes[start];
+
+ return value;
+ }
+
+ public static sbyte ToSByteLE(this byte[] bytes, int start = 0)
+ {
+ var value = default(sbyte);
+
+ value ^= (sbyte)bytes[start++];
+ value ^= (sbyte)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static short ToInt16LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(short);
+
+ value ^= bytes[start++];
+ value ^= (short)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static int ToInt32LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(int);
+
+ value ^= bytes[start++];
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start] << 24;
+
+ return value;
+ }
+
+ public static long ToInt64LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(long);
+
+ value ^= bytes[start++];
+ value ^= bytes[start++] << 8;
+ value ^= bytes[start++] << 16;
+ value ^= bytes[start++] << 24;
+ value ^= bytes[start++] << 32;
+ value ^= bytes[start++] << 40;
+ value ^= bytes[start++] << 48;
+ value ^= bytes[start] << 56;
+
+ return value;
+ }
+
+ public static ushort ToUInt16LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ushort);
+
+ value ^= bytes[start++];
+ value ^= (ushort)(bytes[start] << 8);
+
+ return value;
+ }
+
+ public static ushort ToUIint16LEFromBits(this byte[] bits)
+ {
+ if (bits is null)
+ {
+ bits = new byte[UInt16Size];
+ }
+
+ Array.Resize(ref bits, UInt16Size);
+
+ ushort value = 0;
+
+ for (var i = 0; i < UInt16Size; i++)
+ {
+ value ^= (ushort)(bits[i] << i);
+ }
+
+ return value;
+ }
+
+ public static uint ToUInt32LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(uint);
+
+ value ^= bytes[start++];
+ value ^= (uint)(bytes[start++] << 8);
+ value ^= (uint)(bytes[start++] << 16);
+ value ^= (uint)(bytes[start] << 24);
+
+ return value;
+ }
+
+ public static ulong ToUInt64LE(this byte[] bytes, int start = 0)
+ {
+ var value = default(ulong);
+
+ value ^= bytes[start++];
+ value ^= (ulong)(bytes[start++] << 8);
+ value ^= (ulong)(bytes[start++] << 16);
+ value ^= (ulong)(bytes[start++] << 24);
+ value ^= (ulong)(bytes[start++] << 32);
+ value ^= (ulong)(bytes[start++] << 40);
+ value ^= (ulong)(bytes[start++] << 48);
+ value ^= (ulong)(bytes[start] << 56);
+
+ return value;
+ }
+
+ public static ushort CRCCCITT(this byte[] bytes, int start = 0, int length = 0)
+ {
+ if (length == 0)
+ {
+ length = bytes.Length;
+ }
+
+ var crc = (ushort)0xFFFF;
+
+ for (var b = start; b < length; b++)
+ {
+ var _byte = bytes[b];
+ var token = (ushort)((_byte << 8) & 0xFF00);
+
+ for (var i = 0; i < 8; i++)
+ {
+ if (0x8000 == ((crc ^ token) & 0x8000))
+ {
+ crc <<= 1;
+ crc ^= 0x1021;
+ }
+ else
+ {
+ crc <<= 1;
+ }
+
+ token <<= 1;
+ }
+ }
+
+ return crc;
+ }
+
+ public static byte[] GetBytes(this string hexString)
+ {
+ var bytes = new List();
+
+ if (!string.IsNullOrWhiteSpace(hexString))
+ {
+ // not needed, only valid hex bytes are processed // hexString = Regex.Replace(hexString, "[^a-fA-F0-9]*", string.Empty);
+
+ var first = true;
+ var x = 0;
+
+ foreach (var hex in hexString)
+ {
+ if ('0' <= hex && hex <= '9')
+ {
+ x += hex - '0';
+ }
+ else if ('A' <= hex && hex <= 'F')
+ {
+ x += hex - 'A' + 10;
+ }
+ else if ('a' <= hex && hex <= 'f')
+ {
+ x = hex - 'a' + 10;
+ }
+ else
+ {
+ continue;
+ }
+
+ if (first)
+ {
+ x *= 16;
+ }
+ else
+ {
+ bytes.Add((byte)x);
+
+ x = 0;
+ }
+
+ first = !first;
+ }
+ }
+
+ return bytes.ToArray();
+ }
+
+ public static byte[] GetEncryptionKey(this string hexString, int requiredLength = 16)
+ {
+ var bytes = hexString.GetBytes();
+
+ if (bytes?.Length != requiredLength)
+ {
+ return default(byte[]);
+ }
+
+ return bytes;
+ }
+
+ public static uint GetAddress(this byte[] bytes, int index)
+ {
+ var value = default(uint);
+ var _index = index;
+
+ value ^= (uint)(bytes[_index++] << 24);
+ value ^= (uint)(bytes[_index++] << 16);
+ value ^= (uint)(bytes[_index++] << 8);
+ value ^= bytes[_index];
+
+ return value;
+ }
+
+ public static ushort GetCrc(this byte[] bytes, int index)
+ {
+ var value = default(ushort);
+ var _index = index;
+
+ value ^= (ushort)(bytes[_index++] << 8);
+ value ^= bytes[_index];
+
+ return value;
+ }
+
+ public static void SetAddress(this byte[] bytes, int index, uint address)
+ {
+ var _index = index;
+
+ bytes[_index++] = (byte)(address >> 24);
+ bytes[_index++] = (byte)(address >> 16);
+ bytes[_index++] = (byte)(address >> 8);
+ bytes[_index] = (byte)address;
+ }
+
+ public static void SetCrc(this byte[] bytes, int index, ushort crc)
+ {
+ var _index = index;
+
+ bytes[_index++] = (byte)(crc >> 8);
+ bytes[_index] = (byte)crc;
+ }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/LogContent.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/LogContent.cs
new file mode 100644
index 00000000..9748bd7d
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/LogContent.cs
@@ -0,0 +1,97 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class LogContent
+ {
+ private readonly byte[] bits = new byte[16];
+
+ public LogContent(ushort value = 0)
+ => this.bits = value.GetBitsLE();
+
+ public bool ForwardCounter
+ {
+ get => this.bits[12] == 1;
+ set => this.bits[12] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfMinimumFlow
+ {
+ get => this.bits[11] == 1;
+ set => this.bits[11] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MinimumFlow
+ {
+ get => this.bits[10] == 1;
+ set => this.bits[10] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfBrokenPipe
+ {
+ get => this.bits[9] == 1;
+ set => this.bits[9] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BrokenPipeFlow
+ {
+ get => this.bits[8] == 1;
+ set => this.bits[8] = (byte)(value ? 1 : 0);
+ }
+
+ public bool CurrentFlow
+ {
+ get => this.bits[7] == 1;
+ set => this.bits[7] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfPeakFlow
+ {
+ get => this.bits[6] == 1;
+ set => this.bits[6] = (byte)(value ? 1 : 0);
+ }
+
+ public bool PeakFlow
+ {
+ get => this.bits[5] == 1;
+ set => this.bits[5] = (byte)(value ? 1 : 0);
+ }
+
+ public bool TimeOfMaximumFlow
+ {
+ get => this.bits[4] == 1;
+ set => this.bits[4] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MaximumFlow
+ {
+ get => this.bits[3] == 1;
+ set => this.bits[3] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BackwardVolume
+ {
+ get => this.bits[2] == 1;
+ set => this.bits[2] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Counter
+ {
+ get => this.bits[1] == 1;
+ set => this.bits[1] = (byte)(value ? 1 : 0);
+ }
+
+ public bool AlarmState
+ {
+ get => this.bits[0] == 1;
+ set => this.bits[0] = (byte)(value ? 1 : 0);
+ }
+
+ public override string ToString()
+ => string.Join(string.Empty, this.bits);
+
+ public static implicit operator LogContent(ushort value)
+ => new LogContent(value);
+
+ public static implicit operator ushort(LogContent value)
+ => value.bits.ToUIint16LEFromBits();
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/MeterTypes.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/MeterTypes.cs
new file mode 100644
index 00000000..8c4d7484
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/MeterTypes.cs
@@ -0,0 +1,11 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public enum MeterTypes : byte
+ {
+ Residential = 0,
+ CandI = 1,
+ Cordonel = 0x09,
+ Residential__0x0B = 11,
+ CandI__0x0C = 12,
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/PAMStatus.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/PAMStatus.cs
new file mode 100644
index 00000000..4f452230
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/PAMStatus.cs
@@ -0,0 +1,62 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class PAMStatus
+ {
+ private readonly byte[] bits;
+
+ public PAMStatus(byte _byte)
+ => this.bits = _byte.GetBitsLE();
+
+ public bool CMD_UNKNOWN => this.bits[0] == 1;
+
+ public bool WRONG_AUTH => this.bits[1] == 1;
+
+ public bool EXPIRED_AUTH => this.bits[2] == 1;
+
+ public bool MIXED_TYPES => this.bits[3] == 1;
+
+ public bool OUT_OF_RANGE => this.bits[4] == 1;
+
+ public override string ToString()
+ {
+ if (this.bits.GetByteLE() == 0)
+ {
+ return nameof(OK);
+ }
+ if (this.OUT_OF_RANGE)
+ {
+ return nameof(this.OUT_OF_RANGE);
+ }
+ else if (this.MIXED_TYPES)
+ {
+ return nameof(this.MIXED_TYPES);
+ }
+ else if (this.CMD_UNKNOWN)
+ {
+ return nameof(this.CMD_UNKNOWN);
+ }
+ else if (this.EXPIRED_AUTH)
+ {
+ return nameof(this.EXPIRED_AUTH);
+ }
+ else if (this.WRONG_AUTH)
+ {
+ return nameof(this.WRONG_AUTH);
+ }
+ else
+ {
+ return string.Join(string.Empty, this.bits);
+ }
+ }
+
+ public static byte OK = 0;
+
+ public static byte EXPIREDAUTH = 4;
+
+ public static implicit operator byte(PAMStatus status)
+ => status?.bits?.GetByteLE() ?? 0xFF;
+
+ public static implicit operator string(PAMStatus status)
+ => status?.ToString();
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ChangeWakeUp.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ChangeWakeUp.cs
new file mode 100644
index 00000000..3fa9c0e3
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ChangeWakeUp.cs
@@ -0,0 +1,29 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public class ChangeWakeUp
+ {
+ private ChangeWakeUp(WakeUpMode mode) => this.WakeUpMode = mode;
+
+ public WakeUpMode WakeUpMode { get; }
+
+ public static ChangeWakeUp GoSleepAutoOff => WakeUpMode.SleepAutoOff;
+
+ public static ChangeWakeUp GoSleepAutoOn => WakeUpMode.SleepAutoOn;
+
+ public static ChangeWakeUp StayAwake => WakeUpMode.StayAwake;
+
+ public static implicit operator ChangeWakeUp(WakeUpMode mode) => new ChangeWakeUp(mode);
+
+ public static implicit operator byte[] (ChangeWakeUp changeWakeUp) => new byte[]
+ {
+ 0x00,
+ (byte)changeWakeUp.WakeUpMode,
+ 0x43,
+ 0x02,
+ 0x14,
+ 0x0E,
+ 0x80,
+ 0x40
+ };
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/DummyPam.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/DummyPam.cs
new file mode 100644
index 00000000..9e33b84c
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/DummyPam.cs
@@ -0,0 +1,7 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public class DummyPam
+ {
+ public static implicit operator byte[](DummyPam dummyPam) => new byte[0];
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ResetAlarms.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ResetAlarms.cs
new file mode 100644
index 00000000..b4d3e53a
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/ResetAlarms.cs
@@ -0,0 +1,70 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public class ResetAlarms
+ {
+ private readonly byte[] bits;
+
+ public ResetAlarms(byte _byte = 0xFF)
+ => this.bits = _byte.GetBitsLE();
+
+ public bool SpecificError
+ {
+ get => this.bits[0] == 1;
+ set => this.bits[0] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MediumAbsent
+ {
+ get => this.bits[1] == 1;
+ set => this.bits[1] = (byte)(value ? 1 : 0);
+ }
+
+ public bool BrokenPipe
+ {
+ get => this.bits[2] == 1;
+ set => this.bits[2] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Backflow
+ {
+ get => this.bits[3] == 1;
+ set => this.bits[3] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MetrologyUnavailable
+ {
+ get => this.bits[4] == 1;
+ set => this.bits[4] = (byte)(value ? 1 : 0);
+ }
+
+ public bool MagneticTamper
+ {
+ get => this.bits[5] == 1;
+ set => this.bits[5] = (byte)(value ? 1 : 0);
+ }
+
+ public bool Leak
+ {
+ get => this.bits[6] == 1;
+ set => this.bits[6] = (byte)(value ? 1 : 0);
+ }
+
+ public bool LowBattery
+ {
+ get => this.bits[7] == 1;
+ set => this.bits[7] = (byte)(value ? 1 : 0);
+ }
+
+ public static implicit operator byte[] (ResetAlarms resetAlarms) => new byte[]
+ {
+ 0x03,
+ resetAlarms.bits.GetByteLE(),
+ 0x43,
+ 0x01,
+ 0x14,
+ 0x30,
+ 0x68,
+ 0xD0
+ };
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/WakeUpMode.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/WakeUpMode.cs
new file mode 100644
index 00000000..839fbed2
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/Pams/WakeUpMode.cs
@@ -0,0 +1,12 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams
+{
+ public enum WakeUpMode : byte
+ {
+ /// Stay awake
+ StayAwake = 0x00,
+ /// Go to sleep with radio activate on by water flow.
+ SleepAutoOn = 0x03,
+ /// Go to sleep without radio activate on by water flow.
+ SleepAutoOff = 0x06
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RFTask.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RFTask.cs
new file mode 100644
index 00000000..5efb53ae
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RFTask.cs
@@ -0,0 +1,86 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using global::Common.Hardware.SIRT;
+ using global::Common.Hardware.SIRT.Tasks;
+
+ using System;
+ using System.Collections.Generic;
+
+ public class RFTask : WritePamTask
+ {
+ private readonly Stack messages = new Stack();
+
+ public SIRTMessage AKN { get; private set; }
+
+ public SIRTMessage BUP { get; private set; }
+
+ public SIRTMessage LAT { get; private set; }
+
+ public SIRTMessage DEBUG { get; private set; }
+
+ public SIRTMessage SEMI { get; private set; }
+
+ public SIRTMessage LastOrDefault()
+ => this.messages.Count > 0
+ ? this.messages.Peek()
+ : new SIRTMessage();
+
+ public override string ToString()
+ => BitConverter.ToString(this.request.Payload);
+
+ protected override void OnMessageSent(SIRTMessage request)
+ => this.messages.Push(request);
+
+ protected override void OnUnknownReceived(SIRTMessage unknown)
+ => this.messages.Push(unknown);
+
+ protected override void OnAKNReceived(SIRTMessage akn)
+ {
+ this.AKN = akn;
+
+ this.messages.Push(akn);
+ }
+
+ protected override void OnBUPReceived(SIRTMessage bup)
+ {
+ this.BUP = bup;
+
+ this.messages.Push(bup);
+ }
+
+ protected override void OnLATReceived(SIRTMessage lat)
+ {
+ this.LAT = lat;
+
+ this.messages.Push(lat);
+ }
+
+ protected override void OnDEBUGReceived(SIRTMessage debug)
+ {
+ this.DEBUG = debug;
+
+ this.messages.Push(debug);
+ }
+
+ protected override void OnSEMIReceived(SIRTMessage semi)
+ {
+ this.SEMI = semi;
+
+ this.messages.Push(semi);
+
+ if (semi.Payload.Length > 11)
+ {
+ var pamStatus = new PAMStatus(semi.Payload[11]);
+
+ if (pamStatus == PAMStatus.OK)
+ {
+ base.OnSEMIReceived(semi);
+ }
+ else
+ {
+ this.SetError();
+ }
+ }
+ }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RSSI.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RSSI.cs
new file mode 100644
index 00000000..e5b337e0
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/RSSI.cs
@@ -0,0 +1,42 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ public class RSSI
+ {
+ public RSSI(byte value, int mhz)
+ {
+ this.Value = value;
+
+ if (mhz == 433)
+ {
+ this.Dbm = value * 0.5 - 140;
+ this.Percent = value * 0.7333 - 57.6667;
+ }
+ else if (mhz == 868)
+ {
+ this.Dbm = value * 0.5 - 131.3;
+ this.Percent = value * 0.66 - 40.316;
+ }
+
+ if (this.Percent > 100)
+ {
+ this.Percent = 100;
+ }
+ else if (this.Percent < 0)
+ {
+ this.Percent = 0;
+ }
+ }
+
+ public byte Value { get; }
+
+ public double Dbm { get; }
+
+ public double Percent { get; }
+
+ public override string ToString() => $"{this.Dbm}dBm ({this.Percent:0.0}%)";
+
+ public static implicit operator byte(RSSI rssi) => rssi?.Value ?? 0;
+
+ public static implicit operator string(RSSI rssi) => rssi?.ToString();
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SEMI.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SEMI.cs
new file mode 100644
index 00000000..abf03f0c
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SEMI.cs
@@ -0,0 +1,176 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using Pams;
+
+ using System;
+ using System.Text;
+
+ ///
+ /// TODO: SEMI from the SirtDLL is not complete,
+ ///
+ public class SEMI
+ {
+ //public const int MIN_LENGTH = 120;
+ public const int MIN_LENGTH = 97;
+
+ public SEMI(byte[] payload, int mhz)
+ {
+ this.AppCode = (AppCode)payload[0];
+ this.Counter = payload[1];
+ this.Address = payload.ToUInt32BE(2);
+ this.Reading = payload.ToInt32BE(6);
+ this.MainAlarmByte = new ResetAlarms(payload[10]);
+ this.PAMStatus = new PAMStatus(payload[11]);
+ this.RSSI = new RSSI(payload[12], mhz);
+ this.MeterType = (MeterTypes)payload[13];
+ this.TransmissionInterval = payload.ToUInt16BE(14);
+ this.LATInterval = payload[16];
+ this.ActualFlow = payload.ToUInt16BE(17);
+ this.BackwardVolume = payload.ToUInt32BE(19);
+ this.Units = (DisplayUnits)payload[23];
+ this.MBusStatus = payload[24];
+ this.MBusTransmissionInterval = payload.ToUInt16BE(25);
+ this.MainAlarmMask = new ResetAlarms(payload[27]);
+ this.LeakageDetectionParameters = payload[28];
+ this.BrokenPipeDetectionParameters = payload[29];
+ this.BatteryRemainingYears = payload.ToUInt16BE(30) / (4D * 365);
+ this.ReminingBatteryCapacity = payload[32];
+ this.MaximumFlow = payload.ToUInt16BE(33);
+ this.TimeSinceMaximumFlow = payload.ToUInt16BE(35);
+ this.TimeSinceLowBattery = payload.ToUInt16BE(37);
+ this.AlarmLeakage = new Epoch20000101(payload.ToUInt32BE(39), DateTimeKind.Local);
+ this.AlarmAirInPipe = new Epoch20000101(payload.ToUInt32BE(43), DateTimeKind.Local);
+ this.AlarmReverseFlow = new Epoch20000101(payload.ToUInt32BE(47), DateTimeKind.Local);
+ this.AlarmBrokenPipe = new Epoch20000101(payload.ToUInt32BE(51), DateTimeKind.Local);
+ this.DataLogContent = payload.ToUInt16BE(55);
+ this.DataLoggingInterval = payload.ToUInt16BE(57);
+ this.FDRContent = payload.ToUInt16BE(59);
+ this.FDRDayOfMonth = payload[61];
+ this.ActualDateTime = new Epoch20000101(payload.ToUInt32BE(62), DateTimeKind.Local);
+ this.HistoricalErrorDays = payload[66];
+ this.CustomerSpecificText = Encoding.ASCII.GetString(payload, 67, 9);
+ this.TimeOfFDRReset = payload.ToUInt16BE(76);
+ this.TimeOfLogReset = payload.ToUInt16BE(78);
+ this.ActualPressure = payload.ToUInt16BE(80);
+ this.ActualTemperature = payload[82];
+ this.PressureParameter = Encoding.ASCII.GetString(payload, 83, 7);
+ this.TemperatureParameter = payload.ToInt32BE(90);
+ this.PulseOutParameter = payload[94];
+ this.AlarmByteExtended = payload[95];
+ this.AlarmMaskExtended = payload[96];
+ //this.AlarmMaxPressureTime = payload.ToUInt32BE(97);
+ //this.AlarmMinPressureTime = payload.ToUInt32BE(101);
+ //this.AlarmMaxTemperatureTime = payload.ToUInt32BE(105);
+ //this.AlarmMinTemperatureTime = payload.ToUInt32BE(109);
+ //this.LogContentPressureTemperature = payload.ToUInt16BE(113);
+ //this.FDRContentPressureTemperature = payload.ToUInt16BE(115);
+ //this.UnitExtraFlags = payload[117];
+ //this.MeterSize = payload[118];
+ //this.PressureCalibrationOffset = payload[119];
+ }
+
+ public AppCode AppCode { get; }
+
+ public byte Counter { get; }
+
+ public uint Address { get; }
+
+ public int Reading { get; }
+
+ public ResetAlarms MainAlarmByte { get; }
+
+ public PAMStatus PAMStatus { get; }
+
+ public RSSI RSSI { get; }
+
+ public MeterTypes MeterType { get; }
+
+ public ushort TransmissionInterval { get; }
+
+ public byte LATInterval { get; }
+
+ public ushort ActualFlow { get; }
+
+ public uint BackwardVolume { get; }
+
+ public DisplayUnits Units { get; }
+
+ public byte MBusStatus { get; }
+
+ public ushort MBusTransmissionInterval { get; }
+
+ public ResetAlarms MainAlarmMask { get; }
+
+ public byte LeakageDetectionParameters { get; }
+
+ public byte BrokenPipeDetectionParameters { get; }
+
+ public double BatteryRemainingYears { get; }
+
+ public byte ReminingBatteryCapacity { get; }
+
+ public ushort MaximumFlow { get; }
+
+ public ushort TimeSinceMaximumFlow { get; }
+
+ public ushort TimeSinceLowBattery { get; }
+
+ public DateTime AlarmLeakage { get; }
+
+ public DateTime AlarmAirInPipe { get; }
+
+ public DateTime AlarmReverseFlow { get; }
+
+ public DateTime AlarmBrokenPipe { get; }
+
+ public LogContent DataLogContent { get; }
+
+ public ushort DataLoggingInterval { get; }
+
+ public LogContent FDRContent { get; }
+
+ public byte FDRDayOfMonth { get; }
+
+ public DateTime ActualDateTime { get; }
+
+ public byte HistoricalErrorDays { get; }
+
+ public string CustomerSpecificText { get; }
+
+ public ushort TimeOfFDRReset { get; }
+
+ public ushort TimeOfLogReset { get; }
+
+ public ushort ActualPressure { get; }
+
+ public byte ActualTemperature { get; }
+
+ public string PressureParameter { get; }
+
+ public int TemperatureParameter { get; }
+
+ public byte PulseOutParameter { get; }
+
+ public byte AlarmByteExtended { get; }
+
+ public byte AlarmMaskExtended { get; }
+
+ //public uint AlarmMaxPressureTime { get; }
+
+ //public uint AlarmMinPressureTime { get; }
+
+ //public uint AlarmMaxTemperatureTime { get; }
+
+ //public uint AlarmMinTemperatureTime { get; }
+
+ //public ushort LogContentPressureTemperature { get; }
+
+ //public ushort FDRContentPressureTemperature { get; }
+
+ //public byte UnitExtraFlags { get; }
+
+ //public byte MeterSize { get; }
+
+ //public byte PressureCalibrationOffset { get; }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SIRTServer.cs b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SIRTServer.cs
new file mode 100644
index 00000000..4ed5706b
--- /dev/null
+++ b/Common/Production/ProductionUiCordonel/ProductionProcesses/RFTelegrams/SIRTServer.cs
@@ -0,0 +1,211 @@
+namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams
+{
+ using global::Common.Hardware.SIRT;
+ using global::Common.Hardware.SIRT.Tasks;
+
+ using System;
+
+ using Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.RFTelegrams.Pams;
+
+ internal class SIRTServer
+ {
+ private static Action messageCallback;
+ private static Action errorMessageCallback;
+ private static readonly SIRTHub sirtHub = new SIRTHub();
+
+ ///
+ /// Connects SIRT's globaly for the application
+ ///
+ /// Action that receives info messages
+ /// Action that receives error messages
+ /// The COM-Ports to be connected
+ /// true - if all ports connected otherwise false
+ public static bool StartServer(Action messageHandler, Action errorMessageHandler, params int[] comPorts)
+ {
+ string sirtId;
+ int frequency;
+ bool succeeded = true;
+
+ messageHandler?.Invoke(new string('-', 100));
+
+ foreach (var comport in comPorts)
+ {
+ succeeded = ConnectSIRT(comport, out sirtId, out frequency);
+
+ if (succeeded)
+ {
+ messageHandler?.Invoke($"COM{comport}|{sirtId}|{frequency}MHz - connected");
+ messageHandler?.Invoke(new string('-', 100));
+ }
+ else
+ {
+ errorMessageHandler?.Invoke($"SIRT at COM{comport} not connected!");
+ errorMessageHandler?.Invoke(new string('-', 100));
+
+ break;
+ }
+ }
+
+ if (succeeded)
+ {
+ messageCallback = messageHandler;
+ errorMessageCallback = errorMessageHandler;
+ }
+
+ return succeeded;
+ }
+
+ ///
+ /// Executes:
+ /// 1. Dummy PAM -> Wake Up
+ /// 2. Reset Alarms
+ /// 3. Reset Extended Alarms
+ /// 4. TODO: Go Sleep Auto On ?
+ ///
+ /// 433/868
+ /// The Radio address
+ /// The Encryption Key
+ /// Repeats count
+ ///
+ public static bool StartProgramming(int frequency, uint address, string encryptionKey, int repeatsCount = 3)
+ {
+ var succeeded = true;
+ var encryptionBytes = encryptionKey.GetBytes();
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.WakeUpCmd = true;
+ task.DelPamSemi = true;
+ task.WakeUpModul = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new DummyPam();
+ }
+ , repeatsCount);
+ }
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.DelPamSemi = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new ResetAlarms(0xFF);
+ }
+ , repeatsCount);
+ }
+
+ if (succeeded)
+ {
+ succeeded = SendPAM(task =>
+ {
+ task.DelPamSemi = true;
+ task.IsEncrypted = true;
+ task.Frequency = frequency;
+ task.RequestAddress = address;
+ task.EncryptionKey = encryptionBytes;
+ task.Data = new ResetAlarms(0xFE);
+ }
+ , repeatsCount);
+ }
+
+ //TODO: enable for production ?
+ //if (succeeded)
+ //{
+ // succeeded = SendPAM(task =>
+ // {
+ // task.DelPamSemi = true;
+ // task.IsEncrypted = true;
+ // task.Frequency = frequency;
+ // task.RequestAddress = address;
+ // task.EncryptionKey = encryptionBytes;
+ // task.Data = ChangeWakeUp.GoSleepAutoOn;
+ // }
+ // , repeatsCount);
+ //}
+
+ return succeeded;
+ }
+
+ ///
+ /// Dispose all SIRT's globaly for the application.
+ ///
+ public static void Dispose()
+ {
+ void LogState(object state) => messageCallback?.Invoke(state?.ToString());
+
+ sirtHub.StateLogging += LogState;
+ sirtHub.Stop();
+ sirtHub.StateLogging -= LogState;
+
+ messageCallback = null;
+ errorMessageCallback = null;
+ }
+
+ private static bool ConnectSIRT(int portno, out string sirtId, out int frequency)
+ => sirtHub.TryOpen($"COM{portno}", out sirtId, out frequency);
+
+ private static bool SendPAM(Action taskOptions, int repeatsCount = 3)
+ {
+ void LogMessage(SIRTMessage message) => messageCallback?.Invoke(message.ToString());
+
+ var dashes = new string('-', 100);
+ var cordonelTask = new RFTask();
+ var succeeded = false;
+
+ taskOptions(cordonelTask);
+
+ cordonelTask.MessageSent += LogMessage;
+ cordonelTask.MessageReceived += LogMessage;
+
+ for (var i = 1; i <= repeatsCount && cordonelTask.State != SIRTTaskState.Completed && cordonelTask.State != SIRTTaskState.Cancelled; i++)
+ {
+ if (sirtHub.Start(cordonelTask))
+ {
+ cordonelTask.Wait();
+ }
+ }
+
+ cordonelTask.MessageReceived -= LogMessage;
+ cordonelTask.MessageSent -= LogMessage;
+
+ if (cordonelTask.State == SIRTTaskState.Completed)
+ {
+ succeeded = true;
+
+ messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}");
+ messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}");
+
+ var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]);
+ messageCallback?.Invoke($"{"PAM Status",20}: {pam}");
+
+ var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]);
+ messageCallback?.Invoke(alarm.ToString());
+ messageCallback?.Invoke(dashes);
+ }
+ else
+ {
+ succeeded = false;
+
+ messageCallback?.Invoke($"{"CMD",20}: {cordonelTask}");
+ messageCallback?.Invoke($"{"State",20}: {cordonelTask.State}");
+
+ var pam = new PAMStatus(cordonelTask.SEMI.Payload[11]);
+ messageCallback?.Invoke($"{"PAM Status",20}: {pam}");
+
+ var alarm = new AlarmMask(cordonelTask.SEMI.Payload[10]);
+ messageCallback?.Invoke(alarm.ToString());
+ messageCallback?.Invoke(dashes);
+ }
+
+ return succeeded;
+ }
+ }
+}
diff --git a/Common/Production/ProductionUiCordonel/ProductionUiCordonel.csproj b/Common/Production/ProductionUiCordonel/ProductionUiCordonel.csproj
index 3007adac..061229c9 100644
--- a/Common/Production/ProductionUiCordonel/ProductionUiCordonel.csproj
+++ b/Common/Production/ProductionUiCordonel/ProductionUiCordonel.csproj
@@ -15,6 +15,9 @@
4
true
false
+
+
+
C:\Users\drabesch_ro\Documents\cordonelProduction\
true
Disk
@@ -31,9 +34,6 @@
false
true
true
-
-
-
AnyCPU
@@ -100,6 +100,31 @@
false
+
+ true
+ bin\VPN_Debug\
+ DEBUG;TRACE
+ true
+ true
+ full
+ AnyCPU
+ 7.0
+ prompt
+ true
+
+
+ true
+ bin\x64\VPN_Debug\
+ DEBUG;TRACE
+ true
+ true
+ full
+ x64
+ 7.0
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
@@ -140,21 +165,13 @@
Properties\SharedAssemblyInfo.cs
-
-
-
- ctlMultiModeMarriage.xaml
-
-
- ctlMultiModePicking.xaml
-
-
- ctlMultiModePressure.xaml
-
+
+
+
@@ -170,19 +187,11 @@
+
+
-
-
-
-
-
-
-
-
-
-
@@ -200,6 +209,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Resources.de.resx
True
@@ -229,18 +254,6 @@
UcPasswordFile.xaml
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
-
- Designer
- MSBuild:Compile
-
Designer
MSBuild:Compile
@@ -348,6 +361,10 @@
{1B02C79E-0B19-43E2-8F6B-71EF0C786C97}
CommonCore
+
+ {8DE8E742-EE0A-4004-AA49-3D08D748E5AC}
+ Common.Hardware.SIRT
+
{2E139F63-B6FE-4EA9-A098-85364FE9B26C}
PortCore
@@ -435,7 +452,7 @@
False
- Microsoft .NET Framework 4.6 %28x86 and x64%29
+ Microsoft .NET Framework 4.6 %28x86 und x64%29
true
diff --git a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml
index 55b92026..e48305ac 100644
--- a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml
+++ b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml
@@ -105,25 +105,27 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
+
@@ -136,7 +138,7 @@
-
+
diff --git a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs
index 657c9f6b..d2a01868 100644
--- a/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs
+++ b/Common/Production/ProductionUiCordonel/ProductionWindow.xaml.cs
@@ -41,14 +41,12 @@ namespace Xylem.Common.Production.ProductionUiCordonel
private static readonly AssemblyName _assemblyName = Assembly.GetExecutingAssembly().GetName();
private static readonly String _assemblyExecRootPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
private static readonly Version _version = _assemblyName.Version;
- private readonly String _strSoftwareNameVersion;
+ private readonly String _strAppNameVersion;
private RegisterLDAPUser _registerForm;
private Boolean _lockGenesisInfo;
-
- private Int32 Slot
- {
- get; set;
- }
+ private Int32 OrderAmount { get; set; }
+ private Int32 OrderCounter { get; set; }
+ private Int32 Slot { get; set; }
// maximum processing steps for calculation of progress bar
private Int32 _maxOverallProcessSteps;
@@ -82,7 +80,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel
///
/// - Auto start.
///
- public ProductionWindow(String softwareName, String projectName, IProcessStateDef processStateDef,
+ ///
+ /// - Order counter.
+ ///
+ public ProductionWindow(String softwareName, String projectName, IProcessStateDef processStateDef,
Boolean autoStartFirstProductionProcess)
{
_logger = NLogHelper.CreateOrGetLogger(projectName);
@@ -115,15 +116,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel
InitializeComponent();
// Log version to files for debug purposes
- _strSoftwareNameVersion = $"{softwareName} {_version}";
- _logger.Info(_strSoftwareNameVersion);
+ _strAppNameVersion = $"{softwareName} {_version}";
+ _logger.Info(_strAppNameVersion);
- Title = _strSoftwareNameVersion;
+ Title = _strAppNameVersion;
//static labels
UpdateContentControl(lblSerialNumberTxt, Properties.Resources.StrLblSerialNumberTxt + ":");
UpdateContentControl(lblRadioAddressText, Properties.Resources.StrLblRadioAddressTxt + ":");
UpdateContentControl(lblOrderNumberText, Properties.Resources.StrLblOrderNumberTxt + ":");
+ UpdateContentControl(lblOrderCounterText, Properties.Resources.StrLblOrderCounterTxt + ":");
UpdateContentControl(lblMeterSizeText, Properties.Resources.StrLblMeterSizeTxt + ":");
UpdateContentControl(lblMeterLengthText, Properties.Resources.StrLblMeterLengthTxt + ":");
UpdateContentControl(lblSingleProcessText, Properties.Resources.StrLblSingleProcessText + ":");
@@ -137,14 +139,14 @@ namespace Xylem.Common.Production.ProductionUiCordonel
// buttons
UpdateContentControl(btnStart, Properties.Resources.StrBtnStart);
UpdateContentControl(btnStop, Properties.Resources.StrBtnStop);
-
+
InitializeFormState();
}
- private ApplicationSettings Settings
- {
- get; set;
- }
+ //private ApplicationSettings Settings
+ //{
+ // get; set;
+ //}
///
/// Initialize the FinalTest GUI:
@@ -183,8 +185,6 @@ namespace Xylem.Common.Production.ProductionUiCordonel
}
cbxSlotBox.SelectedIndex = 0;
- Settings = new ApplicationSettings("ProductionUiConfig.json");
-
UseSetting(true);
if (cbxSlotBox.SelectedItem == null || string.IsNullOrEmpty(cbxSlotBox.SelectedItem.ToString()) ||
@@ -215,6 +215,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
_processCtrl.OnProcessLogRequest += ProcessLog_Handler;
_processCtrl.OnProcessProgressChanged += ProcessProgress_Handler;
_processCtrl.OnStateMachineStateChanged += StateMachineStateChanged_Handler;
+ _processCtrl.OnGuiMessageDispatcher += GuiMessageDispatcher_Handler;
_timer = new DispatcherTimer();
_timer.Tick += TmrProgressUpdate_Tick;
@@ -230,6 +231,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
_processCtrl.OnProcessLogRequest -= ProcessLog_Handler;
_processCtrl.OnProcessProgressChanged -= ProcessProgress_Handler;
_processCtrl.OnStateMachineStateChanged -= StateMachineStateChanged_Handler;
+ _processCtrl.OnGuiMessageDispatcher -= GuiMessageDispatcher_Handler;
_userAccessWindow = null;
_processCtrl.Dispose();
@@ -248,10 +250,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel
//}
if (setSlot)
{
- cbxSlotBox.SelectedValue = Settings.Slot;
+ //cbxSlotBox.SelectedValue = Settings.Slot;
+ cbxSlotBox.SelectedValue = 0;
}
}
-
+
///
/// Enable/disable the controls
///
@@ -285,8 +288,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel
? $"{Properties.Resources.StrLblOperatorNameText}: {Software.UserName}"
: $"{Properties.Resources.StrLblOperatorNameText}: ?");
// Start first production process if required, user is authenticated and state machine is idle
- if (_autoStartFirstProductionProcess &&
- Software.IsAutenticated &&
+ if (_autoStartFirstProductionProcess &&
+ Software.IsAutenticated &&
ProcessState.Idle == _processCtrl?.GetProcessState())
{
BtnStart_Click(this, null);
@@ -436,7 +439,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
ProcessProgressArgs.ProcessProgressType.OverallProcessesSteps));
ProcessProgress_Handler(this, new ProcessProgressArgs(0,
ProcessProgressArgs.ProcessProgressType.ActualProcessSteps));
-
+
// Start first production process if required and user is authenticated
if (_autoStartFirstProductionProcess && Software.IsAutenticated)
{
@@ -517,6 +520,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel
// Enable timer with first automatic process
if (e.State == ProcessState.DetectCordonel)
{
+ if (_timer != null && !_timer.IsEnabled)
+ _startTime = DateTimeOffset.UtcNow;
_timer?.Start();
}
}
@@ -588,6 +593,30 @@ namespace Xylem.Common.Production.ProductionUiCordonel
));
}
+ ///
+ /// Dispatch GUI messages
+ ///
+ ///
+ ///
+ ///
+ /// - Initial
+ ///
+ private void GuiMessageDispatcher_Handler(Object sender, GuiMessageArgs e)
+ {
+ if (e?.Obj is Int32 obj)
+ {
+ switch (e.GuiItem)
+ {
+ case GuiItem.OrderAmount:
+ OrderAmount = e.Obj != null ? obj : 0;
+ break;
+ case GuiItem.OrderCounter:
+ OrderCounter = e.Obj != null ? obj : 0;
+ break;
+ }
+ }
+ }
+
///
/// Set values for progress bar, maximum and actual for single process and overall process.
/// - Limit values to 0.0..100.0.
@@ -773,17 +802,37 @@ namespace Xylem.Common.Production.ProductionUiCordonel
///
/// - Lock display of OLD Genesis after connect until the Genesis has been detected.
///
+ ///
+ /// - Order counter.
+ ///
private void UpdateGuiWithProductInfos()
{
var genesisMeter = _processCtrl?.GetGenesisMeter();
_productionRequirements = _processCtrl?.GetProductionRequirements();
- if (genesisMeter == null || _lockGenesisInfo)
- return;
-
+ if (genesisMeter == null )
+ return;
UpdateContentControl(lblOrderNumberValue,
genesisMeter.OrderNumber != 0 ? genesisMeter.OrderNumber.ToString() : "?");
+ UpdateContentControl(lblOrderCounterValue,
+ OrderAmount != 0 && genesisMeter.OrderNumber != 0 ? $"{OrderCounter} / " +
+ $"{OrderAmount} {Properties.Resources.StrLblPieces}" : "");
+ UpdateContentControl(lblOrderCounterText,
+ OrderAmount != 0 && genesisMeter.OrderNumber != 0 ? Properties.Resources.StrLblOrderCounterTxt + ":" : "");
+
+ if (_lockGenesisInfo)
+ return;
+
+ //UpdateContentControl(lblOrderNumberValue,
+ // genesisMeter.OrderNumber != 0 ? genesisMeter.OrderNumber.ToString() : "?");
+
+ //UpdateContentControl(lblOrderCounterValue,
+ // OrderAmount != 0 && genesisMeter.OrderNumber != 0 ? $"{OrderCounter} / " +
+ // $"{OrderAmount} {Properties.Resources.StrLblPieces}" : "");
+ //UpdateContentControl(lblOrderCounterText,
+ // OrderAmount != 0 && genesisMeter.OrderNumber != 0 ? Properties.Resources.StrLblOrderCounterTxt + ":" : "");
+
UpdateContentControl(lblRadioAddressValue,
genesisMeter.RadioAddress != 0 ? genesisMeter.RadioAddress.ToString() : "");
UpdateContentControl(lblRadioAddressText,
@@ -796,16 +845,16 @@ namespace Xylem.Common.Production.ProductionUiCordonel
!string.IsNullOrEmpty(genesisMeter.MeterSize) ? genesisMeter.MeterSize : "?");
UpdateContentControl(lblMeterLengthValue,
- (!string.IsNullOrEmpty(genesisMeter.MeterLength) && !genesisMeter.MeterLength.Equals("?")) ?
- genesisMeter.MeterLength + " mm": "?");
+ (!string.IsNullOrEmpty(genesisMeter.MeterLength) && !genesisMeter.MeterLength.Equals("?")) ?
+ genesisMeter.MeterLength + " mm" : "?");
UpdateContentControl(lblInterfaceVersionValue,
- !string.IsNullOrEmpty(genesisMeter.InterfaceVersion) ? genesisMeter.InterfaceVersion : "?");
+ !string.IsNullOrEmpty(genesisMeter.InterfaceInfo.InterfaceVersion) ?
+ genesisMeter.InterfaceInfo.InterfaceVersion : "?");
UpdateContentControl(lblLutValue,
!string.IsNullOrEmpty(genesisMeter.LutCrc) ? genesisMeter.LutCrc : "?");
-
UpdateContentControl(lblSerialNumberValue,
!string.IsNullOrEmpty(genesisMeter.CustomerSerialNumber) ? genesisMeter.CustomerSerialNumber : "?");
@@ -863,10 +912,10 @@ namespace Xylem.Common.Production.ProductionUiCordonel
}
- private void StoreSetting()
- {
- Settings.Update("ProductionUiConfig.json");
- }
+ //private void StoreSetting()
+ //{
+ // Settings.Update("ProductionUiConfig.json");
+ //}
//private void BtnConnect_Click(Object sender, RoutedEventArgs e)
//{
@@ -874,6 +923,18 @@ namespace Xylem.Common.Production.ProductionUiCordonel
// StoreSetting();
//}
+ ///
+ /// Start assembly process
+ ///
+ ///
+ /// - Initial
+ ///
+ ///
+ /// - Order counter.
+ ///
+ ///
+ /// - Reset order number to avoid display glitch on changed PcbId.
+ ///
private void BtnStart_Click(Object sender, RoutedEventArgs e)
{
UiElmEnable(btnStart, false, !_autoStartFirstProductionProcess);
@@ -883,6 +944,14 @@ namespace Xylem.Common.Production.ProductionUiCordonel
_timer?.Start();
// Avoid display of genesis info before the detect new meter has been executed
_lockGenesisInfo = true;
+ // Reset order amount until data from database has been collected
+ OrderAmount = 0;
+ // Reset order number to avoid display glitch on changed PcbId
+ var genesisMeter = _processCtrl?.GetGenesisMeter();
+ if (genesisMeter != null)
+ {
+ genesisMeter.OrderNumber = 0;
+ }
rtbLog.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(() =>
@@ -895,6 +964,8 @@ namespace Xylem.Common.Production.ProductionUiCordonel
UpdateContentControl(lblOrderNumberValue, "?");
UpdateContentControl(lblRadioAddressValue, "");
UpdateContentControl(lblRadioAddressText, "");
+ UpdateContentControl(lblOrderCounterValue, "");
+ UpdateContentControl(lblOrderCounterText, "");
UpdateContentControl(lblFwValue, "?");
UpdateContentControl(lblMeterSizeValue, "?");
UpdateContentControl(lblInterfaceVersionValue, "?");
@@ -918,9 +989,9 @@ namespace Xylem.Common.Production.ProductionUiCordonel
{
// Safe report to file
var msg = "";
- if (_strSoftwareNameVersion.Contains(Properties.Resources.StrEolSoftwareNameVersion))
+ if (_strAppNameVersion.Contains(Properties.Resources.StrEolSoftwareNameVersion))
msg = Properties.Resources.StrInfoSuccessShipping;
- else if (_strSoftwareNameVersion.Contains(Properties.Resources.StrPickingSoftwareNameVersion))
+ else if (_strAppNameVersion.Contains(Properties.Resources.StrPickingSoftwareNameVersion))
msg = Properties.Resources.StrInfoSuccessAssembly;
CreateFile(msg, true, true);
@@ -943,7 +1014,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
sb.AppendLine("========================================================================");
sb.AppendLine(headerInfo);
sb.AppendLine("========================================================================");
- sb.AppendLine(_strSoftwareNameVersion);
+ sb.AppendLine(_strAppNameVersion);
sb.AppendLine("------------------------------------------------------------------------");
sb.AppendLine($"{Properties.Resources.StrDateTime}: {DateTime.Now}");
sb.AppendLine("------------------------------------------------------------------------");
@@ -994,7 +1065,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
srLine.Contains(Properties.Resources.StrProcessStateDone) ||
srLine.Contains(Properties.Resources.StrProcessStateWarning) ||
srLine.Contains(Properties.Resources.StrProcessStateSkipped) ||
- srLine.Contains(Properties.Resources.StrWarningMsgSpecialRequirementActive))
+ srLine.Contains(Properties.Resources.StrProcessStateAttention))
compressedSb.AppendLine(srLine);
srLine = sr.ReadLine();
}
@@ -1060,7 +1131,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
try
{
var filename = "";
- if (_strSoftwareNameVersion.Contains(Properties.Resources.StrEolSoftwareNameVersion))
+ if (_strAppNameVersion.Contains(Properties.Resources.StrEolSoftwareNameVersion))
{
if (Thread.CurrentThread.CurrentCulture.Name.Contains("de"))
{
@@ -1071,7 +1142,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel
filename = Path.Combine(_assemblyExecRootPath, "Docu", @"Manual Cordonel End of Line Test (EOL).pdf");
}
}
- else if (_strSoftwareNameVersion.Contains(Properties.Resources.StrPickingSoftwareNameVersion))
+ else if (_strAppNameVersion.Contains(Properties.Resources.StrPickingSoftwareNameVersion))
{
if (Thread.CurrentThread.CurrentCulture.Name.Contains("de"))
{
diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs
index 632910fe..8e5ed948 100644
--- a/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs
+++ b/Common/Production/ProductionUiCordonel/Properties/Resources.Designer.cs
@@ -150,6 +150,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ATTENTION: Special requirement setup and approved for production.
+ ///
+ internal static string StrAttentionMsgSpecialRequirementActive {
+ get {
+ return ResourceManager.GetString("StrAttentionMsgSpecialRequirementActive", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Done.
///
@@ -294,6 +303,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: LUT file installation failed.
+ ///
+ internal static string StrErrorLutInstallationFailed {
+ get {
+ return ResourceManager.GetString("StrErrorLutInstallationFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ERROR: LUT file not found in database.
+ ///
+ internal static string StrErrorLutNotFound {
+ get {
+ return ResourceManager.GetString("StrErrorLutNotFound", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR.
///
@@ -312,6 +339,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Alarm is active.
+ ///
+ internal static string StrErrorMsgAlarmActive {
+ get {
+ return ResourceManager.GetString("StrErrorMsgAlarmActive", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Failed to reset alarms.
///
@@ -384,6 +420,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: The meter size setup failed.
+ ///
+ internal static string StrErrorMsgChangingMeterSizeFromOrderFailed {
+ get {
+ return ResourceManager.GetString("StrErrorMsgChangingMeterSizeFromOrderFailed", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Check radio encryption key failed.
///
@@ -528,6 +573,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: This Cordonel is assigned to another production order.
+ ///
+ internal static string StrErrorMsgMeterForOtherOrderAssigned {
+ get {
+ return ResourceManager.GetString("StrErrorMsgMeterForOtherOrderAssigned", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Cordonel length is unknown.
///
@@ -564,6 +618,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: This Cordonel cannot be mapped to an order.
+ ///
+ internal static string StrErrorMsgMissingMappingInformation {
+ get {
+ return ResourceManager.GetString("StrErrorMsgMissingMappingInformation", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Missing Network Connection. The software is going to exit!.
///
@@ -573,6 +636,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Unable to acquire order information for this Cordonel.
+ ///
+ internal static string StrErrorMsgMissingOrderInformation {
+ get {
+ return ResourceManager.GetString("StrErrorMsgMissingOrderInformation", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Collection of order details failed.
///
@@ -636,6 +708,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Assembly ready reporting for this Cordonel failed.
+ ///
+ internal static string StrErrorMsgPickingFinalizationFailed {
+ get {
+ return ResourceManager.GetString("StrErrorMsgPickingFinalizationFailed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ERROR: Order reservation failed for this Cordonel.
+ ///
+ internal static string StrErrorMsgPickingReservationFailed {
+ get {
+ return ResourceManager.GetString("StrErrorMsgPickingReservationFailed", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Pre- and flow-test status unknown.
///
@@ -645,6 +735,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: The pressure sensor setup failed.
+ ///
+ internal static string StrErrorMsgPressureSensorSetupFromOrderFailed {
+ get {
+ return ResourceManager.GetString("StrErrorMsgPressureSensorSetupFromOrderFailed", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR.
///
@@ -664,7 +763,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
///
- /// Looks up a localized string similar to ERROR: Radio signal strength check failed.
+ /// Looks up a localized string similar to ERROR: Radio module check failed.
///
internal static string StrErrorMsgRadioCheck {
get {
@@ -690,6 +789,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Radio not in customer mode.
+ ///
+ internal static string StrErrorMsgRadioNotInCustomerMode {
+ get {
+ return ResourceManager.GetString("StrErrorMsgRadioNotInCustomerMode", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Missing radio signal levels from Kitron!.
///
@@ -825,6 +933,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: RSSI SIRT could not be initialized .
+ ///
+ internal static string StrErrorMsgRssiSirt {
+ get {
+ return ResourceManager.GetString("StrErrorMsgRssiSirt", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Order number scan failed.
///
@@ -843,6 +960,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: SEMI telegram is too short.
+ ///
+ internal static string StrErrorMsgSemiTelegramLength {
+ get {
+ return ResourceManager.GetString("StrErrorMsgSemiTelegramLength", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Sentinel returned EOL check failed.
///
@@ -861,6 +987,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Service SIRT programming failed .
+ ///
+ internal static string StrErrorMsgServiceSirtProgramming {
+ get {
+ return ResourceManager.GetString("StrErrorMsgServiceSirtProgramming", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to ERROR: Service SIRT message server start failed .
+ ///
+ internal static string StrErrorMsgServiceSirtServerStart {
+ get {
+ return ResourceManager.GetString("StrErrorMsgServiceSirtServerStart", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Error saving RSSI to database failed.
///
@@ -871,11 +1015,11 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
///
- /// Looks up a localized string similar to ERROR: SIRT could not be initialized .
+ /// Looks up a localized string similar to ERROR: SIRT telegram is too short.
///
- internal static string StrErrorMsgSirt {
+ internal static string StrErrorMsgSirtTelegramLength {
get {
- return ResourceManager.GetString("StrErrorMsgSirt", resourceCulture);
+ return ResourceManager.GetString("StrErrorMsgSirtTelegramLength", resourceCulture);
}
}
@@ -933,6 +1077,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Display volume is not cleared to zero.
+ ///
+ internal static string StrErrorMsgVolumeNotCleared {
+ get {
+ return ResourceManager.GetString("StrErrorMsgVolumeNotCleared", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to ERROR: Write failed.
///
@@ -960,6 +1113,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ERROR: Order already completed.
+ ///
+ internal static string StrErrorOrderCompleted {
+ get {
+ return ResourceManager.GetString("StrErrorOrderCompleted", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Cordonel successfully passed all tests!.
///
@@ -1140,6 +1302,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Progress.
+ ///
+ internal static string StrLblOrderCounterTxt {
+ get {
+ return ResourceManager.GetString("StrLblOrderCounterTxt", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Order.
///
@@ -1149,6 +1320,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to pcs..
+ ///
+ internal static string StrLblPieces {
+ get {
+ return ResourceManager.GetString("StrLblPieces", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Pressure Sensor Assembled.
///
@@ -1383,6 +1563,24 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Pressure sensor assembled.
+ ///
+ internal static string StrMsgPressureSensorApplied {
+ get {
+ return ResourceManager.GetString("StrMsgPressureSensorApplied", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Pressure sensor not assembled.
+ ///
+ internal static string StrMsgPressureSensorNotApplied {
+ get {
+ return ResourceManager.GetString("StrMsgPressureSensorNotApplied", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Generate password file.
///
@@ -1473,6 +1671,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to SEMI telegram decoding.
+ ///
+ internal static string StrMsgSemiTelegram {
+ get {
+ return ResourceManager.GetString("StrMsgSemiTelegram", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Sentinel checks results and matching with database recordings .
///
@@ -1527,6 +1734,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to ATTENTION.
+ ///
+ internal static string StrProcessStateAttention {
+ get {
+ return ResourceManager.GetString("StrProcessStateAttention", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Check for new Cordonel.
///
@@ -1671,6 +1887,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Check Cordonel mapping.
+ ///
+ internal static string StrStateCheckCordonelMapping {
+ get {
+ return ResourceManager.GetString("StrStateCheckCordonelMapping", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Scan and check order number.
///
@@ -1788,6 +2013,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Install LUT.
+ ///
+ internal static string StrStateInstallLut {
+ get {
+ return ResourceManager.GetString("StrStateInstallLut", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Log off from Cordonel.
///
@@ -1842,6 +2076,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Alarm settings via radio.
+ ///
+ internal static string StrStateRadioAlarmSetupOverTheAir {
+ get {
+ return ResourceManager.GetString("StrStateRadioAlarmSetupOverTheAir", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Check radio.
///
@@ -1950,6 +2193,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Success: LUT successfully installed.
+ ///
+ internal static string StrSuccessLutInstallation {
+ get {
+ return ResourceManager.GetString("StrSuccessLutInstallation", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Success.
///
@@ -1995,6 +2247,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Success: The meter size is set up correctly.
+ ///
+ internal static string StrSuccessMsgChangedMeterSizeFromOrder {
+ get {
+ return ResourceManager.GetString("StrSuccessMsgChangedMeterSizeFromOrder", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Success: Successfully compared.
///
@@ -2040,6 +2301,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Success: The pressure sensor is set up correctly.
+ ///
+ internal static string StrSuccessMsgPressureSensorSetupFromOrder {
+ get {
+ return ResourceManager.GetString("StrSuccessMsgPressureSensorSetupFromOrder", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Success.
///
@@ -2229,6 +2499,15 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to WARNING: This Cordonel is already assigned to this production order.
+ ///
+ internal static string StrWarningMsgCordonelIsAlreadyMarried {
+ get {
+ return ResourceManager.GetString("StrWarningMsgCordonelIsAlreadyMarried", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to WARNING: Inspect results.
///
@@ -2239,11 +2518,20 @@ namespace Xylem.Common.Production.ProductionUiCordonel.Properties {
}
///
- /// Looks up a localized string similar to ATTENTION: Special requirement setup and approved for production.
+ /// Looks up a localized string similar to WARNING: Accumulator reset repeated.
///
- internal static string StrWarningMsgSpecialRequirementActive {
+ internal static string StrWarningMsgRepeatedAccumulatorReset {
get {
- return ResourceManager.GetString("StrWarningMsgSpecialRequirementActive", resourceCulture);
+ return ResourceManager.GetString("StrWarningMsgRepeatedAccumulatorReset", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to WARNING: Service SIRT alarm mask setup skipped .
+ ///
+ internal static string StrWarningMsgServiceSirtSkipped {
+ get {
+ return ResourceManager.GetString("StrWarningMsgServiceSirtSkipped", resourceCulture);
}
}
}
diff --git a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx
index e29c7a45..9c53f5a4 100644
--- a/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx
+++ b/Common/Production/ProductionUiCordonel/Properties/Resources.de.resx
@@ -1,6 +1,6 @@

-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
- ..\Resources\ConnectPlugged_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\Connect_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\iconCheck.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\iconWarn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\iconWating.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\Refresh_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\CLEARMAtrix.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ ..\Resources\ConnectPlugged_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Connect_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\iconCheck.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\iconWarn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\iconWating.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Refresh_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\CLEARMAtrix.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
Keine Verbindung zum Netzwerk. Die Software wird beendet!
-
+
Konfigurationsdatei nicht gefunden. Slot muß mit der GenesisToolBox eingestellt werden! Die Software wird beendet!
-
+
Kommunikationsanschluß ist belegt oder nicht vorhanden! Die Software wird beendet!
-
+
Neue Cordonel VFM Software verfügbar! Die Software wird beendet! Diese version:
-
+
Warte
-
+
Wiederhole
-
+
Neustart
-
+
Erfolg
-
+
Übersprungen
-
+
FEHLER
-
+
Läuft
-
+
Warte
-
+
Erfolg: Passwortdatei erfolgreich geschrieben
-
+
Wiederholung Versandfertigmachen
-
+
Wiederholung Einzelschritt
-
+
Prozeß auslassen
-
+
Abbruch durch Benutzer
-
+
Drucken des Rückläuferscheines
-
+
Drucken des Erfolgsreport
-
+
Beilagen und Anbauteile überprüfen
-
+
Visuelle Inspektion Cordonel Display
-
+
Pulsmodul einbauen
-
+
Auftragspapiere prüfen ob Adapter eingebaut werden soll!
-
+
Nicht möglich
-
+
Erledigt
-
+
Falls Information oder Hardware fehlt
-
+
Sobald Adapter installiert wurde oder wenn kein Adapter gefordert ist!
-
+
+ FEHLER: LUT nicht in Datenbank gefunden
+
+
+ FEHLER: LUT Installation fehlgeschlagen
+
+
+ Erfolg: LUT erfolgreich installiert
+
+
Display zeigt Zahlenwerte an und Funk ist aus!
-
+
Display zeigt Idle an und keine Zahlen oder Funk is aktiv!
-
+
Auftragsnummer einscannen
-
+
Auslieferungseinstellungen überprüfen
-
+
Deckelseriennummer einscannen
-
+
Produktionsbedingungen überprüfen
-
+
Cordonel verbinden
-
+
+ LUT installieren
+
+
+ Cordonel Zuordnung prüfen
+
+
Auslieferungseinstellungen programmieren
-
+
Cordonel abmelden
-
+
Versandbereitschaft herstellen
-
+
Montageabschlußbestätigung
-
+
Funktest
-
+
+ Alarmeinstellungen über Funk
+
+
Cordonel ist versandfertig
-
+
Cordonel Montage erfolgreich
-
+
Cordonel Neustart
-
+
Abgebrochen
-
+
Cordonel suchen
-
+
FEHLER: Datenbankzugriff fehlgeschlagen
-
+
FEHLER: Alte Wächter Parameter konnten nicht gelöscht werden
-
+
FEHLER: Wächter Parameter konnten nicht erzeugt werden
-
+
FEHLER: Es gab fehlerhafte oder ausgelassene Prozesse
-
+
FEHLER: Wächter Parameter konnten nicht hochgeladen werden
-
+
FEHLER: Wächter meldet Versandfertigmachen fehlerhaft
-
- FEHLER: Sentinel Meldung:
+
+ FEHLER: Wächter meldet:
-
+
Wächter überprüft Ergebnisse und gleicht diese mit den Datenbankaufzeichnungen ab....
-
+
Erfolg: Wächter bestätigt Versandfertigmachen Einstellungen und Prozesse nach Überprüfung
-
+
Konfigurationsvergleich
-
+
FEHLER: Cordonel Erkennung fehlgeschlagen
-
+
Interface (configuration.json) Version:
-
+
Installierte Firmware Version:
-
+
Interface unterstützt max Firmware Version:
-
+
FEHLER: Cordonel Anmeldung fehlgeschlagen
-
+
FEHLER: Datenbank Konfigurationsdatenanfrage fehlgeschlagen
-
+
Konfigurationen ermitteln
-
+
Seriennummer und Funkadresse ermitteln
-
+
Erzeugung der Fortschrittsparameter für Wächter
-
+
Paßwortdatei erzeugen und installieren
-
+
Prozeß
-
+
Status
-
+
Warte auf Cordonel
-
+
Passwörter schon geschrieben. Prozess wird übersprungen
-
+
FEHLER: Cordonel Kalibrierungsprozeß ausgelassen
-
+
Erfolg: Cordonel Kalibrierungsprozeß ist bestätigt worden
-
+
FEHLER: Cordonel Zero Flow Prozeß ausgelassen
-
+
Erfolg: Cordonel Zero Flow Prozeß ist bestätigt worden
-
+
FEHLER: Batterielaufzeit zu klein
-
+
FEHLER: Passwortüberschreiben in Datenbank fehlgeschlagen
-
+
FEHLER: Teststatus kann nicht ermittelt werden
-
+
FEHLER: Datenbankabruf für Produktionsfreigabe fehlgeschlagen
-
+
Erfolg: Produktionsfreigabe gemäß Nummer
-
+
FEHLER: Schreiben und Überprüfen Cordonel Paßwortdatei fehlgeschlagen
-
+
FEHLER: Erzeugung der Cordonel Paßwortdatei fehlgeschlagen
-
+
FEHLER: Paßwort Level 3 der Cordonel Paßwortdatei ist fehlerhaft
-
+
FEHLER: Verbleibende Restlaufzeit zu klein
-
+
FEHLER: Restlaufzeitberechnung fehlgeschlagen
FEHLER: Cordonel Baulänge ist unbekannt
-
+
FEHLER: Versandfertigmachen fehlgeschlagen
-
+
FEHLER: Prozeßschritt fehlgeschlagen
-
+
FEHLER: Auftragsnummerscan fehlgeschlagen
-
+
FEHLER: Deckelseriennummerscan fehlgeschlagen
-
+
FEHLER: Funkschlüssel prüfen fehlgeschlagen
-
- FEHLER: Überprüfung Funksignalstärke fehlgeschlagen
+
+ FEHLER: Überprüfung Funkmodul fehlgeschlagen
-
- FEHLER: SIRT konnte nicht initialisiert werden
+
+ FEHLER: Funkmodul nicht im Kundenmodus
-
+
+ FEHLER: RSSI SIRT konnte nicht initialisiert werden
+
+
+ FEHLER: Service SIRT Programmierung fehlgeschlagen
+
+
+ FEHLER: Service SIRT Start des Messageserves fehlgeschlagen
+
+
+ WARNUNG: Service SIRT Alarmmaskeneinstellung übersprungen
+
+
FEHLER: Funkverschlüsselungscode fehlerhaft
-
+
Auftrag
-
+
Fertigungsauftragsnummer
-
+
Baugröße
-
+
+ Stk.
+
+
+ Fortschritt
+
+
+ FEHLER: Auftrag bereits komplett
+
+
Baulänge
-
+
Drucksensor eingebaut
-
+
Kitron Produktionsdatum
-
+
Endtestablaufdatum
-
+
Maximallagerzeit
-
+
Monate
-
+
Funkfrequenz
-
+
Funkadresse
-
+
Seriennummer
-
+
Funktest übersprungen wegen NA Region
-
+
WARNUNG: Funktest übersprungen wegen Sonderfreigabe
-
+
+ WARNUNG: Wiederholter Akkumulator Reset
+
+
WARNUNG: Kalibrierungsüberprüfung übersprungen wegen Sonderfreigabe
-
+
Überprüfe auf neuen Cordonel
-
+
+ FEHLER: Dieser Cordonel ist einem anderen Fertigungsauftrag zugeordnet
+
+
+ FEHLER: Auftragsreservierung für diesen Cordonel fehlgeschlagen
+
+
+ FEHLER: Montageabschlußmeldung für diesen Cordonel fehlgeschlagen
+
+
+ FEHLER: Dieser Cordonel kann keinem Auftrag zugeordnet werden
+
+
+ FEHLER: Für diesen Cordonel stehen keine Auftragsinformationen zur Verfügung
+
+
+ WARNUNG: Dieser Cordonel ist bereits diesem Fertigungsauftrag zugeordnet
+
+
FEHLER: Vergleich fehlgeschlagen
-
+
Funkerkennung inkonsistent zwischen Cordonel und geforderten Einstellungen
-
+
FEHLER: Lesen fehlgeschlagen
-
+
FEHLER: Firmware wird nicht unterstützt
-
+
FEHLER: Firmware konnte nicht aus Datenbank geladen werden
-
+
FEHLER: Schreiben fehlgeschlagen
-
+
+ FEHLER: Die Baugröße des Cordonels konnte nicht eingestellt werden
+
+
+ Erfolg: Die Cordonel Baugröße wurde erfolgreich eingestellt
+
+
+ FEHLER: Die Drucksensoreinstellung ist fehlgeschlagen
+
+
+ Erfolg: Die Drucksensoreinstellung war erfolgreich
+
+
+ Drucksensor vorhanden
+
+
+ Ohne Drucksensor
+
+
FEHLER: Falsche Kernversion des Cordonels
-
+
FEHLER: Mindestens eine App fehlt oder ist falsch
-
+
Erfolgreich verglichen
-
+
Erfolg: Erfolgreich gelesen
-
+
Erfolg: Erfolgreich geschrieben
-
+
FEHLER: Prozeß abgebrochen
-
+
FEHLER
-
+
Erfolg
-
+
FEHLER: RSSI Grenzwerte aus Datenbank holen fehlgeschlagen
-
+
Erfolg: RSSI Grenzwerte erfolgreich aus Datenbank geladen
-
+
FEHLER: Cordonel Neustart fehlgeschlagen
-
+
FEHLER: RSSI Werte in Datenbank speichern fehlgeschlagen
-
+
Erfolg: RSSI Werte erfolgreich in Datenbank gespeichert
-
+
Funktest
-
+
RSSI der SEMI vom Cordonel (Cordonel => SIRT)
-
+
RSSI der PAM von SIRT (SIRT => Cordonel)
-
+
Sende PAM an Adresse
-
+
Start
-
+
Erfolg: Alarme erfolgreich zurückgesetzt
-
+
FEHLER: Alarme konnten nicht zurückgesetzt werden
-
+
Erfolg: Funk efolgreich in Kundenmodus geschaltet
-
+
Wiederholen
-
+
Überspringe
-
+
Starte erneut
-
+
Wiederhole fehlgeschlagene Prozesse
-
+
Wiederholung ab erstem Fehler!
-
+
Rückläuferschein drucken
-
+
Bericht drucken
-
+
Starte
-
+
Abbruch
-
+
Fehler
-
+
FEHLER
-
+
Erfolg
-
+
FEHLER: Auftragsdatails abrufen fehlgeschlagen
-
+
FEHLER: Parametervergleich fehlgeschlagen
-
+
FEHLER: Parameterschreiben fehlgeschlagen
-
+
FEHLER: Einstellungen Sichern fehlgeschlagen
-
+
Einstellungen sichern
-
+
Erfolg: Einstellungen erfolgreich gespeichert
-
+
WARNUNG
-
+
WARNUNG: Ergebnis manuell überprüfen
-
+
+ ACHTUNG
+
+
SONDERFREIGABE
-
+
Keine Freigabe vorhanden
-
+
STANDARDFREIGABE
-
- ..\Resources\Cordonel With Display small.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Resources\SensusLogoXylem.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
+
+ ..\Resources\Cordonel With Display small.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\SensusLogoXylem.JPG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
FEHLER: Falsche PcbId der Produktionsanforderungen aus der Datenbank
-
+
FEHLER: Falsche PcbId der Kalibrierwerte aus der Datenbank
-
+
ERROR: Kalibrierwerte aus Datenbank und gelesen aus Cordonel sind unterschiedlich
-
+
FEHLER: Kalibrierwerte konnten nicht aus Datenbank geladen werden
-
+
FEHLER: Regulierstatus konnte nicht aus Datenbank geladen werden
-
+
FEHLER: Kalibrierwerte gelesen vom Cordonel sind außerhalb des zulässigen Bereiches
-
+
WARNUNG: Alle Kalibrierwerte des Cordonels sind Standardwerte
-
+
FEHLER: Falsche Firmware in Cordonel installiert
-
+
FEHLER: Falsche LUT in Cordonel installiert
-
+
FEHLER: Maximale Lagerzeit überschritten
-
+
FEHLER: Maximale Lagerzeit oder Inbetriebnahmezeit unbekannt
-
+
FEHLER: Falsche Nennweite
-
+
FEHLER: Fehlende Funksignalpegel von Kitron!
-
+
FEHLER: Falsche Produktionsnummer
-
+
FEHLER: Falsche Region
-
+
FEHLER: Nicht für die Produktion freigegeben
-
+
FEHLER: Maximal Batterieladung
-
+
FEHLER: Geforderte Restlaufzeit
-
+
FEHLER: Datenbank und Cordonel Funkschlüssel ungleich
-
+
Prozeßzeit [min:s]
-
+
Gesamtprozeß
-
+
Mitarbeiter
-
+
_Optionen
-
+
_Hilfe
-
+
_Paßwort ändern
-
+
Einzelprozeß
-
+
Erfolg: PcbId der Produktionsanforderungen aus der Datenbank und des Cordonels erfolgreich abgeglichen
-
+
Erfolg: Auftragsbasierende Produktionsanforderungen festgestellt
-
+
Erfolg: PcbId der Kalibrierwerte aus der Datenbank und des Cordonels erfolgreich abgeglichen
-
+
Erfolg: Kalibrierwerte aus der Datenbank stimmen mit den gelesenen Werten aus Cordonel überein
-
+
Erfolg: Korrekte Firmware installiert
-
+
Erfolg: Korrekte LUT installiert
-
+
Erfolg: Maximale Lagerzeit eingehalten
-
+
Erfolg: Cordonel Funksignalpegel erfolgreich geladen
-
+
Erfolg: Nennweite erfolgreich validiert
-
+
Erfolg: Produktionsnummer erfolgreich abgeglichen
-
+
Erfolg: Region erfolgreich überprüft
-
+
Erfolg: Standardanforderung für die Produktion freigegeben
-
+
ACHTUNG: Sonderfreigabe für Produktion erteilt
-
+
Zulässige maximale Batterieentladung
-
+
Erfolg: Datenbank und Cordonel Funkschlüssel erfolgreich abgeglichen
-
+
Verbrauchte Batterieladung
-
+
Berechnung basierend auf Ruhestrom und Produktionszuschlag
-
+
FEHLER: Maximale erlaubte Batterieentladung überschritten
-
+
Absoluter Grenzwert
-
+
Maximal erlaubt
-
+
Abgeschätzte Restlaufzeit
-
+
FEHLER: Minimale geforderte Restlaufzeit unterschritten
-
+
FEHLER: Batterieentladung konnte nicht berechnet werden
-
+
Erfolg: Minimale Restlaufzeit eingehalten
-
+
Minimal geforderte Restlaufzeit
-
+
Jahre
Cordonel - Versandfertigmachen - Version
-
+
Cordonel - Montage - Version
-
+
Deckel scannen
-
+
Auftrag scannen
-
+
Datum
-
+
Rückläuferschein beim Cordonel lassen und auf Klärung durch QS warten!
-
+
Cordonel Montage erfolgreich beendet! Dieser Bericht dient der Information.
-
+
Cordonel ist fertig zum Versenden! Dieser Bericht dient der Information.
-
+
Optional: Zur Information kann ein Bericht gedruckt werden.
-
+
Cordonel muß näher untersucht werden! Details stehen im Info Fenster.
-
+
Abbruch ohne Bericht!
Cordonel verpacken!
-
+
Cordonel ist fertig!
-
+
Cordonel hat alle Tests bestanden!
-
+
Versandfertigmachen fehlgeschlagen!
-
+
Passwörter anfordern
-
+
Passwortdatei erstellen
-
+
Passwortdatei installieren
-
+
Passwort in Datenbank erneuern
-
+
Cordonel abmelden
-
+
Cordonel Anmeldung
-
+