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 ... gcc -o leetphone leetphone.c -lusbmuxd