V4.5
This commit is contained in:
@@ -4,7 +4,7 @@ namespace AiQ_GUI
|
||||
internal class CameraModules
|
||||
{
|
||||
// Chack camera modules are in default state according to what the diagnostics API.
|
||||
public static void CheckCamModule(Module CamMod, Label Lbl)
|
||||
public static void CheckCamModule(Module CamMod, Label Lbl, Camera CamOnTest)
|
||||
{
|
||||
if (CamMod == null || Lbl == null)
|
||||
{
|
||||
@@ -17,7 +17,21 @@ namespace AiQ_GUI
|
||||
if (CamMod.zoom != 0) // Check camera module is at full wide
|
||||
errMssg += $"Zoom not at 0 - {CamMod.zoom} ";
|
||||
|
||||
if (CamMod.firmwareVer != UniversalData.WonwooFirmware) // Check camera module firmware version is up to date.
|
||||
bool LessTanOrEqualTo = false;
|
||||
|
||||
try
|
||||
{
|
||||
LessTanOrEqualTo = Convert.ToDouble(CamMod.firmwareVer) <= Convert.ToDouble(UniversalData.WonwooFirmware);
|
||||
}
|
||||
catch
|
||||
{
|
||||
MainForm.Instance.AddToActionsList($"{CamMod.firmwareVer} or {UniversalData.WonwooFirmware} could not be converted to a double");
|
||||
}
|
||||
|
||||
if (CamOnTest.RMANum > 0 && LessTanOrEqualTo)
|
||||
errMssg += $"Firmware: {CamMod.firmwareVer} should be less than or equal to {UniversalData.WonwooFirmware} for RMA {CamOnTest.RMANum}";
|
||||
|
||||
else if ((CamOnTest.RMANum == 0 || CamOnTest.RMANum == -1) && CamMod.firmwareVer != UniversalData.WonwooFirmware)
|
||||
errMssg += $"Firmware: {CamMod.firmwareVer} should be {UniversalData.WonwooFirmware} ";
|
||||
|
||||
if (CamMod.expMode != 0) // Auto 0=0x00
|
||||
|
||||
@@ -378,7 +378,7 @@ namespace AiQ_GUI
|
||||
|
||||
using OpenFileDialog openFileDialog1 = new()
|
||||
{
|
||||
InitialDirectory = MainForm.GoogleDrivePath,
|
||||
InitialDirectory = GoogleAPI.GoogleDrivePath,
|
||||
Filter = "CSV files (*.csv)|*.csv",
|
||||
FilterIndex = 0
|
||||
};
|
||||
@@ -387,7 +387,7 @@ namespace AiQ_GUI
|
||||
fileToUpload = openFileDialog1.FileName;
|
||||
else
|
||||
{
|
||||
MainForm.Instance.AddToActionsList("File selection cancelled.", false);
|
||||
MainForm.Instance.AddToActionsList("File selection cancelled.", Level.WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -396,7 +396,7 @@ namespace AiQ_GUI
|
||||
|
||||
if ((isIR && !filename.Contains("IR")) || (!isIR && !filename.Contains("OV")))
|
||||
{
|
||||
MainForm.Instance.AddToActionsList($"Incorrect file selected. Expected {(isIR ? "IR" : "OV")} file", false);
|
||||
MainForm.Instance.AddToActionsList($"Incorrect file selected. Expected {(isIR ? "IR" : "OV")} file", Level.WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -408,7 +408,7 @@ namespace AiQ_GUI
|
||||
|
||||
if (parts.Length < 3)
|
||||
{
|
||||
MainForm.Instance.AddToActionsList($"Invalid row format at line {i + 1}", false);
|
||||
MainForm.Instance.AddToActionsList($"Invalid row format at line {i + 1}", Level.WARNING);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -419,21 +419,78 @@ namespace AiQ_GUI
|
||||
// VISCA format check
|
||||
if (!RegexCache.VISCAAPIRegex().IsMatch(command))
|
||||
{
|
||||
MainForm.Instance.AddToActionsList($"{name}: Invalid VISCA command ({command})", false);
|
||||
MainForm.Instance.AddToActionsList($"{name}: Invalid VISCA command ({command})", Level.WARNING);
|
||||
continue; // do not send it if bad
|
||||
}
|
||||
|
||||
string result = await APIHTTPVISCA(ipAddress, command, isIR);
|
||||
|
||||
if (result.Contains(expectedResponse))
|
||||
MainForm.Instance.AddToActionsList($"{name}: Success ({(isIR ? "IR" : "Colour")})", true);
|
||||
MainForm.Instance.AddToActionsList($"{name}: Success ({(isIR ? "IR" : "Colour")})", Level.LOG);
|
||||
else
|
||||
MainForm.Instance.AddToActionsList($"{name}: Unexpected response ({result})", false);
|
||||
MainForm.Instance.AddToActionsList($"{name}: Unexpected response ({result})", Level.ERROR);
|
||||
|
||||
await Task.Delay(150);
|
||||
}
|
||||
|
||||
MainForm.Instance.AddToActionsList($"Upload complete ({(isIR ? "IR" : "Colour")}).", true);
|
||||
MainForm.Instance.AddToActionsList($"Upload complete ({(isIR ? "IR" : "Colour")}).", Level.LOG);
|
||||
}
|
||||
|
||||
public static async void UploadBlob(List<Camera> soakCameraList)
|
||||
{
|
||||
const string networkFolderPath = @"G:\Shared drives\MAV Production\MAV_146_AiQ_Mk2\Flexi";
|
||||
string fileToUpload = null;
|
||||
|
||||
if (await MainForm.Instance.DisplayQuestion("Do you want the latest Flexi version from the MAV Production folder?"))
|
||||
{
|
||||
fileToUpload = Directory.GetFiles(networkFolderPath, "*.blob").OrderByDescending(File.GetLastWriteTime).FirstOrDefault();
|
||||
|
||||
if (fileToUpload == null)
|
||||
{
|
||||
MainForm.Instance.AddToActionsList("No .blob file found in the directory.", Level.ERROR);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using OpenFileDialog openFileDialog1 = new()
|
||||
{
|
||||
InitialDirectory = networkFolderPath,
|
||||
Filter = "Blob files (*.blob)|*.blob",
|
||||
FilterIndex = 0
|
||||
};
|
||||
|
||||
if (openFileDialog1.ShowDialog() == DialogResult.OK)
|
||||
fileToUpload = openFileDialog1.FileName;
|
||||
else
|
||||
{
|
||||
MainForm.Instance.AddToActionsList("File selection cancelled.", Level.WARNING);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
string fileName = Path.GetFileName(fileToUpload);
|
||||
MainForm.Instance.AddToActionsList($"Selected file to upload: {fileToUpload}", Level.LOG);
|
||||
|
||||
foreach (Camera? cam in soakCameraList.Where(c => c.IsChecked))
|
||||
{
|
||||
string apiUrl = $"http://{cam.IP}/upload/software-update/2";
|
||||
Network.Initialize("developer", cam.DevPass);
|
||||
await Task.Delay(1000); // Gives extra time to allow for Network to initialize
|
||||
MainForm.Instance.AddToActionsList($"Uploading to {cam.IP}...", Level.LOG);
|
||||
string result = await SendBlobFileUpload(apiUrl, fileToUpload, fileName);
|
||||
|
||||
// Retry once on transient errors
|
||||
if (result.Contains("Error while copying content to a stream") || result.Contains("Timeout"))
|
||||
{
|
||||
MainForm.Instance.AddToActionsList($"Retrying upload to {cam.IP}...", Level.WARNING);
|
||||
await Task.Delay(1000);
|
||||
result = await SendBlobFileUpload(apiUrl, fileToUpload, fileName);
|
||||
}
|
||||
|
||||
MainForm.Instance.AddToActionsList($"Upload result for {cam.IP}: {result}", Level.LOG);
|
||||
await Task.Delay(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -443,10 +500,8 @@ namespace AiQ_GUI
|
||||
public string version { get; set; } = string.Empty;
|
||||
public string revision { get; set; } = string.Empty;
|
||||
public string buildtime { get; set; } = string.Empty;
|
||||
public string appname { get; set; } = string.Empty;
|
||||
public string MAC { get; set; } = string.Empty;
|
||||
public int timeStamp { get; set; }
|
||||
public string UUID { get; set; } = string.Empty;
|
||||
public string proquint { get; set; } = string.Empty;
|
||||
|
||||
[JsonProperty("Serial No.")]
|
||||
@@ -510,13 +565,5 @@ namespace AiQ_GUI
|
||||
public class Property
|
||||
{
|
||||
public string Value { get; set; } = string.Empty;
|
||||
public string datatype { get; set; }
|
||||
}
|
||||
public class VaxtorConfig
|
||||
{
|
||||
public string id { get; set; }
|
||||
public long configHash { get; set; }
|
||||
public Property propMinCharHeight { get; set; }
|
||||
public Property propMinGlobalConfidence { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user