Thursday, January 01, 2009

Twinhan Remote, Lirc and Freevo or How I spent my holidays

Ok Not all my holidays... We went home for a family Christmas and when I came back I decided to put the livepause plugin for our Freevo box. I'm spending a lot of time in a chair at the moment and it gave me something entertaining to play with.

Livepause Plugin

I followed the installation instructions on the freevo plugin page. Downloaded dvbstreamer, followed instructions, changed my freevo start up script (running debian) so that it started dvbstreamer and stopped it when I started and stopped freevo and I could pause live tv. Worked very well - thanks live pause writer :-)

Had to do a few tweaks:
- had to create the path to the buffer directory eg /tmp/freevo before starting freevo. Discovered that it would disappear on a reboot so I moved it to my /data directory.
- Looking in the log each time was very useful because it would show why it was failing eg typo, dvbstreamer not started, dvb card not released from last run etc.
- The instructions from the next section on the old dvbstreamer was useful too because it contained information on starting dvbstreamer etc.



All was not perfect in the livepause garden unfortunately. Key control was obviously coming from whatever player I was using and no keystrokes were getting to freevo which would allow me to rewind and fastforward, record and other funky features implemented by the kind livepause implementer.

After much fiddling around and searching I found a post which explained my problem. We are using our video through x11. This means that when we have mplayer, vlc or xine playing, they have the window focus and all commands are passed directly to them. Freevo is not being passed keystrokes.
There is a -win command for mplayer used by the mozilla plugin that could get around this (must explore).

A way for us to avoid this was to use a remote control with lirc. Happily we happened to have one handy so we could try it out. So I had to setup a twinhan remote control with lirc. This took several attempts.

Twinhan Remote and Lirc

The Twinhan remote control we have has a usb connector on the ir receiver. This is picked up as a keyboard and mouse event devices.

lsusb output:

Bus 003 Device 002: ID 6253:0100 TwinHan Technology Co., Ltd Ir reciver f. remote control



dmesg output

[ 6.465970] input: Twinhan Tech Remote Control as /class/input/input1
[ 6.487824] input,hidraw0: USB HID v1.10 Keyboard [Twinhan Tech Remote Control] on usb-0000:00:1a.2-2
[ 6.508907] input: Twinhan Tech Remote Control as /class/input/input2
[ 6.520802] input,hidraw1: USB HID v1.10 Mouse [Twinhan Tech Remote Control] on usb-0000:00:1a.2-2


When you plug it in it acts like a keyboard so you could just map the keys - except the ones that are more than one character and will not be passed into X. We needed lirc input to bypass the keyboard layer - this took my a while to put all the steps together. I don't know why what worked perfectly for other people did not work for me but I finally got it going :-)


I followed step 1 of these useful instructions from Adam Pierce. I installed his lircd.conf file and edited by hardward.conf file to include his settings etc.

This did not work - the twinhan remote is a usb device and it was still being intercepted as a keyboard.

I learnt that the lirc test program irw by default looks for a /dev/lircd and /dev/lirc. With usb devices the /dev/lirc is not created as it uses a link to the /dev/input event device created for the keyboard handler. When your run irw with no commands the first time it will kill your lircd and the second time you run it you will get

connection refused


I tried various other techniques which all failed.

Then I found this in the faq:

Start the daemon this way:
/usr/sbin/lircd -H dev/input -d /dev/input/eventn.


I modified it to use my device by id instead of the event which will keep changing.

lircd -H dev/input -d /dev/input/by-id/usb-Twinhan_Tech_Remote_Control_1111111-event-kbd


This gave me an irw that was displaying the keystrokes for everything but the power button.

I run debian and found what I needed to do to get the /etc/init.d/lirc start up file to use the settings from the hardware.conf file was to change the settings for the /etc/lirc/hardware.conf file from

REMOTE_DRIVER="devinput"
REMOTE_DEVCE="/dev/input/by-id/usb-Twinhan_Tech_Remote_Control_1111111-event-kbd"


which is what Adam Pierce had to

DRIVER="dev/input"
DEVCE="/dev/input/by-id/usb-Twinhan_Tech_Remote_Control_1111111-event-kbd"


Then I could start up automatically using
/etc/init.d/lirc start


On Adam Pierce's earlier version of his instructions a helpful poster had recommended adding this to the /etc/lirc/lircd.conf file to add the power button:

POWER 0×1001d


So I added it and it worked fine.

Now on to the freevo setup.

No comments: