Snapstream Firefly

The Snapstream Firefly is a X10 based remote control which uses RF commands as opposed to IR. This guide assumes that you have installed XBMC Live or have at least performed all steps outlined in one of the articles listed here Installing XBMC for Linux and here HOW-TO setup Lirc to talk to XBMC. You will also need a SFTP client and a terminal emulator like WinSCP and Putty.

You will need root access for the following commands.

Setting up the easy way
The following file contains all modifications required to make the Snapstream Firefly work and has been tested under Ubuntu 9.04-10.10 with XBMC-live. This file will map out several features of the remote. The files contained within this tar.gz are an example of just one way to do this. http://www.mediafire.com/file/034de16ccrr0mdr/SnapStreamFireflyFilesytemRoot.tar.gz wget http://www.mediafire.com/file/034de16ccrr0mdr/SnapStreamFireflyFilesytemRoot.tar.gz tar xvf ./SnapStreamFireflyFilesytemRoot.tar.gz sudo cp -R ./SnapStreamFireflyFilesytemRoot/* / sudo reboot You are now finished. Enjoy your snapstream firefly remote.
 * Download the following file - NOTE: wget command may not work because mediafire blocks the direct link to the file.
 * unpackage it
 * with superuser permsissions copy it to the root of the filesystem
 * Follow "Integrating your Firefly LIRC commands into XBMC" section below since the Firefly remote is not in there by default. You will need to edit /usr/share/xbmc/system/Lircmap.xml.
 * Reboot your computer

Setting up Lirc
First we will set up Lirc to work with the remote. lircd.conf specifies to Lirc how it should handle the remote device. We need to replace the current file with our Snapstream Firefly file.

begin remote name Snapstream bits 16 eps 30 aeps 100 one 0 0 zero 0 0 pre_data_bits 8 pre_data 0x14 post_data_bits 16 post_data 0x0 gap 235978 toggle_bit_mask 0x80800000 begin codes Play 0x7AA5 Pause 0x7EA9 Stop 0xFD28 Fwd 0xFB26 Rew 0x79A4 Left 0x729D Right 0xF41F Up 0x6F9A Down 0xF722 OK 0x739E CH+ 0xE00B CH- 0x618C EXIT 0x75A0 MENU 0xF11C OPTION 0x042F INFO 0x83AE Next 0x7FAA Prev 0x002B MAXIMIZE 0x81AC Firefly 0xD500 Rec 0xFC27 VOL+ 0x5E89 VOL- 0xDD08 MUTE 0x5F8A CLOSE 0xD702 Video 0xDC07 Music 0xDB06 Photos 0x5A85 TV 0x5883 A 0x6E99 B 0xF01B C 0x76A1 D 0xF823 0 0xEC17 1 0x628D 2 0xE30E 3 0x648F 4 0xE510 5 0x6691 6 0xE712 7 0x6893 8 0xE914 9 0x6A95 BACK 0x6B96 DVD 0xD904 Help 0x5681 Mouse 0x022D ENT 0xED18 end codes end remote
 * Log into the XBMC computer using your SFTP client.
 * Replace the contents of /etc/lirc/lircd.conf in it's entirety with the following:

and /etc/lirc/hardware.conf # REMOTE="Windows Media Center Remotes (new version Philips et al.)" REMOTE_MODULES="lirc_dev lirc_mceusb2" REMOTE_DRIVER="" REMOTE_DEVICE="/dev/lirc0" REMOTE_LIRCD_CONF="mceusb/lircd.conf.mceusb" REMOTE_LIRCD_ARGS="" TRANSMITTER="None" TRANSMITTER_MODULES="" TRANSMITTER_DRIVER="" TRANSMITTER_DEVICE="" TRANSMITTER_LIRCD_CONF="" TRANSMITTER_LIRCD_ARGS="" START_LIRCD="true" LOAD_MODULES="true" LIRCMD_CONF="" FORCE_NONINTERACTIVE_RECONFIGURATION="false" START_LIRCMD=""
 * 1) /etc/lirc/hardware.conf
 * 1) Chosen Remote Control
 * 1) Chosen IR Transmitter
 * 1) Enable lircd
 * 1) Don't start lircmd even if there seems to be a good config file
 * 2) START_LIRCMD="false"
 * 1) Try to load appropriate kernel modules
 * 1) Default configuration files for your hardware if any
 * 1) Forcing noninteractive reconfiguration
 * 2) If lirc is to be reconfigured by an external application
 * 3) that doesn't have a debconf frontend available, the noninteractive
 * 4) frontend can be invoked and set to parse REMOTE and TRANSMITTER
 * 5) It will then populate all other variables without any user input
 * 6) If you would like to configure lirc via standard methods, be sure
 * 7) to leave this set to "false"

For more information see Lirc and Lircmap.xml

Integrating your Firefly LIRC commands into XBMC
You will need to add the following information into the current lirc map for XBMC to interperate the commands given by lirc into productive commands.


 * Using your SFTP client, modify /usr/share/xbmc/system/Lircmap.xml to add the following directly below and above :

 Play Pause Stop Fwd Rew Left Right Up Down OK 		 CH+ CH- MENU EXIT OPTION INFO Next Prev MAXIMIZE Firefly Rec VOL+ VOL- MUTE CLOSE Video Music Photos TV 		 A  		 B  		 C  		 D  		 0 1 		 2  		 3  		 4  		 5  		 6  		 7  		 8  		 9  		 ENT BACK In this configuration, BACK is a redundant button. It calls the same function as MENU and used as a backspace while typing

The following buttons are unused in this configuration.
 * HELP
 * MOUSE
 * DVD

S3 resume combo Close button fix
The funny thing about this remote is; the only button which will allow it to resume the computer from S3 is the same button that puts the computer into standby. The same command is issued by the remote every time you press the close button and is retained in memory until issued to any output by lirc. Resuming from standby with the power button puts the computer back in standby or deactivates the remote.

In order to issue the S3 resume command to the computer and restart the remote controller without issuing the command to put the computer back into sleep mode or standby you will need to add the following resume script.

case "$1" in 	resume|thaw) 		curl "http://127.0.0.1:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn&parameter=LIRC.Stop" 		rmmod lirc_atiusb 		modprobe lirc_atiusb 		/etc/init.d/lirc restart  		irw & sleep 1; killall irw 		curl "http://127.0.0.1:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn&parameter=LIRC.Start"  		echo "lirc_atiusb resume script completed" >>/tmp/script.log 	;; esac
 * Using your SFTP client, create the file /etc/pm/sleep.d/99lirc-resume.sh
 * Modify the contents of /etc/pm/sleep.d/99lirc-resume.sh to contain the following:
 * 1) !/bin/sh
 * 1) This script uses curl.  Install curl by "apt-get install curl" from a terminal.   This script restarts any
 * 2) ATI USB compatable device, including the Snapstream Firefly.  It accomplishes this by first restarting the
 * 3) XBMC, then Firefly, then restarting LIRC. It then ports the resident memory command to IRW, waits 1 seccond
 * 4) and terminates the irw process. Finally, it sends a command back to XBMC to restart lirc input services.
 * 5) When finished, it reports to /tmp/script.log.  This script goes in /etc/pm/sleep.d/99lirc-resume.sh

You will now need to make the new file executable.

sudo chmod +x /etc/pm/sleep.d/99lirc-resume.sh
 * open your terminal, log in and type the following

You will now need to install curl to allow the resume script to send commands to the XBMC event server. sudo apt-get install curl


 * Restart the computer

Your remote will now function properly. For the full feel of a media center device, and quicker load times in XBMC, change Settings-System-Hardware-Shutdown fucntion from Shutdown to Suspend.