Что такое "надежная запись" в 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)
Перезвоните.