November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Saturday, January 16th, 2010 05:21 pm

К одной из моих DVB-карт прилагался штатный ИК-приемник на верёвочке и пульт. И я, наконец, решил присобачить его к компьютеру.

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

Дальше технические подробности, интересные только IT-специалистам.

Конфигурация для пульта от моей карты нашлась сразу в готовом виде. Потом оказалось, что на родном сайте lirc этих конфигураций тоже дофига, и они там регулярно обновляются, только  ссылок на это место на основном сайте lirc нифига нет. Хуже того, на этом сайте сильно устаревшая документация, в которой нет многих на самом деле поддерживаемых карт, а для карты, наиболее похожей на мою, там рекомендуется использовать ядрёный модуль lirc_gpio и драйвер default, которые я и пробовал настроить, пока не обнаружил, что на самом деле модуль вообще не нужен, поскольку приемник прекрасно доступен через /dev/input/event*, а lirc’овый драйвер для него называется devinput.

Данные из этого event* приходили (я проверил с помощью cat |hexdump), но совершенно не соответствующие ожиданиям lirc,  и он их благополучно игнорировал. Когда я уже почти отчаялся и решил записать коды вручную, irrecord радостно сообщил мне, что для devinput мне, с большой вероятностью, ничего записывать не надо, а надо взять типовую конфигурацию.

Взял. И – о чудо! – lirc стал выдавать клиенту (irw) нажатия кнопок. Но для тех, для которых выдавал, получалась какая-то фигня, совершенно не соответствующая самим кнопкам. А для некоторых не выдавал вообще.

При внимательном разглядывании оказалось, что эти кнопки не понимает не только lirc, а и сам драйвер:
Jan 16 01:04:52 kernel: [95828.656628] Budget-CI dvb ir receiver saa7146 (1): unknown key: key=0x0e raw=0x350e down=1
Jan 16 01:04:52 kernel: [95828.908006] Budget-CI dvb ir receiver saa7146 (1): unknown key: key=0x0e raw=0x350e down=0

Вот тут и пригодились открытые исходники. Оказалось, что в зависимости от pci->subsystem_device драйвер DVB-карты может использовать три раскладки преобразования получаемых от  ИК-приемника данных в коды кнопок. Добавил отладочную печать, пересобрал модуль, загрузил, обнаружил, что subsystem_device от моей карты оказался неопознанным, и для него выбралась раскладка по умолчанию. Неправильная.

Добавил еще одну строчку с номером subsystem_device от моей карты, пересобрал модуль – и lirc стал выдавать правильные коды для всех кнопок.

А вот в системе с закрытыми исходниками, как, например, в предлагавшемся Windows медиацентре, фиг бы я чего нашёл и, тем более, исправил. Хотя, конечно, есть шанс, что там бы такой проблемы вообще не возникло. Если бы нашелся общесистемный драйвер для того же пульта. А то у производителей таких мультимедийных девайсов очень модно, чтобы с пультом умела работать только их родная программа..

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме