Background
==========

'libusbmuxd' makes it really simple to talk to a running 'usbmuxd' and
hides all the details for you.  There are two function calls:

usbmuxd_scan()
--------------

This returns a list of all available iPhone-like devices that are
available for talking to.  The returned array contains the USB
product_id, hex formatted serial_number of any iPhones/iTouches and a
non-descript 'handle' for all those devices that are within range (as
of March 2009, that means a device directly plugged into the
computer's USB port).

Once you have found the device you want to communicate with, take its
'handle' and pass this to usbmuxd_connect().

usbmuxd_connect()
-----------------

This takes a handle, a destination port number and tries to setup
a proxy a connection.  It returns a file-descriptor which you should
be able to read(), write() and select() on like any other active network
socket connection.


Technical details
=================

When usbmuxd is running (normally started, or stopped as a result of
'udev' auto-insertion messages), it provides a socket interface in
'/var/run/usbmuxd' that is designed to be compatible with the socket
interface that is provided on MacOSX.

The structures for communicating over this device are documented
in the 'usbmuxd-proto.h', but you shouldn't need to view them 
directly if you are using the libusbmuxd.so library for easy access.


Example
=======

#include <usbmuxd.h>

...

gcc -o leetphone leetphone.c -lusbmuxd

