Today I dig a little deeper into the configuration, settings and customization.
I assume your IR receiver is working (as described in the previous post). We continue where we left off...
To create a configuration for a given remote, run the following:
- sudo /etc/init.d/lirc stop
- sudo irrecord -d /dev/lirc0 ~/lircd.conf
As part of generating lirc.conf, you'll be asked to enter a key name and then press that button on the remote so that it can read the IR signal and associate with that key.
To see a list of keynames, run irrecord --list-namespace . Some very common ones are:
When prompted for a key name, you would enter something like KEY_HOME and then press the HOME key on the remote. This would capture that input and the IR code associated with the key. If you use an invalid key name or need to change it, you can do so by modifying the generated output (in this case, ~/lirc.conf).
For a sample remote, I used a Western Digital TV (WD TV) player that I no longer use. and the generated output of that remote is as follows:
(download lircd.conf)
To see a list of keynames, run irrecord --list-namespace . Some very common ones are:
KEY_HOME
KEY_BACK
KEY_SELECT
KEY_LEFT
KEY_RIGHT
KEY_UP
KEY_DOWN
KEY_REFRESH
KEY_FASTFORWARD
KEY_REWIND
KEY_PLAYPAUSE
KEY_INFO
For a sample remote, I used a Western Digital TV (WD TV) player that I no longer use. and the generated output of that remote is as follows:
(download lircd.conf)
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Sat Apr 13 23:25:54 2013
#
# contributed by
#
# brand: /home/pi/lircd.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
name /home/pi/lircd.conf
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 8935 4503
one 520 1709
zero 520 606
ptrail 524
repeat 8935 2275
pre_data_bits 16
pre_data 0x219E
gap 108035
toggle_bit_mask 0x0
begin codes
KEY_BACK 0xD827
KEY_BOOKMARKS 0xF00F
KEY_DOWN 0x00FF
KEY_ENTER 0x10EF
KEY_FASTFORWARD 0x7887
KEY_FAVORITES 0x08F7
# KEY_FORWARD 0x7887
KEY_HOME 0x609F
KEY_INFO 0x58A7
KEY_MENU 0x58A7
KEY_LEFT 0xE01F
KEY_NEXT 0x807F
KEY_PLAYPAUSE 0x50AF
KEY_POWER 0x48B7
KEY_PREVIOUS 0x40BF
KEY_REWIND 0xF807
KEY_RIGHT 0x906F
KEY_STOP 0x20DF
KEY_UP 0xA05F
end codes
end remote
If you have a Logitech Harmony remote, life is even easier. You can select almost any media player remote, push the settings to your Harmony remote, and then capture they keypresses like described in the above. If you want to cheat, you could search for the remote setting for "WD TV" and then skip capturing the codes and just copy-and-paste the above lircd.conf as your own.
If you didn't generate the lirc.conf in the correct location, or if you are copying it from a difference source, make sure you store it in /home/pi/ on your Raspberry Pi.
All you need to do now, is in Raspbmc Settings (under Programs), use the settings Enable Repeat Filter (enable/fill in dot), Enable GPIO TSOP IR Receiver (enable/fill in dot), GPIO IR Remote Profile select Custom (lircd.conf on pi's home folder).
Then either restart XBMC (you can kill -9 on the xbmc.bin process in a ssh session) or reboot the Pi, and once the Lirc service starts in XBMC, your remote should control XBMC.
We don't have to stop here. We can further move onto some customization.
It might be handy, for instance, to associate a remote key to a function. For example, there is no key set that would allow us to quickly access the Favourites Menu. In actuality, we can associate almost any function in XBMC to a key on a remote (likewise can be done for keyboard, mice, and joysticks).
We can repurpose an existing key, such as KEY_HOME, which we will use for this example. If you have a Harmony remote, you could create virtual keys fairly easy that would appear in the activity screen on the remote. The "WD TV" device in Harmony actually contains a few such keys such as A, B and C. You can look up any unusued key name in the keymap (running the irrecord --list-namespace that was ran earlier), and associate the IR signal to the key name and add it to your lircd.conf. For simplicity, this example will simply repurpose the KEY_HOME.
On the Raspberry Pi, I will create a file /home/pi/.xbmc/userdata/Lircmap.xml . I add the following entries to that file:
(download Lircmap.xml)
<lircmap>
<remote device="devinput">
<back>KEY_BACK</back>
<up>KEY_UP</up>
<left>KEY_LEFT</left>
<select>KEY_SELECT</select>
<right>KEY_RIGHT</right>
<down>KEY_DOWN</down>
<stop>KEY_STOP</stop>
<info>KEY_INFO</info>
<skipminus>KEY_REWIND</skipminus>
<play>KEY_PLAYPAUSE</play>
<skipplus>KEY_FASTFORWARD</skipplus>
<menu>KEY_HOME</menu>
</remote>
</lircmap>
In Lircmap.xml, I am associating my key names to functions in XBMC. You can look up all the available function names from http://wiki.xbmc.org/index.php?title=keymap . It appears they are case-insensitive (Play = play). I can associate the keys to explicit functions. Because you are using KEY_* names that are actually valid and common, these are mapped to their appropriate functions in XBMC by default. Therefore, you could have stopped and not created this file, and still be able to use the keys to invoke common functions in XBMC. You only have to create this file and start mapping keys once you have decided to reprogram their functions. You can select any available function name (you cannot make up your own, but you can select an existing name and repurpose it). We will select an unused <menu></menu> and associate the KEY_HOME to it as in <menu>KEY_HOME</menu>.
Finally, on the Raspberry Pi, I will create a file /home/pi/.xbmc/userdata/keymaps/remote.xml . I add the following entries to that file:
(download remote.xml)
<keymap>
<global>
<remote>
<menu>XBMC.ActivateWindow(Favourites)</menu>
</remote>
</global>
</keymap>I invoke the XMBC.ActiveWindow function and pass it Favourites to open the favourites.xml in a Favourties menu. There are a number of windows that can be opened to common function. There are also a number of different functions that can be called. Favourites does exist in XBMC (it is actually a Window ID type that automatically loads whatever is listed in favourites.xml). There are also a bunch of different window IDs that you can do the same action on. You could literally have a 400 key remote and still not have enough keys to satisfy all the functions and windows to call upon.
At this point, with the menu defined to the KEY_HOME in the Lircmap.xml and the menu defined with our custom action to open the Favourites Window in remote.xml, we can either restart XBMC (you can kill -9 on the xbmc.bin process in a ssh session) or reboot the Pi, and once the Lirc service starts in XBMC, your custom key should perform the action of opening the Favourites menu.
The last time I have is troubleshooting. If a key doesn't appear to be performing correctly or if you don't believe you've mapped it correctly, while in XBMC on the Raspberry Pi, ssh into the system and run irw. When you press keys on your remote to XBMC, the actions and key names invoked should appear in the ssh session. This will quickly help identify the key name associated with the key. If you press a key and it doesn't appear in the session, it means you haven't mapped it in the lircd.conf.
No comments:
Post a Comment