/***
GpsConnectorLib.cs
GPSを動かすライブラリ
for C#2.0(VisualStudio2005)
Date: 2006/10/17
Author: Sho Hashimoto
WebSite: http://shokai.org
***/
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
namespace Org.Shokai.Util
{
class GpsData{
///
/// 経度
///
public double lat = 0; // 緯度
///
/// 緯度
///
public double lon = 0; // 経度
public Boolean E, W, N, S;
public GpsData()
{
E = true; // 東経
W = false;
N = true; // 北半球
S = false;
}
}
class GpsConnector
{
public GpsData gpsData = new GpsData();
public GpsConnector()
{
serialPort = new SerialPort();
PortName = "COM1";
BaudRate = 4800;
serialPort.DataReceived += serialPort_DataReceived;
}
#region Property and Accessor
private SerialPort serialPort;
public String PortName
{
set
{
this.serialPort.PortName = value;
}
get
{
return this.serialPort.PortName;
}
}
public int BaudRate
{
set
{
this.serialPort.BaudRate = value;
}
get
{
return this.serialPort.BaudRate;
}
}
public Boolean IsOpen
{
get
{
return this.serialPort.IsOpen;
}
}
#endregion
#region Method
public Boolean connect()
{
if (IsOpen) return false; // 既に開いている
try
{
serialPort.Open();
}
catch
{
}
return serialPort.IsOpen;
}
public Boolean close()
{
if (!IsOpen) return false; // 既に閉じている
try
{
serialPort.Close();
}
catch
{
}
return serialPort.IsOpen;
}
#endregion
#region Event
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
String recvData = serialPort.ReadLine();
// parse
String[] data = recvData.Split(',');
switch (data[0])
{
case "$GPGGA":
gpsData.lat = Double.Parse(data[2])/100;
if (data[3] == "W")
{
gpsData.lat *= -1; // 西経
}
gpsData.lon = Double.Parse(data[4])/100;
if (data[5] == "S")
{
gpsData.lon *= -1; // 南緯
}
break;
case "$GPRMC":
break;
case "$GPGSA":
break;
}
//Console.WriteLine(recvData);
}
#endregion
}
}