Load a precalculated version of ld.so.cache on startup

ctypes uses ldconfig to find libraries.  ldconfig caches its findings
about installed libraries in ld.so.cache.  We haven't shipped an
ld.so.cache on the BeagleBoard image, which means that from cold
ldconfig takes ages to run (it's like seconds...).  It would therefore
be inconvenient to run ldconfig from cold on every startup.

So this patch adds an ld.so.cache that I just generated on a
BeagleBoard to robot.zip.  It modifies run.py to install this cache
file in the right place upon startup.
Update servo firmware blobs to latest

That'd be 311be6486649eccef9cf440b580d8ec1c6ec0e0c in servo-fw.git

This firmware does the not-driving-servos-until-told-to-thing.
Add a simple application to indicate that firmware is being updated
Update power board firmware

Commit b0b503702cc9ba06d358ba9492efe00c0750f0d0 in power-fw.git

Firmware version set to 1

This firmware update increases the battery-flat cut-off threshold to
3.4V per cell.
Change fwsplash to use a progress bar rather than a spinner

The spinner widget isn't available in the GTK version installed on
the power board.
Add libelf.so from OE

From sr-oe.git rev 4d787b4921b28a3361e7afb346ee0ddcd6e7178c
Exchange libelf from elfutils for libelf from libelf!

OE provides two packages with libelf: elfutils and libelf.  flashb
appears to want the latter at the moment, presumably because it was
built against it.  I'm going to comply with its wishes.
Run flashb on startup to potentially flash the power board

We're going to ship an update soon :-S
Run fwsplash whilst updating firmware

At the moment, run it *every* time we boot, regardless of whether we
need to update anything.
Set the fwsplash text to wrap and be centre justified

The text was too wide to fit on the power board display.
Merge branch 'master' of srobo.org:/srv/git/pyenv
Restart sricd if some firmware was updated

There's no neat way of determining if some firmware was updated right
now, so this is a bit hacky.  Search through the output of flashb to
determine if flashb actually performed an update.
Add support for reading the battery status

This adds a new attribute to the power class to read the battery status.
Both the voltage of the battery and current being drawn can be read.

Example usage:

from sr import *
R = Robot()
print R.power.battery.voltage
Add a docstring to TSSricDevice

Since I was here, I figured I'd add a small nugget of docs ;-)
Add a TSSricDevice wrapper providing a device-specific lock

Some things we would do with the boards involve multiple SRIC
transactions, such as setting a single output pin, or toggling an LED
on the power board.  These transactions were not protected by a lock,
so incorrect things would occur if two threads both attempted to
perform one of these multi-transaction operations at the same time.

This patch adds a wrapper class around TSSricDevice, which is the
class that all the Python libraries use to access devices at the
moment.  This wrapper class, called LockableDev, essentially adds one
thing to TSSricDevice: a lock.  The lock *must* be acquired before any
actions are performed on the LockableDev.

Python threading.Lock objects can be used with Python's 'with'
statement, which makes using this lock extremely straightforward.  For
example, given a LockableDev instance d:

with d.lock:
   d.txrx( ... )
   ... munge some things ...
   d.txrx( ... )

LockableDev also wraps the TSSricDevice's txrx function to check that
it is being called whilst the lock is held.  This will assist mainly
in development, catching cases where someone has attempted to do
something with the LockableDev without first acquiring the lock
first.  This performs no checking that the thread that holds the lock
is the thread that's attempting to do things.  So, this will only
assist in testing and will catch all fail in single-threaded cases,
which IMO makes it quite valuable...

Issue first described in trac #1096.
Switch to using locks for JointIO transactions

Some JointIO operations are read-modify-write operations, so these
require locks around them.  This patch switches the JointIO board over
to using the LockableDev wrapper that was introduced in the last commit.
Use LockableDev for power board sric transactions

The power board LED operations are read-modify-write, so this requires
a lock.
Update power board firmware

Commit 0189f36d266cef932f65c7cc4483e57ddf1011d4 in power-fw.git

Firmware version number 2

This update adds SRIC commands to read the battery voltage and current.
It also adds some code to filter the values read through the ADC as
they're very noisy.
Merge branch 'master' into ld-cache

Resolves an conflict in the import lines of pyenv/run.py
Merge branch 'master' into trans-lock