diff --git a/src/NmeaParser/Nmea/NmeaMessage.cs b/src/NmeaParser/Nmea/NmeaMessage.cs index a1cd9f2..3ea186a 100644 --- a/src/NmeaParser/Nmea/NmeaMessage.cs +++ b/src/NmeaParser/Nmea/NmeaMessage.cs @@ -188,8 +188,9 @@ namespace NmeaParser.Messages string[] parts = message.Split(new char[] { ',' }); string MessageType = parts[0].Substring(1); - if (MessageType == "PTNL") { + if (MessageType is "PTNL" or "AML") { // PTNL is parent to e.g. AVR, GGK etc. + // AML is parent to e.g. SVT, SV, SVP etc MessageType = parts[1]; parts = parts.Skip(1).ToArray(); } diff --git a/src/NmeaParser/Nmea/Svm.cs b/src/NmeaParser/Nmea/Svm.cs new file mode 100644 index 0000000..57755a3 --- /dev/null +++ b/src/NmeaParser/Nmea/Svm.cs @@ -0,0 +1,76 @@ +// ******************************************************************************* +// * 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; + +namespace NmeaParser.Messages +{ + /// + /// AML Sound Velocity (m/s), Temperature (C) + /// AML Oceanographic Svm sensor + /// + /// + /// + /// 1.: Sound Velocity m/s + /// 2.: Unit of temperature, TC = Celcius + /// 3.: Temperature + /// 4.: Label, SN: Serial number + /// 5.: Device serial number + /// + /// + [NmeaMessageType("SVM")] + public class Svm : NmeaMessage + { + /// + /// Initializes a new instance of the class. + /// + /// The message type + /// The NMEA message values. + public Svm(string type, string[] message) : base(type, message) + { + if (message == null || message.Length < 5) + throw new ArgumentException("Invalid Svm", "message"); + SoundVelocity = StringToDouble(message[0]); + TemperatureUnit = message[1]; + Temperature = StringToDouble(message[2]); + IsSerialNumber = message[3] == "SN"; + SerialNumber = StringToDouble(message[4]); + } + + /// + /// Sound Velocity m/s + /// + public double SoundVelocity { get; } + + /// + /// Temperature Unit + /// + public string TemperatureUnit { get; } + + /// + /// Temperature + /// + public double Temperature { get; } + + /// + /// String indicating Serial number + /// + public bool IsSerialNumber { get; } + + /// + /// Serial Number + /// + public double SerialNumber { get; } + } +} \ No newline at end of file diff --git a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs index 8b9b4bf..7721b0c 100644 --- a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs +++ b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs @@ -86,6 +86,7 @@ namespace NmeaParser.Tests var msg = NmeaMessage.Parse(line, previousMessage as IMultiSentenceMessage); Assert.IsNotNull(msg); if (line.IndexOf("PTNL,") > 0) continue; // TODO PTNL + if (line.IndexOf("AML,") > 0) continue; // TODO AML var idx = line.IndexOf('*'); if (idx >= 0) { @@ -125,6 +126,20 @@ namespace NmeaParser.Tests Assert.ThrowsException(() => NmeaMessage.Parse(input, ignoreChecksum: false)); } + [TestMethod] + public void TestAmlSvm() + { + string input = "$AML,SVM,1468.951,TC,15.753,SN,168753*0F"; + var msg = NmeaMessage.Parse(input); + Assert.IsInstanceOfType(msg, typeof(Svm)); + Svm svm = (Svm)msg; + Assert.AreEqual(1468.951, svm.SoundVelocity); + Assert.AreEqual("TC", svm.TemperatureUnit); + Assert.AreEqual(15.753, svm.Temperature); + Assert.IsTrue(svm.IsSerialNumber); + Assert.AreEqual(168753, svm.SerialNumber); + } + [TestMethod] public void TestDPT() {