Заказал у товарищей из Dangerous Prototypes девайс USB IR Toy v2. Целый день убил на то, чтобы разобраться как завести эту штуку под LIRC'ом.

Чтобы работать с девайсом в ядре должна быть поддержка CONFIG_USB_ACM.

Первое что необходимо сделать - обновить прошивку до свежей версии. Для этих целей используется Diolan bootloader. Официальная инструкция есть на сайте производителя игрушки. Чтобы ввести девайс в состояние обслуживания надо или подать на него в консоль $ (этот способ, как и у всех у меня не сработал) или замкнуть контакты PGC и PGD. Чтобы прописать саму прошивку из Linux нужна утилита fw_update. Как показала практика не все fw_update одинаково полезны, а некоторые могут сделать кирпич из вашей игрушки. В итоге у меня всё получилось с версией, которую какой-то чувак выложил в одном из тредов формума Dangerous Prototypes. Стоит отметить, что устройство не особо реагировало на команды, отличные от

sudo ./fw_update -e -w -v -m all -vid 0x04D8 -pid 0xFD0B -ix ../USBIRToy.v22.hex

Теперь про LIRC. Производитель рекомендует использовать irman устройство в LIRC, но у меня с ним не срослось. Благо кто-то написал нормальный драйвер и даже заопрувил его в lirc. Так что в версии 0.9.2 этот драйвер имеется под названием irtoy. А пока патчик 0.9.0-r5 и используем имя usb_irtoy. ebuild я добавил в свой репозиторий. Отдельно пускаю поносный луч в сторону Sony. Родной USB порт тупил и глючил из-за чего я потратил уйму времени выясняя в чем причина.

Далее по инструкции обучаем LIRC нашему пульту. Много времени на это ушло, но в итоге получилось. Советую для названий клавишь использовать официальные (не использовать ключ irrecord -n). Их список можно получить командой

irrecord --list-namespace

Копируем конфиг в /etc/lirc/lircf.conf. Не забываем дать вменяемое имя в поле name. Правим /etc/lirc/hardware.conf:

REMOTE="Custom"
REMOTE_MODULES=""
REMOTE_DRIVER="usb_irtoy"
REMOTE_DEVICE="/dev/ttyACM0"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""

Запускаем lirc, и проверяем работоспособность:

#sudo irw
ffff001700000000 00 ok RemoteXXX.conf
ffff001000000000 00 up RemoteXXX.conf
ffff001100000000 00 down RemoteXXX.conf

Теперь можно настроить управляемое ПО. К примеру по мануалу XBMC (.xbmc/userdata/Lircmap.conf):

<lircmap>
  <remote device="LG_AKB73615307">
    <left>KEY_LEGT</left>
    <right>KEY_RIGHT</right>
    ...
  </remote>
</lircmap>

Кроме LIRC рекомендую проект PyIrToy. Позволяет легко из питона работать с игрушкой. Вот пример кода:

import serial
import irtoy
import time

with serial.Serial('/dev/ttyACM0') as serialDevice:
    toy = irtoy.IrToy(serialDevice)
    irCode = toy.receive()
    print irCode
    time.sleep(5)
    toy.transmit(irCode)

Comments

comments powered by Disqus