什么是"可靠写"在BLE?

时间:2014-06-30 08:08:07

标签: android bluetooth-lowenergy android-bluetooth

在Android的BLE API(BluetoothGatt)中,有一些方法可以处理可靠写入

public boolean beginReliableWrite ()

public void abortReliableWrite (BluetoothDevice mDevice)

public boolean executeReliableWrite ()

还有一个Callback(在BluetoothGattCallback中):

public void onReliableWriteCompleted (BluetoothGatt gatt, int status)

我无法找到相关文档。它是什么?它与#34; normal"有什么不同? (不可靠?)写道?

1 个答案:

答案 0 :(得分:48)

可靠写入允许检查传输的一个或多个传输消息的传输值和原子执行。

可以在BLE part of Mozillas Boot 2 Gecko Project documentation中找到可靠写入程序的良好解释。尽管它适用于JavaScript,但beginReliableWrite()的描述对于理解该过程非常有帮助:

  

一旦启动了可靠的写入事务,所有的调用都会发送到   characteristic.writeValue()被发送到远程设备   验证并排队等待原子执行。一个承诺   随身携带书面值以回应每一个   characteristic.writeValue()调用和应用程序负责   用于验证值是否已准确传输。后   所有特征都已排队等待验证,   executeReliableWrite()将执行所有写操作。如果有特色   如果编写不正确,调用abortReliableWrite()将取消   当前事务没有在远程LE上提交任何值   设备

你开始可靠的写作,

gatt.beginReliableWrite();

设置特征的值并写入。

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

writeCharacteristic()调用将触发其“正常”回调。参数characteristic包含可以验证的实际写入值:

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

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

    ...
}

执行可靠写入将触发onReliableWriteCompleted(BluetoothGatt gatt, int status)回调。