I took the plunge and upgraded my TV box to Ubuntu 12.04 from 10.04. I opted to do a complete re-install rather than upgrade. I do realise 12.10 is now out, but this post has been sat around needing a tidy up for a while 😉
Getting the remote working last time wasn’t entirely straightforward and hasn’t really improved. I didn’t take any notes last time around either, so I’ve kept notes this time and hope they are of use to someone else. I think half the problem is due to being a cheapskate and getting a generic mce remote rather than the official one!
The USB IR receiver that came with the remote is reported as being a Formosa21 eHome Infrared Transceiver with Device ID
Bus 005 Device 002: ID 147a:e03e Formosa Industrial Computing, Inc. Infrared Receiver [IR605A/Q]
With the 12.04 kernel and standard version of lirc the remote is successfully identified and when running irw it spits out button codes for most of the buttons on the remote. Some of the buttons are not recognised, but more disappointingly out of the box XBMC doesn’t respond to the remote at all.
So there are two problems that we need to deal with here:
- Updating the lirc config file for the additional buttons
- Getting XBMX to recognise the remote
I generated a new lirc config file for the remote using
irrecord, which ended up being very similar to the vista_mce config that ships with lirc.
I simply updated
/usr/share/lirc/remotes/mceusb/lircd.conf.mceusb and edited the final vista_mce entry to appear as follows:
begin remote name vista_mce bits 13 flags RC6 eps 30 aeps 100 header 2700 880 one 490 410 zero 490 410 pre_data_bits 24 pre_data 0x1BFF83 gap 104254 toggle_bit_mask 0x8000 rc6_mask 0x100000000 begin codes Power 0x0BF3 Pictures 0x0BB6 Radio 0x0BAF Videos 0x0BB5 Music 0x0BB8 Rec 0x0BE8 Pause 0x0BE7 Stop 0x0BE6 SkipPrevious 0x0BE4 Play 0x0BE9 SkipNext 0x0BE5 Rewind 0x0BEA FastForward 0x0BEB Start 0x0BF2 Back 0x0BDC More 0x0BF0 Start 0x0BF2 VolUp 0x0BEF VolDown 0x0BEE ChanUp 0x0BED ChanDown 0x0BEC Up 0x0BE1 Down 0x0BE0 Left 0x0BDF Right 0x0BDE OK 0x0BDD Mute 0x0BF1 Record 0x0BB7 Guide 0x0BD9 TV 0x0BDA DVD 0x0BDB One 0x0BFE Two 0x0BFD Three 0x0BFC Four 0x0BFB Five 0x0BFA Six 0x0BF9 Seven 0x0BF8 Eight 0x0BF7 Nine 0x0BF6 Star 0x0BE2 Zero 0x0BFF Hash 0x0BE3 Clear 0x0BF5 Teletext 0x0BA5 Enter 0x0BF4 Red 0x0BA4 Green 0x0BA3 Yellow 0x0BA2 Blue 0x0BA1 end codes end remote
The final step is that XBMC is not setup to look for a remote called vista_mce, the nearest is mceusb which I presume is the name for the official remotes.
XBMC makes use of a file called Lircmap.xml to map remote control buttons to internal button names.
This lirc button names above match the mceusb configuration as closely as possible in order to make setting up the
Lircmap.xml nice and easy. The default configuration is available in
/usr/share/xbmc/system/Lircmap.xml and I simply copied this locally to
~/.xbmc/userdata and added the section below to the top of the file.
<lircmap> <remote device="vista_mce"> <start>Start</start> <play>Play</play> <pause>Pause</pause> <stop>Stop</stop> <forward>Forward</forward> <reverse>Rewind</reverse> <left>Left</left> <right>Right</right> <up>Up</up> <down>Down</down> <select>OK</select> <pageplus>ChanUp</pageplus> <pageminus>ChanDown</pageminus> <back>Back</back> <menu>DVD</menu> <title>Guide</title> <info>More</info> <skipplus>SkipForward</skipplus> <skipminus>SkipPrevious</skipminus> <display>Aspect</display> <start>Home</start> <record>Record</record> <volumeplus>VolUp</volumeplus> <volumeminus>VolDown</volumeminus> <mute>Mute</mute> <power>Power</power> <myvideo>Videos</myvideo> <mymusic>Music</mymusic> <mypictures>Pictures</mypictures> <mytv>TV</mytv> <one>One</one> <two>Two</two> <three>Three</three> <four>Four</four> <five>Five</five> <six>Six</six> <seven>Seven</seven> <eight>Eight</eight> <nine>Nine</nine> <zero>Zero</zero> <star>Star</star> <hash>Hash</hash> <clear>Clear</clear> <enter>Enter</enter> <red>Red</red> <green>Green</green> <yellow>Yellow</yellow> <blue>Blue</blue> <teletext>Teletext</teletext> </remote> ...
Mind the Gap
The gap value computed when using
irrecord was initially 74254. Unfortunately with this value I was occasionally getting spurious double buttons presses, which are pretty annoying. No amount of playing with the
min_repeat settings in the
lirc.conf file would stop it.
Pushing the gap value up above 100000 fixes the problem, but at the expense of not being able to hold down the button and have it be repeatedly triggered.