2017-05-03 2 views
1

Ich habe ein einfaches Programm in Java auf meinem Raspberry Pi 3 geschrieben. Was es tut ist im Grunde spielt Animationen und Sounds auf einem Fernseher, und die Eingabe es empfängt zu wissen, was zu spielen ist, werden von einem Android-Tablet mit Bluetooth gesendet.Bluetooth mit Raspberry Pi 3 in Java: mein BufferedReader hängt beim Empfangen von vielen Daten

Auf der Tablet-Seite habe ich ein paar Schieberegler (zB: Lautstärke), die Daten über Bluetooth senden, wenn sie geändert werden. Die Tablette fungiert als Server und der Code sieht wie folgt aus:

final BluetoothSocket clientSocket = bluetoothServerSocket.accept(); 
InputStream is = clientSocket.getInputStream(); 
OutputStream os = clientSocket.getOutputStream(); 
bufIn = new BufferedReader(new InputStreamReader(is)); 
bufOut = new BufferedWriter(new OutputStreamWriter(os)); 

Und wann immer ich will, Daten senden, ich die folgenden in einem anderen Thread:

bufOut.write("<message>blabla</message>"); 
bufOut.flush(); 

Wenn ich jedoch die Schieber bewegen Frenetisch stoppt das Programm irgendwann bei bufOut.flush();. Mein Gedanke dabei ist, dass das andere Ende des Sockets auf dem RPi voll ist und das Tablet keine weiteren Daten senden kann.

Also, auf der RPI ich BlueCove Bibliothek verwende und den Code ich habe sieht wie folgt aus:

connection = (StreamConnection) Connector.open(serviceInDevice); 
is = connection.openInputStream(); 
os = connection.openOutputStream(); 
bufIn = new BufferedReader(new InputStreamReader(is)); 
bufOut = new BufferedWriter(new OutputStreamWriter(os)); 

Und zum Empfangen von Daten, ich folgendes auf einem anderen Thread:

while(true) { 
    String readLine = bufIn.readLine(); 
    //Process data... 
} 

Hier, nach einem Slider-Raserei, nur wenn das Tablet auf seiner flush() Funktion hängt, hängt das Programm auf readLine(). Ich habe versucht, den Zustand von bufIn zu testen, sobald es scheint, stecken, mit einem anderen Thread und tun System.out.println(bufIn.ready()), aber der Thread hängt auch in dieser Zeile. Ich habe auch is asynchron is.available() durch den Aufruf zu testen, um den Zustand des input versucht, aber der Rückgabewert ist immer 0.

ich versucht habe, die BufferedReaders und BufferedWriters zu manipulieren Ändern direkt die OutputStream und InputStream, aber das Problem bleibt .

Hinzufügen eines Schlafes auf dem sendenden Teil, um das Übersenden zu vermeiden, ist keine Option, weil ich auch Audiodaten zum RPi senden muss und im Grunde eine Menge Sachen.

Gibt es ein bekanntes Problem mit Bluetooth auf dem RPi, oder fehlt mir etwas?

Danke

Antwort

0

Ok Ich habe den Grund, warum die Bluetooth meiner RPi gefriert gefunden. Die Antwort war für andere vielleicht nicht sehr hilfreich, aber ich benutzte VNC, um die Ausgabe meiner Raspberry auf meinem Computer zu sehen, und sobald ich aufhörte, VNC zu benutzen, verschwand das Problem. Also, wenn jemand sich fragt, VNC und Bluetooth gleichzeitig auf dem RPi wird nicht empfohlen: p

Verwandte Themen