package tinkerforge;
import com.tinkerforge.IPConnection;
import com.tinkerforge.NetworkException;
import com.tinkerforge.NotConnectedException;
import com.tinkerforge.TimeoutException;
import java.io.IOException;
import com.tinkerforge.AlreadyConnectedException;
import com.tinkerforge.BrickletGPS;

public class GpsMain {


	private static final String HOST = "localhost";
	private static final int PORT = 4223;

	// sv3 is the gps bricklets name
	private static final String UID = "sv3";

	public static void main(String args[]){
		IPConnection ipcon = new IPConnection(); // Create IP connection
		BrickletGPS gps = new BrickletGPS(UID, ipcon); // Create device object
		
		// Connect to brickd
		// Don't use device before ipcon is connected
		try {
			ipcon.connect(HOST, PORT);
		} catch (NetworkException e) {
			e.printStackTrace();
		} catch (AlreadyConnectedException e) {
			e.printStackTrace();
		} 

		
		// Add coordinates listener
		gps.addCoordinatesListener(new BrickletGPS.CoordinatesListener() {
			public void coordinates(long latitude, char ns, long longitude, char ew,
			                        int pdop, int hdop, int vdop, int epe) {
				System.out.println("Latitude: " + latitude/1000000.0);
				System.out.println("Longitude: " + longitude/1000000.0);
				System.out.println("");
			}
		});
		
		
		// Add motion listener
		gps.addMotionListener(new BrickletGPS.MotionListener() {
			public void motion(long course, long speed) {
				System.out.println("Course: " + course);
				System.out.println("Speed: " + speed);
				System.out.println("");
			}
		});
		
		// Add date listener
		// 195923568 means 19:59:23.568 as Time.
		gps.addDateTimeListener(new BrickletGPS.DateTimeListener() {
			public void dateTime(long date, long time) {
				String ti = Long.toString(time);
				while(ti.length()<9){  //to fill missing 0's at the head of the string
					ti = "0" + ti;
				}
				System.out.println("Time: " + ti.substring(0, 2) + ":" + ti.substring(2, 4) + ":" + ti.substring(4, 6) + "." + ti.substring(6));
			}
		});
				

		try{
		// Set period for callbacks to 0.1s (100ms)
		// Note: The callbacks are only called every 0.1 second
		//       if the coordinates has changed since the last call!
		gps.setCoordinatesCallbackPeriod(100);
		gps.setMotionCallbackPeriod(100);
		gps.setDateTimeCallbackPeriod(100);

		System.out.println("Press key to exit"); System.in.read();
		ipcon.disconnect();
		}catch (NotConnectedException e) {
			System.out.println("No Connection");
		}catch (TimeoutException e){
			System.out.println("Timeout");
		}catch (IOException e){
			//do nothing
		}
	}
}
