/** * Title: iSIM * Copyright: Copyright (c) 2002 * Company: University of Oregon Computer Science Dept. * * @author Jason Prideaux * @version 1.0 * */ import gps_monitor.gps.*; import gps_monitor.gui.*; import gps_monitor.util.*; /* ====================================================================== */ /** This class is for running the GpsMonitor iPAQ Application. * */ public class GpsProxy extends Thread implements iPAQProxy{ /** The iPAQ application owner that wants the data */ private GpsMonitorUI parent; /** The gps object that gives us data. */ private GpsGenerator gps; /** Port to use for connecting to the simulator. */ private int port; /** Port to use in connecting to a serial gps device. */ private String serial_port; /* ====================================================================== */ /** This simple Constructor opens merely instantiates this proxy object * and gets the owner of this proxy that wants incoming data. * * @param parent The parent to pass data up to. * */ public GpsProxy(GpsMonitorUI parent, int port, String serial_port){ this.parent = parent; this.port = port; this.serial_port = serial_port; } //Constructor /* ====================================================================== */ /** This method will open a connection to receive data. This method is used * for openning a connection to get real data or simulated data. However, * there may be more than 2 choices for the proxy, necessitating the creation * of multiple methods. * * @param isim True if connecting to simulator. * */ public void connect(boolean isim){ try{ if(isim){ gps = new NmeaSocketGps(parent, port); }else{ gps = new NmeaSerialGps(serial_port, 9600, parent); } }catch (Exception e){} this.start(); } //method: /* ====================================================================== */ /** This method is used to close a connection, thus the iPAQ application * will no longer receive any data through this proxy. * */ public void closeConnection(){ this.stop(); } //method: closeConnection /* ====================================================================== */ /** This method is not used by GPS, since this GPS application only receives * data, it does not send any. * * @param data Data to send either to simulator or some real source. * */ public void sendData(Object data){} /* ====================================================================== */ /** This loop continues polling for data until it is stopped. * */ public void run(){ while (true){ try{ Thread.sleep(5000); }catch(Exception e){System.out.println(e);} //check for new gps values pollGps(); } //while } //method: run /* ====================================================================== */ /** This method updates the GUI with the latest values available from the * GPS or simulator. * */ private void pollGps(){ try{ //Relay the data received to the UI//Relay the data received to the UI //I really only care about coordinates and heading, maybe speed for later //update our gps position on the display chart in the UI LatOrLongitude lat = gps.getLatitude(); LatOrLongitude lon = gps.getLongitude(); Position chart_pos = new Position(); chart_pos.lat = ((int)lat.getDegrees())*60 + lat.getMinutes(); chart_pos.lng = (((int)lon.getDegrees())*-60) + lon.getMinutes()+60; //Point p = chartdata.transPos(chart_pos); //parent.updatePos(p,chartdata.transPos(calcPred(chart_pos))); //now set the values in the UI parent.setLatitude(lat.toStringDDMM()); parent.setLongitude(lon.toStringDDMM()); parent.setHeading(gps.getTrueHeading()); }catch (NullPointerException e){} } //method: pollGps } //class: GpsProxy