Sunday, June 30, 2013

AIM Media Center Remote Control RC118 with Linux and XBMC

Bought myself a new remote control from Maplin yesterday for my media centre running XBMC on Linux (Debian Testing). It's an AIM Media Center Remote Control, model RC118 and only costs £20.


It's nicely made for the price, the only cons are that it's got a Windows logo on one button (uck!) and unlike my old remote (also from Maplin) not all the buttons work 'out of the box' on Linux & XBMC.

The 'pro' of this remote however is that it's a 'standard' MCE RC6 remote so the buttons can be translated and mapped with lirc. I couldn't do this with my old remote as it emulates a keyboard device.

For a relatively popular remote, surprisingly little information can be found on the web on how to set it up properly with lirc and XBMC, just the usual array of forum posts and incomplete or non-working advice. So some reading was required of the lirc & XBMC's Lircmap.xml documentation.

So here's the solution, if you discount creating the map files (as I've supplied them here) it's actually very simple. I've tested this on Debian (Testing) & Fedora 18 so I assume this would work just as well on derivatives such as Ubuntu/Mint and CentOS/RHEL respectively.
 

So first, install lirc...

Either use your preferred software installer GUI or save time by opening a terminal & using the command line;

On Debian & Ubuntu

 sudo apt-get install lirc  

On Fedora

 sudo yum install lirc  


Configure lirc

The lirc daemon is configured with the file /etc/lirc/lircd.conf.
 In the terminal, you can open this file for editing in gedit (or your preferred text editor);
 sudo gedit /etc/lirc/lircd.conf  
Append the following text your lircd.conf.
 begin remote  
  name rc118  
  bits      13  
  flags RC6|CONST_LENGTH  
  eps      30  
  aeps     100  
  header    2700  855  
  one      486  419  
  zero     486  419  
  pre_data_bits  24  
  pre_data    0x1BFF83  
  gap     107341  
  min_repeat   1  
  toggle_bit_mask 0x8000  
  rc6_mask  0x100000000  
    begin codes  
      Power          0x1BF3  
      Record          0x1BE8  
      Stop           0x1BE6  
      Pause          0x1BE7  
      Rewind          0x1BEA  
      Forward         0x1BEB  
      Previous         0x1BE4  
      Play           0x1BE9  
      Next           0x1BE5  
      Zoomout         0x1BD9  
      Zoomin          0x1BDA  
      Eject          0x1BB7  
      Select          0x1BDB  
      Menu           0x1BF2  
      Back           0x1BDC  
      Info           0x1BF0  
      Up            0x1BE1  
      Down           0x1BE0  
      Left           0x1BDF  
      Right          0x1BDE  
      OK            0x1BDD  
      Vol+           0x1BEF  
      Vol-           0x1BEE  
      Chan+          0x1BED  
      Chan-          0x1BEC  
      Mute           0x1BF1  
      PICTURES         0x1BB6  
      VIDEOS          0x1BB5  
      MUSIC          0x1BB8  
      1            0x1BFE  
      2            0x1BFD  
      3            0x1BFC  
      4            0x1BFB  
      5            0x1BFA  
      6            0x1BF9  
      7            0x1BF8  
      8            0x1BF7  
      9            0x1BF6  
      0            0x1BFF  
      Star           0x1BE2  
      Hash           0x1BE3  
      Clear          0x1BF5  
      Keyboard         0x1BA5  
      Edit           0x1BF4  
      Red           0x1BA4  
      Green          0x1BA3  
      Yellow          0x1BA2  
      Blue           0x1BA1  
    end codes  
 end remote  

On Debian...

The Debian package of lirc comes with a /etc/lirc/hardware.conf file, the Fedora install does not and just works without one. On Debian I had to also amend the hardware.conf file by amending the DRIVER & DEVICE variables to...
 DRIVER="default"  
 DEVICE="/dev/lirc0"  
This is likely to be the same for most installations but if in doubt of what your device is, look in /dev;
 ls -l /dev/lirc*  

Restart lirc

 sudo service lirc restart  

Configure XBMC

XBMC already comes with a set of key maps for remote controls via lirc in the file /usr/share/xbmc/system/Lircmap.xml. You can also have a user specific Lircmap.xml in your ~/.xbmc/userdata directory.
Here we'll put our mappings for our 'rc118' lirc remote (this name being defined in our /etc/lirc/lircd.conf file) to our user Lircmap.xml file.

In a terminal, open a new file in gedit (or your preferred text editor);
 gedit ~/.xbmc/userdata/Lircmap.xml  
Paste the following text into your new file;
 <lircmap>  
   <remote device="rc118">  
     <mypictures>PICTURES</mypictures>  
     <liveradio>RADIO</liveradio>  
     <myvideo>VIDEOS</myvideo>  
     <mymusic>MUSIC</mymusic>  
     <record>Record</record>  
     <pause>Pause</pause>  
     <stop>Stop</stop>  
     <skipminus>Previous</skipminus>  
     <play>Play</play>  
     <skipplus>Next</skipplus>  
     <reverse>Rewind</reverse>  
     <forward>Forward</forward>  
     <start>Menu</start>  
     <back>Back</back>  
     <info>Info</info>  
     <volumeplus>Vol+</volumeplus>  
     <volumeminus>Vol-</volumeminus>  
     <left>Left</left>  
     <right>Right</right>  
     <up>Up</up>  
     <down>Down</down>  
     <select>OK</select>  
     <channelplus>Chan+</channelplus>  
     <channelminus>Chan-</channelminus>  
     <mute>Mute</mute>  
     <recordedtv>Eject</recordedtv>  
     <guide>Zoomout</guide>  
     <livetv>Zoomin</livetv>  
     <menu>Select</menu>  
     <one>1</one>  
     <two>2</two>  
     <three>3</three>  
     <four>4</four>  
     <five>5</five>  
     <six>6</six>  
     <seven>7</seven>  
     <eight>8</eight>  
     <nine>9</nine>  
     <star>Star</star>  
     <zero>0</zero>  
     <hash>Hash</hash>  
     <clear>Clear</clear>  
     <teletext>Keyboard</teletext>  
     <enter>Edit</enter>  
     <red>Red</red>  
     <green>Green</green>  
     <yellow>Yellow</yellow>  
     <blue>Blue</blue>  
   </remote>  
 </lircmap>  
Save your new file.

Disable the remote's kernel driver

Now the RC118 remote is handled by lirc you have no need for the Linux kernel to handle it. To prevent XBMC from receiving input from both lirc and xinput (resulting in double key presses for those buttons that did work out of the box) you need to disable the relevant kernel module.

Unload the RC6 decoder driver with the following command;
 sudo modprobe -r ir_rc6_decoder  
To disable this driver so it's not loaded when the system is booted, blacklist it as follows;
 echo "blacklist ir_rc6_decoder" | sudo tee -a /etc/modprobe.d/ir_rc6_decoder.conf  


Now start or restart XBMC and your AIM RC118 remote works completely.