Example GPS application
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Data;
using System.ComponentModel;
namespace SerialPortNoEventsCS
{
/// Summary description for Form1.
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button bFix;
private System.Windows.Forms.Button bStatus;
private System.Windows.Forms.Button bQuality;
private System.Windows.Forms.Button bMovement;
private System.Windows.Forms.Button bSatellites;
private System.Windows.Forms.ListBox boxResults;
private System.Windows.Forms.Button bStart;
private System.Windows.Forms.Button bStop;
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.ComboBox ddPort;
private System.Windows.Forms.ComboBox ddBaudRate;
private System.Windows.Forms.Label label1;
private GpsToolsNET.NmeaParser objParser;
public Form1()
{
// Required for Windows Form Designer support
InitializeComponent();
}
/// Clean up any resources being used.
protected override void Dispose( bool disposing )
{
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.bStart = new System.Windows.Forms.Button();
this.bFix = new System.Windows.Forms.Button();
this.bStatus = new System.Windows.Forms.Button();
this.bQuality = new System.Windows.Forms.Button();
this.bMovement = new System.Windows.Forms.Button();
this.bSatellites = new System.Windows.Forms.Button();
this.boxResults = new System.Windows.Forms.ListBox();
this.bStop = new System.Windows.Forms.Button();
this.ddPort = new System.Windows.Forms.ComboBox();
this.ddBaudRate = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
//
// bStart
//
this.bStart.Location = new System.Drawing.Point(152, 244);
this.bStart.Size = new System.Drawing.Size(80, 20);
this.bStart.Text = "Start";
this.bStart.Click += new System.EventHandler(this.bStart_Click);
//
// bFix
//
this.bFix.Location = new System.Drawing.Point(152, 100);
this.bFix.Size = new System.Drawing.Size(80, 24);
this.bFix.Text = "Position";
this.bFix.Click += new System.EventHandler(this.bFix_Click);
//
// bStatus
//
this.bStatus.Location = new System.Drawing.Point(152, 136);
this.bStatus.Size = new System.Drawing.Size(80, 24);
this.bStatus.Text = "Status";
this.bStatus.Click += new System.EventHandler(this.bStatus_Click);
//
// bQuality
//
this.bQuality.Location = new System.Drawing.Point(152, 72);
this.bQuality.Size = new System.Drawing.Size(80, 24);
this.bQuality.Text = "Quality";
this.bQuality.Click += new System.EventHandler(this.bQuality_Click);
//
// bMovement
//
this.bMovement.Location = new System.Drawing.Point(152, 44);
this.bMovement.Size = new System.Drawing.Size(80, 24);
this.bMovement.Text = "Speed";
this.bMovement.Click += new System.EventHandler(this.bMovement_Click);
//
// bSatellites
//
this.bSatellites.Location = new System.Drawing.Point(152, 16);
this.bSatellites.Size = new System.Drawing.Size(80, 24);
this.bSatellites.Text = "Satellites";
this.bSatellites.Click += new System.EventHandler(this.bSatellites_Click);
//
// boxResults
//
this.boxResults.Location = new System.Drawing.Point(8, 16);
this.boxResults.Size = new System.Drawing.Size(128, 223);
//
// bStop
//
this.bStop.Location = new System.Drawing.Point(152, 220);
this.bStop.Size = new System.Drawing.Size(80, 20);
this.bStop.Text = "Stop";
this.bStop.Click += new System.EventHandler(this.bStop_Click);
//
// ddPort
//
this.ddPort.Location = new System.Drawing.Point(152, 168);
this.ddPort.Size = new System.Drawing.Size(80, 21);
//
// ddBaudRate
//
this.ddBaudRate.Location = new System.Drawing.Point(152, 192);
this.ddBaudRate.Size = new System.Drawing.Size(80, 21);
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 244);
this.label1.Size = new System.Drawing.Size(64, 16);
this.label1.Text = "C#";
//
// Form1
//
this.Controls.Add(this.label1);
this.Controls.Add(this.ddBaudRate);
this.Controls.Add(this.ddPort);
this.Controls.Add(this.boxResults);
this.Controls.Add(this.bSatellites);
this.Controls.Add(this.bMovement);
this.Controls.Add(this.bQuality);
this.Controls.Add(this.bStatus);
this.Controls.Add(this.bFix);
this.Controls.Add(this.bStop);
this.Controls.Add(this.bStart);
this.Menu = this.mainMenu1;
this.MinimizeBox = false;
this.Text = "GpsTools .NETcf";
this.Load += new System.EventHandler(this.Form1_Load);
}
#endregion
/// The main entry point for the application.
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Replace the licenceKey value with the received one
GpsToolsNET.License license = new GpsToolsNET.License();
license.LicenseKey = "E805AEE18FC3A89A6C75";
// NmeaParser has core functionality to access NMEA data
objParser = new GpsToolsNET.NmeaParser();
//Do not use events
objParser.NoEvents = true;
bStop.Enabled = false;
bStart.Enabled = true;
init_port_baudrate_dd();
// Occurs when the form is closing
this.Closing += new System.ComponentModel.CancelEventHandler(Form1_Closing);
}
private void bStart_Click(object sender, System.EventArgs e)
{
try
{
// ComPort sets the number of the serial port on which
// GPS is used, as selected by user
objParser.ComPort = (short) ddPort.SelectedIndex;
if(ddBaudRate.SelectedIndex == 0)
{
objParser.BaudRate = 0;
}
else
{
string s = ddBaudRate.SelectedItem.ToString();
//Returns a baud rate of the serial port in use
objParser.BaudRate = Convert.ToInt32(s);
}
//Start communication with GPS
objParser.PortEnabled = true;
bStop.Enabled = true;
bStart.Enabled = false;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bStop_Click(object sender, System.EventArgs e)
{
try
{
objParser.PortEnabled = false;
bStop.Enabled = false;
bStart.Enabled = true;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bFix_Click(object sender, System.EventArgs e)
{
try
{
GpsToolsNET.GpsFix objFix = null;
GpsToolsNET.Position objPos = null;
//Time out 0 seconds. Get 2D fix (longitude, latitude)
objFix = objParser.GetGpsFix(0, 2);
boxResults.Items.Clear();
if(objFix == null)
{
boxResults.Items.Add("not available");
}
else
{
//Declare objPos as Position object
objPos = objFix.Position;
//Print out longitude, latitude and altitude strings
boxResults.Items.Add("Lat: " + objPos.LatitudeString(0));
boxResults.Items.Add("Lon: " + objPos.LongitudeString(0));
boxResults.Items.Add(objPos.Altitude(0).ToString());
short d, m;
double s;
string h;
objPos.LatitudeDMS(out d, out m, out s, out h);
// boxResults.Items.Add(h + d.ToString() + " " + m.ToString() + " " + s.ToString());
objPos.LongitudeDMS(out d, out m, out s, out h);
// boxResults.Items.Add(h + d.ToString() + " " + m.ToString() + " " + s.ToString());
double lat, lon;
lat = objPos.LatitudeRads * 180 / Math.PI; // Decimal degrees
lon = objPos.LongitudeRads * 180 / Math.PI;
boxResults.Items.Add(lat.ToString());
boxResults.Items.Add(lon.ToString());
// See reference manual for list of all supported national grids
// (map projections)
objPos.Grid = GpsToolsNET.Grid.UTM_NORTH; // Use UTM
boxResults.Items.Add("Northing: " + objPos.Northing.ToString());
boxResults.Items.Add("Easting: " + objPos.Easting.ToString());
boxResults.Items.Add("Zone: " + objPos.Zone);
boxResults.Items.Add("FixType: " + objFix.FixType);
DateTime dt = objFix.UTC;
if(dt.Year != 1)
{
// Date available
boxResults.Items.Add("UTC date: " + objFix.UTC.ToShortDateString());
}
else
{
boxResults.Items.Add("UTC date: N/A");
}
boxResults.Items.Add("UTC time: " + objFix.UTC.ToShortTimeString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bStatus_Click(object sender, System.EventArgs e)
{
try
{
GpsToolsNET.ComStatus objStatus;
// Get status of the serial link to the GPS
objStatus = objParser.GetComStatus();
boxResults.Items.Clear();
// Check if GPS is found and it has a valid GPS fix
boxResults.Items.Add("Connected: " + objStatus.ValidNmea.ToString());
if(objStatus.ComPort == -1)
{
// GpsGate Direct
boxResults.Items.Add("GpsGate Direct");
}
else
{
// Baud rate
boxResults.Items.Add("BaudRate: " + objStatus.BaudRate.ToString());
// COM port
boxResults.Items.Add("COM" + objStatus.ComPort.ToString() + ":" );
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bQuality_Click(object sender, System.EventArgs e)
{
try
{
//Quality contains information about dilution of precision
GpsToolsNET.Quality objQuality = objParser.GetQuality(0);
boxResults.Items.Clear();
if(objQuality == null)
{
boxResults.Items.Add("not available");
}
else
{
//horizontal dilution of precision (in meters)
boxResults.Items.Add("HDOP: " + objQuality.HDOP.ToString());
//vertical dilution of precision (in meters)
boxResults.Items.Add("VDOP: " + objQuality.VDOP.ToString());
//dilution of precision (in meters)
boxResults.Items.Add("PDOP: " + objQuality.PDOP.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bMovement_Click(object sender, System.EventArgs e)
{
try
{
// Movement object contains information about speed and heading
GpsToolsNET.Movement m = objParser.GetMovement(0);
boxResults.Items.Clear();
if(m == null)
{
boxResults.Items.Add("not available");
}
else
{
// Returns the ground speed (0 - as knots)
boxResults.Items.Add("Speed: " + m.Speed(0).ToString());
// Returns in degrees in what direction GPS is moving
boxResults.Items.Add("Heading: " + m.Heading.ToString());
// Returns the difference in degrees between a real compass and heading
boxResults.Items.Add("Variation: " + m.MagneticVariation.ToString());
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void bSatellites_Click(object sender, System.EventArgs e)
{
try
{
//Get satellite information (0 miliseconds time out)
GpsToolsNET.Satellites sats = objParser.GetSatellites(0);
GpsToolsNET.Satellite s;
boxResults.Items.Clear();
if(sats == null)
{
boxResults.Items.Add("not available");
}
else
{
//Gets number of satellites (between 1 and 12)
boxResults.Items.Add("Count: " + sats.Count.ToString());
short inx;
for(inx = 1; inx <= sats.Count; inx++)
{
//Item represents a collection of all satellites detected by GPS
s = sats.Item(inx);
//ID of satellite (see ID) is also often refered to as PRN (number between 1 and 99)
//If ID returns 0 it is not a valid satellite
//SNR is Signal to Noise Ration for the signal from satellite (number between 0 and 99)
//GPS typically starts using a satellite when its SNR value is higher than 25
boxResults.Items.Add("ID: " + s.ID.ToString() + " SNR: " + s.SNR.ToString());
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// You need to stop the serial port (if active) before the form is destroyed
// Or else NmeaParser will fire events to the destroyed window.
objParser.Dispose();
Application.Exit();
}
private void init_port_baudrate_dd()
{
// Init serial port dropdown
short i;
ddPort.Items.Add("Auto");
for(i = 1; i < 10; i++)
{
ddPort.Items.Add("COM" + i + ":");
}
ddPort.SelectedIndex = 0;
// Init Baud rate drop down
ddBaudRate.Items.Add("Auto");
ddBaudRate.Items.Add("4800");
ddBaudRate.Items.Add("9600");
ddBaudRate.Items.Add("19200");
ddBaudRate.Items.Add("14400");
ddBaudRate.Items.Add("38400");
ddBaudRate.Items.Add("57600");
ddBaudRate.SelectedIndex = 0;
}
}
}