X
xpate
Gast
Guten Morgen
Ich habe da ein kleines Problem und hoffe Ihr könnt mir dabei helfen das zu lösen.
Ich habe einen GPS Empfänger via serieller Schnittstelle an meinem Laptop angeschlossen und die Daten, die der GPS Empfänger sendet frage ich ab und möchte einige der Zeichen ausgeben.
Der GPS Empfänger nutzt das NMEA Protokoll und ich frage nur die GPGGA Rahmen ab. Den Rest ignoriere ich vor erst.
Das funktioniert auch größtenteils. Nur leider ist die Ausgabe nicht so, wie ich sie mir vorstelle. Die ersten Zeichen in der Ausgabe werden noch richtig dargestellt, der Rest leider nur als Viereck. Wenn ich mir einen Breakpoint setze und das Programm langsam durchlaufen lasse, werden zwar mehr Zeichen dargestellt, aber auch nicht alle.
Ist das nun ein Fehler im Code oder ein Fehler von Eclipse?
Hier der Programmcode:
Ist alles nur Quick n Dirty Soll nur grob die Funktion testen das Programm. Wird später komplett anders ablaufen.
Danke und Gruß Jan
Edit: Habe leider vergessen den Screenshot zu posten.
Hier ist er:
Ich habe da ein kleines Problem und hoffe Ihr könnt mir dabei helfen das zu lösen.
Ich habe einen GPS Empfänger via serieller Schnittstelle an meinem Laptop angeschlossen und die Daten, die der GPS Empfänger sendet frage ich ab und möchte einige der Zeichen ausgeben.
Der GPS Empfänger nutzt das NMEA Protokoll und ich frage nur die GPGGA Rahmen ab. Den Rest ignoriere ich vor erst.
Das funktioniert auch größtenteils. Nur leider ist die Ausgabe nicht so, wie ich sie mir vorstelle. Die ersten Zeichen in der Ausgabe werden noch richtig dargestellt, der Rest leider nur als Viereck. Wenn ich mir einen Breakpoint setze und das Programm langsam durchlaufen lasse, werden zwar mehr Zeichen dargestellt, aber auch nicht alle.
Ist das nun ein Fehler im Code oder ein Fehler von Eclipse?
Hier der Programmcode:
Code:
import java.io.*;
import java.util.*;
import gnu.io.*;
public class GPSAblauf implements Runnable, SerialPortEventListener {
static CommPortIdentifier portId;
static CommPortIdentifier saveportId;
static Enumeration portList;
InputStream inputStream;
SerialPort serialPort;
Thread readThread;
static String messageString = "Test";
static OutputStream outputStream;
static boolean outputBufferEmptyFlag = false;
public static void main(String[] args) {
boolean portFound = false;
String defaultPort;
defaultPort = "COM1";
/*String osname = System.getProperty("os.name","").toLowerCase();
if ( osname.startsWith("windows") ) {
// windows
defaultPort = "COM1";
} else if (osname.startsWith("linux")) {
// linux
defaultPort = "/dev/ttyS0";
} else {
System.out.println("Dein Betriebssystem wird nicht unterstützt");
return;
}*/
if (args.length > 0) {
defaultPort = args[0];
}
System.out.println("Standard Port: "+defaultPort);
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
if (portId.getName().equals(defaultPort)) {
System.out.println("Gefundener Port: "+defaultPort);
portFound = true;
GPSAblauf reader = new GPSAblauf();
}
}
}
if (!portFound) {
System.out.println("Serielle Schnittstelle: " + defaultPort + " nicht gefunden.");
}
}
public void initwritetoport() {
try {
outputStream = serialPort.getOutputStream();
} catch (IOException e) {}
try {
serialPort.notifyOnOutputEmpty(true);
} catch (Exception e) {
System.out.println("Fehler");
System.out.println(e.toString());
System.exit(-1);
}
}
/*
public void writetoport() {
System.out.println("Writing \""+messageString+"\" to "+serialPort.getName());
try {
outputStream.write(messageString.getBytes());
} catch (IOException e) {}
}
*/
public GPSAblauf() {
try {
serialPort = (SerialPort) portId.open("SimpleReadApp", 4800);
} catch (PortInUseException e) {}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {}
try {
serialPort.addEventListener(this);
} catch (TooManyListenersException e) {}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(4800, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
readThread = new Thread(this);
readThread.start();
}
public void run() {
initwritetoport();
try {
while (true) {
//writetoport();
Thread.sleep(1000);
}
} catch (InterruptedException e) {}
System.out.println("Keine Verbindung vorhanden");
}
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
try {
byte[] readBuffer = new byte[71];
while (inputStream.available() > 0) {
int input = inputStream.read(readBuffer);
if (input == -1)
break;
//System.out.println("Read " + input + "characters");
int nn = input;
for (int i=0; i<Math.min(readBuffer.length, input); i++)
{
if (readBuffer[i] == 0)
{
nn = i;
break;
}
}
byte[] toprint = new byte[nn];
for (int i=0; i<nn; i++)
toprint[i] = readBuffer[i];
}
String result = new String(readBuffer);
boolean test = result.startsWith("$GPGGA");
boolean test1 = result.startsWith("\n$GPGGA");
char[] rahmen = new char[5];
result.getChars(1, 1 + 5, rahmen, 0);
String result1 = new String(rahmen);
char[] uhr = new char[2];
result.getChars(7, 7 + 2, uhr, 0);
String result2 = new String(uhr);
char[] uhr2 = new char[2];
result.getChars(9, 9 + 2, uhr2, 0);
String result3 = new String(uhr2);
char[] uhr3 = new char[2];
result.getChars(11, 11 + 2, uhr3, 0);
String result4 = new String(uhr3);
char[] breitengrad = new char[8];
result.getChars(14, 14 + 2, breitengrad, 0);
String result5 = new String(breitengrad);
if (test) {
System.out.println(result);
System.out.println("Rahmen: " + result1 + ", Uhrzeit: " + result2 + ":" + result3 + ":" + result4 + ", Breitengrad: " + result5);
}
else if (test1) {
System.out.println(result);
System.out.println("Rahmen: " + result1 + ", Uhrzeit: " + result2 + ":" + result3 + ":" + result4 + ", Breitengrad: " + result5);
}
else
System.out.println(result.length());
} catch (IOException e) {}
break;
}
}
}
Danke und Gruß Jan
Edit: Habe leider vergessen den Screenshot zu posten.
Hier ist er: