From b79651cc4baee734e5f7657ef3232d68012916a4 Mon Sep 17 00:00:00 2001 From: Joachim Spange Date: Tue, 28 Jan 2025 12:35:34 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20DPT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NmeaParser/Nmea/Dpt.cs | 71 +++++++++++++++++++ .../NmeaParser.Tests/NmeaMessages.cs | 12 ++++ 2 files changed, 83 insertions(+) create mode 100644 src/NmeaParser/Nmea/Dpt.cs diff --git a/src/NmeaParser/Nmea/Dpt.cs b/src/NmeaParser/Nmea/Dpt.cs new file mode 100644 index 0000000..0028611 --- /dev/null +++ b/src/NmeaParser/Nmea/Dpt.cs @@ -0,0 +1,71 @@ +// ******************************************************************************* +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// ****************************************************************************** + +using System; +using System.Globalization; + +namespace NmeaParser.Messages +{ + /// + /// Water depth relative to the transducer, the depth offset of the transducer, and maximum depth that the sounder can detect a sea-bed (all in metres only). + /// Positive offsets provide distance from the transducer to the water line. Negative offsets provide distance from the transducer to the keel. + /// Not all NMEA 0183 devices that output this sentence can have their depth offset changed. In this case, the depth offset will always be zero, or not included. + /// NMEA 0183 v2.0 sentences will not include the maximum depth range value at all, as it was added in v3.0. + /// + /// + /// + /// Format: $xxDPT,DATA_METRES,OFFSET_METRES, MAXIMUM_METRES*hh + /// 1.: Data + /// 2.: Offset + /// 3.: Maximum + /// + /// + /// Depth + /// + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "SdDpt")] + [NmeaMessageType("--DPT")] + public class Dpt : NmeaMessage + { + /// + /// Initializes a new instance of the class. + /// + /// The message type + /// The NMEA message values. + public Dpt(string type, string[] message) : base(type, message) + { + if (message == null || message.Length < 3) + throw new ArgumentException("Invalid Dpt", "message"); + + DepthMeters = double.Parse(message[0], CultureInfo.InvariantCulture); + DepthOffsetMeters = double.Parse(message[1], CultureInfo.InvariantCulture); + MaxDepthRangeMeters = double.Parse(message[2], CultureInfo.InvariantCulture); + } + + /// + /// Depth, in meters + /// + public double DepthMeters { get; } + + /// + /// Depth offset, in meters + /// + public double DepthOffsetMeters { get; } + + /// + /// Maximum depth range, in meters + /// + public double MaxDepthRangeMeters { get; } + } +} \ No newline at end of file diff --git a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs index 1467fa6..3d58f9e 100644 --- a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs +++ b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs @@ -124,6 +124,18 @@ namespace NmeaParser.Tests Assert.ThrowsException(() => NmeaMessage.Parse(input, ignoreChecksum: false)); } + [TestMethod] + public void TestDPT() + { + string input = "$--DPT,149.5,000.5,1000.0*7F"; + var msg = NmeaMessage.Parse(input); + Assert.IsInstanceOfType(msg, typeof(Dpt)); + Dpt dpt = (Dpt)msg; + Assert.AreEqual(149.5, dpt.DepthMeters); + Assert.AreEqual(0.5, dpt.DepthOffsetMeters); + Assert.AreEqual(1000, dpt.MaxDepthRangeMeters); + } + [TestMethod] public void TestGprma() {