diff --git a/GUIs/skyscraper8.AnagramViewer/Handlers/IQHandler.cs b/GUIs/skyscraper8.AnagramViewer/Handlers/IQHandler.cs
index e2fd58e..eda23f6 100644
--- a/GUIs/skyscraper8.AnagramViewer/Handlers/IQHandler.cs
+++ b/GUIs/skyscraper8.AnagramViewer/Handlers/IQHandler.cs
@@ -23,6 +23,7 @@ namespace skyscraper8.AnagramViewer.Handlers
public Image AsImage(Stream input)
{
IqChartData iqChartData = IqChartData.LoadFrom(input);
+ iqChartData.AutoScale();
Bitmap bitmap = new Bitmap(256, 256,PixelFormat.Format24bppRgb);
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
diff --git a/GUIs/skyscraper8.AnagramViewer/Properties/Resources.Designer.cs b/GUIs/skyscraper8.AnagramViewer/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..be6d9a1
--- /dev/null
+++ b/GUIs/skyscraper8.AnagramViewer/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion:4.0.30319.42000
+//
+// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+// der Code erneut generiert wird.
+//
+//------------------------------------------------------------------------------
+
+namespace skyscraper8.AnagramViewer.Properties {
+ using System;
+
+
+ ///
+ /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ ///
+ // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+ // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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() {
+ }
+
+ ///
+ /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.AnagramViewer.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/GUIs/skyscraper8.AnagramViewer/Properties/Resources.resx b/GUIs/skyscraper8.AnagramViewer/Properties/Resources.resx
new file mode 100644
index 0000000..4fdb1b6
--- /dev/null
+++ b/GUIs/skyscraper8.AnagramViewer/Properties/Resources.resx
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/GUIs/skyscraper8.AnagramViewer/Properties/launchSettings.json b/GUIs/skyscraper8.AnagramViewer/Properties/launchSettings.json
index bebb17c..d9e6455 100644
--- a/GUIs/skyscraper8.AnagramViewer/Properties/launchSettings.json
+++ b/GUIs/skyscraper8.AnagramViewer/Properties/launchSettings.json
@@ -2,7 +2,7 @@
"profiles": {
"skyscraper8.AnagramViewer": {
"commandName": "Project",
- "commandLineArgs": "\"Y:\\data\\outputs\\txt2img-images\\2025-07-20\\00025-394627821.png\""
+ "commandLineArgs": "\"C:\\Users\\Sascha Schiemann\\source\\repos\\skyscraper8\\skyscraper8\\bin\\Debug\\net8.0\\iq.bin\""
}
}
}
\ No newline at end of file
diff --git a/GUIs/skyscraper8.AnagramViewer/skyscraper8.AnagramViewer.csproj b/GUIs/skyscraper8.AnagramViewer/skyscraper8.AnagramViewer.csproj
index 90879e7..25587da 100644
--- a/GUIs/skyscraper8.AnagramViewer/skyscraper8.AnagramViewer.csproj
+++ b/GUIs/skyscraper8.AnagramViewer/skyscraper8.AnagramViewer.csproj
@@ -12,4 +12,19 @@
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
\ No newline at end of file
diff --git a/skyscraper8/Program.cs b/skyscraper8/Program.cs
index 5a8bd9f..5776a74 100644
--- a/skyscraper8/Program.cs
+++ b/skyscraper8/Program.cs
@@ -41,10 +41,8 @@ namespace skyscraper5
class Program
{
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
-
private static void IntegrationTest()
{
-
}
static void Main(string[] args)
diff --git a/skyscraper8/Skyscraper/Drawing/IqChartData.cs b/skyscraper8/Skyscraper/Drawing/IqChartData.cs
index 0a619e7..2a9e16d 100644
--- a/skyscraper8/Skyscraper/Drawing/IqChartData.cs
+++ b/skyscraper8/Skyscraper/Drawing/IqChartData.cs
@@ -24,6 +24,7 @@ namespace skyscraper8.Skyscraper.Drawing
public byte[][] IQ;
private List packets;
private byte progress;
+ private long totalSamples;
public static IqChartData Create()
{
@@ -50,7 +51,13 @@ namespace skyscraper8.Skyscraper.Drawing
return result;
}
- public bool IsComplete { get; private set; }
+ public bool IsComplete
+ {
+ get
+ {
+ return totalSamples >= 100000;
+ }
+ }
public void PushPacket(sbyte[] buffer)
@@ -69,14 +76,11 @@ namespace skyscraper8.Skyscraper.Drawing
Console.WriteLine(progress);
}
}
- else
- {
- IsComplete = true;
- }
}
byte[] writableBuffer = Array.ConvertAll(buffer, x => (byte)x);
packets.Add(writableBuffer);
+ totalSamples += (buffer.Length / 2);
}
public void SaveTo(FileStream fs)
@@ -88,5 +92,32 @@ namespace skyscraper8.Skyscraper.Drawing
fs.Write(packet, 0, packet.Length);
}
}
+
+ private bool scaled;
+ public void AutoScale()
+ {
+ if (scaled)
+ return;
+ if (progress == 255)
+ return;
+
+ double maxByte = byte.MaxValue;
+ double maxProgress = progress;
+ double scaleFactor = maxByte / maxProgress;
+
+ for (int x = 0; x < 256; x++)
+ {
+ for (int y = 0; y < 256; y++)
+ {
+ double currentValue = IQ[x][y];
+ currentValue *= scaleFactor;
+ if (currentValue > byte.MaxValue)
+ currentValue = byte.MaxValue;
+ IQ[x][y] = (byte)currentValue;
+ }
+ }
+
+ scaled = true;
+ }
}
}
diff --git a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs
index 7c5396d..cbca45a 100644
--- a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs
+++ b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs
@@ -497,12 +497,15 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader
public bool RFScan(int freq, int pol, int lof1, int lof2, int lofsw, out double pRFLevel)
{
- NetworkStreamExtensions.WriteUInt32BE(TcpStream, (uint)RemoteStreamReaderConstants.REQUEST_RF_SCAN);
- TcpStream.WriteInt32BE(freq);
- TcpStream.WriteInt32BE(pol);
- TcpStream.WriteInt32BE(lof1);
- TcpStream.WriteInt32BE(lof2);
- TcpStream.WriteInt32BE(lofsw);
+ byte[] cmdBuffer = new byte[24];
+ MemoryStream cmdStream = new MemoryStream(cmdBuffer, 0, 24, true);
+ cmdStream.WriteUInt32BE((uint)RemoteStreamReaderConstants.REQUEST_RF_SCAN);
+ cmdStream.WriteInt32BE(freq);
+ cmdStream.WriteInt32BE(pol);
+ cmdStream.WriteInt32BE(lof1);
+ cmdStream.WriteInt32BE(lof2);
+ cmdStream.WriteInt32BE(lofsw);
+ TcpStream.Write(cmdBuffer, 0, 24);
TcpStream.Flush();
RemoteStreamReaderConstants result = (RemoteStreamReaderConstants)TcpStream.ReadUInt32BE();
@@ -637,10 +640,12 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader
public bool IQScan(uint input, sbyte[] pIQ, uint num)
{
- NetworkStreamExtensions.WriteUInt32BE(TcpStream, (uint)RemoteStreamReaderConstants.REQUEST_IQ_SCAN);
- NetworkStreamExtensions.WriteUInt32BE(TcpStream, input);
- NetworkStreamExtensions.WriteUInt32BE(TcpStream, num);
- TcpStream.Flush();
+ byte[] cmdBuffer = new byte[12];
+ MemoryStream ms = new MemoryStream(cmdBuffer, 0, 12, true);
+ ms.WriteUInt32BE((uint)RemoteStreamReaderConstants.REQUEST_IQ_SCAN);
+ ms.WriteUInt32BE(input);
+ ms.WriteUInt32BE(num);
+ TcpStream.Write(cmdBuffer, 0, 12);
RemoteStreamReaderConstants result = (RemoteStreamReaderConstants)TcpStream.ReadUInt32BE();
switch (result)
diff --git a/skyscraper8/Skyscraper/IO/StreamExtensions.cs b/skyscraper8/Skyscraper/IO/StreamExtensions.cs
index 435c033..9b7b93c 100644
--- a/skyscraper8/Skyscraper/IO/StreamExtensions.cs
+++ b/skyscraper8/Skyscraper/IO/StreamExtensions.cs
@@ -205,6 +205,14 @@ namespace skyscraper5.Skyscraper.IO
stream.Write(buffer, 0, 2);
}
+ public static void WriteInt32BE(this Stream stream, int value)
+ {
+ byte[] buffer = BitConverter.GetBytes(value);
+ if (BitConverter.IsLittleEndian)
+ (buffer[0], buffer[1], buffer[2], buffer[3]) = (buffer[3], buffer[2], buffer[1], buffer[0]);
+ stream.Write(buffer, 0, 4);
+ }
+
public static void WriteUInt32BE(this Stream stream, uint value)
{
byte[] buffer = BitConverter.GetBytes(value);