| |||||||
Das Thema "Bluetooth empfang, RFCOMM" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 01.12.2011
Beiträge: 20
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
| Ich brauch mal eine Hilfe. Ich habe mir eine Bluetoothverbindung aufgebaut vom Android nach BT222. Das senden geht wunderbar. Beim empfangen lass ich es über ein Thread laufen, im Handler schiebe ich den Empfangendenstring an einer Textbox, nach jeder Message wird eine neue Zeile angefangen. Nun habe ich das Problem, wenn ich zb "Hallo" empfange, steht nach jeder 2-3 Messege mal *Ha* neue zeile, *llo*. Es wird also schon ein Handler abgearbeitet, obwohl der string noch nicht komplett ist, wie kann ich zb nach x Zeichen den Handler starten lassen oder nach definierten Steuerzeichen? Wie sollte ich sonst damit weiterarbeiten können, wenn ich nie weiß ob die Message komplett ist und nicht aufgeteilt wurd? Senden vom BT222 aus tue ich momentan mit dem PC, das soll nachher der Mikrocontroller übernehmen. Hat einer auch eine Idee wie ich die Daten am besten Manage zum weiterverarbeiten? Beim Mikrocontroller lass ich mir die zu empfangen zeichen als 1.Byte angeben und das 2.Byte wär die Art der Message. Bin noch nicht ganz so Fit mit Java und ich finde nur wenig Infos über dieses Thema. *Datenverarbeitung über Serial* |
| | |
| | #3 (permalink) |
| Moderator Modell: Galaxy Note, Galaxy S, Galaxy Tab 7.7 Registriert seit: 21.09.2010
Beiträge: 7.738
Abgegebene Danke: 155
Erhielt 2.544 Danke für 1.566 Beiträge
|
Bluetooth arbeitet asynchron. Du kannst dich niemals darauf verlassen, dass ein String vollständig ankommt. Genau so kann es passieren, dass du den Beginn des nächsten Strings noch am Ende des vorhergehenden präsentiert bekommst. Also anstatt "Hallo Kurt" empfängst du "Hallo Ku rt" Eine serielle Bit-Pipe, wie es ein RFCOMM Kanal ist, eignet sich nicht, rein transparent paketvermittelte Daten auszutauschen. Du brauchst auf jeden Fall ein Protokoll drumherum, aus dem die Konstellation der Pakete ermitteln kannst. Entweder schickst du einen Header vorweg, der u.a. eine Längeninformation enthält, oder du sendest definierte Delimiter-Bytes, die du in der Payload escapest (wie z.B. SLIP es macht).
__________________ Ich trinke gern einen Kaffee: Spende 500 MB Dropbox Speicher zusätzlich für Neuanmeldungen: DropBox Anmeldung Kein technischer Support per PN! Benutzt das Forum. Für administrative Dinge könnt ihr mich aber jederzeit auch per PN ansprechen. Forumregeln - wichtige Funktionen - Galaxy Note FAQ |
| | |
| | #4 (permalink) |
| Android-Hilfe.de Mitglied Modell: Nexus S Registriert seit: 30.09.2011
Beiträge: 137
Abgegebene Danke: 8
Erhielt 35 Danke für 33 Beiträge
| Wenn ich deine Frage richtig verstanden habe, ist das der Punkt bei dem du Hilfe brauchst. Wobei ich nicht so ganz verstehe wo das genau Problem hier liegt. Auf den ersten Blick ist die Antwort auf dein Problem: Alles Zwischenspeichern was ankommt bis X Zeichen da sind und dann erst den Handler auslösen. Oder hab ich was übersehen?
|
| | |
| | #5 (permalink) |
| Neuer Benutzer Registriert seit: 01.12.2011
Beiträge: 20
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hmm genau an diesen Punkt habe ich mein Problem, wie kann ich den Heater starten lassen, wenn er eine bestimmte Anzahl an Packeten empfangen hat? Kann mir einer ein Beispiel Protokol, ein sehr einfaches *zb Byte0=Anzahl der Data-Byte, Byten=Databyte* geben? |
| | |
| | #6 (permalink) |
| Moderator Modell: Galaxy Note, Galaxy S, Galaxy Tab 7.7 Registriert seit: 21.09.2010
Beiträge: 7.738
Abgegebene Danke: 155
Erhielt 2.544 Danke für 1.566 Beiträge
|
Ja, so kannst du es machen. Ein Byte am Anfang mit einer Längeninformation, dann die eigentliche Payload. Dann weißt du, auf wie viele Bytes du warten musst. Und wenn die alle da sind, kommt wieder eine Längeninformation.
__________________ Ich trinke gern einen Kaffee: Spende 500 MB Dropbox Speicher zusätzlich für Neuanmeldungen: DropBox Anmeldung Kein technischer Support per PN! Benutzt das Forum. Für administrative Dinge könnt ihr mich aber jederzeit auch per PN ansprechen. Forumregeln - wichtige Funktionen - Galaxy Note FAQ |
| | |
| | #7 (permalink) |
| Neuer Benutzer Registriert seit: 01.12.2011
Beiträge: 20
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Ich habe mir das mal angeschaut. Also ich Empfange ein paar Daten, das Programm geht in sein Thread, arbeitet es ab und meldet es dem Threader, wo ich es weiter verarbeiten kann. Nun.. wie kann ich das erreichen das er mir bei x Bytes den Thread auslöst? Ich hole mir ja bei jedem Thread die Daten neu und überschreibe die alten Daten ja. Werden die Variables beim Thread jedesmal neu erzeugt oder bleiben die erhalten, samt Inhalt? |
| | |
| | #8 (permalink) |
| Neuer Benutzer Registriert seit: 01.12.2011
Beiträge: 20
Abgegebene Danke: 1
Erhielt 0 Danke für 0 Beiträge
|
Hier mal meine *Empfangsroutine*, ich programmiere normalerweise in C und für Mikrocontroller, daher könnte der Kode etwas komisch wirken. Leider bekomme ich immer nur 0 raus, egal ob ich die Globale Uart_buffer nehm oder die Lokale buffer_tmp. Code: while (true) {
try {
Datan++;
// Read from the InputStream
bytes = mmInStream.read(buffer);
if(Uart_bytes <5)//noch nicht alles empfangen
{
for(int n=0; bytes<n; n++)
{
Uart_buffer[n+Uart_bytes] = buffer[n];
}
Uart_bytes +=bytes;
}
if(!(Uart_bytes <5))
{
mHandler.obtainMessage(MESSAGE_READ, Uart_bytes, -1, Uart_buffer).sendToTarget();
Uart_bytes=0;
}
} catch (IOException e) {
break;
}
}
} Ahh hab den Fehler, hatte bei der Forschleife die </> vertauscht, nun geht es. Geändert von molleb (10.02.2012 um 15:37 Uhr) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sourcecode für Bluetooth RFCOMM | enrem | Android App Entwicklung | 7 | 26.09.2011 16:29 |
| Empfang/Versand von APK Dateien über Browser/Bluetooth | MaGiXeN | Motorola Defy Forum | 15 | 17.07.2011 20:18 |
| Bestätigung Bluetooth Empfang | ben-g. | Nexus S Forum | 0 | 12.04.2011 09:45 |
| Bluetooth APP RFCOMM weiter funktionen | deranfaenger | Android App Entwicklung | 1 | 18.01.2011 10:26 |
| Bluetooth - RFCOMM - Dateitransfer | poeschi | Android App Entwicklung | 7 | 21.06.2010 11:14 |