Harmony 555 – a hacker’s remote :)

To go with my purchase of a new Topfield 5800 Freeview PVR in February I replaced the mess of remote controls with a single universal remote from Logitech. As usual I did some exhaustive research so that I knew exactly what I was getting, and that it’d do everything I wanted. The remote I chose was the Harmony 555; now available for about £50.

The main thing with the Harmony remote controls is that they’re very customisable, however you’ll need patience to set it up if you’re a perfectionist. All in all it took me around 3 hours (on and off) to get it just right. Programming it requires you use some software on a PC & upload the settings to the remote via a USB cable. This worked pretty well and I couldn’t imagine trying to configure it without a PC. An added bonus is that even if you break the remote all your settings are kept with Logitech and can be synchronised back down.

Batteries (4xAAA) lasted around 4-5 months. Some of the more expensive Harmony remotes have colour screens and recharge an internal battery.. I’m really not that bothered about seeing the screen in colour and having to dock the thing to recharge it seems like a hassle & is another charger to add to the drawer.

After 6 months of use I’m still happy with it, and I’d recommend the Harmony 555 to anyone who wants a completely customisable universal remote.

USB Detect & Launch Version 1.5 Released

USB D&L USB Detect & Launch allows you to automatically execute a script or application each time a USB storage device is plugged into your PC. Different scripts can be executed for different devices and it’s the volume label that determines what action to perform.

Version 1.5 contains new functionality to monitor for any device being plugged in; useful when you have no control over what memory stick is being inserted, but need to fire off a script to perform a particular action.


exec:”c:batchbatch-any.cmd” %1 %2

You can find the download on the USB Detect & Launch page.

File Mover 1.9 Released

File mover is useful little utility that will move files from one folder to another. This is useful when a program (or remote server) dumps files into a folder & you want to move them somewhere else. An added bonus with this utility is that it’ll (optionally) run a program each time a file is moved; this could be useful for firing off email notification.

Version 1.9 has been released and includes some small fixes and enhancements. E.g. copy from log now works, and the app doesn’t freeze when executing a script in ‘Wait for executed process’ mode.

You can find the download on the File Mover page.

Drive Map Pro 1.6 Released

Drive Map Pro is a great piece of Windows software for organising all the servers you connect to. It’s primary purpose is to give you easy access to mapping a network drive with the minimum of fuss, however it does a lot more that that, including managing your VNC/Radmin connections too!

The latest version of Drive Map Pro (version 1.6) is now available to registered users and includes the following:

  • Lots of bug-fixes :-D
  • Ability to have multiple UNC drive mappings under one entry, syntax is ‘\serverc$,d$,whatever’, which gives you the ability to map to any/all 3 of those drives without clogging up your list of servers!
  • Middle-click launches the application you’ve associated with the server.. saves a click or two!
  • Store notes against each entry.. handy for storing box info, like who’s the administrator
  • More application preferences (like auto-hide DriveMapPRO after launching an application)

Click here for more information on Drive Map Pro.

Drive Map Pro 1.6

Mapping a drive has never been easier!!

Topfield TF5800 – a hacker’s PVR :)

The Netgem iPlayer I’ve had for watching Freeview doesn’t provide any PVR functionality, so I’ve been looking for a replacement that does everything I want. It was between the Humax 9600 and the Topfield TF5800. After a lot of research I went for the Topfield.

The thing that swung it for is that the Toppy is extremely configurable due to 1) the custom firmwares 2) the user-built applications (TAPs) that are available.

Between the firmwares and the TAPs you can customise almost anything! For example, on the standard box the display on the front will show the time when in standby, and the channel number when it’s switched on. That’s not something I care for.. I can see the channel I’m watching and the time is more useful to me. Someone else obviously thought the same, and they’ve created a TAP (TF5000Display) to completely customise the display to your needs, doing way more than what I needed.

First Things First

Setting the box up wasn’t as arduous as I thought it was going to be. After rigging it up to the TV and making sure everything worked, I fired up my laptop and installed the Topfield Tools suite, together with the USB Driver for Windows XP. Easy so far.


Next I downloaded the firmware I wanted to install. This was from Toppy.org.uk and required me to sign up for their forums, and that gave me a login for the main site that brings up a new menu where you can download new (and beta) firmwares. I chose the 5.13.65 release which was recommended by the site.

The firmware can then be (optionally) patched with extra fixes which have been community-written. To work out which ones I wanted to integrate into the firmware I read this topic and downloaded FWPatcher & PatchPackV2 which contained everything I needed.

The patches I chose were:

  • [C0] NoCYR
  • [Cy] NotCYR_02
  • [H] HDDPatch_03
  • [I] PBSiS
  • [P] PowerRestore_05
  • [R] RecRoundel
  • [S] StartupPatch_03
  • [T2] TimerPatchT2b
  • [Ts] TimerSetting_02
  • [T] TimerPatch_04b
  • [Wf] WindFaster_02
  • [Xp] PlayNoCYR_04
  • [Xw] WatchNoCYR_03
  • [Z] Disable0AspectSwitching

After integrating the patches the next step was to blow it onto the Toppy using the firmware utility in Topfield Tools.

The process was surprisingly easy and the online documentation is good if you get lost.


There’s only so much you can stuff into 1.5mb of firmware, and Topfield were considerate enough to allow people to program applications, a bit like plug-ins, which have access to an API provided by the company. That allows these programs to access things like EPG data or write out to the screen.

The standard EPG that ships with the box isn’t great.. but add the MyStuff TAP and the unit is completely transformed with a highly customisable, and skinnable EPG. There’s even a 71-page PDF manual for MyStuff! Here are 3 things you can customise (out of a list of maybe a hundred):

  • Show/hide channel logos
  • Choose how many hours to display in the EPG window (3hrs seems sensible)
  • How many channels to display per EPG page (8 suits me!)

The TAPs I added on day 1 were:

  • MyStuff (which adds a few of it’s own, including one that scrapes EPG data)
  • Display
  • PowerDown
  • TAPCommander


The standard Topfield box is okay. And it’ll probably be a lot better with the new firmware that will be released shortly that features in the new TF5810 and conforms to the Freeplay standard. However, with the custom firmware and TAPs (especially MyStuff) the box is awesome and I’m having a great time configuring it to be exactly what I want from a Freeview PVR box. Kudos to the user-community who put so much time into developing the patches and TAPs!! And thanks to Topfield for being forward-thinking enough to open it up enough to allow these mods to be written.. if only more manufacturers did this!!!

Quick Video Demo

This is a demo showing what the Topfield PVR looks like once the MyStuff application has replaced the standard UI.

At the start of the video you’ll see the default Toppy UI, then I fire up MyStuff where you’ll see the difference straight away.

After viewing the EPG I navigate around a bit, then show a MyStuff settings page to give you an idea of how many things you can configure.

I go on to show a few more things including setting series link (via a Search), and a some of the standard Topfield things like pausing live TV, PiP, etc.

Near the end I dip into TAPCommander which helps you configure any user-written apps you’ve got loaded into memory.

This covers only a small portion of what the box is capable of and is only meant as a taster :)

File Mover 1.8 Released

New features in this release are:

  • Force “first-in, first-out” queueing of files.. files will be processed in date order (oldest first).
  • Wait for executed script to finish before processing the next file (useful when FIFO queue is being used, or when your script is so intensive you don’t want >1 process running)

Click over to the software page for the download.

XBMC Script – Caller Id 1.3 Released

This script for XBMC allows you to display details of incoming calls. Full details on how to get this up and running are on this page; you’ll need the right kind of modem attached to a PC running software like YAC.

The latest versions of the Caller Id script now include:

  • Play a sound when a call is displayed (optional)
  • Support for Switchboard by James Traynor merged into this release
  • Small bugfixes around which name to display
  • Better logging so it’s easier to debug when things go wrong :)
  • Pause playback option (optional)
  • When YAC has passed a name, display that rather than the number
  • Display an initialisation message when script starts (optional)
  • Code to allow this to run in Python emulator on a PC

You can find the script at XBMCScripts.com.

File Mover 1.7 Released (bugfix only)

This is a minor bugfix release. I noticed that when multiple files are moved during 1 iteration of the timer, the same piece of exec script is run each time, i.e. it didn’t run for each individual file, just the first one it moved.

Click over to the software page for the download.

File Mover Version 1.6 Released

This is a minor release and gives the application more resilience around folder availability, i.e. it can handle when a UNC drive isn’t available for copying from/to.

Click over to the software page for the download.

USB Detect & Launch Version 1.4 Released

USB D&L This new version includes the ability to detect when devices with no label are inserted. This is handy when you have a whole stack of new devices that you need to put data onto.

Here’s an example of the syntax you’d use:

label:(no label)
exec:”c:\batch\batch-no-label.cmd” %1 %2

Click over to the software page for the download.

New App: Screen Saver Killer

Some businesses enforce a corporate policy whereby your screensaver is set globally and is locked down so that you can’t change the settings.

In a whole bunch of scenarios, this is the last thing you want. Here are a few examples:

  • During a presentation consisting of a video, the screen saver will activate after the period defined by your IT department
  • On the big screens they put up on walls to show corporate messages/stats/etc you don’t want the screen saver activating when these screens are driven by a PC which is logged into a user account.
  • You’re not working on your laptop, but have the screen open so that you can keep an eye on your inbox, or a system monitor tool. If the screen saver kicks in every 10 minutes it can get very tedious unlocking the thing each time >:-(

Screen Saver Killer is a very simple app that will give you back control over your screen saver settings.

Click through for the download.

Spoken Caller Id on your PC using YAC

My project to get Caller ID detected on a PC off a UK landline is nearly complete. Click here to read about the full project, which includes finding a compatible modem, sending the caller ID to other PCs (or XBMC) on your network, and generating an RSS feed of incoming calls.

On my gaming box, the standard YAC notifications for a new call won’t be seen whilst I’m actually in a game:


Having the option for the PC read out the caller information would overcome this. YAC in it’s current incarnation (v0.16) doesn’t support speech, but fortunately the author has made the source code available under the GPL :-)

Extending YAC

The changes I made to YAC were kept as generic as possible (i.e. they’re not specifically tied to text-to-speech). When an incoming call is detected by YAC it does the usual notifications, but also executes a script called yac-helper.cmd (if it exists in the same folder as yac.exe).

Parameters are passed into yac-helper.cmd that enable you to do whatever you like with the incoming call. In my case, I’m simply passing control to a piece of VBScript that instantiates the Microsoft text-to-speech engine.

Sample Scripting

Here’s some sample code (which is included in the unofficial YAC 0.17 build I’m hosting on this site):


@echo off

rem  ----------------------------------------------------------
rem  Matt Collinge :: www.mattcollinge.co.uk :: 17 April 2007
rem  ----------------------------------------------------------
rem  Helper Script for YAC 0.17. When present in the same 
rem  folder as "yac.exe" this will be run each time a call is 
rem  received. The type of data being passed through 
rem  in %2 & %3 is specified in %1. 
rem    %1 = ( call | message )
rem    %2 = either the calling number or text-based message
rem    %3 = the calling name (not set for a text-based message)
rem  ----------------------------------------------------------

rem This next line simply passes the parameters on to a piece of VBScript. But you can
rem modify this line to call any app you like :)

wscript "c:\\yac\\yac-speech.vbs" %1 %2 %3


' --------------------------------------------------------
' Matt Collinge :: www.mattcollinge.co.uk :: 17 April 2007
' --------------------------------------------------------
' Take an incoming call from YAC and use the default voice
' to speak it back to the user.
' --------------------------------------------------------

Dim voic
Dim message
Dim messagePrefix

calltype = WScript.Arguments(0)

Set voic = WScript.CreateObject("SAPI.SpVoice")
Set voic.voice = voic.GetVoices("", "Language=809").Item(0)

select case calltype
	case "call"
		sNumber = WScript.Arguments(1)
		sName = WScript.Arguments(2)
		if (sName = "No Name") then
			messagePrefix = "Incoming call from number "
			message = sNumber
			messagePrefix = "Incoming call from "
			message = sName
		end if
	case "message"
		message = WScript.Arguments(1)
		messagePrefix = "Incoming message "
end select

voic.Speak(messagePrefix + message)

Set voic = nothing

Job Done

When an incoming call is sent to the YAC listener on my gaming PC, it will fire the scripts above and text-to-speech allows it to read out the caller info. Dead simple really.


The default voices that are installed with XP are pretty basic, but you can buy others that sound spot on. Try out the AT&T Natural Voices demo for an idea of how good it can sound.


Below you’ll find an unofficial build of YAC 0.17 (which I’m hosting until the original author integrates similar changes into the main build). Full source code for this build is also available, and is licensed under the GPL.

YAC 0.17 binaries for win32 (tested on XP)
YAC 0.17 source code

Build 0.17 Installation Instructions

I couldn’t be bothered creating an installer for this unofficial build. You’ve read this far so you must like messing with code, and don’t mind extracting a few files from a .zip

  • First off install 0.16 from the original author’s website
  • Next, simply extract the files in the binaries .zip file over the top of the 0.16 files
  • Edit yac-helper.cmd to your liking (including the path to yac-speech.vbs if you’re trying this example)
  • Run YAC and try testing the listeners to see if everything works

Caller Id Revisited

For a while the caller id project has been on the back burner as I’ve been working on other things and have upgraded my gaming PC. I’ve now got the time and inclination to revisit the caller id project in an attempt to get a reliable/working solution.

The aim of the project is to detect an incoming phone call and do the following:

  • Log the call to an RSS feed (useful for knowing when someone important has tried to contact me whilst I’m at work)
  • Broadcast the caller id info to devices on my network. This includes the Xbox running XMBC and CallerIdLite, a couple of laptops, and a gaming PC.

Detecting an incoming call is achieved by attaching a suitable modem to a server & have the PC log the call.

Although I initially had the US Robotics modem working, it suffered from the DSR Drop problem and I never did get a permanent fix :( In the end, I sold it on eBay and bought a different brand.

I’m now using an external Pace 56 Voice Modem (firmware drivers available here and modified modem driver that supports calller id in the UK here) which works perfectly and gives me an opportunity to complete this project.

Now that the incoming calls are reliably detected and the caller id is being distributed across devices on the network using YAC, the one thing left to perfect is the notification on my gaming PC. In a game the standard YAC popup won’t be visible, therefore the ideal solution is for the id to be read out using text-to-speech :-)

YAC doesn’t currently support this kind of thing, but fortunately the guy who wrote it made the source code available under the GPL. My next post will cover how I’ve extended YAC to do text-to-speech.

USB Detect & Launch Version 1.3 Released

USB Detect & Launch has been enhanced to allow you to execute a custom script from the system tray menu. The option appears only when you’ve inserted the USB device. The idea behind this is that after the initial insertion event you can fire an automatic script to perform an action, then before you eject it you can use the system tray menu to fire off another script.

To use this feature, simply add a line under your device called menurun. E.g.

“c:\win32app\startup\batch-insert-pendrive.cmd” %2
menurun:”c:\win32app\startup\batch-eject-pendrive.cmd” %2

One utility you might find useful to use in conjunction with your scripts is USBDeview. This will allow you to issue a ‘Safely Remove Hardware’ command from your script.

Click over to the software page for the download.

USB Detect & Launch Version 1.2 Released

This new version allows you to specify drives that USB Detect & Launch will ignore. This is useful if you need to improve performance on a PC where you’ve got devices (including mapped drives) that are slow to poll. It may also prevent sleeping drives from spinning up, although I haven’t tested this myself :-)

The ignore list is specified as a comma-separated list of drive letters, e.g.


Click over to the software page for the download.