T
tuxedo
Gast
Hallo zusammen,
habe folgendes Problem:
ich soll ein Navigationstool das per serielle Schnittstelle NMEA-Daten einliest erweitern und verbessern. Den Empfänger den ich dazu bekommen habe schließt man per USB an. Der mitgelieferte Treiber simuliert einen Com-Port auf den das Java-Tool per javax.comm-API auf die Scnittstele zugreift und die Daten liest.
Das geht soweit ziemlich gut.
Nur soll das Programm ja auch mit anderen Empfängern umgehen können. Testweise habe ich meinen eigenen GPS-Empfänger angeschlossen. Dieser ist jedoch ein Bluetooth-GPS Empfänger der mittels Bluetooth-USB-Stick an den echner gekoppelt wird. Auch hier simuliert der Treiber einen COM-Port.
Beide Empfänger zeigen in "HyperTerminal" die NMEA-Sätze korrekt an. Nur der Bluetooth-Empfänger macht in Java Probleme.
Hier mal ein kurzer Ausschnitt der gelesenen NMEA-Sätze.
Zuerst der kabelgebundene USB-Empfänger:
und hier das Ergebnis mit dem Bluetooth-Empfänger:
Warum da ab und zu Exceptions auftreten weiß ich nicht. Funktioniert jedoch soweit auch mit den Exceptions.
Hier noch n kurzer Code-Ausschnitt:
Dieser codeteil wird bei jedem SerelEvent ausgelöst. Also immer wenn Daten anliegen.
Hat jemand ne Ahnung woran das liegen könnte ? In anderen Programmen funktionieren die Empfänger beide gleich gut. Nur Java mag den Bluetooth-Empfäger nicht.
Gruß
Alex
habe folgendes Problem:
ich soll ein Navigationstool das per serielle Schnittstelle NMEA-Daten einliest erweitern und verbessern. Den Empfänger den ich dazu bekommen habe schließt man per USB an. Der mitgelieferte Treiber simuliert einen Com-Port auf den das Java-Tool per javax.comm-API auf die Scnittstele zugreift und die Daten liest.
Das geht soweit ziemlich gut.
Nur soll das Programm ja auch mit anderen Empfängern umgehen können. Testweise habe ich meinen eigenen GPS-Empfänger angeschlossen. Dieser ist jedoch ein Bluetooth-GPS Empfänger der mittels Bluetooth-USB-Stick an den echner gekoppelt wird. Auch hier simuliert der Treiber einen COM-Port.
Beide Empfänger zeigen in "HyperTerminal" die NMEA-Sätze korrekt an. Nur der Bluetooth-Empfänger macht in Java Probleme.
Hier mal ein kurzer Ausschnitt der gelesenen NMEA-Sätze.
Zuerst der kabelgebundene USB-Empfänger:
Code:
$GPGSA,A,1,,,,,,,,,,,,,50.,50.0,50.0*05
$GPRMC,001603.936,V,0000.000,N,00000.0000,E,,,101102,,*1F
GPGRMC-Satz Empfangen.
$GPGGA,001604.9360000.0000,N,00000.0000,E,0,00,50.0,0.0,Error beim öffenen der Connection: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
M,18.M,0.0,0000*40
GPGGA-Satz Empfangen.
$GPGSA,A,1,,,,,,,,,,,,,50.050.0,50.0*05
$GPRMC,001604.936,V,0000.0000,N,00000.0000,E,,,10112,,*18
GPGRMC-Satz Empfangen.
$GPGGA,001605.936,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,18.0,M,0.0,0000*41
GPGGA-Satz Empfangen.
und hier das Ergebnis mit dem Bluetooth-Empfänger:
Code:
$G.0V,30$GError beim öffenen der Connection: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
$G.0C2$G.0C2$P00C2$G.0V,303050$G.0C2$G.0C1$GM0C1
Warum da ab und zu Exceptions auftreten weiß ich nicht. Funktioniert jedoch soweit auch mit den Exceptions.
Hier noch n kurzer Code-Ausschnitt:
Code:
public void readNMEASentence(){
byte[] readBuffer = new byte[20];
int numBytes=0; //???
try {
while (inputStream.available() > 0) {
numBytes = inputStream.read(readBuffer);
}
String line = new String(readBuffer);
int zz = Unsigned(readBuffer[0]);
char a = (char)zz;
System.out.print(a); // hier wird der Satzteil ausgegeben
// Auf Satzanfang warten.
if(wait==true){
switch(a){
case 0x0a: //0x0a ist eine dezimale 10, welche lt. Ascii-Tabelle ein LineFeed ist
// Hier ist nun ein Vollständiger Satz angekommen.
//System.out.println("LineFeed gefunden");
switch(idOkay){
case 1:
g.setSatz(satz);
idOkay=0;
System.out.println("GPGGA-Satz Empfangen.");
break;
case 2:
r.setSatz(satz);
idOkay=0;
System.out.println("GPGRMC-Satz Empfangen.");
break;
default:
break;
}
satz="";
wait=false;
break;
default:
satz+=a;
if(satz.equals("GPGGA")) idOkay=1;
if(satz.equals("GPRMC")) idOkay=2;
break;
}
}
if(a=='$') wait=true;
} catch (IOException e) {
System.out.println(e);
}
}
Dieser codeteil wird bei jedem SerelEvent ausgelöst. Also immer wenn Daten anliegen.
Hat jemand ne Ahnung woran das liegen könnte ? In anderen Programmen funktionieren die Empfänger beide gleich gut. Nur Java mag den Bluetooth-Empfäger nicht.
Gruß
Alex