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()
{