Показать сообщение отдельно
Старый 15.03.2014, 23:38   #42
ntfs1984
Новый Пользователь
 
Регистрация: 25.02.2014
Возраст: 39
Регион: 04
Сообщений: 9
ntfs1984 is on a distinguished road
По умолчанию

Для начала убеждаемся, что наш ИК работает.
Убедиться можно, сделав lsmod. В списке модулей должен быть sunxi_ir, если его нет - подключаем через insmod.
Если он есть - переходим в папку /dev/input и ищем там файлики eventX
У меня это были event0 в Лубунте, или event4 в Кубиане.
Проверить работоспособность пульта можно набрав cat event4 | hexdump в консоли,
и нажимая кнопки на пульте ДУ.
cat должен вывести набор шестнадцатиричных цифр.

Сами скрипты.

Затем надо установить pip, это такая фигня питоновская, внутренний инсталлер модулей:
apt-get install python-dev
После этого, надо установить питоновый модуль evdev, это библиотека, позволяющая питону работать с устройствами /dev в Линуксе:
pip install evdev
После этого создаем скрипт на питоне, следующего содержания:


import string

from evdev import InputDevice
from select import select

dev = InputDevice('/dev/input/event4')

while True:
r,w,x = select([dev], [], [])
for event in dev.read():
if event.type==1 and event.value==1:
print( event.code )
open('/dev/irda', 'w').write(str(event.code))


где /dev/input/event4 - это устройство, создаваемое модулем sunxi-ir, а /dev/irda - произвольный путь к файлу, куда мы будем писать информацию.
Запустим его, и проверим, работает ли он. При нажатии кнопок на пульте, должна выводиться цифра кода. Эта же самая цифра будет присутствовать в файле /dev/irda. Файл /dev/irda обновляется только во время нажатия клавиши пульта.

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

#!/bin/bash
while [ 1=1 ];do
if [ -e /dev/irda ];then
code=`cat /dev/irda`
rm /dev/irda
if [[ "$code" = "132" ]];then
nohup xterm &
fi
echo $code
fi
sleep 1
done


Мы запускаем бесконечный цикл, прерываемый только по CTRL+C, в котором раз в секунду проверяем существование файла /dev/irda, и его содержимое, если он существует.
Если в этом файле присутствует код "132" (код моей клавиши - у вас могут быть другие), то запускаем программу xterm в фоне.
После прочтения файла, мы его удаляем, иначе программа постоянно будет считывать последнее нажатие.

Вот так. Два скрипта по 10 строчек, вполне заменяют непоровотливый lirc.

UPD: Форум съедает отступы, необходимые для питона. Если эта штука у вас не запустится, скажите, я выложу скрипт в другое место.
ntfs1984 вне форума   Ответить с цитированием