My old SA Explorer 2200 recently died, so I traded it in at the Comcast office for a new box. Expecting the same, I was surprised when they handed me a slim, fancy looking cable box with "Cisco" on the front. "Cool! A nice new box."
Excitement soon turned to dismay when I discovered that this box is a complete PITA when it comes to remotes and IR. It uses the XMP protocol, which presents a problem for using other remotes with the box, but also potentially for IR blasting.
If you are using a stand-alone blaster (such as the $12 serial version), it's just a matter of using the codeset found
here.
However, if you have a PVR-150 (MCE version excluded) and you're using its IR blaster, this won't work.
The PVR-150 uses special codesets and is limited to those, so you cannot send arbitrary codes.
The only solution is a new IR blaster. You can buy the $12 version or make your own; I made my own.
Once you've done that, you need to configure lircd to deal with two separate devices: your PVR-150 for IR reception, and the serial blaster for IR transmission.
The startup script for lircd is designed to handle exactly this situation, but it seems to me there's a problem: it determines whether you have multiple IR devices by counting lirc[0-9] entries in /dev. Yet it will only load the lirc_serial module (which creates the device file in /dev) AFTER it has counted the number of devices.
My solution was just to insert the lines loading lirc_serial directly before the number of devices is counted in the /etc/sv/lircd/run file. Restarting lircd now shows the correct number of devices in /dev, and the correct number of lircd processes.
$ ls -l /dev/lirc*
Code:
lrwxrwxrwx 1 root root 5 2010-07-20 14:55 /dev/lirc -> lirc0
crw-rw---- 1 root root 61, 0 2010-07-20 14:55 /dev/lirc0
crw-rw---- 1 root root 61, 1 2010-07-20 14:56 /dev/lirc1
srw-rw-rw- 1 root root 0 2010-07-20 14:56 /dev/lircd
srw-rw-rw- 1 root root 0 2010-07-20 14:56 /dev/lircd1
Code:
$ ps aux | grep lircd
root 4244 0.0 0.0 1548 316 ? Ss 14:56 0:00 runsv lircd
root 4273 0.0 0.0 3056 856 ? S 14:56 0:00 /usr/sbin/lircd -r -n -d /dev/lirc0 --output /dev/lircd --connect=localhost 8761
root 5139 0.0 0.0 3012 556 ? Ss 14:56 0:00 /usr/sbin/lircd -r -d /dev/lirc1 --output=/dev/lircd1 --pidfile=/var/run/lircd1.pid --listen=8761
gjm 8876 0.0 0.0 3640 832 pts/1 S+ 15:31 0:00 grep lircd
Assuming you have inserted the device codeset (Comcast Custom-3-Device) linked to above somehow (either including it in one of the preexisting templates, or making a new directory with that file, etc.) so that your /etc/lircd.conf includes it, you should now be able to receive remote control signals through the PVR-150 and transmit IR through the serial blaster using irsend. You need to specify the device and address when using irsend, something like this:
Code:
sudo irsend -d /dev/lirc1 -a localhost:8761 SEND_ONCE Comcast_Custom-3-Device 5
For me, this changes the RNG-100 box to channel 5. At this point you'll need to update your channel changing script.
I am not going to make this into a HOWTO because I'm not sure this is the "correct" way of doing things; e.g., if the run script for lircd is really broken, or if I'm just not specifying to load the serial module in some other place. (FWIW I tried specifying this in /etc/systemconfig but it didn't work).
But if someone else wants to chime in and see whether they think /etc/sv/lircd/run has a bug, then I'll be more confident about filing a bug report.
PS: I made the "simple version" of the homebrew IR transmitter (three discrete components) and it works without issue. Range was not a problem for me since I was taping the PVR-150's IR blaster to the cable box anyway. I used an IR LED from an old remote, a 1N4148 signal diode, and a 2200 Ohm resistor.[/url]