Thursday, 4 December 2014

Buffalo Linkstation LS-XHL as a bitorrent sync node

A long time ago I bought an LS-X1.0TL Linkstation Pro (LS-XHL) from Buffalo.  The reason I (and
many others) bought it is that it is an 1.2GHz Marvell ARMv5 with 256MB of RAM, a SATA connection, a USB 2.0 port and a gigabit wired ethernet port that you can run linux on. All for about 20W.

The great news is that dusting it off after finding it in a box I find that it is better supported than ever! There is a standard Debian wheezy disk image and kernel 3.14.4 without patches running on the SoC.

Obviously the best use is to install Bitorrent Sync on it and hide it on another network at a different physical location to provide an extra node for security and bandwidth! (grin)

Here is how I did it (based on the work of fjen from nas-central.org, original threads here and here and the lsmonitor script fix is based off Dennis82's post).

1. Cracking the case: https://www.youtube.com/watch?v=GLtY7Rb6s24. Really don't try this without seeing the video - I broke quite a lot of my case getting it open before this existed.

2. Extract the hdd and connect it to a linux system or a linux VM (this is very hard to do on windows). Using dmesg or similar locate the disk device node, e.g. /dev/sdb. Make sure you have the right disk or you might destroy your operating system hard drive.

3. Change the disklabel to GPT (GNU parted)
3.1 Create primary partition 1 at 0 to 128MB, type ext3
3.2 Create primary partition 2 at 128MB to -1024MB (yes -1024MB), type ext4
3.3 Create a swap partition 2 at -1024MB to -1s, type Linux swap

4. Format the filesystems (replace X with the letter of the ls-xhl hard disk you found earlier):
4.1 mkfs.ext3 /dev/sdX1 (the boot partition of 128MB)
4.2 mkfs.ext4 /dev/sdX2 (the main filesystem partition)

5. Mount the filesystems somewhere convenient (as root):
5.1 mkdir ls-xhl_img
5.2 mount /dev/sdX2 ./ls-xhl_img
5.3 mkdir ls-xhl_img/boot
5.4 mount /dev/sdX1 ./ls-xhl_img/boot
5.5 check that ls ./ls-xhl_img shows "boot"

6. Download the wheezy root filesystem from http://neboola.de/fjen/lschlv2/debian/wheezy/
6.1 Unpack as root using GNU tar to the ls-xhl_img/ directory (not boot/)
6.2 Unmount the partitions (ls-xhl_img/boot first)

7. Install the hard drive back onto the ls-xhl's circuit, connect the ethernet cable to a network with a DHCP server where you can find the logs (your home router typically has a page in the web interface where you can find the DHCP logs) and power on.
7.1 The LED on the front should blink blue for a while before going solid on.
7.2 Check the DHCP logs for the IP address that the LS-XHL has acquired using the name linkstation.

8. ssh into that IP address as root (password toor) and run the following commands:
dpkg-reconfigure locales
dpkg-reconfigure tzdata
rm /etc/ssh/ssh_host_* && dpkg-reconfigure openssh-server
apt-get update

8.1 Install the debian updates to ensure you have a safe, secure system.

9. Update the kernel:
http://forum.buffalo.nas-central.org/viewtopic.php?f=71&t=25971

10. Update the lsmonitor script in /etc/init.d/lsmonitor included at the end  (thanks Dennis82 for the pointer to this solution).
10.1 Install the following packages: apt-get install hddtemp lm-sensors fancontrol
10.2 Restart the lsmonitor script by /etc/init.d/lsmonitor restart 

11. Create a user called btsync (or similar) to own the btsync processes and disk space for files.
11.1 Install Bitorrent Sync server packages using the unoffical .deb packages from here: http://forum.bittorrent.com/topic/18974-debian-and-ubuntu-server-unofficial-packages-for-bittorrent-sync/
11.2 Configure packages to run as user btsync.
11.3 Direct your web browser to the IP address:8888 and the Bitorrent Sync GUI should greet you.

12. Profit!

#!/bin/sh

### BEGIN INIT INFO
# Provides:          lsmonitor
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Monitor Linkstation LS-CHLv2 and LS-XHL
# Description:       Enable service provided by daemon.
### END INIT INFO

#
# lsmonitor:
# - handle ls complete power-on
# - monitor hdd temperature & control fan speed
# - monitor hdd status & contol function led
# - monitor function button (todo)
# - monitor power switch (todo)
#
# Changelog:
# - Modified to work with a Debian kernel on a LS-CHLv2
# - Added hdd status monitoring
# - Modified to work with a vanilla kernel >= 3.6
# - Modified to work with a vanilla kernel >= 3.8
#
# Copyright (C) 2013 Sergej Wildemann
##
# Based on:
#  blstools - Copyright (C) 2010 Michele Manzato
#
# Credits:
#  Thanks to archonfx on Buffalo NAS Central forum for HDD
#  temperature monitoring command.
##
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
##

# Location of pid file
PIDFILE=/var/run/lsmonitor_daemon.pid

# Control interfaces
LINFO="/sys/devices/gpio_leds.3/leds/lsxl:amper:info"
LPOWER="/sys/devices/gpio_leds.3/leds/lsxl:blue:power"
LBFUNC="/sys/devices/gpio_leds.3/leds/lsxl:blue:func"
LAFUNC="/sys/devices/gpio_leds.3/leds/lsxl:red:func"
LALARM="/sys/devices/gpio_leds.3/leds/lsxl:red:alarm"

#FAN_CTRL=/sys/bus/platform/drivers/gpio-fan/gpio_fan.3
FAN_CTRL=/sys/bus/platform/drivers/gpio-fan/gpio_fan.4/hwmon/hwmon0
FAN_TARGET=${FAN_CTRL}/fan1_target
FAN_INPUT=${FAN_CTRL}/fan1_input

# Fan speeds
SPEED_STOP=0
SPEED_SLOW=1500
SPEED_HIGH=3250
SPEED_FULL=5000

# HDD temperature limits for fancontrol
HDDTEMP0=45
HDDTEMP1=50
HDDTEMP2=55

# Load settings
. /etc/default/lsmonitor

# Set and get current fan speed
fan_speed()
{
 if [ $1 = "get" ]; then
  cat $FAN_INPUT
 elif [ $1 = "set" ]; then
  echo $2 > $FAN_TARGET
 fi
}

# Monitor HDD temperature & control fan speed
monitor_temperature()
{
 # Retrieve HDD temp
 HDDTEMP=$(smartctl /dev/sda --all | awk '$1 == "194" {print $10}')

 # Change fan speed accordingly
 if [ $HDDTEMP -le $HDDTEMP0 ]; then
  fan_speed set $SPEED_STOP
 elif [ $HDDTEMP -le $HDDTEMP1 ]; then
  fan_speed set $SPEED_SLOW
 elif [ $HDDTEMP -le $HDDTEMP2 ]; then
  fan_speed set $SPEED_HIGH
 else
  fan_speed set $SPEED_FULL
 fi
}

# Monitor HDD status and deactivate power led if idle
monitor_hdd()
{
 HDDSTATUS=$(hdparm -C /dev/sda | grep "standby")
 if [ -z "$HDDSTATUS" ]; then
  echo default-on > $LBFUNC/trigger
  if [ $HDDSTATUSOLD -eq 0 ]; then
   echo `date` active >> /var/log/hddstatus.log
   HDDSTATUSOLD=1
  fi
 else
  echo none > $LBFUNC/trigger
  if [ $HDDSTATUSOLD -eq 1 ]; then
   echo `date` standby >> /var/log/hddstatus.log
   HDDSTATUSOLD=0
  fi
 fi
}

# Control LS switch status to power down the unit
lsmonitor_daemon()
{
 COUNT=12
 HDDSTATUSOLD=0

 echo 1 > $FAN_CTRL/pwm1_enable

 fan_speed set $SPEED_STOP

 while [ true ]; do
  # Check switch status
  #PWR_SW=`cat /sys/class/gpio/gpio${GPIO_PWR_SW}/value`
  #AUT_SW=`cat /sys/class/gpio/gpio${GPIO_AUT_SW}/value`

  # Check HDD status
  monitor_hdd

  # Terminate when in OFF state
  #if [ "$PWR_SW" -eq 1 ] && [ "$AUT_SW" -eq 1 ]; then
  # break
  #fi

  # Once per minute monitor HDD temperature
  if [ $COUNT -eq 12 ]; then
   COUNT=0
   monitor_temperature
  else
   COUNT=$(( $COUNT + 1 ))
  fi

  sleep 5
 done

 # Run the fan at low speed while halting, just in case halt hangs the unit
 fan_speed set $SPEED_LOW

 # blink power led
 echo timer > $LPOWER/trigger
 echo 100   > $LPOWER/delay_on
 echo 100   > $LPOWER/delay_off

 # Initiate unit shutdown
 halt
}

# Kill the lsmonitor daemon
kill_lsmonitor_daemon()
{
 PID=`cat $PIDFILE`
 if [ "$PID" != "" ] ; then
  kill $PID
  rm $PIDFILE
 fi
}


case $1 in
 start)
  # Start the lsmonitor daemon
  lsmonitor_daemon &
  echo $! > $PIDFILE
  ;;
 stop)
  # Kill the lsmonitor daemon
  kill_lsmonitor_daemon
  ;;

 restart)
  $0 stop && sleep 2 && $0 start
  ;;

 *)
  echo "Usage: $0 {start|stop|restart}"
  exit 2
  ;;
esac

Thursday, 2 October 2014

Modding a Lattice CPLD ispMACH 4256ZE breakout board for an external clock

4256ZE Breakout Board with CLK PCB Operating
Taking a quote from the Lattice website this board is probably the best way of getting started with a CPLD I know of with 5V tolerant I/Os:

"The ispMACH 4256ZE Breakout Board is a simple, low-cost board that provides convenient access to densely-spaced IOs. Each I/O on the device is connected to 100-mil header holes. By adding test probes, jumper wires, or pin headers to the board, you can easily evaluate function and performace of the IO cells of the ispMACH 4256ZE."

The only issue I have with this board is that unlike its more modern version, the MachXO2 Breakout Board (note that its IOs are only 3.3V tolerant), it has no site for an external clock crystal on the PCB. This means you are limited to the internal 5MHz oscillator. Or not if you are clever and have access to PCB design software and are willing to spend $1 with OSH Park community PCB service.
The Oscillator series chosen for this project was the Fox FXO-HC53 series, a SMT crystal measuring 5mm by 3.2mm. Since this chip doesn't support LVDS we are using a HCMOS output. The two speeds chosen were 80MHz and 200MHz.
Note the oscillator is specified to drive up to 15pF and a CLK input pin on the ispMACH 4256ZE is 6pF max. The traces on the board are going to contribute further capacitance but it should be within spec.

The board design is detailed below:
CLK Board Schematic

The PCB design has a few features that are worth noting:
  • The output pin of the oscillator is placed as close as possible to the output pin hole and the ground pin hole is as close as possible to the ground pin of the oscillator. This is to minimize impedance and coupling of the high frequency on the board.
  • There are two ground pins - one for the power supply and the other for the CLK return current to make it easier to interface.
  • A pullup resistor 0805 position is available in case the internal pullup proves insufficient or a different crystal is chosen.
  • The footprint of the crystal has the pad size extended outside the normal footprint by twice the length to allow manual soldering.
  • The power and output pins are in a row on a 0.1" spacing to allow compatibility with standard prototyping boards and systems.
  • The bottom of the board under the crystal and high frequency traces is one large ground plane.
  • Total board size is 525mil x 375mil.
CLK Board Top Layer


CLK Board Bottom Layer (Text not reversed)




OSH Park Rendering of the Manufactured PCB




Wednesday, 17 September 2014

Installing LaTeXML into a local directory...

I have been working for a while on a document management system that will use MathJax and .tex inputs to create pretty PDF output and good websites.

Researching the available converters the one that is most attractive and most maintained is LaTeXML.

Firstly I have to setup perl to install packages locally for me to use:

PATH="$PATH:~/perl5/bin"
export PERL5LIB=~/perl5/lib/perl5
export PERL_MB_OPT="--install_base '$HOME/perl5'"
export PERL_MM_OPT="INSTALL_BASE=$HOME/perl5"
curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib 

I now have to fetch and install LaTeXML:

cpanm http://search.cpan.org/CPAN/authors/id/B/BR/BRMILLER/LaTeXML-0.8.0.tar.gz --force
 
Note that you will need the prerequisite system libraries installed onto the system - this approach doesn't provide copies of LibXML etc. as needed.

Command lines:
latexml --dest=example.xml example.tex
latexmlpost --format=html5 --javascript='../MathJax_down/MathJax.js?config=TeX-AMS-MML_HTMLorMML' --destination=example.html example.xml
 
The results are really quite impressive - no links yet as they are behind our 'paywall' but hopefully soon.

A Blast From the Past: Valve/Tube/Electro-optic LA2A

Drip Electronics OPTO 6 version of the 1968 LA2A
When a friend of mine came and asked if I would help him build out an audio compressor that is based on tube amplification and some custom electro-optical cells I, of course, agreed!

The full details of the device are online at Drip Electronics: OPTO 6 (LA2A). They build a PCB to approximate the old point to point wiring typically found under tube systems as well as build the custom electro-optical cells.

Now I am not a tube guy nor an audio guy but any electronics that glows when it is working is good electronics.

Yours truly, (Matthew Swabey) testing the system with safety
 glasses in case one of the tubes or big caps "pops"
I really enjoyed the different construction style but testing was a real problem - the system is so non-linear, clips all the time and distorts it is almost impossible to know if I built it right. The current owner had to take it home and test with a microphone and speakers before it could be signed off.



Tuesday, 15 July 2014

Making ModelSim vsim and Questa vco work on Ubuntu 14.04

In my previous article, http://mattaw.blogspot.com/2014/05/making-modelsim-altera-starter-edition.html, I covered how to install and run the ModelSim-ALTERA starter edition on Ubuntu 14.04.

Subsequently it turns out this fix also applies to Mentor Graphic's ModelSim and Mentor Graphic's Questa (not that surprising as Questa is a superset of ModelSim with far greater capabilities).

The previous instructions for ModelSim ALTERA work for ModelSim.

Here are the detailed instructions to apply the fix to Questa:

Firstly complete installing everything including compiling the new libfreetype libraries and copying them into the questasim directory.

Now we need to edit the vco launch script to ensure the new freetype libraries are used:
sudo vim bin/vco
Search for the following line:
dir=`dirname $arg0`
and underneath add the following new line:
export LD_LIBRARY_PATH=${dir}/lib32
 
Test by running vco and hopefully you will be greeted by the Questa GUI.

Please email me any fixes or changes you would like so I can update this post and give credit.

Friday, 20 June 2014

Unlocking the temperature on a Weller WSL or WSD 81 Solder Station

[Credit for the fix goes to Todd Wild]

Just had a weird problem with my Weller WSL with WMP pencil:

Symptom of initial failure:
The base unit was resetting and making a clicking noise while the iron temperature dropped.

When I looked closer the clicking noise was a screw I had put on the top of the base unit - every time it reset the screw jumped!

After opening the WMP pencil I discovered the strain relief failed and the wires inside the iron were shorting. After fixing that it worked perfectly but the base unit had become locked to 375°C! [Speculation is that the EEPROM in the micro was corrupted by all the hard resets and/or the EM pulses].

Symptom of locked base unit:
Trying to change the temperature failed with the display just flashing when up or down is pushed. Just in case you didn't know nearly all solder stations for production environments can be locked to prevent inexperienced people altering the soldering parameters.

Solution:
Purchase a WCB1 calibrator for $1500 (only joking! read on...)

-or-
Opened WSL / WSD81 base unit - the reset jumper is to the right of the "up button" at the top right

  1. Open the case (spudgers needed, start with prying open the keyholes sideways on either side of the heatsink on the back and then pry the case up from the slots along both sides starting at the back. It should pop off towards the front).
  2. Install a jumper on the empty 0.1" pitch pins to the right of the "Up" button on the top right of the PCB. In the picture they are just visible to the right of the black square which is the up button.
  3. Power on the base unit - watch out for the live 120/240V!
  4. Wait for the display to show FSE.
  5. Remove the jumper while it is powered on.
  6. ...
  7. Profit!
Hope this may be of some use to someone else.

Making my Lenovo MCE RC-6 IR Receiver immune to interference by my TV backlight - Success

Please see this article for the starting point of this work.

Installing the new Vishay module has completely solved my problem with the TV backlight. It was terribly simple as the part is 100% compatible with the original design.

Excellent!

Thursday, 12 June 2014

Modding a Gigabyte i-RAM (GC-RAMDISK) to run without being plugged into a PCI slot...

Gigabyte i-RAM or GC-RAMDISK, PCI version

The Gigabyte i-RAM (or GC-RAMDISK) is a curious device. I have always been uncertain if it was a commercial success or not however the main specifications are here:
  • PCI 3.3V and 5V slot for power (bottom edge connector)
  • SATA 150 hard disk connection (red connector, top right)
  • Maximum capacity of 4 gigabytes (yes 4)
  • One benchmark has it at 25,576 RW IOPS for 512k (YES 25k IOPS)
  • Doesn't wear out or degrade with time or capacity like an SSD
  • Backup battery (on the right) keeps the data on the drive live for about 16 hours.
The only point of real interest is the IOPS. You can get the whole thing setup from eBay for <$200 while to achieve better IOPS from a SSD requires something like the OCZ Vector at $450. Note that for all normal uses the OCZ Vector is a much better solution!

ZFS ZIL

I am a big user of ZFS on Linux for many reasons (note unless they have released 0.6.3 use git HEAD as so many important fixes have been bundled in since 0.6.2).
ZFS is an excellent file system (you can read about it here) but mainly I value it for the data integrity first and the ease of configuration second.
ZFS is designed to take advantage of hierarchical storage to deliver increased performance, i.e. you can feed it hard disks for bulk storage, SSDs and things like this RAMDISK as caches/log volumes and it will present a single, high integrity, higher performance, volume to the operating system.
The log I care about particularly (as do most ZFS users) is the ZIL or ZFS Intent Log. For full details read the blog but basically every so often a filesystem must commit data to persistent storage before carrying on for data integrity/safety's sake. Having a low latency, separate log allows the filesystem to massively accelerate its performance by moving those critical writes off the slow bulk storage onto a dedicated device until they can be committed to bulk storage in an scheduled, ordered, sane manner. This also frees the bulk storage to service the other outstanding requests for data.
SSDs work well as ZIL devices however the device is constantly hit with small writes which will wear the disk reasonably quickly and degrades the IOPS as the different areas of the flash array are written to and the management IC works harder.
The Gigabyte i-RAM (GC-RAMDISK) doesn't wear, nor does it suffer from degraded IOPS over time. It also still has a very high IOPS value for such an old piece of hardware.

Modifying it to run outside a PCI socket

While the i-RAM looks like it is a PCI card it merely uses the socket for power, nothing else. A bit of reverse engineering reveals the i-RAM uses the following:
  1. 12V seems to be related to the battery backup subsystem
  2. 5V used to power the DDR termination supplies and charge the battery, certainly high current
  3. 3.3V used to power the main electronics on the board
  4. 3.3Vaux [always on] used to trickle charge the battery and keep the RAM contents alive when the computer is powered down
  5. RST# used to switch the card from standby to on when the PC powers up and off again on power down
So if we look inside the PC (not using the motherboard or a PCI slot) then the ATX connector has nearly all the signals we need:
  1. 12V
  2. 5V
  3. 3.3V
  4. 5Vsb [always on] 
  5. PS_OK indicates the power supply if fully turned on and voltages stable
So the connections are (i-RAM - ATX):
  1. 12V - 12V
  2. 5V - 5V
  3. 3.3V - 3.3V
  4. 3.3Vaux - Power Regulator - 5Vsb
  5. RST# - PS_OK
The only supply missing is the 3.3Vaux however there is the 5Vsb available. With a suitable linear LDO and heatsink it was possible to build a regulator. The i-RAM is quite naughty and draws far too much current from the 3.3Vaux in the PCI bus - I have measured it at over 1.3A! To cope with this I chose the Texas Instruments LM1084 LDO linear 3A regulator.

Here are the photos of the final product:
 
Rebuilt i-RAM attached to standoffs inside the case lid
Component side (B) of the modified i-RAM showing heavy flywires and Molex sockets
Side A of the modified i-RAM showing heavy flywire connections
Inline ATX 5VSB to 3.3Vaux linear regulator (in fact the regulator on this board is incorrect and was replaced with the LM1084)






Screw terminal block splicing the necessary ATX voltages for the i-RAM

Wednesday, 28 May 2014

Making ModelSim ALTERA STARTER EDITION vsim 10.1d work on Ubuntu 14.04

[WARNING: Some people are reporting that following the steps for them does not fix the problem. I am working on trying to find out what the issue is.]

Trying to get a version of ModelSim running on a very modern version of Linux often presents challenges. Luckily I had lots of helpful information on the internet (major sources linked below) to get it going. This article mostly adapts the work done by the Arch Linux crew.

Problem number one: The free version of ModelSim Altera Edition is 32 bit only while the normal Linux PC will be 64 bit.

On Linux this requires us to install the 32 bit versions of the libraries that it depends on. Luckily this is fully supported on a modern Linux like Ubuntu 14.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install gcc-multilib g++-multilib \
lib32z1 lib32stdc++6 lib32gcc1 \
expat:i386 fontconfig:i386 libfreetype6:i386 libexpat1:i386 libc6:i386 libgtk-3-0:i386 \
libcanberra0:i386 libpng12-0:i386 libice6:i386 libsm6:i386 libncurses5:i386 zlib1g:i386 \
libx11-6:i386 libxau6:i386 libxdmcp6:i386 libxext6:i386 libxft2:i386 libxrender1:i386 \
libxt6:i386 libxtst6:i386

Problem number two: If you have the following error when running vsim:

** Fatal: Read failure in vlm process (0,0)
Segmentation fault (core dumped)
 
Then you probably need to build a new version of freetype, a font setting library and modify ModelSim to use it. For an unknown reason ModelSim has an issue with modern versions shipping in Arch and Ubuntu 14.04. First download the source code of freetype 2.4.12:

http://download.savannah.gnu.org/releases/freetype/freetype-2.4.12.tar.bz2

Now install the build dependencies needed for libfreetype6, extract the source (using tar) and configure and build libfreetype:
sudo apt-get build-dep -a i386 libfreetype6
tar -xjvf freetype-2.4.12.tar.bz2
cd freetype-2.4.12
./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"
make -j8
The finished libraries are now available inside the "objs/.libs" directory. As they are necessary to run ModelSim we need to copy them into the install directory so they don't get lost and then modify ModelSim's vsim script to use the new libraries instead of the system wide versions. Change directory to the directory where you installed ModelSim, /opt/altera/13.1/modelsim_ase/, on my system. Note you may need to edit the directory paths to match those used on your system.
sudo mkdir lib32
sudo cp ~/Downloads/freetype-2.4.12/objs/.libs/libfreetype.so* ./lib32
Now we need to edit the vsim launch script to ensure the new freetype libraries are used:
sudo vim bin/vsim
Search for the following line:
dir=`dirname $arg0`
and underneath add the following new line:
export LD_LIBRARY_PATH=${dir}/lib32
 
Test by running vsim and hopefully you will be greeted by the ModelSim GUI.

[Tested on fresh install of Ubuntu 14.04]

Sources:
  1. https://wiki.archlinux.org/index.php/Altera_Design_Software
  2. http://stackoverflow.com/questions/3261909/build-32bit-on-64-bit-linux-using-a-configure-script 
  3. https://wiki.debian.org/Multiarch/CrossDependencies

Sunday, 11 May 2014

Making my Lenovo MCE RC-6 IR Receiver immune to interference by my TV backlight

Sadly due the newer technologies employed in CFL bulbs (which incidentally is the technology behind my TV) emit a lot of IR interference on the frequency ranges used by the older IR controls. Vishay publishes a summary which goes into more technical detail here: http://www.vishay.com/docs/80072/disturan.pdf.

My MCE receiver is an RC-6 system by SMK RXX6000-40 branded Lenovo, if you want to buy one of your own then please checkout eBay.


HP Remote with USB Receiver RC-6 [Taken from eBay auction linked here]

However despite being aesthetically excellent the receiver suffers from interference from the TV backlight which makes it unusable if the room light isn't bright, wholly unsuitable for certain movies.

This is a pretty common problem for the older IR systems however newer IR receiver modules have been enhanced with better filtering systems.

 Opening the receiver is easy, a single screw hidden in the center of the label and the top and bottom come apart to reveal a single PCB.


The IR module is the black module standing up on the lefthand edge of the PCB (the "front" of the PCB is the south west side). Careful scrutiny of the top of the module reveals it is a Vishay Siliconix TSOP34838, a 38kHz filtered IR module.
Consulting the datasheet from Vishay, http://www.vishay.com/docs/82489/tsop322.pdf, we can see that there is another, pin compatible module, with an enhanced filtering system (Vishay's Active Gain Control 4 or AGC4) to exclude the interference the TSOP34438 is vulnerable to.

I have the new module on order and when it arrives I'll post the results.




My current home media center build: Mythmaster

Apologies - working for two long under various agreements that mean I can't discuss my work means I haven't posted anything in too long.

Hardware

Bought from eBay from Tamsolutions (there may be more available as they seem to have shipments regularly as of May 10th 2014). The computer is quite noisy so it is based down in the basement and connected to the TV by an HDMI extender and a USB extension cable.

Case: AIC RSC-4ED2 with 6x SATA-II 3.0 Gbps four position backplane (TW-000-51675-AR).

Motherboard: SuperMicro H8DME-2 nVidia MCP 55 Pro.
 - Modified one of the PCIe 8x sockets to accept a x16 GFX card by opening the end of the socket.

GFX Card: GeForce GT 240. [Chosen as it can do the most complete deinterlace on 1080i video]
 - Modified with a flywire to connect the PRSNT#1 pin (1A) to PRSNT#2 (48B) so the motherboard detects the card in the modified PCIe 8x socket.

CPU: Two Quad Core Opteron 2389s. [An eBay purchase to replace the single Dual Core 2212 HE. Don't forget the extra CPU cooler]

Memory: 24 Gigabytes of PC-5300P. [Increased by another eBay purchase]

3x SATA Controller Cards: AOC-SAT2-MV8

Drives:
2x HP ST3250824AS 250GB SATA HDDs in Linux Software RAID 1. Note please don't waste time trying to enable SATA-II or NCQ on the HP versions of this disk. They are SATA-I and don't advertise NCQ.

6x 2TB Seagate or Western Digital HDDs managed by ZFS.

TV: 47" VIZIO E470VA

HDMI Extender: No real name HDMI over dual CAT5e or CAT6 cables from Amazon.

USB Long Cable: An active USB 2.0 cable from Amazon.

ATSC Receiver: HDHR4-2US Silicondust HDHomeRun Dual Tuner.

Remote control: Lenovo RC-6 receiver by SMK RXX6000-40.

Software

OS: Linux Ubuntu 14.04 LTS.
 - nVidia drivers from Ubuntu 319.
 - Pulseaudio removed to enable sound in XBMC standalone
 - User autologin running XBMC standalone.
 - Modified the udev rules to enable the IR remote (MCE USB by SMK) device ids, read this thread for details.

Disk Management: ZFS on Linux, GIT head (as the current 0.6.2 release is old and the new version is about to be released. To work on Kernel 3.14 the latest GIT version is necessary).

Frontend: XBMC 13.0 Gotham.

Backend: Mythtv 0.27 managing the Silicondust HD HomeRun and scheduling recordings.