Categories
General blog entries

Configuring custom remote buttons for XBMC

When you are the proud owner of a MCE remote, you are set for use with XBMC. However, if you are using a custom remote (like the one that came with my Thermaltake DH-101 MediaLab kit) – you might wonder how you are going to get all the buttons to work. Short answer: you won’t by using the Lircmap.xml file.

I configured my remote using Lircmap.xml like it stated on the site and it worked fine. I modified the bit in both Lircmap.xml and Keymap.xml until the point came where you want to add buttons that are not on the standard remote.

I figured, I could just add another button to the section of Keymap.xml – in my case XBMC.EjectTray() but although XBMC started fine, you wind up with this:

ERROR: Remote Translator: Can't find button eject

This is because XBMC uses a fixed map to determine which buttons are valid. Instead of simply adding buttons by name, they have identifiers for each button so adding your own buttons won’t work.

At this point, you have 2 options:

First, if you only have a few buttons you could recycle unused buttons. Open up http://xbmc.org/trac/browser/trunk/XBMC/xbmc/ButtonTranslator.cpp and look for the function called ‘CButtonTranslator::TranslateRemoteString(const char *szButton)’; ctrl+f it if you can’t find it, right now it is at line 777. See the lines following it? Those are the valid button names. For example: ‘if (strButton.Equals(“left”)) wButtonCode = XINPUT_IR_REMOTE_LEFT;’ – in this line the name ‘left’ is specified. Look for buttons you are not using and override their action in Keymap.xml.

The second option is a bit trickier. First, create ‘advancedsettings.xml’ in de userdata folder and put ‘true’ inside the file. Restart XBMC and start monitoring the XBMC log (by default under /var/tmp/xbmc-user.log’).

Start pressing all remote buttons and note which obc code they produce. Add all these codes to Keymap.xml under the tag – create it if you have to. A valid piece would look like:

[keymap]
[global]
[universalremote]
[obc30]XBMC.EjectTray()[/obc30]
[/universalremote]
...

Note that I replaced the tag start and endings with ‘[‘ and ‘]’ because my site seems to eat the correct ones.

Good luck taming XBMC and if you can’t figure out how to read the source file with the button names, you can look at this wiki article from the XBMC website. Note that it is usually out of date.

Update: the OBC codes only worked when I was using my universal remote with the XBox setting – unfortunately, this does not seem to work for specific remotes. Drat.