Мой сервер BLE постоянно измеряет значение датчика и отправляет уведомление с 20-байтовыми пользовательскими данными после каждого измерения. Цель состоит в том, чтобы создать как можно большую пропускную способность.
На стороне клиента значение, отправленное сервером, принимается и обрабатывается.
rxBleConnection.setupNotification(setDescriptorEnableNotification(characteristic))
.flatMap(notificationObservable -> notificationObservable)
.observeOn(Schedulers.newThread())
.buffer(1)
.subscribe(bytes -> {
onNotificationReceived(bytes, buffer);
} , throwable -> {
// Handle an error here.
onNotificationSetupFailure(throwable);
}
);
Если я установлю Connection intervall на 11,25 мс, я получу все значения. Однако, если я устанавливаю интервал соединения на 30 мс, я получаю несколько значений, а затем соединение закрывается.
В журнале Android я вижу следующее сообщение:
Статус BleGattException = 8 (0x8), bleGattOperationType = BleGattOperation {description = 'CONNECTION_STATE'
Почему соединение прерывается и что послужило причиной?
С помощью BLE Sniffer это не узнать. Установленные параметры соединения принимаются и начинается передача. Внезапно передача обрывается и появляется сообщение об ошибке.