3 заметки с тегом

IR/InfraRed

LIRC (ir-keytable + lircd) на armbian

LIRC стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту, (англ. Linux Infrared Remote Control, «управление Linux при помощи инфракрасного пульта дистанционного управления»)

При использовании irrecord он будет просить вас несколько раз нажимать кнопки различным образом, использование ir-keytable лишает этой радости, но всё равно надо привязать названия к кнопкам. Не обязательно ко всем, можно только к тем, которые планируете использовать.

тестировал на Armbian_5.75_Orangepipc_Ubuntu_bionic_next_4.19.20

uname -a


Linux orangepipc 4.19.20-sunxi #5.75 SMP Sat Feb 9 19:02:47 CET 2019 armv7l armv7l armv7l GNU/Linux

ставим ir-keytable

apt install ir-keytable -y

(просто скопируйте код, и вставьте в терминал )

mkdir -p  /etc/rc_keymaps
touch /etc/rc_keymaps/my_keymaps

ir-keytable -c -p other,lirc,rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp -w /etc/rc_keymaps/my_keymaps

ir-keytable -t

нажимаем на кнопки пульта, пример выдачи моего пульта
при нажатии кнопки «1» , «2», «-VOL», «+VOL» и т. д.

root@orangepipc:~# ir-keytable -t
Testing events. Please, press CTRL-C to abort.
1300.707932: lirc protocol(nec): scancode = 0xc
1300.758474: lirc protocol(nec): scancode = 0xc repeat
1305.305770: lirc protocol(nec): scancode = 0x18
1308.840815: lirc protocol(nec): scancode = 0x18 repeat
1810.025185: lirc protocol(nec): scancode = 0x15
1810.075733: lirc protocol(nec): scancode = 0x15 repeat
1811.312910: lirc protocol(nec): scancode = 0x9
1811.363469: lirc protocol(nec): scancode = 0x9 repeat

scancode прописываем в файл: /etc/rc_keymaps/my_keymaps

0x0c KEY_1
0x18 KEY_2
0x15 KEY_VOLUMEDOWN
0x09 KEY_VOLUMEUP

для автозапуска ir-keytable в  файл /etc/rc.local прописываем строку:

ir-keytable -c -p other,lirc,rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp -w /etc/rc_keymaps/my_keymaps

вывод команды: lsmod | grep ir_

root@orangepipc:~# lsmod | grep ir_
ir_xmp_decoder 16384 0
ir_mce_kbd_decoder 16384 0
ir_sharp_decoder 16384 0
ir_sanyo_decoder 16384 0
ir_sony_decoder 16384 0
ir_jvc_decoder 16384 0
ir_rc6_decoder 16384 0
ir_nec_decoder 16384 0
ir_rc5_decoder 16384 0

после настройки, лишние модули при запуске ir-keytable в опции -p можно не указывать.

Ставим lirc

apt install lirc -y

запуск irw

irw

при нажатии на кнопки пульта «1» , «2», «-VOL», «+VOL» и т. д. если scancode прописали в файл: /etc/rc_keymaps/my_keymaps наблюдаем выдачу irw.
пример выдачи моего пульта:

root@orangepipc:~# irw
0000000080010002 00 KEY_1 devinput-32
0000000080010003 00 KEY_2 devinput-32
0000000080010072 00 KEY_VOLUMEDOWN devinput-32
0000000080010073 00 KEY_VOLUMEUP devinput-32

Далее требуется настроить команды, которые будут получать приложения, использующие управление при помощи ПДУ, при нажатии кнопок пульта. Они указываются в файле: /etc/lirc/irexec.lircrc в котором описывается как и какому приложению реагировать на нажатие клавиши на пульте. Для примера как всегда поморгаем светодиодами на плате OrangePI PC и поуправляем громкостью с помощью amixer, запустив alsamixer наблюдаем визуально столбик «Line Out» при регулировке громкостью с помощью пульта.

begin
   remote = devinput-32	
   button = KEY_1
   repeat = 0
   delay = 0
   prog = irexec
   config = echo heartbeat | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
   config = echo none | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
end
begin
   remote = devinput-32	
   button = KEY_2
   repeat = 0
   delay	= 0
   prog = irexec
   config = echo heartbeat | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"
   config = echo none | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"
end
begin
   remote = devinput-32
   prog   = irexec
   button = KEY_VOLUMEDOWN
   config = amixer set "Line Out" 3%- &> /dev/null
   repeat = 10
   delay  = 10
end
 begin
   remote = devinput-32
   prog   = irexec
   button = KEY_VOLUMEUP
   config = amixer set "Line Out" 3%+ &> /dev/null
   repeat = 10
   delay  = 10
end
 48   6 мес   armbian   IR/InfraRed

Suspend/Wakeup via IR remote (ARMBIAN VERSION 5.24)

После исполнения одной из команд, процессор засыпает:

echo mem > /sys/power/state
echo standby > /sys/power/state
echo bootfast > /sys/power/state

Пробуждение работает на ARMBIAN 5.24 и 5.25 после нажатии кнопки Power Button,
Для пробуждения с пульта (IR remote), требуется ряд телодвижений. Но обязательно пульт должен быть NEC совместимый.
Товарищ bir8339e с форума orangepi.org «отреверсинжинерил» декодирование POWER key процессором ARISC firmware H3. LIRC должен быть настроен LIRC (IR/InfraRed) на Orange PI
Открываем lircd.conf. У меня такой:

begin remote

  name  /etc/lirc/lircd.conf
  bits           16
  flags SPACE_ENC|CONST_LENGTH
  eps            30
  aeps          100

  header       8967  4428
  one           590  1641
  zero          590   525
  ptrail        569
  repeat       8973  2194
  pre_data_bits   16
  pre_data       0x00FF
  gap          107157
  toggle_bit_mask 0x0

      begin codes
          KEY_SLEEP                0xA25D
          menu                     0xE21D
          test                     0x22DD
-----------------

Нас интересует pre_data и код кнопки которой будем будить процессор, например: KEY_SLEEP
преобразуем:

pre_data = 0x00FF = 0000 0000 1111 1111 => (bit-reversed) => 1111 1111 0000 0000 = 0xFF00
KEY_SLEEP = 0xA25D => code = 0xA2 = 1010 0010 => (bit-reversed) => 0100 0101 = 0x45

У автора было так:

pre_data = 0x205D = 0010 0000 0101 1101 => (bit-reversed) => 1011 1010 0000 0100 = 0xBA04
KEY_SLEEP = 0x38C7 => code = 0x38 = 0011 1000 => (bit-reversed) => 0001 1100 = 0x1C

  • получаете fex из bin, правите его:
apt-get update && apt-get upgrade -y
cd /boot/bin
bin2fex orangepipc.bin orangepipc.fex

меняем ir_power_key_code0 и  ir_addr_code0 в orangepipc.fex (для Orange Pi PC)


[s_cir0]
ir_used = 1
ir_rx = port:PL11<2><1>
ir_power_key_code0 = 0x45
ir_addr_code0 = 0xFF00


, и конвертируете назад в bin:

fex2bin orangepipc.fex orangepipc.bin
reboot

ну и если добавить в /etc/lirc/lircrc

begin
        remote = /etc/lirc/lircd.conf	
	button = KEY_SLEEP
	repeat = 0
	delay	= 0
	prog = irexec
	config = echo standby > /sys/power/state
        config = echo > null
end

сон и пробуждение будем иметь, при нажатии одной кнопки на пульте под псевдонимом KEY_SLEEP

После обновления armbian с версии 5.24 на 5.25 правленый файл orangepipc.bin будет перемещен в /boot/bin.old

тестировал на подобном пульте

файлы /etc/lirc
Да, возврат к истокам Мой первый пост на  4pda

 Нет комментариев    7   2017   armbian   IR/InfraRed   OrangePI PC

LIRC (IR/InfraRed) на Orange PI PC

LIRC (англ. Linux Infrared Remote Control, «управление Linux при помощи инфракрасного пульта дистанционного управления») — программный пакет, добавляющий в операционную систему Linux возможность ввода информации при помощи инфракрасного пульта дистанционного управления (ПДУ). При помощи LIRCможно настроить практически любую кнопку любого ПДУ на выполнение любого действия компьютера.
Поддерживаются протоколы: NEC RC-5 RC-6 JVC SONY SANYO LIRC mce_kbd

тестировал на ARMBIAN 5.24 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepipc:~# uname -a
Linux orangepipc 3.4.113-sun8i #6 SMP PREEMPT Fri Jan 20 22:09:45 CET 2017 armv7l GNU/Linux

Проверяем загрузку модуля sunxi_cir командой lsmod | grep lirc

root@orangepipc:~# lsmod | grep lirc
ir_lirc_codec           3650  0
lirc_dev                7834  1 ir_lirc_codec
rc_core                12727  10 ir_lirc_codec,ir_rc5_decoder,ir_nec_decoder,ir_sony_decoder,sunxi_cir,ir_mce_kbd_decoder,ir_jvc_decoder,ir_rc6_decoder,ir_sanyo_decoder

В папке /etc/lirc/ обязательно должен находится файл lircd.conf, иначе модуль sunxi_cir не загрузится.

Также важным фактором, чтобы удостовериться, что все заработает, нужно проверить, появилось ли устройство ввода: Вводим команду evtest

root@orangepipc:~# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      vmouse
/dev/input/event1:      sunxi-gpiokey
/dev/input/event2:      sunxi-ths
/dev/input/event3:      sunxi-ir
/dev/input/event4:      MCE IR Keyboard/Mouse (sunxi-ir)
Select the device event number [0-4]:

udev присвоил sunxi-ir номер event’a 3

Select the device event number [0-4]: 3
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "sunxi-ir"
................................
Testing ... (interrupt to exit)

нажимаем кнопки на пульте

Testing ... (interrupt to exit)
Event: time 1485381577.674748, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c01
Event: time 1485381577.674760, -------------- EV_SYN ------------
Event: time 1485381577.788212, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c01
Event: time 1485381577.788219, -------------- EV_SYN ------------
Event: time 1485381579.106051, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c02
Event: time 1485381579.106060, -------------- EV_SYN ------------
Event: time 1485381579.219508, type 4 (EV_MSC), code 4 (MSC_SCAN), value 104c02
Event: time 1485381579.219512, -------------- EV_SYN ------------

(Остановить процесс можно [Ctrl]+[C])
Конфигурация и настройка LIRC.
используется файл /etc/lirc/lircd.conf и утилита irrecord (man irrecord).
Файл /etc/lirc/lircd.conf содержит «общепринятые» названия кнопок на пульте и их управляющие коды, получаемые непосредственно с пульта. Если кому-то повезет, то этот файл для своего устройства можно найти на оффсайте LIRC’a. remotes.list
«общепринятые» названия кнопок :

irrecord --list-namespace

Для старта процесса обучения удалим конфиг файл lircd.conf

service lirc stop
rm /etc/lirc/lircd.conf
irrecord --disable-namespace -H default -d /dev/lirc0 /etc/lirc/lircd.conf

Здесь нужно немного пояснить параметр —disable-namespace. если его не указать, то irrecord ищет общепринятые названия кнопок . Т. е. мы просто не сможем называть кнопки пульта так, как нам нравится.
irrecord предложит нам нажать на различные кнопоки и держать их примерно одну секунду
Не прекращайте нажимать кнопки, пока две линии точек (2x80), не сгенерируется.

Далее поочередно обзываем все кнопки пульта и жмакаем их. Когда закончили — просто нажали ENTER. Потом вас попросят как можно быстрее понажимать одну из введенных кнопок. irrecord создаст файл /etc/lirc/lircd.conf.

Для проверки LIRC’a служит утилитка irw — при ее запуске в терминале при нажатии на клавишу пульта отображается название клавиши и её управляющий код.

service lirc start
irw /dev/lircd
0000000000001001 00 1 /etc/lirc/lircd.conf
0000000000001001 01 1 /etc/lirc/lircd.conf
0000000000001802 00 2 /etc/lirc/lircd.conf
0000000000001802 01 2 /etc/lirc/lircd.conf
0000000000001003 00 3 /etc/lirc/lircd.conf
0000000000001003 01 3 /etc/lirc/lircd.conf
0000000000001003 02 3 /etc/lirc/lircd.conf

Далее требуется настроить команды, которые будут получать приложения, использующие управление при помощи ПДУ, при нажатии кнопок пульта. Они указываются в файле /etc/lirc/lircrc.

Создайте файл /etc/lirc/lircrc в котором описывается как и какому приложению реагировать на нажатие клавиши на пульте. Для примера поморгаем светодиодами на плате OrangePI PC:

begin
        remote = /etc/lirc/lircd.conf	
        button = 1
	repeat = 0
	delay	= 0
	prog = irexec
	config = echo heartbeat | sudo tee "/sys/class/leds/red_led/trigger"
	config = echo none | sudo tee "/sys/class/leds/red_led/trigger"
end
begin
        remote = /etc/lirc/lircd.conf	
	button = 2
	repeat = 0
	delay	= 0
	prog = irexec
	config = echo heartbeat | sudo tee "/sys/class/leds/green_led/trigger"
	config = echo none | sudo tee "/sys/class/leds/green_led/trigger"
end

После редактирования файла lircrc не забывайте команду: service lirc restart
файлы /etc/lirc
LIRC
Lirc и lircrc, примеры обработки событий пульта.

 15 комментариев    14   2017   armbian   IR/InfraRed   OrangePI PC