V4.3 changes and merge
This commit is contained in:
40
AiQ_GUI.Designer.cs
generated
40
AiQ_GUI.Designer.cs
generated
@@ -144,6 +144,8 @@ namespace AiQ_GUI
|
|||||||
BtnZoom8000 = new Button();
|
BtnZoom8000 = new Button();
|
||||||
BtnZoomWide = new Button();
|
BtnZoomWide = new Button();
|
||||||
TabSettings = new TabPage();
|
TabSettings = new TabPage();
|
||||||
|
UploadWonwooSetIR = new Button();
|
||||||
|
UploadWonwooSetOV = new Button();
|
||||||
BtnAdminStart = new Button();
|
BtnAdminStart = new Button();
|
||||||
BtnFirewall = new Button();
|
BtnFirewall = new Button();
|
||||||
TabImages = new TabPage();
|
TabImages = new TabPage();
|
||||||
@@ -1836,6 +1838,8 @@ namespace AiQ_GUI
|
|||||||
// TabSettings
|
// TabSettings
|
||||||
//
|
//
|
||||||
TabSettings.BackColor = Color.FromArgb(39, 37, 55);
|
TabSettings.BackColor = Color.FromArgb(39, 37, 55);
|
||||||
|
TabSettings.Controls.Add(UploadWonwooSetIR);
|
||||||
|
TabSettings.Controls.Add(UploadWonwooSetOV);
|
||||||
TabSettings.Controls.Add(BtnAdminStart);
|
TabSettings.Controls.Add(BtnAdminStart);
|
||||||
TabSettings.Controls.Add(BtnFirewall);
|
TabSettings.Controls.Add(BtnFirewall);
|
||||||
TabSettings.Controls.Add(PanelSettings);
|
TabSettings.Controls.Add(PanelSettings);
|
||||||
@@ -1846,6 +1850,40 @@ namespace AiQ_GUI
|
|||||||
TabSettings.TabIndex = 3;
|
TabSettings.TabIndex = 3;
|
||||||
TabSettings.Text = "Settings";
|
TabSettings.Text = "Settings";
|
||||||
//
|
//
|
||||||
|
// UploadWonwooSetIR
|
||||||
|
//
|
||||||
|
UploadWonwooSetIR.BackColor = Color.FromArgb(70, 65, 80);
|
||||||
|
UploadWonwooSetIR.FlatAppearance.BorderColor = Color.FromArgb(70, 65, 80);
|
||||||
|
UploadWonwooSetIR.FlatAppearance.BorderSize = 0;
|
||||||
|
UploadWonwooSetIR.FlatStyle = FlatStyle.Flat;
|
||||||
|
UploadWonwooSetIR.Font = new Font("Segoe UI Semibold", 10F, FontStyle.Bold);
|
||||||
|
UploadWonwooSetIR.ForeColor = SystemColors.Control;
|
||||||
|
UploadWonwooSetIR.Location = new Point(210, 304);
|
||||||
|
UploadWonwooSetIR.Margin = new Padding(4, 3, 4, 3);
|
||||||
|
UploadWonwooSetIR.Name = "UploadWonwooSetIR";
|
||||||
|
UploadWonwooSetIR.Size = new Size(180, 49);
|
||||||
|
UploadWonwooSetIR.TabIndex = 244;
|
||||||
|
UploadWonwooSetIR.Text = "Upload Wonwoo Settings IR";
|
||||||
|
UploadWonwooSetIR.UseVisualStyleBackColor = false;
|
||||||
|
UploadWonwooSetIR.Click += UploadWonwooSetIR_Click;
|
||||||
|
//
|
||||||
|
// UploadWonwooSetOV
|
||||||
|
//
|
||||||
|
UploadWonwooSetOV.BackColor = Color.FromArgb(70, 65, 80);
|
||||||
|
UploadWonwooSetOV.FlatAppearance.BorderColor = Color.FromArgb(70, 65, 80);
|
||||||
|
UploadWonwooSetOV.FlatAppearance.BorderSize = 0;
|
||||||
|
UploadWonwooSetOV.FlatStyle = FlatStyle.Flat;
|
||||||
|
UploadWonwooSetOV.Font = new Font("Segoe UI Semibold", 10F, FontStyle.Bold);
|
||||||
|
UploadWonwooSetOV.ForeColor = SystemColors.Control;
|
||||||
|
UploadWonwooSetOV.Location = new Point(19, 304);
|
||||||
|
UploadWonwooSetOV.Margin = new Padding(4, 3, 4, 3);
|
||||||
|
UploadWonwooSetOV.Name = "UploadWonwooSetOV";
|
||||||
|
UploadWonwooSetOV.Size = new Size(181, 49);
|
||||||
|
UploadWonwooSetOV.TabIndex = 243;
|
||||||
|
UploadWonwooSetOV.Text = "Upload Wonwoo Settings OV";
|
||||||
|
UploadWonwooSetOV.UseVisualStyleBackColor = false;
|
||||||
|
UploadWonwooSetOV.Click += UploadWonwooSetOV_Click;
|
||||||
|
//
|
||||||
// BtnAdminStart
|
// BtnAdminStart
|
||||||
//
|
//
|
||||||
BtnAdminStart.BackColor = Color.FromArgb(70, 65, 80);
|
BtnAdminStart.BackColor = Color.FromArgb(70, 65, 80);
|
||||||
@@ -2211,5 +2249,7 @@ namespace AiQ_GUI
|
|||||||
private Button BtnAdminStart;
|
private Button BtnAdminStart;
|
||||||
private Button SetGodModeAll;
|
private Button SetGodModeAll;
|
||||||
private Button BtnFactoryDefault;
|
private Button BtnFactoryDefault;
|
||||||
|
private Button UploadWonwooSetOV;
|
||||||
|
private Button UploadWonwooSetIR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
121
AiQ_GUI.cs
121
AiQ_GUI.cs
@@ -18,6 +18,8 @@ namespace AiQ_GUI
|
|||||||
private List<Camera> soakCameraList = [];
|
private List<Camera> soakCameraList = [];
|
||||||
private List<CancellationTokenSource> soakCtsList = [];
|
private List<CancellationTokenSource> soakCtsList = [];
|
||||||
private List<Task> soakTasks = [];
|
private List<Task> soakTasks = [];
|
||||||
|
|
||||||
|
const string GoogleDrivePath = @"G:\Shared drives\MAV Production GUI's\AiQ\GUI's\";
|
||||||
|
|
||||||
// Colours
|
// Colours
|
||||||
public static readonly Color BtnColour = Color.FromArgb(70, 65, 80);
|
public static readonly Color BtnColour = Color.FromArgb(70, 65, 80);
|
||||||
@@ -1599,7 +1601,7 @@ namespace AiQ_GUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CkBxTickAll_CheckedChanged(object sender, EventArgs e)
|
private void CkBxTickAll_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -1682,7 +1684,7 @@ namespace AiQ_GUI
|
|||||||
{
|
{
|
||||||
string apiUrl = $"http://{cam.IP}/upload/software-update/2";
|
string apiUrl = $"http://{cam.IP}/upload/software-update/2";
|
||||||
Network.Initialize("developer", cam.DevPass);
|
Network.Initialize("developer", cam.DevPass);
|
||||||
|
await Task.Delay(1000); // Gives extra time to allow for Network to initialize
|
||||||
AddToActionsList($"Uploading to {cam.IP}...", false);
|
AddToActionsList($"Uploading to {cam.IP}...", false);
|
||||||
string result = await FlexiAPI.SendBlobFileUpload(apiUrl, fileToUpload, fileName);
|
string result = await FlexiAPI.SendBlobFileUpload(apiUrl, fileToUpload, fileName);
|
||||||
|
|
||||||
@@ -1720,13 +1722,124 @@ namespace AiQ_GUI
|
|||||||
{
|
{
|
||||||
Stopwatch stopWatchTest = Stopwatch.StartNew();
|
Stopwatch stopWatchTest = Stopwatch.StartNew();
|
||||||
|
|
||||||
StatsExcel excelExporter = new();
|
//StatsExcel excelExporter = new();
|
||||||
excelExporter.ExportDatabaseToExcel();
|
//excelExporter.ExportDatabaseToExcel();
|
||||||
|
|
||||||
|
FakeCamera fakeCamera = new FakeCamera(80); // Create an instance of FakeCamera
|
||||||
|
//CamOnTest.IP = CbBxFoundCams.Text;
|
||||||
|
_ = fakeCamera.StartAsync(CAMTYPE.GOOD).ContinueWith(task =>
|
||||||
|
{
|
||||||
|
//Network.Initialize("developer", "Pass123");
|
||||||
|
if (task.IsFaulted)
|
||||||
|
{
|
||||||
|
AddToActionsList("Error starting FakeCamera: " + task.Exception?.Message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddToActionsList($"FakeCamera started successfully. IP: {fakeCamera}", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
await Task.Delay(3000); // Wait for server to start
|
||||||
|
CbBxFoundCams.Text = "localhost"; // Should force update in creds an network reinit
|
||||||
|
CmBoFoundCams_TextChanged(sender, e);
|
||||||
|
CbBxCameraType.SelectedIndex = CbBxCameraType.Items.Count - 1; // Selects AB12CD as model number
|
||||||
|
await Task.Delay(3000); // Wait for server to start
|
||||||
|
BtnStartTest_Click(sender, e);
|
||||||
|
|
||||||
// /api/config-ids - For getting all available config IDs
|
// /api/config-ids - For getting all available config IDs
|
||||||
|
|
||||||
stopWatchTest.Stop();
|
stopWatchTest.Stop();
|
||||||
AddToActionsList("RunTime " + stopWatchTest.Elapsed.ToString(@"hh\:mm\:ss\.ff"));
|
AddToActionsList("RunTime " + stopWatchTest.Elapsed.ToString(@"hh\:mm\:ss\.ff"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task UploadWonwooSet(string ipAddress, bool isIR)
|
||||||
|
{
|
||||||
|
string fileToUpload = null;
|
||||||
|
|
||||||
|
using OpenFileDialog openFileDialog1 = new()
|
||||||
|
{
|
||||||
|
InitialDirectory = GoogleDrivePath,
|
||||||
|
Filter = "CSV files (*.csv)|*.csv",
|
||||||
|
FilterIndex = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
if (openFileDialog1.ShowDialog() == DialogResult.OK)
|
||||||
|
fileToUpload = openFileDialog1.FileName;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddToActionsList("File selection cancelled.", false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Filename validation
|
||||||
|
string filename = Path.GetFileName(fileToUpload).ToUpper();
|
||||||
|
|
||||||
|
if (isIR)
|
||||||
|
{
|
||||||
|
if (!filename.Contains("IR") || filename.Contains("OV"))
|
||||||
|
{
|
||||||
|
AddToActionsList("Incorrect file selected. Expected IR file.", false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // OV
|
||||||
|
{
|
||||||
|
if (!filename.Contains("OV") || filename.Contains("IR"))
|
||||||
|
{
|
||||||
|
AddToActionsList("Incorrect file selected. Expected OV file.", false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var lines = File.ReadAllLines(fileToUpload);
|
||||||
|
|
||||||
|
for (int i = 1; i < lines.Length; i++)
|
||||||
|
{
|
||||||
|
var parts = lines[i].Split(',')
|
||||||
|
.Select(p => p.Trim())
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
if (parts.Length < 3)
|
||||||
|
{
|
||||||
|
AddToActionsList($"Invalid row format at line {i + 1}", false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string name = parts[0];
|
||||||
|
string command = parts[1];
|
||||||
|
string expectedResponse = parts[2];
|
||||||
|
|
||||||
|
// VISCA format check
|
||||||
|
if (!RegexCache.VISCAAPIRegex().IsMatch(command))
|
||||||
|
{
|
||||||
|
AddToActionsList($"{name}: Invalid VISCA command ({command})", false);
|
||||||
|
continue; // do not send it if bad
|
||||||
|
}
|
||||||
|
|
||||||
|
string result = await FlexiAPI.APIHTTPVISCA(ipAddress, command, isIR);
|
||||||
|
|
||||||
|
if (result.Contains(expectedResponse))
|
||||||
|
AddToActionsList($"{name}: Success ({(isIR ? "IR" : "Colour")})", true);
|
||||||
|
else
|
||||||
|
AddToActionsList($"{name}: Unexpected response ({result})", false);
|
||||||
|
|
||||||
|
await Task.Delay(150);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AddToActionsList($"Upload complete ({(isIR ? "IR" : "Colour")}).", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async void UploadWonwooSetOV_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
await UploadWonwooSet(CbBxFoundCams.Text, false); // false = Colour
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void UploadWonwooSetIR_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
await UploadWonwooSet(CbBxFoundCams.Text, true); // true = Infrared
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
|
|
||||||
namespace AiQ_GUI
|
namespace AiQ_GUI
|
||||||
{
|
{
|
||||||
@@ -38,6 +39,7 @@ namespace AiQ_GUI
|
|||||||
JSONdata = JSONdata.Replace("\"14\"", "14").Replace("\"30\"", "30"); // Fixes & encoding issue
|
JSONdata = JSONdata.Replace("\"14\"", "14").Replace("\"30\"", "30"); // Fixes & encoding issue
|
||||||
string url = $"http://{IPAddress}/api/update-config";
|
string url = $"http://{IPAddress}/api/update-config";
|
||||||
return await Network.SendHttpRequest(url, HttpMethod.Post, 2, JSONdata);
|
return await Network.SendHttpRequest(url, HttpMethod.Post, 2, JSONdata);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -353,12 +355,24 @@ namespace AiQ_GUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Change network settings to DHCP and restart camera for it to take effect
|
// Change network settings to DHCP and restart camera for it to take effect
|
||||||
public async static Task ChangeNetworkToDHCP(string IPAddress)
|
public async static Task<bool> ChangeNetworkToDHCP(string IPAddress)
|
||||||
{
|
{
|
||||||
string[,] TEST_JSON = { { "propDHCP", "true" } }; // Update GLOBAL--NetworkConfig with fixed IP and turn off DHCP
|
string[,] TEST_JSON = { { "propDHCP", "true" } };
|
||||||
await HTTP_Update("GLOBAL--NetworkConfig", IPAddress, TEST_JSON);
|
string result = await HTTP_Update("GLOBAL--NetworkConfig", IPAddress, TEST_JSON);
|
||||||
// TODO - Check if this worked, if not return false
|
|
||||||
|
await Task.Delay(5000); // Wait for 5 seconds to allow the camera to restart
|
||||||
|
IList<string> FoundCams = await Network.SearchForCams();
|
||||||
|
|
||||||
|
if (FoundCams.Contains("192.168.1.211"))
|
||||||
|
{
|
||||||
|
MainForm.Instance.AddToActionsList("Could not set camera to DHCP please check camera.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
MainForm.Instance.AddToActionsList("Camera successfully set to DHCP.");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Items recieved in Versions API
|
//Items recieved in Versions API
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"cameraName": "AiQ-ANPR-Camera",
|
"cameraName": "AiQ-ANPR-Camera",
|
||||||
"version": "1.6.4",
|
"version": "1.7.1",
|
||||||
"revision": "bf16134",
|
"revision": "4b63df5",
|
||||||
"serialNumber": "K1005001",
|
"serialNumber": "K1005001",
|
||||||
"modelNumber": "AB12CD",
|
"modelNumber": "AB12CD",
|
||||||
"MAC": "3C:6D:66:0A:BA:18",
|
"MAC": "3C:6D:66:0A:BA:18",
|
||||||
|
|||||||
@@ -31,9 +31,13 @@ namespace AiQ_GUI
|
|||||||
|
|
||||||
while (!UP)
|
while (!UP)
|
||||||
{
|
{
|
||||||
UP = await PingIP("8.8.8.8");
|
UP = await PingIP("10.10.10.137");
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
if (i >= 5) MainForm.Instance.AddToActionsList($"Could not initialise new network with USER: {username} & PSWD: {password}"); // Try 5 times max
|
if (i >= 5)
|
||||||
|
{
|
||||||
|
//MainForm.Instance.AddToActionsList($"Could not initialise new network with USER: {username} & PSWD: {password}");
|
||||||
|
return; // Try 5 times max
|
||||||
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user