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);