воскресенье, 13 марта 2011 г.

Продолжаю осваивать LIRC устройство

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

и пришлось расположить устройство так, чтобы светодиод устройства светил прямо на фотодиод телевизора.
Ну и заодно на светодиод надел кусок пластиковой трубки, чтобы убрать "ложные срабатывания", так как оказалось, что управляется не только телевизор, но и компьютер.
А вот с програмщиной под OpenSuse дело обстояло несколько сложнее. Дело в том, что в файл lirc_serial.ko из пакета lirc_kmp_desktop скомпилирован без поддержки трансмиттера. Пришлось скачивать программу с сайта http://prdownloads.sourceforge.net/lirc/lirc-0.8.7.tar.bz2 распаковывать, запускать конфигурацию (в которой по умолчанию стоит поддержка трансмиттера)
Вообщем пришлось установить драйвер вручную, но пакет lirc поставить сверху из репозитория, так как в родном пакете нет годного файла /etc/init.d/lirc. 
И вот теперь командами из консоли можно управлять телевизором

irsend LIST Samsung_BN59-00865A ""    -  Получить список доступных команд пульта

irsend SEND_ONCE Samsung_BN59-00865A P+   - Переключение на следующий канал
irsend SEND_ONCE Samsung_BN59-00865A POWER   - Включить/Выключить телевизор.

понедельник, 7 марта 2011 г.

LIRC устройство в OpenSuse 11.3

Добрый день.
Сегодня успешно закончилась эпопея обуздания инфракрасного порта, который был мной приобретен в магазине в виде набора для самостоятельной сборки http://www.micel.ru/one.php?id=227638,
Для тех, кто последует моему примеру, скажу сразу - позаботьтесь о шлейфе и разъеме для подключения к нему устройства, их нет в комплекте.
Вот, собственно устройство, которое у меня получилось:
Собственно с самим прибором проблем не было. Спаяли мы его с младшим сыном буквально часа за три. А вот дальше началось самое интересное. Материнская плата ASUS P5B имеет на борту единственный COM порт, но разводка самого порта очень необычна (терминология, сами понимаете изменена). Естественно для осознания того, что проблема не во мне и не в непроверенных деталях и не в качестве пайки, а в инженерной мысли конструкторов пришлось обращаться к друзьям с просьбой протестировать устройство. Вообщем все дело оказалось в распайке шлейфа и я с наслаждением даю ссылку на схему соответствия контактов:
После того, как я убедился в исправности устройства настало время для его настройки. Для  Windows достаточно скачать программу WinLirc у которой в комплекте есть необходимые инструменты для проверки и настройки устройства.
1. Распаковываем архив скачанный вот отсюда http://winlirc.sourceforge.net/
2. Ищем имеющийся пульт управления здесь http://lirc.sourceforge.net/remotes/ и скачиваем файл
3. Запускаем программу и проводим в ней настройки на наш COM порт и выбираем файл с нашим пультом управления.



После этого можно воспользоваться утилитой RawCodes чтобы увидеть, что устройство принимает с пульта сигналы
Ну и если подключить питание к разъему на устройстве, то можно прямо из программы WinLIRC управлять вместо пульта управления ну скажем телевизором.
Несколько сложнее оказалось настроить работу с пультом в OpenSUSE. Сама программа LIRC есть в репозитории, но если для подоконников все нужное оказалось в одном архиве, то для работы с LIRC пришлось читать много и на английском вот здесь http://www.lirc.org/html/index.html
Первое что пришлось - это настраивать работу модуля lirc_serial с портом 3F8.
Вот те 2 заветные команды, которые позволили из консоли администратора увидеть устройство:

setserial /dev/ttyS0 uart none
modprobe lirc_serial type=0 irq=4 io=0x3f8 sense=1
Для проверки того, что с пульта приходят команды использовалась команда 
mode2 -d /dev/lirc0
То есть везде пришлось явным образом указывать режимы работы портов и номера устройств.
На рисунке, представленном ниже виден вывод программы (верхние 3/4 окна. Для выхода из программы использован Ctrl-C) 

И после того, как я убедился, что с порта все идет как надо дошло дело до настройки сервера LIRCD. 
Файл с настройками пульта был скопирован в каталог /etc/lirc под именем lircd.conf
после чего вручную был запущен сервер lircd с параметром -n для работы в консольном режиме. (На рисунке выше виден запуск сервиса и вывод информации о подключаемых к сервису клиентах).
Далее можно убедиться в том, что сервер нормально расшифровывает команды, принимаемые с пульта управления. Для этого в другом окне, также с правами root-а, запускаем программу irw и нажимаем на кнопки пульта управления. В окне должны увидеть что-то подобное:
Ну теперь мы справились с настройками и убедились, что все работает, далее настраиваем сервис LIRC (как я понял - надстройка над LIRCD для запуска через init.d)
В файл /etc/sysconfig/lirc были внесены следующие изменения:
LIRCD_DEVICE="/dev/lirc0"
LIRC_MODULE="lirc_serial"
И после этого сервер LIRC был запущен вручную командой 
/etc/init.d/lirc start
При этом в системном лотке KDE программа Kremotecontrol отобразила, что доступен пульт управления Samsung_BN59_00865A.
Теперь осталось привести все описанные команды в исполнение в момент загрузки компьютера . С сервером LIRC поступаем просто - идем в Yast и указываем на 5-м уровне запуск сервиса автоматически. Но для того, чтобы он сработал необходимо проинициализировать последовательный порт и загрузить драйвер lirc_serial. Если честно, было лениво искать как это все делать правильно, потому я засунул обе команды в раздел старта сервиса в файл /etc/init.d/lirc получилось вот так:
...
case "$1" in
    start)
# VVG 
echo -n Setup COM port
/bin/setserial /dev/ttyS0 uart none
echo -n Start LIRC_COM device
modprobe lirc_serial type=0 irq=4 io=0x3f8 sense=1
# /VVG
echo -n "Starting lircd "
...
Перегрузил компьютер и все стартовало как надо. Далее выполняем привязку действий на требуемые кнопки пульта ДУ...
Разваливаемся на диване и балдеем.