diff --git a/src/NmeaParser.Shared/NmeaFileDevice.cs b/src/NmeaParser.Shared/NmeaFileDevice.cs
new file mode 100644
index 0000000..2adac80
--- /dev/null
+++ b/src/NmeaParser.Shared/NmeaFileDevice.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace NmeaParser
+{
+ public class NmeaFileDevice : NmeaDevice
+ {
+#if NETFX_CORE
+ Windows.Storage.IStorageFile m_filename;
+#else
+ string m_filename;
+#endif
+ BufferedStream m_stream;
+ int m_readSpeed;
+ ///
+ ///
+ ///
+ ///
+ /// The time to wait between each line being read in milliseconds
+#if NETFX_CORE
+ public NmeaFileDevice(Windows.Storage.IStorageFile filename, int readSpeed = 200)
+#else
+ public NmeaFileDevice(string filename, int readSpeed = 200)
+#endif
+ {
+ m_filename = filename;
+ m_readSpeed = readSpeed;
+ }
+
+#if NETFX_CORE
+ protected async override Task OpenStreamAsync()
+ {
+ var stream = await m_filename.OpenStreamForReadAsync();
+ StreamReader sr = new StreamReader(stream);
+ m_stream = new BufferedStream(sr, m_readSpeed);
+ return m_stream;
+#else
+ protected override Task OpenStreamAsync()
+ {
+ StreamReader sr = System.IO.File.OpenText(m_filename);
+ m_stream = new BufferedStream(sr, m_readSpeed);
+ return Task.FromResult(m_stream);
+#endif
+ }
+
+ protected override Task CloseStreamAsync(System.IO.Stream stream)
+ {
+ m_stream.Dispose();
+ return Task.FromResult(true);
+ }
+
+ // stream that slowly populates a buffer from a StreamReader to simulate nmea messages coming in line by line
+ // at a steady stream
+ private class BufferedStream : Stream
+ {
+ StreamReader m_sr;
+ byte[] buffer = new byte[0];
+ System.Threading.Timer timer;
+ object lockObj = new object();
+ public BufferedStream(StreamReader stream, int readSpeed)
+ {
+ m_sr = stream;
+ timer = new System.Threading.Timer(OnRead, null, 0, readSpeed); //add a new line to buffer every 100 ms
+ }
+ private void OnRead(object state)
+ {
+ if (m_sr.EndOfStream)
+ m_sr.BaseStream.Seek(0, SeekOrigin.Begin); //start over
+
+ //populate the buffer with a line
+ string line = m_sr.ReadLine() + '\n';
+ var bytes = Encoding.UTF8.GetBytes(line);
+ lock (lockObj)
+ {
+ byte[] newBuffer = new byte[buffer.Length + bytes.Length];
+ buffer.CopyTo(newBuffer, 0);
+ bytes.CopyTo(newBuffer, buffer.Length);
+ buffer = newBuffer;
+ }
+ }
+ public override bool CanRead { get { return true; } }
+ public override bool CanSeek { get { return false; } }
+ public override bool CanWrite { get { return false; } }
+ public override void Flush() { }
+
+ public override long Length { get { return m_sr.BaseStream.Length; } }
+
+ public override long Position
+ {
+ get { return m_sr.BaseStream.Position; }
+ set
+ {
+ throw new NotSupportedException();
+ }
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ lock (lockObj)
+ {
+ if(this.buffer.Length <= count)
+ {
+ int length = this.buffer.Length;
+ this.buffer.CopyTo(buffer, 0);
+ this.buffer = new byte[0];
+ return length;
+ }
+ else
+ {
+ Array.Copy(this.buffer, buffer, count);
+ byte[] newBuffer = new byte[this.buffer.Length - count];
+ Array.Copy(this.buffer, count, newBuffer, 0, newBuffer.Length);
+ this.buffer = newBuffer;
+ return count;
+ }
+ }
+ }
+
+ public override long Seek(long offset, SeekOrigin origin)
+ {
+ throw new NotSupportedException();
+ }
+
+ public override void SetLength(long value)
+ {
+ throw new NotSupportedException();
+ }
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ throw new NotSupportedException();
+ }
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ m_sr.Dispose();
+ timer.Dispose();
+ }
+ }
+ }
+}
diff --git a/src/NmeaParser.Shared/NmeaParser.Shared.projitems b/src/NmeaParser.Shared/NmeaParser.Shared.projitems
index 5fd6b87..10fa91b 100644
--- a/src/NmeaParser.Shared/NmeaParser.Shared.projitems
+++ b/src/NmeaParser.Shared/NmeaParser.Shared.projitems
@@ -10,6 +10,7 @@
+
diff --git a/src/NmeaParser.Shared/StreamDevice.cs b/src/NmeaParser.Shared/StreamDevice.cs
index 70fa586..3c0a7f1 100644
--- a/src/NmeaParser.Shared/StreamDevice.cs
+++ b/src/NmeaParser.Shared/StreamDevice.cs
@@ -6,6 +6,9 @@ using System.Threading.Tasks;
namespace NmeaParser
{
+ ///
+ /// Generic stream device
+ ///
public class StreamDevice : NmeaDevice
{
System.IO.Stream m_stream;
diff --git a/src/NmeaParser.WinPhone/NmeaParser.WinPhone.csproj b/src/NmeaParser.WinPhone/NmeaParser.WinPhone.csproj
index b20d139..8cb2e0b 100644
--- a/src/NmeaParser.WinPhone/NmeaParser.WinPhone.csproj
+++ b/src/NmeaParser.WinPhone/NmeaParser.WinPhone.csproj
@@ -1,56 +1,100 @@
+
Debug
AnyCPU
- 10.0.20506
+ 8.0.30703
2.0
{EA42A713-BC6E-4914-B54B-47C0891B7421}
- {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
Library
Properties
NmeaParser
NmeaParser.WinPhone
- WindowsPhone
- v8.0
- $(TargetFrameworkVersion)
- false
- true
- 11.0
- true
+ en-US
+ 8.1
+ 12
+ 512
+ {76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
true
full
false
- ..\Bin\Debug\
- DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
- true
- true
+ bin\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
prompt
4
pdbonly
true
- ..\Bin\Release\
- TRACE;SILVERLIGHT;WINDOWS_PHONE
- true
- true
+ bin\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
prompt
4
+
+ true
+ bin\ARM\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ ;2008
+ full
+ ARM
+ false
+ prompt
+ true
+
+
+ bin\ARM\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ true
+ ;2008
+ pdbonly
+ ARM
+ false
+ prompt
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ ;2008
+ full
+ x86
+ false
+ prompt
+ true
+
+
+ bin\x86\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ true
+ ;2008
+ pdbonly
+ x86
+ false
+ prompt
+ true
+
+
+
+
BluetoothDevice.cs
-
-
-
-
+
+ 12.0
+
+
+ WindowsPhoneApp
+
+
+
+ {62a55887-10f5-40d2-9352-96246d1b11d3}
+ NmeaParser.WinStore
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+
+ NmeaSampleData.txt
+
+
+
+
+
+
+
+ 12.0
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SampleApp.Store/SampleApp.Store.Windows/SampleApp.Store.Windows_TemporaryKey.pfx b/src/SampleApp.Store/SampleApp.Store.Windows/SampleApp.Store.Windows_TemporaryKey.pfx
new file mode 100644
index 0000000..5eea279
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.Windows/SampleApp.Store.Windows_TemporaryKey.pfx differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Logo.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Logo.scale-240.png
new file mode 100644
index 0000000..76921ca
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Logo.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SmallLogo.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SmallLogo.scale-240.png
new file mode 100644
index 0000000..3166301
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SmallLogo.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SplashScreen.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SplashScreen.scale-240.png
new file mode 100644
index 0000000..33f26b3
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/SplashScreen.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Square71x71Logo.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Square71x71Logo.scale-240.png
new file mode 100644
index 0000000..cfa54be
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/Square71x71Logo.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/StoreLogo.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/StoreLogo.scale-240.png
new file mode 100644
index 0000000..47e084b
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/StoreLogo.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/WideLogo.scale-240.png b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/WideLogo.scale-240.png
new file mode 100644
index 0000000..6249d29
Binary files /dev/null and b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Assets/WideLogo.scale-240.png differ
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Package.appxmanifest b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Package.appxmanifest
new file mode 100644
index 0000000..5a1572d
--- /dev/null
+++ b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Package.appxmanifest
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ SampleApp.Store.WindowsPhone
+ mort5161
+ Assets\StoreLogo.png
+
+
+
+ 6.3.1
+ 6.3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Properties/AssemblyInfo.cs b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ff8eda2
--- /dev/null
+++ b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/Properties/AssemblyInfo.cs
@@ -0,0 +1,29 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SampleApp.Store.WindowsPhone")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SampleApp.Store.WindowsPhone")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/src/SampleApp.Store/SampleApp.Store.WindowsPhone/SampleApp.Store.WindowsPhone.csproj b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/SampleApp.Store.WindowsPhone.csproj
new file mode 100644
index 0000000..b3f35c7
--- /dev/null
+++ b/src/SampleApp.Store/SampleApp.Store.WindowsPhone/SampleApp.Store.WindowsPhone.csproj
@@ -0,0 +1,123 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {9EE3EA1D-F28C-4CF2-B540-DB0415050D5F}
+ AppContainerExe
+ Properties
+ SampleApp.Store
+ SampleApp.Store.WindowsPhone
+ en-US
+ 8.1
+ 12
+ 512
+ {76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ prompt
+ 4
+
+
+ true
+ bin\ARM\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ ;2008
+ full
+ ARM
+ false
+ prompt
+ true
+
+
+ bin\ARM\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ true
+ ;2008
+ pdbonly
+ ARM
+ false
+ prompt
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ ;2008
+ full
+ x86
+ false
+ prompt
+ true
+
+
+ bin\x86\Release\
+ TRACE;NETFX_CORE;WINDOWS_PHONE_APP
+ true
+ ;2008
+ pdbonly
+ x86
+ false
+ prompt
+ true
+
+
+
+
+ {ea42a713-bc6e-4914-b54b-47c0891b7421}
+ NmeaParser.WinPhone
+
+
+
+
+
+
+
+ Designer
+
+
+
+
+ NmeaSampleData.txt
+
+
+
+
+
+
+
+
+
+ 12.0
+
+
+ WindowsPhoneApp
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SampleApp.WinDesktop/App.config b/src/SampleApp.WinDesktop/App.config
new file mode 100644
index 0000000..8e15646
--- /dev/null
+++ b/src/SampleApp.WinDesktop/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SampleApp.WinDesktop/App.xaml b/src/SampleApp.WinDesktop/App.xaml
new file mode 100644
index 0000000..8b4ad6b
--- /dev/null
+++ b/src/SampleApp.WinDesktop/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/src/SampleApp.WinDesktop/App.xaml.cs b/src/SampleApp.WinDesktop/App.xaml.cs
new file mode 100644
index 0000000..12062b4
--- /dev/null
+++ b/src/SampleApp.WinDesktop/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace SampleApp.WinDesktop
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/src/SampleApp.WinDesktop/MainWindow.xaml b/src/SampleApp.WinDesktop/MainWindow.xaml
new file mode 100644
index 0000000..c0b6ab6
--- /dev/null
+++ b/src/SampleApp.WinDesktop/MainWindow.xaml
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/src/SampleApp.WinDesktop/MainWindow.xaml.cs b/src/SampleApp.WinDesktop/MainWindow.xaml.cs
new file mode 100644
index 0000000..83e99f1
--- /dev/null
+++ b/src/SampleApp.WinDesktop/MainWindow.xaml.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace SampleApp.WinDesktop
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ var device = new NmeaParser.NmeaFileDevice("NmeaSampleData.txt");
+ device.MessageReceived += device_MessageReceived;
+ device.OpenAsync();
+ }
+
+ private void device_MessageReceived(NmeaParser.NmeaDevice sender, NmeaParser.Nmea.NmeaMessage args)
+ {
+ Dispatcher.BeginInvoke((Action) delegate()
+ {
+ output.Text += args.MessageType + ": " + args.ToString() + '\n';
+ });
+ }
+ }
+}
diff --git a/src/SampleApp.WinDesktop/Properties/AssemblyInfo.cs b/src/SampleApp.WinDesktop/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a5ad37e
--- /dev/null
+++ b/src/SampleApp.WinDesktop/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("SampleApp.WinDesktop")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SampleApp.WinDesktop")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/SampleApp.WinDesktop/Properties/Resources.Designer.cs b/src/SampleApp.WinDesktop/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b8355be
--- /dev/null
+++ b/src/SampleApp.WinDesktop/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace SampleApp.WinDesktop.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SampleApp.WinDesktop.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/src/SampleApp.WinDesktop/Properties/Resources.resx b/src/SampleApp.WinDesktop/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/src/SampleApp.WinDesktop/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/SampleApp.WinDesktop/Properties/Settings.Designer.cs b/src/SampleApp.WinDesktop/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..9a973f9
--- /dev/null
+++ b/src/SampleApp.WinDesktop/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace SampleApp.WinDesktop.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/src/SampleApp.WinDesktop/Properties/Settings.settings b/src/SampleApp.WinDesktop/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/src/SampleApp.WinDesktop/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/SampleApp.WinDesktop/SampleApp.WinDesktop.csproj b/src/SampleApp.WinDesktop/SampleApp.WinDesktop.csproj
new file mode 100644
index 0000000..46e6987
--- /dev/null
+++ b/src/SampleApp.WinDesktop/SampleApp.WinDesktop.csproj
@@ -0,0 +1,116 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {5DB6C7C7-A19C-4BE3-AFE6-26E3061DA01F}
+ WinExe
+ Properties
+ SampleApp.WinDesktop
+ SampleApp.WinDesktop
+ v4.5
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {df711ab9-f14e-4f1f-b8f2-b6ddc4691554}
+ NmeaParser.WinDesktop
+
+
+
+
+ NmeaSampleData.txt
+ PreserveNewest
+
+
+
+
+
\ No newline at end of file