Forum: PC-Programmierung [Java] Bluetooth <-> BTM222


von Christian J. (stormracer)


Angehängte Dateien:

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

von Läubi .. (laeubi) Benutzerseite


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!

von Christian J. (stormracer)


Lesenswert?

Danke für deine Antwort,
für den Programmierstil muss ich mich entschuldigen. Das meiste ist 
durch zusammenkopieren entstanden. Wenn du Tipps für Verbesserungen 
hast, wäre ich sehr dankbar.
Habe gerade festgestellt, das die ganze Methode servicesDiscovered() 
überhaupt nicht ausgeführt wird. Weshalb auch immer...

von Läubi .. (laeubi) Benutzerseite


Angehängte Dateien:

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.

von Christian J. (stormracer)


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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Fürs erste kannst du am ende der main Methode ein
1
while(true) {
2
Thread.yield();
3
}
 Einfügen, dann mußt du das ganze nur mittels Str+C oder in Eclipse 
mittels des "Abbrechen Buttons" beenden, sollte für erste Tests aber 
ausreichend sein.
Eventuell mußt du dich an den Geräten erst authentifizieren?

von Christian J. (stormracer)


Lesenswert?

Hallo,
danke für die schnelle Antwort.
Ich habe noch ein Sleep(100) mit eingefügt, damit die CPU nicht so viel 
zu tun hat.

Jetzt versuche ich noch den Fehler zu finden. Hast du da auch eine Idee?

Christian

von Läubi .. (laeubi) Benutzerseite


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...?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.