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

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

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, примеры обработки событий пульта.

2017   armbian   IR/InfraRed   OrangePI PC