четверг, 5 февраля 2009 г.

Пульт Gotview USB и Linux

Данное руководство относится как пульту с функцией on/off, так и без on/off.
Спасибо shashurup - за помощь

Под windows пульт работает как обычная клавиатура/мышь - проблем нет. Но я его брал для linux там оказались проблемы, как клавиатуру/мышь подключать его не стало, /dev/input/event не появились. Зато появилось два usb устрйства - /dev/usb/hiddev0, /dev/usb/hiddev1 (Проверял на ядрах 2.6.27, 2.6.28 х86 и х64 ).

по lsusb получил:
Bus 004 Device 007: ID 0419:0001 Samsung Info. Systems America, Inc. IrDA Remote Controller


Путем гугления нашел как его заставить работать, нужно использовать lirc с драйвером Samsung
./configure --prefix=/usr --with-driver=samsung


Но у меня есть стойкое подозрение, что это немного не то устройство - и с lirc он работал некорректно - дублировалась половина кнопок, сначала я думал что неправильно заданы настройки в lircd.conf. Анализируя исходные коды, нашел причину дублирования - функция samsung_rec игнорирует состояния кнопок alt,shift..., получается что ctrl + alt + shift + 9 и просто 9 генерируют одинаковый код. Под это дело я написал новую функцию - gotview_rec, статусы alt,ctrl... храню в 1 байте и его добавляю к коду кнопки - теперь все комбинации генерируют разные коды, кнопки не путаются.

Следующая проблема - при нажатии на крестовину генерирует несколько нажатий клавиш, repeat в lircrc почему-то не помог, проскакивает несколько нажатий сразу. delay преследует немного другие цели, по этому сделал еще один патч - после первого нажатия кнопки пропускаются все нажатия кнопки в течении 0.4 сек, потом события обрабатываются без пропуска. Если вам это не нужно - отключить можно, закомментировав 908 строчку hw_hiddev.c
// if ( gotview_check_key(main_code) )


Теперь сама инструкция :)
1. Скачивайте lirc-0.8.4a с сайта www.lirc.org
http://prdownloads.sourceforge.net/lirc/lirc-0.8.4a.tar.bz2
2. Скачивайте пропатченный hw_hiddev.c
3. Распакуйте lirc-0.8.4a и замените в нем daemons/hw_hiddev.c на пропатченный.
4. Конфигурим и компилируем
./configure --with-driver=samsung
make
make install

5. Скачиваем конфиг lircd.conf и ложим его в /etc
6. Втыкаем usb ресивер и смотрим какие девайсы появились в /dev/usb
В моем случае это hiddev0 и hiddev1
7. Запускаем lircd
/usr/sbin/lircd -H samsung -d /dev/usb/hiddev0 --pidfile=/var/run/lirc0.pid --listen=8765
/usr/sbin/lircd -H samsung -d /dev/usb/hiddev1 --pidfile=/var/run/lirc1.pid --output=/dev/lircd --connect=localhost:8765

8. Запускаем irw и жмем на кнопки пульта, если все прошло успешно - должны появится сообщения о нажатых клавишах, если нет - переходите к первому шагу и делайте все более внимательно :)