Initial commit
This commit is contained in:
commit
d2f85c3271
19 files changed
+3736
No files matched your search
@@ -0,0 +1,9 @@
|
|||||||
|
.vs/
|
||||||
|
**/bin/
|
||||||
|
**/obj/
|
||||||
|
*.user
|
||||||
|
*.suo
|
||||||
|
TestResults/
|
||||||
|
ReSharper/
|
||||||
|
*.userprefs
|
||||||
|
packages/
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
; Script generated by the Inno Script Studio Wizard.
|
||||||
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
|
#define MyAppName "Hypervault_Control"
|
||||||
|
#define MyAppVersion "1.0"
|
||||||
|
#define MyAppPublisher "Erisys, LLC"
|
||||||
|
#define MyAppExeName "Hypervault_Control.exe"
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
; NOTE: The value of AppId uniquely identifies this application.
|
||||||
|
; Do not use the same AppId value in installers for other applications.
|
||||||
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||||
|
AppId={{58D74FFA-60CB-4BBD-99BF-3964226AECB2}
|
||||||
|
AppName={#MyAppName}
|
||||||
|
AppVersion={#MyAppVersion}
|
||||||
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
|
AppPublisher={#MyAppPublisher}
|
||||||
|
DefaultDirName={pf}\Erisys\{#MyAppName}
|
||||||
|
DefaultGroupName=Hypervault Control
|
||||||
|
OutputDir=C:\Users\mlewis\source\repos\Hypervault_Control
|
||||||
|
OutputBaseFilename=Hypervault_Control_setup
|
||||||
|
Compression=lzma
|
||||||
|
SolidCompression=yes
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: "C:\Users\mlewis\source\repos\Hypervault_Control\Hypervault_Control\bin\Release\Hypervault_Control.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "C:\Users\mlewis\source\repos\Hypervault_Control\Hypervault_Control\Images\Icon.ico"; DestDir: "{app}"
|
||||||
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||||
|
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\Icon.ico"; Tasks: desktopicon
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.14.36623.8 d17.14
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hypervault_Control", "Hypervault_Control\Hypervault_Control.csproj", "{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {BAEC0ED4-36A8-4145-87EE-D5D3F51010A2}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace App_Settings
|
||||||
|
{
|
||||||
|
public class AppSettings
|
||||||
|
{
|
||||||
|
public string FSWXIpAddress { get; set; } = "10.1.1.51";
|
||||||
|
public string FSWXPort { get; set; } = "5025";
|
||||||
|
|
||||||
|
public string HypervaultIpAddress { get; set; } = "10.1.1.188";
|
||||||
|
public string HypervaultPort { get; set; } = "5000";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SettingsManager
|
||||||
|
{
|
||||||
|
// private static readonly string SettingsFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "settings.ini");
|
||||||
|
|
||||||
|
private static readonly string SettingsDirectory = Path.Combine (Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Erisys", "Hypervault_Control");
|
||||||
|
private static readonly string SettingsFile = Path.Combine (SettingsDirectory, "settings.ini");
|
||||||
|
|
||||||
|
public static AppSettings Load()
|
||||||
|
{
|
||||||
|
AppSettings settings = new AppSettings();
|
||||||
|
|
||||||
|
//-- Make sure the settings directory exists
|
||||||
|
Directory.CreateDirectory (SettingsDirectory);
|
||||||
|
|
||||||
|
if (!File.Exists (SettingsFile))
|
||||||
|
{
|
||||||
|
Save(settings);
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
string section = "";
|
||||||
|
|
||||||
|
foreach (string rawLine in File.ReadAllLines(SettingsFile))
|
||||||
|
{
|
||||||
|
string line = rawLine.Trim();
|
||||||
|
|
||||||
|
// Ignore blank lines and comments
|
||||||
|
if (string.IsNullOrEmpty(line) ||
|
||||||
|
line.StartsWith("#") ||
|
||||||
|
line.StartsWith(";"))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Section
|
||||||
|
if (line.StartsWith("[") && line.EndsWith("]"))
|
||||||
|
{
|
||||||
|
section = line.Substring(1, line.Length - 2).Trim();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setting
|
||||||
|
int equalsIndex = line.IndexOf('=');
|
||||||
|
|
||||||
|
if (equalsIndex < 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
string key = line.Substring(0, equalsIndex).Trim();
|
||||||
|
string value = line.Substring(equalsIndex + 1).Trim();
|
||||||
|
|
||||||
|
if (section.Equals("FSWX", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (key.Equals("IPAddress", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
settings.FSWXIpAddress = value;
|
||||||
|
}
|
||||||
|
else if (key.Equals("Port", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
settings.FSWXPort = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (section.Equals("Hypervault", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (key.Equals("IPAddress", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
settings.HypervaultIpAddress = value;
|
||||||
|
}
|
||||||
|
else if (key.Equals("Port", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
settings.HypervaultPort = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Save(AppSettings settings)
|
||||||
|
{
|
||||||
|
//-- Make sure the settings directory exists
|
||||||
|
Directory.CreateDirectory (SettingsDirectory);
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.AppendLine("; Application settings");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
sb.AppendLine("[FSWX]");
|
||||||
|
sb.AppendLine($"IPAddress={settings.FSWXIpAddress}");
|
||||||
|
sb.AppendLine($"Port={settings.FSWXPort}");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
sb.AppendLine("[Hypervault]");
|
||||||
|
sb.AppendLine($"IPAddress={settings.HypervaultIpAddress}");
|
||||||
|
sb.AppendLine($"Port={settings.HypervaultPort}");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
File.WriteAllText(SettingsFile, sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,896 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace FSWXSA
|
||||||
|
{
|
||||||
|
class FSWX_SA
|
||||||
|
{
|
||||||
|
private TcpClient client;
|
||||||
|
private IPEndPoint serverEndPoint;
|
||||||
|
private NetworkStream clientStream;
|
||||||
|
|
||||||
|
public FSWX_SA(string IPADDR, int PORT)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- FSWX_SA ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
client = new TcpClient();
|
||||||
|
serverEndPoint = new IPEndPoint(IPAddress.Parse(IPADDR), PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Connect()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- Connect ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.Connect(serverEndPoint);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
clientStream = client.GetStream();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Disconnect()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- Disconnect ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.Close();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendSCPIcommand(string command)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SendSCPIcommand ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
ASCIIEncoding encoder = new ASCIIEncoding();
|
||||||
|
byte[] buffer = encoder.GetBytes(command);
|
||||||
|
|
||||||
|
clientStream.Write(buffer, 0, buffer.Length);
|
||||||
|
clientStream.Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendSCPIcommand(string command, out string response, int optionaldelay = 5, int optionaltimeout = 20)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SendSCPIcommand ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int TOSECONDS = optionaltimeout;
|
||||||
|
ASCIIEncoding encoder = new ASCIIEncoding();
|
||||||
|
byte[] buffer = encoder.GetBytes(command);
|
||||||
|
byte[] retbuffer = new byte[65536];
|
||||||
|
Stopwatch timer = new Stopwatch();
|
||||||
|
|
||||||
|
clientStream.Write(buffer, 0, buffer.Length);
|
||||||
|
clientStream.Flush();
|
||||||
|
|
||||||
|
timer.Start();
|
||||||
|
while ((!clientStream.DataAvailable) && (timer.Elapsed.TotalSeconds < TOSECONDS)) ;
|
||||||
|
|
||||||
|
if (!clientStream.DataAvailable)
|
||||||
|
{
|
||||||
|
timer.Stop();
|
||||||
|
response = String.Format("ERROR - NO Data Available!!");
|
||||||
|
}
|
||||||
|
timer.Stop();
|
||||||
|
|
||||||
|
Thread.Sleep(optionaldelay);
|
||||||
|
|
||||||
|
if (clientStream.DataAvailable)
|
||||||
|
{
|
||||||
|
clientStream.Read(retbuffer, 0, 65536);
|
||||||
|
|
||||||
|
string str = Encoding.UTF8.GetString(retbuffer, 0, 65536);
|
||||||
|
|
||||||
|
str = str.Replace("\r", string.Empty);
|
||||||
|
str = str.Replace("\n", string.Empty);
|
||||||
|
str = str.Replace("\0", string.Empty);
|
||||||
|
|
||||||
|
string[] lines = Regex.Split(str, "\r\n\0");
|
||||||
|
|
||||||
|
response = lines[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
response = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool WaitOPC(int optionaltimeout = 20)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- WaitOPC ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*OPC?\n", out response, 5, optionaltimeout);
|
||||||
|
|
||||||
|
if (response.Equals("1"))
|
||||||
|
DONE = true;
|
||||||
|
else
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCF (int CHANNEL, double CF)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setCF ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:FREQ:CENT {1}\n", CHANNEL, CF));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:FREQ:CENT?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == CF)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getCF (int CHANNEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getCF ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:FREQ:CENT?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIQBW (int CHANNEL, double IQBW)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setIQBW ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:IQ:BWID {1}\n", CHANNEL, IQBW));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:IQ:BWID?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == IQBW)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getIQBW (int CHANNEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getIQBW ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(String.Format(":SENS{0}:IQ:BWID?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setRefLevel (int CHANNEL, int REFLEV)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setRefLevel ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format(":INP{0}:RLEV {1}\n", CHANNEL, REFLEV));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(String.Format(":INP{0}:RLEV?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == REFLEV)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRefLevel (int CHANNEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getRefLevel ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(String.Format(":INP{0}:RLEV?\n", CHANNEL), out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setSingleSweep()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setSingleSweep ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":INIT:CONT ON\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand("INIT:CONT OFF\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand("INIT:IMM\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if false
|
||||||
|
public void setAttenuation(Int32 ATTENUATION)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setAttenuation ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format(":POW:ATT {0}\n", ATTENUATION));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:ATT?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == ATTENUATION)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAttenuation()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getAttenuation ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(":POW:ATT?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreamp(bool ENABLE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setPreamp ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double CF;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
|
||||||
|
if (ENABLE)
|
||||||
|
{
|
||||||
|
#if false
|
||||||
|
for (bool DONE = false; DONE == false; )
|
||||||
|
{
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE OFF\n");
|
||||||
|
WaitOPC ();
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse (response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CF = getCF();
|
||||||
|
|
||||||
|
if (CF <= 3.6e9)
|
||||||
|
{
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND LOW\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND?\n", out response);
|
||||||
|
|
||||||
|
if (response.Contains("LOW"))
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND FULL\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND?\n", out response);
|
||||||
|
|
||||||
|
if (response.Contains("FULL"))
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE ON\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == 1)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if false
|
||||||
|
for (bool DONE = false; DONE == false; )
|
||||||
|
{
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE OFF\n");
|
||||||
|
WaitOPC ();
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse (response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE OFF\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVBW(double VBW)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setVBW ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("SENSE:BANDWIDTH:VIDEO {0}\n", VBW));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTraceMode(string MODE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SetTraceMode ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("TRACE1:TYPE {0}\n", MODE));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMaxHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE2:DISPLAY:STATE ON\n");
|
||||||
|
SendSCPIcommand("TRACE2:TYPE MAXHOLD\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMinHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE3:DISPLAY:STATE ON\n");
|
||||||
|
SendSCPIcommand("TRACE3:TYPE MINHOLD\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMaxHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisnableMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE2:DISPLAY:STATE OFF\n");
|
||||||
|
SendSCPIcommand("TRACE2:UPDATE:STATE OFF\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMinHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisableMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE3:DISPLAY:STATE OFF\n");
|
||||||
|
SendSCPIcommand("TRACE3:UPDATE:STATE OFF\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadMaxHoldTrace(out double[] dTraceData)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- ReadMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
string tracedata;
|
||||||
|
string[] sTraceData;
|
||||||
|
|
||||||
|
SendSCPIcommand("TRACE:DATA? TRACE2\n", out tracedata, 100);
|
||||||
|
|
||||||
|
sTraceData = Regex.Split(tracedata, ",");
|
||||||
|
dTraceData = new double[sTraceData.Length];
|
||||||
|
|
||||||
|
for (i = 0; i < sTraceData.Length; i++)
|
||||||
|
dTraceData[i] = Convert.ToDouble(sTraceData[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadMinHoldTrace(out double[] dTraceData)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- ReadMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
string tracedata;
|
||||||
|
string[] sTraceData;
|
||||||
|
|
||||||
|
SendSCPIcommand("TRACE:DATA? TRACE3\n", out tracedata, 100);
|
||||||
|
|
||||||
|
sTraceData = Regex.Split(tracedata, ",");
|
||||||
|
dTraceData = new double[sTraceData.Length];
|
||||||
|
|
||||||
|
for (i = 0; i < sTraceData.Length; i++)
|
||||||
|
dTraceData[i] = Convert.ToDouble(sTraceData[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMarker(double FREQ)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE ON;\n");
|
||||||
|
SendSCPIcommand(String.Format(":CALC:MARKER1:X {0};\n", FREQ));
|
||||||
|
|
||||||
|
//:CALC:MARKER:AOFF;
|
||||||
|
//:CALC:MARKER:ADD;
|
||||||
|
//:CALC:DPX:MARKER0:TRACE TRACE1;
|
||||||
|
//:CALC:DPX:MARKER0:FREQ FREQ
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMarker(double FREQ, string TRACE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE ON;\n");
|
||||||
|
SendSCPIcommand(String.Format(":CALC:MARKER1:X {0};\n", FREQ));
|
||||||
|
|
||||||
|
if (TRACE == "MAXHOLD")
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:TRACE 2;\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMarker()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE OFF;\n");
|
||||||
|
|
||||||
|
//:CALC:MARKER:AOFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QueryMarker(out double LEVEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- QueryMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:Y?;\n", out response);
|
||||||
|
|
||||||
|
//:CALC:DPX:MARKER0:Y?
|
||||||
|
|
||||||
|
LEVEL = Convert.ToDouble(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QueryMarker(int READCOUNT, out double LEVEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- QueryMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0, LEVEL = 0; i < READCOUNT; i++)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:Y?;\n", out response);
|
||||||
|
|
||||||
|
LEVEL += Convert.ToDouble(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
LEVEL /= READCOUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckAlign()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- CheckAlign ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int16 VALUE;
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("STAT:QUES:CAL?;\n", out response);
|
||||||
|
if (Int16.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if ((VALUE & 0x4000) != 0)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*CAL?;\n", out response, 5, 240);
|
||||||
|
|
||||||
|
if (response.Contains("1"))
|
||||||
|
{
|
||||||
|
DONE = true;
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckAlign(out bool success)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- CheckAlign ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int16 VALUE;
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("STAT:QUES:CAL?;\n", out response);
|
||||||
|
if (Int16.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if ((VALUE & 0x4000) != 0)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*CAL?;\n", out response, 5, 240);
|
||||||
|
|
||||||
|
if (response.Contains("0"))
|
||||||
|
{
|
||||||
|
success = true;
|
||||||
|
DONE = true;
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,817 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace HypervaultSystem
|
||||||
|
{
|
||||||
|
class Hypervault_System
|
||||||
|
{
|
||||||
|
private TcpClient client;
|
||||||
|
private IPEndPoint serverEndPoint;
|
||||||
|
private NetworkStream clientStream;
|
||||||
|
|
||||||
|
public Hypervault_System(string IPADDR, int PORT)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- HypervaultSystem ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
client = new TcpClient();
|
||||||
|
serverEndPoint = new IPEndPoint(IPAddress.Parse(IPADDR), PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Connect()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- Connect ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.Connect(serverEndPoint);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
clientStream = client.GetStream();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Disconnect()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- Disconnect ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.Close();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendSCPIcommand(string command)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SendSCPIcommand ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
ASCIIEncoding encoder = new ASCIIEncoding();
|
||||||
|
byte[] buffer = encoder.GetBytes(command);
|
||||||
|
|
||||||
|
clientStream.Write(buffer, 0, buffer.Length);
|
||||||
|
clientStream.Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendSCPIcommand(string command, out string response, int optionaldelay = 5, int optionaltimeout = 20)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SendSCPIcommand ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int TOSECONDS = optionaltimeout;
|
||||||
|
ASCIIEncoding encoder = new ASCIIEncoding();
|
||||||
|
byte[] buffer = encoder.GetBytes(command);
|
||||||
|
byte[] retbuffer = new byte[65536];
|
||||||
|
Stopwatch timer = new Stopwatch();
|
||||||
|
|
||||||
|
clientStream.Write(buffer, 0, buffer.Length);
|
||||||
|
clientStream.Flush();
|
||||||
|
|
||||||
|
timer.Start();
|
||||||
|
while ((!clientStream.DataAvailable) && (timer.Elapsed.TotalSeconds < TOSECONDS)) ;
|
||||||
|
|
||||||
|
if (!clientStream.DataAvailable)
|
||||||
|
{
|
||||||
|
timer.Stop();
|
||||||
|
response = String.Format("ERROR - NO Data Available!!");
|
||||||
|
}
|
||||||
|
timer.Stop();
|
||||||
|
|
||||||
|
Thread.Sleep(optionaldelay);
|
||||||
|
|
||||||
|
if (clientStream.DataAvailable)
|
||||||
|
{
|
||||||
|
clientStream.Read(retbuffer, 0, 65536);
|
||||||
|
|
||||||
|
string str = Encoding.UTF8.GetString(retbuffer, 0, 65536);
|
||||||
|
|
||||||
|
str = str.Replace("\r", string.Empty);
|
||||||
|
str = str.Replace("\n", string.Empty);
|
||||||
|
str = str.Replace("\0", string.Empty);
|
||||||
|
|
||||||
|
string[] lines = Regex.Split(str, "\r\n\0");
|
||||||
|
|
||||||
|
response = lines[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
response = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool WaitOPC(int optionaltimeout = 20)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- WaitOPC ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*OPC?\n", out response, 5, optionaltimeout);
|
||||||
|
|
||||||
|
if (response.Equals("1"))
|
||||||
|
DONE = true;
|
||||||
|
else
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCF(double CF)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setCF ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("SENSE:FREQUENCY:RF:CENTER {0}\n", CF));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand("SENSE:FREQUENCY:RF:CENTER?\n", out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == CF)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getCF()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getCF ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(String.Format("SENSE:FREQUENCY:RF:CENTER?\n"), out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpan(double SPAN)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setSpan ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("SENSE:FREQUENCY:SPAN {0}\n", SPAN));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand("SENSE:FREQUENCY:SPAN?\n", out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == SPAN)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSpan()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getSpan ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand("SENSE:FREQUENCY:SPAN?\n", out response);
|
||||||
|
|
||||||
|
if (Double.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttenuation(Int32 ATTENUATION)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setAttenuation ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format(":POW:ATT {0}\n", ATTENUATION));
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:ATT?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == ATTENUATION)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAttenuation()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- getAttenuation ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
SendSCPIcommand(":POW:ATT?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
return (VALUE);
|
||||||
|
else
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreamp(bool ENABLE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setPreamp ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
double CF;
|
||||||
|
Int32 VALUE;
|
||||||
|
|
||||||
|
|
||||||
|
if (ENABLE)
|
||||||
|
{
|
||||||
|
#if false
|
||||||
|
for (bool DONE = false; DONE == false; )
|
||||||
|
{
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE OFF\n");
|
||||||
|
WaitOPC ();
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse (response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CF = getCF();
|
||||||
|
|
||||||
|
if (CF <= 3.6e9)
|
||||||
|
{
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND LOW\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND?\n", out response);
|
||||||
|
|
||||||
|
if (response.Contains("LOW"))
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND FULL\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:BAND?\n", out response);
|
||||||
|
|
||||||
|
if (response.Contains("FULL"))
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE ON\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == 1)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if false
|
||||||
|
for (bool DONE = false; DONE == false; )
|
||||||
|
{
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE OFF\n");
|
||||||
|
WaitOPC ();
|
||||||
|
SendSCPIcommand (":POW:EATT:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse (response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE OFF\n");
|
||||||
|
WaitOPC();
|
||||||
|
SendSCPIcommand(":POW:GAIN:STATE?\n", out response);
|
||||||
|
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
if (VALUE == 0)
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVBW(double VBW)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- setVBW ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("SENSE:BANDWIDTH:VIDEO {0}\n", VBW));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTraceMode(string MODE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- SetTraceMode ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(String.Format("TRACE1:TYPE {0}\n", MODE));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMaxHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE2:DISPLAY:STATE ON\n");
|
||||||
|
SendSCPIcommand("TRACE2:TYPE MAXHOLD\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMinHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE3:DISPLAY:STATE ON\n");
|
||||||
|
SendSCPIcommand("TRACE3:TYPE MINHOLD\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMaxHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisnableMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE2:DISPLAY:STATE OFF\n");
|
||||||
|
SendSCPIcommand("TRACE2:UPDATE:STATE OFF\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMinHoldTrace()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisableMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand("TRACE3:DISPLAY:STATE OFF\n");
|
||||||
|
SendSCPIcommand("TRACE3:UPDATE:STATE OFF\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadMaxHoldTrace(out double[] dTraceData)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- ReadMaxHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
string tracedata;
|
||||||
|
string[] sTraceData;
|
||||||
|
|
||||||
|
SendSCPIcommand("TRACE:DATA? TRACE2\n", out tracedata, 100);
|
||||||
|
|
||||||
|
sTraceData = Regex.Split(tracedata, ",");
|
||||||
|
dTraceData = new double[sTraceData.Length];
|
||||||
|
|
||||||
|
for (i = 0; i < sTraceData.Length; i++)
|
||||||
|
dTraceData[i] = Convert.ToDouble(sTraceData[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ReadMinHoldTrace(out double[] dTraceData)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- ReadMinHoldTrace ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
string tracedata;
|
||||||
|
string[] sTraceData;
|
||||||
|
|
||||||
|
SendSCPIcommand("TRACE:DATA? TRACE3\n", out tracedata, 100);
|
||||||
|
|
||||||
|
sTraceData = Regex.Split(tracedata, ",");
|
||||||
|
dTraceData = new double[sTraceData.Length];
|
||||||
|
|
||||||
|
for (i = 0; i < sTraceData.Length; i++)
|
||||||
|
dTraceData[i] = Convert.ToDouble(sTraceData[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMarker(double FREQ)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE ON;\n");
|
||||||
|
SendSCPIcommand(String.Format(":CALC:MARKER1:X {0};\n", FREQ));
|
||||||
|
|
||||||
|
//:CALC:MARKER:AOFF;
|
||||||
|
//:CALC:MARKER:ADD;
|
||||||
|
//:CALC:DPX:MARKER0:TRACE TRACE1;
|
||||||
|
//:CALC:DPX:MARKER0:FREQ FREQ
|
||||||
|
}
|
||||||
|
|
||||||
|
public void EnableMarker(double FREQ, string TRACE)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- EnableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE ON;\n");
|
||||||
|
SendSCPIcommand(String.Format(":CALC:MARKER1:X {0};\n", FREQ));
|
||||||
|
|
||||||
|
if (TRACE == "MAXHOLD")
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:TRACE 2;\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableMarker()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- DisableMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:STATE OFF;\n");
|
||||||
|
|
||||||
|
//:CALC:MARKER:AOFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QueryMarker(out double LEVEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- QueryMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:Y?;\n", out response);
|
||||||
|
|
||||||
|
//:CALC:DPX:MARKER0:Y?
|
||||||
|
|
||||||
|
LEVEL = Convert.ToDouble(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QueryMarker(int READCOUNT, out double LEVEL)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- QueryMarker ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0, LEVEL = 0; i < READCOUNT; i++)
|
||||||
|
{
|
||||||
|
SendSCPIcommand(":CALC:MARKER1:Y?;\n", out response);
|
||||||
|
|
||||||
|
LEVEL += Convert.ToDouble(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
LEVEL /= READCOUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckAlign()
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- CheckAlign ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int16 VALUE;
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("STAT:QUES:CAL?;\n", out response);
|
||||||
|
if (Int16.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if ((VALUE & 0x4000) != 0)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*CAL?;\n", out response, 5, 240);
|
||||||
|
|
||||||
|
if (response.Contains("1"))
|
||||||
|
{
|
||||||
|
DONE = true;
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckAlign(out bool success)
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//-- CheckAlign ()
|
||||||
|
//--
|
||||||
|
//-- Purpose:
|
||||||
|
//--
|
||||||
|
//-- Parameters:
|
||||||
|
//--
|
||||||
|
//-- Returns:
|
||||||
|
//--
|
||||||
|
//-- Notes:
|
||||||
|
//--
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
{
|
||||||
|
string response;
|
||||||
|
Int16 VALUE;
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
|
success = false;
|
||||||
|
|
||||||
|
for (bool DONE = false; DONE == false;)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("STAT:QUES:CAL?;\n", out response);
|
||||||
|
if (Int16.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if ((VALUE & 0x4000) != 0)
|
||||||
|
{
|
||||||
|
SendSCPIcommand("*CAL?;\n", out response, 5, 240);
|
||||||
|
|
||||||
|
if (response.Contains("0"))
|
||||||
|
{
|
||||||
|
success = true;
|
||||||
|
DONE = true;
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DONE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+460
@@ -0,0 +1,460 @@
|
|||||||
|
namespace Hypervault_Control
|
||||||
|
{
|
||||||
|
partial class Hypervault_Control
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Hypervault_Control));
|
||||||
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.label9 = new System.Windows.Forms.Label();
|
||||||
|
this.label10 = new System.Windows.Forms.Label();
|
||||||
|
this.Channel1_Enable = new System.Windows.Forms.CheckBox();
|
||||||
|
this.Channel2_Enable = new System.Windows.Forms.CheckBox();
|
||||||
|
this.Channel1_Filename = new System.Windows.Forms.TextBox();
|
||||||
|
this.Channel1_CF = new System.Windows.Forms.TextBox();
|
||||||
|
this.Channel1_CF_Multiplier = new System.Windows.Forms.ComboBox();
|
||||||
|
this.Channel1_BW = new System.Windows.Forms.ComboBox();
|
||||||
|
this.Channel1_RefLevel = new System.Windows.Forms.TextBox();
|
||||||
|
this.Channel2_Filename = new System.Windows.Forms.TextBox();
|
||||||
|
this.Channel2_CF = new System.Windows.Forms.TextBox();
|
||||||
|
this.Channel2_CF_Multiplier = new System.Windows.Forms.ComboBox();
|
||||||
|
this.Channel2_BW = new System.Windows.Forms.ComboBox();
|
||||||
|
this.Channel2_RefLevel = new System.Windows.Forms.TextBox();
|
||||||
|
this.StartStop_Button = new System.Windows.Forms.Button();
|
||||||
|
this.Update_Button = new System.Windows.Forms.Button();
|
||||||
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
|
this.FSWX_IP = new System.Windows.Forms.TextBox();
|
||||||
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
|
this.FSWX_Port = new System.Windows.Forms.TextBox();
|
||||||
|
this.HYPERVAULT_Port = new System.Windows.Forms.TextBox();
|
||||||
|
this.label13 = new System.Windows.Forms.Label();
|
||||||
|
this.HYPERVAULT_IP = new System.Windows.Forms.TextBox();
|
||||||
|
this.label14 = new System.Windows.Forms.Label();
|
||||||
|
this.Connect_Button = new System.Windows.Forms.Button();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// label1
|
||||||
|
//
|
||||||
|
this.label1.AutoSize = true;
|
||||||
|
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label1.Location = new System.Drawing.Point(13, 16);
|
||||||
|
this.label1.Name = "label1";
|
||||||
|
this.label1.Size = new System.Drawing.Size(90, 20);
|
||||||
|
this.label1.TabIndex = 0;
|
||||||
|
this.label1.Text = "Channel 1";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label2.Location = new System.Drawing.Point(396, 16);
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
this.label2.Size = new System.Drawing.Size(90, 20);
|
||||||
|
this.label2.TabIndex = 1;
|
||||||
|
this.label2.Text = "Channel 2";
|
||||||
|
//
|
||||||
|
// label3
|
||||||
|
//
|
||||||
|
this.label3.AutoSize = true;
|
||||||
|
this.label3.Location = new System.Drawing.Point(17, 54);
|
||||||
|
this.label3.Name = "label3";
|
||||||
|
this.label3.Size = new System.Drawing.Size(96, 13);
|
||||||
|
this.label3.TabIndex = 2;
|
||||||
|
this.label3.Text = "File Name.............:";
|
||||||
|
//
|
||||||
|
// label4
|
||||||
|
//
|
||||||
|
this.label4.AutoSize = true;
|
||||||
|
this.label4.Location = new System.Drawing.Point(397, 54);
|
||||||
|
this.label4.Name = "label4";
|
||||||
|
this.label4.Size = new System.Drawing.Size(96, 13);
|
||||||
|
this.label4.TabIndex = 3;
|
||||||
|
this.label4.Text = "File Name.............:";
|
||||||
|
//
|
||||||
|
// label5
|
||||||
|
//
|
||||||
|
this.label5.AutoSize = true;
|
||||||
|
this.label5.Location = new System.Drawing.Point(17, 110);
|
||||||
|
this.label5.Name = "label5";
|
||||||
|
this.label5.Size = new System.Drawing.Size(96, 13);
|
||||||
|
this.label5.TabIndex = 4;
|
||||||
|
this.label5.Text = "Bandwidth............:";
|
||||||
|
//
|
||||||
|
// label6
|
||||||
|
//
|
||||||
|
this.label6.AutoSize = true;
|
||||||
|
this.label6.Location = new System.Drawing.Point(397, 110);
|
||||||
|
this.label6.Name = "label6";
|
||||||
|
this.label6.Size = new System.Drawing.Size(96, 13);
|
||||||
|
this.label6.TabIndex = 5;
|
||||||
|
this.label6.Text = "Bandwidth............:";
|
||||||
|
//
|
||||||
|
// label7
|
||||||
|
//
|
||||||
|
this.label7.AutoSize = true;
|
||||||
|
this.label7.Location = new System.Drawing.Point(17, 83);
|
||||||
|
this.label7.Name = "label7";
|
||||||
|
this.label7.Size = new System.Drawing.Size(97, 13);
|
||||||
|
this.label7.TabIndex = 6;
|
||||||
|
this.label7.Text = "Center Frequency :";
|
||||||
|
//
|
||||||
|
// label8
|
||||||
|
//
|
||||||
|
this.label8.AutoSize = true;
|
||||||
|
this.label8.Location = new System.Drawing.Point(397, 83);
|
||||||
|
this.label8.Name = "label8";
|
||||||
|
this.label8.Size = new System.Drawing.Size(97, 13);
|
||||||
|
this.label8.TabIndex = 7;
|
||||||
|
this.label8.Text = "Center Frequency :";
|
||||||
|
//
|
||||||
|
// label9
|
||||||
|
//
|
||||||
|
this.label9.AutoSize = true;
|
||||||
|
this.label9.Location = new System.Drawing.Point(17, 137);
|
||||||
|
this.label9.Name = "label9";
|
||||||
|
this.label9.Size = new System.Drawing.Size(98, 13);
|
||||||
|
this.label9.TabIndex = 8;
|
||||||
|
this.label9.Text = "Ref Level..............:";
|
||||||
|
//
|
||||||
|
// label10
|
||||||
|
//
|
||||||
|
this.label10.AutoSize = true;
|
||||||
|
this.label10.Location = new System.Drawing.Point(397, 137);
|
||||||
|
this.label10.Name = "label10";
|
||||||
|
this.label10.Size = new System.Drawing.Size(98, 13);
|
||||||
|
this.label10.TabIndex = 9;
|
||||||
|
this.label10.Text = "Ref Level..............:";
|
||||||
|
//
|
||||||
|
// Channel1_Enable
|
||||||
|
//
|
||||||
|
this.Channel1_Enable.AutoSize = true;
|
||||||
|
this.Channel1_Enable.Checked = true;
|
||||||
|
this.Channel1_Enable.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.Channel1_Enable.Location = new System.Drawing.Point(110, 18);
|
||||||
|
this.Channel1_Enable.Name = "Channel1_Enable";
|
||||||
|
this.Channel1_Enable.Size = new System.Drawing.Size(59, 17);
|
||||||
|
this.Channel1_Enable.TabIndex = 10;
|
||||||
|
this.Channel1_Enable.Text = "Enable";
|
||||||
|
this.Channel1_Enable.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Channel2_Enable
|
||||||
|
//
|
||||||
|
this.Channel2_Enable.AutoSize = true;
|
||||||
|
this.Channel2_Enable.Checked = true;
|
||||||
|
this.Channel2_Enable.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.Channel2_Enable.Location = new System.Drawing.Point(505, 18);
|
||||||
|
this.Channel2_Enable.Name = "Channel2_Enable";
|
||||||
|
this.Channel2_Enable.Size = new System.Drawing.Size(59, 17);
|
||||||
|
this.Channel2_Enable.TabIndex = 11;
|
||||||
|
this.Channel2_Enable.Text = "Enable";
|
||||||
|
this.Channel2_Enable.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Channel1_Filename
|
||||||
|
//
|
||||||
|
this.Channel1_Filename.Location = new System.Drawing.Point(118, 47);
|
||||||
|
this.Channel1_Filename.Name = "Channel1_Filename";
|
||||||
|
this.Channel1_Filename.Size = new System.Drawing.Size(272, 20);
|
||||||
|
this.Channel1_Filename.TabIndex = 12;
|
||||||
|
//
|
||||||
|
// Channel1_CF
|
||||||
|
//
|
||||||
|
this.Channel1_CF.Location = new System.Drawing.Point(118, 76);
|
||||||
|
this.Channel1_CF.Name = "Channel1_CF";
|
||||||
|
this.Channel1_CF.Size = new System.Drawing.Size(99, 20);
|
||||||
|
this.Channel1_CF.TabIndex = 13;
|
||||||
|
this.Channel1_CF.Text = "8.0";
|
||||||
|
//
|
||||||
|
// Channel1_CF_Multiplier
|
||||||
|
//
|
||||||
|
this.Channel1_CF_Multiplier.FormattingEnabled = true;
|
||||||
|
this.Channel1_CF_Multiplier.Items.AddRange(new object[] {
|
||||||
|
"GHz",
|
||||||
|
"MHz"});
|
||||||
|
this.Channel1_CF_Multiplier.Location = new System.Drawing.Point(223, 76);
|
||||||
|
this.Channel1_CF_Multiplier.Name = "Channel1_CF_Multiplier";
|
||||||
|
this.Channel1_CF_Multiplier.Size = new System.Drawing.Size(48, 21);
|
||||||
|
this.Channel1_CF_Multiplier.TabIndex = 14;
|
||||||
|
this.Channel1_CF_Multiplier.Text = "GHz";
|
||||||
|
//
|
||||||
|
// Channel1_BW
|
||||||
|
//
|
||||||
|
this.Channel1_BW.FormattingEnabled = true;
|
||||||
|
this.Channel1_BW.Items.AddRange(new object[] {
|
||||||
|
"<=2GHz",
|
||||||
|
"4GHz"});
|
||||||
|
this.Channel1_BW.Location = new System.Drawing.Point(118, 106);
|
||||||
|
this.Channel1_BW.Name = "Channel1_BW";
|
||||||
|
this.Channel1_BW.Size = new System.Drawing.Size(66, 21);
|
||||||
|
this.Channel1_BW.TabIndex = 15;
|
||||||
|
this.Channel1_BW.Text = "4GHz";
|
||||||
|
//
|
||||||
|
// Channel1_RefLevel
|
||||||
|
//
|
||||||
|
this.Channel1_RefLevel.Location = new System.Drawing.Point(118, 130);
|
||||||
|
this.Channel1_RefLevel.Name = "Channel1_RefLevel";
|
||||||
|
this.Channel1_RefLevel.Size = new System.Drawing.Size(66, 20);
|
||||||
|
this.Channel1_RefLevel.TabIndex = 16;
|
||||||
|
this.Channel1_RefLevel.Text = "10";
|
||||||
|
//
|
||||||
|
// Channel2_Filename
|
||||||
|
//
|
||||||
|
this.Channel2_Filename.Location = new System.Drawing.Point(498, 51);
|
||||||
|
this.Channel2_Filename.Name = "Channel2_Filename";
|
||||||
|
this.Channel2_Filename.Size = new System.Drawing.Size(272, 20);
|
||||||
|
this.Channel2_Filename.TabIndex = 17;
|
||||||
|
//
|
||||||
|
// Channel2_CF
|
||||||
|
//
|
||||||
|
this.Channel2_CF.Location = new System.Drawing.Point(498, 77);
|
||||||
|
this.Channel2_CF.Name = "Channel2_CF";
|
||||||
|
this.Channel2_CF.Size = new System.Drawing.Size(99, 20);
|
||||||
|
this.Channel2_CF.TabIndex = 18;
|
||||||
|
this.Channel2_CF.Text = "8.0";
|
||||||
|
//
|
||||||
|
// Channel2_CF_Multiplier
|
||||||
|
//
|
||||||
|
this.Channel2_CF_Multiplier.FormattingEnabled = true;
|
||||||
|
this.Channel2_CF_Multiplier.Items.AddRange(new object[] {
|
||||||
|
"GHz",
|
||||||
|
"MHz"});
|
||||||
|
this.Channel2_CF_Multiplier.Location = new System.Drawing.Point(603, 76);
|
||||||
|
this.Channel2_CF_Multiplier.Name = "Channel2_CF_Multiplier";
|
||||||
|
this.Channel2_CF_Multiplier.Size = new System.Drawing.Size(46, 21);
|
||||||
|
this.Channel2_CF_Multiplier.TabIndex = 19;
|
||||||
|
this.Channel2_CF_Multiplier.Text = "GHz";
|
||||||
|
//
|
||||||
|
// Channel2_BW
|
||||||
|
//
|
||||||
|
this.Channel2_BW.FormattingEnabled = true;
|
||||||
|
this.Channel2_BW.Items.AddRange(new object[] {
|
||||||
|
"<=2GHz",
|
||||||
|
"4GHz"});
|
||||||
|
this.Channel2_BW.Location = new System.Drawing.Point(498, 106);
|
||||||
|
this.Channel2_BW.Name = "Channel2_BW";
|
||||||
|
this.Channel2_BW.Size = new System.Drawing.Size(66, 21);
|
||||||
|
this.Channel2_BW.TabIndex = 20;
|
||||||
|
this.Channel2_BW.Text = "4GHz";
|
||||||
|
//
|
||||||
|
// Channel2_RefLevel
|
||||||
|
//
|
||||||
|
this.Channel2_RefLevel.Location = new System.Drawing.Point(498, 129);
|
||||||
|
this.Channel2_RefLevel.Name = "Channel2_RefLevel";
|
||||||
|
this.Channel2_RefLevel.Size = new System.Drawing.Size(66, 20);
|
||||||
|
this.Channel2_RefLevel.TabIndex = 21;
|
||||||
|
this.Channel2_RefLevel.Text = "10";
|
||||||
|
//
|
||||||
|
// StartStop_Button
|
||||||
|
//
|
||||||
|
this.StartStop_Button.Location = new System.Drawing.Point(695, 126);
|
||||||
|
this.StartStop_Button.Name = "StartStop_Button";
|
||||||
|
this.StartStop_Button.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.StartStop_Button.TabIndex = 22;
|
||||||
|
this.StartStop_Button.Text = "Arm";
|
||||||
|
this.StartStop_Button.UseVisualStyleBackColor = true;
|
||||||
|
this.StartStop_Button.Click += new System.EventHandler(this.StartStop_Button_Click);
|
||||||
|
//
|
||||||
|
// Update_Button
|
||||||
|
//
|
||||||
|
this.Update_Button.Location = new System.Drawing.Point(603, 126);
|
||||||
|
this.Update_Button.Name = "Update_Button";
|
||||||
|
this.Update_Button.Size = new System.Drawing.Size(86, 23);
|
||||||
|
this.Update_Button.TabIndex = 23;
|
||||||
|
this.Update_Button.Text = "Update FSWX";
|
||||||
|
this.Update_Button.UseVisualStyleBackColor = true;
|
||||||
|
this.Update_Button.Click += new System.EventHandler(this.Update_Button_Click);
|
||||||
|
//
|
||||||
|
// label11
|
||||||
|
//
|
||||||
|
this.label11.AutoSize = true;
|
||||||
|
this.label11.Location = new System.Drawing.Point(17, 180);
|
||||||
|
this.label11.Name = "label11";
|
||||||
|
this.label11.Size = new System.Drawing.Size(99, 13);
|
||||||
|
this.label11.TabIndex = 24;
|
||||||
|
this.label11.Text = "FSWX IP...............:";
|
||||||
|
//
|
||||||
|
// FSWX_IP
|
||||||
|
//
|
||||||
|
this.FSWX_IP.Location = new System.Drawing.Point(117, 177);
|
||||||
|
this.FSWX_IP.Name = "FSWX_IP";
|
||||||
|
this.FSWX_IP.Size = new System.Drawing.Size(91, 20);
|
||||||
|
this.FSWX_IP.TabIndex = 25;
|
||||||
|
this.FSWX_IP.TextChanged += new System.EventHandler(this.FSWX_IP_TextChanged);
|
||||||
|
//
|
||||||
|
// label12
|
||||||
|
//
|
||||||
|
this.label12.AutoSize = true;
|
||||||
|
this.label12.Location = new System.Drawing.Point(214, 180);
|
||||||
|
this.label12.Name = "label12";
|
||||||
|
this.label12.Size = new System.Drawing.Size(44, 13);
|
||||||
|
this.label12.TabIndex = 26;
|
||||||
|
this.label12.Text = "Port.....:";
|
||||||
|
//
|
||||||
|
// FSWX_Port
|
||||||
|
//
|
||||||
|
this.FSWX_Port.Location = new System.Drawing.Point(258, 177);
|
||||||
|
this.FSWX_Port.Name = "FSWX_Port";
|
||||||
|
this.FSWX_Port.Size = new System.Drawing.Size(40, 20);
|
||||||
|
this.FSWX_Port.TabIndex = 27;
|
||||||
|
this.FSWX_Port.TextChanged += new System.EventHandler(this.FSWX_Port_TextChanged);
|
||||||
|
//
|
||||||
|
// HYPERVAULT_Port
|
||||||
|
//
|
||||||
|
this.HYPERVAULT_Port.Location = new System.Drawing.Point(638, 177);
|
||||||
|
this.HYPERVAULT_Port.Name = "HYPERVAULT_Port";
|
||||||
|
this.HYPERVAULT_Port.Size = new System.Drawing.Size(40, 20);
|
||||||
|
this.HYPERVAULT_Port.TabIndex = 31;
|
||||||
|
this.HYPERVAULT_Port.TextChanged += new System.EventHandler(this.HYPERVAULT_Port_TextChanged);
|
||||||
|
//
|
||||||
|
// label13
|
||||||
|
//
|
||||||
|
this.label13.AutoSize = true;
|
||||||
|
this.label13.Location = new System.Drawing.Point(594, 180);
|
||||||
|
this.label13.Name = "label13";
|
||||||
|
this.label13.Size = new System.Drawing.Size(44, 13);
|
||||||
|
this.label13.TabIndex = 30;
|
||||||
|
this.label13.Text = "Port.....:";
|
||||||
|
//
|
||||||
|
// HYPERVAULT_IP
|
||||||
|
//
|
||||||
|
this.HYPERVAULT_IP.Location = new System.Drawing.Point(497, 177);
|
||||||
|
this.HYPERVAULT_IP.Name = "HYPERVAULT_IP";
|
||||||
|
this.HYPERVAULT_IP.Size = new System.Drawing.Size(91, 20);
|
||||||
|
this.HYPERVAULT_IP.TabIndex = 29;
|
||||||
|
this.HYPERVAULT_IP.TextChanged += new System.EventHandler(this.HYPERVAULT_IP_TextChanged);
|
||||||
|
//
|
||||||
|
// label14
|
||||||
|
//
|
||||||
|
this.label14.AutoSize = true;
|
||||||
|
this.label14.Location = new System.Drawing.Point(397, 180);
|
||||||
|
this.label14.Name = "label14";
|
||||||
|
this.label14.Size = new System.Drawing.Size(98, 13);
|
||||||
|
this.label14.TabIndex = 28;
|
||||||
|
this.label14.Text = "Hypervault IP........:";
|
||||||
|
//
|
||||||
|
// Connect_Button
|
||||||
|
//
|
||||||
|
this.Connect_Button.Location = new System.Drawing.Point(695, 174);
|
||||||
|
this.Connect_Button.Name = "Connect_Button";
|
||||||
|
this.Connect_Button.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.Connect_Button.TabIndex = 32;
|
||||||
|
this.Connect_Button.Text = "Connect";
|
||||||
|
this.Connect_Button.UseVisualStyleBackColor = true;
|
||||||
|
this.Connect_Button.Click += new System.EventHandler(this.Connect_Button_Click);
|
||||||
|
//
|
||||||
|
// Hypervault_Control
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(794, 209);
|
||||||
|
this.Controls.Add(this.Connect_Button);
|
||||||
|
this.Controls.Add(this.HYPERVAULT_Port);
|
||||||
|
this.Controls.Add(this.label13);
|
||||||
|
this.Controls.Add(this.HYPERVAULT_IP);
|
||||||
|
this.Controls.Add(this.label14);
|
||||||
|
this.Controls.Add(this.FSWX_Port);
|
||||||
|
this.Controls.Add(this.label12);
|
||||||
|
this.Controls.Add(this.FSWX_IP);
|
||||||
|
this.Controls.Add(this.label11);
|
||||||
|
this.Controls.Add(this.Update_Button);
|
||||||
|
this.Controls.Add(this.Channel1_BW);
|
||||||
|
this.Controls.Add(this.StartStop_Button);
|
||||||
|
this.Controls.Add(this.Channel2_RefLevel);
|
||||||
|
this.Controls.Add(this.Channel2_BW);
|
||||||
|
this.Controls.Add(this.Channel2_CF_Multiplier);
|
||||||
|
this.Controls.Add(this.Channel2_CF);
|
||||||
|
this.Controls.Add(this.Channel2_Filename);
|
||||||
|
this.Controls.Add(this.Channel1_RefLevel);
|
||||||
|
this.Controls.Add(this.Channel1_CF_Multiplier);
|
||||||
|
this.Controls.Add(this.Channel1_CF);
|
||||||
|
this.Controls.Add(this.Channel1_Filename);
|
||||||
|
this.Controls.Add(this.Channel2_Enable);
|
||||||
|
this.Controls.Add(this.Channel1_Enable);
|
||||||
|
this.Controls.Add(this.label10);
|
||||||
|
this.Controls.Add(this.label9);
|
||||||
|
this.Controls.Add(this.label8);
|
||||||
|
this.Controls.Add(this.label7);
|
||||||
|
this.Controls.Add(this.label6);
|
||||||
|
this.Controls.Add(this.label5);
|
||||||
|
this.Controls.Add(this.label4);
|
||||||
|
this.Controls.Add(this.label3);
|
||||||
|
this.Controls.Add(this.label2);
|
||||||
|
this.Controls.Add(this.label1);
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.Name = "Hypervault_Control";
|
||||||
|
this.Text = "Hypervault Control";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Hypervault_Control_FormClosing);
|
||||||
|
this.Shown += new System.EventHandler(this.Hypervault_Control_Shown);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Label label1;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
private System.Windows.Forms.Label label3;
|
||||||
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.Label label5;
|
||||||
|
private System.Windows.Forms.Label label6;
|
||||||
|
private System.Windows.Forms.Label label7;
|
||||||
|
private System.Windows.Forms.Label label8;
|
||||||
|
private System.Windows.Forms.Label label9;
|
||||||
|
private System.Windows.Forms.Label label10;
|
||||||
|
private System.Windows.Forms.CheckBox Channel1_Enable;
|
||||||
|
private System.Windows.Forms.CheckBox Channel2_Enable;
|
||||||
|
private System.Windows.Forms.TextBox Channel1_Filename;
|
||||||
|
private System.Windows.Forms.TextBox Channel1_CF;
|
||||||
|
private System.Windows.Forms.ComboBox Channel1_CF_Multiplier;
|
||||||
|
private System.Windows.Forms.ComboBox Channel1_BW;
|
||||||
|
private System.Windows.Forms.TextBox Channel1_RefLevel;
|
||||||
|
private System.Windows.Forms.TextBox Channel2_Filename;
|
||||||
|
private System.Windows.Forms.TextBox Channel2_CF;
|
||||||
|
private System.Windows.Forms.ComboBox Channel2_CF_Multiplier;
|
||||||
|
private System.Windows.Forms.ComboBox Channel2_BW;
|
||||||
|
private System.Windows.Forms.TextBox Channel2_RefLevel;
|
||||||
|
private System.Windows.Forms.Button StartStop_Button;
|
||||||
|
private System.Windows.Forms.Button Update_Button;
|
||||||
|
private System.Windows.Forms.Label label11;
|
||||||
|
private System.Windows.Forms.TextBox FSWX_IP;
|
||||||
|
private System.Windows.Forms.Label label12;
|
||||||
|
private System.Windows.Forms.TextBox FSWX_Port;
|
||||||
|
private System.Windows.Forms.TextBox HYPERVAULT_Port;
|
||||||
|
private System.Windows.Forms.Label label13;
|
||||||
|
private System.Windows.Forms.TextBox HYPERVAULT_IP;
|
||||||
|
private System.Windows.Forms.Label label14;
|
||||||
|
private System.Windows.Forms.Button Connect_Button;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,806 @@
|
|||||||
|
using FSWXSA;
|
||||||
|
using HypervaultSystem;
|
||||||
|
using App_Settings;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Remoting.Channels;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Hypervault_Control
|
||||||
|
{
|
||||||
|
public partial class Hypervault_Control : Form
|
||||||
|
{
|
||||||
|
enum SystemState
|
||||||
|
{
|
||||||
|
Disarmed,
|
||||||
|
Armed,
|
||||||
|
Collecting
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Hypervault_Connected = false;
|
||||||
|
bool FSWX_Connected = false;
|
||||||
|
Hypervault_System Hypervault;
|
||||||
|
FSWX_SA FSWXSA;
|
||||||
|
AppSettings settings;
|
||||||
|
bool COLLECTING = false;
|
||||||
|
SystemState state = SystemState.Disarmed;
|
||||||
|
String START_CAP1;
|
||||||
|
String START_CAP2;
|
||||||
|
String STOP_CAP1;
|
||||||
|
String STOP_CAP2;
|
||||||
|
String STREAM1;
|
||||||
|
String STREAM2;
|
||||||
|
int PORT1;
|
||||||
|
int PORT2;
|
||||||
|
int RefLevel1;
|
||||||
|
int RefLevel2;
|
||||||
|
int StreamCount1;
|
||||||
|
int StreamCount2;
|
||||||
|
long CLOCK1;
|
||||||
|
long CLOCK2;
|
||||||
|
float CF1;
|
||||||
|
float CF2;
|
||||||
|
|
||||||
|
public Hypervault_Control()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Hypervault_Control_Shown(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Update_Button.Enabled = false;
|
||||||
|
StartStop_Button.Enabled = false;
|
||||||
|
|
||||||
|
settings = SettingsManager.Load ();
|
||||||
|
|
||||||
|
FSWX_IP.Text = settings.FSWXIpAddress;
|
||||||
|
FSWX_Port.Text = settings.FSWXPort;
|
||||||
|
|
||||||
|
HYPERVAULT_IP.Text = settings.HypervaultIpAddress;
|
||||||
|
HYPERVAULT_Port.Text = settings.HypervaultPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Hypervault_Control_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
if (Hypervault_Connected)
|
||||||
|
Hypervault.Disconnect();
|
||||||
|
|
||||||
|
if (FSWX_Connected)
|
||||||
|
{
|
||||||
|
//-- Disable the FSWX Channel 1 Stream
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP1:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
//-- Disable the FSWX Channel 2 Stream
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP2:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
FSWXSA.Disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool ValidateFileName(string fileName)
|
||||||
|
{
|
||||||
|
char [] invalidChars = Path.GetInvalidFileNameChars ();
|
||||||
|
foreach (char c in invalidChars)
|
||||||
|
{
|
||||||
|
if (fileName.Contains (c))
|
||||||
|
{
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ValidateInt(string StringVal)
|
||||||
|
{
|
||||||
|
Int32 VAL;
|
||||||
|
|
||||||
|
return (Int32.TryParse(StringVal, out VAL));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool ValidateFloat(string StringVal)
|
||||||
|
{
|
||||||
|
float VAL;
|
||||||
|
|
||||||
|
return (float.TryParse(StringVal, out VAL));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckIPValid (string strIP)
|
||||||
|
{
|
||||||
|
//-- Split string by ".", check that array length is 3
|
||||||
|
char chrFullStop = '.';
|
||||||
|
string [] arrOctets = strIP.Split (chrFullStop);
|
||||||
|
if (arrOctets.Length != 4)
|
||||||
|
{
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-- Check each substring checking that the int value is less than 255 and that is char[] length is !> 2
|
||||||
|
Int16 MAXVALUE = 255;
|
||||||
|
Int32 temp; //-- Parse returns Int32
|
||||||
|
foreach (string strOctet in arrOctets)
|
||||||
|
{
|
||||||
|
if (strOctet.Length > 3)
|
||||||
|
{
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = int.Parse (strOctet);
|
||||||
|
if (temp > MAXVALUE)
|
||||||
|
{
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartStop_Button_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult result;
|
||||||
|
int retcode;
|
||||||
|
string response = "";
|
||||||
|
|
||||||
|
if (state == SystemState.Disarmed)
|
||||||
|
{
|
||||||
|
StartStop_Button.Text = "Arming";
|
||||||
|
this.Refresh ();
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut1:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut1:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response[0] == '1'))
|
||||||
|
{
|
||||||
|
//Channel1_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("FSWX Digital IO 1 Cable Not Conneced!", "WARNING!", MessageBoxButtons.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut2:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut2:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response[0] == '1'))
|
||||||
|
{
|
||||||
|
//Channel2_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("FSWX Digital IO 2 Cable Not Conneced!", "WARNING!", MessageBoxButtons.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-- Enable the FSWX Channel 1 Stream
|
||||||
|
if (Channel1_Enable.Checked)
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP1:IQHS:STATe ON\n");
|
||||||
|
|
||||||
|
//-- Enable the FSWX Channel 2 Stream
|
||||||
|
if (Channel2_Enable.Checked)
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP2:IQHS:STATe ON\n");
|
||||||
|
|
||||||
|
Thread.Sleep (10000); //-- Wait 10 seconds Added 9/15/2026
|
||||||
|
|
||||||
|
state = SystemState.Armed;
|
||||||
|
StartStop_Button.Text = "Start";
|
||||||
|
}
|
||||||
|
else if (state == SystemState.Armed)
|
||||||
|
// if (COLLECTING == false)
|
||||||
|
{
|
||||||
|
//-- Process Channel 1
|
||||||
|
if (Channel1_Enable.Checked)
|
||||||
|
{
|
||||||
|
//-- Validate the inputs
|
||||||
|
if ((Channel1_Filename.Text == "") || (ValidateFileName(Channel1_Filename.Text) == false))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 1 filename is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateFloat(Channel1_CF.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 1 Center Frequency is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateInt(Channel1_RefLevel.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 1 Ref Level is invlalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-- Get the input values into a form that we can use.
|
||||||
|
if (Channel1_BW.Text == "<=2GHz")
|
||||||
|
{
|
||||||
|
PORT1 = 2;
|
||||||
|
CLOCK1 = 2500000000;
|
||||||
|
STREAM1 = "1";
|
||||||
|
StreamCount1 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PORT1 = 3;
|
||||||
|
CLOCK1 = 5000000000;
|
||||||
|
STREAM1 = "1,0";
|
||||||
|
StreamCount1 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
float.TryParse(Channel1_CF.Text, out CF1);
|
||||||
|
if (Channel1_CF_Multiplier.Text == "GHz")
|
||||||
|
CF1 *= 1000000000;
|
||||||
|
else
|
||||||
|
CF1 *= 1000000;
|
||||||
|
|
||||||
|
//-- Build the capture start and stop commands
|
||||||
|
START_CAP1 = String.Format ("CAPTURE:START {{\"portinfo\": {{\"port\": {0}}}, \"fileinfo\": {{\"filename\": \"{1}\"}}}}\n", PORT1, Channel1_Filename.Text);
|
||||||
|
STOP_CAP1 = String.Format ("CAPTURE:STOP {{\"portinfo\": {{\"port\": {0}}}, \"fileinfo\": {{\"filename\": \"{1}\"}}, \"headerinfo\": {{\"header\": \"{{COPYRIGHT:2020 Rohde&Schwarz IQW}}{{FWVERSION:2021}}{{DATE:2025-04-11;14:45:04}}{{TYPE:RAW16BE}}{{COMPONENTS:IQ}}{{CLOCK:{2:0}}}{{RESOLUTION:16}}{{FREQUENCY:{3:0}}}{{REFLEVEL:{4}}}{{STREAMCOUNT:{5}}}{{STREAMORDER:{6}}}\"}}\n", PORT1, Channel1_Filename.Text, CLOCK1, CF1, Channel1_RefLevel.Text, StreamCount1, STREAM1);
|
||||||
|
Console.WriteLine (START_CAP1);
|
||||||
|
Console.WriteLine (STOP_CAP1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-- Process Channel 1
|
||||||
|
if (Channel2_Enable.Checked)
|
||||||
|
{
|
||||||
|
//-- Validate the inputs
|
||||||
|
if ((Channel2_Filename.Text == "") || (ValidateFileName(Channel2_Filename.Text) == false))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 2 filename is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateFloat(Channel2_CF.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 2 Center Frequency is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateInt(Channel2_RefLevel.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 2 Ref Level is invlalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-- Get the input values into a form that we can use.
|
||||||
|
if (Channel2_BW.Text == "<=2GHz")
|
||||||
|
{
|
||||||
|
PORT2 = 8;
|
||||||
|
CLOCK2 = 2500000000;
|
||||||
|
STREAM2 = "3";
|
||||||
|
StreamCount2 = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PORT2 = 12;
|
||||||
|
CLOCK2 = 5000000000;
|
||||||
|
STREAM2 = "3,2";
|
||||||
|
StreamCount2 = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
float.TryParse(Channel2_CF.Text, out CF2);
|
||||||
|
if (Channel2_CF_Multiplier.Text == "GHz")
|
||||||
|
CF2 *= 1000000000;
|
||||||
|
else
|
||||||
|
CF2 *= 1000000;
|
||||||
|
|
||||||
|
//-- Build the capture start and stop commands
|
||||||
|
START_CAP2 = String.Format ("CAPTURE:START {{\"portinfo\": {{\"port\": {0}}}, \"fileinfo\": {{\"filename\": \"{1}\"}}}}\n", PORT2, Channel2_Filename.Text);
|
||||||
|
STOP_CAP2 = String.Format ("CAPTURE:STOP {{\"portinfo\": {{\"port\": {0}}}, \"fileinfo\": {{\"filename\": \"{1}\"}}, \"headerinfo\": {{\"header\": \"{{COPYRIGHT:2020 Rohde&Schwarz IQW}}{{FWVERSION:2021}}{{DATE:2025-04-11;14:45:04}}{{TYPE:RAW16BE}}{{COMPONENTS:IQ}}{{CLOCK:{2:0}}}{{RESOLUTION:16}}{{FREQUENCY:{3:0}}}{{REFLEVEL:{4}}}{{STREAMCOUNT:{5}}}{{STREAMORDER:{6}}}\"}}\n", PORT2, Channel2_Filename.Text, CLOCK2, CF2, Channel2_RefLevel.Text, StreamCount2, STREAM2);
|
||||||
|
Console.WriteLine (START_CAP2);
|
||||||
|
Console.WriteLine (STOP_CAP2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Channel1_Enable.Checked) || (Channel2_Enable.Checked))
|
||||||
|
{
|
||||||
|
//-- Need some error checking on start commands!
|
||||||
|
if (Channel1_Enable.Checked)
|
||||||
|
{
|
||||||
|
Hypervault.SendSCPIcommand (START_CAP1, out response);
|
||||||
|
Console.WriteLine (response);
|
||||||
|
|
||||||
|
int.TryParse(response, out retcode);
|
||||||
|
if (retcode != 0)
|
||||||
|
{
|
||||||
|
//-- We have an error!
|
||||||
|
if (retcode == 17)
|
||||||
|
result = MessageBox.Show ("Channel 1 File Already Exists", "Error!", MessageBoxButtons.OK);
|
||||||
|
else
|
||||||
|
result = MessageBox.Show ("Channel 1 Parameter Error", "Error!", MessageBoxButtons.OK);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Channel2_Enable.Checked)
|
||||||
|
{
|
||||||
|
Hypervault.SendSCPIcommand (START_CAP2, out response);
|
||||||
|
Console.WriteLine (response);
|
||||||
|
|
||||||
|
int.TryParse (response, out retcode);
|
||||||
|
if (retcode != 0)
|
||||||
|
{
|
||||||
|
//-- We have an error!
|
||||||
|
if (retcode == 17)
|
||||||
|
result = MessageBox.Show ("Channel 2 File Already Exists", "Error!", MessageBoxButtons.OK);
|
||||||
|
else
|
||||||
|
result = MessageBox.Show ("Channel 2 Parameter Error", "Error!", MessageBoxButtons.OK);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Hypervault.SendSCPIcommand ("CAPTURE:ENABLE ON\n");
|
||||||
|
Hypervault.SendSCPIcommand ("CAPTURE:ENABLE?\n", out response);
|
||||||
|
|
||||||
|
if (response == "ON")
|
||||||
|
{
|
||||||
|
//-- Enable the FSWX Channel 1 Stream
|
||||||
|
//if (Channel1_Enable.Checked)
|
||||||
|
// FSWXSA.SendSCPIcommand ("OUTP1:IQHS:STATe ON\n");
|
||||||
|
|
||||||
|
//-- Enable the FSWX Channel 2 Stream
|
||||||
|
//if (Channel2_Enable.Checked)
|
||||||
|
// FSWXSA.SendSCPIcommand ("OUTP2:IQHS:STATe ON\n");
|
||||||
|
|
||||||
|
//Thread.Sleep (3000); //-- Wait 3 seconds Added 7/15/26
|
||||||
|
|
||||||
|
//-- Turn on the FSWX Data??
|
||||||
|
FSWXSA.SendSCPIcommand (":INIT:IMM\n");
|
||||||
|
|
||||||
|
//-- Change the text on the button
|
||||||
|
StartStop_Button.Text = "Stop";
|
||||||
|
|
||||||
|
state = SystemState.Collecting;
|
||||||
|
|
||||||
|
COLLECTING = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("CAPTURE:ENABLE ON FAILED!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (state == SystemState.Collecting)
|
||||||
|
// else if (COLLECTING == true)
|
||||||
|
{
|
||||||
|
//-- Need some error checking on stop commands!
|
||||||
|
if (Channel1_Enable.Checked)
|
||||||
|
{
|
||||||
|
//-- Disable the FSWX Channel 1 Stream
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP1:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
Hypervault.SendSCPIcommand(STOP_CAP1, out response);
|
||||||
|
Console.WriteLine(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Channel2_Enable.Checked)
|
||||||
|
{
|
||||||
|
//-- Disable the FSWX Channel 2 Stream
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP2:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
Hypervault.SendSCPIcommand (STOP_CAP2, out response);
|
||||||
|
Console.WriteLine (response);
|
||||||
|
}
|
||||||
|
|
||||||
|
Hypervault.SendSCPIcommand ("CAPTURE:ENABLE OFF\n");
|
||||||
|
Hypervault.SendSCPIcommand ("CAPTURE:ENABLE?\n", out response);
|
||||||
|
|
||||||
|
if (response != "OFF")
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("CAPTURE:ENABLE OFF FAILED!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//-- Change the text on the button
|
||||||
|
StartStop_Button.Text = "Start";
|
||||||
|
}
|
||||||
|
|
||||||
|
state = SystemState.Armed;
|
||||||
|
StartStop_Button.Text = "Start";
|
||||||
|
|
||||||
|
COLLECTING = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update_Button_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult result;
|
||||||
|
string response = "";
|
||||||
|
|
||||||
|
if (state != SystemState.Collecting)
|
||||||
|
{
|
||||||
|
//-- Disable the FSWX Channel 1 Stream
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP1:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
//-- Disable the FSWX Channel 2 Stream
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP2:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
state = SystemState.Disarmed;
|
||||||
|
StartStop_Button.Text = "Arm";
|
||||||
|
|
||||||
|
// if (COLLECTING == false)
|
||||||
|
// {
|
||||||
|
Update_Button.Text = "Updating";
|
||||||
|
Update_Button.Enabled = false;
|
||||||
|
|
||||||
|
if (ValidateFloat(Channel1_CF.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 1 Center Frequency is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float.TryParse(Channel1_CF.Text, out CF1);
|
||||||
|
if (Channel1_CF_Multiplier.Text == "GHz")
|
||||||
|
CF1 *= 1000000000;
|
||||||
|
else
|
||||||
|
CF1 *= 1000000;
|
||||||
|
|
||||||
|
FSWXSA.setCF (1, CF1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateFloat(Channel2_CF.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 2 Center Frequency is invalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float.TryParse(Channel2_CF.Text, out CF2);
|
||||||
|
if (Channel2_CF_Multiplier.Text == "GHz")
|
||||||
|
CF2 *= 1000000000;
|
||||||
|
else
|
||||||
|
CF2 *= 1000000;
|
||||||
|
|
||||||
|
FSWXSA.setCF(2, CF2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateInt(Channel1_RefLevel.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 1 Ref Level is invlalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int.TryParse (Channel1_RefLevel.Text, out RefLevel1);
|
||||||
|
FSWXSA.setRefLevel (1, RefLevel1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ValidateInt(Channel2_RefLevel.Text) == false)
|
||||||
|
{
|
||||||
|
result = MessageBox.Show("Channel 2 Ref Level is invlalid", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int.TryParse(Channel2_RefLevel.Text, out RefLevel2);
|
||||||
|
FSWXSA.setRefLevel(2, RefLevel2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Channel1_BW.Text == "<=2GHz")
|
||||||
|
FSWXSA.setIQBW (1, 2000000000);
|
||||||
|
else
|
||||||
|
FSWXSA.setIQBW(1, 4000000000);
|
||||||
|
|
||||||
|
if (Channel2_BW.Text == "<=2GHz")
|
||||||
|
FSWXSA.setIQBW(2, 2000000000);
|
||||||
|
else
|
||||||
|
FSWXSA.setIQBW(2, 4000000000);
|
||||||
|
|
||||||
|
#if false
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut1:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut1:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response[0] == '1'))
|
||||||
|
{
|
||||||
|
Channel1_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Channel1_Enable.CheckState = CheckState.Unchecked;
|
||||||
|
Channel1_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut2:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut2:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response[0] == '1'))
|
||||||
|
{
|
||||||
|
Channel2_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Channel2_Enable.CheckState = CheckState.Unchecked;
|
||||||
|
Channel2_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand ("SENSe:ADJust:PTIMe\n");
|
||||||
|
FSWXSA.SendSCPIcommand ("INIT:IMM\n");
|
||||||
|
|
||||||
|
//FSWXSA.setSingleSweep();
|
||||||
|
|
||||||
|
Update_Button.Text = "Update FSWX";
|
||||||
|
Update_Button.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void Connect_Button_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult result;
|
||||||
|
Int32 VALUE;
|
||||||
|
int FSWXPort;
|
||||||
|
int HypervaultPort;
|
||||||
|
string response = "";
|
||||||
|
|
||||||
|
if (!CheckIPValid (FSWX_IP.Text))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("Invalid FSWX IP Address!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ValidateInt (FSWX_Port.Text))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("Invalid FSWX Port!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Int32.TryParse (FSWX_Port.Text, out FSWXPort);
|
||||||
|
|
||||||
|
if (!CheckIPValid (HYPERVAULT_IP.Text))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("Invalid Hypervault IP Address!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ValidateInt (HYPERVAULT_Port.Text))
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("Invalid Hypervault Port!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Int32.TryParse (HYPERVAULT_Port.Text, out HypervaultPort);
|
||||||
|
|
||||||
|
Connect_Button.Text = "Connecting";
|
||||||
|
this.Refresh ();
|
||||||
|
|
||||||
|
Hypervault = new Hypervault_System (HYPERVAULT_IP.Text, HypervaultPort);
|
||||||
|
if (Hypervault.Connect())
|
||||||
|
{
|
||||||
|
Hypervault_Connected = true;
|
||||||
|
StartStop_Button.Enabled = true;
|
||||||
|
|
||||||
|
Hypervault.SendSCPIcommand("*IDN?\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartStop_Button.Enabled = false;
|
||||||
|
Connect_Button.Text = "Connect";
|
||||||
|
|
||||||
|
result = MessageBox.Show("Failed to connect to Hypervault!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FSWXSA = new FSWX_SA (FSWX_IP.Text, FSWXPort);
|
||||||
|
if (FSWXSA.Connect ())
|
||||||
|
{
|
||||||
|
FSWXSA.SendSCPIcommand("*IDN?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("*IDN? returned: {0}\n", response));
|
||||||
|
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut1:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut1:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response [0] == '1'))
|
||||||
|
{
|
||||||
|
//Channel1_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("FSWX Digital IO 1 Cable Not Conneced!", "WARNING!", MessageBoxButtons.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTPut2:IQHS:CQSFp?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTPut2:IQHS:CQSFp? returned: {0}\n", response));
|
||||||
|
|
||||||
|
if ((response.Length > 0) && (response[0] == '1'))
|
||||||
|
{
|
||||||
|
//Channel2_Enable.Enabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = MessageBox.Show ("FSWX Digital IO 2 Cable Not Conneced!", "WARNING!", MessageBoxButtons.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if false
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP:IQHS:SELFtest?\n", out response);
|
||||||
|
Console.WriteLine(string.Format("OUTP:IQHS:SELFtest? returned: {0}\n", response));
|
||||||
|
#endif
|
||||||
|
//-- Get values from current active tab on FSWX
|
||||||
|
FSWXSA.SendSCPIcommand(":INP1:RF:STAT?\n", out response);
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if (VALUE == 1)
|
||||||
|
{
|
||||||
|
CF1 = (float)FSWXSA.getCF(1);
|
||||||
|
RefLevel1 = FSWXSA.getRefLevel(1);
|
||||||
|
CLOCK1 = 4000000000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CF1 = 8000000000;
|
||||||
|
RefLevel1 = 0;
|
||||||
|
CLOCK1 = 4000000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CF1 = 8000000000;
|
||||||
|
RefLevel1 = 0;
|
||||||
|
CLOCK1 = 4000000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand(":INP2:RF:STAT?\n", out response);
|
||||||
|
if (Int32.TryParse(response, out VALUE))
|
||||||
|
{
|
||||||
|
if (VALUE == 1)
|
||||||
|
{
|
||||||
|
CF2 = (float)FSWXSA.getCF(2);
|
||||||
|
RefLevel2 = FSWXSA.getRefLevel(2);
|
||||||
|
CLOCK2 = 4000000000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CF2 = 8000000000;
|
||||||
|
RefLevel2 = 0;
|
||||||
|
CLOCK2 = 4000000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CF2 = 8000000000;
|
||||||
|
RefLevel2 = 0;
|
||||||
|
CLOCK2 = 4000000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand(":INST:CRE:NEW IQSA, 'I/Q Spectrum Analyzer'\n");
|
||||||
|
FSWXSA.SendSCPIcommand(":SYST:PRES:CHAN:EXEC\n");
|
||||||
|
FSWXSA.SendSCPIcommand(":INIT:CONT OFF\n");
|
||||||
|
FSWXSA.SendSCPIcommand(":INP1:RF:STAT ON\n");
|
||||||
|
FSWXSA.SendSCPIcommand(":INP2:RF:STAT ON\n");
|
||||||
|
//FSWXSA.SendSCPIcommand (":SENS1:IQ:MODE:AUTO OFF\n"); //-- Commented out 7/15/26
|
||||||
|
//FSWXSA.SendSCPIcommand (":SENS2:IQ:MODE:AUTO OFF\n");
|
||||||
|
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP1:IQHS:STATe OFF\n"); //-- Commented out 7/15/26 moved below
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP2:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
FSWXSA.setCF(1, CF1);
|
||||||
|
FSWXSA.setCF(2, CF2);
|
||||||
|
|
||||||
|
FSWXSA.setIQBW(1, CLOCK1);
|
||||||
|
FSWXSA.setIQBW(2, CLOCK2);
|
||||||
|
|
||||||
|
FSWXSA.setRefLevel(1, RefLevel1);
|
||||||
|
FSWXSA.setRefLevel(2, RefLevel2);
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("SENSe:ADJust:PTIMe\n"); //-- Added 7/15/26
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand(":INIT:IMM\n"); //-- Run a single measurement to appply settings added 7/15/26
|
||||||
|
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP1:IQHS:FEC OFF\n"); //-- Commented out 7/15/26 //-- Disable RS(528,518) KR4 FEC for all 100GbE streams
|
||||||
|
//FSWXSA.SendSCPIcommand ("OUTP2:IQHS:FEC OFF\n");
|
||||||
|
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP1:IQHS:STATe OFF\n"); //-- Moved here from above 7/15/26
|
||||||
|
FSWXSA.SendSCPIcommand("OUTP2:IQHS:STATe OFF\n");
|
||||||
|
|
||||||
|
Thread.Sleep(3000); //-- Wait 3 seconds Added 7/15/26
|
||||||
|
|
||||||
|
CF1 = (float)FSWXSA.getCF(1);
|
||||||
|
CF2 = (float)FSWXSA.getCF(2);
|
||||||
|
|
||||||
|
CF1 = CF1 / 1000000;
|
||||||
|
if (CF1 > 1000)
|
||||||
|
{
|
||||||
|
Channel1_CF.Text = string.Format("{0}", (int)(CF1 / 1000));
|
||||||
|
Channel1_CF_Multiplier.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
CF2 = CF2 / 1000000;
|
||||||
|
if (CF2 > 1000)
|
||||||
|
{
|
||||||
|
Channel2_CF.Text = string.Format("{0}", (int)(CF2 / 1000));
|
||||||
|
Channel2_CF_Multiplier.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RefLevel1 = FSWXSA.getRefLevel(1);
|
||||||
|
RefLevel2 = FSWXSA.getRefLevel(2);
|
||||||
|
Channel1_RefLevel.Text = string.Format("{0}", RefLevel1);
|
||||||
|
Channel2_RefLevel.Text = string.Format("{0}", RefLevel2);
|
||||||
|
|
||||||
|
CLOCK1 = (long)FSWXSA.getIQBW(1);
|
||||||
|
CLOCK2 = (long)FSWXSA.getIQBW(2);
|
||||||
|
|
||||||
|
if (CLOCK1 > 2000000000)
|
||||||
|
Channel1_BW.SelectedIndex = 1;
|
||||||
|
else
|
||||||
|
Channel1_BW.SelectedIndex = 0;
|
||||||
|
|
||||||
|
if (CLOCK2 > 2000000000)
|
||||||
|
Channel2_BW.SelectedIndex = 1;
|
||||||
|
else
|
||||||
|
Channel2_BW.SelectedIndex = 0;
|
||||||
|
|
||||||
|
FSWX_Connected = true;
|
||||||
|
Update_Button.Enabled = true;
|
||||||
|
|
||||||
|
Connect_Button.Text = "Connected";
|
||||||
|
Connect_Button.Enabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Update_Button.Enabled = false;
|
||||||
|
Connect_Button.Text = "Connect";
|
||||||
|
|
||||||
|
result = MessageBox.Show ("Failed to connect to FSWX!", "Error!", MessageBoxButtons.OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Hypervault_Connected) && (FSWX_Connected))
|
||||||
|
{
|
||||||
|
FSWX_IP.Enabled = false;
|
||||||
|
FSWX_Port.Enabled = false;
|
||||||
|
|
||||||
|
HYPERVAULT_IP.Enabled = false;
|
||||||
|
HYPERVAULT_Port.Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FSWX_IP_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (CheckIPValid (FSWX_IP.Text))
|
||||||
|
{
|
||||||
|
settings.FSWXIpAddress = FSWX_IP.Text;
|
||||||
|
SettingsManager.Save (settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FSWX_Port_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UInt16 VAL;
|
||||||
|
|
||||||
|
if (UInt16.TryParse(FSWX_Port.Text, out VAL))
|
||||||
|
{
|
||||||
|
settings.FSWXPort = FSWX_Port.Text;
|
||||||
|
SettingsManager.Save (settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HYPERVAULT_IP_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (CheckIPValid(HYPERVAULT_IP.Text))
|
||||||
|
{
|
||||||
|
settings.HypervaultIpAddress = HYPERVAULT_IP.Text;
|
||||||
|
SettingsManager.Save (settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HYPERVAULT_Port_TextChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
UInt16 VAL;
|
||||||
|
|
||||||
|
if (UInt16.TryParse (HYPERVAULT_Port.Text, out VAL))
|
||||||
|
{
|
||||||
|
settings.HypervaultPort = HYPERVAULT_Port.Text;
|
||||||
|
SettingsManager.Save (settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{F9F3360E-0E4D-49B5-A8C5-CDAA7CD37D8D}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>Hypervault_Control</RootNamespace>
|
||||||
|
<AssemblyName>Hypervault_Control</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="App_Settings.cs" />
|
||||||
|
<Compile Include="FSWX_SA.cs" />
|
||||||
|
<Compile Include="Hypervault.cs" />
|
||||||
|
<Compile Include="Hypervault_Control.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Hypervault_Control.Designer.cs">
|
||||||
|
<DependentUpon>Hypervault_Control.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<EmbeddedResource Include="Hypervault_Control.resx">
|
||||||
|
<DependentUpon>Hypervault_Control.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAACMuAAAjLgAAAAAAAAAA
|
||||||
|
AAAXCgn/FwoJ/xcKCf8XCgn/FwoI/xgJCf8ZCQn/GQkJ/xkJCv8YCQn/FwkK/xcKCf8YCQn/GAoJ/xgJ
|
||||||
|
Cf8YCQn/GQgK/xgJCf8WCQn/FQgK/xgJCf8YCQn/GAkJ/xkKCf8YCQn/FwkI/xcKCf8XCgn/FwoJ/xwQ
|
||||||
|
D/8fFBP/GxAP/xcKCf8XCgn/FwoJ/xcKCf8YCQn/GAgI/xgICP8YCAn/GAgK/xcICf8WCAj/FwkJ/xgI
|
||||||
|
Cf8ZCQj/GAcJ/xgICf8YCAr/GAkI/xgJCP8YCAj/FwgJ/xYICf8XCAn/FwgI/xgICP8YCAj/GAkJ/xcK
|
||||||
|
Cf8XCgn/Gg0M/xoODf8YDAv/FwoJ/xcKCf8WCQj/FwkJ/xgICf85LCr/IBMR/xcICP8XCAn/Gw8N/yof
|
||||||
|
Hf8WBwj/GQsK/xwPDf8gExH/KRwa/0U7Nv8WCQj/FwgL/xYGB/8XCAn/GgoL/xgICf8ZCgv/Gg0L/x0P
|
||||||
|
Df8YCQn/GAkJ/xgJCf8XCQj/FwkJ/xcKCf8XCgn/FwoJ/xcKCf8XCgn/FwgJ/11VTv9KQz3/NSoo/0Q4
|
||||||
|
Nf80LCj/ZV9Z/yQZF/9lX1b/XFVP/2RfVP9jXlT/SUI8/2ZgVv9QSUH/SkI7/1RNRv9mX1f/VE1G/2Vd
|
||||||
|
Vv9TTEb/VExH/x0QD/8YBwr/GQkJ/xkJCP8YCQn/FwoJ/xcKCf8XCgn/GAkI/xgICP8WCAj/amNZ/4eD
|
||||||
|
d/9aU0v/g31z/1VPSP+LiHn/dG9l/46Kff9fW1L/e3lr/316bf9cVk7/fXlu/3FtYv+Sj4L/bmpg/1hS
|
||||||
|
Sv9saGD/cW5l/y8nIv9xamH/KBwb/xgICv8ZCAr/GQgK/xkJCf8YCQn/FgkI/xcJCP8YCAj/GQkJ/xgI
|
||||||
|
Cv9CODP/UUpC/2FZU/9FPDf/cWxi/2dhV/9YT0r/WlFM/09IP/9YUEr/X1dQ/0lAO/8wJiP/Qjk1/1ZN
|
||||||
|
R/8/NTH/PjQx/z81Mv9DOTb/Qjc0/2phWf86Liv/GAgH/yQWDf8kFw7/FwgJ/xYJB/8WCQj/GAkJ/xkJ
|
||||||
|
Cf8ZCAj/GQgJ/xYIB/8sIB7/MCQk/xMEBv84LSj/KBwb/xQGB/8WCAj/GAgJ/xoICP8rHRL/LB4S/xsI
|
||||||
|
Cv8YCAj/FggG/xkLCv8ZCgr/FgYI/xcGCP8XBwj/FggH/xcIB/8YBwn/HQwL/x0OC/8YCAr/FgoG/xcI
|
||||||
|
CP8YCQj/GQkJ/xoKCf8ZCQn/GAgK/xcICP8ZCAr/GwsL/xgJCf8YCgj/GgoK/xsKCv8nFg//OioY/09A
|
||||||
|
Jv9QQSb/OysY/ycXD/8bCgv/GwoK/xoKCv8aCQr/GgkL/xgICf8YCAn/FwcJ/xcHCf8YCAr/GQkK/xkJ
|
||||||
|
Cf8YCQj/GQkJ/xoKCf8aCgn/GQkK/xsKC/8ZCgv/GgsJ/xwMC/8eDQz/HgwM/x0MCf8jEgz/NyUW/0Ix
|
||||||
|
HP9DMh7/Py0b/z8uG/9ENB//QjIe/zcmGf8jEgz/HQsJ/x0MC/8dDQz/GgsK/xoJC/8fDgz/JhUM/ykY
|
||||||
|
C/8aCgn/GQkI/xkKCf8ZCQn/GgoK/xoKCv8ZCQn/GQoK/yIQDf8jEAz/IBAM/x8MDP8mFA//NCMW/0Ex
|
||||||
|
Hf9DNBz/SDcg/1hKKv9LOiL/Szwi/1lNLP9HNyL/RDUc/0IzHP81JRX/JxYO/yAPDP8fDQr/HQwM/yoY
|
||||||
|
Df9VRhn/dmwm/yUTCv8YCQn/GAoJ/xkJCf8aCgr/GgoK/xkJCf8aCgr/LBsQ/yYSDf8gDQr/Lx0R/0Ez
|
||||||
|
Gv9FNh3/RjUg/049JP9WRCX/XEsk/007IP9MPSD/XE8k/1RFJP9MPST/RzYg/0c4Hv9FNxz/MR8S/yIO
|
||||||
|
C/8dDAv/HQsK/zMgD/9CMhP/Hg4L/xgKCf8YCQj/GQoJ/xoKCv8aCgv/HAwL/x0NC/8eDQv/Hw0J/zgn
|
||||||
|
Fv9LOyD/QC4Y/1ZHKv9URSf/UUAf/1dEIP9gUCf/Tz4g/1FCIv9jVSz/VkUj/1JFH/9VSCb/Vkgn/0Qz
|
||||||
|
GP9PPx//PCkX/yENC/8dDAz/GgkL/xoICv8ZCgr/GQoK/xgJCv8aCgn/Hg8N/x4ODf8dDQ3/HQwL/yEN
|
||||||
|
Df8mEgz/QjAY/04/Iv9PPiL/Sjkd/09AIf9WRiX/PCoW/0Q0Hv9OPiH/UD8i/0k5If8/LBn/X1Al/1tL
|
||||||
|
If9RPh3/UUIj/1NEIv9GMxr/MiAR/ygVEP8cCwv/HQ4L/xwNCv8eDw3/GQoI/xoKCf8dDQz/HQ0L/x8O
|
||||||
|
Df8jEQ3/LRwO/zAcD/9INRn/SDgf/1VHJf9kVyf/WEgj/z0oGP84JBX/RjYf/0Y3Hv9KOSD/TDoi/zkq
|
||||||
|
Ff9GMhr/Z1Yo/2xeKv9XSyT/TD0e/0o3HP81JBD/Lx4P/yQTDv8gEA3/HQwL/xwMDP8ZCgn/GwoK/xwL
|
||||||
|
C/8eDgv/IBAL/ygXD/83JRT/NSEQ/007G/9JOh//UkMh/2NUJf9XRCH/QzEa/0YzHP84Ihf/NCET/zck
|
||||||
|
E/9BLBv/Xksi/1M9G/9jUSL/aVok/1VFI/9RQSH/Uj8d/zkmE/85KRX/KRgQ/yMRDf8fDQ3/HAsM/xsJ
|
||||||
|
C/8bCwr/Hg4M/yISDf8mFQ7/KRcO/y0YDf82JBH/SzwZ/0s9Hf9VRSP/WUog/0MuFv9HNBz/NSET/zYj
|
||||||
|
Fv8/LB3/RDAc/0kzGv9KNBj/Uj8c/1tHHf9mViL/Wksi/1dGIP9UQhz/OSgT/ysZD/8nGA7/KxoR/yQS
|
||||||
|
D/8eDQ3/HAsL/xwKCv8dDQz/IA8N/ywaEP8/LxP/SzkX/0MyFf9KOhj/TT0f/2JUJv9gUCD/PicT/1E9
|
||||||
|
HP9ALRf/OygU/3VmOP9+bjf/W0UZ/1tHIP9jUCD/Y08g/3JjJ/9qXSX/XUsi/1NCHP9BMBX/NyMS/ykX
|
||||||
|
Dv8vHRH/Iw8N/x0NC/8dDQv/HAoM/x4OC/8jEg3/NSYU/0ExFf9dTh7/STkW/048Gf9RQSD/Wkwj/19Q
|
||||||
|
IP9EMBf/UUAj/0QxG/9LNRX/dmAk/5B/KP99aSL/YU0h/21bJ/9vXyX/c2Ml/2ZWI/9lVCL/WEgc/0U0
|
||||||
|
FP9GNBn/NSYR/zUnFP8kEg3/Hw4L/xwLC/8bCgz/HgwM/yMSDf8nExD/MBwQ/0EtFP87KRH/UD8c/1VF
|
||||||
|
IP9WRiL/X04i/1tLJf9TQR//W0oe/25cIf93YiD/npAy/4l3Lv9jUSD/YlEj/2pZJf9vYSX/YFEi/2xe
|
||||||
|
I/9cTB3/STcV/0g1Fv8yHhL/JRMP/yQSDf8gDgz/HgwL/xsKDP8eDAz/IxAO/ycTEP88LBb/QzAU/zwp
|
||||||
|
Ev9UQhv/Xk0k/2FUKf9eTiD/Xkwd/3JjI/+IeSj/d2Mf/2dTG/+IeCP/h3cj/4d5Kf98ayX/dWMj/3Zl
|
||||||
|
Jf90ZSj/fW8m/2NTHf9HNBT/RjMU/z4uFv8mFQ7/JRIN/yEODP8eCwv/GwoL/x0LC/8fDgv/IQ8L/yoZ
|
||||||
|
Df8yIBH/OCYQ/1ZEHP9bSR7/X00g/2xbIv+AcCf/iXkt/3FgJv9rWCP/eGYg/6idMP/AvUD/l4wv/46B
|
||||||
|
Lv+MfSn/iHgm/4l7JP+Uhyb/cmQf/1lJGv87KRD/RjUV/ykYDf8gDgr/HwwK/xwKCv8bCwr/HAwL/x8N
|
||||||
|
C/8iDw3/JREM/ywYD/8yHw7/X1Eh/4ByK/94aCP/gHAv/3VoKv9tXyX/cWMl/3NjJv+Bcyb/npUw/5yR
|
||||||
|
Mv+JeSv/fm4o/39yKv+PhC3/pJwq/8C9Ov+Feyv/a18g/zMiD/84JRH/JhQL/x8NCv8eDAn/GwoK/xwK
|
||||||
|
C/8dCwv/IA0L/yANC/8hDwr/LxwP/zIfEf9INxj/dGUm/3dmJP93Zyf/ZVYl/2BRIf9yZiX/fXEl/5OJ
|
||||||
|
Lf+lmzH/jH8q/3puJf9qWiH/c2Yk/5aLK/+knSv/k40s/1dIHP8vHQ3/Mh8Q/y4dDf8fDgn/IA4K/x4M
|
||||||
|
Cv8cCwv/LRsO/ycUDv8hDwr/IA0L/yAPC/8nFAz/LBoO/zUiEv9CLxT/WEYc/3BhJP95bCn/dGgm/29g
|
||||||
|
J/99bij/mIwr/6CWLP9/cSj/dGUl/4p8Kf+XjSr/iHwo/2ZXHf9HNBT/OicT/zAdDv88KxP/OSgR/x8N
|
||||||
|
Cv8hDwv/HwwK/xwLC/8qGQ7/JRMP/yEOCv8lEgz/IhAL/y4cEP8yIRD/MB0Q/zknE/9BLhP/RjMT/1pL
|
||||||
|
HP94aif/hHUp/41/LP+bkSr/oJcq/5SHKv+RhSn/h3sm/2RVGv9JNxT/RjUW/0AuFf8zIhD/NyYR/zAe
|
||||||
|
D/8iDwz/HwwL/yAODP8fDAv/Hw0M/xwKCv8cCwv/IA4N/yANC/8fDQn/JhQM/ykXDv8tGw//MR8P/zUl
|
||||||
|
E/84JhL/PysQ/0w4Ff9cShz/fm8n/6ObLv+ooi//hHgj/19NG/9OOxX/QiwT/z0oFP87KhP/NCMR/y4d
|
||||||
|
EP8sGQ7/JxQO/x8NC/8fDQr/IA4M/xwLCv8bCwr/HAoL/xwMCv8eDQz/IhAN/yQRDf8gDQz/JRQN/ykX
|
||||||
|
Dv8rGBD/LBsQ/zAeEP88KBH/RjAW/0k2Fv9MOBT/aVof/2pbH/9LNxT/RzQW/0g0Ff9FMhX/MyAR/y4c
|
||||||
|
D/8qGBD/KBgP/ycXDf8iDw3/JBMN/yMSDP8fDQv/HQsL/xsKCv8cCwr/HAsK/xwKC/8jEA3/JRMO/yIS
|
||||||
|
DP8jEg3/IhEL/yQSDf8xHxL/NSMR/zIfD/9ALhf/RzQZ/1A9Gf9QPRX/TToT/0gyFP9ELxX/OykT/zIh
|
||||||
|
D/8qGA3/KBUP/yUSDP8jEQv/JBIM/yQSDf8mEw//IxIN/xwLCv8bCgr/GwsJ/xoLCf8bDAr/HQwL/yAN
|
||||||
|
DP8hDwz/IA4L/yAODP8hDwz/IhAN/yoYEP8uHBD/LBkO/zknFP8wIBD/OygR/3BhIP9sXh7/OycQ/zQg
|
||||||
|
D/8yIBL/KxoN/ycWDf8nEw7/IxAL/yAOCv8gDQv/Ig8N/yEPDf8fDQ3/HAwL/xsKCv8aCQn/GQoJ/xwM
|
||||||
|
DP8dDAz/HgwM/x0MC/8dCwv/HgwL/x8NDP8gDQ3/IQ8L/yUTDf8oFw3/JRMN/ycVDv8sGgz/QTAU/z0t
|
||||||
|
E/8oFg3/JhYN/0EsEv9JNRP/KBUO/yAPDf8gDQz/Hw0N/x8NDP8oFxD/IA0M/x0LDP8bCgr/GgkJ/xoK
|
||||||
|
Cv8aCgr/GwsL/xoKCv8bCgr/HAsL/xwLC/8cCwv/HAsL/yEQDP8iEQ7/IA4L/yEODf8iEQ3/JRIO/ygW
|
||||||
|
D/8mFg3/JxQO/yQTDP8lEwv/W00d/19QHv8iDwv/Hw8M/yAODP8cCwv/HAsL/yAQCv8dCwv/GgoL/xoK
|
||||||
|
Cv8aCgr/GgoK/xoKCv8aCgr/GgoK/xkJCf8aCgr/GwoK/xwLC/8dDAz/Hg8M/x8ODf8eDAz/IA0L/yEO
|
||||||
|
C/8iDwv/JRQO/yQSDP8iEQv/IBAL/yMQC/8oFgz/KhYM/x8PC/8dDAv/HQoM/x0MC/8cCwv/GwoM/xoK
|
||||||
|
Cv8aCgr/GgoK/xoKCv8aCgr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Hypervault_Control
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new Hypervault_Control());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("Hypervault_Control")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Hypervault_Control")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2025")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("f9f3360e-0e4d-49b5-a8c5-cdaa7cd37d8d")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
+71
@@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Hypervault_Control.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Hypervault_Control.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Hypervault_Control.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
||||||
Binary file not shown.
Reference in new issue
Block a user