Как стать автором
Обновить

Разбираемся с Bluetooth Low Energy на примере превращения USB-клавиатуры в беспроводную

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров15K
Всего голосов 76: ↑74 и ↓2+72
Комментарии76

Комментарии 76

Как правило, устройства сопрягаются только один раз, при первом соединении, после этого устройства становятся Bonded.

Существует несколько методов сопряжения (pairing methods). Какой метод сопряжения будет выбран, зависит от того, какие возможности активны у каждого из сопрягаемых устройств. Перед выбором метода сопряжения устройства обмениваются этой информацией.

Немного оффтопа - меня в блютусе сильно выбешивает, что я не могу имея два компьютера в разных местах просто приходя доставать свои наушники и пользоваться звуком. Приходится, чаще всего, удалять устройство из списка и спаривать заново. То есть кроме информации на хосте еще и запоминается информация на клиентском устройстве о том с кем была последняя связь.

Есть такое. Но некоторые периферийные устройства, например, мышь Logitech MX Master 3S может хранить информацию о нескольких хостах, и можно быстро переключаться при помощи кнопки на мыше.

В протоколе Bluetooth нет на это ограничений и поведение ваших наушников зависит от них самих. Таким образом вас выбешивает не Bluetooth, а производитель ваших наушников.

То есть кроме информации на хосте еще и запоминается информация на клиентском устройстве о том с кем была последняя связь.

Без этого никак нельзя, и хост и клиент запоминают общий секретный ключ, ведь соединение шифруется. Но как хост может помнить несколько клиентов, так и клиент несколько хостов.

На клиенте может быть реализовано переключение между известными хостами. Может быть и одновременное подключение. Наушники могут автоматически переключаться на тот хост, где есть звук.

Дело за малым, найти наушники, которые это умеют. Обычно такой функционал называется Bluetooth Multipoint.

По моим ощущениям, большинство производителей блютусовских устройств используют именно такую реализацию, с невозможностью привязать девайс к двум более компьютерам или телефонам. Если так делают большинство - значит что-то в стандарте подтолкнуло их сделать именно так. Или не помешало сделать так ;)

Реализация дополнительного функционала требует дополнительных затрат. Производители ориентируется в основном на массовый базовый вариант.

Обычно, все-таки, на сколько-нибудь современных устройствах запоминается несколько ключей, и устройство достаточно отключить от одного компьютера программно, и подключить к другому.
Иногда, чтобы устройство не пыталось до умопомрачения присоединиться к первому устройству — на нем приходится отключать BT — например, на планшетной клавиатуре Thinkpad. Китайские уши DJ-881 умеют держать два соединения сами, но не переключаться. F8 и Marshall Monitor приходится переключать ручками.

значит что-то в стандарте подтолкнуло их сделать именно так.

у производителей в 99% случаев на вопрос "почему вы сделали такую глупость?" ответа два:
1) ну так продажи лучше
2) ну так производство дешевле

когда у меня умерли прошлые наушники я таки решился попробовать затычки (и пожалел, но это уже оффтоп). выбор пал на redmi buds 4 pro (именно европейская версия, только в ней возможно следующее) они запоминают 6 устройств а не одно (и для меня это важно так как я их пользую переодически то с телефона, то с компа, то с рабочего ноута, то с личного) и кроме того могут подключить одновременно к двум устройстам (правда работает это криво, я не могу воспроизвести музыку с пк и парралельно например звонить в telegram с ноутбука, одно устройство посылает сигнал "сейчас вещаю я" и наушники отправляют команду поставить на паузу воспроизведение на втором устройстве, звучит круто, но работает так себе).

одно устройство посылает сигнал "сейчас вещаю я" и наушники отправляют команду поставить на паузу воспроизведение на втором устройстве,

Воспроизведение ставят на паузу, а звонок - на удержание. Вот, что самое паршивое :)

Сорри, но яннп

У меня жабра, когда подключена к двум устройствам, воспроизводит поочерёдно. Если на устройстве 1 что-то играет, и приходит сигнал с устройства 2 - на устройстве 1 ставится пауза. И хрен бы с ней, не мешает.

Если на устройстве 1 в это время не медиа, а телефонный разговор - жабра его переводит в ожидание, и вот это уже раздражает.

Если на устройстве 1 в это время не медиа, а телефонный разговор - жабра его переводит в ожидание, и вот это уже раздражает.

ну об этом я и говорил, впрочем с моими китайскими tws ситуация немного лучше, оно зависит от того какое именно устройство со звонком. если это телефон то приоритет отдаётся звонку а не мультимедиа, а вот если звонок на компе то видимо уши просто не вкурсе что это звонок (хотя нужный профиль синезуба задаётся корректно)

В протоколе Bluetooth нет на это ограничений и поведение ваших наушников зависит от них самих. Таким образом вас выбешивает не Bluetooth, а производитель ваших наушников

Тогда скажу иначе - за всё время пользования блютус устройствами я ни разу не встречал такое, которые бы соответствовали описываемой мною моделью поведения.

Обычно такой функционал называется Bluetooth Multipoint.

Понял, спасибо за инфу.

Тогда скажу иначе - за всё время пользования блютус устройствами я ни разу не встречал такое, которые бы соответствовали описываемой мною моделью поведения.

У меня Marshall Major IV, они умеют, но только два устройства. Побочный эффект - во время воспроизведения звука с ПК сделал, например, скриншот, на телефоне и звук переключается на телефон.

sony wh-1000xm могут держать в памяти до 8 подключений.

Даже древняя jabra bt3030 два подключения поддерживала.

Точно дело не в Bluetooth. AirPods Pro 2 у меня на четырех устройствах зарегистрированы и беспроблемно между ними мигрируют. А с телефоном и ноутом вообще соединяются одновременно – активны на обоих устройствах, если наушники в ушах. Очень удобно

Т.е. вы можете через гарнитуру параллельно смотреть видео в YouTube на ноутбуке и вести телефонный разговор?

Когда айфон находится недалеко от используемого макбука (и они связаны и на одном аккаунте Apple) - звонок в любом случае проходит через ноут - где ответишь на него, там разговор и начнется. Поэтому, да, вполне можно болтать и делать что угодно на ноуте в наушниках.

Я не пробовал ответить на звонок на телефоне, работая за ноутбуком, честно говоря - сразу беру трубку на ноуте. Надо будет поэкспериментировать с этими возможностями. Но то что наушники одновременно активны сразу на двух устройствах - это факт.

У них вообще взаимодействие здорово настроено. Например, если вдруг перестает работать домашний вай-фай - один клик в трее и ты уже сидишь в интернете через мобильную сеть. Ну много таких мелочей.

Если будете покупать новые ищите по слову multipoint

спасибо, уже подсказали, но я обычно отжимаю б/у бесплатно, буду отжимать с умом XD

Немного оффтопа - меня в блютусе сильно выбешивает, что я не могу имея два компьютера в разных местах просто приходя доставать свои наушники и пользоваться звуком. Приходится, чаще всего, удалять устройство из списка и спаривать заново.

Какие у вас наушники?

У меня Pioneer MS7BT, Jabra Elite 7 Active, Sony WH-100XM4. Лучше всего с несколькими устройствами одновременно работает жабра, сони чуть хуже, пионер с двумя сразу не умеет. Попеременно - без проблем.

У меня их много и разные включая Airpods 1. И у меня нет потребности одновременной работы, мне достаточно чтобы приходя в два разных места я доставал наушники и они работали без необходимости жать кнопки переподключения.

18. Подключить к USB-порту Raspberry Pi проводную USB-клавиатуру.

...

22. Теперь, если вы будете нажимать клавиши на USB-клавиатуре, символы будут вводиться на подключённом компьютере или мобильном телефоне.

Хм. Мне кажется заголовок статьи не соответствует содержанию.

Немного перебор, (на есп32 интереснее получилось бы) но в целом это "беспроводная клавиатура"

но в целом это "беспроводная клавиатура"

совершенно не согласен, иначе любая клавиатура используемая через например rdp/ssh тоже будет беспроводной клавиатурой, а это не так.

  1. Raspberry Pi теперь виден как BLE Keyboard

А с ваших слов получается, что беспроводной клавиатуру делает не способ подключения — который, как раз, наглядно разграничивает беспроводную и удаленную клавиатуру, а модель контроллера при одном и том же способе подключения; причем внятного способа разграничения вы не предлагаете.

В случае с rdp/ssh и моим подключением к сети через Wifi, по вашей логике, моя клавиатура становится беспроводной. Хотя очевидно, что и провод есть и способ подключения остался неизменным (к хосту).

В статье один хост подменили другим и программно эмулируют Bluetooth HID Device, сама клавиатура как была проводной так и осталась.

RPi не является контроллером, как например ESP32 или какая-то вариация Arduino, это самостоятельная законченная SoC система, управляемая ОС. Соотвественно в связке:

USB Keyboard -> RPi -> Bluetooth -> Target System

У вас USB Keyboard как была проводной так и осталась, даже провод остался.

причем внятного способа разграничения вы не предлагаете.

А почему я что-то должен предлагать? Вся ситуация однозначная и очевидная.

С точки зрения конечной системы (которая "видет" эту клавиатуру как беспроводную) ей все равно как она на самом деле подключена.
Подключение производится по блутус. И будь там Arduino, ESP32, или настоящая Bluetooth клавиатура система не увидит разницы.

которая "видет"

Или "видИт" или "вЕдёт", оно даже красным подчеркнуто

С точки зрения конечной системы

Беспроводность определяется не тем как оконечная система определяет эту клавиатуру иначе вы просто выкидываете за борт Wireless USB и всю бесконечность 2.4 ГГц устройств.

Подключение производится по блутус

Вы используете ПРОВОДНУЮ клавиатуру в любом случае и вы (автор) её НЕ переделали в беспроводную вообще никак. Это просто трансляция кей-кодов через драйвер на другом ПК через блютус, а чтобы оконечная система понимала с чем работает вы мимикрируете под блютус устройство.

А клавиатура как была проводной так и осталась.

Например, вот это моя беспроводная мышь

Система вообще не в курсе что она беспроводная, то есть получается моя беспроводная мышь проводная, а конструкция автора с тонной проводов - беспроводная. Л - логика.

то есть получается, беспроводная мышь — проводная, а конструкция с тонной проводов — беспроводная

Поправил грамматику и удалил не имеющие отношения к сути референции на личности, не благодарите.
Парой комментов выше вы, на голубом глазу, сказали ровно это же — и вас ничего не смутило.
Более того, вы задекларировали, что провода — это тип прошивки контроллера.

Логика одна на всех. просто не все умеют ей пользоваться.
И что там получается — этот уже объяснил.

У вас же выходит, что клавиатура с беспроводными подключением ВНЕЗАПНО становится проводной, если в ее контроллер залита прошивка на базе RTOS.

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

В любой клавиатуре всегда есть провод от матрицы до контроллера матрицы, обычно в выполненный виде шлейфа.
Если беспроводной контроллер опциональный — то, как правило, он подключается того или иного рода проводом к основному контроллеру.

Это значит, что вы только что сказали, что любая клавиатура — всегда проводная, даже в rdp/ssh-сессии, как вы сказали, пытаясь аргументировать совершенно обратно — ведь у нее унутре есть провод, а то и не один, соединяющий серийные запчасти.

В любой клавиатуре всегда есть провод от матрицы до контроллера матрицы, обычно в выполненный виде шлейфа

Вы же понимаете что не этим признаком делят типы клавиатур? Вот вы зашли в магазин и там на одной полке проводные клавиатуры PS/2 и USB, а на другой - беспроводные Bluetooth и 2,4GHz со своим свистком. Очевидно, что распаковав обе коробки от разных типов вы безошибочно определите какой есть какой. Никому не видно проводов внутри корпуса, и эти провода есть в обоих вариантах исполнения, важно - каких проводов нет. В беспроводных клавиатурах отличие от проводных ровно одно - нет никакого провода, что очевидно из названия.

Когда вы предлагаете конструкцию, которая не только не избавляет клавиатуру от проводов, но и добавляет новых, то беспроводной клавиатурой это уже не назвать.

Если судить по самой конструкции, то логично было статью назвать как-то так - "Способ подключения любой клавиатуры как блютус устройство". С одной стороны вы сохраните интригу, с другой - это будет сутью статьи. Ведь вы не обещали что всё будет компактно и просто.

И для меня странным является сам факт объяснения таких очевидных вещей, в данном случае он говорит либо о глупости собеседника, либо о намеренном троллинге. Так что разговор я заканчиваю, всё что требуется сказать по сути - я сказал.

Вы же понимаете что не этим признаком делят типы клавиатур?

Вот вы и пришли к вопросу, которым были должны задаться с самого начала, прежде, чем писать килобайты ахинеи.
Правда, ахинею нести не перестали — вероятно потому, что не стали рисовать блок-схему, а продолжили придерживаться собственных определений и трактовок, не имеющих ничего общего с реальностью.

Применительно к клавиатуре "беспроводной" или "проводной" означает способ подключения к мастер-устройству: проводом от самого последнего контроллера на блок-схеме клавиатуры, или донглом/блютусом/IR/чего-вы-там-еще-придумаете.
И — ВНЕЗАПНО! — ни количество проводов и микросхем, ни сложность платы и контроллера здесь никак не фигурируют. Вообще.

Еще интересно в вашей системе координат смотрятся клавиатуры вроде Tex Shinobi, Thinkpad Keyboard II и легионов других, имеющих аж два или три способа подключения одновременно, причем только один из них с использованием проводников.

Правда, ахинею нести не перестали

Так как вы несёте ахинею, то мы в каком-то смысле квиты и не вижу причин далее манипулировать такими словами, а говорить по существу.

не стали рисовать блок-схему

Вы всем покупателям беспроводных клавиатур будете рисовать блок-схемы в магазине и объяснять им, что мешок проводов в комплекте это норма?

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

Ну я пока опираюсь на интуицию, здравый смысл и логику. Если же вы можете показать мне определение например документом IEEE, где беспроводным называют то, про что пишете вы. Ну что ж. Я расстроюсь но приму к сведению, что инженеры и потребители по-разному это понимают.

Применительно к клавиатуре "беспроводной" или "проводной" означает способ подключения к мастер-устройству

Это ваше личное определение?

И — ВНЕЗАПНО! — ни количество проводов и микросхем, ни сложность платы и контроллера здесь никак не фигурируют. Вообще.

То есть наличие или отсутствие проводов никак не влияет на проводность или беспроводность? Мне кажется тут кроется логическая ошибка.

Ну и еще одна ошибка, тоже логическая, в том, что к хосту вы подключены по проводу, так как хостом является RPi, а вот потом вы уже по беспроводному каналу прокидываете эмуляцию беспроводного устройства. Как-то я не вижу тут отправной точки ваших рассуждений.

Еще интересно в вашей системе координат смотрятся клавиатуры вроде Tex Shinobi, Thinkpad Keyboard II и легионов других, имеющих аж два или три способа подключения одновременно, причем только один из них с использованием проводников.

У меня как раз никаких противоречий нет, это составной (комбинированный) способ подключения. Каким образом вы находите с моей стороны противоречия?

Я почитал много разных статей на тему "беспроводности" устройств, в основном англоязычные и там совсем нет какого-то точного описания как именно должна реализовываться беспроводность, в основном идёт указание на то, что сигнал должен от устройства передаваться без проводов (они пишут "как правило с помощью радиочастот").

Так что склонен считать, что трактовка автора о том что устройство в конечном итоге получается беспроводным с формальной точки зрения не противоречит этим определениям. Поэтому юридически я признаю вашу точку зрения, но как потребитель - не принимаю такую реализацию.

Собственно это не отменяет ваших ошибок в рассуждениях.

И так же я оставляю свои претензии к заголовку статьи, так как автор не изменил клавиатуру, он только поменял способ подключения к конечному устройству. Думаю если бы заголовок был изначально таким, то я бы даже не стал писать комментарий.

В любой клавиатуре всегда есть провод от матрицы до контроллера матрицы, обычно в выполненный виде шлейфа.

Вот тут вы ошибаетесь, есть куча кастомных клавиатур на беспроводных контроллерах NICE!NANO V2. Например вот эта клавиатура не содержит вообще ни одного провода, хотя там есть USB-c для подзарядки.

Вот как её можно собрать

Ну, камон, там же не по беспроводному контроллеру на каждый клавиш же…
Это два отдельных проводных контроллера с беспроводной синхронизацией между ними.

Это два отдельных проводных контроллера с беспроводной синхронизацией между ними.

Беспроводных, в контроллер встроен синезуб. Провода есть только к батареи.

так можно дойти до того, что провода есть внутри SoC или чипа.

Почему Вы так считаете? Клавиатура относительно мобильного телефона или компьютера становится беспроводной. Raspberry Pi можно запитать от аккумулятора. Громоздко все немного, но цель статьи - рассказать базовые сведения о BLE на практическом примере.

можно очень много сделать, только в статье ничего не сделано с самой клавиатурой чтобы она стала беспроводной, сигнал от этой клавиатуры проброшен по воздуху, но клавиатура осталась проводной.

Как это не сделал?
Сделал то же самое, что делает QMK с радиомодулем, 1:1.

Почему не использовали bluepy?

Может я ошибаюсь, но bluepy используется для написания BLE приложений, которые выполняются на хосте. В нашем же случае приложение нужно выполнять на периферийном устройстве. Мне самому не очень понравилась громоздкость Dbus API для доступа к BLE в BlueZ, но, к сожалению, замену ему не нашел.

Может быть вы и правы, я использовал для считывания внешних термометров.

Проще, меньше и дешевле сделать это ,например, на модуле JDY10

А можете подсказать, как Вы реализуете HID over GATT с его помощью? Нам же необходимо создать GATT-север и реализовать HID over GATT на устройстве, которое мы подключаем как беспроводную клавиатуру к компьютеру или телефону.

Непонятно как Вы себе представляете такую подсказку.

Например, Вы можете посмотреть это в SDK для чипов этого производителя (TELINK).

https://www.telink-semi.com/for-developers/

Также можно посмотреть реализацию этого в SDK других производителей чипов с BLE.

У каждого чипа есть свои особенности , которые описаны в документации к SDK.

У нас есть проводная клавиатура и компьютер. Нужно сопрячь их, не подключая проводную клавиатуру к этому компьютеру по usb. Я использовал следующую схему подключения: клавиатуру по USB подключил к Raspberry Pi Zero 2 W. На Raspberry Pi запускается Gatt сервер и реализуется профиль HID over GATT. Raspverry Pi воспринимается окружающими его компьютерами телефонами как беспроводная BLE-клавиатура, с которой можно сопрячься. Мое приложение, запущенное на Raspberry Pi, принимает данные от подключенной-USB клавиатуры и передает по Bluetooth сопряженному комппьютеру.

Модуль за 92 рубля, скриншот для которого вы привели, если он работает в режиме периферийного устройства, реализует профиль SPP (Serial Port Profile). Среди пинов там Rx, Tx, Vcc, Gnd. Эти пины подразумевают, что по Rx и Tx данные передаются по протоколу UART. Для окружающих его компьютеров по Bluetooth он виден как устройство реализующее профиль SPP. Этот модуль нужно как-то по проводам соединить с USB-клавиатурой. Rx и Tx к USB напрямую не подклюяишь, так как UART и USB используют разные протоколы. Может это как-то можно исправить, перепрошив микросхему конроллера на модуле. Но нужно, чтобы прошивка поддерживала и профиль HID over GATT и HID over USB, а сам модуль был виден как HID клавиатура. Или я неправильно понял Вашу мысль.

1) У этого модуля(вернее сказать чипов Telink) есть USB. Чтобы подключить что-то по USB надо припаять разъем USB к контактам DP,DM модуля.

2) Различные профили есть в SDK. В этом модуле залита простейшая прошивка. Но Вы можете сделать свою, какую хотите.

3) Этот чип уже устарел. Есть более новые чипы и их много от разных производителей с еще меньшим потреблением, большей памятью , с поддержкой BLE 5.3, ZigBee, с возможностью программирования через UART ( в этом модуле однопроводной протокол программирования) по цене модуля примерно на 1-2 доллара дороже.

4) Но мне непонятно зачем делать беспроводную клавиатуру или мышь, если уже есть дешевые такие мыши и клавиатуры в продаже.

Например такая:

Но у нее свой свисток. Без него ее не увидите.

Спасибо за подробный ответ. Я согласен, что решение с этим модулем или более современными с утилитарной точки зрения лучше подходит, но я ставил целью просто разобраться в работе Bluetooth Low Energy и HID на базовом уровне.

Ну я так и понял. Хотя возможно, что применение модуля JDY10 вместо Raspberry Pi Zero 2 W может дать действительно простое и эффективное решение для смартфона и будет работать существенно дольше от батарейки чем существующие в продаже решения.

Увы, подобные клавиатуры (по крайней мере те 2 что я пробовал) очень быстро жрут батарейку при использовании подсветки, не передают показания заряда (всегда 88%) и не отключаются до полного разряда АКБ (видно по тому, как тускнеют и плывут в сторону жёлто-красного цвета подсветки, на АКБ после отключения около 2.3V остаётся, и постепенно поднимается до 3.2V примерно - это явно аварийный режим работы для лиона).

Кстати, есть такие же и со свистком+BT, это удобнее. Но всё равно так себе.

Сколько задержка получилося?

В блутусе основная проблема в том, что протокол вносит ощутимый лаг.

Я не замерял задержку, так как целью было просто разобаться с технологиями. Но при простом наборе текста, я не заметил ее. Может в играх опытный игрок и заметит.

Ничего он не вносит тем более для мыши или клавиатуры, если сделано правильно.

Осталось получить ваше определение слова "ничего". Сколько миллисекунд?

Пакеты BLE посылаются через интервалы не менее 3 мс в режиме рекламы.

При передаче звука обеспечивается передача музыки без потери данных.

Для справки: реакция человека на внешний раздражитель примерно 200 мс.

Реакция на внешний раздражитель - это не про курсор мыши, который должен следовать в точности за вашей рукой. На быстрых и точных движениях мыши ощущаются уже десятки миллисекунд. Потому игровые мышки, использующие только Bluetooth, обычно никто не делает. Его либо нет вообще, либо как дополнительный режим.

Постоянную низкую задержку Bluetooth в рамках десятков миллисекунд не обеспечивает. Проблема Bluetooth HID для мышей не только в лишней задержке, а еще и в ограниченной частоте опроса. Bluetooth мыши используют только 125 Гц, в то время как игровые 1000 Гц и выше. Все это вместе выливается в заметный разброс задержки.

На данном графике частота 125 Гц и для Bluetooth и для проприетарного протокола: https://www.rtings.com/thumbs/graph/18353/12584

На игровых мышах не ставят USB3x? Все-таки с 3-го стандарта дали возможность ведомому устройству инициировать обмен данными, когда ему удобно, а не ловить микрофреймы.

Так с USB таких проблем нет. Даже через USB 1.1 работает мышь в 1000 Гц, если сама поддерживает такую частоту. Тут речь о Bluetooth.

не менее 3 мс в режиме рекламы.

Разве HID over GATT работает пакетами advertising?

HID OVER GATT PROFILE SPECIFICATION (HOGP_SPEC_V10.pdf) стр. 26 ссылается на

L2CAP Connection Parameter Update Request as described in [Vol.3] Part A, Section 4.20 of [3].

--> Bluetooth Core Specification version 4.0 or later

Core Spec 5.3, стр. 2383. Connection_Interval_Min и Max, в шагах 1.25мс от 7.5мс до 4с. Max_Latency по-моему про другое. Так получается в идеале по стандарту минимум 7.5мс, не считая время опроса и обработки нажатия самой мышью?

A Practical Guide to BLE Throughput подтверждает такое толкование из описания "Connection Event".

По списку протестированных мышей https://www.rtings.com/mouse/tools/table/83176 виден минимум для BT мышей на уровне 7.5мс и выше, что сходится. В то же время со своими передатчиками 2+ мс. Из примеров, трое заявлены как BT (пусть и не BLE; @CaptGg делают)

  • Corsair M75 AIR (низший параметр)

  • Keychron M1 Wireless ~8ms

  • Razer Cobra Pro ~8ms

Для полноты картины еще раз подчеркну: энергоэффективность, засыпание оптического сенсора, опрос клавиш, время на определение debounce.

Для справки: реакция человека на внешний раздражитель примерно 200 мс.

Различие задержки аудиокодеков: https://www.youtube.com/watch?v=4_bypcPW5O4

А от себя добавлю, что в качестве "слепого эксперимента" на 60 Гц мониторе я заметил странную задержку при повороте камеры в игре. Я пересел на второй аккаунт и поймал себя на мысли, что-то странно. Полез в настройки, а там включенный VSync. То есть +- 16мс.

PS: По поводу задержки. Вроде как новое расширение стандарта планируется ради уменьшения задержки. Закладка на страницу не на этом компьютере.

BT и BLE - это две большие разницы.

BT не программировал.

на BLE передаю данные с датчиков и нет проблем.

Пусть будет 20 ms.

----------------------

https://habr.com/ru/articles/538834/

Нет. Ни одна из этих мышей не использует Bluetooth как основной режим. Как я и сказал, свой 2,4 ГГц и дополнительно Bluetooth.

Вы наверняка можете найти какую-то странную "игровую" мышь только с Bluetooth, но это будет просто обман потребителя. Обычно такое не встречается.

Так получается в идеале по стандарту минимум 7.5мс, не считая время опроса и обработки нажатия самой мышью?

Вы не учитываете неидеальность доставки. Это просто период времени, с которым устройства могут выйти в эфир. Далеко не факт что в данный момент данные будут готовы для передачи, либо хост может быть не готов обслуживать именно это соединение. В случае ошибки доставки, следующая передача только в следующий интервал подключения (если стек строго по спецификации работает). Так что 7.5мс это очень сильно оптимистично и дорого по потреблению (да, несмотря на LE это будет в сумму прилично). Хотя с потреблением как раз можно через Max_Latency решить вопрос: это грубо говоря разрешение не выходить указанное число интервалов в эфир для обмена данными, если этих данных нет.

Различие задержки аудиокодеков

аудио через BLE помимо кодека, использует ещё и кэширование на стороне устройства. Кэш в данном случае решает процедуру задержки сигналов при передаче.

Для справки: реакция человека на внешний раздражитель примерно 200 мс.

Реакцию среднестатистического человека оценивают от 100мс (я участвовал в разработке устройств для фиксации времени реакции на раздражение, в составлении ТЗ принимали участия в том числе и доктора).

Max_Latency решить вопрос: это грубо говоря разрешение не выходить указанное число интервалов в эфир

В каком-то обзоре мышиных сенсоров как раз говорилось, что из состояния простоя энергоэффективные сенсоры просыпаются поздно, но потом значения нормализуются и сходятся с обычными.

Про аудиокодеки: там не только кэширование (буферизация), но у разных кодеков по спецификациям разный размер "окна" при кодировании. У Opus это значение настраиваемое, в зависимости от нужды.

Opus has variable frame durations which can change on the fly, so an Opus decoder needs to be ready to accept packets with durations that are any multiple of 2.5ms up to a maximum of 120ms.

оценивают от 100мс

Спасибо за цифру! Я как-то игрушечный пример на микроконтроллере делал: цветной LED и обычная тугая кнопка. Выходило порядка 150-160 мс, хотя на компьютере через весь стек в браузерной мерилке (ха-ха!) стабильно было от 200-220 мс. Но цифру в ~200 мс постоянно упоминают как фактическую.

Для справки: реакция человека на внешний раздражитель примерно 200 мс.

Музыканты прекрасно чувствуют задержку и 20 мс.

Вообще-то я написал про реакцию, а не про чувство.

У реакции на джиттер с полным путем обработки — общего только входной путь.

Спасибо, отличное введение в HID/BT. Но когда я прочел "в качестве BLE-адаптора используем RPiZero с установленным линуксом" - зарыдал. Можете где-нибудь в тексте отметить, что это в учебных целях и так на проде и даже в хобби делать совсем не стоит?

Во введении у меня написано, что сделано для приобрения практических навыков и для более увлекательного изучения bluetooth. А использовать это на проде или нет, решает прочитавший статью. Хотя на прод, случается, выкладывают всякое)

Почему сразу не использовать контроллер, поддерживающий zmk? На /r/ErgoMechBoards собирают сотни блютус клавиатур с разными форм факторами.

Цель была помочь разобраться с основами BLE, а не сделать полноценную беспроводную клавиатуру. Но в любом случае, спасибо за комментарий.

Понятно.
Но вы таки знали про существование zmk контроллеров до моего комментария?

Что существуют специализированные контроллеры я знал. Именно zmk - нет.

Лайк как минимум за попытку систематизировать вот это вот все. Мои попытки написать про блютус всегда упираются в то, что попытка рассказать про "вот эту маленькую штуку" превращается в необходимость рассказать про весь стек целиком :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий