From 47d419864fbc8657c43acb2ae48856e68f03d114 Mon Sep 17 00:00:00 2001 From: Morten Nielsen <1378165+dotMorten@users.noreply.github.com> Date: Mon, 31 Aug 2020 22:22:27 -0700 Subject: [PATCH] Detect GN support per-message instead (#79) * Simplify Android device lookup * Detect GN support per-message instead. * add length check --- src/NmeaParser/BluetoothDevice.Android.cs | 2 +- src/NmeaParser/Gnss/GnssMonitor.cs | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/NmeaParser/BluetoothDevice.Android.cs b/src/NmeaParser/BluetoothDevice.Android.cs index 4c87ba3..cbc2be9 100644 --- a/src/NmeaParser/BluetoothDevice.Android.cs +++ b/src/NmeaParser/BluetoothDevice.Android.cs @@ -54,7 +54,7 @@ namespace NmeaParser var adapter = Android.Bluetooth.BluetoothAdapter.DefaultAdapter; if (adapter != null && adapter.IsEnabled) { - foreach (var b in adapter.BondedDevices.Where(d => d.GetUuids().Where(t => t.Uuid != null && t.Uuid.ToString()!.Equals("00001101-0000-1000-8000-00805F9B34FB", StringComparison.InvariantCultureIgnoreCase)).Any())) + foreach (var b in adapter.BondedDevices.Where(d => d.GetUuids().Any(t => SERIAL_UUID.CompareTo(t.Uuid) == 0))) yield return b; } } diff --git a/src/NmeaParser/Gnss/GnssMonitor.cs b/src/NmeaParser/Gnss/GnssMonitor.cs index c58d1cf..b92fe2d 100644 --- a/src/NmeaParser/Gnss/GnssMonitor.cs +++ b/src/NmeaParser/Gnss/GnssMonitor.cs @@ -26,7 +26,6 @@ namespace NmeaParser.Gnss /// public class GnssMonitor : INotifyPropertyChanged { - private bool m_supportGNMessages; // If device detect GN* messages, ignore all other Talker ID private bool m_supportGGaMessages; //If device support GGA, ignore RMC for location private Dictionary m_allMessages { get; } = new Dictionary(); private object m_lock = new object(); @@ -81,10 +80,12 @@ namespace NmeaParser.Gnss m_allMessages[message.MessageType] = message; } properties.Add(nameof(AllMessages)); - if (message.TalkerId == NmeaParser.Talker.GlobalNavigationSatelliteSystem) - m_supportGNMessages = true; // Support for GN* messages detected - else if (m_supportGNMessages && message.TalkerId != NmeaParser.Talker.GlobalNavigationSatelliteSystem && !(message is Gsv)) - return; // If device supports combined GN* messages, ignore non-GN messages, except for Gsv + if(message.TalkerId != NmeaParser.Talker.GlobalNavigationSatelliteSystem && !(message is Gsv) && message.MessageType.Length > 2) + { + // If device supports combined GN*** messages, ignore non-GN messages, except for Gsv + if (m_allMessages.ContainsKey("GN" + message.MessageType.Substring(2))) + return; + } if (message is NmeaParser.Messages.Garmin.Pgrme rme) {