Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
halmaia committed Mar 21, 2023
1 parent 45c2228 commit edfe97a
Show file tree
Hide file tree
Showing 12 changed files with 75 additions and 141 deletions.
15 changes: 1 addition & 14 deletions 3D.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Runtime.InteropServices;

namespace SL3Reader
{
namespace SL3Reader {
[StructLayout(LayoutKind.Sequential, Size = Size)]
public readonly ref struct ThreeDimensionalFrameHeader
{
Expand Down Expand Up @@ -32,16 +31,4 @@ public readonly ref struct ThreeDimensionalFrameHeader
NumberOfUnreliableBytes;

}

[StructLayout(LayoutKind.Sequential, Size = Size)]
public readonly ref struct InterferometricMeasurement
{
public const int Size = 2 * sizeof(float);

public readonly float Delta { get; }
public readonly float Depth { get; }

public override readonly string ToString() => $"{Delta};{Depth}";

}
}
1 change: 0 additions & 1 deletion Bgra.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public Bgra(byte b, byte g, byte r, byte a = 255)
R = r;
A = a;
}

public override readonly string ToString() => string.Join(';', R, G, B, A);
};
}
81 changes: 16 additions & 65 deletions Frame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
using System.Runtime.CompilerServices;
using System.Globalization;

namespace SL3Reader
{
public interface IFrame
{
namespace SL3Reader {
public interface IFrame {
#region Basic properties
uint PositionOfFirstByte { get; }
uint UnknownAt4 { get; }
Expand Down Expand Up @@ -86,8 +84,7 @@ public interface IFrame

[StructLayout(LayoutKind.Explicit, Size = ExtendedSize)]
[DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")]
public readonly struct Frame : IFrame
{
public readonly struct Frame : IFrame {
public const int ExtendedSize = 168;
public const int BasicSize = 128;
public const int MinimumInitSize = 44;
Expand Down Expand Up @@ -156,8 +153,7 @@ public interface IFrame

#region Type support
// Derived:
public readonly FrameType FrameType
{
public readonly FrameType FrameType {
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => SurveyType is SurveyType.Unknown7 or SurveyType.Unknown8 ? FrameType.Basic : FrameType.Extended;
}
Expand All @@ -166,7 +162,7 @@ public readonly FrameType FrameType
#region Extended Properties
[FieldOffset(128)] private readonly uint lastPrimaryScanFrameOffset;
public readonly uint LastPrimaryScanFrameOffset => FrameType is FrameType.Extended ? lastPrimaryScanFrameOffset : throw new InvalidFrameTypeException(); // (128)

[FieldOffset(132)] private readonly uint lastSecondaryScanFrameOffset;
public readonly uint LastSecondaryScanFrameOffset => FrameType is FrameType.Extended ? lastSecondaryScanFrameOffset : throw new InvalidFrameTypeException(); // (132)
[FieldOffset(136)] public readonly uint lastDownScanFrameOffset;
Expand All @@ -192,50 +188,6 @@ public readonly FrameType FrameType

#endregion Extended properties

#region Search support
//public readonly bool GetNearest3DFrame(List<IFrame> candidates, [NotNullWhen(true)] out IFrame? frame3D) =>
// GetNearestFrame(candidates, this, out frame3D);

//public static bool GetNearestFrame(List<IFrame> candidates,
// in IFrame currentFrame,
// [NotNullWhen(true)] out IFrame? frame)
//{
// int count;
// if (currentFrame.FrameType == FrameType.Extended &&
// candidates is not null &&
// (count = candidates.Count) > 0)
// {
// if (currentFrame.Last3DFrameOffset == 0)
// {
// IFrame previousFrame = candidates[0];
// IFrame nextFrame = count > 1 ? candidates[1] : previousFrame;
// frame = SelectClosestFrame(previousFrame, nextFrame, currentFrame.Milliseconds);
// return true;
// }

// for (int i = 0; i < count; i++)
// {
// if (candidates[i].PositionOfFirstByte == currentFrame.Last3DFrameOffset)
// {
// IFrame previousFrame = candidates[i++];
// IFrame nextFrame = i < count ? candidates[i] : previousFrame;
// frame = SelectClosestFrame(previousFrame, nextFrame, currentFrame.Milliseconds);
// return true;
// }
// }
// }
// frame = null;
// return false;

// static IFrame SelectClosestFrame(IFrame previousFrame, IFrame nextFrame, uint milliseconds)
// {
// return Math.Abs(previousFrame.Milliseconds - milliseconds) <
// Math.Abs(nextFrame.Milliseconds - milliseconds) ?
// previousFrame : nextFrame;
// }
//}
#endregion Search support

#region DateTime support
private static DateTime timestampBase;
[SkipLocalsInit, MethodImpl(MethodImplOptions.AggressiveInlining)]
Expand All @@ -251,25 +203,24 @@ internal static void InitTimestampBase(uint hardwareTime) =>
#endregion WGS84

#region String generation
public readonly override string ToString()
{
public readonly override string ToString() {
CultureInfo invariantCulture = Frame.invariantCulture;
return string.Join(FieldSeparator, new string[17]
{
CampaignID.ToString(),
Timestamp.ToString(DateTimeFormat, invariantCulture),
SurveyType.ToString(),
WaterDepth.ToString(invariantCulture),
Longitude.ToString(invariantCulture),
Latitude.ToString(invariantCulture),
GNSSAltitude.ToString(invariantCulture),
WaterDepth.ToString("0.###", invariantCulture),
Longitude.ToString("0.#######", invariantCulture),
Latitude.ToString("0.#######", invariantCulture),
GNSSAltitude.ToString("0.###", invariantCulture),
GNSSHeading.ToString(invariantCulture),
GNSSSpeed.ToString(invariantCulture),
GNSSSpeed.ToString("0.####", invariantCulture),
MagneticHeading.ToString(invariantCulture),
MinRange.ToString(invariantCulture),
MaxRange.ToString(invariantCulture),
WaterTemperature.ToString(invariantCulture),
WaterSpeed.ToString(invariantCulture),
MinRange.ToString("0.###", invariantCulture),
MaxRange.ToString("0.###", invariantCulture),
WaterTemperature.ToString("0.#",invariantCulture),
WaterSpeed.ToString("0.####", invariantCulture),
HardwareTime.ToString(),
Frequency.ToString(),
Milliseconds.ToString()});
Expand All @@ -289,7 +240,7 @@ private readonly string GetDebuggerDisplay() {
#endregion String generation

#region Unpack support
public readonly (double x, double y, double z, double v, double t, double d) QueryMetric() =>
public readonly (double x, double y, double z, double v, double t, double d) QueryMetric() =>
(X, Y,
FootToMeter * GNSSAltitude,
KnotsToMPS * GNSSSpeed,
Expand Down
3 changes: 1 addition & 2 deletions FrameType.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
namespace SL3Reader
{
namespace SL3Reader {
public enum FrameType : byte
{ Basic, Extended }
}
7 changes: 5 additions & 2 deletions Frequency.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
namespace SL3Reader
using System.ComponentModel;

namespace SL3Reader
{
public enum Frequency : ushort
{
Fq_200kHz, Fq_50kHz, Fq_83kHz, Fq_455kHz, Fq_800kHz, Fq_38kHz, Fq_28kHz,
Fq_200kHz, Fq_50kHz, Fq_83kHz,
Fq_455kHz, Fq_800kHz, Fq_38kHz, Fq_28kHz,
Fq_130kHz_210kHz, Fq_90kHz_150kHz, Fq_40kHz_60kHz, Fq_25kHz_45kHz
}
}
9 changes: 3 additions & 6 deletions GeoPoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,24 @@ namespace SL3Reader
{
public readonly struct GeoPoint
{
public GeoPoint(double x, double y, double heading, double altitude, double distance)
public GeoPoint(double x, double y, double heading, double altitude)
{
X = x;
Y = y;
Altitude = altitude;
Heading = heading;
Distance = distance;
}

public readonly double X { get; }
public readonly double Y { get; }
public readonly double Altitude { get; }
public readonly double Heading { get; }
public readonly double Distance { get; }


public override readonly string ToString()
{
CultureInfo invariantCulture = CultureInfo.InvariantCulture;
return X.ToString(invariantCulture) + ',' +
Y.ToString(invariantCulture);
return X.ToString("0.####", invariantCulture) + ',' +
Y.ToString("0.####", invariantCulture);
}
}
}
12 changes: 12 additions & 0 deletions InterferometricMeasurement.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Runtime.InteropServices;

namespace SL3Reader {
[StructLayout(LayoutKind.Sequential, Size = Size)]
public readonly ref struct InterferometricMeasurement
{
public const int Size = 2 * sizeof(float);
public readonly float Delta { get; }
public readonly float Depth { get; }
public override readonly string ToString() => $"{Delta};{Depth}";
}
}
12 changes: 3 additions & 9 deletions InvalidFrameTypeException.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
using System.IO;

namespace SL3Reader
{
public class InvalidFrameTypeException : IOException
{
public InvalidFrameTypeException()
{
}
}
}
namespace SL3Reader {
public class InvalidFrameTypeException : IOException { }
}
2 changes: 1 addition & 1 deletion Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public static void Main(string[] args) {
break;
case "-u7":
sl3reader.ExportImagery(output, SurveyType.Unknown7);
PrintGreen("Frame type 7 imagery exported successfully.\n");
PrintGreen("Frame type Nr.7 imagery exported successfully.\n");
break;
default:
WriteLine("Invalid third argument (" + expSelector + ").");
Expand Down
2 changes: 1 addition & 1 deletion Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"profiles": {
"SL3Reader": {
"commandName": "Project",
"commandLineArgs": "\"F:\\Sonar0000.sl3\" \"F:\\SS\" -ss"
"commandLineArgs": "\"F:\\Sonar0000saar.sl3\" \"F:\\SS\" -route"
}
}
}
Loading

0 comments on commit edfe97a

Please sign in to comment.