[Java] Bluetooth <-> BTM222

#1953723
Lesenswert?

Moin,

ich habe ein kleines Problem mit Java. Ich arbeite unter Linux und 
verwende die Bluevoce Lib.

Mit Hilfe von Beispielen habe ich es geschafft nach Geräten zu suchen 
und anschließend versuche ich die Dienste eines Gerätes zu finden um 
mich danach mit dem Gerät zu verbinden.

Mein Problem besteht nun darin, dass sich das Programm nicht verbindet, 
sondern den Dienst nicht findet.

Der Bluetooth Name des BTM ist "Chris"

Ausgabe der Programms:
1
Address: 904CE5FECD0A
2
Name: Ubuntu-0
3
Starting device inquiry...
4
Device Inquiry Completed. 
5
Bluetooth Devices: 
6
1. 00126F09B37D (Chris)
7
2. 0022FC4CEE3F (E51)
8
Choose Device index: 1
9

10
Searching for service...
11
Device does not support Simple SPP Service.
12
BlueCove stack shutdown completed

Im Datenblatt zum BTM steht:

SPP firmware with AT commands

Daher sollte das SPP Profil richtig sein.

Quelltext habe ich angehängt.

Seht ihr einen Fehler?

Viele Grüße
Christian Jacobsen
Angehängte Dateien:
Persönliche Seite #1953761
Lesenswert?

Mal abgesehen von dem etwas eigensinnigem Programmierstil welcher dem 
gesamtem EventSystem zuwiderläuft (ich hab jetzt nicht versucht zu 
verfolgen ob das gff. das Problem ist...), hast du dir an der Stelle:
1
connectionURL=servRecord[0].getConnectionURL(0,false);

mal alle Records ausgeben lassen?

btw:
1
synchronized(lock){
2
 lock.wait();
3
}
Wozu willst du hier einen synchrone Zugriff machen? scheint mir doch 
sehr suspekt... im dümmsten Falle handelst du dir so einen DeadLock ein!
Persönliche Seite #1953896
Lesenswert?

Christian J. schrieb:
> Weshalb auch immer...
Vermutlich wegen:
Christian J. schrieb:
> Das meiste ist
> durch zusammenkopieren entstanden.
Habe dir mal ein kleines Beispiel angehängt, leider ungetestet da ich 
kein BT und keine BT Geräte habe ;)

Du solltest auf jedenfall einen Eindruck bekommen warum die Verbindung 
möglicherweise nicht funktioniert, die Fehlercodes werden nämlich leider 
in deinem ursprünglichem Code auch nicht ausgewertet.

Habe das ganze jetzt inline gemacht damit es kompakt bleibt, Funktion 
sollte durch die Statusausgaben auch ohne Kommentare klar sein hoffe 
ich.
Angehängte Dateien:
#1956204
Lesenswert?

Hallo,
DANKE für deine Mühe. Werde aber noch ein bisschen brauchen bis ich 
alles daraus richtig verstehe.

Leider habe ich noch ein paar Probleme.
Wenn ich das ausführe bekomme ich folgende Ausgabe:
1
Starte SSP Test...
2
BlueCove version 2.1.0 on bluez
3
Address:  904CE5FECD0A
4
Name:  Ubuntu-0
5
Suche Geräte mit Modus: 10390323
6
BlueCove stack shutdown completed

Die Ausgabe erscheint auch sofort und ohne Verzögerung.

Im Debugger kommt man schon ein bisschen weiterm wenn ich nach folgender 
Zeile etwas warte: "agent.startInquiry(modus, new DiscoveryListener()"
1
Starte SSP Test...
2
BlueCove version 2.1.0 on bluez
3
Address:  904CE5FECD0A
4
Name:  Ubuntu-0
5
Suche Geräte mit Modus: 10390323
6
Ein Gerät wurde gefunden: E51 (0022FC4CEE3F), MajorClass: 0x200, MinorClass: 0xc
7
Ein Gerät wurde gefunden: Chris (00126F09B37D), MajorClass: 0x1f00, MinorClass: 0x0
8
Gerätesuche: Die Suche wurde beendet mit folgendem Ergebnis: COMPLETED/SUCCESS (Code: 0)
9
Suche Services für Gerät E51
10
Suche Services für Gerät Chris
11
Gerät E51: Die Suche wurde beendet mit folgendem Ergebnis: ERROR/UNKNOWN/NOTREACHABLE (Code: 3)
12
Gerät Chris: Die Suche wurde beendet mit folgendem Ergebnis: ERROR/UNKNOWN/NOTREACHABLE (Code: 3)
13
BlueCove stack shutdown completed

Kannst du mir sagen, wie ich es hinbekommen, das das Programm darauf 
wartet, das sie Suche beendet wird?

Die gefunden Devices sind:
E51: mein Handy
Chris: das BTM222

Christian
Persönliche Seite #1956320
Lesenswert?

Naja die Doku sagt: "Indicates the service search terminated with an 
error"...

Du könntest folgendes einfügen...
1
 for (final RemoteDevice device : devices) {
2
            try {
3
                if (device.authenticate()) {
4
                    System.out.println("Auth OK");
5
                } else {
6
                    System.out.println("Auth fail!");
7
                }
8
                final String name =
... aber wie gesagt ich hab leider nicht so die Ahnung ob das nötig ist 
die Beispiele auf der Bluecove seite geben ja leider auch nicht soooo 
viel her.
Du könntest natürlich auch nochmal ein paar andere Services versuchen...

Oder mal am Ende der listServices Methode ein
1
    break;
2
            } catch (IOException e) {
 einfügen eventuell mag er es nicht das du zwei Geräte gleichzeitig 
abrufst...?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren