mikrocontroller.net

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


Autor: Christian J. (stormracer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
Address: 904CE5FECD0A
Name: Ubuntu-0
Starting device inquiry...
Device Inquiry Completed. 
Bluetooth Devices: 
1. 00126F09B37D (Chris)
2. 0022FC4CEE3F (E51)
Choose Device index: 1

Searching for service...
Device does not support Simple SPP Service.
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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
connectionURL=servRecord[0].getConnectionURL(0,false);

mal alle Records ausgeben lassen?

btw:
synchronized(lock){
 lock.wait();
}
Wozu willst du hier einen synchrone Zugriff machen? scheint mir doch 
sehr suspekt... im dümmsten Falle handelst du dir so einen DeadLock ein!

Autor: Christian J. (stormracer)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian J. (stormracer)
Datum:

Bewertung
0 lesenswert
nicht 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:
Starte SSP Test...
BlueCove version 2.1.0 on bluez
Address:  904CE5FECD0A
Name:  Ubuntu-0
Suche Geräte mit Modus: 10390323
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()"
Starte SSP Test...
BlueCove version 2.1.0 on bluez
Address:  904CE5FECD0A
Name:  Ubuntu-0
Suche Geräte mit Modus: 10390323
Ein Gerät wurde gefunden: E51 (0022FC4CEE3F), MajorClass: 0x200, MinorClass: 0xc
Ein Gerät wurde gefunden: Chris (00126F09B37D), MajorClass: 0x1f00, MinorClass: 0x0
Gerätesuche: Die Suche wurde beendet mit folgendem Ergebnis: COMPLETED/SUCCESS (Code: 0)
Suche Services für Gerät E51
Suche Services für Gerät Chris
Gerät E51: Die Suche wurde beendet mit folgendem Ergebnis: ERROR/UNKNOWN/NOTREACHABLE (Code: 3)
Gerät Chris: Die Suche wurde beendet mit folgendem Ergebnis: ERROR/UNKNOWN/NOTREACHABLE (Code: 3)
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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fürs erste kannst du am ende der main Methode ein
while(true) {
Thread.yield();
}
 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?

Autor: Christian J. (stormracer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja die Doku sagt: "Indicates the service search terminated with an 
error"...

Du könntest folgendes einfügen...
 for (final RemoteDevice device : devices) {
            try {
                if (device.authenticate()) {
                    System.out.println("Auth OK");
                } else {
                    System.out.println("Auth fail!");
                }
                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
    break;
            } catch (IOException e) {
 einfügen eventuell mag er es nicht das du zwei Geräte gleichzeitig 
abrufst...?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.