Что такое "надежная запись" в BLE?

В Android BLE API ( BluetoothGatt) есть методы, которые имеют дело с надежной записью:

public boolean beginReliableWrite ()

public void abortReliableWrite (BluetoothDevice mDevice)

public boolean executeReliableWrite ()

Для этого также существует функция обратного вызова (в BluetoothGattCallback):

public void onReliableWriteCompleted (BluetoothGatt gatt, int status)

Я не могу найти никакой документации по этому вопросу. Что это? Чем он отличается от "нормальных" (ненадежных?) Записей?

1 ответ

Решение

Надежная запись позволяет проверять переданные значения и атомарное выполнение одного или нескольких переданных сообщений.

Хорошее объяснение надежной процедуры записи можно найти в документации BLE Mozillas Boot 2 Gecko Project. Несмотря на то, что он предназначен для JavaScript описание beginReliableWrite() в частности, очень полезно для понимания процесса:

Как только была инициирована надежная транзакция записи, все вызовы Feature.writeValue() отправляются на удаленное устройство для проверки и помещаются в очередь для атомарного выполнения. Обещание, содержащее записанное значение, возвращается в ответ на каждый вызов attribute.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) Перезвоните.

Другие вопросы по тегам