2013-01-24 3 views
5

Ich plane ein Kommunikationsprotokoll zwischen einem Android-Gerät und einem benutzerdefinierten Sensor, der ein kommerzielles Bluetooth-Modul verwenden würde. Ich würde das SPP-Profil verwenden, das dem Benutzer "ähnlich wie TCP" einen einfachen und zuverlässigen Datenstrom bietet. "Bluetooth Android RFCOMM/SPP Fehlerbehandlung Vorschläge

Ich bin nicht so vertraut mit der Bluetooth-Technologie und habe einige Fragen über das Entwerfen eines solchen Protokolls.

Zunächst einmal ist es mir nicht klar, wenn ich mir Sorgen machen muss, dass korrupte Daten übertragen werden oder nicht. Wird mir der zugrundeliegende Protocol-Stack garantieren, dass die Bytes, die ich von Android InputStream gelesen habe, die gleichen sind, die der UART auf der Sensorseite empfängt? Muss ich meine eigenen Datenpakete definieren, die mit CRC oder anderem geschützt sind, oder wäre es zu viel?

Es ist mir aus der Android Bluetooth Dokumentation nicht klar, was in meiner Anwendung passiert, wenn das Signal schwach ist und für eine Weile verloren geht. Bekomme ich sofort IOException oder die Plattform bietet mir eine versteckte Fehlerbehandlung und Wiederherstellung, die solche kurzen Ausfälle für mich unsichtbar machen würde?

Vielen Dank für jeden Hinweis.

Antwort

10

Sie müssen sich keine Sorgen über Datenkorruption über SPP machen, Bluetooth bietet 2 CRC-Stufen, eine im Basisband und eine auf der L2CAP-Ebene, Beide haben einen Mechanismus zur erneuten Übertragung für alle erkannten Verfälschungen - daher erhalten Anwendungen nur gute Pakete . Über die zweite Frage - Ja, auf den Socket-Streams, mit denen Sie verbunden sind, erhalten Sie IOExceptions, wenn die zugrundeliegenden Bluetooth-Verbindungen getrennt werden. Android kann die automatische Wiederherstellung nicht verarbeiten. In der Regel müssen Anwendungen den Grund für die Trennung erkennen und versuchen, verbinden wie zutreffend. Wenn Sie also Ihren Datenaustausch von dem Punkt fortsetzen möchten, an dem Sie zuletzt erfolgreich empfangen/gesendet haben, dann sollte Ihre Anwendung eine Art von Sequenznummer und Lichtprotokoll pflegen, um einen Lebenslauf zu erhalten. Die andere Möglichkeit besteht darin, einfach mit dem Datenaustausch zu beginnen (es hängt von Ihrem Anwendungsfall ab)

+0

Vielen Dank, diese Antwort ist sehr klar und deckt alles ab, was ich wissen wollte. – jabal

+0

Gern geschehen –