Logitech USB Dongle C-UV35: HID и HCI
Оговорюсь сразу - gentoo на десктоп я поставил впервые всего дней 10 назад, поэтому, возможно, понимания сабж-специфичных вопросов у меня не хватает.
Но собственно о проблеме: имеется когда-то появившийся Logitech к-т: USB Dongle C-UV35 (046d:0b02) + BT клавиатура MX 5000 + BT мышь Revolution. Изначально (в моей конфигурации) девайс находится в режиме HID proxy и устройства ввода работают, однако HCI-режим отключен, и, соответственно, прочий BT-функциоанал - не работает. Однако если воткнуть устройство с нажатой кнопочкой - HCI появляется. Причем HID-proxy при этом уже нет и устройства ввода перестают работать.
Попытки поковыряться в проблеме с помощью hid2hci к успеху не привели - видимо прописанный в udev случай для несколько другого устройства, во что углубляться пока не буду. Никаких умных мыслей, могущих мне посодействовать, я нагуглить не смог, поэтому внимательно прочел тему про ШВИМ и, согласно ее духу, в дальнейшем действовал как настоящий исследователь - бессмысленно и беспощадно.
Тщательно все взвесив - я решил что синхронизация действий по нажатию кнопочки и одновременной вставке устройства в разъем требует от меня чрезмерных умственных и физических усилий.. и сосредоточился на поиске метода программной эмуляции получаемого эффекта. Боги были ко мне благосклонны, и, с первого же раза, включив CONFIG_USB_HIDDEV и CONFIG_HIDRAW, я получил искомый нежелательный результат - HCI есть, клавомышь не работает. "Замечательно!", подумал я и вновь решил поиграться с hid2hci, только в обратную сторону. Результат был немного предсказуем и отсутствовал так же фундаментально как и в прошлый раз. От абсолютно нечего делать я попробовал разные комбинации СONFIG_USB_HIDDEV и CONFIG_HIDRAW и выяснил, что присутствие хотя бы одной из этих опций позволяет эффективно избавиться от этих старых и ненужных устройств ввода - вернее, от их функционала. На этом месте мой исследовательский дух трансформировался в графоманский - что, собственно, и послужило толчком к созданию этой темы.
Да, чуть не забыл - вообще то изначально мне хотелось иметь сразу и клавомышь и блютус, но прошло уже так много минут и поэтому я очень жду ответов на тему "почему это невозможно". Собственно, это было бы даже интереснее, чем просто решить проблему.
В забеге участвовали:
zegrep '(_BT_|LOGIT|HID).*=' /proc/config.gz CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_BNEP=m CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m CONFIG_BT_HCIBTUSB=m CONFIG_HID=y CONFIG_HID_GENERIC=y CONFIG_HID_A4TECH=y CONFIG_HID_APPLE=y CONFIG_HID_BELKIN=y CONFIG_HID_CHERRY=y CONFIG_HID_CHICONY=y CONFIG_HID_CYPRESS=y CONFIG_HID_EZKEY=y CONFIG_HID_KENSINGTON=y CONFIG_HID_LOGITECH=y CONFIG_HID_LOGITECH_DJ=y CONFIG_HID_MICROSOFT=y CONFIG_HID_MONTEREY=y CONFIG_USB_HID=y
А вот разница в устройствах ввода между режимом HID-proxy:
kernel: hid-generic 0003:046D:C70E.0003: input: USB HID v1.11 Keyboard [Logitech Logitech BT Mini-Receiver] on usb-0000:00:1a.2-2.2/input0 kernel: hid-generic 0003:046D:C70A.0004: input: USB HID v1.11 Mouse [Logitech Logitech BT Mini-Receiver] on usb-0000:00:1a.2-2.3/input0
и... другими режимами, в которых нажимать на кнопки бесполезно:
kernel: hid-generic 0003:046D:C70A.0008: input,hiddev0: USB HID v1.11 Mouse [Logitech Logitech BT Mini-Receiver] on usb-0000:00:1a.2-2.3/input0 kernel: hid-generic 0003:046D:C70E.0003: input,hidraw2: USB HID v1.11 Keyboard [Logitech Logitech BT Mini-Receiver] on usb-0000:00:1a.2-2.2/input0 kernel: hid-generic 0003:046D:C70A.0004: input,hiddev0,hidraw3: USB HID v1.11 Mouse [Logitech Logitech BT Mini-Receiver] on usb-0000:00:1a.2-2.3/input0
- Для комментирования войдите или зарегистрируйтесь
Хм. Никаких мыслей?
Хм. Никаких мыслей?
Имел такие же проблемы, когда
Имел такие же проблемы, когда имел в ядре включенную поддержку USB 3.0
Стоило ее отключить - проблемы исчезли. Было это, начиная с версии ядра 3.0. Советую попробовать
Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"
используемая платформа USB
используемая платформа USB 3.0 не поддерживает и, соответственно, поддержка в ядре не собиралась.
В целом необходимо было просто не торопиться и оставить проблему дозревать на несколько дней ;)
... Вспомнив, как именно работает SetPoint (ПО от Logitech для Win), было вполне очевидно выяснено, что собственно запуск SetPoint переводит USB-ресивер в режим HCI и далее клавомышь уже работает не в HID-proxy режиме, а как устройства, подключенные по BT. Вполне очевидно, что "съесть рыбку" одновременно с работой BT не выйдет. HID-proxy и HCI в данной аппаратной реализации взаимоисключающи.
Далее, почему включение HIDDEV и HIDRAW приводит к описанному выше эффекту:
в дереве подустройств ресивера появляется новое устройство c путем .../hiddevX (например devices/pci0000:00/0000:00:1a.2/usb5/5-2/5-2.3/5-2.3:1.0/usb/hiddev0), которое (и только которое) может быть использовано hid2hci для переключения режима.
То есть при включении этих опций правило в /lib64/udev/rules.d/97-bluetooth-hid2hci.rules срабатывает верно (хотя оно сформулировано далеко не совсем точно - вместо одного целевого вызова происходит 5)
Осталось только привести все это к более надежному виду - чтобы переключение режима происходило не на этапе запуска демона udev (или же первоначального определения устройства), а в момент, скажем, ассоциированный с запуском WM (дабы при проблемах с bluez и прочим была возможность остаться в консоли на HID-proxy)
все вопросы с переключением
все вопросы с переключением были решены, но обнаружился один мерзкий фактик, [скорее всего] сделавший собственно весь этот вопрос бессмысленным, а именно:
время от времени клавиатура и/или мышь "отпариваются" (это может произойти даже после перетыкания адаптера), после чего спарить их заново становится невозможным без участия как минимум другой клавиатуры (возможно, эта проблема как-то и решаема, но я уже немного устал от нее); в проприетарном SetPoint эта проблема решается путем тыкания в кнопки адаптера и клавомыши, после чего на клавиатуре предлагается ввести код, появляющийся на экране и так далее. Предполагаю что "штатными средствами" без серьезного запила такое не реализовать - поправьте, если я ошибаюсь.
Пока вывод сделан такой: пользуем режим HID-proxy, а для BT используем более другой адаптер.