Нечастое/непоследовательное обновления устройства BLE без CDMAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Нечастое/непоследовательное обновления устройства BLE без CDM

Сообщение Anonymous »

Я не слишком знаком с разработкой Bluetooth или Android, поэтому, пожалуйста, простите меня, если моя терминология не на месте! Плагин обрабатывает подключение/подписание/опрос Bluetooth (LE) -тип устройства. Как можно себе представить, джойстик требует довольно высокой частоты обновлений, чтобы сделать его пригодным для приложения в реальном времени, и для поддержания приемлемого разрешения. Я могу получать более 20 обновлений в секунду, что достаточно в моем варианте использования. На квесте 3, похоже, не имеет значения, является ли устройство BLE в сочетании и подключено через настройки Bluetooth ОС, или через диспетчер компаньона (CDM), или я получаю обновления через уведомления или просто опросы/чтение характеристик ~ 20 раз в секунду. Таким образом, все, кажется, хорошо с Quest 3. На моем квесте 2, который работает V76.64 (я полагаю, Android 14), я получаю очень непоследовательные обновления как через уведомления, так и опрос/чтение, если устройство BLE подключено к каким -либо другим способам, чем CDM. Например, если я соединяю устройство через настройки Bluetooth ОС и подписываюсь на характерные обновления, кажется, что я получу кучу обновлений (около отметки ~ 20/с), но полученные данные, которые изменяются, только один раз в секунду (в основном как вторая или два задержки, когда полученные значения фактически изменяются). Единственный способ, которым я могу использовать устройство BLE на квесте 2, - это если я полностью не оставлю устройство из настройки Bluetooth (кажется, что CDM не найдет мое устройство, если оно было в паре) и следуя за отсоединение, подключая через CDM из моего приложения. Есть ли способ сделать соединение лучше без использования CDM? Также любые советы /хитрости /примечания по предмету оценены! Вызов < /p>
gatt.setCharacteristicNotification(_characteristic, bool)
gatt.writeDescriptor(_descriptor, BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)
< /code>
Вот фрагмент журналов, созданных путем непосредственного регистрации Bluetoothgattcallback.oncharacteristicchanged () после включения уведомлений: < /p>
05-01 18:51:55.560 20946 20988 I Unity : Button update: 0
05-01 18:51:55.561 20946 20988 I Unity : Lever update: 0
05-01 18:51:55.561 20946 20988 I Unity : Button update: 0
05-01 18:51:55.562 20946 20988 I Unity : Lever update: 0
05-01 18:51:55.562 20946 20988 I Unity : Button update: 0
05-01 18:51:55.562 20946 20988 I Unity : Lever update: 0
05-01 18:51:55.563 20946 20988 I Unity : Button update: 0
05-01 18:51:55.563 20946 20988 I Unity : Lever update: 0
05-01 18:51:55.563 20946 20988 I Unity : Lever update: 0
05-01 18:51:55.563 20946 20988 I Unity : Button update: 0
05-01 18:51:55.564 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.564 20946 20988 I Unity : Button update: 0
05-01 18:51:55.564 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.565 20946 20988 I Unity : Button update: 0
05-01 18:51:55.565 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.565 20946 20988 I Unity : Button update: 0
05-01 18:51:55.566 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.566 20946 20988 I Unity : Button update: 0
05-01 18:51:55.566 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.567 20946 20988 I Unity : Button update: 0
05-01 18:51:55.567 20946 20988 I Unity : Lever update: 127
05-01 18:51:55.567 20946 20988 I Unity : Button update: 0
05-01 18:51:55.567 20946 20988 I Unity : Lever update: 127
< /code>
Очевидно, что уведомления продолжают быстро приходить, однако, что изменение «рычага» с 0 до 127 произошло уже за несколько секунд назад, и оно должно было зарегистрировать диапазон значений между 0-127 (я не могу физически переместить рычаг с 0-127 в миллисекундах). Кроме того, если я никогда не включаю уведомления и просто использую характеристику с интервалом ~ 0,1 секунды, все работает нормально. < /P>
Вот обратный вызов изменения: < /p>
@Override
public void onCharacteristicChanged(@NonNull BluetoothGatt gatt, @NonNull BluetoothGattCharacteristic characteristic, @NonNull byte[] value) {
if(characteristic.equals(_readLeversOp.Characteristic())){
UnityLog("Lever update: " + value[0]);
_leverValues = value.clone();
}
else if(characteristic.equals(_readButtonsOp.Characteristic())){
UnityLog("Button update: " + value[0]);
_buttonValues = value.clone();
}
}
< /code>
Кроме того, после того, как я включил уведомления, я не могу отключить их: запись в дескриптор, чтобы отключить уведомления, приводит к тому, что статус обратного вызова ondescriptor () 17, дополнительно, время, необходимое для обратного вызова, после того, как написание в дескриптор принимает ~ 5 секунд, после чего я просто получу: < /p>

05-01 18:37:27.959 19496 19496 E DEBUG : failed to read process info: failed to open /proc/17882: No such file or directory
05-01 18:37:27.992 1351 2305 I ActivityManager: Process com.android.bluetooth (pid 17882) has died: psvc PER
05-01 18:37:27.993 1351 2305 W ActivityManager: Scheduling restart of crashed service com.android.bluetooth/.gatt.GattService in 1000ms for connection
05-01 18:37:27.993 1351 2305 W ActivityManager: Scheduling restart of crashed service com.android.bluetooth/.btservice.AdapterService in 10999ms for connection
05-01 18:37:28.420 1351 1385 I ActivityManager: Start proc 19504:com.android.bluetooth/1002 for service {com.android.bluetooth/com.android.bluetooth.btservice.AdapterService}
05-01 18:37:28.564 1351 3370 I ActivityManager: Flag disabled. Ignoring finishAttachApplication from uid: 1002. pid: 19504
05-01 18:37:33.329 1351 2305 W ActivityManager: setIsForegroundPanelService: ComponentInfo{com.oculus.vrshell/com.oculus.panelapp.qam.QuickActionsMenuPanelService} not found


Подробнее здесь: https://stackoverflow.com/questions/795 ... ithout-cdm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»