2014-06-30 4 views
10

In Android BLE API (BluetoothGatt) gibt Methoden, die mit zuverlässig schreibt beschäftigen:Was ist "zuverlässiges Schreiben" in BLE?

public boolean beginReliableWrite() 

public void abortReliableWrite (BluetoothDevice mDevice) 

public boolean executeReliableWrite() 

Es gibt auch einen Rückruf für sie (in BluetoothGattCallback):

public void onReliableWriteCompleted (BluetoothGatt gatt, int status) 

kann ich nicht finde dazu irgendeine Dokumentation. Was ist es? Wie unterscheidet es sich von "normalen" (unzuverlässigen?) Schreibvorgängen?

+0

können Sie bitte meine Antwort abwählen und bottersb antwort akzeptieren? – Paulw11

+0

ok, ich habe es geändert –

Antwort

45

Zuverlässiger Schreibvorgang ermöglicht die Überprüfung zurück übertragener Werte und die atomare Ausführung von einer oder mehreren übertragenen Nachrichten.

Eine gute Erklärung des zuverlässigen Schreibverfahrens finden Sie in der BLE part of Mozillas Boot 2 Gecko Project documentation. Auch wenn es die Beschreibung des beginReliableWrite() insbesondere für JavaScript gemeint ist sehr hilfreich für das Verständnis des Prozesses:

Sobald eine zuverlässige Schreibtransaktion eingeleitet wurde, um alle Anrufe an characteristic.writeValue() auf dem Remote-Gerät gesendet für Verifikation und für atomare Ausführung in die Warteschlange gestellt. Ein Versprechen, dass den geschriebenen Wert trägt, wird als Antwort auf jeden characteristic.writeValue() -Aufruf zurückgegeben und die Anwendung ist verantwortlich für die Überprüfung, ob der Wert genau übertragen wurde. Nach wurden alle Merkmale in die Warteschlange gestellt und verifiziert, executeReliableWrite() führt alle Schreibvorgänge aus. Wenn ein Merkmal nicht korrekt geschrieben wurde, bricht der Aufruf von abortReliableWrite() die aktuelle Transaktion ab, ohne Werte auf dem Remote-Gerät LE zu übergeben.

Sie beginnen, um die zuverlässige Schreib,

gatt.beginReliableWrite(); 

den Wert der Kennlinie eingestellt und es schreiben.

characteristic.setValue(value); 
gatt.writeCharacteristic(characteristic); 

Der writeCharacteristic() Anruf wird seine 'normalen' Rückruf auslösen. Der Parameter characteristic enthält den eigentlichen, geschrieben Wert, der überprüft werden kann:

@Override 
public void onCharacteristicWrite(BluetoothGatt gatt, 
       BluetoothGattCharacteristic characteristic, 
       int status) { 
    ... 

    if(characteristic.getValue() != value) { 
     gatt.abortReliableWrite(); 
    } else { 
     gatt.executeReliableWrite(); 
    } 

    ... 
} 

die zuverlässige Schreib Executing die onReliableWriteCompleted (BluetoothGatt gatt, int status) Rückruf auslösen.

Erste Antwort auf StackOverflow, hoffe jemand findet es hilfreich.

+0

characteristic.getValue()! = Wert vergleicht nicht den Inhalt, sondern die Speicheradressen der Arrays, was falsch ist. Wie auch immer, zuverlässige Schreibvorgänge in Android sind derzeit nicht möglich, da getValue() den vom Server gesendeten Wert nicht zurückgibt, was gegen die Dokumentation spricht. – Emil

Verwandte Themen